@plait/core 0.52.0 → 0.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/board/board.component.d.ts +1 -1
- package/constants/cursor.d.ts +1 -0
- package/esm2022/board/board.component.mjs +3 -3
- package/esm2022/constants/cursor.mjs +2 -1
- package/esm2022/interfaces/board.mjs +1 -1
- package/esm2022/plugins/create-board.mjs +3 -2
- package/esm2022/plugins/with-moving.mjs +36 -17
- package/esm2022/plugins/with-related-fragment.mjs +20 -0
- package/esm2022/plugins/with-selection.mjs +32 -98
- package/esm2022/public-api.mjs +2 -1
- package/esm2022/transforms/group.mjs +47 -0
- package/esm2022/transforms/index.mjs +2 -1
- package/esm2022/utils/angle.mjs +75 -0
- package/esm2022/utils/debug.mjs +76 -0
- package/esm2022/utils/element.mjs +17 -5
- package/esm2022/utils/group.mjs +79 -84
- package/esm2022/utils/helper.mjs +10 -1
- package/esm2022/utils/index.mjs +2 -1
- package/esm2022/utils/math.mjs +11 -1
- package/esm2022/utils/selection.mjs +89 -3
- package/esm2022/utils/touch.mjs +15 -4
- package/fesm2022/plait-core.mjs +1331 -1072
- package/fesm2022/plait-core.mjs.map +1 -1
- package/interfaces/board.d.ts +1 -0
- package/package.json +1 -1
- package/plugins/with-moving.d.ts +1 -1
- package/plugins/with-related-fragment.d.ts +2 -0
- package/public-api.d.ts +1 -0
- package/transforms/group.d.ts +7 -0
- package/transforms/index.d.ts +1 -0
- package/utils/angle.d.ts +13 -0
- package/utils/debug.d.ts +13 -0
- package/utils/group.d.ts +15 -15
- package/utils/helper.d.ts +2 -0
- package/utils/index.d.ts +1 -0
- package/utils/math.d.ts +8 -0
- package/utils/selection.d.ts +6 -3
- package/utils/touch.d.ts +1 -1
- package/esm2022/plugins/with-group.mjs +0 -27
- package/plugins/with-group.d.ts +0 -2
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { PlaitBoard } from '../interfaces';
|
|
2
|
+
import { getHighestSelectedGroups, getSelectedIsolatedElementsCanAddToGroup, createGroup, canAddGroup, hasSelectedElementsInSameGroup, canRemoveGroup, findElements } from '../utils';
|
|
3
|
+
import { NodeTransforms } from './node';
|
|
4
|
+
export const addGroup = (board, elements) => {
|
|
5
|
+
const selectedGroups = getHighestSelectedGroups(board, elements);
|
|
6
|
+
const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);
|
|
7
|
+
const highestSelectedElements = [...selectedGroups, ...selectedIsolatedElements];
|
|
8
|
+
const group = createGroup();
|
|
9
|
+
if (canAddGroup(board)) {
|
|
10
|
+
highestSelectedElements.forEach(item => {
|
|
11
|
+
const path = PlaitBoard.findPath(board, item);
|
|
12
|
+
NodeTransforms.setNode(board, { groupId: group.id }, path);
|
|
13
|
+
});
|
|
14
|
+
if (hasSelectedElementsInSameGroup(highestSelectedElements)) {
|
|
15
|
+
const newGroupId = selectedIsolatedElements[0].groupId;
|
|
16
|
+
NodeTransforms.insertNode(board, {
|
|
17
|
+
...group,
|
|
18
|
+
groupId: newGroupId
|
|
19
|
+
}, [board.children.length]);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
NodeTransforms.insertNode(board, group, [board.children.length]);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
export const removeGroup = (board, elements) => {
|
|
27
|
+
const selectedGroups = getHighestSelectedGroups(board, elements);
|
|
28
|
+
if (canRemoveGroup(board)) {
|
|
29
|
+
selectedGroups.map(group => {
|
|
30
|
+
const elementsInGroup = findElements(board, {
|
|
31
|
+
match: item => item.groupId === group.id,
|
|
32
|
+
recursion: () => false
|
|
33
|
+
});
|
|
34
|
+
elementsInGroup.forEach(item => {
|
|
35
|
+
const path = PlaitBoard.findPath(board, item);
|
|
36
|
+
NodeTransforms.setNode(board, { groupId: group.groupId || undefined }, path);
|
|
37
|
+
});
|
|
38
|
+
const groupPath = PlaitBoard.findPath(board, group);
|
|
39
|
+
NodeTransforms.removeNode(board, groupPath);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
export const GroupTransforms = {
|
|
44
|
+
addGroup,
|
|
45
|
+
removeGroup
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy90cmFuc2Zvcm1zL2dyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFDSCx3QkFBd0IsRUFDeEIsd0NBQXdDLEVBQ3hDLFdBQVcsRUFDWCxXQUFXLEVBQ1gsOEJBQThCLEVBQzlCLGNBQWMsRUFDZCxZQUFZLEVBQ2YsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV4QyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFFBQXlCLEVBQUUsRUFBRTtJQUNyRSxNQUFNLGNBQWMsR0FBRyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakUsTUFBTSx3QkFBd0IsR0FBRyx3Q0FBd0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRixNQUFNLHVCQUF1QixHQUFHLENBQUMsR0FBRyxjQUFjLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sS0FBSyxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQzVCLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckIsdUJBQXVCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25DLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksOEJBQThCLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDO1lBQzFELE1BQU0sVUFBVSxHQUFHLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN2RCxjQUFjLENBQUMsVUFBVSxDQUNyQixLQUFLLEVBQ0w7Z0JBQ0ksR0FBRyxLQUFLO2dCQUNSLE9BQU8sRUFBRSxVQUFVO2FBQ3RCLEVBQ0QsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUMxQixDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDSixjQUFjLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNMLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFFBQXlCLEVBQUUsRUFBRTtJQUN4RSxNQUFNLGNBQWMsR0FBRyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakUsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4QixjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUU7Z0JBQ3hDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQ3hDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLO2FBQ3pCLENBQUMsQ0FBQztZQUNILGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM5QyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2pGLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEQsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzNCLFFBQVE7SUFDUixXQUFXO0NBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgICBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cHMsXG4gICAgZ2V0U2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzQ2FuQWRkVG9Hcm91cCxcbiAgICBjcmVhdGVHcm91cCxcbiAgICBjYW5BZGRHcm91cCxcbiAgICBoYXNTZWxlY3RlZEVsZW1lbnRzSW5TYW1lR3JvdXAsXG4gICAgY2FuUmVtb3ZlR3JvdXAsXG4gICAgZmluZEVsZW1lbnRzXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IE5vZGVUcmFuc2Zvcm1zIH0gZnJvbSAnLi9ub2RlJztcblxuZXhwb3J0IGNvbnN0IGFkZEdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cHMoYm9hcmQsIGVsZW1lbnRzKTtcbiAgICBjb25zdCBzZWxlY3RlZElzb2xhdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZElzb2xhdGVkRWxlbWVudHNDYW5BZGRUb0dyb3VwKGJvYXJkKTtcbiAgICBjb25zdCBoaWdoZXN0U2VsZWN0ZWRFbGVtZW50cyA9IFsuLi5zZWxlY3RlZEdyb3VwcywgLi4uc2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzXTtcbiAgICBjb25zdCBncm91cCA9IGNyZWF0ZUdyb3VwKCk7XG4gICAgaWYgKGNhbkFkZEdyb3VwKGJvYXJkKSkge1xuICAgICAgICBoaWdoZXN0U2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGl0ZW0pO1xuICAgICAgICAgICAgTm9kZVRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBncm91cElkOiBncm91cC5pZCB9LCBwYXRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChoYXNTZWxlY3RlZEVsZW1lbnRzSW5TYW1lR3JvdXAoaGlnaGVzdFNlbGVjdGVkRWxlbWVudHMpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdHcm91cElkID0gc2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzWzBdLmdyb3VwSWQ7XG4gICAgICAgICAgICBOb2RlVHJhbnNmb3Jtcy5pbnNlcnROb2RlKFxuICAgICAgICAgICAgICAgIGJvYXJkLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IG5ld0dyb3VwSWRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtib2FyZC5jaGlsZHJlbi5sZW5ndGhdXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgTm9kZVRyYW5zZm9ybXMuaW5zZXJ0Tm9kZShib2FyZCwgZ3JvdXAsIFtib2FyZC5jaGlsZHJlbi5sZW5ndGhdKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzID0gZ2V0SGlnaGVzdFNlbGVjdGVkR3JvdXBzKGJvYXJkLCBlbGVtZW50cyk7XG4gICAgaWYgKGNhblJlbW92ZUdyb3VwKGJvYXJkKSkge1xuICAgICAgICBzZWxlY3RlZEdyb3Vwcy5tYXAoZ3JvdXAgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHNJbkdyb3VwID0gZmluZEVsZW1lbnRzKGJvYXJkLCB7XG4gICAgICAgICAgICAgICAgbWF0Y2g6IGl0ZW0gPT4gaXRlbS5ncm91cElkID09PSBncm91cC5pZCxcbiAgICAgICAgICAgICAgICByZWN1cnNpb246ICgpID0+IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVsZW1lbnRzSW5Hcm91cC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBpdGVtKTtcbiAgICAgICAgICAgICAgICBOb2RlVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IGdyb3VwSWQ6IGdyb3VwLmdyb3VwSWQgfHwgdW5kZWZpbmVkIH0sIHBhdGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBncm91cFBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBncm91cCk7XG4gICAgICAgICAgICBOb2RlVHJhbnNmb3Jtcy5yZW1vdmVOb2RlKGJvYXJkLCBncm91cFBhdGgpO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgR3JvdXBUcmFuc2Zvcm1zID0ge1xuICAgIGFkZEdyb3VwLFxuICAgIHJlbW92ZUdyb3VwXG59O1xuIl19
|
|
@@ -4,10 +4,11 @@ import { SelectionTransforms } from './selection';
|
|
|
4
4
|
import { ViewportTransforms } from './viewport';
|
|
5
5
|
export { BoardTransforms } from './board';
|
|
6
6
|
export { CoreTransforms } from './element';
|
|
7
|
+
export { GroupTransforms } from './group';
|
|
7
8
|
export const Transforms = {
|
|
8
9
|
...GeneralTransforms,
|
|
9
10
|
...ViewportTransforms,
|
|
10
11
|
...SelectionTransforms,
|
|
11
12
|
...NodeTransforms
|
|
12
13
|
};
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy90cmFuc2Zvcm1zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFrRjtJQUNyRyxHQUFHLGlCQUFpQjtJQUNwQixHQUFHLGtCQUFrQjtJQUNyQixHQUFHLG1CQUFtQjtJQUN0QixHQUFHLGNBQWM7Q0FDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdlbmVyYWxUcmFuc2Zvcm1zIH0gZnJvbSAnLi9nZW5lcmFsJztcbmltcG9ydCB7IE5vZGVUcmFuc2Zvcm1zIH0gZnJvbSAnLi9ub2RlJztcbmltcG9ydCB7IFNlbGVjdGlvblRyYW5zZm9ybXMgfSBmcm9tICcuL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBWaWV3cG9ydFRyYW5zZm9ybXMgfSBmcm9tICcuL3ZpZXdwb3J0JztcblxuZXhwb3J0IHsgQm9hcmRUcmFuc2Zvcm1zIH0gZnJvbSAnLi9ib2FyZCc7XG5leHBvcnQgeyBDb3JlVHJhbnNmb3JtcyB9IGZyb20gJy4vZWxlbWVudCc7XG5leHBvcnQgeyBHcm91cFRyYW5zZm9ybXMgfSBmcm9tICcuL2dyb3VwJztcblxuZXhwb3J0IGNvbnN0IFRyYW5zZm9ybXM6IEdlbmVyYWxUcmFuc2Zvcm1zICYgVmlld3BvcnRUcmFuc2Zvcm1zICYgU2VsZWN0aW9uVHJhbnNmb3JtcyAmIE5vZGVUcmFuc2Zvcm1zID0ge1xuICAgIC4uLkdlbmVyYWxUcmFuc2Zvcm1zLFxuICAgIC4uLlZpZXdwb3J0VHJhbnNmb3JtcyxcbiAgICAuLi5TZWxlY3Rpb25UcmFuc2Zvcm1zLFxuICAgIC4uLk5vZGVUcmFuc2Zvcm1zXG59O1xuIl19
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { RectangleClient } from '../interfaces';
|
|
2
|
+
import { approximately, rotate } from './math';
|
|
3
|
+
export const rotatePoints = (points, centerPoint, angle) => {
|
|
4
|
+
if (!angle) {
|
|
5
|
+
angle = 0;
|
|
6
|
+
}
|
|
7
|
+
if (Array.isArray(points) && typeof points[0] === 'number') {
|
|
8
|
+
return rotate(points[0], points[1], centerPoint[0], centerPoint[1], angle);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
return points.map(point => {
|
|
12
|
+
return rotate(point[0], point[1], centerPoint[0], centerPoint[1], angle);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export const getSelectionAngle = (elements) => {
|
|
17
|
+
let angle = elements[0]?.angle || 0;
|
|
18
|
+
elements.forEach(item => {
|
|
19
|
+
if (item.angle !== angle && !approximately((item.angle % (Math.PI / 2)) - (angle % (Math.PI / 2)), 0)) {
|
|
20
|
+
angle = 0;
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
return angle;
|
|
24
|
+
};
|
|
25
|
+
export const hasSameAngle = (elements) => {
|
|
26
|
+
return !!getSelectionAngle(elements);
|
|
27
|
+
};
|
|
28
|
+
export const getRotatedBoundingRectangle = (rectanglesCornerPoints, angle) => {
|
|
29
|
+
let rectanglesFromOrigin = [];
|
|
30
|
+
for (let i = 0; i < rectanglesCornerPoints.length; i++) {
|
|
31
|
+
const cornerPoints = rectanglesCornerPoints[i];
|
|
32
|
+
const invertCornerPointsFromOrigin = rotatePoints(cornerPoints, [0, 0], -angle);
|
|
33
|
+
rectanglesFromOrigin.push(RectangleClient.getRectangleByPoints(invertCornerPointsFromOrigin));
|
|
34
|
+
}
|
|
35
|
+
const selectionRectangleFromOrigin = RectangleClient.getBoundingRectangle(rectanglesFromOrigin);
|
|
36
|
+
const selectionCornerPoints = RectangleClient.getCornerPoints(selectionRectangleFromOrigin);
|
|
37
|
+
const cornerPointsFromOrigin = rotatePoints(selectionCornerPoints, [0, 0], angle);
|
|
38
|
+
const centerPoint = RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(cornerPointsFromOrigin));
|
|
39
|
+
return RectangleClient.getRectangleByPoints(rotatePoints(cornerPointsFromOrigin, centerPoint, -angle));
|
|
40
|
+
};
|
|
41
|
+
export const getOffsetAfterRotate = (rectangle, rotateCenterPoint, angle) => {
|
|
42
|
+
const targetCenterPoint = RectangleClient.getCenterPoint(rectangle);
|
|
43
|
+
const [rotatedCenterPoint] = rotatePoints([targetCenterPoint], rotateCenterPoint, angle);
|
|
44
|
+
const offsetX = rotatedCenterPoint[0] - targetCenterPoint[0];
|
|
45
|
+
const offsetY = rotatedCenterPoint[1] - targetCenterPoint[1];
|
|
46
|
+
return { offsetX, offsetY };
|
|
47
|
+
};
|
|
48
|
+
export const rotatedDataPoints = (points, rotateCenterPoint, angle) => {
|
|
49
|
+
const { offsetX, offsetY } = getOffsetAfterRotate(RectangleClient.getRectangleByPoints(points), rotateCenterPoint, angle);
|
|
50
|
+
return points.map(p => [p[0] + offsetX, p[1] + offsetY]);
|
|
51
|
+
};
|
|
52
|
+
export const hasValidAngle = (node) => {
|
|
53
|
+
return node.angle && node.angle !== 0;
|
|
54
|
+
};
|
|
55
|
+
export const rotatePointsByElement = (points, element) => {
|
|
56
|
+
if (hasValidAngle(element)) {
|
|
57
|
+
let rectangle = RectangleClient.getRectangleByPoints(element.points);
|
|
58
|
+
const centerPoint = RectangleClient.getCenterPoint(rectangle);
|
|
59
|
+
return rotatePoints(points, centerPoint, element.angle);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
export const rotateAntiPointsByElement = (points, element) => {
|
|
66
|
+
if (hasValidAngle(element)) {
|
|
67
|
+
let rectangle = RectangleClient.getRectangleByPoints(element.points);
|
|
68
|
+
const centerPoint = RectangleClient.getCenterPoint(rectangle);
|
|
69
|
+
return rotatePoints(points, centerPoint, -element.angle);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5nbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9hbmdsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBSSxNQUFTLEVBQUUsV0FBa0IsRUFBRSxLQUFhLEVBQUssRUFBRTtJQUMvRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDVCxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN6RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFNLENBQUM7SUFDcEYsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFRLE1BQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25DLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RSxDQUFDLENBQU0sQ0FBQztJQUNaLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFFBQXdCLEVBQUUsRUFBRTtJQUMxRCxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3BCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQXdCLEVBQUUsRUFBRTtJQUNyRCxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLHNCQUFzRCxFQUFFLEtBQWEsRUFBRSxFQUFFO0lBQ2pILElBQUksb0JBQW9CLEdBQXNCLEVBQUUsQ0FBQztJQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDckQsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsTUFBTSw0QkFBNEIsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEYsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELE1BQU0sNEJBQTRCLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEcsTUFBTSxxQkFBcUIsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDNUYsTUFBTSxzQkFBc0IsR0FBRyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEYsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQ2pILE9BQU8sZUFBZSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNHLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsU0FBMEIsRUFBRSxpQkFBd0IsRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUN4RyxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6RixNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ2hDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBZSxFQUFFLGlCQUF3QixFQUFFLEtBQWEsRUFBVyxFQUFFO0lBQ25HLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsb0JBQW9CLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFILE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQVksQ0FBQztBQUN4RSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFrQixFQUFFLEVBQUU7SUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUksTUFBUyxFQUFFLE9BQXFCLEVBQVksRUFBRTtJQUNuRixJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3pCLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsTUFBTyxDQUFDLENBQUM7UUFDdEUsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5RCxPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFJLE1BQVMsRUFBRSxPQUFxQixFQUFZLEVBQUU7SUFDdkYsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN6QixJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU8sQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUQsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RCxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEVsZW1lbnQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGFwcHJveGltYXRlbHksIHJvdGF0ZSB9IGZyb20gJy4vbWF0aCc7XG5cbmV4cG9ydCBjb25zdCByb3RhdGVQb2ludHMgPSA8VD4ocG9pbnRzOiBULCBjZW50ZXJQb2ludDogUG9pbnQsIGFuZ2xlOiBudW1iZXIpOiBUID0+IHtcbiAgICBpZiAoIWFuZ2xlKSB7XG4gICAgICAgIGFuZ2xlID0gMDtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocG9pbnRzKSAmJiB0eXBlb2YgcG9pbnRzWzBdID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gcm90YXRlKHBvaW50c1swXSwgcG9pbnRzWzFdLCBjZW50ZXJQb2ludFswXSwgY2VudGVyUG9pbnRbMV0sIGFuZ2xlKSBhcyBUO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAocG9pbnRzIGFzIFBvaW50W10pLm1hcChwb2ludCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcm90YXRlKHBvaW50WzBdLCBwb2ludFsxXSwgY2VudGVyUG9pbnRbMF0sIGNlbnRlclBvaW50WzFdLCBhbmdsZSk7XG4gICAgICAgIH0pIGFzIFQ7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGlvbkFuZ2xlID0gKGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIGxldCBhbmdsZSA9IGVsZW1lbnRzWzBdPy5hbmdsZSB8fCAwO1xuICAgIGVsZW1lbnRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmFuZ2xlICE9PSBhbmdsZSAmJiAhYXBwcm94aW1hdGVseSgoaXRlbS5hbmdsZSAlIChNYXRoLlBJIC8gMikpIC0gKGFuZ2xlICUgKE1hdGguUEkgLyAyKSksIDApKSB7XG4gICAgICAgICAgICBhbmdsZSA9IDA7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYW5nbGU7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzU2FtZUFuZ2xlID0gKGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIHJldHVybiAhIWdldFNlbGVjdGlvbkFuZ2xlKGVsZW1lbnRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSb3RhdGVkQm91bmRpbmdSZWN0YW5nbGUgPSAocmVjdGFuZ2xlc0Nvcm5lclBvaW50czogW1BvaW50LCBQb2ludCwgUG9pbnQsIFBvaW50XVtdLCBhbmdsZTogbnVtYmVyKSA9PiB7XG4gICAgbGV0IHJlY3RhbmdsZXNGcm9tT3JpZ2luOiBSZWN0YW5nbGVDbGllbnRbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdGFuZ2xlc0Nvcm5lclBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb3JuZXJQb2ludHMgPSByZWN0YW5nbGVzQ29ybmVyUG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBpbnZlcnRDb3JuZXJQb2ludHNGcm9tT3JpZ2luID0gcm90YXRlUG9pbnRzKGNvcm5lclBvaW50cywgWzAsIDBdLCAtYW5nbGUpO1xuICAgICAgICByZWN0YW5nbGVzRnJvbU9yaWdpbi5wdXNoKFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhpbnZlcnRDb3JuZXJQb2ludHNGcm9tT3JpZ2luKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0aW9uUmVjdGFuZ2xlRnJvbU9yaWdpbiA9IFJlY3RhbmdsZUNsaWVudC5nZXRCb3VuZGluZ1JlY3RhbmdsZShyZWN0YW5nbGVzRnJvbU9yaWdpbik7XG4gICAgY29uc3Qgc2VsZWN0aW9uQ29ybmVyUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhzZWxlY3Rpb25SZWN0YW5nbGVGcm9tT3JpZ2luKTtcbiAgICBjb25zdCBjb3JuZXJQb2ludHNGcm9tT3JpZ2luID0gcm90YXRlUG9pbnRzKHNlbGVjdGlvbkNvcm5lclBvaW50cywgWzAsIDBdLCBhbmdsZSk7XG4gICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGNvcm5lclBvaW50c0Zyb21PcmlnaW4pKTtcbiAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJvdGF0ZVBvaW50cyhjb3JuZXJQb2ludHNGcm9tT3JpZ2luLCBjZW50ZXJQb2ludCwgLWFuZ2xlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0T2Zmc2V0QWZ0ZXJSb3RhdGUgPSAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHJvdGF0ZUNlbnRlclBvaW50OiBQb2ludCwgYW5nbGU6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHRhcmdldENlbnRlclBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSk7XG4gICAgY29uc3QgW3JvdGF0ZWRDZW50ZXJQb2ludF0gPSByb3RhdGVQb2ludHMoW3RhcmdldENlbnRlclBvaW50XSwgcm90YXRlQ2VudGVyUG9pbnQsIGFuZ2xlKTtcbiAgICBjb25zdCBvZmZzZXRYID0gcm90YXRlZENlbnRlclBvaW50WzBdIC0gdGFyZ2V0Q2VudGVyUG9pbnRbMF07XG4gICAgY29uc3Qgb2Zmc2V0WSA9IHJvdGF0ZWRDZW50ZXJQb2ludFsxXSAtIHRhcmdldENlbnRlclBvaW50WzFdO1xuICAgIHJldHVybiB7IG9mZnNldFgsIG9mZnNldFkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByb3RhdGVkRGF0YVBvaW50cyA9IChwb2ludHM6IFBvaW50W10sIHJvdGF0ZUNlbnRlclBvaW50OiBQb2ludCwgYW5nbGU6IG51bWJlcik6IFBvaW50W10gPT4ge1xuICAgIGNvbnN0IHsgb2Zmc2V0WCwgb2Zmc2V0WSB9ID0gZ2V0T2Zmc2V0QWZ0ZXJSb3RhdGUoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50cyksIHJvdGF0ZUNlbnRlclBvaW50LCBhbmdsZSk7XG4gICAgcmV0dXJuIHBvaW50cy5tYXAocCA9PiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSkgYXMgUG9pbnRbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNWYWxpZEFuZ2xlID0gKG5vZGU6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBub2RlLmFuZ2xlICYmIG5vZGUuYW5nbGUgIT09IDA7XG59O1xuXG5leHBvcnQgY29uc3Qgcm90YXRlUG9pbnRzQnlFbGVtZW50ID0gPFQ+KHBvaW50czogVCwgZWxlbWVudDogUGxhaXRFbGVtZW50KTogVCB8IG51bGwgPT4ge1xuICAgIGlmIChoYXNWYWxpZEFuZ2xlKGVsZW1lbnQpKSB7XG4gICAgICAgIGxldCByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIHJvdGF0ZVBvaW50cyhwb2ludHMsIGNlbnRlclBvaW50LCBlbGVtZW50LmFuZ2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgcm90YXRlQW50aVBvaW50c0J5RWxlbWVudCA9IDxUPihwb2ludHM6IFQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCk6IFQgfCBudWxsID0+IHtcbiAgICBpZiAoaGFzVmFsaWRBbmdsZShlbGVtZW50KSkge1xuICAgICAgICBsZXQgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzISk7XG4gICAgICAgIGNvbnN0IGNlbnRlclBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiByb3RhdGVQb2ludHMocG9pbnRzLCBjZW50ZXJQb2ludCwgLWVsZW1lbnQuYW5nbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG4iXX0=
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { PlaitBoard, RectangleClient } from '../interfaces';
|
|
2
|
+
const TEMPORARY_G = new Map();
|
|
3
|
+
const getTemporaryGArray = (debugKey) => {
|
|
4
|
+
return TEMPORARY_G.get(debugKey) || [];
|
|
5
|
+
};
|
|
6
|
+
const setTemporaryGArray = (debugKey, gArray) => {
|
|
7
|
+
TEMPORARY_G.set(debugKey, gArray);
|
|
8
|
+
};
|
|
9
|
+
export class DebugGenerator {
|
|
10
|
+
constructor(debugKey) {
|
|
11
|
+
this.debugKey = debugKey;
|
|
12
|
+
}
|
|
13
|
+
isDebug() {
|
|
14
|
+
return isDebug(this.debugKey);
|
|
15
|
+
}
|
|
16
|
+
clear() {
|
|
17
|
+
if (!this.isDebug()) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const gArray = getTemporaryGArray(this.debugKey);
|
|
21
|
+
setTemporaryGArray(this.debugKey, []);
|
|
22
|
+
gArray.forEach(g => g.remove());
|
|
23
|
+
}
|
|
24
|
+
drawPolygon(board, points, options) {
|
|
25
|
+
if (!isDebug(this.debugKey)) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const polygonG = PlaitBoard.getRoughSVG(board).polygon(points, options || { stroke: 'red' });
|
|
29
|
+
PlaitBoard.getElementActiveHost(board).append(polygonG);
|
|
30
|
+
const gArray = getTemporaryGArray(this.debugKey);
|
|
31
|
+
gArray.push(polygonG);
|
|
32
|
+
setTemporaryGArray(this.debugKey, gArray);
|
|
33
|
+
return polygonG;
|
|
34
|
+
}
|
|
35
|
+
drawRectangle(board, data, options) {
|
|
36
|
+
if (!isDebug(this.debugKey)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
let rectangle;
|
|
40
|
+
if (data instanceof Array) {
|
|
41
|
+
rectangle = RectangleClient.getRectangleByPoints(data);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
rectangle = data;
|
|
45
|
+
}
|
|
46
|
+
const rectangleG = PlaitBoard.getRoughSVG(board).rectangle(rectangle.x, rectangle.y, rectangle.width, rectangle.height, options || { stroke: 'red' });
|
|
47
|
+
PlaitBoard.getElementActiveHost(board).append(rectangleG);
|
|
48
|
+
const gArray = getTemporaryGArray(this.debugKey);
|
|
49
|
+
gArray.push(rectangleG);
|
|
50
|
+
setTemporaryGArray(this.debugKey, gArray);
|
|
51
|
+
return rectangleG;
|
|
52
|
+
}
|
|
53
|
+
drawCircles(board, points, diameter = 0, isCumulativeDiameter = false, options) {
|
|
54
|
+
if (!isDebug(this.debugKey)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const result = [];
|
|
58
|
+
points.forEach((p, i) => {
|
|
59
|
+
const circle = PlaitBoard.getRoughSVG(board).circle(p[0], p[1], isCumulativeDiameter ? diameter * (i + 1) : diameter, Object.assign({}, { stroke: 'red', fill: 'red', fillStyle: 'solid' }, options || {}));
|
|
60
|
+
PlaitBoard.getElementActiveHost(board).append(circle);
|
|
61
|
+
const gArray = getTemporaryGArray(this.debugKey);
|
|
62
|
+
gArray.push(circle);
|
|
63
|
+
result.push(circle);
|
|
64
|
+
setTemporaryGArray(this.debugKey, gArray);
|
|
65
|
+
});
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export const createDebugGenerator = (debugKey) => {
|
|
70
|
+
return new DebugGenerator(debugKey);
|
|
71
|
+
};
|
|
72
|
+
export const isDebug = (key) => {
|
|
73
|
+
const defaultKey = 'debug:plait';
|
|
74
|
+
return localStorage.getItem(key || defaultKey) === 'true';
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9kZWJ1Zy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFTLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBRTlCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxRQUFnQixFQUFpQixFQUFFO0lBQzNELE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0MsQ0FBQyxDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFFBQWdCLEVBQUUsTUFBcUIsRUFBRSxFQUFFO0lBQ25FLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVGLE1BQU0sT0FBTyxjQUFjO0lBQ3ZCLFlBQW9CLFFBQWdCO1FBQWhCLGFBQVEsR0FBUixRQUFRLENBQVE7SUFBRyxDQUFDO0lBQ3hDLE9BQU87UUFDSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELEtBQUs7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNYLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakQsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELFdBQVcsQ0FBQyxLQUFpQixFQUFFLE1B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LENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7Q0FDSjtBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFO0lBQ3JELE9BQU8sSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBWSxFQUFFLEVBQUU7SUFDcEMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDO0lBQ2pDLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssTUFBTSxDQUFDO0FBQzlELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuY29uc3QgVEVNUE9SQVJZX0cgPSBuZXcgTWFwKCk7XG5cbmNvbnN0IGdldFRlbXBvcmFyeUdBcnJheSA9IChkZWJ1Z0tleTogc3RyaW5nKTogU1ZHR0VsZW1lbnRbXSA9PiB7XG4gICAgcmV0dXJuIFRFTVBPUkFSWV9HLmdldChkZWJ1Z0tleSkgfHwgW107XG59O1xuXG5jb25zdCBzZXRUZW1wb3JhcnlHQXJyYXkgPSAoZGVidWdLZXk6IHN0cmluZywgZ0FycmF5OiBTVkdHRWxlbWVudFtdKSA9PiB7XG4gICAgVEVNUE9SQVJZX0cuc2V0KGRlYnVnS2V5LCBnQXJyYXkpO1xufTtcblxuZXhwb3J0IGNsYXNzIERlYnVnR2VuZXJhdG9yIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRlYnVnS2V5OiBzdHJpbmcpIHt9XG4gICAgaXNEZWJ1ZygpIHtcbiAgICAgICAgcmV0dXJuIGlzRGVidWcodGhpcy5kZWJ1Z0tleSk7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNEZWJ1ZygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ0FycmF5ID0gZ2V0VGVtcG9yYXJ5R0FycmF5KHRoaXMuZGVidWdLZXkpO1xuICAgICAgICBzZXRUZW1wb3JhcnlHQXJyYXkodGhpcy5kZWJ1Z0tleSwgW10pO1xuICAgICAgICBnQXJyYXkuZm9yRWFjaChnID0+IGcucmVtb3ZlKCkpO1xuICAgIH1cbiAgICBkcmF3UG9seWdvbihib2FyZDogUGxhaXRCb2FyZCwgcG9pbnRzOiBQb2ludFtdLCBvcHRpb25zPzogT3B0aW9ucykge1xuICAgICAgICBpZiAoIWlzRGVidWcodGhpcy5kZWJ1Z0tleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2x5Z29uRyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpLnBvbHlnb24ocG9pbnRzLCBvcHRpb25zIHx8IHsgc3Ryb2tlOiAncmVkJyB9KTtcbiAgICAgICAgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKHBvbHlnb25HKTtcbiAgICAgICAgY29uc3QgZ0FycmF5ID0gZ2V0VGVtcG9yYXJ5R0FycmF5KHRoaXMuZGVidWdLZXkpO1xuICAgICAgICBnQXJyYXkucHVzaChwb2x5Z29uRyk7XG4gICAgICAgIHNldFRlbXBvcmFyeUdBcnJheSh0aGlzLmRlYnVnS2V5LCBnQXJyYXkpO1xuICAgICAgICByZXR1cm4gcG9seWdvbkc7XG4gICAgfVxuICAgIGRyYXdSZWN0YW5nbGUoYm9hcmQ6IFBsYWl0Qm9hcmQsIGRhdGE6IFBvaW50W10gfCBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gICAgICAgIGlmICghaXNEZWJ1Zyh0aGlzLmRlYnVnS2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVjdGFuZ2xlID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWN0YW5nbGVHID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCkucmVjdGFuZ2xlKFxuICAgICAgICAgICAgcmVjdGFuZ2xlLngsXG4gICAgICAgICAgICByZWN0YW5nbGUueSxcbiAgICAgICAgICAgIHJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgIHJlY3RhbmdsZS5oZWlnaHQsXG4gICAgICAgICAgICBvcHRpb25zIHx8IHsgc3Ryb2tlOiAncmVkJyB9XG4gICAgICAgICk7XG4gICAgICAgIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQpLmFwcGVuZChyZWN0YW5nbGVHKTtcbiAgICAgICAgY29uc3QgZ0FycmF5ID0gZ2V0VGVtcG9yYXJ5R0FycmF5KHRoaXMuZGVidWdLZXkpO1xuICAgICAgICBnQXJyYXkucHVzaChyZWN0YW5nbGVHKTtcbiAgICAgICAgc2V0VGVtcG9yYXJ5R0FycmF5KHRoaXMuZGVidWdLZXksIGdBcnJheSk7XG4gICAgICAgIHJldHVybiByZWN0YW5nbGVHO1xuICAgIH1cbiAgICBkcmF3Q2lyY2xlcyhib2FyZDogUGxhaXRCb2FyZCwgcG9pbnRzOiBQb2ludFtdLCBkaWFtZXRlcjogbnVtYmVyID0gMCwgaXNDdW11bGF0aXZlRGlhbWV0ZXI6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFpc0RlYnVnKHRoaXMuZGVidWdLZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0OiBTVkdHRWxlbWVudFtdID0gW107XG4gICAgICAgIHBvaW50cy5mb3JFYWNoKChwLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaXJjbGUgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKS5jaXJjbGUoXG4gICAgICAgICAgICAgICAgcFswXSxcbiAgICAgICAgICAgICAgICBwWzFdLFxuICAgICAgICAgICAgICAgIGlzQ3VtdWxhdGl2ZURpYW1ldGVyID8gZGlhbWV0ZXIgKiAoaSArIDEpIDogZGlhbWV0ZXIsXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgeyBzdHJva2U6ICdyZWQnLCBmaWxsOiAncmVkJywgZmlsbFN0eWxlOiAnc29saWQnIH0sIG9wdGlvbnMgfHwge30pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKGNpcmNsZSk7XG4gICAgICAgICAgICBjb25zdCBnQXJyYXkgPSBnZXRUZW1wb3JhcnlHQXJyYXkodGhpcy5kZWJ1Z0tleSk7XG4gICAgICAgICAgICBnQXJyYXkucHVzaChjaXJjbGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goY2lyY2xlKTtcbiAgICAgICAgICAgIHNldFRlbXBvcmFyeUdBcnJheSh0aGlzLmRlYnVnS2V5LCBnQXJyYXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEZWJ1Z0dlbmVyYXRvciA9IChkZWJ1Z0tleTogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBEZWJ1Z0dlbmVyYXRvcihkZWJ1Z0tleSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEZWJ1ZyA9IChrZXk/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0S2V5ID0gJ2RlYnVnOnBsYWl0JztcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5IHx8IGRlZmF1bHRLZXkpID09PSAndHJ1ZSc7XG59O1xuIl19
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { PlaitBoard, RectangleClient } from '../interfaces';
|
|
2
|
+
import { getSelectionAngle, hasSameAngle, getRotatedBoundingRectangle, rotatePoints } from './angle';
|
|
2
3
|
import { depthFirstRecursion, getIsRecursionFunc } from './tree';
|
|
3
4
|
export function getRectangleByElements(board, elements, recursion) {
|
|
4
|
-
const
|
|
5
|
+
const rectanglesCornerPoints = [];
|
|
5
6
|
const callback = (node) => {
|
|
6
7
|
const nodeRectangle = board.getRectangle(node);
|
|
7
8
|
if (nodeRectangle) {
|
|
8
|
-
|
|
9
|
+
const cornerPoints = RectangleClient.getCornerPoints(nodeRectangle);
|
|
10
|
+
const rotatedCornerPoints = rotatePoints(cornerPoints, RectangleClient.getCenterPoint(nodeRectangle), node.angle || 0);
|
|
11
|
+
rectanglesCornerPoints.push(rotatedCornerPoints);
|
|
9
12
|
}
|
|
10
13
|
else {
|
|
11
14
|
console.error(`can not get rectangle of element:`, node);
|
|
@@ -19,8 +22,17 @@ export function getRectangleByElements(board, elements, recursion) {
|
|
|
19
22
|
callback(element);
|
|
20
23
|
}
|
|
21
24
|
});
|
|
22
|
-
if (
|
|
23
|
-
|
|
25
|
+
if (rectanglesCornerPoints.length > 0) {
|
|
26
|
+
if (hasSameAngle(elements)) {
|
|
27
|
+
const angle = getSelectionAngle(elements);
|
|
28
|
+
return getRotatedBoundingRectangle(rectanglesCornerPoints, angle);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
const flatCornerPoints = rectanglesCornerPoints.reduce((acc, val) => {
|
|
32
|
+
return acc.concat(val);
|
|
33
|
+
}, []);
|
|
34
|
+
return RectangleClient.getRectangleByPoints(flatCornerPoints);
|
|
35
|
+
}
|
|
24
36
|
}
|
|
25
37
|
else {
|
|
26
38
|
return {
|
|
@@ -58,4 +70,4 @@ export function findElements(board, options) {
|
|
|
58
70
|
}, isReverse);
|
|
59
71
|
return elements;
|
|
60
72
|
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL2VsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFZLFVBQVUsRUFBdUIsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVqRSxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBaUIsRUFBRSxRQUF3QixFQUFFLFNBQWtCO0lBQ2xHLE1BQU0sc0JBQXNCLEdBQW1DLEVBQUUsQ0FBQztJQUNsRSxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQWtCLEVBQUUsRUFBRTtRQUNwQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNwRSxNQUFNLG1CQUFtQixHQUFHLFlBQVksQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FLcEgsQ0FBQztZQUNGLHNCQUFzQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JELENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBQ0YsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN2QixJQUFJLFNBQVMsRUFB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LENBQ1osQ0FBQztJQUNGLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbmNlc3RvciwgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50LCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25BbmdsZSwgaGFzU2FtZUFuZ2xlLCBnZXRSb3RhdGVkQm91bmRpbmdSZWN0YW5nbGUsIHJvdGF0ZVBvaW50cyB9IGZyb20gJy4vYW5nbGUnO1xuaW1wb3J0IHsgZGVwdGhGaXJzdFJlY3Vyc2lvbiwgZ2V0SXNSZWN1cnNpb25GdW5jIH0gZnJvbSAnLi90cmVlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSwgcmVjdXJzaW9uOiBib29sZWFuKTogUmVjdGFuZ2xlQ2xpZW50IHtcbiAgICBjb25zdCByZWN0YW5nbGVzQ29ybmVyUG9pbnRzOiBbUG9pbnQsIFBvaW50LCBQb2ludCwgUG9pbnRdW10gPSBbXTtcbiAgICBjb25zdCBjYWxsYmFjayA9IChub2RlOiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZVJlY3RhbmdsZSA9IGJvYXJkLmdldFJlY3RhbmdsZShub2RlKTtcbiAgICAgICAgaWYgKG5vZGVSZWN0YW5nbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcm5lclBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMobm9kZVJlY3RhbmdsZSk7XG4gICAgICAgICAgICBjb25zdCByb3RhdGVkQ29ybmVyUG9pbnRzID0gcm90YXRlUG9pbnRzKGNvcm5lclBvaW50cywgUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KG5vZGVSZWN0YW5nbGUpLCBub2RlLmFuZ2xlIHx8IDApIGFzIFtcbiAgICAgICAgICAgICAgICBQb2ludCxcbiAgICAgICAgICAgICAgICBQb2ludCxcbiAgICAgICAgICAgICAgICBQb2ludCxcbiAgICAgICAgICAgICAgICBQb2ludFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHJlY3RhbmdsZXNDb3JuZXJQb2ludHMucHVzaChyb3RhdGVkQ29ybmVyUG9pbnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbiBub3QgZ2V0IHJlY3RhbmdsZSBvZiBlbGVtZW50OmAsIG5vZGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAocmVjdXJzaW9uKSB7XG4gICAgICAgICAgICBkZXB0aEZpcnN0UmVjdXJzaW9uKFxuICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgbm9kZSA9PiBjYWxsYmFjayhub2RlKSxcbiAgICAgICAgICAgICAgICBub2RlID0+IGJvYXJkLmlzUmVjdXJzaW9uKG5vZGUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAocmVjdGFuZ2xlc0Nvcm5lclBvaW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChoYXNTYW1lQW5nbGUoZWxlbWVudHMpKSB7XG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IGdldFNlbGVjdGlvbkFuZ2xlKGVsZW1lbnRzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRSb3RhdGVkQm91bmRpbmdSZWN0YW5nbGUocmVjdGFuZ2xlc0Nvcm5lclBvaW50cywgYW5nbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmxhdENvcm5lclBvaW50czogUG9pbnRbXSA9IHJlY3RhbmdsZXNDb3JuZXJQb2ludHMucmVkdWNlKChhY2M6IFBvaW50W10sIHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2MuY29uY2F0KHZhbCk7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGZsYXRDb3JuZXJQb2ludHMpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb2FyZFJlY3RhbmdsZShib2FyZDogUGxhaXRCb2FyZCk6IFJlY3RhbmdsZUNsaWVudCB7XG4gICAgcmV0dXJuIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRCeUlkPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQ+KFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZGF0YVNvdXJjZT86IFBsYWl0RWxlbWVudFtdXG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWRhdGFTb3VyY2UpIHtcbiAgICAgICAgZGF0YVNvdXJjZSA9IGZpbmRFbGVtZW50cyhib2FyZCwgeyBtYXRjaDogZWxlbWVudCA9PiB0cnVlLCByZWN1cnNpb246IGVsZW1lbnQgPT4gdHJ1ZSB9KTtcbiAgICB9XG4gICAgbGV0IGVsZW1lbnQgPSBkYXRhU291cmNlLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmlkID09PSBpZCkgYXMgVDtcbiAgICByZXR1cm4gZWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFbGVtZW50czxUIGV4dGVuZHMgUGxhaXRFbGVtZW50ID0gUGxhaXRFbGVtZW50PihcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBvcHRpb25zOiB7XG4gICAgICAgIG1hdGNoOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuO1xuICAgICAgICByZWN1cnNpb246IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGJvb2xlYW47XG4gICAgICAgIGlzUmV2ZXJzZT86IGJvb2xlYW47XG4gICAgfVxuKTogVFtdIHtcbiAgICBsZXQgZWxlbWVudHM6IFRbXSA9IFtdO1xuICAgIGNvbnN0IGlzUmV2ZXJzZSA9IG9wdGlvbnMuaXNSZXZlcnNlID8/IHRydWU7XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpICYmIG9wdGlvbnMubWF0Y2gobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKG5vZGUgYXMgVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICh2YWx1ZTogQW5jZXN0b3IpID0+IHtcbiAgICAgICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRJc1JlY3Vyc2lvbkZ1bmMoYm9hcmQpKHZhbHVlKSAmJiBvcHRpb25zLnJlY3Vyc2lvbih2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzUmV2ZXJzZVxuICAgICk7XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xufVxuIl19
|