@jotx-labs/editor 2.4.210 → 2.4.212
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/dist/components/GraphView/GraphView.d.ts +9 -1
- package/dist/components/GraphView/GraphView.d.ts.map +1 -1
- package/dist/components/GraphView/GraphView.js +220 -52
- package/dist/components/GraphView/GraphView.js.map +1 -1
- package/dist/components/JotxEditor.d.ts.map +1 -1
- package/dist/components/JotxEditor.js +6 -0
- package/dist/components/JotxEditor.js.map +1 -1
- package/dist/components/MotionNodeView.d.ts +4 -0
- package/dist/components/MotionNodeView.d.ts.map +1 -0
- package/dist/components/MotionNodeView.js +134 -0
- package/dist/components/MotionNodeView.js.map +1 -0
- package/dist/components/ReadonlyBlockRenderer.d.ts.map +1 -1
- package/dist/components/ReadonlyBlockRenderer.js +2 -0
- package/dist/components/ReadonlyBlockRenderer.js.map +1 -1
- package/dist/components/SlashMenu.d.ts.map +1 -1
- package/dist/components/SlashMenu.js +8 -0
- package/dist/components/SlashMenu.js.map +1 -1
- package/dist/components/motion/MotionCompiler.d.ts +9 -0
- package/dist/components/motion/MotionCompiler.d.ts.map +1 -0
- package/dist/components/motion/MotionCompiler.js +265 -0
- package/dist/components/motion/MotionCompiler.js.map +1 -0
- package/dist/components/motion/MotionEngine.d.ts +48 -0
- package/dist/components/motion/MotionEngine.d.ts.map +1 -0
- package/dist/components/motion/MotionEngine.js +623 -0
- package/dist/components/motion/MotionEngine.js.map +1 -0
- package/dist/components/motion/MotionParser.d.ts +13 -0
- package/dist/components/motion/MotionParser.d.ts.map +1 -0
- package/dist/components/motion/MotionParser.js +403 -0
- package/dist/components/motion/MotionParser.js.map +1 -0
- package/dist/components/motion/MotionPresets.d.ts +13 -0
- package/dist/components/motion/MotionPresets.d.ts.map +1 -0
- package/dist/components/motion/MotionPresets.js +143 -0
- package/dist/components/motion/MotionPresets.js.map +1 -0
- package/dist/components/motion/types.d.ts +130 -0
- package/dist/components/motion/types.d.ts.map +1 -0
- package/dist/components/motion/types.js +33 -0
- package/dist/components/motion/types.js.map +1 -0
- package/dist/extensions/MotionNode.d.ts +3 -0
- package/dist/extensions/MotionNode.d.ts.map +1 -0
- package/dist/extensions/MotionNode.js +95 -0
- package/dist/extensions/MotionNode.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/styles/GraphView.css +272 -50
- package/dist/styles/MotionNodeView.css +374 -0
- package/dist/utils/PresentationConverter.js +7 -0
- package/dist/utils/PresentationConverter.js.map +1 -1
- package/package.json +4 -4
- package/src/styles/GraphView.css +272 -50
- package/src/styles/MotionNodeView.css +374 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MotionCompiler — Converts parsed AST into a keyframe timeline
|
|
4
|
+
*
|
|
5
|
+
* Takes objects + steps from the parser and produces a list of keyframes
|
|
6
|
+
* with absolute start/end times. Handles parallel groups and step sequencing.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.compileScene = compileScene;
|
|
10
|
+
const types_1 = require("./types");
|
|
11
|
+
// ─── Compile Scene ───────────────────────────────────────────────
|
|
12
|
+
function compileScene(parsed) {
|
|
13
|
+
const objects = new Map();
|
|
14
|
+
const keyframes = [];
|
|
15
|
+
// Register all declared objects
|
|
16
|
+
for (const obj of parsed.objects) {
|
|
17
|
+
objects.set(obj.id, { ...obj });
|
|
18
|
+
}
|
|
19
|
+
let currentTime = 0;
|
|
20
|
+
let inParallel = false;
|
|
21
|
+
let parallelStartTime = 0;
|
|
22
|
+
let parallelMaxEnd = 0;
|
|
23
|
+
for (const step of parsed.steps) {
|
|
24
|
+
// Parallel grouping
|
|
25
|
+
if (step.isParallelStart) {
|
|
26
|
+
inParallel = true;
|
|
27
|
+
parallelStartTime = currentTime;
|
|
28
|
+
parallelMaxEnd = currentTime;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (step.isParallelEnd) {
|
|
32
|
+
inParallel = false;
|
|
33
|
+
currentTime = parallelMaxEnd;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const startTime = inParallel ? parallelStartTime + step.delay : currentTime + step.delay;
|
|
37
|
+
const endTime = startTime + step.duration;
|
|
38
|
+
// Generate keyframes for this step
|
|
39
|
+
const stepKeyframes = compileStep(step, startTime, endTime, objects);
|
|
40
|
+
keyframes.push(...stepKeyframes);
|
|
41
|
+
if (inParallel) {
|
|
42
|
+
parallelMaxEnd = Math.max(parallelMaxEnd, endTime);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
currentTime = endTime;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Sort keyframes by start time
|
|
49
|
+
keyframes.sort((a, b) => a.startTime - b.startTime);
|
|
50
|
+
return {
|
|
51
|
+
objects,
|
|
52
|
+
keyframes,
|
|
53
|
+
totalDuration: currentTime,
|
|
54
|
+
parallelGroups: [],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// ─── Compile Individual Step ─────────────────────────────────────
|
|
58
|
+
function compileStep(step, startTime, endTime, objects) {
|
|
59
|
+
const kfs = [];
|
|
60
|
+
const id = step.targetId || '';
|
|
61
|
+
switch (step.action) {
|
|
62
|
+
case 'show':
|
|
63
|
+
kfs.push(kf(id, 'opacity', startTime, endTime, 0, 1, step.easing));
|
|
64
|
+
kfs.push(kf(id, 'visible', startTime, startTime, 0, 1, 'linear'));
|
|
65
|
+
break;
|
|
66
|
+
case 'hide':
|
|
67
|
+
kfs.push(kf(id, 'opacity', startTime, endTime, 1, 0, step.easing));
|
|
68
|
+
kfs.push(kf(id, 'visible', endTime, endTime, 1, 0, 'linear'));
|
|
69
|
+
break;
|
|
70
|
+
case 'appear':
|
|
71
|
+
kfs.push(kf(id, 'opacity', startTime, startTime, 0, 1, 'linear'));
|
|
72
|
+
kfs.push(kf(id, 'visible', startTime, startTime, 0, 1, 'linear'));
|
|
73
|
+
break;
|
|
74
|
+
case 'move': {
|
|
75
|
+
const obj = objects.get(id);
|
|
76
|
+
const fromX = obj?.x ?? 0;
|
|
77
|
+
const fromY = obj?.y ?? 0;
|
|
78
|
+
if (step.toX !== undefined && step.toY !== undefined) {
|
|
79
|
+
kfs.push(kf(id, 'x', startTime, endTime, fromX, step.toX, step.easing));
|
|
80
|
+
kfs.push(kf(id, 'y', startTime, endTime, fromY, step.toY, step.easing));
|
|
81
|
+
// Update object state
|
|
82
|
+
if (obj) {
|
|
83
|
+
obj.x = step.toX;
|
|
84
|
+
obj.y = step.toY;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else if (step.byX !== undefined && step.byY !== undefined) {
|
|
88
|
+
kfs.push(kf(id, 'x', startTime, endTime, fromX, fromX + step.byX, step.easing));
|
|
89
|
+
kfs.push(kf(id, 'y', startTime, endTime, fromY, fromY + step.byY, step.easing));
|
|
90
|
+
if (obj) {
|
|
91
|
+
obj.x = fromX + step.byX;
|
|
92
|
+
obj.y = fromY + step.byY;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
case 'scale': {
|
|
98
|
+
const obj = objects.get(id);
|
|
99
|
+
const from = obj?.scaleX ?? 1;
|
|
100
|
+
const to = step.scaleTo ?? 1;
|
|
101
|
+
kfs.push(kf(id, 'scaleX', startTime, endTime, from, to, step.easing));
|
|
102
|
+
kfs.push(kf(id, 'scaleY', startTime, endTime, from, to, step.easing));
|
|
103
|
+
if (obj) {
|
|
104
|
+
obj.scaleX = to;
|
|
105
|
+
obj.scaleY = to;
|
|
106
|
+
}
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
case 'rotate': {
|
|
110
|
+
const obj = objects.get(id);
|
|
111
|
+
const from = obj?.rotation ?? 0;
|
|
112
|
+
const by = step.rotateDeg ?? 0;
|
|
113
|
+
kfs.push(kf(id, 'rotation', startTime, endTime, from, from + by, step.easing));
|
|
114
|
+
if (obj) {
|
|
115
|
+
obj.rotation = from + by;
|
|
116
|
+
}
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
case 'resize': {
|
|
120
|
+
const obj = objects.get(id);
|
|
121
|
+
if (step.resizeW !== undefined && step.resizeH !== undefined) {
|
|
122
|
+
const fromW = obj?.width ?? 0;
|
|
123
|
+
const fromH = obj?.height ?? 0;
|
|
124
|
+
kfs.push(kf(id, 'width', startTime, endTime, fromW, step.resizeW, step.easing));
|
|
125
|
+
kfs.push(kf(id, 'height', startTime, endTime, fromH, step.resizeH, step.easing));
|
|
126
|
+
if (obj) {
|
|
127
|
+
obj.width = step.resizeW;
|
|
128
|
+
obj.height = step.resizeH;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
case 'color':
|
|
134
|
+
if (step.toColor) {
|
|
135
|
+
kfs.push(kf(id, 'color', startTime, endTime, '', step.toColor, step.easing));
|
|
136
|
+
}
|
|
137
|
+
break;
|
|
138
|
+
case 'opacity': {
|
|
139
|
+
const obj = objects.get(id);
|
|
140
|
+
const from = obj?.opacity ?? 1;
|
|
141
|
+
kfs.push(kf(id, 'opacity', startTime, endTime, from, step.toOpacity ?? 1, step.easing));
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
case 'width': {
|
|
145
|
+
const obj = objects.get(id);
|
|
146
|
+
const from = obj?.lineWidth ?? 2;
|
|
147
|
+
kfs.push(kf(id, 'lineWidth', startTime, endTime, from, step.toWidth ?? 2, step.easing));
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
case 'draw':
|
|
151
|
+
kfs.push(kf(id, 'drawProgress', startTime, endTime, 0, 1, step.easing));
|
|
152
|
+
kfs.push(kf(id, 'visible', startTime, startTime, 0, 1, 'linear'));
|
|
153
|
+
kfs.push(kf(id, 'opacity', startTime, startTime, 0, 1, 'linear'));
|
|
154
|
+
break;
|
|
155
|
+
case 'typewrite':
|
|
156
|
+
kfs.push(kf(id, 'drawProgress', startTime, endTime, 0, 1, 'linear'));
|
|
157
|
+
kfs.push(kf(id, 'visible', startTime, startTime, 0, 1, 'linear'));
|
|
158
|
+
kfs.push(kf(id, 'opacity', startTime, startTime, 0, 1, 'linear'));
|
|
159
|
+
break;
|
|
160
|
+
case 'replace':
|
|
161
|
+
if (step.replaceText !== undefined) {
|
|
162
|
+
kfs.push(kf(id, 'content', startTime, startTime, '', step.replaceText, 'linear'));
|
|
163
|
+
// Brief opacity flash for visual feedback
|
|
164
|
+
kfs.push(kf(id, 'opacity', startTime, startTime + 0.1, 0.5, 1, 'ease'));
|
|
165
|
+
}
|
|
166
|
+
break;
|
|
167
|
+
case 'highlight':
|
|
168
|
+
if (step.highlightRange) {
|
|
169
|
+
kfs.push(kf(id, 'highlightLines', startTime, startTime, '', step.highlightRange, 'linear'));
|
|
170
|
+
}
|
|
171
|
+
break;
|
|
172
|
+
case 'pulse':
|
|
173
|
+
// Scale up then back
|
|
174
|
+
kfs.push(kf(id, 'scaleX', startTime, startTime + step.duration / 2, 1, 1.2, 'easeOut'));
|
|
175
|
+
kfs.push(kf(id, 'scaleY', startTime, startTime + step.duration / 2, 1, 1.2, 'easeOut'));
|
|
176
|
+
kfs.push(kf(id, 'scaleX', startTime + step.duration / 2, endTime, 1.2, 1, 'easeIn'));
|
|
177
|
+
kfs.push(kf(id, 'scaleY', startTime + step.duration / 2, endTime, 1.2, 1, 'easeIn'));
|
|
178
|
+
break;
|
|
179
|
+
case 'shake': {
|
|
180
|
+
// Quick horizontal oscillation
|
|
181
|
+
const obj = objects.get(id);
|
|
182
|
+
const baseX = obj?.x ?? 0;
|
|
183
|
+
const dur = step.duration / 6;
|
|
184
|
+
for (let i = 0; i < 3; i++) {
|
|
185
|
+
const t = startTime + i * dur * 2;
|
|
186
|
+
kfs.push(kf(id, 'x', t, t + dur, baseX, baseX + 8, 'linear'));
|
|
187
|
+
kfs.push(kf(id, 'x', t + dur, t + dur * 2, baseX + 8, baseX - 8, 'linear'));
|
|
188
|
+
}
|
|
189
|
+
kfs.push(kf(id, 'x', endTime - dur, endTime, 0, baseX, 'easeOut'));
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
case 'bounce': {
|
|
193
|
+
const obj = objects.get(id);
|
|
194
|
+
const baseY = obj?.y ?? 0;
|
|
195
|
+
kfs.push(kf(id, 'y', startTime, startTime + step.duration * 0.3, baseY, baseY - 20, 'easeOut'));
|
|
196
|
+
kfs.push(kf(id, 'y', startTime + step.duration * 0.3, startTime + step.duration * 0.6, baseY - 20, baseY, 'bounce'));
|
|
197
|
+
kfs.push(kf(id, 'y', startTime + step.duration * 0.6, startTime + step.duration * 0.8, baseY, baseY - 8, 'easeOut'));
|
|
198
|
+
kfs.push(kf(id, 'y', startTime + step.duration * 0.8, endTime, baseY - 8, baseY, 'easeIn'));
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
case 'flow': {
|
|
202
|
+
// Create a temporary flow animation object
|
|
203
|
+
if (step.fromId && step.toId) {
|
|
204
|
+
const flowId = `__flow_${step.fromId}_${step.toId}_${startTime}`;
|
|
205
|
+
const flowObj = (0, types_1.createDefaultObject)('line', flowId);
|
|
206
|
+
flowObj.color = step.flowColor || '#89b4fa';
|
|
207
|
+
flowObj.lineWidth = 3;
|
|
208
|
+
// Copy positions from source/target objects
|
|
209
|
+
const fromObj = objects.get(step.fromId);
|
|
210
|
+
const toObj = objects.get(step.toId);
|
|
211
|
+
if (fromObj && toObj) {
|
|
212
|
+
flowObj.x = fromObj.x + (fromObj.width || 0) / 2;
|
|
213
|
+
flowObj.y = fromObj.y;
|
|
214
|
+
flowObj.x2 = toObj.x - (toObj.width || 0) / 2;
|
|
215
|
+
flowObj.y2 = toObj.y;
|
|
216
|
+
}
|
|
217
|
+
objects.set(flowId, flowObj);
|
|
218
|
+
kfs.push(kf(flowId, 'visible', startTime, startTime, 0, 1, 'linear'));
|
|
219
|
+
kfs.push(kf(flowId, 'opacity', startTime, startTime, 0, 1, 'linear'));
|
|
220
|
+
kfs.push(kf(flowId, 'drawProgress', startTime, endTime, 0, 1, step.easing));
|
|
221
|
+
}
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
case 'wait':
|
|
225
|
+
// No keyframes — just advances time
|
|
226
|
+
break;
|
|
227
|
+
case 'camera':
|
|
228
|
+
// Camera keyframes use a virtual '__camera' object
|
|
229
|
+
if (!objects.has('__camera')) {
|
|
230
|
+
const cam = (0, types_1.createDefaultObject)('rect', '__camera');
|
|
231
|
+
cam.x = 0;
|
|
232
|
+
cam.y = 0;
|
|
233
|
+
cam.scaleX = 1;
|
|
234
|
+
cam.scaleY = 1;
|
|
235
|
+
cam.visible = true;
|
|
236
|
+
cam.opacity = 1;
|
|
237
|
+
objects.set('__camera', cam);
|
|
238
|
+
}
|
|
239
|
+
if (step.cameraAction === 'zoom' && step.cameraZoom !== undefined) {
|
|
240
|
+
kfs.push(kf('__camera', 'scaleX', startTime, endTime, 1, step.cameraZoom, step.easing));
|
|
241
|
+
kfs.push(kf('__camera', 'scaleY', startTime, endTime, 1, step.cameraZoom, step.easing));
|
|
242
|
+
}
|
|
243
|
+
if (step.cameraAction === 'pan' && step.cameraPanX !== undefined) {
|
|
244
|
+
kfs.push(kf('__camera', 'x', startTime, endTime, 0, step.cameraPanX, step.easing));
|
|
245
|
+
kfs.push(kf('__camera', 'y', startTime, endTime, 0, step.cameraPanY ?? 0, step.easing));
|
|
246
|
+
}
|
|
247
|
+
break;
|
|
248
|
+
// Graph-specific animations (tangent, secant, area, trace) — Phase 1C
|
|
249
|
+
case 'tangent':
|
|
250
|
+
case 'secant':
|
|
251
|
+
case 'area':
|
|
252
|
+
case 'trace':
|
|
253
|
+
// Placeholder: make target visible with draw animation
|
|
254
|
+
kfs.push(kf(id, 'visible', startTime, startTime, 0, 1, 'linear'));
|
|
255
|
+
kfs.push(kf(id, 'opacity', startTime, startTime, 0, 1, 'linear'));
|
|
256
|
+
kfs.push(kf(id, 'drawProgress', startTime, endTime, 0, 1, step.easing));
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
return kfs;
|
|
260
|
+
}
|
|
261
|
+
// ─── Keyframe Helper ─────────────────────────────────────────────
|
|
262
|
+
function kf(objectId, property, startTime, endTime, startValue, endValue, easing) {
|
|
263
|
+
return { objectId, property, startTime, endTime, startValue, endValue, easing };
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=MotionCompiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MotionCompiler.js","sourceRoot":"","sources":["../../../src/components/motion/MotionCompiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MotionEngine — Canvas2D Animation Renderer
|
|
3
|
+
*
|
|
4
|
+
* Takes a compiled timeline and renders it frame-by-frame on a canvas.
|
|
5
|
+
* Handles:
|
|
6
|
+
* - Easing functions
|
|
7
|
+
* - Interpolation (numeric, color)
|
|
8
|
+
* - Object rendering (shapes, text, arrows, etc.)
|
|
9
|
+
* - requestAnimationFrame loop
|
|
10
|
+
* - Play/pause/seek/speed controls
|
|
11
|
+
* - KaTeX rendering for tex objects
|
|
12
|
+
*/
|
|
13
|
+
import { CompiledTimeline, EngineState } from './types';
|
|
14
|
+
export declare class MotionEngine {
|
|
15
|
+
private canvas;
|
|
16
|
+
private ctx;
|
|
17
|
+
private timeline;
|
|
18
|
+
private animFrameId;
|
|
19
|
+
private lastFrameTime;
|
|
20
|
+
private objectStates;
|
|
21
|
+
state: EngineState;
|
|
22
|
+
onStateChange?: (state: EngineState) => void;
|
|
23
|
+
constructor(canvas: HTMLCanvasElement);
|
|
24
|
+
load(timeline: CompiledTimeline): void;
|
|
25
|
+
play(): void;
|
|
26
|
+
pause(): void;
|
|
27
|
+
togglePlayPause(): void;
|
|
28
|
+
seek(time: number): void;
|
|
29
|
+
seekPercent(pct: number): void;
|
|
30
|
+
restart(): void;
|
|
31
|
+
stepForward(): void;
|
|
32
|
+
stepBackward(): void;
|
|
33
|
+
goToEnd(): void;
|
|
34
|
+
goToStart(): void;
|
|
35
|
+
setSpeed(speed: number): void;
|
|
36
|
+
setLoop(loop: boolean): void;
|
|
37
|
+
destroy(): void;
|
|
38
|
+
private tick;
|
|
39
|
+
private applyKeyframes;
|
|
40
|
+
private render;
|
|
41
|
+
private renderObject;
|
|
42
|
+
private roundRect;
|
|
43
|
+
/** Simple math expression evaluator for plot functions */
|
|
44
|
+
private evaluateFunction;
|
|
45
|
+
private parseHighlightRange;
|
|
46
|
+
private notifyChange;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=MotionEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MotionEngine.d.ts","sourceRoot":"","sources":["../../../src/components/motion/MotionEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,gBAAgB,EAAsC,WAAW,EAAE,MAAM,SAAS,CAAA;AAgE3F,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,aAAa,CAAY;IAGjC,OAAO,CAAC,YAAY,CAA0D;IAG9E,KAAK,EAAE,WAAW,CAMjB;IAGD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;gBAEhC,MAAM,EAAE,iBAAiB;IASrC,IAAI,CAAC,QAAQ,EAAE,gBAAgB;IA8B/B,IAAI;IAaJ,KAAK;IASL,eAAe;IAKf,IAAI,CAAC,IAAI,EAAE,MAAM;IAOjB,WAAW,CAAC,GAAG,EAAE,MAAM;IAIvB,OAAO;IAKP,WAAW;IAIX,YAAY;IAIZ,OAAO;IAIP,SAAS;IAIT,QAAQ,CAAC,KAAK,EAAE,MAAM;IAKtB,OAAO,CAAC,IAAI,EAAE,OAAO;IAKrB,OAAO;IAQP,OAAO,CAAC,IAAI;IA+BZ,OAAO,CAAC,cAAc;IAwDtB,OAAO,CAAC,MAAM;IA6Cd,OAAO,CAAC,YAAY;IAoTpB,OAAO,CAAC,SAAS;IAejB,0DAA0D;IAC1D,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,YAAY;CAGvB"}
|