@plait/common 0.52.0 → 0.53.1
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/core/group.component.d.ts +18 -0
- package/esm2022/core/group.component.mjs +48 -0
- package/esm2022/core/image-base.component.mjs +2 -2
- package/esm2022/generators/group.generator.mjs +21 -0
- package/esm2022/generators/image.generator.mjs +6 -2
- package/esm2022/plugins/index.mjs +2 -1
- package/esm2022/plugins/with-group.mjs +189 -0
- package/esm2022/transforms/align.mjs +21 -13
- package/esm2022/utils/index.mjs +1 -2
- package/esm2022/utils/resize.mjs +23 -5
- package/esm2022/utils/vector.mjs +11 -1
- package/fesm2022/plait-common.mjs +305 -24
- package/fesm2022/plait-common.mjs.map +1 -1
- package/generators/group.generator.d.ts +6 -0
- package/package.json +1 -1
- package/plugins/index.d.ts +1 -0
- package/plugins/with-group.d.ts +2 -0
- package/utils/index.d.ts +0 -1
- package/utils/resize.d.ts +3 -1
- package/utils/vector.d.ts +1 -0
- package/esm2022/utils/rotate.mjs +0 -7
- package/utils/rotate.d.ts +0 -2
package/esm2022/utils/resize.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PlaitBoard, RectangleClient, ResizeCursorClass, setDragging } from '@plait/core';
|
|
1
|
+
import { PlaitBoard, RectangleClient, ResizeCursorClass, setDragging, RESIZE_CURSORS, rotatePoints } from '@plait/core';
|
|
2
2
|
export const getResizeHandleByIndex = (index) => {
|
|
3
3
|
return `${index}`;
|
|
4
4
|
};
|
|
@@ -31,7 +31,15 @@ const getResizeCursorClassByIndex = (index) => {
|
|
|
31
31
|
return null;
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
|
-
export const
|
|
34
|
+
export const getRotatedResizeCursorClassByAngle = (cursor, angle) => {
|
|
35
|
+
const index = RESIZE_CURSORS.indexOf(cursor);
|
|
36
|
+
if (index >= 0) {
|
|
37
|
+
const temp = Math.round(angle / (Math.PI / 4));
|
|
38
|
+
cursor = RESIZE_CURSORS[(index + temp) % RESIZE_CURSORS.length];
|
|
39
|
+
}
|
|
40
|
+
return cursor;
|
|
41
|
+
};
|
|
42
|
+
export const getRectangleResizeHandleRefs = (rectangle, diameter, angle = 0) => {
|
|
35
43
|
const corners = RectangleClient.getCornerPoints(rectangle);
|
|
36
44
|
const refs = corners.map((corner, index) => {
|
|
37
45
|
return {
|
|
@@ -42,7 +50,7 @@ export const getRectangleResizeHandleRefs = (rectangle, diameter) => {
|
|
|
42
50
|
height: diameter
|
|
43
51
|
},
|
|
44
52
|
handle: getResizeHandleByIndex(index),
|
|
45
|
-
cursorClass: getResizeCursorClassByIndex(index)
|
|
53
|
+
cursorClass: getRotatedResizeCursorClassByAngle(getResizeCursorClassByIndex(index), angle)
|
|
46
54
|
};
|
|
47
55
|
});
|
|
48
56
|
const rectangles = getResizeSideRectangles(corners, diameter / 2);
|
|
@@ -50,7 +58,7 @@ export const getRectangleResizeHandleRefs = (rectangle, diameter) => {
|
|
|
50
58
|
return {
|
|
51
59
|
rectangle,
|
|
52
60
|
handle: getResizeHandleByIndex(index + 4),
|
|
53
|
-
cursorClass: getResizeCursorClassByIndex(index + 4)
|
|
61
|
+
cursorClass: getRotatedResizeCursorClassByAngle(getResizeCursorClassByIndex(index + 4), angle)
|
|
54
62
|
};
|
|
55
63
|
}));
|
|
56
64
|
return refs;
|
|
@@ -105,4 +113,14 @@ export const isEdgeHandle = (board, handle) => {
|
|
|
105
113
|
export const isCornerHandle = (board, handle) => {
|
|
106
114
|
return !isEdgeHandle(board, handle);
|
|
107
115
|
};
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9yZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSWpHLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDcEQsT0FBTyxHQUFHLEtBQUssRUFBa0IsQ0FBQztBQUN0QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFlBQTBCLEVBQUUsRUFBRTtJQUNqRSxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsS0FBYSxFQUFFLEVBQUU7SUFDeEUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDM0YsSUFBSSwwQkFBMEIsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELElBQUksMEJBQTBCLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbEMsMEJBQTBCLEdBQUcsMEJBQTBCLEdBQUcsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztBQUM1SCxDQUFDLENBQUM7QUFFRixNQUFNLDJCQUEyQixHQUFHLENBQUMsS0FBYSxFQUFFLEVB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Q0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEdBQVcsRUFBRSxFQUFFO0lBQzdELFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQztJQUN4RSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBaUIsRUFBRSxNQUFvQixFQUFFLEVBQUU7SUFDcEUsTUFBTSxLQUFLLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDYixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE1BQW9CLEVBQUUsRUFBRTtJQUN0RSxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50LCBSZXNpemVDdXJzb3JDbGFzcywgc2V0RHJhZ2dpbmcgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBSZXNpemVIYW5kbGUgfSBmcm9tICcuLi9jb25zdGFudHMvcmVzaXplJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudE9yQXJyYXksIFJlc2l6ZVJlZiB9IGZyb20gJy4uL3R5cGVzL3Jlc2l6ZSc7XG5cbmV4cG9ydCBjb25zdCBnZXRSZXNpemVIYW5kbGVCeUluZGV4ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gYCR7aW5kZXh9YCBhcyBSZXNpemVIYW5kbGU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW5kZXhCeVJlc2l6ZUhhbmRsZSA9IChyZXNpemVIYW5kbGU6IFJlc2l6ZUhhbmRsZSkgPT4ge1xuICAgIHJldHVybiBOdW1iZXIocmVzaXplSGFuZGxlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTeW1tZXRyaWNIYW5kbGVJbmRleCA9IChib2FyZDogUGxhaXRCb2FyZCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gaXNFZGdlSGFuZGxlKGJvYXJkLCBnZXRSZXNpemVIYW5kbGVCeUluZGV4KGluZGV4KSkgPyBpbmRleCAtIDQgOiBpbmRleDtcbiAgICBsZXQgb3JpZ2luU3ltbWV0cmljSGFuZGxlSW5kZXggPSBvcmlnaW5JbmRleCArIDI7XG4gICAgaWYgKG9yaWdpblN5bW1ldHJpY0hhbmRsZUluZGV4ID49IDQpIHtcbiAgICAgICAgb3JpZ2luU3ltbWV0cmljSGFuZGxlSW5kZXggPSBvcmlnaW5TeW1tZXRyaWNIYW5kbGVJbmRleCAtIDQ7XG4gICAgfVxuICAgIHJldHVybiBpc0VkZ2VIYW5kbGUoYm9hcmQsIGdldFJlc2l6ZUhhbmRsZUJ5SW5kZXgoaW5kZXgpKSA/IG9yaWdpblN5bW1ldHJpY0hhbmRsZUluZGV4ICsgNCA6IG9yaWdpblN5bW1ldHJpY0hhbmRsZUluZGV4O1xufTtcblxuY29uc3QgZ2V0UmVzaXplQ3Vyc29yQ2xhc3NCeUluZGV4ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIFJlc2l6ZUN1cnNvckNsYXNzLm53c2U7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIFJlc2l6ZUN1cnNvckNsYXNzLm5lc3c7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIFJlc2l6ZUN1cnNvckNsYXNzLm5zO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHJldHVybiBSZXNpemVDdXJzb3JDbGFzcy5ldztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWN0YW5nbGVSZXNpemVIYW5kbGVSZWZzID0gKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBkaWFtZXRlcjogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgY29ybmVycyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICBjb25zdCByZWZzID0gY29ybmVycy5tYXAoKGNvcm5lciwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVjdGFuZ2xlOiB7XG4gICAgICAgICAgICAgICAgeDogY29ybmVyWzBdIC0gZGlhbWV0ZXIgLyAyLFxuICAgICAgICAgICAgICAgIHk6IGNvcm5lclsxXSAtIGRpYW1ldGVyIC8gMixcbiAgICAgICAgICAgICAgICB3aWR0aDogZGlhbWV0ZXIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBkaWFtZXRlclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhbmRsZTogZ2V0UmVzaXplSGFuZGxlQnlJbmRleChpbmRleCkgYXMgUmVzaXplSGFuZGxlLFxuICAgICAgICAgICAgY3Vyc29yQ2xhc3M6IGdldFJlc2l6ZUN1cnNvckNsYXNzQnlJbmRleChpbmRleCkgYXMgUmVzaXplQ3Vyc29yQ2xhc3NcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCByZWN0YW5nbGVzID0gZ2V0UmVzaXplU2lkZVJlY3RhbmdsZXMoY29ybmVycywgZGlhbWV0ZXIgLyAyKTtcbiAgICByZWZzLnB1c2goXG4gICAgICAgIC4uLnJlY3RhbmdsZXMubWFwKChyZWN0YW5nbGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICBoYW5kbGU6IGdldFJlc2l6ZUhhbmRsZUJ5SW5kZXgoaW5kZXggKyA0KSBhcyBSZXNpemVIYW5kbGUsXG4gICAgICAgICAgICAgICAgY3Vyc29yQ2xhc3M6IGdldFJlc2l6ZUN1cnNvckNsYXNzQnlJbmRleChpbmRleCArIDQpIGFzIFJlc2l6ZUN1cnNvckNsYXNzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHJlZnM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVzaXplSGFuZGxlUG9pbnRCeUluZGV4ID0gKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGluZGV4IDw9IDMpIHtcbiAgICAgICAgY29uc3QgY29ybmVycyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGNvcm5lcnNbaW5kZXhdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVkZ2VDZW50ZXJQb2ludHMgPSBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhyZWN0YW5nbGUpO1xuICAgICAgICByZXR1cm4gZWRnZUNlbnRlclBvaW50c1tpbmRleCAtIDRdO1xuICAgIH1cbn07XG5cbmNvbnN0IGdldFJlc2l6ZVNpZGVSZWN0YW5nbGVzID0gKGNvcm5lclBvaW50czogUG9pbnRbXSwgb2Zmc2V0OiBudW1iZXIpOiBSZWN0YW5nbGVDbGllbnRbXSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3JuZXJQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhbY29ybmVyUG9pbnRzW2ldLCBjb3JuZXJQb2ludHNbKGkgKyAxKSAlIDRdXSk7XG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheSgyKS5maWxsKDApO1xuICAgICAgICBhcnJbKGkgKyAxKSAlIDJdID0gb2Zmc2V0IC8gMjtcbiAgICAgICAgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmV4cGFuZChyZWN0YW5nbGUsIGFyclswXSwgYXJyWzFdKTtcbiAgICAgICAgcmVzdWx0LnB1c2gocmVjdGFuZ2xlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBJU19SRVNJWklORyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFJlc2l6ZVJlZjxhbnksIGFueT4+KCk7XG5cbmV4cG9ydCBjb25zdCBpc1Jlc2l6aW5nID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuICEhSVNfUkVTSVpJTkcuZ2V0KGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1Jlc2l6aW5nQnlDb25kaXRpb24gPSA8VCBleHRlbmRzIFBsYWl0RWxlbWVudE9yQXJyYXksIEs+KGJvYXJkOiBQbGFpdEJvYXJkLCBtYXRjaDogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFQsIEs+KSA9PiBib29sZWFuKSA9PiB7XG4gICAgcmV0dXJuIGlzUmVzaXppbmcoYm9hcmQpICYmIG1hdGNoKElTX1JFU0laSU5HLmdldChib2FyZCkhKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRSZXNpemluZyA9IDxUIGV4dGVuZHMgUGxhaXRFbGVtZW50T3JBcnJheSwgSz4oYm9hcmQ6IFBsYWl0Qm9hcmQsIHJlc2l6ZVJlZjogUmVzaXplUmVmPFQsIEs+LCBrZXk6IHN0cmluZykgPT4ge1xuICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5hZGQoYCR7a2V5fS1yZXNpemluZ2ApO1xuICAgIElTX1JFU0laSU5HLnNldChib2FyZCwgcmVzaXplUmVmKTtcbiAgICBzZXREcmFnZ2luZyhib2FyZCwgdHJ1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlUmVzaXppbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZShgJHtrZXl9LXJlc2l6aW5nYCk7XG4gICAgSVNfUkVTSVpJTkcuZGVsZXRlKGJvYXJkKTtcbiAgICBzZXREcmFnZ2luZyhib2FyZCwgZmFsc2UpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRWRnZUhhbmRsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgaGFuZGxlOiBSZXNpemVIYW5kbGUpID0+IHtcbiAgICBjb25zdCBpbmRleCA9IGdldEluZGV4QnlSZXNpemVIYW5kbGUoaGFuZGxlKTtcbiAgICBpZiAoaW5kZXggPj0gNCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzQ29ybmVySGFuZGxlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBoYW5kbGU6IFJlc2l6ZUhhbmRsZSkgPT4ge1xuICAgIHJldHVybiAhaXNFZGdlSGFuZGxlKGJvYXJkLCBoYW5kbGUpO1xufTtcbiJdfQ==
|
|
116
|
+
// 处理元素先旋转后resize导致的位置偏移
|
|
117
|
+
export const resetPointsAfterResize = (originRectangle, currentRectangle, originSelectionCenterPoint, currentSelectionCenterPoint, angle) => {
|
|
118
|
+
const correctSelectionCenterPoint = rotatePoints([currentSelectionCenterPoint], originSelectionCenterPoint, angle)[0];
|
|
119
|
+
const rotatedElementCenterPoint = rotatePoints([RectangleClient.getCenterPoint(currentRectangle)], originSelectionCenterPoint, angle)[0];
|
|
120
|
+
const currentPoints = RectangleClient.getPoints(currentRectangle);
|
|
121
|
+
const originRectangleCenterPoint = RectangleClient.getCenterPoint(originRectangle);
|
|
122
|
+
const correctElementCenterPoint = rotatePoints([rotatedElementCenterPoint], correctSelectionCenterPoint, -angle)[0];
|
|
123
|
+
const rotatedPoints = rotatePoints(currentPoints, originRectangleCenterPoint, angle);
|
|
124
|
+
return rotatePoints(rotatedPoints, correctElementCenterPoint, -angle);
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9yZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJL0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtJQUNwRCxPQUFPLEdBQUcsS0FBSyxFQUFrQixDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsWUFBMEIsRUFBRSxFQUFFO0lBQ2pFLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUN4RSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMzRixJQUFJLDBCQUEwQixHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDakQsSUFBSSwwQkFBMEIsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQywwQkFBMEIsR0FBRywwQkFBMEIsR0FBRyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNELE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO0FBQzVILENBQUMsQ0FBQztBQUVGLE1BQU0sMkJBQTJCLEdB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LFlBQVksQ0FBQyxhQUFhLEVBQUUseUJBQXlCLEVBQUUsQ0FBQyxLQUFLLENBQW1CLENBQUM7QUFDNUYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCwgUmVzaXplQ3Vyc29yQ2xhc3MsIHNldERyYWdnaW5nLCBSRVNJWkVfQ1VSU09SUywgcm90YXRlUG9pbnRzIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUmVzaXplSGFuZGxlIH0gZnJvbSAnLi4vY29uc3RhbnRzL3Jlc2l6ZSc7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnRPckFycmF5LCBSZXNpemVSZWYgfSBmcm9tICcuLi90eXBlcy9yZXNpemUnO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVzaXplSGFuZGxlQnlJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIGAke2luZGV4fWAgYXMgUmVzaXplSGFuZGxlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEluZGV4QnlSZXNpemVIYW5kbGUgPSAocmVzaXplSGFuZGxlOiBSZXNpemVIYW5kbGUpID0+IHtcbiAgICByZXR1cm4gTnVtYmVyKHJlc2l6ZUhhbmRsZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3ltbWV0cmljSGFuZGxlSW5kZXggPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBvcmlnaW5JbmRleCA9IGlzRWRnZUhhbmRsZShib2FyZCwgZ2V0UmVzaXplSGFuZGxlQnlJbmRleChpbmRleCkpID8gaW5kZXggLSA0IDogaW5kZXg7XG4gICAgbGV0IG9yaWdpblN5bW1ldHJpY0hhbmRsZUluZGV4ID0gb3JpZ2luSW5kZXggKyAyO1xuICAgIGlmIChvcmlnaW5TeW1tZXRyaWNIYW5kbGVJbmRleCA+PSA0KSB7XG4gICAgICAgIG9yaWdpblN5bW1ldHJpY0hhbmRsZUluZGV4ID0gb3JpZ2luU3ltbWV0cmljSGFuZGxlSW5kZXggLSA0O1xuICAgIH1cbiAgICByZXR1cm4gaXNFZGdlSGFuZGxlKGJvYXJkLCBnZXRSZXNpemVIYW5kbGVCeUluZGV4KGluZGV4KSkgPyBvcmlnaW5TeW1tZXRyaWNIYW5kbGVJbmRleCArIDQgOiBvcmlnaW5TeW1tZXRyaWNIYW5kbGVJbmRleDtcbn07XG5cbmNvbnN0IGdldFJlc2l6ZUN1cnNvckNsYXNzQnlJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgc3dpdGNoIChpbmRleCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiBSZXNpemVDdXJzb3JDbGFzcy5ud3NlO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiBSZXNpemVDdXJzb3JDbGFzcy5uZXN3O1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHJldHVybiBSZXNpemVDdXJzb3JDbGFzcy5ucztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gUmVzaXplQ3Vyc29yQ2xhc3MuZXc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Um90YXRlZFJlc2l6ZUN1cnNvckNsYXNzQnlBbmdsZSA9IChjdXJzb3I6IFJlc2l6ZUN1cnNvckNsYXNzLCBhbmdsZTogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgaW5kZXggPSBSRVNJWkVfQ1VSU09SUy5pbmRleE9mKGN1cnNvcik7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IE1hdGgucm91bmQoYW5nbGUgLyAoTWF0aC5QSSAvIDQpKTtcbiAgICAgICAgY3Vyc29yID0gUkVTSVpFX0NVUlNPUlNbKGluZGV4ICsgdGVtcCkgJSBSRVNJWkVfQ1VSU09SUy5sZW5ndGhdIGFzIFJlc2l6ZUN1cnNvckNsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gY3Vyc29yO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlY3RhbmdsZVJlc2l6ZUhhbmRsZVJlZnMgPSAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGRpYW1ldGVyOiBudW1iZXIsIGFuZ2xlOiBudW1iZXIgPSAwKSA9PiB7XG4gICAgY29uc3QgY29ybmVycyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICBjb25zdCByZWZzID0gY29ybmVycy5tYXAoKGNvcm5lciwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVjdGFuZ2xlOiB7XG4gICAgICAgICAgICAgICAgeDogY29ybmVyWzBdIC0gZGlhbWV0ZXIgLyAyLFxuICAgICAgICAgICAgICAgIHk6IGNvcm5lclsxXSAtIGRpYW1ldGVyIC8gMixcbiAgICAgICAgICAgICAgICB3aWR0aDogZGlhbWV0ZXIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBkaWFtZXRlclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhbmRsZTogZ2V0UmVzaXplSGFuZGxlQnlJbmRleChpbmRleCkgYXMgUmVzaXplSGFuZGxlLFxuICAgICAgICAgICAgY3Vyc29yQ2xhc3M6IGdldFJvdGF0ZWRSZXNpemVDdXJzb3JDbGFzc0J5QW5nbGUoZ2V0UmVzaXplQ3Vyc29yQ2xhc3NCeUluZGV4KGluZGV4KSBhcyBSZXNpemVDdXJzb3JDbGFzcywgYW5nbGUpXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgcmVjdGFuZ2xlcyA9IGdldFJlc2l6ZVNpZGVSZWN0YW5nbGVzKGNvcm5lcnMsIGRpYW1ldGVyIC8gMik7XG4gICAgcmVmcy5wdXNoKFxuICAgICAgICAuLi5yZWN0YW5nbGVzLm1hcCgocmVjdGFuZ2xlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGUsXG4gICAgICAgICAgICAgICAgaGFuZGxlOiBnZXRSZXNpemVIYW5kbGVCeUluZGV4KGluZGV4ICsgNCkgYXMgUmVzaXplSGFuZGxlLFxuICAgICAgICAgICAgICAgIGN1cnNvckNsYXNzOiBnZXRSb3RhdGVkUmVzaXplQ3Vyc29yQ2xhc3NCeUFuZ2xlKGdldFJlc2l6ZUN1cnNvckNsYXNzQnlJbmRleChpbmRleCArIDQpIGFzIFJlc2l6ZUN1cnNvckNsYXNzLCBhbmdsZSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gcmVmcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXNpemVIYW5kbGVQb2ludEJ5SW5kZXggPSAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoaW5kZXggPD0gMykge1xuICAgICAgICBjb25zdCBjb3JuZXJzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgICAgICByZXR1cm4gY29ybmVyc1tpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZWRnZUNlbnRlclBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRFZGdlQ2VudGVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBlZGdlQ2VudGVyUG9pbnRzW2luZGV4IC0gNF07XG4gICAgfVxufTtcblxuY29uc3QgZ2V0UmVzaXplU2lkZVJlY3RhbmdsZXMgPSAoY29ybmVyUG9pbnRzOiBQb2ludFtdLCBvZmZzZXQ6IG51bWJlcik6IFJlY3RhbmdsZUNsaWVudFtdID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvcm5lclBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtjb3JuZXJQb2ludHNbaV0sIGNvcm5lclBvaW50c1soaSArIDEpICUgNF1dKTtcbiAgICAgICAgY29uc3QgYXJyID0gbmV3IEFycmF5KDIpLmZpbGwoMCk7XG4gICAgICAgIGFyclsoaSArIDEpICUgMl0gPSBvZmZzZXQgLyAyO1xuICAgICAgICByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZXhwYW5kKHJlY3RhbmdsZSwgYXJyWzBdLCBhcnJbMV0pO1xuICAgICAgICByZXN1bHQucHVzaChyZWN0YW5nbGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IElTX1JFU0laSU5HID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUmVzaXplUmVmPGFueSwgYW55Pj4oKTtcblxuZXhwb3J0IGNvbnN0IGlzUmVzaXppbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gISFJU19SRVNJWklORy5nZXQoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmVzaXppbmdCeUNvbmRpdGlvbiA9IDxUIGV4dGVuZHMgUGxhaXRFbGVtZW50T3JBcnJheSwgSz4oXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgbWF0Y2g6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxULCBLPikgPT4gYm9vbGVhblxuKSA9PiB7XG4gICAgcmV0dXJuIGlzUmVzaXppbmcoYm9hcmQpICYmIG1hdGNoKElTX1JFU0laSU5HLmdldChib2FyZCkhKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRSZXNpemluZyA9IDxUIGV4dGVuZHMgUGxhaXRFbGVtZW50T3JBcnJheSwgSz4oYm9hcmQ6IFBsYWl0Qm9hcmQsIHJlc2l6ZVJlZjogUmVzaXplUmVmPFQsIEs+LCBrZXk6IHN0cmluZykgPT4ge1xuICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5hZGQoYCR7a2V5fS1yZXNpemluZ2ApO1xuICAgIElTX1JFU0laSU5HLnNldChib2FyZCwgcmVzaXplUmVmKTtcbiAgICBzZXREcmFnZ2luZyhib2FyZCwgdHJ1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlUmVzaXppbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZShgJHtrZXl9LXJlc2l6aW5nYCk7XG4gICAgSVNfUkVTSVpJTkcuZGVsZXRlKGJvYXJkKTtcbiAgICBzZXREcmFnZ2luZyhib2FyZCwgZmFsc2UpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRWRnZUhhbmRsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgaGFuZGxlOiBSZXNpemVIYW5kbGUpID0+IHtcbiAgICBjb25zdCBpbmRleCA9IGdldEluZGV4QnlSZXNpemVIYW5kbGUoaGFuZGxlKTtcbiAgICBpZiAoaW5kZXggPj0gNCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzQ29ybmVySGFuZGxlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBoYW5kbGU6IFJlc2l6ZUhhbmRsZSkgPT4ge1xuICAgIHJldHVybiAhaXNFZGdlSGFuZGxlKGJvYXJkLCBoYW5kbGUpO1xufTtcblxuLy8g5aSE55CG5YWD57Sg5YWI5peL6L2s5ZCOcmVzaXpl5a+86Ie055qE5L2N572u5YGP56e7XG5leHBvcnQgY29uc3QgcmVzZXRQb2ludHNBZnRlclJlc2l6ZSA9IChcbiAgICBvcmlnaW5SZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCxcbiAgICBjdXJyZW50UmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsXG4gICAgb3JpZ2luU2VsZWN0aW9uQ2VudGVyUG9pbnQ6IFBvaW50LFxuICAgIGN1cnJlbnRTZWxlY3Rpb25DZW50ZXJQb2ludDogUG9pbnQsXG4gICAgYW5nbGU6IG51bWJlclxuKTogW1BvaW50LCBQb2ludF0gPT4ge1xuICAgIGNvbnN0IGNvcnJlY3RTZWxlY3Rpb25DZW50ZXJQb2ludCA9IHJvdGF0ZVBvaW50cyhbY3VycmVudFNlbGVjdGlvbkNlbnRlclBvaW50XSwgb3JpZ2luU2VsZWN0aW9uQ2VudGVyUG9pbnQsIGFuZ2xlKVswXTtcbiAgICBjb25zdCByb3RhdGVkRWxlbWVudENlbnRlclBvaW50ID0gcm90YXRlUG9pbnRzKFxuICAgICAgICBbUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KGN1cnJlbnRSZWN0YW5nbGUpIGFzIFBvaW50XSxcbiAgICAgICAgb3JpZ2luU2VsZWN0aW9uQ2VudGVyUG9pbnQsXG4gICAgICAgIGFuZ2xlXG4gICAgKVswXTtcblxuICAgIGNvbnN0IGN1cnJlbnRQb2ludHMgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UG9pbnRzKGN1cnJlbnRSZWN0YW5nbGUpO1xuICAgIGNvbnN0IG9yaWdpblJlY3RhbmdsZUNlbnRlclBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KG9yaWdpblJlY3RhbmdsZSk7XG5cbiAgICBjb25zdCBjb3JyZWN0RWxlbWVudENlbnRlclBvaW50ID0gcm90YXRlUG9pbnRzKFtyb3RhdGVkRWxlbWVudENlbnRlclBvaW50XSwgY29ycmVjdFNlbGVjdGlvbkNlbnRlclBvaW50LCAtYW5nbGUpWzBdO1xuXG4gICAgY29uc3Qgcm90YXRlZFBvaW50cyA9IHJvdGF0ZVBvaW50cyhjdXJyZW50UG9pbnRzLCBvcmlnaW5SZWN0YW5nbGVDZW50ZXJQb2ludCwgYW5nbGUpO1xuICAgIHJldHVybiByb3RhdGVQb2ludHMocm90YXRlZFBvaW50cywgY29ycmVjdEVsZW1lbnRDZW50ZXJQb2ludCwgLWFuZ2xlKSBhcyBbUG9pbnQsIFBvaW50XTtcbn07XG4iXX0=
|
package/esm2022/utils/vector.mjs
CHANGED
|
@@ -30,4 +30,14 @@ export function rotateVectorAnti90(vector) {
|
|
|
30
30
|
const rotatedY = -x;
|
|
31
31
|
return [rotatedX, rotatedY];
|
|
32
32
|
}
|
|
33
|
-
|
|
33
|
+
export function rotateVector(vector, angle) {
|
|
34
|
+
if (!angle) {
|
|
35
|
+
return vector;
|
|
36
|
+
}
|
|
37
|
+
const x = vector[0];
|
|
38
|
+
const y = vector[1];
|
|
39
|
+
const rotatedX = x * Math.cos(angle) - y * Math.sin(angle);
|
|
40
|
+
const rotatedY = x * Math.sin(angle) + y * Math.cos(angle);
|
|
41
|
+
return [rotatedX, rotatedY];
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy92ZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLDRCQUE0QixDQUFDLE1BQWEsRUFBRSxNQUFhO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQzlELG9EQUFvRDtJQUNwRCxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUNELHVDQUF1QztJQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFFaEMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLEtBQVksRUFBRSxNQUFjLEVBQUUsU0FBaUI7SUFDckYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQzFHLENBQUM7QUFFRCxNQUFNLFVBQVUsa0NBQWtDLENBQUMsS0FBWSxFQUFFLFVBQWtCLEVBQUUsa0JBQTBCLEVBQUUsWUFBcUI7SUFDbEksSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFVLENBQUM7SUFDckgsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBVSxDQUFDO0lBQ3JILENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWM7SUFDN0MsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDbkIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFjLEVBQUUsS0FBYTtJQUN0RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDVCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzRCxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb2ludCwgVmVjdG9yIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludChwb2ludDE6IFBvaW50LCBwb2ludDI6IFBvaW50KTogUG9pbnQge1xuICAgIGNvbnN0IGRlbHRhWCA9IHBvaW50MlswXSAtIHBvaW50MVswXTtcbiAgICBjb25zdCBkZWx0YVkgPSBwb2ludDJbMV0gLSBwb2ludDFbMV07XG4gICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZGVsdGFYICogZGVsdGFYICsgZGVsdGFZICogZGVsdGFZKTtcbiAgICAvLyBBdm9pZCBkaXZpc2lvbiBieSB6ZXJvIGlmIHRoZSBwb2ludHMgYXJlIHRoZSBzYW1lXG4gICAgaWYgKGRpc3RhbmNlID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUG9pbnRzIG11c3Qgbm90IGJlIHRoZSBzYW1lIGZvciBhIHVuaXQgdmVjdG9yIGNhbGN1bGF0aW9uLicpO1xuICAgIH1cbiAgICAvLyBDYWxjdWxhdGUgdGhlIHVuaXQgdmVjdG9yIGNvbXBvbmVudHNcbiAgICBjb25zdCB1bml0WCA9IGRlbHRhWCAvIGRpc3RhbmNlO1xuICAgIGNvbnN0IHVuaXRZID0gZGVsdGFZIC8gZGlzdGFuY2U7XG5cbiAgICByZXR1cm4gW3VuaXRYLCB1bml0WV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2ludEJ5VmVjdG9yQ29tcG9uZW50KHBvaW50OiBQb2ludCwgdmVjdG9yOiBWZWN0b3IsIGNvbXBvbmVudDogbnVtYmVyKTogUG9pbnQge1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5oeXBvdCh2ZWN0b3JbMF0sIHZlY3RvclsxXSk7XG4gICAgcmV0dXJuIFtwb2ludFswXSArICh2ZWN0b3JbMF0gLyBkaXN0YW5jZSkgKiBjb21wb25lbnQsIHBvaW50WzFdICsgKHZlY3RvclsxXSAvIGRpc3RhbmNlKSAqIGNvbXBvbmVudF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2ludEJ5VmVjdG9yRGlyZWN0aW9uQ29tcG9uZW50KHBvaW50OiBQb2ludCwgdW5pdFZlY3RvcjogVmVjdG9yLCBkaXJlY3Rpb25Db21wb25lbnQ6IG51bWJlciwgaXNIb3Jpem9udGFsOiBib29sZWFuKSB7XG4gICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICByZXR1cm4gW3BvaW50WzBdICsgZGlyZWN0aW9uQ29tcG9uZW50LCBwb2ludFsxXSArIChkaXJlY3Rpb25Db21wb25lbnQgLyB1bml0VmVjdG9yWzBdKSAqIHVuaXRWZWN0b3JbMV1dIGFzIFBvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbcG9pbnRbMF0gKyAoZGlyZWN0aW9uQ29tcG9uZW50IC8gdW5pdFZlY3RvclsxXSkgKiB1bml0VmVjdG9yWzBdLCBwb2ludFsxXSArIGRpcmVjdGlvbkNvbXBvbmVudF0gYXMgUG9pbnQ7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlVmVjdG9yQW50aTkwKHZlY3RvcjogVmVjdG9yKTogVmVjdG9yIHtcbiAgICBjb25zdCB4ID0gdmVjdG9yWzBdO1xuICAgIGNvbnN0IHkgPSB2ZWN0b3JbMV07XG4gICAgY29uc3Qgcm90YXRlZFggPSB5O1xuICAgIGNvbnN0IHJvdGF0ZWRZID0gLXg7XG4gICAgcmV0dXJuIFtyb3RhdGVkWCwgcm90YXRlZFldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlVmVjdG9yKHZlY3RvcjogVmVjdG9yLCBhbmdsZTogbnVtYmVyKTogVmVjdG9yIHtcbiAgICBpZiAoIWFuZ2xlKSB7XG4gICAgICAgIHJldHVybiB2ZWN0b3I7XG4gICAgfVxuICAgIGNvbnN0IHggPSB2ZWN0b3JbMF07XG4gICAgY29uc3QgeSA9IHZlY3RvclsxXTtcbiAgICBjb25zdCByb3RhdGVkWCA9IHggKiBNYXRoLmNvcyhhbmdsZSkgLSB5ICogTWF0aC5zaW4oYW5nbGUpO1xuICAgIGNvbnN0IHJvdGF0ZWRZID0geCAqIE1hdGguc2luKGFuZ2xlKSArIHkgKiBNYXRoLmNvcyhhbmdsZSk7XG4gICAgcmV0dXJuIFtyb3RhdGVkWCwgcm90YXRlZFldO1xufVxuIl19
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { setAngleForG, RectangleClient, drawCircle, PlaitBoard, createG, drawRectangle, createForeignObject, updateForeignObject, ResizeCursorClass, setDragging, distanceBetweenPointAndPoint, Point, Direction, hotkeys, PlaitElement, PlaitContextService,
|
|
1
|
+
import { setAngleForG, RectangleClient, drawCircle, PlaitBoard, createG, drawRectangle, createForeignObject, updateForeignObject, ResizeCursorClass, RESIZE_CURSORS, setDragging, rotatePoints, distanceBetweenPointAndPoint, Point, Direction, hotkeys, PlaitElement, PlaitContextService, getSelectedElements, Transforms, getHighestSelectedElements, getRectangleByElements, PlaitGroupElement, getElementsInGroup, MERGING, PlaitPointerType, isMainPointer, toViewBoxPoint, toHostPoint, preventTouchMove, PRESS_AND_MOVE_BUFFER, isDragging, throttleRAF, handleTouchTarget, ACTIVE_STROKE_WIDTH, getRectangleByGroup, PlaitPluginElementComponent, isSelectionMoving, isSelectedElementOrGroup, Selection, getHitElementsBySelection, createGroupRectangleG, getSelectedGroups, getHighestSelectedGroups, getSelectedIsolatedElements, idCreator, GroupTransforms, getSelectedIsolatedElementsCanAddToGroup, getGroupByElement } from '@plait/core';
|
|
2
2
|
import { isKeyHotkey } from 'is-hotkey';
|
|
3
3
|
import { PlaitMarkEditor, MarkTypes, AlignEditor } from '@plait/text';
|
|
4
4
|
import { Node, Transforms as Transforms$1, Editor } from 'slate';
|
|
5
5
|
import * as i0 from '@angular/core';
|
|
6
|
-
import { Directive, Input } from '@angular/core';
|
|
6
|
+
import { Component, ChangeDetectionStrategy, Directive, Input } from '@angular/core';
|
|
7
7
|
|
|
8
8
|
const BASE = 4;
|
|
9
9
|
const PRIMARY_COLOR = '#6698FF';
|
|
@@ -178,12 +178,16 @@ class ImageGenerator extends Generator {
|
|
|
178
178
|
updateImage(nodeG, previous, current) {
|
|
179
179
|
if (previous !== current && this.componentRef) {
|
|
180
180
|
this.componentRef.instance.imageItem = this.options.getImageItem(current);
|
|
181
|
+
this.componentRef.instance.element = current;
|
|
181
182
|
this.componentRef.instance.getRectangle = () => {
|
|
182
183
|
return this.options.getRectangle(current);
|
|
183
184
|
};
|
|
184
185
|
}
|
|
185
186
|
const currentForeignObject = this.options.getRectangle(current);
|
|
186
187
|
updateForeignObject(this.g, currentForeignObject.width, currentForeignObject.height, currentForeignObject.x, currentForeignObject.y);
|
|
188
|
+
if (currentForeignObject && current.angle) {
|
|
189
|
+
setAngleForG(this.g, RectangleClient.getCenterPoint(currentForeignObject), current.angle);
|
|
190
|
+
}
|
|
187
191
|
// solve image lose on move node
|
|
188
192
|
if (this.foreignObject.children.length === 0) {
|
|
189
193
|
this.foreignObject.append(this.componentRef.instance.nativeElement);
|
|
@@ -228,7 +232,15 @@ const getResizeCursorClassByIndex = (index) => {
|
|
|
228
232
|
return null;
|
|
229
233
|
}
|
|
230
234
|
};
|
|
231
|
-
const
|
|
235
|
+
const getRotatedResizeCursorClassByAngle = (cursor, angle) => {
|
|
236
|
+
const index = RESIZE_CURSORS.indexOf(cursor);
|
|
237
|
+
if (index >= 0) {
|
|
238
|
+
const temp = Math.round(angle / (Math.PI / 4));
|
|
239
|
+
cursor = RESIZE_CURSORS[(index + temp) % RESIZE_CURSORS.length];
|
|
240
|
+
}
|
|
241
|
+
return cursor;
|
|
242
|
+
};
|
|
243
|
+
const getRectangleResizeHandleRefs = (rectangle, diameter, angle = 0) => {
|
|
232
244
|
const corners = RectangleClient.getCornerPoints(rectangle);
|
|
233
245
|
const refs = corners.map((corner, index) => {
|
|
234
246
|
return {
|
|
@@ -239,7 +251,7 @@ const getRectangleResizeHandleRefs = (rectangle, diameter) => {
|
|
|
239
251
|
height: diameter
|
|
240
252
|
},
|
|
241
253
|
handle: getResizeHandleByIndex(index),
|
|
242
|
-
cursorClass: getResizeCursorClassByIndex(index)
|
|
254
|
+
cursorClass: getRotatedResizeCursorClassByAngle(getResizeCursorClassByIndex(index), angle)
|
|
243
255
|
};
|
|
244
256
|
});
|
|
245
257
|
const rectangles = getResizeSideRectangles(corners, diameter / 2);
|
|
@@ -247,7 +259,7 @@ const getRectangleResizeHandleRefs = (rectangle, diameter) => {
|
|
|
247
259
|
return {
|
|
248
260
|
rectangle,
|
|
249
261
|
handle: getResizeHandleByIndex(index + 4),
|
|
250
|
-
cursorClass: getResizeCursorClassByIndex(index + 4)
|
|
262
|
+
cursorClass: getRotatedResizeCursorClassByAngle(getResizeCursorClassByIndex(index + 4), angle)
|
|
251
263
|
};
|
|
252
264
|
}));
|
|
253
265
|
return refs;
|
|
@@ -302,6 +314,16 @@ const isEdgeHandle = (board, handle) => {
|
|
|
302
314
|
const isCornerHandle = (board, handle) => {
|
|
303
315
|
return !isEdgeHandle(board, handle);
|
|
304
316
|
};
|
|
317
|
+
// 处理元素先旋转后resize导致的位置偏移
|
|
318
|
+
const resetPointsAfterResize = (originRectangle, currentRectangle, originSelectionCenterPoint, currentSelectionCenterPoint, angle) => {
|
|
319
|
+
const correctSelectionCenterPoint = rotatePoints([currentSelectionCenterPoint], originSelectionCenterPoint, angle)[0];
|
|
320
|
+
const rotatedElementCenterPoint = rotatePoints([RectangleClient.getCenterPoint(currentRectangle)], originSelectionCenterPoint, angle)[0];
|
|
321
|
+
const currentPoints = RectangleClient.getPoints(currentRectangle);
|
|
322
|
+
const originRectangleCenterPoint = RectangleClient.getCenterPoint(originRectangle);
|
|
323
|
+
const correctElementCenterPoint = rotatePoints([rotatedElementCenterPoint], correctSelectionCenterPoint, -angle)[0];
|
|
324
|
+
const rotatedPoints = rotatePoints(currentPoints, originRectangleCenterPoint, angle);
|
|
325
|
+
return rotatePoints(rotatedPoints, correctElementCenterPoint, -angle);
|
|
326
|
+
};
|
|
305
327
|
|
|
306
328
|
function getUnitVectorByPointAndPoint(point1, point2) {
|
|
307
329
|
const deltaX = point2[0] - point1[0];
|
|
@@ -335,6 +357,16 @@ function rotateVectorAnti90(vector) {
|
|
|
335
357
|
const rotatedY = -x;
|
|
336
358
|
return [rotatedX, rotatedY];
|
|
337
359
|
}
|
|
360
|
+
function rotateVector(vector, angle) {
|
|
361
|
+
if (!angle) {
|
|
362
|
+
return vector;
|
|
363
|
+
}
|
|
364
|
+
const x = vector[0];
|
|
365
|
+
const y = vector[1];
|
|
366
|
+
const rotatedX = x * Math.cos(angle) - y * Math.sin(angle);
|
|
367
|
+
const rotatedY = x * Math.sin(angle) + y * Math.cos(angle);
|
|
368
|
+
return [rotatedX, rotatedY];
|
|
369
|
+
}
|
|
338
370
|
|
|
339
371
|
function isPointOnSegment(point, startPoint, endPoint) {
|
|
340
372
|
const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);
|
|
@@ -1136,12 +1168,6 @@ const getMemorizedLatest = (memorizedKey) => {
|
|
|
1136
1168
|
return map.get(memorizedKey);
|
|
1137
1169
|
};
|
|
1138
1170
|
|
|
1139
|
-
const rotatePoints = (points, centerPoint, angle) => {
|
|
1140
|
-
return points.map(point => {
|
|
1141
|
-
return rotate(point[0], point[1], centerPoint[0], centerPoint[1], angle);
|
|
1142
|
-
});
|
|
1143
|
-
};
|
|
1144
|
-
|
|
1145
1171
|
const setProperty = (board, properties, options) => {
|
|
1146
1172
|
const selectedElements = getSelectedElements(board);
|
|
1147
1173
|
selectedElements.forEach(element => {
|
|
@@ -1221,19 +1247,27 @@ const alignRight = (board) => {
|
|
|
1221
1247
|
setOffset(board, getOffset);
|
|
1222
1248
|
};
|
|
1223
1249
|
function setOffset(board, getOffset) {
|
|
1224
|
-
|
|
1225
|
-
elements = elements.filter(element => board.children.includes(element));
|
|
1250
|
+
const elements = getHighestSelectedElements(board);
|
|
1226
1251
|
const outerRectangle = getRectangleByElements(board, elements, false);
|
|
1227
1252
|
elements.forEach(element => {
|
|
1228
|
-
if (!element.points)
|
|
1253
|
+
if (!element.points && !PlaitGroupElement.isGroup(element))
|
|
1229
1254
|
return;
|
|
1230
|
-
const path = PlaitBoard.findPath(board, element);
|
|
1231
1255
|
const rectangle = board.getRectangle(element);
|
|
1232
1256
|
const offset = getOffset(outerRectangle, rectangle);
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
}
|
|
1257
|
+
let updateElements = [];
|
|
1258
|
+
if (PlaitGroupElement.isGroup(element)) {
|
|
1259
|
+
updateElements = getElementsInGroup(board, element, true, false);
|
|
1260
|
+
}
|
|
1261
|
+
else if (element.points) {
|
|
1262
|
+
updateElements = [element];
|
|
1263
|
+
}
|
|
1264
|
+
updateElements.forEach(item => {
|
|
1265
|
+
const newPoints = item.points.map(p => [p[0] + offset[0], p[1] + offset[1]]);
|
|
1266
|
+
const path = PlaitBoard.findPath(board, item);
|
|
1267
|
+
Transforms.setNode(board, {
|
|
1268
|
+
points: newPoints
|
|
1269
|
+
}, path);
|
|
1270
|
+
});
|
|
1237
1271
|
MERGING.set(board, true);
|
|
1238
1272
|
});
|
|
1239
1273
|
MERGING.set(board, false);
|
|
@@ -1247,11 +1281,11 @@ const distributeVertical = (board) => {
|
|
|
1247
1281
|
const distribute = (board, isHorizontal) => {
|
|
1248
1282
|
const axis = isHorizontal ? 'x' : 'y';
|
|
1249
1283
|
const side = isHorizontal ? 'width' : 'height';
|
|
1250
|
-
const
|
|
1251
|
-
const refs =
|
|
1284
|
+
const highestSelectedElements = getHighestSelectedElements(board);
|
|
1285
|
+
const refs = highestSelectedElements.map(element => {
|
|
1252
1286
|
return { element, rectangle: board.getRectangle(element) };
|
|
1253
1287
|
});
|
|
1254
|
-
const outerRectangle = getRectangleByElements(board,
|
|
1288
|
+
const outerRectangle = getRectangleByElements(board, highestSelectedElements, false);
|
|
1255
1289
|
const minRectangleRef = refs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis])[0];
|
|
1256
1290
|
const maxRectangleRef = refs.sort((a, b) => b.rectangle[axis] + b.rectangle[side] - (a.rectangle[axis] + a.rectangle[side]))[0];
|
|
1257
1291
|
const minIndex = refs.findIndex(ref => ref === minRectangleRef);
|
|
@@ -1470,6 +1504,25 @@ const withResize = (board, options) => {
|
|
|
1470
1504
|
return board;
|
|
1471
1505
|
};
|
|
1472
1506
|
|
|
1507
|
+
class GroupGenerator extends Generator {
|
|
1508
|
+
canDraw(element) {
|
|
1509
|
+
return true;
|
|
1510
|
+
}
|
|
1511
|
+
draw(element, partialSelected) {
|
|
1512
|
+
const options = {
|
|
1513
|
+
stroke: '',
|
|
1514
|
+
strokeWidth: ACTIVE_STROKE_WIDTH,
|
|
1515
|
+
strokeLineDash: [5]
|
|
1516
|
+
};
|
|
1517
|
+
let rectangle = { x: 0, y: 0, width: 0, height: 0 };
|
|
1518
|
+
if (partialSelected) {
|
|
1519
|
+
options.stroke = '#999';
|
|
1520
|
+
rectangle = getRectangleByGroup(this.board, element, true);
|
|
1521
|
+
}
|
|
1522
|
+
return drawRectangle(this.board, rectangle, options);
|
|
1523
|
+
}
|
|
1524
|
+
}
|
|
1525
|
+
|
|
1473
1526
|
class CommonPluginElement extends PlaitPluginElementComponent {
|
|
1474
1527
|
constructor() {
|
|
1475
1528
|
super(...arguments);
|
|
@@ -1492,6 +1545,234 @@ class CommonPluginElement extends PlaitPluginElementComponent {
|
|
|
1492
1545
|
}
|
|
1493
1546
|
}
|
|
1494
1547
|
|
|
1548
|
+
class GroupComponent extends CommonPluginElement {
|
|
1549
|
+
constructor(viewContainerRef, cdr) {
|
|
1550
|
+
super(cdr);
|
|
1551
|
+
this.viewContainerRef = viewContainerRef;
|
|
1552
|
+
this.cdr = cdr;
|
|
1553
|
+
}
|
|
1554
|
+
initializeGenerator() {
|
|
1555
|
+
this.activeGenerator = new ActiveGenerator(this.board, {
|
|
1556
|
+
getRectangle: (element) => {
|
|
1557
|
+
return getRectangleByGroup(this.board, element);
|
|
1558
|
+
},
|
|
1559
|
+
getStrokeWidth: () => 0,
|
|
1560
|
+
getStrokeOpacity: () => 0,
|
|
1561
|
+
hasResizeHandle: () => {
|
|
1562
|
+
return !isSelectionMoving(this.board);
|
|
1563
|
+
}
|
|
1564
|
+
});
|
|
1565
|
+
this.groupGenerator = new GroupGenerator(this.board);
|
|
1566
|
+
}
|
|
1567
|
+
ngOnInit() {
|
|
1568
|
+
super.ngOnInit();
|
|
1569
|
+
this.initializeGenerator();
|
|
1570
|
+
}
|
|
1571
|
+
onContextChanged(value, previous) {
|
|
1572
|
+
const elementsInGroup = getElementsInGroup(this.board, value.element, false, true);
|
|
1573
|
+
const isPartialSelectGroup = elementsInGroup.some(item => isSelectedElementOrGroup(this.board, item)) &&
|
|
1574
|
+
!elementsInGroup.every(item => isSelectedElementOrGroup(this.board, item));
|
|
1575
|
+
this.groupGenerator.processDrawing(value.element, this.g, isPartialSelectGroup);
|
|
1576
|
+
}
|
|
1577
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: GroupComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1578
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: GroupComponent, isStandalone: true, selector: "plait-group", usesInheritance: true, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1579
|
+
}
|
|
1580
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: GroupComponent, decorators: [{
|
|
1581
|
+
type: Component,
|
|
1582
|
+
args: [{
|
|
1583
|
+
selector: 'plait-group',
|
|
1584
|
+
template: ``,
|
|
1585
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1586
|
+
standalone: true
|
|
1587
|
+
}]
|
|
1588
|
+
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }] });
|
|
1589
|
+
|
|
1590
|
+
function withGroup(board) {
|
|
1591
|
+
let groupRectangleG;
|
|
1592
|
+
let removeGroups;
|
|
1593
|
+
const { drawElement, pointerMove, globalPointerUp, insertFragment, getDeletedFragment, deleteFragment, getRelatedFragment, getRectangle, keyDown } = board;
|
|
1594
|
+
board.drawElement = (context) => {
|
|
1595
|
+
if (PlaitGroupElement.isGroup(context.element)) {
|
|
1596
|
+
return GroupComponent;
|
|
1597
|
+
}
|
|
1598
|
+
return drawElement(context);
|
|
1599
|
+
};
|
|
1600
|
+
board.pointerMove = (event) => {
|
|
1601
|
+
groupRectangleG?.remove();
|
|
1602
|
+
const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
1603
|
+
let selection = { anchor: point, focus: point };
|
|
1604
|
+
if (board.selection && !Selection.isCollapsed(board.selection)) {
|
|
1605
|
+
selection = board.selection;
|
|
1606
|
+
}
|
|
1607
|
+
const hitElements = getHitElementsBySelection(board, selection);
|
|
1608
|
+
if (hitElements.length) {
|
|
1609
|
+
groupRectangleG = createGroupRectangleG(board, hitElements);
|
|
1610
|
+
groupRectangleG && PlaitBoard.getElementActiveHost(board).append(groupRectangleG);
|
|
1611
|
+
}
|
|
1612
|
+
pointerMove(event);
|
|
1613
|
+
};
|
|
1614
|
+
board.globalPointerUp = (event) => {
|
|
1615
|
+
groupRectangleG?.remove();
|
|
1616
|
+
groupRectangleG = null;
|
|
1617
|
+
globalPointerUp(event);
|
|
1618
|
+
};
|
|
1619
|
+
board.getRelatedFragment = (elements) => {
|
|
1620
|
+
const groups = getSelectedGroups(board);
|
|
1621
|
+
return getRelatedFragment([...elements, ...groups]);
|
|
1622
|
+
};
|
|
1623
|
+
board.insertFragment = (data, clipboardData, targetPoint) => {
|
|
1624
|
+
const elements = [];
|
|
1625
|
+
if (clipboardData?.elements?.length) {
|
|
1626
|
+
const groups = getHighestSelectedGroups(board, clipboardData?.elements);
|
|
1627
|
+
const selectedIsolatedElements = getSelectedIsolatedElements(board, clipboardData?.elements);
|
|
1628
|
+
selectedIsolatedElements.forEach(item => {
|
|
1629
|
+
elements.push(!item.groupId ? item : updateGroupId(item, undefined));
|
|
1630
|
+
});
|
|
1631
|
+
if (groups.length) {
|
|
1632
|
+
groups.forEach(item => {
|
|
1633
|
+
const newGroup = { ...updateGroupId(item, undefined), id: idCreator() };
|
|
1634
|
+
elements.push(newGroup);
|
|
1635
|
+
elements.push(...updateElementsGroupId(item, clipboardData.elements, newGroup.id));
|
|
1636
|
+
});
|
|
1637
|
+
}
|
|
1638
|
+
clipboardData.elements = elements;
|
|
1639
|
+
}
|
|
1640
|
+
insertFragment(data, clipboardData, targetPoint);
|
|
1641
|
+
const groupElements = elements?.filter(value => PlaitGroupElement.isGroup(value));
|
|
1642
|
+
groupElements.forEach(element => {
|
|
1643
|
+
Transforms.insertNode(board, element, [board.children.length]);
|
|
1644
|
+
});
|
|
1645
|
+
};
|
|
1646
|
+
board.getDeletedFragment = (data) => {
|
|
1647
|
+
if (removeGroups && removeGroups.length) {
|
|
1648
|
+
data.push(...removeGroups);
|
|
1649
|
+
}
|
|
1650
|
+
return getDeletedFragment(data);
|
|
1651
|
+
};
|
|
1652
|
+
board.deleteFragment = (data) => {
|
|
1653
|
+
removeGroups = getRemoveGroups(board);
|
|
1654
|
+
if (removeGroups?.length) {
|
|
1655
|
+
updateSiblingElementGroupId(board, removeGroups);
|
|
1656
|
+
}
|
|
1657
|
+
deleteFragment(data);
|
|
1658
|
+
removeGroups = null;
|
|
1659
|
+
};
|
|
1660
|
+
board.getRectangle = (element) => {
|
|
1661
|
+
if (PlaitGroupElement.isGroup(element)) {
|
|
1662
|
+
return getRectangleByGroup(board, element);
|
|
1663
|
+
}
|
|
1664
|
+
return getRectangle(element);
|
|
1665
|
+
};
|
|
1666
|
+
board.keyDown = (event) => {
|
|
1667
|
+
if (!PlaitBoard.isReadonly(board)) {
|
|
1668
|
+
if (isKeyHotkey('mod+g', event)) {
|
|
1669
|
+
event.preventDefault();
|
|
1670
|
+
GroupTransforms.addGroup(board);
|
|
1671
|
+
return;
|
|
1672
|
+
}
|
|
1673
|
+
if (isKeyHotkey('mod+shift+g', event)) {
|
|
1674
|
+
event.preventDefault();
|
|
1675
|
+
GroupTransforms.removeGroup(board);
|
|
1676
|
+
return;
|
|
1677
|
+
}
|
|
1678
|
+
}
|
|
1679
|
+
keyDown(event);
|
|
1680
|
+
};
|
|
1681
|
+
return board;
|
|
1682
|
+
}
|
|
1683
|
+
const updateGroupId = (element, groupId) => {
|
|
1684
|
+
return {
|
|
1685
|
+
...element,
|
|
1686
|
+
groupId: groupId
|
|
1687
|
+
};
|
|
1688
|
+
};
|
|
1689
|
+
const updateElementsGroupId = (group, clipboardDataElements, newGroupId) => {
|
|
1690
|
+
const elements = [];
|
|
1691
|
+
const elementsInGroup = clipboardDataElements.filter(item => item.groupId === group.id);
|
|
1692
|
+
if (elementsInGroup.length) {
|
|
1693
|
+
elementsInGroup.forEach(item => {
|
|
1694
|
+
if (PlaitGroupElement.isGroup(item)) {
|
|
1695
|
+
const newGroup = { ...updateGroupId(item, newGroupId), id: idCreator() };
|
|
1696
|
+
elements.push(newGroup);
|
|
1697
|
+
elements.push(...updateElementsGroupId(item, clipboardDataElements, newGroup.id));
|
|
1698
|
+
}
|
|
1699
|
+
else {
|
|
1700
|
+
elements.push(updateGroupId(item, newGroupId));
|
|
1701
|
+
}
|
|
1702
|
+
});
|
|
1703
|
+
}
|
|
1704
|
+
return elements;
|
|
1705
|
+
};
|
|
1706
|
+
const getRemoveGroups = (board) => {
|
|
1707
|
+
const selectedGroups = board.getRelatedFragment([]);
|
|
1708
|
+
const removeGroups = [...selectedGroups];
|
|
1709
|
+
const highestSelectedGroups = getHighestSelectedGroups(board);
|
|
1710
|
+
const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);
|
|
1711
|
+
const removeNodes = [...highestSelectedGroups, ...selectedIsolatedElements];
|
|
1712
|
+
removeNodes.forEach(item => {
|
|
1713
|
+
const hitElementGroups = getGroupByElement(board, item, true);
|
|
1714
|
+
if (hitElementGroups.length) {
|
|
1715
|
+
const elementsInGroup = getElementsInGroup(board, hitElementGroups[0], false, true);
|
|
1716
|
+
const siblingElements = elementsInGroup.filter(element => ![...removeNodes, ...removeGroups].map(item => item.id).includes(element.id));
|
|
1717
|
+
if (siblingElements.length === 1 || siblingElements.length === 0) {
|
|
1718
|
+
if (!removeGroups.includes(hitElementGroups[0])) {
|
|
1719
|
+
removeGroups.push(hitElementGroups[0]);
|
|
1720
|
+
}
|
|
1721
|
+
if (siblingElements.length === 1) {
|
|
1722
|
+
if (hitElementGroups.length > 1) {
|
|
1723
|
+
const aboveGroup = findAboveGroupWithAnotherElement(board, hitElementGroups.slice(1, hitElementGroups.length), [
|
|
1724
|
+
...removeNodes,
|
|
1725
|
+
...removeGroups
|
|
1726
|
+
]);
|
|
1727
|
+
let index = hitElementGroups.length;
|
|
1728
|
+
if (aboveGroup) {
|
|
1729
|
+
index = hitElementGroups.findIndex(item => item.id === aboveGroup.id);
|
|
1730
|
+
}
|
|
1731
|
+
[...hitElementGroups.slice(1, index)].forEach(item => {
|
|
1732
|
+
if (!removeGroups.includes(item)) {
|
|
1733
|
+
removeGroups.push(item);
|
|
1734
|
+
}
|
|
1735
|
+
});
|
|
1736
|
+
}
|
|
1737
|
+
}
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
});
|
|
1741
|
+
return removeGroups;
|
|
1742
|
+
};
|
|
1743
|
+
const findAboveGroupWithAnotherElement = (board, groups, excludeNodes) => {
|
|
1744
|
+
let group = null;
|
|
1745
|
+
for (let i = 0; i < groups.length; i++) {
|
|
1746
|
+
const elementsInGroup = getElementsInGroup(board, groups[i], false, true);
|
|
1747
|
+
const siblingElements = elementsInGroup.filter(element => !excludeNodes.map(item => item.id).includes(element.id));
|
|
1748
|
+
if (siblingElements.length > 0) {
|
|
1749
|
+
group = groups[i];
|
|
1750
|
+
break;
|
|
1751
|
+
}
|
|
1752
|
+
}
|
|
1753
|
+
return group;
|
|
1754
|
+
};
|
|
1755
|
+
const updateSiblingElementGroupId = (board, removeGroups) => {
|
|
1756
|
+
const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);
|
|
1757
|
+
const highestSelectedGroups = getHighestSelectedGroups(board);
|
|
1758
|
+
const isolatedElementsInGroup = selectedIsolatedElements.filter(item => item.groupId);
|
|
1759
|
+
[...highestSelectedGroups, ...isolatedElementsInGroup].forEach(item => {
|
|
1760
|
+
const hitElementGroups = getGroupByElement(board, item, true);
|
|
1761
|
+
if (hitElementGroups.length) {
|
|
1762
|
+
const elementsInGroup = getElementsInGroup(board, hitElementGroups[0], false, true);
|
|
1763
|
+
const siblingElements = elementsInGroup.filter(element => element.id !== item.id);
|
|
1764
|
+
if (siblingElements.length === 1) {
|
|
1765
|
+
const removeGroupIds = removeGroups.map(item => item.id);
|
|
1766
|
+
if (hitElementGroups.some(group => removeGroupIds.includes(group.id))) {
|
|
1767
|
+
const group = hitElementGroups.find(group => !removeGroupIds.includes(group.id));
|
|
1768
|
+
const path = PlaitBoard.findPath(board, siblingElements[0]);
|
|
1769
|
+
Transforms.setNode(board, { groupId: group?.id || undefined }, path);
|
|
1770
|
+
}
|
|
1771
|
+
}
|
|
1772
|
+
}
|
|
1773
|
+
});
|
|
1774
|
+
};
|
|
1775
|
+
|
|
1495
1776
|
class ImageBaseComponent {
|
|
1496
1777
|
set imageItem(value) {
|
|
1497
1778
|
this.afterImageItemChange(this._imageItem, value);
|
|
@@ -1549,7 +1830,7 @@ class ImageBaseComponent {
|
|
|
1549
1830
|
drawFocus() {
|
|
1550
1831
|
if (this.initialized) {
|
|
1551
1832
|
const activeG = PlaitBoard.getElementActiveHost(this.board);
|
|
1552
|
-
this.activeGenerator.processDrawing(
|
|
1833
|
+
this.activeGenerator.processDrawing(this.element, activeG, { selected: this._isFocus });
|
|
1553
1834
|
}
|
|
1554
1835
|
}
|
|
1555
1836
|
ngOnDestroy() {
|
|
@@ -1589,5 +1870,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
1589
1870
|
* Generated bundle index. Do not edit.
|
|
1590
1871
|
*/
|
|
1591
1872
|
|
|
1592
|
-
export { AStar, ActiveGenerator, AlignTransform, BASE, BoardCreationMode, CommonPluginElement, DEFAULT_ROUTE_MARGIN, Generator, IS_RESIZING, ImageBaseComponent, ImageGenerator, MediaKeys, PICTURE_ACCEPTED_UPLOAD_SIZE, PRIMARY_COLOR, PointGraph, PointNode, PriorityQueue, PropertyTransforms, RESIZE_HANDLE_DIAMETER, ResizeHandle, TRANSPARENT, TextTransforms, WithCommonPluginKey, WithTextPluginKey, acceptImageTypes, addElementOfFocusedImage, addResizing, alignBottom, alignHorizontalCenter, alignLeft, alignRight, alignTop, alignVerticalCenter, buildImage, calculatePolylineLength, createGraph, distributeHorizontal, distributeVertical, drawFillPrimaryHandle, drawHandle, drawPrimaryHandle, generateElbowLineRoute, getCreationMode, getCrossingPointsBetweenPointAndSegment, getDirectionBetweenPointAndPoint, getDirectionByPointOfRectangle, getDirectionByVector, getDirectionFactor, getDirectionFactorByDirectionComponent, getElementOfFocusedImage, getElementsText, getExtendPoint, getFirstTextEditor, getFirstTextManage, getGraphPoints, getIndexByResizeHandle, getMemorizedLatest, getNextPoint, getOppositeDirection, getPointByVectorComponent, getPointByVectorDirectionComponent, getPointOnPolyline, getPoints, getRatioByPoint, getRectangleResizeHandleRefs, getResizeHandleByIndex, getResizeHandlePointByIndex, getSourceAndTargetOuterRectangle, getSymmetricHandleIndex, getTextEditors, getTextManages, getTextMarksByElement, getUnitVectorByPointAndPoint, hasAfterDraw, isCornerHandle, isDelete, isDndMode, isDrawingMode, isEdgeHandle, isEnterHotkey, isExpandHotkey, isPointOnSegment, isResizing, isResizingByCondition, isSourceAndTargetIntersect, isSpaceHotkey, isTabHotkey, isVirtualKey, memorizeLatest, normalizeShapePoints, reduceRouteMargin, removeDuplicatePoints, removeElementOfFocusedImage, removeResizing,
|
|
1873
|
+
export { AStar, ActiveGenerator, AlignTransform, BASE, BoardCreationMode, CommonPluginElement, DEFAULT_ROUTE_MARGIN, Generator, IS_RESIZING, ImageBaseComponent, ImageGenerator, MediaKeys, PICTURE_ACCEPTED_UPLOAD_SIZE, PRIMARY_COLOR, PointGraph, PointNode, PriorityQueue, PropertyTransforms, RESIZE_HANDLE_DIAMETER, ResizeHandle, TRANSPARENT, TextTransforms, WithCommonPluginKey, WithTextPluginKey, acceptImageTypes, addElementOfFocusedImage, addResizing, alignBottom, alignHorizontalCenter, alignLeft, alignRight, alignTop, alignVerticalCenter, buildImage, calculatePolylineLength, createGraph, distributeHorizontal, distributeVertical, drawFillPrimaryHandle, drawHandle, drawPrimaryHandle, generateElbowLineRoute, getCreationMode, getCrossingPointsBetweenPointAndSegment, getDirectionBetweenPointAndPoint, getDirectionByPointOfRectangle, getDirectionByVector, getDirectionFactor, getDirectionFactorByDirectionComponent, getElementOfFocusedImage, getElementsText, getExtendPoint, getFirstTextEditor, getFirstTextManage, getGraphPoints, getIndexByResizeHandle, getMemorizedLatest, getNextPoint, getOppositeDirection, getPointByVectorComponent, getPointByVectorDirectionComponent, getPointOnPolyline, getPoints, getRatioByPoint, getRectangleResizeHandleRefs, getResizeHandleByIndex, getResizeHandlePointByIndex, getRotatedResizeCursorClassByAngle, getSourceAndTargetOuterRectangle, getSymmetricHandleIndex, getTextEditors, getTextManages, getTextMarksByElement, getUnitVectorByPointAndPoint, hasAfterDraw, isCornerHandle, isDelete, isDndMode, isDrawingMode, isEdgeHandle, isEnterHotkey, isExpandHotkey, isPointOnSegment, isResizing, isResizingByCondition, isSourceAndTargetIntersect, isSpaceHotkey, isTabHotkey, isVirtualKey, memorizeLatest, normalizeShapePoints, reduceRouteMargin, removeDuplicatePoints, removeElementOfFocusedImage, removeResizing, resetPointsAfterResize, rotateVector, rotateVectorAnti90, routeAdjust, selectImage, setCreationMode, setProperty, simplifyOrthogonalPoints, withGroup, withResize };
|
|
1593
1874
|
//# sourceMappingURL=plait-common.mjs.map
|