@adobe/data 0.5.20 → 0.5.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/graphics/frame.d.ts +22 -1
  2. package/dist/graphics/frame.js +11 -14
  3. package/dist/graphics/frame.js.map +1 -1
  4. package/dist/graphics/get-web-gpu-device-and-context.d.ts +2 -1
  5. package/dist/graphics/get-web-gpu-device-and-context.js +20 -23
  6. package/dist/graphics/get-web-gpu-device-and-context.js.map +1 -1
  7. package/dist/graphics/graphics-context.d.ts +5 -1
  8. package/dist/graphics/graphics-context.js +0 -5
  9. package/dist/graphics/graphics-context.js.map +1 -1
  10. package/dist/lit/elements/service-application.d.ts +9 -0
  11. package/dist/lit/elements/service-application.js +55 -0
  12. package/dist/lit/elements/service-application.js.map +1 -0
  13. package/dist/lit/elements/service-context.d.ts +1 -0
  14. package/dist/{ecs/entity/u32.js → lit/elements/service-context.js} +3 -3
  15. package/dist/lit/elements/service-context.js.map +1 -0
  16. package/dist/lit/elements/service-element.d.ts +6 -0
  17. package/dist/lit/elements/service-element.js +43 -0
  18. package/dist/lit/elements/service-element.js.map +1 -0
  19. package/dist/lit/hooks/component/component.d.ts +1 -0
  20. package/dist/lit/hooks/index.d.ts +1 -0
  21. package/dist/lit/hooks/index.js +1 -0
  22. package/dist/lit/hooks/index.js.map +1 -1
  23. package/dist/lit/hooks/use-ref.d.ts +2 -2
  24. package/dist/lit/hooks/use-ref.js +2 -2
  25. package/dist/lit/hooks/use-ref.js.map +1 -1
  26. package/dist/lit/hooks/use-updated.d.ts +4 -0
  27. package/dist/lit/hooks/use-updated.js +39 -0
  28. package/dist/lit/hooks/use-updated.js.map +1 -0
  29. package/dist/math/picking/get-closest-entity-to-line.js +1 -1
  30. package/dist/math/picking/get-closest-entity-to-line.js.map +1 -1
  31. package/dist/math/picking/get-closest-entity-to-point.js +1 -1
  32. package/dist/math/picking/get-closest-entity-to-point.js.map +1 -1
  33. package/dist/math/picking/pick-from-tables.js +1 -1
  34. package/dist/math/picking/pick-from-tables.js.map +1 -1
  35. package/dist/math/picking/pick-result.d.ts +2 -4
  36. package/dist/tsconfig.tsbuildinfo +1 -1
  37. package/package.json +1 -1
  38. package/dist/ecs/entity/entity.d.ts +0 -8
  39. package/dist/ecs/entity/entity.js +0 -3
  40. package/dist/ecs/entity/entity.js.map +0 -1
  41. package/dist/ecs/entity/u32.d.ts +0 -8
  42. package/dist/ecs/entity/u32.js.map +0 -1
  43. package/dist/math/aabb-face/face.d.ts +0 -51
  44. package/dist/math/aabb-face/face.js +0 -110
  45. package/dist/math/aabb-face/face.js.map +0 -1
  46. package/dist/math/aabb-face/face.test.d.ts +0 -1
  47. package/dist/math/aabb-face/face.test.js +0 -94
  48. package/dist/math/aabb-face/face.test.js.map +0 -1
  49. package/dist/math/box/box.d.ts +0 -50
  50. package/dist/math/box/box.js +0 -23
  51. package/dist/math/box/box.js.map +0 -1
  52. package/dist/math/face/face.d.ts +0 -51
  53. package/dist/math/face/face.js +0 -110
  54. package/dist/math/face/face.js.map +0 -1
  55. package/dist/math/face/face.test.d.ts +0 -1
  56. package/dist/math/face/face.test.js +0 -94
  57. package/dist/math/face/face.test.js.map +0 -1
  58. package/dist/math/picking/face.d.ts +0 -1
  59. package/dist/math/picking/face.js +0 -2
  60. package/dist/math/picking/face.js.map +0 -1
  61. package/dist/math/picking/getClosestEntityToLine.d.ts +0 -4
  62. package/dist/math/picking/getClosestEntityToLine.js +0 -29
  63. package/dist/math/picking/getClosestEntityToLine.js.map +0 -1
  64. package/dist/math/picking/getClosestEntityToPoint.d.ts +0 -4
  65. package/dist/math/picking/getClosestEntityToPoint.js +0 -27
  66. package/dist/math/picking/getClosestEntityToPoint.js.map +0 -1
  67. package/dist/math/picking/getIntersectingEntities.d.ts +0 -12
  68. package/dist/math/picking/getIntersectingEntities.js +0 -15
  69. package/dist/math/picking/getIntersectingEntities.js.map +0 -1
  70. package/dist/math/transform/debug-inverse.d.ts +0 -1
  71. package/dist/math/transform/debug-inverse.js +0 -28
  72. package/dist/math/transform/debug-inverse.js.map +0 -1
  73. package/dist/math/transform/debug-quat.d.ts +0 -1
  74. package/dist/math/transform/debug-quat.js +0 -23
  75. package/dist/math/transform/debug-quat.js.map +0 -1
  76. package/dist/math/transform/debug-test.d.ts +0 -1
  77. package/dist/math/transform/debug-test.js +0 -34
  78. package/dist/math/transform/debug-test.js.map +0 -1
  79. package/dist/math/transform/transform.d.ts +0 -58
  80. package/dist/math/transform/transform.js +0 -101
  81. package/dist/math/transform/transform.js.map +0 -1
  82. package/dist/math/transform/transform.test.d.ts +0 -1
  83. package/dist/math/transform/transform.test.js +0 -309
  84. package/dist/math/transform/transform.test.js.map +0 -1
@@ -1,309 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { Transform } from "./transform.js";
3
- import { Vec3 } from "../vec3/vec3.js";
4
- import { Quat } from "../quat/quat.js";
5
- import { Mat4x4 } from "../mat4x4/mat4x4.js";
6
- const EPSILON = 1e-6;
7
- const expectVec3Close = (a, b, epsilon = EPSILON) => {
8
- expect(Math.abs(a[0] - b[0])).toBeLessThan(epsilon);
9
- expect(Math.abs(a[1] - b[1])).toBeLessThan(epsilon);
10
- expect(Math.abs(a[2] - b[2])).toBeLessThan(epsilon);
11
- };
12
- describe("Transform", () => {
13
- describe("identity transform", () => {
14
- it("should not change a point when applying identity transform", () => {
15
- const point = [1, 2, 3];
16
- const result = Transform.transform(Transform.identity, point);
17
- expectVec3Close(result, point);
18
- });
19
- it("should match matrix transformation for identity", () => {
20
- const point = [1, 2, 3];
21
- const matrix = Transform.toMatrix(Transform.identity);
22
- const matrixResult = Mat4x4.multiplyVec3(matrix, point);
23
- const directResult = Transform.transform(Transform.identity, point);
24
- expectVec3Close(directResult, matrixResult);
25
- });
26
- });
27
- describe("translation only", () => {
28
- it("should translate a point correctly", () => {
29
- const transform = {
30
- position: [5, -3, 2],
31
- rotation: Quat.identity,
32
- scale: Vec3.one,
33
- };
34
- const point = [1, 2, 3];
35
- const result = Transform.transform(transform, point);
36
- expectVec3Close(result, [6, -1, 5]);
37
- });
38
- it("should match matrix transformation for translation", () => {
39
- const transform = {
40
- position: [5, -3, 2],
41
- rotation: Quat.identity,
42
- scale: Vec3.one,
43
- };
44
- const point = [1, 2, 3];
45
- const matrix = Transform.toMatrix(transform);
46
- const matrixResult = Mat4x4.multiplyVec3(matrix, point);
47
- const directResult = Transform.transform(transform, point);
48
- expectVec3Close(directResult, matrixResult);
49
- });
50
- });
51
- describe("scale only", () => {
52
- it("should scale a point correctly", () => {
53
- const transform = {
54
- position: Vec3.zero,
55
- rotation: Quat.identity,
56
- scale: [2, 3, 0.5],
57
- };
58
- const point = [1, 2, 4];
59
- const result = Transform.transform(transform, point);
60
- expectVec3Close(result, [2, 6, 2]);
61
- });
62
- it("should match matrix transformation for scale", () => {
63
- const transform = {
64
- position: Vec3.zero,
65
- rotation: Quat.identity,
66
- scale: [2, 3, 0.5],
67
- };
68
- const point = [1, 2, 4];
69
- const matrix = Transform.toMatrix(transform);
70
- const matrixResult = Mat4x4.multiplyVec3(matrix, point);
71
- const directResult = Transform.transform(transform, point);
72
- expectVec3Close(directResult, matrixResult);
73
- });
74
- });
75
- describe("rotation only", () => {
76
- it("should rotate a point 90 degrees around Z axis", () => {
77
- const transform = {
78
- position: Vec3.zero,
79
- rotation: Quat.fromAxisAngle([0, 0, 1], Math.PI / 2),
80
- scale: Vec3.one,
81
- };
82
- const point = [1, 0, 0];
83
- const result = Transform.transform(transform, point);
84
- expectVec3Close(result, [0, 1, 0]);
85
- });
86
- it("should rotate a point 90 degrees around Y axis", () => {
87
- const transform = {
88
- position: Vec3.zero,
89
- rotation: Quat.fromAxisAngle([0, 1, 0], Math.PI / 2),
90
- scale: Vec3.one,
91
- };
92
- const point = [1, 0, 0];
93
- const result = Transform.transform(transform, point);
94
- expectVec3Close(result, [0, 0, -1]);
95
- });
96
- it("should match matrix transformation for rotation", () => {
97
- const transform = {
98
- position: Vec3.zero,
99
- rotation: Quat.fromAxisAngle([0, 0, 1], Math.PI / 2),
100
- scale: Vec3.one,
101
- };
102
- const point = [1, 2, 3];
103
- const matrix = Transform.toMatrix(transform);
104
- const matrixResult = Mat4x4.multiplyVec3(matrix, point);
105
- const directResult = Transform.transform(transform, point);
106
- expectVec3Close(directResult, matrixResult);
107
- });
108
- });
109
- describe("combined transformations", () => {
110
- it("should apply scale, rotation, and translation in correct order", () => {
111
- const transform = {
112
- position: [10, 20, 30],
113
- rotation: Quat.fromAxisAngle([0, 0, 1], Math.PI / 2),
114
- scale: [2, 2, 2],
115
- };
116
- const point = [1, 0, 0];
117
- const result = Transform.transform(transform, point);
118
- // Scale: [2, 0, 0]
119
- // Rotate 90° around Z: [0, 2, 0]
120
- // Translate: [10, 22, 30]
121
- expectVec3Close(result, [10, 22, 30]);
122
- });
123
- it("should match matrix transformation for complex transform", () => {
124
- const transform = {
125
- position: [5, -3, 7],
126
- rotation: Quat.fromAxisAngle([1, 1, 0], Math.PI / 4),
127
- scale: [2, 0.5, 3],
128
- };
129
- const point = [1, 2, 3];
130
- const matrix = Transform.toMatrix(transform);
131
- const matrixResult = Mat4x4.multiplyVec3(matrix, point);
132
- const directResult = Transform.transform(transform, point);
133
- expectVec3Close(directResult, matrixResult);
134
- });
135
- it("should match matrix transformation with arbitrary rotation", () => {
136
- const transform = {
137
- position: [-2, 4, -1],
138
- rotation: Quat.fromEuler(0.5, 1.2, -0.3),
139
- scale: [1.5, 0.8, 2.2],
140
- };
141
- const point = [3, -1, 2];
142
- const matrix = Transform.toMatrix(transform);
143
- const matrixResult = Mat4x4.multiplyVec3(matrix, point);
144
- const directResult = Transform.transform(transform, point);
145
- expectVec3Close(directResult, matrixResult);
146
- });
147
- });
148
- describe("multiple points consistency", () => {
149
- it("should consistently match matrix transformation for various points", () => {
150
- const transform = {
151
- position: [1, 2, 3],
152
- rotation: Quat.fromAxisAngle([1, 0.5, 0.3], 1.5),
153
- scale: [2, 1.5, 0.75],
154
- };
155
- const testPoints = [
156
- [0, 0, 0],
157
- [1, 0, 0],
158
- [0, 1, 0],
159
- [0, 0, 1],
160
- [1, 1, 1],
161
- [-1, -1, -1],
162
- [5, -3, 2],
163
- [0.1, 0.2, 0.3],
164
- ];
165
- const matrix = Transform.toMatrix(transform);
166
- for (const point of testPoints) {
167
- const matrixResult = Mat4x4.multiplyVec3(matrix, point);
168
- const directResult = Transform.transform(transform, point);
169
- expectVec3Close(directResult, matrixResult);
170
- }
171
- });
172
- });
173
- describe("edge cases", () => {
174
- it("should handle zero point", () => {
175
- const transform = {
176
- position: [1, 2, 3],
177
- rotation: Quat.fromAxisAngle([0, 1, 0], Math.PI / 4),
178
- scale: [2, 3, 4],
179
- };
180
- const point = [0, 0, 0];
181
- const matrix = Transform.toMatrix(transform);
182
- const matrixResult = Mat4x4.multiplyVec3(matrix, point);
183
- const directResult = Transform.transform(transform, point);
184
- expectVec3Close(directResult, matrixResult);
185
- });
186
- it("should handle zero scale components", () => {
187
- const transform = {
188
- position: [1, 2, 3],
189
- rotation: Quat.fromAxisAngle([0, 1, 0], Math.PI / 4),
190
- scale: [0, 1, 1],
191
- };
192
- const point = [5, 5, 5];
193
- const matrix = Transform.toMatrix(transform);
194
- const matrixResult = Mat4x4.multiplyVec3(matrix, point);
195
- const directResult = Transform.transform(transform, point);
196
- expectVec3Close(directResult, matrixResult);
197
- });
198
- it("should handle negative scale", () => {
199
- const transform = {
200
- position: [0, 0, 0],
201
- rotation: Quat.identity,
202
- scale: [-1, 1, -1],
203
- };
204
- const point = [1, 2, 3];
205
- const matrix = Transform.toMatrix(transform);
206
- const matrixResult = Mat4x4.multiplyVec3(matrix, point);
207
- const directResult = Transform.transform(transform, point);
208
- expectVec3Close(directResult, matrixResult);
209
- });
210
- });
211
- describe("transformInverse", () => {
212
- it("should be the inverse of transform for identity", () => {
213
- const point = [1, 2, 3];
214
- const transformed = Transform.transform(Transform.identity, point);
215
- const result = Transform.transformInverse(Transform.identity, transformed);
216
- expectVec3Close(result, point);
217
- });
218
- it("should be the inverse of transform for translation only", () => {
219
- const transform = {
220
- position: [5, -3, 2],
221
- rotation: Quat.identity,
222
- scale: Vec3.one,
223
- };
224
- const point = [1, 2, 3];
225
- const transformed = Transform.transform(transform, point);
226
- const result = Transform.transformInverse(transform, transformed);
227
- expectVec3Close(result, point);
228
- });
229
- it("should be the inverse of transform for scale only", () => {
230
- const transform = {
231
- position: Vec3.zero,
232
- rotation: Quat.identity,
233
- scale: [2, 3, 0.5],
234
- };
235
- const point = [1, 2, 4];
236
- const transformed = Transform.transform(transform, point);
237
- const result = Transform.transformInverse(transform, transformed);
238
- expectVec3Close(result, point);
239
- });
240
- it("should be the inverse of transform for rotation only", () => {
241
- const transform = {
242
- position: Vec3.zero,
243
- rotation: Quat.fromAxisAngle([0, 0, 1], Math.PI / 2),
244
- scale: Vec3.one,
245
- };
246
- const point = [1, 2, 3];
247
- const transformed = Transform.transform(transform, point);
248
- const result = Transform.transformInverse(transform, transformed);
249
- expectVec3Close(result, point);
250
- });
251
- it("should be the inverse of transform for combined transformations", () => {
252
- const transform = {
253
- position: [5, -3, 7],
254
- rotation: Quat.fromAxisAngle([1, 1, 0], Math.PI / 4),
255
- scale: [2, 0.5, 3],
256
- };
257
- const point = [1, 2, 3];
258
- const transformed = Transform.transform(transform, point);
259
- const result = Transform.transformInverse(transform, transformed);
260
- expectVec3Close(result, point);
261
- });
262
- it("should handle multiple points correctly", () => {
263
- const transform = {
264
- position: [1, 2, 3],
265
- rotation: Quat.fromEuler(0.5, 1.2, -0.3),
266
- scale: [2, 1.5, 0.75],
267
- };
268
- const testPoints = [
269
- [0, 0, 0],
270
- [1, 0, 0],
271
- [0, 1, 0],
272
- [0, 0, 1],
273
- [1, 1, 1],
274
- [-1, -1, -1],
275
- [5, -3, 2],
276
- ];
277
- for (const point of testPoints) {
278
- const transformed = Transform.transform(transform, point);
279
- const result = Transform.transformInverse(transform, transformed);
280
- expectVec3Close(result, point);
281
- }
282
- });
283
- it("should match inverse matrix transformation", () => {
284
- const transform = {
285
- position: [2, -1, 3],
286
- rotation: Quat.fromAxisAngle([1, 0, 1], 0.8),
287
- scale: [1.5, 2, 0.8],
288
- };
289
- const point = [3, -1, 2];
290
- const matrix = Transform.toMatrix(transform);
291
- const inverseMatrix = Mat4x4.inverse(matrix);
292
- const matrixResult = Mat4x4.multiplyVec3(inverseMatrix, point);
293
- const directResult = Transform.transformInverse(transform, point);
294
- expectVec3Close(directResult, matrixResult);
295
- });
296
- it("should handle negative scale", () => {
297
- const transform = {
298
- position: [1, 2, 3],
299
- rotation: Quat.fromAxisAngle([0, 1, 0], Math.PI / 6),
300
- scale: [-2, 1, -1],
301
- };
302
- const point = [4, 5, 6];
303
- const transformed = Transform.transform(transform, point);
304
- const result = Transform.transformInverse(transform, transformed);
305
- expectVec3Close(result, point);
306
- });
307
- });
308
- });
309
- //# sourceMappingURL=transform.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transform.test.js","sourceRoot":"","sources":["../../../src/math/transform/transform.test.ts"],"names":[],"mappings":"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"}