@jotx-labs/editor 2.4.215 → 2.4.217

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.
@@ -1 +1 @@
1
- {"version":3,"file":"MotionCompiler.d.ts","sourceRoot":"","sources":["../../../src/components/motion/MotionCompiler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACuB,WAAW,EAC3B,gBAAgB,EAE7B,MAAM,SAAS,CAAA;AAIhB,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,CAmDlE"}
1
+ {"version":3,"file":"MotionCompiler.d.ts","sourceRoot":"","sources":["../../../src/components/motion/MotionCompiler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACuB,WAAW,EAC3B,gBAAgB,EAE7B,MAAM,SAAS,CAAA;AAIhB,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,CAqElE"}
@@ -16,6 +16,23 @@ function compileScene(parsed) {
16
16
  for (const obj of parsed.objects) {
17
17
  objects.set(obj.id, { ...obj });
18
18
  }
19
+ // Auto-hide objects that have a "show" or "appear" step targeting them.
20
+ // This prevents a flash where the object is briefly visible (default=visible)
21
+ // before the show animation starts.
22
+ const showTargets = new Set();
23
+ for (const step of parsed.steps) {
24
+ if ((step.action === 'show' || step.action === 'appear') && step.targetId) {
25
+ showTargets.add(step.targetId);
26
+ }
27
+ }
28
+ for (const id of showTargets) {
29
+ const obj = objects.get(id);
30
+ if (obj && obj.opacity !== 0) {
31
+ // Only auto-hide if the user didn't explicitly set opacity 0
32
+ obj.opacity = 0;
33
+ obj.visible = false;
34
+ }
35
+ }
19
36
  let currentTime = 0;
20
37
  let inParallel = false;
21
38
  let parallelStartTime = 0;
@@ -75,7 +92,20 @@ function compileStep(step, startTime, endTime, objects) {
75
92
  const obj = objects.get(id);
76
93
  const fromX = obj?.x ?? 0;
77
94
  const fromY = obj?.y ?? 0;
78
- if (step.toX !== undefined && step.toY !== undefined) {
95
+ if (step.alongPath && step.alongPath.length >= 2) {
96
+ // Path-based movement: move through waypoints
97
+ // For now, move from first point to last point (linear interpolation)
98
+ const path = step.alongPath;
99
+ const destX = path[path.length - 1][0];
100
+ const destY = path[path.length - 1][1];
101
+ kfs.push(kf(id, 'x', startTime, endTime, path[0][0], destX, step.easing));
102
+ kfs.push(kf(id, 'y', startTime, endTime, path[0][1], destY, step.easing));
103
+ if (obj) {
104
+ obj.x = destX;
105
+ obj.y = destY;
106
+ }
107
+ }
108
+ else if (step.toX !== undefined && step.toY !== undefined) {
79
109
  kfs.push(kf(id, 'x', startTime, endTime, fromX, step.toX, step.easing));
80
110
  kfs.push(kf(id, 'y', startTime, endTime, fromY, step.toY, step.easing));
81
111
  // Update object state
@@ -222,8 +252,89 @@ function compileStep(step, startTime, endTime, objects) {
222
252
  break;
223
253
  }
224
254
  case 'wait':
255
+ case 'hold':
225
256
  // No keyframes — just advances time
226
257
  break;
258
+ case 'zoom':
259
+ case 'pan': {
260
+ // Shorthand camera actions — reuse camera logic
261
+ if (!objects.has('__camera')) {
262
+ const cam = (0, types_1.createDefaultObject)('rect', '__camera');
263
+ cam.x = 0;
264
+ cam.y = 0;
265
+ cam.scaleX = 1;
266
+ cam.scaleY = 1;
267
+ cam.visible = true;
268
+ cam.opacity = 1;
269
+ objects.set('__camera', cam);
270
+ }
271
+ const camObj = objects.get('__camera');
272
+ if (step.cameraAction === 'zoom' && step.cameraZoom !== undefined) {
273
+ const fromZoom = camObj.scaleX;
274
+ kfs.push(kf('__camera', 'scaleX', startTime, endTime, fromZoom, step.cameraZoom, step.easing));
275
+ kfs.push(kf('__camera', 'scaleY', startTime, endTime, fromZoom, step.cameraZoom, step.easing));
276
+ camObj.scaleX = step.cameraZoom;
277
+ camObj.scaleY = step.cameraZoom;
278
+ }
279
+ if (step.cameraAction === 'pan' && step.cameraPanX !== undefined) {
280
+ const fromX = camObj.x;
281
+ const fromY = camObj.y;
282
+ kfs.push(kf('__camera', 'x', startTime, endTime, fromX, step.cameraPanX, step.easing));
283
+ kfs.push(kf('__camera', 'y', startTime, endTime, fromY, step.cameraPanY ?? 0, step.easing));
284
+ camObj.x = step.cameraPanX;
285
+ camObj.y = step.cameraPanY ?? 0;
286
+ }
287
+ break;
288
+ }
289
+ case 'fade': {
290
+ const obj = objects.get(id);
291
+ const fromOp = obj?.opacity ?? 1;
292
+ if (step.fadeDirection === 'out') {
293
+ kfs.push(kf(id, 'opacity', startTime, endTime, fromOp, 0, step.easing));
294
+ kfs.push(kf(id, 'visible', endTime, endTime, 1, 0, 'linear'));
295
+ if (obj)
296
+ obj.opacity = 0;
297
+ }
298
+ else {
299
+ // fade in
300
+ kfs.push(kf(id, 'visible', startTime, startTime, 0, 1, 'linear'));
301
+ kfs.push(kf(id, 'opacity', startTime, endTime, 0, 1, step.easing));
302
+ if (obj)
303
+ obj.opacity = 1;
304
+ }
305
+ break;
306
+ }
307
+ case 'morph': {
308
+ // Interpolate position, size, color from source to target object
309
+ const srcObj = objects.get(id);
310
+ const tgtObj = step.morphTarget ? objects.get(step.morphTarget) : undefined;
311
+ if (srcObj && tgtObj) {
312
+ kfs.push(kf(id, 'x', startTime, endTime, srcObj.x, tgtObj.x, step.easing));
313
+ kfs.push(kf(id, 'y', startTime, endTime, srcObj.y, tgtObj.y, step.easing));
314
+ if (srcObj.width !== undefined && tgtObj.width !== undefined) {
315
+ kfs.push(kf(id, 'width', startTime, endTime, srcObj.width, tgtObj.width, step.easing));
316
+ }
317
+ if (srcObj.height !== undefined && tgtObj.height !== undefined) {
318
+ kfs.push(kf(id, 'height', startTime, endTime, srcObj.height, tgtObj.height, step.easing));
319
+ }
320
+ if (srcObj.radius !== undefined && tgtObj.radius !== undefined) {
321
+ kfs.push(kf(id, 'radius', startTime, endTime, srcObj.radius, tgtObj.radius, step.easing));
322
+ }
323
+ if (tgtObj.color) {
324
+ kfs.push(kf(id, 'color', startTime, endTime, srcObj.color || '', tgtObj.color, step.easing));
325
+ }
326
+ // Update source state to target values
327
+ srcObj.x = tgtObj.x;
328
+ srcObj.y = tgtObj.y;
329
+ if (tgtObj.width !== undefined)
330
+ srcObj.width = tgtObj.width;
331
+ if (tgtObj.height !== undefined)
332
+ srcObj.height = tgtObj.height;
333
+ if (tgtObj.color)
334
+ srcObj.color = tgtObj.color;
335
+ }
336
+ break;
337
+ }
227
338
  case 'camera':
228
339
  // Camera keyframes use a virtual '__camera' object
229
340
  if (!objects.has('__camera')) {
@@ -237,20 +348,26 @@ function compileStep(step, startTime, endTime, objects) {
237
348
  objects.set('__camera', cam);
238
349
  }
239
350
  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));
351
+ const camObjC = objects.get('__camera');
352
+ kfs.push(kf('__camera', 'scaleX', startTime, endTime, camObjC.scaleX, step.cameraZoom, step.easing));
353
+ kfs.push(kf('__camera', 'scaleY', startTime, endTime, camObjC.scaleY, step.cameraZoom, step.easing));
354
+ camObjC.scaleX = step.cameraZoom;
355
+ camObjC.scaleY = step.cameraZoom;
242
356
  }
243
357
  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));
358
+ const camObjC = objects.get('__camera');
359
+ kfs.push(kf('__camera', 'x', startTime, endTime, camObjC.x, step.cameraPanX, step.easing));
360
+ kfs.push(kf('__camera', 'y', startTime, endTime, camObjC.y, step.cameraPanY ?? 0, step.easing));
361
+ camObjC.x = step.cameraPanX;
362
+ camObjC.y = step.cameraPanY ?? 0;
246
363
  }
247
364
  break;
248
- // Graph-specific animations (tangent, secant, area, trace) — Phase 1C
365
+ // Graph-specific animations (tangent, secant, area, trace)
249
366
  case 'tangent':
250
367
  case 'secant':
251
368
  case 'area':
252
369
  case 'trace':
253
- // Placeholder: make target visible with draw animation
370
+ // Make target visible with draw animation
254
371
  kfs.push(kf(id, 'visible', startTime, startTime, 0, 1, 'linear'));
255
372
  kfs.push(kf(id, 'opacity', startTime, startTime, 0, 1, 'linear'));
256
373
  kfs.push(kf(id, 'drawProgress', startTime, endTime, 0, 1, step.easing));
@@ -1 +1 @@
1
- {"version":3,"file":"MotionCompiler.js","sourceRoot":"","sources":["../../../src/components/motion/MotionCompiler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MotionCompiler.js","sourceRoot":"","sources":["../../../src/components/motion/MotionCompiler.ts"],"names":[],"mappings":"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"}
@@ -18,10 +18,14 @@ export declare class MotionEngine {
18
18
  private animFrameId;
19
19
  private lastFrameTime;
20
20
  private objectStates;
21
+ private autoFitScale;
22
+ private autoFitOffsetX;
23
+ private autoFitOffsetY;
21
24
  state: EngineState;
22
25
  onStateChange?: (state: EngineState) => void;
23
26
  constructor(canvas: HTMLCanvasElement);
24
27
  load(timeline: CompiledTimeline): void;
28
+ private computeAutoFit;
25
29
  play(): void;
26
30
  pause(): void;
27
31
  togglePlayPause(): void;
@@ -1 +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"}
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,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,cAAc,CAAY;IAGlC,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;IA+B/B,OAAO,CAAC,cAAc;IAqGtB,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;IAoDd,OAAO,CAAC,YAAY;IAybpB,OAAO,CAAC,SAAS;IAejB,0DAA0D;IAC1D,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,YAAY;CAGvB"}
@@ -78,6 +78,10 @@ class MotionEngine {
78
78
  this.lastFrameTime = 0;
79
79
  // Runtime object states (snapshot at current time)
80
80
  this.objectStates = new Map();
81
+ // Auto-fit scaling: computed from content bounding box
82
+ this.autoFitScale = 1;
83
+ this.autoFitOffsetX = 0;
84
+ this.autoFitOffsetY = 0;
81
85
  // Public state
82
86
  this.state = {
83
87
  currentTime: 0,
@@ -115,9 +119,100 @@ class MotionEngine {
115
119
  lineWidth: obj.lineWidth || 2,
116
120
  });
117
121
  }
122
+ // Auto-fit: compute bounding box of all objects and scale to fit canvas
123
+ this.computeAutoFit();
118
124
  this.render();
119
125
  this.notifyChange();
120
126
  }
127
+ computeAutoFit() {
128
+ if (!this.timeline)
129
+ return;
130
+ const dpr = window.devicePixelRatio || 1;
131
+ const logicalW = this.canvas.width / dpr;
132
+ const logicalH = this.canvas.height / dpr;
133
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
134
+ for (const [id, obj] of this.timeline.objects) {
135
+ if (id.startsWith('__'))
136
+ continue;
137
+ const w = obj.width || 0;
138
+ const h = obj.height || 0;
139
+ const r = obj.radius || 0;
140
+ // Object center position
141
+ const cx = obj.x;
142
+ const cy = obj.y;
143
+ // Estimate bounds based on shape
144
+ let halfW = Math.max(w / 2, r);
145
+ let halfH = Math.max(h / 2, r);
146
+ // Text objects: estimate width from content length × font size
147
+ if ((obj.type === 'text' || obj.type === 'tex') && obj.content) {
148
+ const fontSize = obj.fontSize || 16;
149
+ const textAlign = obj.textAlign || 'center';
150
+ const estWidth = obj.content.length * fontSize * 0.55;
151
+ if (textAlign === 'center') {
152
+ halfW = Math.max(halfW, estWidth / 2);
153
+ }
154
+ else if (textAlign === 'left') {
155
+ // Text extends to the right from x
156
+ halfW = Math.max(halfW, estWidth);
157
+ }
158
+ else {
159
+ halfW = Math.max(halfW, estWidth);
160
+ }
161
+ halfH = Math.max(halfH, fontSize / 2 + 4);
162
+ }
163
+ minX = Math.min(minX, cx - halfW);
164
+ minY = Math.min(minY, cy - halfH);
165
+ maxX = Math.max(maxX, cx + halfW);
166
+ maxY = Math.max(maxY, cy + halfH);
167
+ // Line/path/arrow endpoints
168
+ if (obj.x2 !== undefined) {
169
+ minX = Math.min(minX, obj.x2);
170
+ maxX = Math.max(maxX, obj.x2);
171
+ }
172
+ if (obj.y2 !== undefined) {
173
+ minY = Math.min(minY, obj.y2);
174
+ maxY = Math.max(maxY, obj.y2);
175
+ }
176
+ // Polyline points
177
+ if (obj.points) {
178
+ for (const pt of obj.points) {
179
+ minX = Math.min(minX, pt[0]);
180
+ maxX = Math.max(maxX, pt[0]);
181
+ minY = Math.min(minY, pt[1]);
182
+ maxY = Math.max(maxY, pt[1]);
183
+ }
184
+ }
185
+ }
186
+ // Also include animation keyframe destination positions
187
+ if (this.timeline.keyframes) {
188
+ for (const kf of this.timeline.keyframes) {
189
+ if (kf.property === 'x') {
190
+ minX = Math.min(minX, kf.startValue, kf.endValue);
191
+ maxX = Math.max(maxX, kf.startValue, kf.endValue);
192
+ }
193
+ if (kf.property === 'y') {
194
+ minY = Math.min(minY, kf.startValue, kf.endValue);
195
+ maxY = Math.max(maxY, kf.startValue, kf.endValue);
196
+ }
197
+ }
198
+ }
199
+ if (!isFinite(minX)) {
200
+ this.autoFitScale = 1;
201
+ this.autoFitOffsetX = 0;
202
+ this.autoFitOffsetY = 0;
203
+ return;
204
+ }
205
+ const margin = 40; // increased margin for breathing room
206
+ const contentW = maxX - minX + margin * 2;
207
+ const contentH = maxY - minY + margin * 2;
208
+ const scaleX = logicalW / contentW;
209
+ const scaleY = logicalH / contentH;
210
+ const scale = Math.min(scaleX, scaleY, 1); // never scale UP, only down
211
+ this.autoFitScale = scale;
212
+ // Center the content
213
+ this.autoFitOffsetX = (logicalW - contentW * scale) / 2 - minX * scale + margin * scale;
214
+ this.autoFitOffsetY = (logicalH - contentH * scale) / 2 - minY * scale + margin * scale;
215
+ }
121
216
  // ─── Playback Controls ───────────────────────────────────────
122
217
  play() {
123
218
  if (this.state.isPlaying)
@@ -277,6 +372,12 @@ class MotionEngine {
277
372
  ctx.save();
278
373
  // Apply DPR scaling
279
374
  ctx.scale(dpr, dpr);
375
+ // Apply auto-fit scaling (content → canvas bounds)
376
+ // Always apply to center content even when scale=1
377
+ ctx.translate(this.autoFitOffsetX, this.autoFitOffsetY);
378
+ if (this.autoFitScale < 1) {
379
+ ctx.scale(this.autoFitScale, this.autoFitScale);
380
+ }
280
381
  // Apply camera transform
281
382
  const cam = this.objectStates.get('__camera');
282
383
  if (cam) {
@@ -309,46 +410,148 @@ class MotionEngine {
309
410
  renderObject(obj, st) {
310
411
  const { ctx } = this;
311
412
  const color = st.color || obj.color || '#cdd6f4';
413
+ const fillColor = obj.fill || color;
414
+ const strokeColor = obj.stroke || color;
312
415
  const w = st.width;
313
416
  const h = st.height;
417
+ // Apply shadow/glow if specified
418
+ if (obj.shadow) {
419
+ const parts = obj.shadow.split(',').map(s => s.trim());
420
+ ctx.shadowOffsetX = parseFloat(parts[0]) || 0;
421
+ ctx.shadowOffsetY = parseFloat(parts[1]) || 0;
422
+ ctx.shadowBlur = parseFloat(parts[2]) || 0;
423
+ ctx.shadowColor = parts[3] || 'rgba(0,0,0,0.5)';
424
+ }
425
+ // Apply dashed pattern if specified
426
+ if (obj.dashed && obj.dashed.length > 0) {
427
+ ctx.setLineDash(obj.dashed);
428
+ }
429
+ else {
430
+ ctx.setLineDash([]);
431
+ }
314
432
  switch (obj.type) {
315
433
  case 'rect': {
316
- ctx.fillStyle = color;
317
434
  const r = st.radius || 0;
318
435
  if (r > 0) {
319
436
  this.roundRect(-w / 2, -h / 2, w, h, r);
320
- ctx.fill();
437
+ // Fill
438
+ if (obj.fill) {
439
+ ctx.fillStyle = fillColor;
440
+ ctx.fill();
441
+ }
442
+ else {
443
+ ctx.fillStyle = fillColor;
444
+ ctx.fill();
445
+ }
446
+ // Stroke if stroke color specified or lineWidth set
447
+ if (obj.stroke || st.lineWidth > 0) {
448
+ ctx.strokeStyle = strokeColor;
449
+ ctx.lineWidth = st.lineWidth || 1;
450
+ ctx.stroke();
451
+ }
321
452
  }
322
453
  else {
454
+ ctx.fillStyle = fillColor;
323
455
  ctx.fillRect(-w / 2, -h / 2, w, h);
456
+ if (obj.stroke || st.lineWidth > 0) {
457
+ ctx.strokeStyle = strokeColor;
458
+ ctx.lineWidth = st.lineWidth || 1;
459
+ ctx.strokeRect(-w / 2, -h / 2, w, h);
460
+ }
324
461
  }
325
462
  break;
326
463
  }
327
464
  case 'circle': {
328
465
  const r = st.radius || 20;
329
- ctx.fillStyle = color;
330
466
  ctx.beginPath();
331
467
  ctx.arc(0, 0, r, 0, Math.PI * 2);
468
+ ctx.fillStyle = fillColor;
332
469
  ctx.fill();
470
+ if (obj.stroke || st.lineWidth > 0) {
471
+ ctx.strokeStyle = strokeColor;
472
+ ctx.lineWidth = st.lineWidth || 1;
473
+ ctx.stroke();
474
+ }
333
475
  break;
334
476
  }
335
- case 'line': {
336
- const x2 = (obj.x2 ?? 0) - obj.x;
337
- const y2 = (obj.y2 ?? 0) - obj.y;
477
+ case 'ellipse': {
478
+ const rx = (w || 100) / 2;
479
+ const ry = (h || 60) / 2;
480
+ ctx.beginPath();
481
+ ctx.ellipse(0, 0, rx, ry, 0, 0, Math.PI * 2);
482
+ if (obj.fill) {
483
+ ctx.fillStyle = fillColor;
484
+ ctx.fill();
485
+ }
486
+ ctx.strokeStyle = strokeColor;
487
+ ctx.lineWidth = st.lineWidth || 1;
488
+ ctx.stroke();
489
+ break;
490
+ }
491
+ case 'polygon': {
492
+ const sides = obj.sides || 6;
493
+ const r = st.radius || 30;
494
+ ctx.beginPath();
495
+ for (let i = 0; i < sides; i++) {
496
+ const angle = (i / sides) * Math.PI * 2 - Math.PI / 2;
497
+ const px = r * Math.cos(angle);
498
+ const py = r * Math.sin(angle);
499
+ if (i === 0)
500
+ ctx.moveTo(px, py);
501
+ else
502
+ ctx.lineTo(px, py);
503
+ }
504
+ ctx.closePath();
505
+ ctx.fillStyle = fillColor;
506
+ ctx.fill();
507
+ if (obj.stroke || st.lineWidth > 0) {
508
+ ctx.strokeStyle = strokeColor;
509
+ ctx.lineWidth = st.lineWidth || 1;
510
+ ctx.stroke();
511
+ }
512
+ break;
513
+ }
514
+ case 'line':
515
+ case 'path': {
338
516
  const lw = st.lineWidth;
339
517
  const progress = st.drawProgress;
340
- ctx.strokeStyle = color;
341
- ctx.lineWidth = lw;
518
+ ctx.strokeStyle = strokeColor;
519
+ ctx.lineWidth = lw || 2;
342
520
  ctx.lineCap = 'round';
343
- ctx.beginPath();
344
- ctx.moveTo(0, 0);
345
- if (progress < 1 && progress > 0) {
346
- ctx.lineTo(x2 * progress, y2 * progress);
521
+ ctx.lineJoin = 'round';
522
+ // If points array exists, render as polyline
523
+ if (obj.points && obj.points.length >= 2) {
524
+ const pts = obj.points;
525
+ const totalPts = progress > 0 && progress < 1
526
+ ? Math.max(2, Math.ceil(pts.length * progress))
527
+ : pts.length;
528
+ ctx.beginPath();
529
+ // Points are absolute — translate relative to object position
530
+ ctx.moveTo(pts[0][0] - obj.x, pts[0][1] - obj.y);
531
+ for (let i = 1; i < totalPts; i++) {
532
+ ctx.lineTo(pts[i][0] - obj.x, pts[i][1] - obj.y);
533
+ }
534
+ ctx.stroke();
347
535
  }
348
536
  else {
349
- ctx.lineTo(x2, y2);
537
+ // Simple from→to line
538
+ const x2 = (obj.x2 ?? 0) - obj.x;
539
+ const y2 = (obj.y2 ?? 0) - obj.y;
540
+ ctx.beginPath();
541
+ ctx.moveTo(0, 0);
542
+ if (progress < 1 && progress > 0) {
543
+ ctx.lineTo(x2 * progress, y2 * progress);
544
+ }
545
+ else {
546
+ ctx.lineTo(x2, y2);
547
+ }
548
+ ctx.stroke();
549
+ }
550
+ // Also fill if specified
551
+ if (obj.fill) {
552
+ ctx.fillStyle = fillColor;
553
+ ctx.fill();
350
554
  }
351
- ctx.stroke();
352
555
  break;
353
556
  }
354
557
  case 'arrow': {
@@ -358,8 +561,8 @@ class MotionEngine {
358
561
  const progress = st.drawProgress;
359
562
  const endX = x2 * (progress > 0 ? progress : 1);
360
563
  const endY = y2 * (progress > 0 ? progress : 1);
361
- ctx.strokeStyle = color;
362
- ctx.fillStyle = color;
564
+ ctx.strokeStyle = strokeColor;
565
+ ctx.fillStyle = strokeColor;
363
566
  ctx.lineWidth = lw;
364
567
  ctx.lineCap = 'round';
365
568
  // Line
@@ -386,19 +589,18 @@ class MotionEngine {
386
589
  : content;
387
590
  const size = obj.fontSize || 12;
388
591
  const weight = obj.fontWeight || 'normal';
389
- ctx.fillStyle = color;
592
+ ctx.fillStyle = fillColor;
390
593
  ctx.font = `${weight} ${size}px "Helvetica Neue", Helvetica, Arial, sans-serif`;
391
- ctx.textAlign = 'center';
594
+ ctx.textAlign = obj.textAlign || 'center';
392
595
  ctx.textBaseline = 'middle';
393
596
  ctx.fillText(displayText, 0, 0);
394
597
  break;
395
598
  }
396
599
  case 'tex': {
397
600
  // Render LaTeX — simplified version using canvas text
398
- // Full KaTeX rendering will be added in Phase 1C
399
601
  const content = st.content || obj.content || '';
400
602
  const size = obj.fontSize || 14;
401
- ctx.fillStyle = color;
603
+ ctx.fillStyle = fillColor;
402
604
  ctx.font = `italic ${size}px Georgia, 'Times New Roman', serif`;
403
605
  ctx.textAlign = 'center';
404
606
  ctx.textBaseline = 'middle';
@@ -503,7 +705,7 @@ class MotionEngine {
503
705
  }
504
706
  case 'point': {
505
707
  const r = st.radius || 5;
506
- ctx.fillStyle = color;
708
+ ctx.fillStyle = fillColor;
507
709
  ctx.beginPath();
508
710
  ctx.arc(0, 0, r, 0, Math.PI * 2);
509
711
  ctx.fill();
@@ -562,6 +764,28 @@ class MotionEngine {
562
764
  }
563
765
  break;
564
766
  }
767
+ case 'image': {
768
+ // Render image if cached
769
+ const src = obj.src;
770
+ if (!src)
771
+ break;
772
+ // Try to get cached image
773
+ let img = this.__imageCache?.get(src);
774
+ if (!img) {
775
+ // Load image
776
+ img = new Image();
777
+ img.src = src;
778
+ if (!this.__imageCache)
779
+ this.__imageCache = new Map();
780
+ this.__imageCache.set(src, img);
781
+ }
782
+ if (img.complete && img.naturalWidth > 0) {
783
+ const imgW = w || img.naturalWidth;
784
+ const imgH = h || img.naturalHeight;
785
+ ctx.drawImage(img, -imgW / 2, -imgH / 2, imgW, imgH);
786
+ }
787
+ break;
788
+ }
565
789
  default:
566
790
  // Unknown type — render as circle placeholder
567
791
  ctx.fillStyle = '#45475a';
@@ -570,6 +794,15 @@ class MotionEngine {
570
794
  ctx.fill();
571
795
  break;
572
796
  }
797
+ // Reset shadow after rendering
798
+ if (obj.shadow) {
799
+ ctx.shadowColor = 'transparent';
800
+ ctx.shadowBlur = 0;
801
+ ctx.shadowOffsetX = 0;
802
+ ctx.shadowOffsetY = 0;
803
+ }
804
+ // Reset dash pattern
805
+ ctx.setLineDash([]);
573
806
  }
574
807
  // ─── Helpers ─────────────────────────────────────────────────
575
808
  roundRect(x, y, w, h, r) {
@@ -589,8 +822,13 @@ class MotionEngine {
589
822
  /** Simple math expression evaluator for plot functions */
590
823
  evaluateFunction(expr, x) {
591
824
  try {
825
+ // Strip surrounding single quotes (DSL tokenizer doesn't handle them)
826
+ let cleaned = expr.trim();
827
+ if (cleaned.startsWith("'") && cleaned.endsWith("'")) {
828
+ cleaned = cleaned.slice(1, -1);
829
+ }
592
830
  // Sanitize: only allow math operations
593
- const sanitized = expr
831
+ const sanitized = cleaned
594
832
  .replace(/\bx\b/g, `(${x})`)
595
833
  .replace(/\bsin\b/g, 'Math.sin')
596
834
  .replace(/\bcos\b/g, 'Math.cos')