distark-render 1.1.11 → 1.1.13

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 (40) hide show
  1. package/dist/cli/scene.d.ts +13 -2
  2. package/dist/cli/scene.d.ts.map +1 -1
  3. package/dist/cli/scene.js +236 -4
  4. package/dist/cli/scene.js.map +1 -1
  5. package/dist/modules/animationDiff.d.ts.map +1 -1
  6. package/dist/modules/animationDiff.js +1 -0
  7. package/dist/modules/animationDiff.js.map +1 -1
  8. package/dist/modules/browserSceneRenderer.d.ts.map +1 -1
  9. package/dist/modules/browserSceneRenderer.js +27 -0
  10. package/dist/modules/browserSceneRenderer.js.map +1 -1
  11. package/dist/modules/characterValidator.d.ts +41 -0
  12. package/dist/modules/characterValidator.d.ts.map +1 -0
  13. package/dist/modules/characterValidator.js +233 -0
  14. package/dist/modules/characterValidator.js.map +1 -0
  15. package/dist/modules/imageLoad.d.ts +3 -2
  16. package/dist/modules/imageLoad.d.ts.map +1 -1
  17. package/dist/modules/imageLoad.js +113 -5
  18. package/dist/modules/imageLoad.js.map +1 -1
  19. package/dist/modules/renderRig.d.ts +4 -0
  20. package/dist/modules/renderRig.d.ts.map +1 -1
  21. package/dist/modules/renderRig.js +130 -15
  22. package/dist/modules/renderRig.js.map +1 -1
  23. package/dist/modules/sceneRenderer.d.ts.map +1 -1
  24. package/dist/modules/sceneRenderer.js +27 -0
  25. package/dist/modules/sceneRenderer.js.map +1 -1
  26. package/dist/tests/test-angle-swap.d.ts +2 -0
  27. package/dist/tests/test-angle-swap.d.ts.map +1 -0
  28. package/dist/tests/test-angle-swap.js +101 -0
  29. package/dist/tests/test-angle-swap.js.map +1 -0
  30. package/dist/tests/test-character-validator.d.ts +8 -0
  31. package/dist/tests/test-character-validator.d.ts.map +1 -0
  32. package/dist/tests/test-character-validator.js +445 -0
  33. package/dist/tests/test-character-validator.js.map +1 -0
  34. package/dist/tests/test-svg-parallax.d.ts +2 -0
  35. package/dist/tests/test-svg-parallax.d.ts.map +1 -0
  36. package/dist/tests/test-svg-parallax.js +52 -0
  37. package/dist/tests/test-svg-parallax.js.map +1 -0
  38. package/dist/types.d.ts +31 -0
  39. package/dist/types.d.ts.map +1 -1
  40. package/package.json +106 -100
@@ -0,0 +1,445 @@
1
+ /**
2
+ * RED/GREEN TDD: Character Validator tests.
3
+ *
4
+ * Run against STUB first → mostly RED.
5
+ * Run against full implementation → all GREEN.
6
+ */
7
+ import { validateCharacter, REQUIRED_BODY_PARTS, REQUIRED_PIVOT_POINTS, REQUIRED_Z_INDEX_PARTS, REQUIRED_EYE_IMAGES, REQUIRED_EYE_COORDS, REQUIRED_IRIS_SIZES, REQUIRED_DIMENSION_PARTS, TALKING_MOUTH_SHAPES, } from '../modules/characterValidator.js';
8
+ import { EyeSystem } from '../modules/eyeSystem.js';
9
+ import { MouthSystem, extractMouthShapesFromRigData } from '../modules/mouthSystem.js';
10
+ import { assert, printSummary } from './helpers.js';
11
+ function clone(obj) {
12
+ return JSON.parse(JSON.stringify(obj));
13
+ }
14
+ /** Delete a dot-path field from a cloned object */
15
+ function del(obj, path) {
16
+ const result = clone(obj);
17
+ const parts = path.split('.');
18
+ let cur = result;
19
+ for (let i = 0; i < parts.length - 1; i++) {
20
+ cur = cur[parts[i]];
21
+ }
22
+ delete cur[parts[parts.length - 1]];
23
+ return result;
24
+ }
25
+ /** Set a dot-path field on a cloned object */
26
+ function set(obj, path, value) {
27
+ const result = clone(obj);
28
+ const parts = path.split('.');
29
+ let cur = result;
30
+ for (let i = 0; i < parts.length - 1; i++) {
31
+ cur = cur[parts[i]];
32
+ }
33
+ cur[parts[parts.length - 1]] = value;
34
+ return result;
35
+ }
36
+ function errors(r) {
37
+ return r.issues.filter(i => i.severity === 'error');
38
+ }
39
+ function warnings(r) {
40
+ return r.issues.filter(i => i.severity === 'warning');
41
+ }
42
+ function hasError(r, field) {
43
+ return r.issues.some(i => i.severity === 'error' && i.field === field);
44
+ }
45
+ function hasWarning(r, field) {
46
+ return r.issues.some(i => i.severity === 'warning' && i.field === field);
47
+ }
48
+ // ─── Valid character fixture ─────────────────────────────────────────────────
49
+ function h(n) {
50
+ return `abcdef${n.toString().padStart(26, '0')}`;
51
+ }
52
+ function buildValidCharacter() {
53
+ return {
54
+ id: 'TestChar',
55
+ key: 'TestChar',
56
+ kind: 'character',
57
+ name: 'Test Character',
58
+ imagePaths: {
59
+ head: h(1), torso: h(2),
60
+ leftUpperArm: h(3), leftForearm: h(4), leftHand: h(5),
61
+ rightUpperArm: h(6), rightForearm: h(7), rightHand: h(8),
62
+ leftThigh: h(9), leftLeg: h(10),
63
+ rightThigh: h(11), rightLeg: h(12),
64
+ },
65
+ eyes: {
66
+ leftEyeImage: h(13), rightEyeImage: h(14),
67
+ leftIris: h(15), rightIris: h(16),
68
+ leftEyeLidOpen: h(17), rightEyeLidOpen: h(18),
69
+ leftEyeLidHalfClosed: h(19), rightEyeLidHalfClosed: h(20),
70
+ leftEyeLidClosed: h(21), rightEyeLidClosed: h(22),
71
+ leftEyeXCoor: -17, leftEyeYCoor: -188,
72
+ rightEyeXCoor: 111, rightEyeYCoor: -209,
73
+ leftEyeLidXCoor: -13, leftEyeLidYCoor: -209,
74
+ rightEyeLidXCoor: 115, rightEyeLidYCoor: -213,
75
+ leftIrisXCoor: -4, leftIrisYCoor: -188,
76
+ rightIrisXCoor: 119, rightIrisYCoor: -200,
77
+ leftIrisWidth: 37, leftIrisHeight: 58,
78
+ rightIrisWidth: 37, rightIrisHeight: 58,
79
+ },
80
+ eyeSockets: {
81
+ left: [
82
+ { x: 34, y: 39 }, { x: 29, y: 43 }, { x: 27, y: 47 },
83
+ { x: 34, y: 60 }, { x: 48, y: 59 }, { x: 53, y: 45 },
84
+ ],
85
+ right: [
86
+ { x: 77, y: 34 }, { x: 71, y: 37 }, { x: 70, y: 47 },
87
+ { x: 75, y: 52 }, { x: 83, y: 53 }, { x: 90, y: 42 },
88
+ ],
89
+ },
90
+ pivotPoints: {
91
+ root_torso: { x: 19, y: -62 },
92
+ torso_head: { x: 40, y: -343 },
93
+ head_mouth: { x: 23, y: -68 },
94
+ torso_leftUpperArm: { x: -56, y: -309 },
95
+ leftUpperArm_leftForearm: { x: 4, y: 60 },
96
+ leftForearm_leftHand: { x: 6, y: 33 },
97
+ torso_rightUpperArm: { x: 76, y: -322 },
98
+ rightUpperArm_rightForearm: { x: -9, y: 49 },
99
+ rightForearm_rightHand: { x: -4, y: 27 },
100
+ torso_leftThigh: { x: -22, y: -67 },
101
+ leftThigh_leftLeg: { x: 0, y: 40 },
102
+ torso_rightThigh: { x: 85, y: -58 },
103
+ rightThigh_rightLeg: { x: 9, y: 36 },
104
+ },
105
+ zIndexValues: {
106
+ rightUpperArm: 1, rightForearm: 2,
107
+ rightEye: 3, rightIris: 4, rightEyeLid: 5,
108
+ rightLeg: 6, rightThigh: 7, torso: 8, head: 9,
109
+ leftUpperArm: 10, leftForearm: 11,
110
+ leftEye: 12, leftIris: 13, leftEyeLid: 14,
111
+ leftLeg: 15, leftThigh: 16, rightHand: 17, leftHand: 18, mouth: 19,
112
+ },
113
+ mouth: {
114
+ closed: h(30), open: h(31), 'half-open': h(32),
115
+ 'wide-open': h(33), 'slightly-open': h(34),
116
+ f: h(35), l: h(36),
117
+ xCoor: 23, yCoor: -68,
118
+ size: 1.5, width: 61.5, height: 44.8,
119
+ },
120
+ dimensionValues: {
121
+ head: { width: 337, height: 437 },
122
+ torso: { width: 278, height: 383 },
123
+ mouth: { width: 61.5, height: 44.8 },
124
+ leftUpperArm: { width: 88, height: 203 },
125
+ leftForearm: { width: 58, height: 135 },
126
+ leftHand: { width: 91, height: 81 },
127
+ rightUpperArm: { width: 83, height: 203 },
128
+ rightForearm: { width: 59, height: 137 },
129
+ rightHand: { width: 91, height: 81 },
130
+ leftThigh: { width: 111, height: 198 },
131
+ leftLeg: { width: 184, height: 137 },
132
+ rightThigh: { width: 80, height: 166 },
133
+ rightLeg: { width: 184, height: 137 },
134
+ },
135
+ };
136
+ }
137
+ // ─── Tests ───────────────────────────────────────────────────────────────────
138
+ function runTests() {
139
+ const valid = buildValidCharacter();
140
+ // ── Valid character ───────────────────────────────────────────────────────
141
+ console.log('\n--- Valid character ---');
142
+ {
143
+ const r = validateCharacter(valid);
144
+ assert(r.valid === true, 'valid character: valid = true');
145
+ assert(errors(r).length === 0, 'valid character: zero errors');
146
+ assert(warnings(r).length === 0, 'valid character: zero warnings');
147
+ }
148
+ // ── Bad input ─────────────────────────────────────────────────────────────
149
+ console.log('\n--- Bad input format ---');
150
+ {
151
+ const r = validateCharacter(null);
152
+ assert(r.valid === false, 'null: invalid');
153
+ assert(errors(r).length > 0, 'null: has errors');
154
+ }
155
+ {
156
+ const r = validateCharacter('string');
157
+ assert(r.valid === false, 'string: invalid');
158
+ }
159
+ // ── Body parts (imagePaths) ───────────────────────────────────────────────
160
+ console.log('\n--- Body parts (imagePaths) ---');
161
+ {
162
+ // All 12 body parts flagged when imagePaths removed
163
+ const r = validateCharacter(del(valid, 'imagePaths'));
164
+ for (const part of REQUIRED_BODY_PARTS) {
165
+ assert(hasError(r, `imagePaths.${part}`), `missing imagePaths → error for ${part}`);
166
+ }
167
+ }
168
+ {
169
+ // Single missing part
170
+ const r = validateCharacter(del(valid, 'imagePaths.head'));
171
+ assert(hasError(r, 'imagePaths.head'), 'missing imagePaths.head → error');
172
+ assert(!hasError(r, 'imagePaths.torso'), 'imagePaths.torso still present → no error');
173
+ }
174
+ {
175
+ // [MEDIA_REMOVED] treated as missing
176
+ const r = validateCharacter(set(valid, 'imagePaths.torso', '[MEDIA_REMOVED]'));
177
+ assert(hasError(r, 'imagePaths.torso'), '[MEDIA_REMOVED] torso → error');
178
+ }
179
+ {
180
+ // Empty string treated as missing
181
+ const r = validateCharacter(set(valid, 'imagePaths.leftHand', ''));
182
+ assert(hasError(r, 'imagePaths.leftHand'), 'empty string leftHand → error');
183
+ }
184
+ // ── Pivot points ──────────────────────────────────────────────────────────
185
+ console.log('\n--- Pivot points ---');
186
+ {
187
+ const r = validateCharacter(del(valid, 'pivotPoints'));
188
+ for (const key of REQUIRED_PIVOT_POINTS) {
189
+ assert(hasError(r, `pivotPoints.${key}`), `missing pivotPoints → error for ${key}`);
190
+ }
191
+ }
192
+ {
193
+ const r = validateCharacter(del(valid, 'pivotPoints.torso_head'));
194
+ assert(hasError(r, 'pivotPoints.torso_head'), 'missing torso_head → error');
195
+ }
196
+ {
197
+ // Non-numeric x
198
+ const r = validateCharacter(set(valid, 'pivotPoints.root_torso', { x: 'bad', y: -62 }));
199
+ assert(hasError(r, 'pivotPoints.root_torso'), 'non-numeric pivot x → error');
200
+ }
201
+ {
202
+ // Not an object
203
+ const r = validateCharacter(set(valid, 'pivotPoints.head_mouth', 42));
204
+ assert(hasError(r, 'pivotPoints.head_mouth'), 'pivot is a number, not object → error');
205
+ }
206
+ // ── Z-index values ────────────────────────────────────────────────────────
207
+ console.log('\n--- Z-index values ---');
208
+ {
209
+ const r = validateCharacter(del(valid, 'zIndexValues'));
210
+ for (const part of REQUIRED_Z_INDEX_PARTS) {
211
+ assert(hasError(r, `zIndexValues.${part}`), `missing zIndexValues → error for ${part}`);
212
+ }
213
+ }
214
+ {
215
+ const r = validateCharacter(del(valid, 'zIndexValues.mouth'));
216
+ assert(hasError(r, 'zIndexValues.mouth'), 'missing zIndexValues.mouth → error');
217
+ }
218
+ // ── Z-index ordering ──────────────────────────────────────────────────────
219
+ console.log('\n--- Z-index ordering ---');
220
+ {
221
+ // leftEyeLid must be > leftIris
222
+ let r = validateCharacter(set(valid, 'zIndexValues.leftEyeLid', 13)); // equal to leftIris
223
+ assert(hasError(r, 'zIndexValues'), 'leftEyeLid = leftIris → ordering error');
224
+ r = validateCharacter(set(valid, 'zIndexValues.leftEyeLid', 12)); // below leftIris
225
+ assert(hasError(r, 'zIndexValues'), 'leftEyeLid < leftIris → ordering error');
226
+ }
227
+ {
228
+ // leftIris must be > leftEye
229
+ const r = validateCharacter(set(valid, 'zIndexValues.leftIris', 11)); // = leftEye(12)? no, leftEye=12, set leftIris=11 → 11 < 12
230
+ assert(hasError(r, 'zIndexValues'), 'leftIris < leftEye → ordering error');
231
+ }
232
+ {
233
+ // rightEyeLid must be > rightIris > rightEye
234
+ const r = validateCharacter(set(valid, 'zIndexValues.rightIris', 3)); // = rightEye
235
+ assert(hasError(r, 'zIndexValues'), 'rightIris = rightEye → ordering error');
236
+ }
237
+ {
238
+ // mouth must be > head
239
+ const r = validateCharacter(set(valid, 'zIndexValues.mouth', 9)); // = head
240
+ assert(hasError(r, 'zIndexValues'), 'mouth = head → ordering error');
241
+ }
242
+ {
243
+ // Correct ordering does not raise error
244
+ const r = validateCharacter(valid);
245
+ assert(!hasError(r, 'zIndexValues'), 'correct z-order → no ordering error');
246
+ }
247
+ // ── Eyes ─────────────────────────────────────────────────────────────────
248
+ console.log('\n--- Eyes ---');
249
+ {
250
+ const r = validateCharacter(del(valid, 'eyes'));
251
+ for (const img of REQUIRED_EYE_IMAGES) {
252
+ assert(hasError(r, `eyes.${img}`), `missing eyes → error for eyes.${img}`);
253
+ }
254
+ for (const coord of REQUIRED_EYE_COORDS) {
255
+ assert(hasError(r, `eyes.${coord}`), `missing eyes → error for eyes.${coord}`);
256
+ }
257
+ for (const sz of REQUIRED_IRIS_SIZES) {
258
+ assert(hasError(r, `eyes.${sz}`), `missing eyes → error for eyes.${sz}`);
259
+ }
260
+ }
261
+ {
262
+ const r = validateCharacter(set(valid, 'eyes.leftEyeLidOpen', '[MEDIA_REMOVED]'));
263
+ assert(hasError(r, 'eyes.leftEyeLidOpen'), '[MEDIA_REMOVED] leftEyeLidOpen → error');
264
+ }
265
+ {
266
+ const r = validateCharacter(del(valid, 'eyes.rightEyeLidClosed'));
267
+ assert(hasError(r, 'eyes.rightEyeLidClosed'), 'missing rightEyeLidClosed → error');
268
+ }
269
+ {
270
+ const r = validateCharacter(set(valid, 'eyes.leftIrisXCoor', 'bad'));
271
+ assert(hasError(r, 'eyes.leftIrisXCoor'), 'string leftIrisXCoor → error');
272
+ }
273
+ {
274
+ const r = validateCharacter(del(valid, 'eyes.leftIrisWidth'));
275
+ assert(hasError(r, 'eyes.leftIrisWidth'), 'missing leftIrisWidth → error');
276
+ }
277
+ {
278
+ const r = validateCharacter(set(valid, 'eyes.rightIrisHeight', 0));
279
+ assert(hasError(r, 'eyes.rightIrisHeight'), 'zero rightIrisHeight → error');
280
+ }
281
+ // ── Eye sockets ───────────────────────────────────────────────────────────
282
+ console.log('\n--- Eye sockets ---');
283
+ {
284
+ const r = validateCharacter(del(valid, 'eyeSockets'));
285
+ assert(hasError(r, 'eyeSockets.left'), 'missing eyeSockets → left error');
286
+ assert(hasError(r, 'eyeSockets.right'), 'missing eyeSockets → right error');
287
+ }
288
+ {
289
+ const r = validateCharacter(set(valid, 'eyeSockets.left', [{ x: 1, y: 2 }, { x: 3, y: 4 }]));
290
+ assert(hasError(r, 'eyeSockets.left'), '2-point left socket → error');
291
+ }
292
+ {
293
+ const r = validateCharacter(set(valid, 'eyeSockets.right', [{ x: 1 }, { x: 2, y: 3 }, { x: 4, y: 5 }]));
294
+ assert(hasError(r, 'eyeSockets.right'), 'point missing y → error');
295
+ }
296
+ // ── Mouth ─────────────────────────────────────────────────────────────────
297
+ console.log('\n--- Mouth ---');
298
+ {
299
+ const r = validateCharacter(del(valid, 'mouth.closed'));
300
+ assert(hasError(r, 'mouth.closed'), 'missing mouth.closed → error');
301
+ }
302
+ {
303
+ const r = validateCharacter(set(valid, 'mouth.closed', '[MEDIA_REMOVED]'));
304
+ assert(hasError(r, 'mouth.closed'), '[MEDIA_REMOVED] mouth.closed → error');
305
+ }
306
+ {
307
+ const r = validateCharacter(del(valid, 'mouth.xCoor'));
308
+ assert(hasError(r, 'mouth.xCoor'), 'missing mouth.xCoor → error');
309
+ }
310
+ {
311
+ const r = validateCharacter(set(valid, 'mouth.yCoor', 'bad'));
312
+ assert(hasError(r, 'mouth.yCoor'), 'string mouth.yCoor → error');
313
+ }
314
+ {
315
+ // Remove size, width, height all — no sizing info
316
+ let c = del(valid, 'mouth.size');
317
+ c = del(c, 'mouth.width');
318
+ c = del(c, 'mouth.height');
319
+ const r = validateCharacter(c);
320
+ assert(hasError(r, 'mouth'), 'no mouth size/width/height → error');
321
+ }
322
+ {
323
+ // width+height without size is enough
324
+ const c = del(valid, 'mouth.size');
325
+ const r = validateCharacter(c);
326
+ assert(!hasError(r, 'mouth'), 'width+height without size → no size error');
327
+ }
328
+ {
329
+ // size alone without width/height is enough
330
+ let c = del(valid, 'mouth.width');
331
+ c = del(c, 'mouth.height');
332
+ const r = validateCharacter(c);
333
+ assert(!hasError(r, 'mouth'), 'size alone → no size error');
334
+ }
335
+ // ── Dimension values ──────────────────────────────────────────────────────
336
+ console.log('\n--- Dimension values ---');
337
+ {
338
+ const r = validateCharacter(del(valid, 'dimensionValues'));
339
+ for (const part of REQUIRED_DIMENSION_PARTS) {
340
+ assert(hasError(r, `dimensionValues.${part}`), `missing dimensionValues → error for ${part}`);
341
+ }
342
+ }
343
+ {
344
+ const r = validateCharacter(set(valid, 'dimensionValues.head', { width: 0, height: 437 }));
345
+ assert(hasError(r, 'dimensionValues.head'), 'zero width head → error');
346
+ }
347
+ {
348
+ const r = validateCharacter(del(valid, 'dimensionValues.mouth'));
349
+ assert(hasError(r, 'dimensionValues.mouth'), 'missing dimensionValues.mouth → error');
350
+ }
351
+ // ── Warnings ──────────────────────────────────────────────────────────────
352
+ console.log('\n--- Warnings ---');
353
+ {
354
+ // Head pivot above torso root → warning
355
+ const c = set(valid, 'pivotPoints.torso_head', { x: 40, y: 50 }); // y=50 > root_torso.y=-62
356
+ const r = validateCharacter(c);
357
+ assert(hasWarning(r, 'pivotPoints.torso_head'), 'head pivot above torso root → warning');
358
+ assert(r.valid === true, 'warning does not make character invalid');
359
+ }
360
+ {
361
+ // No talking mouths → warning
362
+ let c = clone(valid);
363
+ for (const shape of TALKING_MOUTH_SHAPES) {
364
+ c = del(c, `mouth.${shape}`);
365
+ }
366
+ const r = validateCharacter(c);
367
+ assert(hasWarning(r, 'mouth'), 'no talking mouth shapes → warning');
368
+ assert(r.valid === true, 'warning-only character is still valid');
369
+ }
370
+ {
371
+ // Warnings with valid pivot do not fire
372
+ const r = validateCharacter(valid);
373
+ assert(!hasWarning(r, 'pivotPoints.torso_head'), 'correct pivot → no pivot warning');
374
+ assert(!hasWarning(r, 'mouth'), 'has talking mouths → no mouth warning');
375
+ }
376
+ // ── valid flag semantics ───────────────────────────────────────────────────
377
+ console.log('\n--- valid flag semantics ---');
378
+ {
379
+ // Errors make valid = false
380
+ const r = validateCharacter(del(valid, 'imagePaths.head'));
381
+ assert(r.valid === false, 'errors make valid = false');
382
+ }
383
+ {
384
+ // Warnings alone keep valid = true
385
+ const c = set(valid, 'pivotPoints.torso_head', { x: 40, y: 50 });
386
+ const r = validateCharacter(c);
387
+ assert(r.valid === true, 'warnings alone keep valid = true');
388
+ }
389
+ // ── Functional: EyeSystem ────────────────────────────────────────────────
390
+ console.log('\n--- Functional: EyeSystem ---');
391
+ {
392
+ // Instantiates without throwing
393
+ const eyeSystem = new EyeSystem('test', {
394
+ leftIrisXCoor: -4, leftIrisYCoor: -188,
395
+ rightIrisXCoor: 119, rightIrisYCoor: -200,
396
+ });
397
+ assert(eyeSystem !== null, 'EyeSystem instantiates');
398
+ // State is open at t=0
399
+ eyeSystem.resetTiming(0);
400
+ eyeSystem.updateBlinking(0);
401
+ assert(eyeSystem.getEyelidState() === 'open', 'eyelid open at t=0');
402
+ // Blink triggers by t=6 (interval max is 5s)
403
+ eyeSystem.updateBlinking(6.0);
404
+ const stateAt6 = eyeSystem.getEyelidState();
405
+ assert(stateAt6 === 'half-closed' || stateAt6 === 'closed', `blink triggered by t=6 (state: ${stateAt6})`);
406
+ // Direction: center returns to base
407
+ eyeSystem.setEyeDirection('center');
408
+ const center = eyeSystem.getIrisPositions();
409
+ assert(center.left.x === -4, 'center direction: left iris at base x');
410
+ // Direction: left moves iris left
411
+ eyeSystem.setEyeDirection('left');
412
+ const leftPos = eyeSystem.getIrisPositions();
413
+ assert(leftPos.left.x < center.left.x, 'left direction: iris moves left');
414
+ // Direction: right moves iris right
415
+ eyeSystem.setEyeDirection('right');
416
+ const rightPos = eyeSystem.getIrisPositions();
417
+ assert(rightPos.left.x > center.left.x, 'right direction: iris moves right');
418
+ // Left and right iris start at different x positions (not on top of each other)
419
+ eyeSystem.setEyeDirection('center');
420
+ const pos = eyeSystem.getIrisPositions();
421
+ assert(pos.left.x !== pos.right.x, 'left and right iris have different base x');
422
+ }
423
+ // ── Functional: MouthSystem ───────────────────────────────────────────────
424
+ console.log('\n--- Functional: MouthSystem ---');
425
+ {
426
+ const rigData = valid;
427
+ // extractMouthShapesFromRigData returns multiple shapes for valid character
428
+ const shapes = extractMouthShapesFromRigData(rigData);
429
+ assert(shapes.length >= 2, `extractMouthShapesFromRigData returns ≥2 shapes (got ${shapes.length})`);
430
+ assert(shapes.includes('closed'), 'extracted shapes include closed');
431
+ // MouthSystem instantiates and starts closed
432
+ const mouth = new MouthSystem('test', new Set(shapes));
433
+ assert(mouth.getCurrentMouth() === 'closed', 'MouthSystem starts closed');
434
+ // updateFromViseme moves away from closed
435
+ mouth.updateFromViseme('F'); // maps to 'f' or similar open shape
436
+ // It may stay closed if the mapped shape isn't available; just check no throw
437
+ assert(mouth.getCurrentMouth() !== undefined, 'updateFromViseme does not throw');
438
+ // reset returns to closed
439
+ mouth.reset();
440
+ assert(mouth.getCurrentMouth() === 'closed', 'reset() returns to closed');
441
+ }
442
+ printSummary();
443
+ }
444
+ runTests();
445
+ //# sourceMappingURL=test-character-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-character-validator.js","sourceRoot":"","sources":["../../tests/test-character-validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACH,iBAAiB,EAEjB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,GACvB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAEvF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAMpD,SAAS,KAAK,CAAC,GAAQ;IACnB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAQ,CAAC;AAClD,CAAC;AAED,mDAAmD;AACnD,SAAS,GAAG,CAAC,GAAQ,EAAE,IAAY;IAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAQ,MAAM,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAQ,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,8CAA8C;AAC9C,SAAS,GAAG,CAAC,GAAQ,EAAE,IAAY,EAAE,KAAc;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAQ,MAAM,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAQ,CAAC;IAC/B,CAAC;IACD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACrC,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,MAAM,CAAC,CAA4B;IACxC,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,QAAQ,CAAC,CAA4B;IAC1C,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,QAAQ,CAAC,CAA4B,EAAE,KAAa;IACzD,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,UAAU,CAAC,CAA4B,EAAE,KAAa;IAC3D,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,gFAAgF;AAEhF,SAAS,CAAC,CAAC,CAAS;IAChB,OAAO,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,mBAAmB;IACxB,OAAO;QACH,EAAE,EAAE,UAAU;QACd,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,gBAAgB;QACtB,UAAU,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACvB,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YACrD,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;YAC/B,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC;SACrC;QACD,IAAI,EAAE;YACF,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC;YACzC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC;YACjC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC;YAC7C,oBAAoB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,EAAE,CAAC;YACzD,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC;YACjD,YAAY,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,GAAG;YACrC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,GAAG;YACvC,eAAe,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,CAAC,GAAG;YAC3C,gBAAgB,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,GAAG;YAC7C,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG;YACtC,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,GAAG;YACzC,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE;YACrC,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE;SAC1C;QACD,UAAU,EAAE;YACR,IAAI,EAAE;gBACF,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;gBACpD,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;aACvD;YACD,KAAK,EAAE;gBACH,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;gBACpD,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;aACvD;SACJ;QACD,WAAW,EAAE;YACT,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YAC7B,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE;YAC9B,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YAC7B,kBAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE;YACvC,wBAAwB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YACzC,oBAAoB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YACrC,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE;YACvC,0BAA0B,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YAC5C,sBAAsB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YACxC,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YACnC,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YAClC,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YACnC,mBAAmB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;SACvC;QACD,YAAY,EAAE;YACV,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;YACjC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;YACzC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;YAC7C,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE;YACjC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE;YACzC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;SACrE;QACD,KAAK,EAAE;YACH,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;YAC9C,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC;YAC1C,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAClB,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACrB,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;SACvC;QACD,eAAe,EAAE;YACb,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YACjC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YAClC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;YACpC,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YACxC,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YACvC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACnC,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YACzC,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YACxC,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACpC,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YACtC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YACpC,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YACtC,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;SACxC;KACJ,CAAC;AACN,CAAC;AAED,gFAAgF;AAEhF,SAAS,QAAQ;IACb,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IAEpC,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,+BAA+B,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,8BAA8B,CAAC,CAAC;QAC/D,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,gCAAgC,CAAC,CAAC;IACvE,CAAC;IAED,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,eAAe,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACrD,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACjD,CAAC;IAED,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,CAAC;QACG,oDAAoD;QACpD,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;YACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,IAAI,EAAE,CAAC,EAAE,kCAAkC,IAAI,EAAE,CAAC,CAAC;QACxF,CAAC;IACL,CAAC;IACD,CAAC;QACG,sBAAsB;QACtB,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,iCAAiC,CAAC,CAAC;QAC1E,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,2CAA2C,CAAC,CAAC;IAC1F,CAAC;IACD,CAAC;QACG,qCAAqC;QACrC,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,+BAA+B,CAAC,CAAC;IAC7E,CAAC;IACD,CAAC;QACG,kCAAkC;QAClC,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,+BAA+B,CAAC,CAAC;IAChF,CAAC;IAED,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,eAAe,GAAG,EAAE,CAAC,EAAE,mCAAmC,GAAG,EAAE,CAAC,CAAC;QACxF,CAAC;IACL,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,wBAAwB,CAAC,EAAE,4BAA4B,CAAC,CAAC;IAChF,CAAC;IACD,CAAC;QACG,gBAAgB;QAChB,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,wBAAwB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACxF,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,wBAAwB,CAAC,EAAE,6BAA6B,CAAC,CAAC;IACjF,CAAC;IACD,CAAC;QACG,gBAAgB;QAChB,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,wBAAwB,CAAC,EAAE,uCAAuC,CAAC,CAAC;IAC3F,CAAC;IAED,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;QACxD,KAAK,MAAM,IAAI,IAAI,sBAAsB,EAAE,CAAC;YACxC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,gBAAgB,IAAI,EAAE,CAAC,EAAE,oCAAoC,IAAI,EAAE,CAAC,CAAC;QAC5F,CAAC;IACL,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,oBAAoB,CAAC,EAAE,oCAAoC,CAAC,CAAC;IACpF,CAAC;IAED,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,CAAC;QACG,gCAAgC;QAChC,IAAI,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,yBAAyB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1F,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,wCAAwC,CAAC,CAAC;QAE9E,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,yBAAyB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;QACnF,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,wCAAwC,CAAC,CAAC;IAClF,CAAC;IACD,CAAC;QACG,6BAA6B;QAC7B,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,2DAA2D;QACjI,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,qCAAqC,CAAC,CAAC;IAC/E,CAAC;IACD,CAAC;QACG,6CAA6C;QAC7C,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;QACnF,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,uCAAuC,CAAC,CAAC;IACjF,CAAC;IACD,CAAC;QACG,uBAAuB;QACvB,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3E,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,+BAA+B,CAAC,CAAC;IACzE,CAAC;IACD,CAAC;QACG,wCAAwC;QACxC,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,qCAAqC,CAAC,CAAC;IAChF,CAAC;IAED,4EAA4E;IAC5E,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACpC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,EAAE,iCAAiC,GAAG,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,KAAK,EAAE,CAAC,EAAE,iCAAiC,KAAK,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,mBAAmB,EAAE,CAAC;YACnC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,iCAAiC,EAAE,EAAE,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAClF,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,wCAAwC,CAAC,CAAC;IACzF,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,wBAAwB,CAAC,EAAE,mCAAmC,CAAC,CAAC;IACvF,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,oBAAoB,CAAC,EAAE,8BAA8B,CAAC,CAAC;IAC9E,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,oBAAoB,CAAC,EAAE,+BAA+B,CAAC,CAAC;IAC/E,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,sBAAsB,CAAC,EAAE,8BAA8B,CAAC,CAAC;IAChF,CAAC;IAED,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,iCAAiC,CAAC,CAAC;QAC1E,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,kCAAkC,CAAC,CAAC;IAChF,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7F,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,6BAA6B,CAAC,CAAC;IAC1E,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,yBAAyB,CAAC,CAAC;IACvE,CAAC;IAED,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,8BAA8B,CAAC,CAAC;IACxE,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,sCAAsC,CAAC,CAAC;IAChF,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,6BAA6B,CAAC,CAAC;IACtE,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,4BAA4B,CAAC,CAAC;IACrE,CAAC;IACD,CAAC;QACG,kDAAkD;QAClD,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACjC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QAC1B,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,oCAAoC,CAAC,CAAC;IACvE,CAAC;IACD,CAAC;QACG,sCAAsC;QACtC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,2CAA2C,CAAC,CAAC;IAC/E,CAAC;IACD,CAAC;QACG,4CAA4C;QAC5C,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAClC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,4BAA4B,CAAC,CAAC;IAChE,CAAC;IAED,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3D,KAAK,MAAM,IAAI,IAAI,wBAAwB,EAAE,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,mBAAmB,IAAI,EAAE,CAAC,EAAE,uCAAuC,IAAI,EAAE,CAAC,CAAC;QAClG,CAAC;IACL,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,sBAAsB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3F,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,sBAAsB,CAAC,EAAE,yBAAyB,CAAC,CAAC;IAC3E,CAAC;IACD,CAAC;QACG,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,uBAAuB,CAAC,EAAE,uCAAuC,CAAC,CAAC;IAC1F,CAAC;IAED,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,CAAC;QACG,wCAAwC;QACxC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,0BAA0B;QAC5F,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,wBAAwB,CAAC,EAAE,uCAAuC,CAAC,CAAC;QACzF,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,yCAAyC,CAAC,CAAC;IACxE,CAAC;IACD,CAAC;QACG,8BAA8B;QAC9B,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,KAAK,MAAM,KAAK,IAAI,oBAAoB,EAAE,CAAC;YACvC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mCAAmC,CAAC,CAAC;QACpE,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,uCAAuC,CAAC,CAAC;IACtE,CAAC;IACD,CAAC;QACG,wCAAwC;QACxC,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,wBAAwB,CAAC,EAAE,kCAAkC,CAAC,CAAC;QACrF,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,uCAAuC,CAAC,CAAC;IAC7E,CAAC;IAED,8EAA8E;IAC9E,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,CAAC;QACG,4BAA4B;QAC5B,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,2BAA2B,CAAC,CAAC;IAC3D,CAAC;IACD,CAAC;QACG,mCAAmC;QACnC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,kCAAkC,CAAC,CAAC;IACjE,CAAC;IAED,4EAA4E;IAC5E,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,CAAC;QACG,gCAAgC;QAChC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE;YACpC,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG;YACtC,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,GAAG;SAC5C,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,wBAAwB,CAAC,CAAC;QAErD,uBAAuB;QACvB,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACzB,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAEpE,6CAA6C;QAC7C,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,CACF,QAAQ,KAAK,aAAa,IAAI,QAAQ,KAAK,QAAQ,EACnD,kCAAkC,QAAQ,GAAG,CAChD,CAAC;QAEF,oCAAoC;QACpC,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,uCAAuC,CAAC,CAAC;QAEtE,kCAAkC;QAClC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,iCAAiC,CAAC,CAAC;QAE1E,oCAAoC;QACpC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,mCAAmC,CAAC,CAAC;QAE7E,gFAAgF;QAChF,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,2CAA2C,CAAC,CAAC;IACpF,CAAC;IAED,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,CAAC;QACG,MAAM,OAAO,GAAG,KAA2B,CAAC;QAE5C,4EAA4E;QAC5E,MAAM,MAAM,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,wDAAwD,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACrG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,iCAAiC,CAAC,CAAC;QAErE,6CAA6C;QAC7C,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,QAAQ,EAAE,2BAA2B,CAAC,CAAC;QAE1E,0CAA0C;QAC1C,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,oCAAoC;QACjE,8EAA8E;QAC9E,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,SAAS,EAAE,iCAAiC,CAAC,CAAC;QAEjF,0BAA0B;QAC1B,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,QAAQ,EAAE,2BAA2B,CAAC,CAAC;IAC9E,CAAC;IAED,YAAY,EAAE,CAAC;AACnB,CAAC;AAED,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-svg-parallax.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-svg-parallax.d.ts","sourceRoot":"","sources":["../../tests/test-svg-parallax.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import { ImageLoader } from '../modules/imageLoad.js';
2
+ import { assert, printSummary } from './helpers.js';
3
+ class TestImageLoader extends ImageLoader {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.lastSvgSource = null;
7
+ }
8
+ attachBaseSvg(image, svgSource, width, height) {
9
+ this.attachSvgMetadata(image, svgSource, width, height, width, height);
10
+ }
11
+ async createSvgCanvas(svgSource, targetWidth, targetHeight) {
12
+ this.lastSvgSource = svgSource;
13
+ return {
14
+ width: targetWidth,
15
+ height: targetHeight,
16
+ getContext: () => null,
17
+ };
18
+ }
19
+ }
20
+ async function testSvgParallaxOnlyMovesEnabledPaths() {
21
+ console.log('\nTest: SVG parallax only transforms enabled paths');
22
+ const loader = new TestImageLoader('http://example.test');
23
+ const svgSource = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M0 0 L10 0" fill="red"/><path d="M0 10 L10 10" fill="blue"/></svg>';
24
+ const baseImage = { width: 24, height: 24 };
25
+ loader.attachBaseSvg(baseImage, svgSource, 24, 24);
26
+ loader.cacheImage('head-svg', baseImage);
27
+ const config = {
28
+ layers: {
29
+ 'path-1': { enabled: true, depth: 12 },
30
+ 'path-2': { enabled: false, depth: 30 },
31
+ }
32
+ };
33
+ const immediate = loader.requestSvgParallaxImageForSize('head-svg', config, 30, 24, 24);
34
+ assert(immediate === baseImage, 'Initial parallax request falls back to the current base raster');
35
+ await loader.waitForPendingImageUpgrades();
36
+ assert(!!loader.lastSvgSource, 'SVG parallax triggers a transformed SVG raster request');
37
+ assert((loader.lastSvgSource || '').includes('transform="translate('), 'Enabled SVG path receives a translate transform');
38
+ assert((loader.lastSvgSource || '').includes('fill="blue"/>'), 'Disabled SVG path remains otherwise unchanged');
39
+ assert(!(loader.lastSvgSource || '').includes('fill="blue" transform='), 'Disabled SVG path does not receive a parallax transform');
40
+ }
41
+ async function run() {
42
+ try {
43
+ await testSvgParallaxOnlyMovesEnabledPaths();
44
+ }
45
+ catch (error) {
46
+ console.error(error);
47
+ process.exitCode = 1;
48
+ }
49
+ printSummary();
50
+ }
51
+ void run();
52
+ //# sourceMappingURL=test-svg-parallax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-svg-parallax.js","sourceRoot":"","sources":["../../tests/test-svg-parallax.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGpD,MAAM,eAAgB,SAAQ,WAAW;IAAzC;;QACW,kBAAa,GAAkB,IAAI,CAAC;IAc/C,CAAC;IAZU,aAAa,CAAC,KAAU,EAAE,SAAiB,EAAE,KAAa,EAAE,MAAc;QAC7E,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;IAEkB,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,WAAmB,EAAE,YAAoB;QACjG,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,OAAO;YACH,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,YAAY;YACpB,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI;SACzB,CAAC;IACN,CAAC;CACJ;AAED,KAAK,UAAU,oCAAoC;IAC/C,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,4IAA4I,CAAC;IAC/J,MAAM,SAAS,GAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACjD,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAEzC,MAAM,MAAM,GAA0B;QAClC,MAAM,EAAE;YACJ,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YACtC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;SAC1C;KACJ,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,CAAC,8BAA8B,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACxF,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,gEAAgE,CAAC,CAAC;IAElG,MAAM,MAAM,CAAC,2BAA2B,EAAE,CAAC;IAE3C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,wDAAwD,CAAC,CAAC;IACzF,MAAM,CAAC,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,iDAAiD,CAAC,CAAC;IAC1H,MAAM,CAAC,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,+CAA+C,CAAC,CAAC;IAChH,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,yDAAyD,CAAC,CAAC;AACxI,CAAC;AAED,KAAK,UAAU,GAAG;IACd,IAAI,CAAC;QACD,MAAM,oCAAoC,EAAE,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,YAAY,EAAE,CAAC;AACnB,CAAC;AAED,KAAK,GAAG,EAAE,CAAC"}
package/dist/types.d.ts CHANGED
@@ -110,6 +110,34 @@ export interface EyeSockets {
110
110
  left?: EyeSocketPolygon;
111
111
  right?: EyeSocketPolygon;
112
112
  }
113
+ export interface PartAngleSwapRule {
114
+ enabled?: boolean;
115
+ thresholdDegrees?: number;
116
+ swapImage?: string;
117
+ options?: PartAngleSwapOption[];
118
+ }
119
+ export interface PartAngleSwapVariation extends Partial<RigData> {
120
+ }
121
+ export interface PartAngleSwapOption {
122
+ enabled?: boolean;
123
+ thresholdDegrees?: number;
124
+ swapImage?: string;
125
+ swapVariation?: PartAngleSwapVariation;
126
+ variationName?: string;
127
+ }
128
+ export interface PartAngleSwapConfig {
129
+ [partName: string]: PartAngleSwapRule | undefined;
130
+ }
131
+ export interface SvgParallaxLayerConfig {
132
+ enabled?: boolean;
133
+ depth?: number;
134
+ }
135
+ export interface SvgParallaxPartConfig {
136
+ layers?: Record<string, SvgParallaxLayerConfig>;
137
+ }
138
+ export interface SvgParallaxConfig {
139
+ [partName: string]: SvgParallaxPartConfig | undefined;
140
+ }
113
141
  /**
114
142
  * Character rig data structure
115
143
  */
@@ -118,6 +146,7 @@ export interface RigData {
118
146
  key?: string;
119
147
  kind?: string;
120
148
  name?: string;
149
+ angleValues?: Record<string, number>;
121
150
  rotationValues?: Record<string, number>;
122
151
  selfRotationValues?: Record<string, number>;
123
152
  dimensionValues?: Record<string, Dimension>;
@@ -128,6 +157,8 @@ export interface RigData {
128
157
  eyeSockets?: EyeSockets;
129
158
  mouth?: MouthData;
130
159
  imagePaths?: Record<string, string>;
160
+ partSwapConfig?: PartAngleSwapConfig;
161
+ svgParallaxConfig?: SvgParallaxConfig;
131
162
  imageScale?: number;
132
163
  visibility?: Record<string, boolean>;
133
164
  flipX?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"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"}