distark-render 1.0.4 → 1.0.6

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.
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Animation Diff Utility
3
+ *
4
+ * Converts animation frames from full-state to diff-based format to reduce file size.
5
+ * Instead of storing complete frame data for each frame, only stores changes from the previous frame.
6
+ *
7
+ * Format (compact array):
8
+ * [
9
+ * { ...complete first frame data... }, // Index 0: Base frame (full data)
10
+ * { rotationValues: { head: 0.5 }, ... }, // Index 1: Only changed values
11
+ * { selfRotationValues: { leftArm: 0.2 } }, // Index 2: Only changed values
12
+ * ...
13
+ * ]
14
+ *
15
+ * Also supports legacy verbose format:
16
+ * {
17
+ * version: "1.0",
18
+ * baseFrame: { ...complete first frame data... },
19
+ * diffs: [null, {...}, {...}, ...]
20
+ * }
21
+ */
22
+ import type { RigData } from '../types.js';
23
+ /**
24
+ * Frame data type - can be complete RigData or partial diff
25
+ */
26
+ export type FrameData = Partial<RigData>;
27
+ /**
28
+ * Diff-based animation format (compact array)
29
+ */
30
+ export type DiffBasedAnimation = FrameData[];
31
+ /**
32
+ * Legacy verbose format
33
+ */
34
+ export interface VerboseDiffAnimation {
35
+ version: string;
36
+ baseFrame: FrameData;
37
+ diffs: (FrameData | null)[];
38
+ }
39
+ /**
40
+ * Animation data that can be in either format
41
+ */
42
+ export type AnimationData = DiffBasedAnimation | VerboseDiffAnimation;
43
+ /**
44
+ * Compression statistics
45
+ */
46
+ export interface CompressionStats {
47
+ originalSize: number;
48
+ compressedSize: number;
49
+ savedBytes: number;
50
+ compressionRatio: string;
51
+ }
52
+ /**
53
+ * Convert full-state animation frames to diff-based format
54
+ * @param frames - Array of complete frame objects
55
+ * @returns Diff-based animation array [baseFrame, diff1, diff2, ...]
56
+ */
57
+ export declare const createDiffBasedAnimation: (frames: FrameData[]) => DiffBasedAnimation;
58
+ /**
59
+ * Convert diff-based animation back to full-state frames
60
+ * Supports both formats:
61
+ * - New format: [baseFrame, diff1, diff2, ...]
62
+ * - Old format: { baseFrame, diffs: [...] }
63
+ * @param diffBasedAnimation - Diff-based animation
64
+ * @returns Array of complete frame objects
65
+ */
66
+ export declare const expandDiffBasedAnimation: (diffBasedAnimation: AnimationData) => FrameData[];
67
+ /**
68
+ * Calculate compression ratio
69
+ * @param originalFrames - Original full-state frames
70
+ * @param diffBasedAnimation - Diff-based animation
71
+ * @returns Statistics about compression
72
+ */
73
+ export declare const calculateCompressionStats: (originalFrames: FrameData[], diffBasedAnimation: DiffBasedAnimation) => CompressionStats;
74
+ /**
75
+ * Validate that a diff-based animation can be properly expanded
76
+ * Supports both new array format and old object format
77
+ * @param diffBasedAnimation - Diff-based animation to validate
78
+ * @returns True if valid
79
+ */
80
+ export declare const validateDiffBasedAnimation: (diffBasedAnimation: AnimationData) => boolean;
81
+ /**
82
+ * Helper to check if animation data is in diff format
83
+ * Detects both new array format and old object format
84
+ * @param animationData - Animation data to check
85
+ * @returns True if in diff format
86
+ */
87
+ export declare const isDiffBasedFormat: (animationData: any) => animationData is AnimationData;
88
+ /**
89
+ * Smart loader that handles both formats
90
+ * @param animationData - Animation data in either format
91
+ * @returns Full-state frames array
92
+ */
93
+ export declare const loadAnimation: (animationData: any) => FrameData[];
94
+ /**
95
+ * Export animation in diff format with optional compression stats
96
+ * @param frames - Full-state frames
97
+ * @param showStats - Whether to log compression stats
98
+ * @returns Diff-based animation
99
+ */
100
+ export declare const exportDiffAnimation: (frames: FrameData[], showStats?: boolean) => DiffBasedAnimation;
101
+ //# sourceMappingURL=animationDiff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animationDiff.d.ts","sourceRoot":"","sources":["../../modules/animationDiff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,EAAE,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AA6FD;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAI,QAAQ,SAAS,EAAE,KAAG,kBAiB9D,CAAC;AA+BF;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,GAAI,oBAAoB,aAAa,KAAG,SAAS,EAyCrF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GAClC,gBAAgB,SAAS,EAAE,EAC3B,oBAAoB,kBAAkB,KACvC,gBAWF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GAAI,oBAAoB,aAAa,KAAG,OAmB9E,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,eAAe,GAAG,KAAG,aAAa,IAAI,aAgDvE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,eAAe,GAAG,KAAG,SAAS,EAiB3D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,SAAS,EAAE,EAAE,YAAW,OAAc,KAAG,kBASpF,CAAC"}
@@ -0,0 +1,327 @@
1
+ /**
2
+ * Animation Diff Utility
3
+ *
4
+ * Converts animation frames from full-state to diff-based format to reduce file size.
5
+ * Instead of storing complete frame data for each frame, only stores changes from the previous frame.
6
+ *
7
+ * Format (compact array):
8
+ * [
9
+ * { ...complete first frame data... }, // Index 0: Base frame (full data)
10
+ * { rotationValues: { head: 0.5 }, ... }, // Index 1: Only changed values
11
+ * { selfRotationValues: { leftArm: 0.2 } }, // Index 2: Only changed values
12
+ * ...
13
+ * ]
14
+ *
15
+ * Also supports legacy verbose format:
16
+ * {
17
+ * version: "1.0",
18
+ * baseFrame: { ...complete first frame data... },
19
+ * diffs: [null, {...}, {...}, ...]
20
+ * }
21
+ */
22
+ /**
23
+ * Deep comparison to check if two values are equal
24
+ */
25
+ const isEqual = (a, b) => {
26
+ if (a === b)
27
+ return true;
28
+ if (a == null || b == null)
29
+ return false;
30
+ if (typeof a !== typeof b)
31
+ return false;
32
+ if (typeof a === 'object') {
33
+ const keysA = Object.keys(a);
34
+ const keysB = Object.keys(b);
35
+ if (keysA.length !== keysB.length)
36
+ return false;
37
+ return keysA.every(key => isEqual(a[key], b[key]));
38
+ }
39
+ return false;
40
+ };
41
+ /**
42
+ * Create a diff object containing only changed properties
43
+ * @param prevFrame - Previous frame data
44
+ * @param currentFrame - Current frame data
45
+ * @returns Diff object or null if no changes
46
+ */
47
+ const createFrameDiff = (prevFrame, currentFrame) => {
48
+ if (!prevFrame || !currentFrame)
49
+ return currentFrame;
50
+ const diff = {};
51
+ let hasChanges = false;
52
+ // Properties that might change between frames
53
+ const diffableProps = [
54
+ 'rotationValues',
55
+ 'selfRotationValues',
56
+ 'dimensionValues',
57
+ 'pivotPoints',
58
+ 'jointOffset',
59
+ 'zIndexValues',
60
+ 'eyes',
61
+ 'mouth',
62
+ 'visibility',
63
+ 'imageScale',
64
+ 'flipX',
65
+ 'flipHead'
66
+ ];
67
+ diffableProps.forEach(prop => {
68
+ if (!currentFrame.hasOwnProperty(prop))
69
+ return;
70
+ const prevValue = prevFrame[prop];
71
+ const currentValue = currentFrame[prop];
72
+ // If the property doesn't exist in previous frame, include it entirely
73
+ if (!prevFrame.hasOwnProperty(prop)) {
74
+ diff[prop] = currentValue;
75
+ hasChanges = true;
76
+ return;
77
+ }
78
+ // For objects, diff at the property level
79
+ if (typeof currentValue === 'object' && !Array.isArray(currentValue) && currentValue !== null) {
80
+ const propDiff = {};
81
+ let hasPropChanges = false;
82
+ Object.keys(currentValue).forEach(key => {
83
+ const prevVal = prevValue?.[key];
84
+ const currVal = currentValue[key];
85
+ if (!isEqual(prevVal, currVal)) {
86
+ propDiff[key] = currVal;
87
+ hasPropChanges = true;
88
+ }
89
+ });
90
+ if (hasPropChanges) {
91
+ diff[prop] = propDiff;
92
+ hasChanges = true;
93
+ }
94
+ }
95
+ else {
96
+ // For non-objects, include if different
97
+ if (!isEqual(prevValue, currentValue)) {
98
+ diff[prop] = currentValue;
99
+ hasChanges = true;
100
+ }
101
+ }
102
+ });
103
+ return hasChanges ? diff : null;
104
+ };
105
+ /**
106
+ * Convert full-state animation frames to diff-based format
107
+ * @param frames - Array of complete frame objects
108
+ * @returns Diff-based animation array [baseFrame, diff1, diff2, ...]
109
+ */
110
+ export const createDiffBasedAnimation = (frames) => {
111
+ if (!frames || frames.length === 0) {
112
+ return [];
113
+ }
114
+ // First element is the complete base frame
115
+ const result = [{ ...frames[0] }];
116
+ // Subsequent elements are diffs from the previous frame
117
+ for (let i = 1; i < frames.length; i++) {
118
+ const prevFrame = frames[i - 1];
119
+ const currentFrame = frames[i];
120
+ const diff = createFrameDiff(prevFrame, currentFrame);
121
+ result.push(diff || {}); // Use empty object if no changes
122
+ }
123
+ return result;
124
+ };
125
+ /**
126
+ * Apply a diff to a frame to get the next frame state
127
+ * @param baseFrame - Base frame to apply diff to
128
+ * @param diff - Diff object
129
+ * @returns Resulting frame
130
+ */
131
+ const applyDiff = (baseFrame, diff) => {
132
+ if (!diff)
133
+ return { ...baseFrame };
134
+ const result = { ...baseFrame };
135
+ Object.keys(diff).forEach(prop => {
136
+ const diffValue = diff[prop];
137
+ // If the diff value is an object, merge it with the base
138
+ if (typeof diffValue === 'object' && !Array.isArray(diffValue) && diffValue !== null) {
139
+ result[prop] = {
140
+ ...result[prop],
141
+ ...diffValue
142
+ };
143
+ }
144
+ else {
145
+ // Otherwise, replace entirely
146
+ result[prop] = diffValue;
147
+ }
148
+ });
149
+ return result;
150
+ };
151
+ /**
152
+ * Convert diff-based animation back to full-state frames
153
+ * Supports both formats:
154
+ * - New format: [baseFrame, diff1, diff2, ...]
155
+ * - Old format: { baseFrame, diffs: [...] }
156
+ * @param diffBasedAnimation - Diff-based animation
157
+ * @returns Array of complete frame objects
158
+ */
159
+ export const expandDiffBasedAnimation = (diffBasedAnimation) => {
160
+ if (!diffBasedAnimation) {
161
+ return [];
162
+ }
163
+ // Handle new compact array format: [baseFrame, diff1, diff2, ...]
164
+ if (Array.isArray(diffBasedAnimation)) {
165
+ if (diffBasedAnimation.length === 0)
166
+ return [];
167
+ const frames = [];
168
+ let currentFrame = { ...diffBasedAnimation[0] }; // First element is base frame
169
+ frames.push(currentFrame);
170
+ // Apply each subsequent diff
171
+ for (let i = 1; i < diffBasedAnimation.length; i++) {
172
+ currentFrame = applyDiff(currentFrame, diffBasedAnimation[i]);
173
+ frames.push({ ...currentFrame });
174
+ }
175
+ return frames;
176
+ }
177
+ // Handle old verbose format: { baseFrame, diffs: [...] }
178
+ const verboseFormat = diffBasedAnimation;
179
+ if (verboseFormat.baseFrame && verboseFormat.diffs) {
180
+ const { baseFrame, diffs } = verboseFormat;
181
+ const frames = [];
182
+ let currentFrame = { ...baseFrame };
183
+ frames.push(currentFrame);
184
+ // Apply each diff to reconstruct frames
185
+ for (let i = 1; i < diffs.length; i++) {
186
+ currentFrame = applyDiff(currentFrame, diffs[i]);
187
+ frames.push({ ...currentFrame });
188
+ }
189
+ return frames;
190
+ }
191
+ return [];
192
+ };
193
+ /**
194
+ * Calculate compression ratio
195
+ * @param originalFrames - Original full-state frames
196
+ * @param diffBasedAnimation - Diff-based animation
197
+ * @returns Statistics about compression
198
+ */
199
+ export const calculateCompressionStats = (originalFrames, diffBasedAnimation) => {
200
+ const originalSize = JSON.stringify(originalFrames).length;
201
+ const compressedSize = JSON.stringify(diffBasedAnimation).length;
202
+ const ratio = ((1 - compressedSize / originalSize) * 100).toFixed(2);
203
+ return {
204
+ originalSize,
205
+ compressedSize,
206
+ savedBytes: originalSize - compressedSize,
207
+ compressionRatio: ratio + '%'
208
+ };
209
+ };
210
+ /**
211
+ * Validate that a diff-based animation can be properly expanded
212
+ * Supports both new array format and old object format
213
+ * @param diffBasedAnimation - Diff-based animation to validate
214
+ * @returns True if valid
215
+ */
216
+ export const validateDiffBasedAnimation = (diffBasedAnimation) => {
217
+ if (!diffBasedAnimation)
218
+ return false;
219
+ // New compact array format: [baseFrame, diff1, diff2, ...]
220
+ if (Array.isArray(diffBasedAnimation)) {
221
+ if (diffBasedAnimation.length === 0)
222
+ return false;
223
+ // First element should be a complete frame (has rotationValues or other base properties)
224
+ if (!diffBasedAnimation[0] || typeof diffBasedAnimation[0] !== 'object')
225
+ return false;
226
+ return true;
227
+ }
228
+ // Old verbose format: { version, baseFrame, diffs }
229
+ const verboseFormat = diffBasedAnimation;
230
+ if (!verboseFormat.version)
231
+ return false;
232
+ if (!verboseFormat.baseFrame)
233
+ return false;
234
+ if (!Array.isArray(verboseFormat.diffs))
235
+ return false;
236
+ if (verboseFormat.diffs.length === 0)
237
+ return false;
238
+ return true;
239
+ };
240
+ /**
241
+ * Helper to check if animation data is in diff format
242
+ * Detects both new array format and old object format
243
+ * @param animationData - Animation data to check
244
+ * @returns True if in diff format
245
+ */
246
+ export const isDiffBasedFormat = (animationData) => {
247
+ if (!animationData)
248
+ return false;
249
+ // New compact array format: [baseFrame, diff1, diff2, ...]
250
+ // Heuristic: If it's an array where first element has full frame data
251
+ // and second element (if exists) has partial data, it's likely diff format
252
+ if (Array.isArray(animationData)) {
253
+ if (animationData.length === 0)
254
+ return false;
255
+ const firstFrame = animationData[0];
256
+ if (!firstFrame || typeof firstFrame !== 'object')
257
+ return false;
258
+ // If first frame has rotationValues or other key properties, check if it's diff format
259
+ const hasKeyProperties = firstFrame.rotationValues ||
260
+ firstFrame.dimensionValues ||
261
+ firstFrame.imagePaths ||
262
+ firstFrame.rotation !== undefined ||
263
+ firstFrame.width !== undefined;
264
+ if (hasKeyProperties) {
265
+ // If there's a second element
266
+ if (animationData.length > 1) {
267
+ const secondFrame = animationData[1];
268
+ // If second frame has fewer top-level keys than first, likely a diff
269
+ const firstKeys = Object.keys(firstFrame).length;
270
+ const secondKeys = Object.keys(secondFrame).length;
271
+ // Diff format has fewer keys in subsequent frames (only changed properties)
272
+ if (secondKeys < firstKeys)
273
+ return true;
274
+ // Also check if second frame is missing metadata that first frame has
275
+ if (firstFrame.imagePaths && !secondFrame.imagePaths)
276
+ return true;
277
+ if (firstFrame.imageScale !== undefined && !secondFrame.hasOwnProperty('imageScale'))
278
+ return true;
279
+ if (firstFrame.dimensionValues && !secondFrame.dimensionValues)
280
+ return true;
281
+ }
282
+ // Single frame could be either format, default to full-state
283
+ return false;
284
+ }
285
+ }
286
+ // Old verbose format: { version, baseFrame, diffs }
287
+ return (animationData &&
288
+ typeof animationData === 'object' &&
289
+ 'baseFrame' in animationData &&
290
+ 'diffs' in animationData);
291
+ };
292
+ /**
293
+ * Smart loader that handles both formats
294
+ * @param animationData - Animation data in either format
295
+ * @returns Full-state frames array
296
+ */
297
+ export const loadAnimation = (animationData) => {
298
+ if (!animationData)
299
+ return [];
300
+ // Check if it's diff-based format first
301
+ if (isDiffBasedFormat(animationData)) {
302
+ console.log('📊 Detected diff-based animation format, expanding...');
303
+ return expandDiffBasedAnimation(animationData);
304
+ }
305
+ // If it's already an array and not diff-based, assume it's full-state format
306
+ if (Array.isArray(animationData)) {
307
+ return animationData;
308
+ }
309
+ // Unknown format
310
+ console.warn('Unknown animation format');
311
+ return [];
312
+ };
313
+ /**
314
+ * Export animation in diff format with optional compression stats
315
+ * @param frames - Full-state frames
316
+ * @param showStats - Whether to log compression stats
317
+ * @returns Diff-based animation
318
+ */
319
+ export const exportDiffAnimation = (frames, showStats = true) => {
320
+ const diffAnimation = createDiffBasedAnimation(frames);
321
+ if (showStats && frames.length > 0) {
322
+ const stats = calculateCompressionStats(frames, diffAnimation);
323
+ console.log('Animation Compression Stats:', stats);
324
+ }
325
+ return diffAnimation;
326
+ };
327
+ //# sourceMappingURL=animationDiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animationDiff.js","sourceRoot":"","sources":["../../modules/animationDiff.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,18 @@
2
2
  * Eye System Module
3
3
  * Handles eye blinking, gaze direction, and eye movement for character rigs
4
4
  */
5
- import type { EyeData, EyeDirection, EyelidState, EyeMovementConfig, EyeState, Position } from '../types.js';
5
+ import type { EyeData, EyeDirection, EyeSockets, EyelidState, EyeMovementConfig, EyeState, Position } from '../types.js';
6
+ /** Options for creating an EyeSystem with socket-derived movement ranges */
7
+ export interface EyeSystemOptions {
8
+ /** Eye configuration data from rig */
9
+ eyeData: EyeData;
10
+ /** Eye socket polygons for left/right eyes - used to compute iris movement bounds */
11
+ eyeSockets?: EyeSockets;
12
+ /** Character/head width (for scaling socket coords when in 0-100 percent space) */
13
+ headWidth?: number;
14
+ /** Character/head height (for scaling socket coords when in 0-100 percent space) */
15
+ headHeight?: number;
16
+ }
6
17
  /**
7
18
  * EyeSystem class - Manages eye animation, blinking, and gaze for characters
8
19
  */
@@ -15,15 +26,19 @@ export declare class EyeSystem {
15
26
  */
16
27
  private readonly baseIrisCoords;
17
28
  /**
18
- * Default eye movement ranges for different directions
29
+ * Movement ranges per direction (derived from eye sockets or defaults)
30
+ */
31
+ private readonly movementRanges;
32
+ /**
33
+ * Max pixel range for manual positions (-2 to 2 scale) - used in setManualIrisPositions
19
34
  */
20
- private static readonly EYE_MOVEMENT_RANGES;
35
+ private readonly manualScaleFactor;
21
36
  /**
22
37
  * Creates a new EyeSystem instance
23
38
  * @param characterId - Unique identifier for the character
24
- * @param eyeData - Eye configuration data from rig
39
+ * @param eyeDataOrOptions - Eye configuration data, or options object with eyeData + optional eyeSockets/headWidth/headHeight
25
40
  */
26
- constructor(characterId: string, eyeData: EyeData);
41
+ constructor(characterId: string, eyeDataOrOptions: EyeData | EyeSystemOptions);
27
42
  /**
28
43
  * Get current eye state
29
44
  */
@@ -138,6 +153,18 @@ export declare class EyeSystem {
138
153
  }
139
154
  /**
140
155
  * Factory function to create eye system from rig data
156
+ * @param characterId - Unique identifier for the character
157
+ * @param eyeDataOrRigData - Eye configuration data, or full RigData object (will extract eyes and eyeSockets)
158
+ * @param options - Optional: { eyeSockets, headWidth, headHeight } - when provided, movement ranges are computed from eye socket polygons
141
159
  */
142
- export declare function createEyeSystem(characterId: string, eyeData: EyeData): EyeSystem;
160
+ export declare function createEyeSystem(characterId: string, eyeDataOrRigData: EyeData | {
161
+ eyes?: EyeData;
162
+ eyeSockets?: EyeSockets;
163
+ width?: number;
164
+ height?: number;
165
+ }, options?: {
166
+ eyeSockets?: EyeSockets;
167
+ headWidth?: number;
168
+ headHeight?: number;
169
+ }): EyeSystem;
143
170
  //# sourceMappingURL=eyeSystem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eyeSystem.d.ts","sourceRoot":"","sources":["../../modules/eyeSystem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACR,OAAO,EACP,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACX,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,qBAAa,SAAS;IAClB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,WAAW,CAAS;IAE5B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAK7B;IAEF;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAWzC;IAEF;;;;OAIG;gBACS,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAgCjD;;OAEG;IACH,QAAQ,IAAI,QAAQ;IAIpB;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQtC;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;;OAGG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAwCzC;;;;OAIG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAsCzE;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAY9C;;;;OAIG;IACH,4BAA4B,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAE,QAAyB,GAAG,YAAY;IAoBxG;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAMzB;;;;;;OAMG;IACH,MAAM,CACF,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,OAAe,EAC1B,oBAAoB,CAAC,EAAE,QAAQ,EAC/B,YAAY,GAAE,QAAyB,GACxC,IAAI;IA0CP;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM;IAejD;;OAEG;IACH,gBAAgB,IAAI;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,QAAQ,CAAA;KAAE;IAOvD;;OAEG;IACH,cAAc,IAAI,WAAW;IAI7B;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI5C;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,UAAU,IAAI,IAAI;IAMlB;;;;OAIG;IACH,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAM5C;;;;;;;;;;;;;;;;;;OAkBG;IACH,sBAAsB,CAClB,YAAY,EAAE;QAAE,IAAI,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,KAAK,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EACjF,WAAW,EAAE,MAAM,GACpB,IAAI;IAkBP;;OAEG;IACH,YAAY,IAAI,MAAM;CAQzB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,CAEhF"}
1
+ {"version":3,"file":"eyeSystem.d.ts","sourceRoot":"","sources":["../../modules/eyeSystem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACR,OAAO,EACP,YAAY,EACZ,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACX,MAAM,aAAa,CAAC;AAgBrB,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC7B,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AA2GD;;GAEG;AACH,qBAAa,SAAS;IAClB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,WAAW,CAAS;IAE5B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAK7B;IAEF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiD;IAEhF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAE3C;;;;OAIG;gBACS,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAG,gBAAgB;IAoE7E;;OAEG;IACH,QAAQ,IAAI,QAAQ;IAIpB;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQtC;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;;OAGG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAqDzC;;;;OAIG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAsCzE;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAY9C;;;;OAIG;IACH,4BAA4B,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAE,QAAyB,GAAG,YAAY;IAoBxG;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAMzB;;;;;;OAMG;IACH,MAAM,CACF,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,OAAe,EAC1B,oBAAoB,CAAC,EAAE,QAAQ,EAC/B,YAAY,GAAE,QAAyB,GACxC,IAAI;IA0CP;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM;IAejD;;OAEG;IACH,gBAAgB,IAAI;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,QAAQ,CAAA;KAAE;IAOvD;;OAEG;IACH,cAAc,IAAI,WAAW;IAI7B;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI5C;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,UAAU,IAAI,IAAI;IAMlB;;;;OAIG;IACH,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAM5C;;;;;;;;;;;;;;;;;;OAkBG;IACH,sBAAsB,CAClB,YAAY,EAAE;QAAE,IAAI,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,KAAK,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EACjF,WAAW,EAAE,MAAM,GACpB,IAAI;IAiBP;;OAEG;IACH,YAAY,IAAI,MAAM;CAQzB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC3B,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,OAAO,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACxG,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,UAAU,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/E,SAAS,CAoCX"}