linearly 0.0.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Baku Hashimoto
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Lienarly
2
+
3
+ [glMatrix](https://github.com/toji/gl-matrix)-like library but using immutable data structure.
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Common utilities
3
+ */
4
+ export declare const EPSILON = 0.000001;
5
+ /**
6
+ * Symmetric round
7
+ * see https://www.npmjs.com/package/round-half-up-symmetric#user-content-detailed-background
8
+ */
9
+ export declare function round(a: number): number;
10
+ export type AngleOrder = 'xyz' | 'xzy' | 'yxz' | 'yzx' | 'zxy' | 'zyx';
11
+ export declare const DEFAULT_ANGLE_ORDER: AngleOrder;
package/lib/common.js ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Common utilities
3
+ */
4
+ // Configuration Constants
5
+ export const EPSILON = 0.000001;
6
+ /**
7
+ * Symmetric round
8
+ * see https://www.npmjs.com/package/round-half-up-symmetric#user-content-detailed-background
9
+ */
10
+ export function round(a) {
11
+ if (a >= 0)
12
+ return Math.round(a);
13
+ return a % 0.5 === 0 ? Math.floor(a) : Math.round(a);
14
+ }
15
+ export const DEFAULT_ANGLE_ORDER = 'zyx';
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILDBCQUEwQjtBQUMxQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFBO0FBRS9COzs7R0FHRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQUMsQ0FBUztJQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDckQsQ0FBQztBQUlELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFlLEtBQUssQ0FBQSJ9
package/lib/index.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ export * as vec2 from './vec2';
2
+ export type { Vec2 } from './vec2';
3
+ export * as vec3 from './vec3';
4
+ export type { Vec3 } from './vec3';
5
+ export * as vec4 from './vec4';
6
+ export type { Vec4 } from './vec4';
7
+ export * as mat2 from './mat2';
8
+ export type { Mat2 } from './mat2';
9
+ export * as mat2d from './mat2d';
10
+ export type { Mat2d } from './mat2d';
11
+ export * as mat3 from './mat3';
12
+ export type { Mat3 } from './mat3';
13
+ export * as mat4 from './mat4';
14
+ export type { Mat4 } from './mat4';
15
+ export * as quat from './quat';
16
+ export type { Quat } from './quat';
package/lib/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export * as vec2 from './vec2';
2
+ export * as vec3 from './vec3';
3
+ export * as vec4 from './vec4';
4
+ export * as mat2 from './mat2';
5
+ export * as mat2d from './mat2d';
6
+ export * as mat3 from './mat3';
7
+ export * as mat4 from './mat4';
8
+ export * as quat from './quat';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUE7QUFHOUIsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUE7QUFHOUIsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUE7QUFHOUIsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUE7QUFHOUIsT0FBTyxLQUFLLEtBQUssTUFBTSxTQUFTLENBQUE7QUFHaEMsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUE7QUFHOUIsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUE7QUFHOUIsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUEifQ==
package/lib/mat2.d.ts ADDED
@@ -0,0 +1,78 @@
1
+ import { Vec2 } from './vec2';
2
+ export type Mat2 = readonly [number, number, number, number];
3
+ /**
4
+ * The identity matrix of mat2
5
+ *
6
+ */
7
+ export declare const identity: Mat2;
8
+ /**
9
+ * Transpose the values of a mat2
10
+ */
11
+ export declare function transpose(a: Mat2): Mat2;
12
+ /**
13
+ * Inverts a mat2
14
+ */
15
+ export declare function invert(a: Mat2): Mat2 | null;
16
+ /**
17
+ * Calculates the adjugate of a mat2
18
+ */
19
+ export declare function adjoint(a: Mat2): Mat2;
20
+ /**
21
+ * Calculates the determinant of a mat2
22
+ * @returns determinant of a
23
+ */
24
+ export declare function determinant(a: Mat2): number;
25
+ /**
26
+ * Multiplies two mat2's
27
+ */
28
+ export declare function multiply(a: Mat2, b: Mat2): Mat2;
29
+ /**
30
+ * Rotates a mat2 by the given angle
31
+ *
32
+ * @param a the matrix to rotate
33
+ * @param rad the angle to rotate the matrix by
34
+ */
35
+ export declare function rotate(a: Mat2, rad: number): Mat2;
36
+ /**
37
+ * Scales the mat2 by the dimensions in the given vec2
38
+ **/
39
+ export declare function scale(a: Mat2, v: Vec2): Mat2;
40
+ /**
41
+ * Creates a matrix from a given angle
42
+ */
43
+ export declare function fromRotation(rad: number): Mat2;
44
+ /**
45
+ * Creates a matrix from a vector scaling
46
+ */
47
+ export declare function fromScaling(v: Vec2): Mat2;
48
+ /**
49
+ * Returns Frobenius norm of a mat2
50
+ */
51
+ export declare function frob(a: Mat2): number;
52
+ /**
53
+ * Adds two mat2's
54
+ */
55
+ export declare function add(a: Mat2, b: Mat2): Mat2;
56
+ /**
57
+ * Subtracts matrix b from matrix a
58
+ */
59
+ export declare function subtract(a: Mat2, b: Mat2): Mat2;
60
+ /**
61
+ * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
62
+ */
63
+ export declare function exactEquals(a: Mat2, b: Mat2): boolean;
64
+ /**
65
+ * Returns whether or not the matrices have approximately the same elements in the same position.
66
+ */
67
+ export declare function equals(a: Mat2, b: Mat2): boolean;
68
+ /**
69
+ * Multiply each element of the matrix by a scalar.
70
+ *
71
+ * @param a the matrix to scale
72
+ * @param s amount to scale the matrix's elements by
73
+ */
74
+ export declare function multiplyScalar(a: Mat2, s: number): Mat2;
75
+ /**
76
+ * Adds two mat2's after multiplying each element of the second operand by a scalar value.
77
+ */
78
+ export declare function multiplyScalarAndAdd(a: Mat2, b: Mat2, scale: number): Mat2;
package/lib/mat2.js ADDED
@@ -0,0 +1,155 @@
1
+ import * as Common from './common';
2
+ /**
3
+ * The identity matrix of mat2
4
+ *
5
+ */
6
+ export const identity = Object.freeze([1, 0, 0, 1]);
7
+ /**
8
+ * Transpose the values of a mat2
9
+ */
10
+ export function transpose(a) {
11
+ // prettier-ignore
12
+ return [
13
+ a[0], a[2],
14
+ a[1], a[3],
15
+ ];
16
+ }
17
+ /**
18
+ * Inverts a mat2
19
+ */
20
+ export function invert(a) {
21
+ const [a0, a1, a2, a3] = a;
22
+ // Calculate the determinant
23
+ const det = a0 * a3 - a2 * a1;
24
+ if (!det) {
25
+ return null;
26
+ }
27
+ const detinv = 1 / det;
28
+ // prettier-ignore
29
+ return [
30
+ a3 * detinv, -a1 * detinv,
31
+ -a2 * detinv, a0 * detinv
32
+ ];
33
+ }
34
+ /**
35
+ * Calculates the adjugate of a mat2
36
+ */
37
+ export function adjoint(a) {
38
+ // Caching this value is necessary if out == a
39
+ const a0 = a[0];
40
+ return [a[3], -a[1], -a[2], a0];
41
+ }
42
+ /**
43
+ * Calculates the determinant of a mat2
44
+ * @returns determinant of a
45
+ */
46
+ export function determinant(a) {
47
+ return a[0] * a[3] - a[2] * a[1];
48
+ }
49
+ /**
50
+ * Multiplies two mat2's
51
+ */
52
+ export function multiply(a, b) {
53
+ const [a0, a1, a2, a3] = a;
54
+ const [b0, b1, b2, b3] = b;
55
+ return [
56
+ a0 * b0 + a2 * b1,
57
+ a1 * b0 + a3 * b1,
58
+ a0 * b2 + a2 * b3,
59
+ a1 * b2 + a3 * b3,
60
+ ];
61
+ }
62
+ /**
63
+ * Rotates a mat2 by the given angle
64
+ *
65
+ * @param a the matrix to rotate
66
+ * @param rad the angle to rotate the matrix by
67
+ */
68
+ export function rotate(a, rad) {
69
+ const [a0, a1, a2, a3] = a;
70
+ const s = Math.sin(rad);
71
+ const c = Math.cos(rad);
72
+ return [a0 * c + a2 * s, a1 * c + a3 * s, a0 * -s + a2 * c, a1 * -s + a3 * c];
73
+ }
74
+ /**
75
+ * Scales the mat2 by the dimensions in the given vec2
76
+ **/
77
+ export function scale(a, v) {
78
+ const [a0, a1, a2, a3] = a;
79
+ const [v0, v1] = v;
80
+ return [a0 * v0, a1 * v0, a2 * v1, a3 * v1];
81
+ }
82
+ /**
83
+ * Creates a matrix from a given angle
84
+ */
85
+ export function fromRotation(rad) {
86
+ const s = Math.sin(rad);
87
+ const c = Math.cos(rad);
88
+ return [c, s, -s, c];
89
+ }
90
+ /**
91
+ * Creates a matrix from a vector scaling
92
+ */
93
+ export function fromScaling(v) {
94
+ return [v[0], 0, 0, v[1]];
95
+ }
96
+ /**
97
+ * Returns Frobenius norm of a mat2
98
+ */
99
+ export function frob(a) {
100
+ return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3]);
101
+ }
102
+ /**
103
+ * Adds two mat2's
104
+ */
105
+ export function add(a, b) {
106
+ return [a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3]];
107
+ }
108
+ /**
109
+ * Subtracts matrix b from matrix a
110
+ */
111
+ export function subtract(a, b) {
112
+ return [a[0] - b[0], a[1] - b[1], a[2] - b[2], a[3] - b[3]];
113
+ }
114
+ /**
115
+ * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
116
+ */
117
+ export function exactEquals(a, b) {
118
+ return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];
119
+ }
120
+ /**
121
+ * Returns whether or not the matrices have approximately the same elements in the same position.
122
+ */
123
+ export function equals(a, b) {
124
+ const [a0, a1, a2, a3] = a;
125
+ const [b0, b1, b2, b3] = b;
126
+ return (Math.abs(a0 - b0) <=
127
+ Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
128
+ Math.abs(a1 - b1) <=
129
+ Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
130
+ Math.abs(a2 - b2) <=
131
+ Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
132
+ Math.abs(a3 - b3) <=
133
+ Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)));
134
+ }
135
+ /**
136
+ * Multiply each element of the matrix by a scalar.
137
+ *
138
+ * @param a the matrix to scale
139
+ * @param s amount to scale the matrix's elements by
140
+ */
141
+ export function multiplyScalar(a, s) {
142
+ return [a[0] * s, a[1] * s, a[2] * s, a[3] * s];
143
+ }
144
+ /**
145
+ * Adds two mat2's after multiplying each element of the second operand by a scalar value.
146
+ */
147
+ export function multiplyScalarAndAdd(a, b, scale) {
148
+ return [
149
+ a[0] + b[0] * scale,
150
+ a[1] + b[1] * scale,
151
+ a[2] + b[2] * scale,
152
+ a[3] + b[3] * scale,
153
+ ];
154
+ }
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYXQyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sVUFBVSxDQUFBO0FBS2xDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUV6RDs7R0FFRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBTztJQUNoQyxrQkFBa0I7SUFDbEIsT0FBTztRQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDVixDQUFBO0FBQ0YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxDQUFPO0lBQzdCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFMUIsNEJBQTRCO0lBQzVCLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtJQUU3QixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1QsT0FBTyxJQUFJLENBQUE7S0FDWDtJQUNELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUE7SUFFdEIsa0JBQWtCO0lBQ2xCLE9BQU87UUFDSixFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU07UUFDMUIsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFHLEVBQUUsR0FBRyxNQUFNO0tBQzNCLENBQUE7QUFDRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLENBQU87SUFDOUIsOENBQThDO0lBQzlDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNmLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDaEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsQ0FBTztJQUNsQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNqQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ3hDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDMUIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUUxQixPQUFPO1FBQ04sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNqQixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ2pCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDakIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtLQUNqQixDQUFBO0FBQ0YsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxDQUFPLEVBQUUsR0FBVztJQUMxQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzFCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV2QixPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQzlFLENBQUM7QUFFRDs7SUFFSTtBQUNKLE1BQU0sVUFBVSxLQUFLLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDckMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMxQixNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUVsQixPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO0FBQzVDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVztJQUN2QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDckIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxDQUFPO0lBQ2xDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUMxQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsSUFBSSxDQUFDLENBQU87SUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUN4RSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDNUQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUN4QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzVELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0s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
package/lib/mat2d.d.ts ADDED
@@ -0,0 +1,89 @@
1
+ import { Vec2 } from './vec2';
2
+ export type Mat2d = readonly [number, number, number, number, number, number];
3
+ /**
4
+ * 2x3 Matrix
5
+ * @module mat2d
6
+ * @description
7
+ * A mat2d contains six elements defined as:
8
+ * <pre>
9
+ * [a, b,
10
+ * c, d,
11
+ * tx, ty]
12
+ * </pre>
13
+ * This is a short form for the 3x3 matrix:
14
+ * <pre>
15
+ * [a, b, 0,
16
+ * c, d, 0,
17
+ * tx, ty, 1]
18
+ * </pre>
19
+ * The last column is ignored so the array is shorter and operations are faster.
20
+ */
21
+ /**
22
+ * The identity matrix of mat2d
23
+ */
24
+ export declare const identity: readonly number[];
25
+ /**
26
+ * Inverts a mat2d
27
+ */
28
+ export declare function invert(a: Mat2d): Mat2d | null;
29
+ /**
30
+ * Calculates the determinant of a mat2d
31
+ */
32
+ export declare function determinant(a: Mat2d): number;
33
+ /**
34
+ * Multiplies two mat2d's
35
+ */
36
+ export declare function multiply(a: Mat2d, b: Mat2d): Mat2d;
37
+ /**
38
+ * Rotates a mat2d by the given angle
39
+ */
40
+ export declare function rotate(a: Mat2d, rad: number): Mat2d;
41
+ /**
42
+ * Scales the mat2d by the dimensions in the given vec2
43
+ **/
44
+ export declare function scale(a: Mat2d, v: Vec2): Mat2d;
45
+ /**
46
+ * Translates the mat2d by the dimensions in the given vec2
47
+ **/
48
+ export declare function translate(m: Mat2d, v: Vec2): Mat2d;
49
+ /**
50
+ * Creates a matrix from a given angle
51
+ * This is equivalent to (but much faster than):
52
+ */
53
+ export declare function fromRotation(rad: number): Mat2d;
54
+ /**
55
+ * Creates a matrix from a vector scaling
56
+ */
57
+ export declare function fromScaling(v: Vec2): Mat2d;
58
+ /**
59
+ * Creates a matrix from a vector translation
60
+ */
61
+ export declare function fromTranslation(v: Vec2): Mat2d;
62
+ /**
63
+ * Returns Frobenius norm of a mat2d
64
+ */
65
+ export declare function frob(a: Mat2d): number;
66
+ /**
67
+ * Adds two mat2d's
68
+ */
69
+ export declare function add(a: Mat2d, b: Mat2d): Mat2d;
70
+ /**
71
+ * Subtracts matrix b from matrix a
72
+ */
73
+ export declare function subtract(a: Mat2d, b: Mat2d): Mat2d;
74
+ /**
75
+ * Multiply each element of the matrix by a scalar.
76
+ */
77
+ export declare function multiplyScalar(a: Mat2d, s: number): Mat2d;
78
+ /**
79
+ * Adds two mat2d's after multiplying each element of the second operand by a scalar value.
80
+ */
81
+ export declare function multiplyScalarAndAdd(a: Mat2d, b: Mat2d, scale: number): Mat2d;
82
+ /**
83
+ * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
84
+ */
85
+ export declare function exactEquals(a: Mat2d, b: Mat2d): boolean;
86
+ /**
87
+ * Returns whether or not the matrices have approximately the same elements in the same position.
88
+ */
89
+ export declare function equals(a: Mat2d, b: Mat2d): boolean;
package/lib/mat2d.js ADDED
@@ -0,0 +1,238 @@
1
+ import * as Common from './common';
2
+ /**
3
+ * 2x3 Matrix
4
+ * @module mat2d
5
+ * @description
6
+ * A mat2d contains six elements defined as:
7
+ * <pre>
8
+ * [a, b,
9
+ * c, d,
10
+ * tx, ty]
11
+ * </pre>
12
+ * This is a short form for the 3x3 matrix:
13
+ * <pre>
14
+ * [a, b, 0,
15
+ * c, d, 0,
16
+ * tx, ty, 1]
17
+ * </pre>
18
+ * The last column is ignored so the array is shorter and operations are faster.
19
+ */
20
+ /**
21
+ * The identity matrix of mat2d
22
+ */
23
+ // prettier-ignore
24
+ export const identity = Object.freeze([
25
+ 1, 0,
26
+ 0, 1,
27
+ 0, 0
28
+ ]);
29
+ /**
30
+ * Inverts a mat2d
31
+ */
32
+ export function invert(a) {
33
+ const [aa, ab, ac, ad, atx, aty] = a;
34
+ const det = aa * ad - ab * ac;
35
+ if (!det) {
36
+ return null;
37
+ }
38
+ const detinv = 1 / det;
39
+ // prettier-ignore
40
+ return [
41
+ ad * detinv, -ab * detinv,
42
+ -ac * detinv, aa * detinv,
43
+ (ac * aty - ad * atx) * detinv,
44
+ (ab * atx - aa * aty) * detinv,
45
+ ];
46
+ }
47
+ /**
48
+ * Calculates the determinant of a mat2d
49
+ */
50
+ export function determinant(a) {
51
+ return a[0] * a[3] - a[1] * a[2];
52
+ }
53
+ /**
54
+ * Multiplies two mat2d's
55
+ */
56
+ export function multiply(a, b) {
57
+ const [a0, a1, a2, a3, a4, a5] = a;
58
+ const [b0, b1, b2, b3, b4, b5] = b;
59
+ // prettier-ignore
60
+ return [
61
+ a0 * b0 + a2 * b1, a1 * b0 + a3 * b1,
62
+ a0 * b2 + a2 * b3, a1 * b2 + a3 * b3,
63
+ a0 * b4 + a2 * b5 + a4,
64
+ a1 * b4 + a3 * b5 + a5,
65
+ ];
66
+ }
67
+ /**
68
+ * Rotates a mat2d by the given angle
69
+ */
70
+ export function rotate(a, rad) {
71
+ const [a0, a1, a2, a3, tx, ty] = a;
72
+ const s = Math.sin(rad);
73
+ const c = Math.cos(rad);
74
+ // prettier-ignore
75
+ return [
76
+ a0 * c + a2 * s, a1 * c + a3 * s,
77
+ a0 * -s + a2 * c, a1 * -s + a3 * c,
78
+ tx, ty
79
+ ];
80
+ }
81
+ /**
82
+ * Scales the mat2d by the dimensions in the given vec2
83
+ **/
84
+ export function scale(a, v) {
85
+ const [a0, a1, a2, a3, tx, ty] = a;
86
+ const [sx, sy] = v;
87
+ // prettier-ignore
88
+ return [
89
+ a0 * sx, a1 * sx,
90
+ a2 * sy, a3 * sy,
91
+ tx, ty
92
+ ];
93
+ }
94
+ /**
95
+ * Translates the mat2d by the dimensions in the given vec2
96
+ **/
97
+ export function translate(m, v) {
98
+ const [a, b, c, d, tx, ty] = m;
99
+ const [x, y] = v;
100
+ // prettier-ignore
101
+ return [
102
+ a, b,
103
+ c, d,
104
+ a * x + c * y + tx,
105
+ b * x + d * y + ty
106
+ ];
107
+ }
108
+ /**
109
+ * Creates a matrix from a given angle
110
+ * This is equivalent to (but much faster than):
111
+ */
112
+ export function fromRotation(rad) {
113
+ const s = Math.sin(rad);
114
+ const c = Math.cos(rad);
115
+ // prettier-ignore
116
+ return [
117
+ c, s,
118
+ -s, c,
119
+ 0, 0,
120
+ ];
121
+ }
122
+ /**
123
+ * Creates a matrix from a vector scaling
124
+ */
125
+ export function fromScaling(v) {
126
+ const [x, y] = v;
127
+ // prettier-ignore
128
+ return [
129
+ x, 0,
130
+ 0, y,
131
+ 0, 0,
132
+ ];
133
+ }
134
+ /**
135
+ * Creates a matrix from a vector translation
136
+ */
137
+ export function fromTranslation(v) {
138
+ const [x, y] = v;
139
+ // prettier-ignore
140
+ return [
141
+ 1, 0,
142
+ 0, 1,
143
+ x, y,
144
+ ];
145
+ }
146
+ /**
147
+ * Returns Frobenius norm of a mat2d
148
+ */
149
+ export function frob(a) {
150
+ // prettier-ignore
151
+ return Math.sqrt(a[0] ** 2 +
152
+ a[1] ** 2 +
153
+ a[2] ** 2 +
154
+ a[3] ** 2 +
155
+ a[4] ** 2 +
156
+ a[5] ** 2 + 1);
157
+ }
158
+ /**
159
+ * Adds two mat2d's
160
+ */
161
+ export function add(a, b) {
162
+ return [
163
+ a[0] + b[0],
164
+ a[1] + b[1],
165
+ a[2] + b[2],
166
+ a[3] + b[3],
167
+ a[4] + b[4],
168
+ a[5] + b[5],
169
+ ];
170
+ }
171
+ /**
172
+ * Subtracts matrix b from matrix a
173
+ */
174
+ export function subtract(a, b) {
175
+ return [
176
+ a[0] - b[0],
177
+ a[1] - b[1],
178
+ a[2] - b[2],
179
+ a[3] - b[3],
180
+ a[4] - b[4],
181
+ a[5] - b[5],
182
+ ];
183
+ }
184
+ /**
185
+ * Multiply each element of the matrix by a scalar.
186
+ */
187
+ export function multiplyScalar(a, s) {
188
+ // prettier-ignore
189
+ return [
190
+ a[0] * s, a[1] * s,
191
+ a[2] * s, a[3] * s,
192
+ a[4] * s, a[5] * s,
193
+ ];
194
+ }
195
+ /**
196
+ * Adds two mat2d's after multiplying each element of the second operand by a scalar value.
197
+ */
198
+ export function multiplyScalarAndAdd(a, b, scale) {
199
+ return [
200
+ a[0] + b[0] * scale,
201
+ a[1] + b[1] * scale,
202
+ a[2] + b[2] * scale,
203
+ a[3] + b[3] * scale,
204
+ a[4] + b[4] * scale,
205
+ a[5] + b[5] * scale,
206
+ ];
207
+ }
208
+ /**
209
+ * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
210
+ */
211
+ export function exactEquals(a, b) {
212
+ return (a[0] === b[0] &&
213
+ a[1] === b[1] &&
214
+ a[2] === b[2] &&
215
+ a[3] === b[3] &&
216
+ a[4] === b[4] &&
217
+ a[5] === b[5]);
218
+ }
219
+ /**
220
+ * Returns whether or not the matrices have approximately the same elements in the same position.
221
+ */
222
+ export function equals(a, b) {
223
+ const [a0, a1, a2, a3, a4, a5] = a;
224
+ const [b0, b1, b2, b3, b4, b5] = b;
225
+ return (Math.abs(a0 - b0) <=
226
+ Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
227
+ Math.abs(a1 - b1) <=
228
+ Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
229
+ Math.abs(a2 - b2) <=
230
+ Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
231
+ Math.abs(a3 - b3) <=
232
+ Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&
233
+ Math.abs(a4 - b4) <=
234
+ Common.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&
235
+ Math.abs(a5 - b5) <=
236
+ Common.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)));
237
+ }
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0MmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWF0MmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUE7QUFLbEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUg7O0dBRUc7QUFDSCxrQkFBa0I7QUFDbEIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDckMsQ0FBQyxFQUFFLENBQUM7SUFDSixDQUFDLEVBQUUsQ0FBQztJQUNKLENBQUMsRUFBRSxDQUFDO0NBQ0osQ0FBQyxDQUFBO0FBRUY7O0dBRUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQVE7SUFDOUIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXBDLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtJQUU3QixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1QsT0FBTyxJQUFJLENBQUE7S0FDWDtJQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUE7SUFFdEIsa0JBQWtCO0lBQ2xCLE9BQU87UUFDSixFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU07UUFDMUIsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFHLEVBQUUsR0FBRyxNQUFNO1FBRTFCLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUMvQixDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07S0FDOUIsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsQ0FBUTtJQUNu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SSxDQUFDO1FBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUNiLENBQUE7QUFDRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQVEsRUFBRSxDQUFRO0lBQ3JDLE9BQU87UUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDWCxDQUFBO0FBQ0YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxDQUFRLEVBQUUsQ0FBUTtJQUMxQyxPQUFPO1FBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ1gsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBUSxFQUFFLENBQVM7SUFDakQsa0JBQWtCO0lBQ2xCLE9BQU87UUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztLQUNsQixDQUFBO0FBQ0YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLENBQVEsRUFBRSxDQUFRLEVBQUUsS0FBYTtJQUNyRSxPQUFPO1FBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7UUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7S0FDbkIsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsQ0FBUSxFQUFFLENBQVE7SUFDN0MsT0FBTyxDQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNiLENBQUE7QUFDRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQVEsRUFBRSxDQUFRO0lBQ3hDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNsQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEMsT0FBTyxDQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3pELENBQUE7QUFDRixDQUFDIn0=
@@ -0,0 +1 @@
1
+ export {};