@plait/core 0.51.4 → 0.52.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/esm2022/utils/element.mjs +5 -17
- package/esm2022/utils/index.mjs +1 -2
- package/esm2022/utils/math.mjs +1 -11
- package/esm2022/utils/selection.mjs +2 -6
- package/fesm2022/plait-core.mjs +5 -64
- package/fesm2022/plait-core.mjs.map +1 -1
- package/package.json +3 -3
- package/utils/index.d.ts +0 -1
- package/utils/math.d.ts +0 -8
- package/esm2022/utils/angle.mjs +0 -36
- package/utils/angle.d.ts +0 -5
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plait/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.52.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/common": "^
|
|
6
|
-
"@angular/core": "^
|
|
5
|
+
"@angular/common": "^17.2.4",
|
|
6
|
+
"@angular/core": "^17.2.4",
|
|
7
7
|
"is-hotkey": "^0.2.0"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
package/utils/index.d.ts
CHANGED
package/utils/math.d.ts
CHANGED
|
@@ -27,11 +27,3 @@ export declare function getVectorFromPointAndSlope(x: number, y: number, slope:
|
|
|
27
27
|
*/
|
|
28
28
|
export declare function toDomPrecision(v: number): number;
|
|
29
29
|
export declare function toFixed(v: number): number;
|
|
30
|
-
/**
|
|
31
|
-
* Whether two numbers numbers a and b are approximately equal.
|
|
32
|
-
*
|
|
33
|
-
* @param a - The first point.
|
|
34
|
-
* @param b - The second point.
|
|
35
|
-
* @public
|
|
36
|
-
*/
|
|
37
|
-
export declare function approximately(a: number, b: number, precision?: number): boolean;
|
package/esm2022/utils/angle.mjs
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
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
|
-
return points.map(point => {
|
|
8
|
-
return rotate(point[0], point[1], centerPoint[0], centerPoint[1], angle);
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
export const getSelectionAngle = (elements) => {
|
|
12
|
-
let angle = elements[0].angle || 0;
|
|
13
|
-
elements.forEach(item => {
|
|
14
|
-
if (item.angle !== angle && !approximately((item.angle % (Math.PI / 2)) - (angle % (Math.PI / 2)), 0)) {
|
|
15
|
-
angle = 0;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
return angle;
|
|
19
|
-
};
|
|
20
|
-
export const hasSameAngle = (elements) => {
|
|
21
|
-
return !!getSelectionAngle(elements);
|
|
22
|
-
};
|
|
23
|
-
export const getRotatedBoundingRectangle = (rectanglesCornerPoints, angle) => {
|
|
24
|
-
let rectanglesFromOrigin = [];
|
|
25
|
-
for (let i = 0; i < rectanglesCornerPoints.length; i++) {
|
|
26
|
-
const cornerPoints = rectanglesCornerPoints[i];
|
|
27
|
-
const invertCornerPointsFromOrigin = rotatePoints(cornerPoints, [0, 0], -angle);
|
|
28
|
-
rectanglesFromOrigin.push(RectangleClient.getRectangleByPoints(invertCornerPointsFromOrigin));
|
|
29
|
-
}
|
|
30
|
-
const selectionRectangleFromOrigin = RectangleClient.getBoundingRectangle(rectanglesFromOrigin);
|
|
31
|
-
const selectionCornerPoints = RectangleClient.getCornerPoints(selectionRectangleFromOrigin);
|
|
32
|
-
const cornerPointsFromOrigin = rotatePoints(selectionCornerPoints, [0, 0], angle);
|
|
33
|
-
const centerPoint = RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(cornerPointsFromOrigin));
|
|
34
|
-
return RectangleClient.getRectangleByPoints(rotatePoints(cornerPointsFromOrigin, centerPoint, -angle));
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5nbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9hbmdsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFlLEVBQUUsV0FBa0IsRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUMvRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDVCxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN0QixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFVLENBQUM7SUFDdEYsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFFBQXdCLEVBQUUsRUFBRTtJQUMxRCxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNuQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3BCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQXdCLEVBQUUsRUFBRTtJQUNyRCxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLHNCQUFzRCxFQUFFLEtBQWEsRUFBRSxFQUFFO0lBQ2pILElBQUksb0JBQW9CLEdBQXNCLEVBQUUsQ0FBQztJQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDckQsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsTUFBTSw0QkFBNEIsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEYsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELE1BQU0sNEJBQTRCLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEcsTUFBTSxxQkFBcUIsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDNUYsTUFBTSxzQkFBc0IsR0FBRyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEYsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQ2pILE9BQU8sZUFBZSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0RWxlbWVudCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgYXBwcm94aW1hdGVseSwgcm90YXRlIH0gZnJvbSAnLi9tYXRoJztcblxuZXhwb3J0IGNvbnN0IHJvdGF0ZVBvaW50cyA9IChwb2ludHM6IFBvaW50W10sIGNlbnRlclBvaW50OiBQb2ludCwgYW5nbGU6IG51bWJlcikgPT4ge1xuICAgIGlmICghYW5nbGUpIHtcbiAgICAgICAgYW5nbGUgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gcG9pbnRzLm1hcChwb2ludCA9PiB7XG4gICAgICAgIHJldHVybiByb3RhdGUocG9pbnRbMF0sIHBvaW50WzFdLCBjZW50ZXJQb2ludFswXSwgY2VudGVyUG9pbnRbMV0sIGFuZ2xlKSBhcyBQb2ludDtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3Rpb25BbmdsZSA9IChlbGVtZW50czogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBsZXQgYW5nbGUgPSBlbGVtZW50c1swXS5hbmdsZSB8fCAwO1xuICAgIGVsZW1lbnRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmFuZ2xlICE9PSBhbmdsZSAmJiAhYXBwcm94aW1hdGVseSgoaXRlbS5hbmdsZSAlIChNYXRoLlBJIC8gMikpIC0gKGFuZ2xlICUgKE1hdGguUEkgLyAyKSksIDApKSB7XG4gICAgICAgICAgICBhbmdsZSA9IDA7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYW5nbGU7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzU2FtZUFuZ2xlID0gKGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIHJldHVybiAhIWdldFNlbGVjdGlvbkFuZ2xlKGVsZW1lbnRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSb3RhdGVkQm91bmRpbmdSZWN0YW5nbGUgPSAocmVjdGFuZ2xlc0Nvcm5lclBvaW50czogW1BvaW50LCBQb2ludCwgUG9pbnQsIFBvaW50XVtdLCBhbmdsZTogbnVtYmVyKSA9PiB7XG4gICAgbGV0IHJlY3RhbmdsZXNGcm9tT3JpZ2luOiBSZWN0YW5nbGVDbGllbnRbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdGFuZ2xlc0Nvcm5lclBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb3JuZXJQb2ludHMgPSByZWN0YW5nbGVzQ29ybmVyUG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBpbnZlcnRDb3JuZXJQb2ludHNGcm9tT3JpZ2luID0gcm90YXRlUG9pbnRzKGNvcm5lclBvaW50cywgWzAsIDBdLCAtYW5nbGUpO1xuICAgICAgICByZWN0YW5nbGVzRnJvbU9yaWdpbi5wdXNoKFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhpbnZlcnRDb3JuZXJQb2ludHNGcm9tT3JpZ2luKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0aW9uUmVjdGFuZ2xlRnJvbU9yaWdpbiA9IFJlY3RhbmdsZUNsaWVudC5nZXRCb3VuZGluZ1JlY3RhbmdsZShyZWN0YW5nbGVzRnJvbU9yaWdpbik7XG4gICAgY29uc3Qgc2VsZWN0aW9uQ29ybmVyUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhzZWxlY3Rpb25SZWN0YW5nbGVGcm9tT3JpZ2luKTtcbiAgICBjb25zdCBjb3JuZXJQb2ludHNGcm9tT3JpZ2luID0gcm90YXRlUG9pbnRzKHNlbGVjdGlvbkNvcm5lclBvaW50cywgWzAsIDBdLCBhbmdsZSk7XG4gICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGNvcm5lclBvaW50c0Zyb21PcmlnaW4pKTtcbiAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJvdGF0ZVBvaW50cyhjb3JuZXJQb2ludHNGcm9tT3JpZ2luLCBjZW50ZXJQb2ludCwgLWFuZ2xlKSk7XG59O1xuIl19
|
package/utils/angle.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { PlaitElement, Point, RectangleClient } from '../interfaces';
|
|
2
|
-
export declare const rotatePoints: (points: Point[], centerPoint: Point, angle: number) => Point[];
|
|
3
|
-
export declare const getSelectionAngle: (elements: PlaitElement[]) => any;
|
|
4
|
-
export declare const hasSameAngle: (elements: PlaitElement[]) => boolean;
|
|
5
|
-
export declare const getRotatedBoundingRectangle: (rectanglesCornerPoints: [Point, Point, Point, Point][], angle: number) => RectangleClient;
|