@elucim/dsl 0.6.0 → 0.7.0

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/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { easeOutBounce as ne, easeOutElastic as se, easeOutBack as ce, easeInBack as le, easeInOutExpo as ue, easeOutExpo as he, easeInExpo as fe, easeInOutSine as ge, easeOutSine as oe, easeInSine as ye, easeInOutQuart as me, easeOutQuart as be, easeInQuart as xe, easeInOutCubic as ve, easeOutCubic as de, easeInCubic as ke, easeInOutQuad as we, easeOutQuad as Ie, easeInQuad as Se, linear as $e, spring as Oe, cubicBezier as Ae, Presentation as Ce, Scene as ze, Player as pe, Slide as Ee, Parallel as Fe, Stagger as Pe, Morph as Re, Transform as Ne, Write as Te, Draw as Me, FadeOut as We, FadeIn as _e, BarChart as De, LaTeX as Ve, Graph as Le, Matrix as je, Text as _, VectorField as qe, Vector as Be, FunctionPlot as Ue, Axes as He, Image as Ge, Polygon as Ke, Rect as Qe, Arrow as Xe, Line as Je, Circle as Ye, BezierCurve as Ze, Group as et, Sequence as tt } from "@elucim/core";
2
- import { jsx as c, jsxs as F } from "react/jsx-runtime";
3
- import H, { forwardRef as at, useRef as rt, useImperativeHandle as it } from "react";
4
- import { renderToStaticMarkup as nt } from "react-dom/server";
5
- const L = {
1
+ import { easeOutBounce as he, easeOutElastic as fe, easeOutBack as oe, easeInBack as ge, easeInOutExpo as me, easeOutExpo as ye, easeInExpo as be, easeInOutSine as xe, easeOutSine as ve, easeInSine as de, easeInOutQuart as we, easeOutQuart as ke, easeInQuart as Ie, easeInOutCubic as Se, easeOutCubic as $e, easeInCubic as Oe, easeInOutQuad as Ae, easeOutQuad as Ce, easeInQuad as ze, linear as pe, spring as Ee, cubicBezier as Re, Presentation as Fe, Scene as Pe, Player as Te, Slide as Me, Parallel as Ne, Stagger as _e, Morph as De, Transform as We, Write as Ve, Draw as Le, FadeOut as je, FadeIn as qe, BarChart as Be, LaTeX as Ue, Graph as He, Matrix as Ge, Text as L, VectorField as Ke, Vector as Qe, FunctionPlot as Xe, Axes as Je, Image as Ye, Polygon as Ze, Rect as et, Arrow as tt, Line as at, Circle as rt, BezierCurve as it, Group as nt, Sequence as st } from "@elucim/core";
2
+ import { jsx as c, jsxs as R } from "react/jsx-runtime";
3
+ import Q, { forwardRef as ct, useRef as lt, useImperativeHandle as ut, useSyncExternalStore as ht } from "react";
4
+ import { renderToStaticMarkup as ft } from "react-dom/server";
5
+ const B = {
6
6
  sin: Math.sin,
7
7
  cos: Math.cos,
8
8
  tan: Math.tan,
@@ -22,12 +22,12 @@ const L = {
22
22
  max: (...e) => Math.max(...e),
23
23
  sign: Math.sign,
24
24
  pow: Math.pow
25
- }, G = {
25
+ }, X = {
26
26
  PI: Math.PI,
27
27
  E: Math.E,
28
28
  TAU: Math.PI * 2
29
29
  };
30
- function B(e) {
30
+ function G(e) {
31
31
  const a = [];
32
32
  let t = 0;
33
33
  for (; t < e.length; ) {
@@ -85,12 +85,12 @@ function B(e) {
85
85
  a.push({ type: "COMMA", value: ",", pos: i });
86
86
  break;
87
87
  default:
88
- throw new I(`Unexpected character '${r}'`, i);
88
+ throw new S(`Unexpected character '${r}'`, i);
89
89
  }
90
90
  }
91
91
  return a.push({ type: "EOF", value: "", pos: t }), a;
92
92
  }
93
- class U {
93
+ class K {
94
94
  constructor(a) {
95
95
  this.pos = 0, this.tokens = a;
96
96
  }
@@ -104,7 +104,7 @@ class U {
104
104
  expect(a) {
105
105
  const t = this.peek();
106
106
  if (t.type !== a)
107
- throw new I(
107
+ throw new S(
108
108
  `Expected ${a} but got ${t.type} ('${t.value}')`,
109
109
  t.pos
110
110
  );
@@ -115,7 +115,7 @@ class U {
115
115
  const a = this.parseExpression();
116
116
  if (this.peek().type !== "EOF") {
117
117
  const t = this.peek();
118
- throw new I(
118
+ throw new S(
119
119
  `Unexpected token '${t.value}' after expression`,
120
120
  t.pos
121
121
  );
@@ -168,14 +168,14 @@ class U {
168
168
  if (this.peek().type !== "RPAREN")
169
169
  for (r.push(this.parseExpression()); this.peek().type === "COMMA"; )
170
170
  this.advance(), r.push(this.parseExpression());
171
- if (this.expect("RPAREN"), !Object.prototype.hasOwnProperty.call(L, t))
172
- throw new I(
173
- `Unknown function '${t}'. Available: ${Object.keys(L).join(", ")}`,
171
+ if (this.expect("RPAREN"), !Object.prototype.hasOwnProperty.call(B, t))
172
+ throw new S(
173
+ `Unknown function '${t}'. Available: ${Object.keys(B).join(", ")}`,
174
174
  a.pos
175
175
  );
176
176
  return { kind: "call", name: t, args: r };
177
177
  }
178
- return Object.prototype.hasOwnProperty.call(G, t) ? { kind: "number", value: G[t] } : { kind: "variable", name: t };
178
+ return Object.prototype.hasOwnProperty.call(X, t) ? { kind: "number", value: X[t] } : { kind: "variable", name: t };
179
179
  }
180
180
  if (a.type === "LPAREN") {
181
181
  this.advance();
@@ -190,7 +190,7 @@ class U {
190
190
  this.advance(), t.push(this.parseExpression());
191
191
  return this.expect("RBRACKET"), { kind: "array", elements: t };
192
192
  }
193
- throw new I(
193
+ throw new S(
194
194
  `Unexpected token '${a.value}'`,
195
195
  a.pos
196
196
  );
@@ -202,7 +202,7 @@ function z(e, a) {
202
202
  return e.value;
203
203
  case "variable":
204
204
  if (Object.prototype.hasOwnProperty.call(a, e.name)) return a[e.name];
205
- throw new I(`Unknown variable '${e.name}'`, 0);
205
+ throw new S(`Unknown variable '${e.name}'`, 0);
206
206
  case "unary":
207
207
  const t = z(e.operand, a);
208
208
  return e.op === "-" ? -t : t;
@@ -223,95 +223,95 @@ function z(e, a) {
223
223
  break;
224
224
  }
225
225
  case "call": {
226
- const r = L[e.name], i = e.args.map((n) => z(n, a));
226
+ const r = B[e.name], i = e.args.map((n) => z(n, a));
227
227
  return r(...i);
228
228
  }
229
229
  case "array":
230
230
  return e.elements.map((r) => z(r, a));
231
231
  }
232
- throw new I("Invalid AST node", 0);
232
+ throw new S("Invalid AST node", 0);
233
233
  }
234
- class I extends Error {
234
+ class S extends Error {
235
235
  constructor(a, t) {
236
236
  super(a), this.name = "ExpressionError", this.position = t;
237
237
  }
238
238
  }
239
- function st(e) {
240
- const a = B(e), t = new U(a).parse();
239
+ function ot(e) {
240
+ const a = G(e), t = new K(a).parse();
241
241
  return (r) => z(t, r);
242
242
  }
243
- function ct(e) {
244
- const a = B(e), t = new U(a).parse();
243
+ function gt(e) {
244
+ const a = G(e), t = new K(a).parse();
245
245
  if (t.kind !== "array" || t.elements.length !== 2)
246
- throw new I(
246
+ throw new S(
247
247
  'Vector expression must be an array of 2 elements, e.g. "[-y, x]"',
248
248
  0
249
249
  );
250
250
  return (r) => z(t, r);
251
251
  }
252
- function J(e) {
252
+ function ee(e) {
253
253
  try {
254
- const a = B(e);
255
- return new U(a).parse(), null;
254
+ const a = G(e);
255
+ return new K(a).parse(), null;
256
256
  } catch (a) {
257
- return a instanceof I ? `${a.message} (at position ${a.position})` : String(a);
258
- }
259
- }
260
- const j = {
261
- linear: $e,
262
- easeInQuad: Se,
263
- easeOutQuad: Ie,
264
- easeInOutQuad: we,
265
- easeInCubic: ke,
266
- easeOutCubic: de,
267
- easeInOutCubic: ve,
268
- easeInQuart: xe,
269
- easeOutQuart: be,
270
- easeInOutQuart: me,
271
- easeInSine: ye,
272
- easeOutSine: oe,
273
- easeInOutSine: ge,
274
- easeInExpo: fe,
275
- easeOutExpo: he,
276
- easeInOutExpo: ue,
277
- easeInBack: le,
278
- easeOutBack: ce,
279
- easeOutElastic: se,
280
- easeOutBounce: ne
257
+ return a instanceof S ? `${a.message} (at position ${a.position})` : String(a);
258
+ }
259
+ }
260
+ const U = {
261
+ linear: pe,
262
+ easeInQuad: ze,
263
+ easeOutQuad: Ce,
264
+ easeInOutQuad: Ae,
265
+ easeInCubic: Oe,
266
+ easeOutCubic: $e,
267
+ easeInOutCubic: Se,
268
+ easeInQuart: Ie,
269
+ easeOutQuart: ke,
270
+ easeInOutQuart: we,
271
+ easeInSine: de,
272
+ easeOutSine: ve,
273
+ easeInOutSine: xe,
274
+ easeInExpo: be,
275
+ easeOutExpo: ye,
276
+ easeInOutExpo: me,
277
+ easeInBack: ge,
278
+ easeOutBack: oe,
279
+ easeOutElastic: fe,
280
+ easeOutBounce: he
281
281
  };
282
- function g(e) {
282
+ function o(e) {
283
283
  if (e !== void 0) {
284
284
  if (typeof e == "string") {
285
- const a = j[e];
285
+ const a = U[e];
286
286
  if (!a) {
287
- const t = Object.keys(j), r = t.find((n) => n.toLowerCase() === e.toLowerCase()), i = r ? ` Did you mean '${r}'?` : "";
287
+ const t = Object.keys(U), r = t.find((n) => n.toLowerCase() === e.toLowerCase()), i = r ? ` Did you mean '${r}'?` : "";
288
288
  throw new Error(`Unknown easing '${e}'.${i} Available: ${t.join(", ")}`);
289
289
  }
290
290
  return a;
291
291
  }
292
292
  if (e.type === "spring")
293
- return Oe({
293
+ return Ee({
294
294
  stiffness: e.stiffness,
295
295
  damping: e.damping,
296
296
  mass: e.mass
297
297
  });
298
298
  if (e.type === "cubicBezier")
299
- return Ae(e.x1, e.y1, e.x2, e.y2);
299
+ return Re(e.x1, e.y1, e.x2, e.y2);
300
300
  throw new Error(`Unknown easing type: ${e.type}`);
301
301
  }
302
302
  }
303
- const D = Object.keys(j);
304
- function Y(e) {
303
+ const j = Object.keys(U);
304
+ function te(e) {
305
305
  const a = [];
306
306
  if (!e || typeof e != "object")
307
307
  return a.push({ path: "", message: "Document must be an object", severity: "error" }), { valid: !1, errors: a };
308
308
  const t = e;
309
- return t.version !== "1.0" && a.push({ path: "version", message: `Expected version "1.0", got "${t.version}"`, severity: "error" }), !t.root || typeof t.root != "object" ? (a.push({ path: "root", message: 'Missing or invalid "root" node', severity: "error" }), { valid: a.filter((r) => r.severity === "error").length === 0, errors: a }) : (lt(t.root, "root", a), {
309
+ return t.version !== "1.0" && a.push({ path: "version", message: `Expected version "1.0", got "${t.version}"`, severity: "error" }), !t.root || typeof t.root != "object" ? (a.push({ path: "root", message: 'Missing or invalid "root" node', severity: "error" }), { valid: a.filter((r) => r.severity === "error").length === 0, errors: a }) : (mt(t.root, "root", a), {
310
310
  valid: a.filter((r) => r.severity === "error").length === 0,
311
311
  errors: a
312
312
  });
313
313
  }
314
- const K = ["scene", "player", "presentation"], T = ["card", "slide", "square"], V = [
314
+ const J = ["scene", "player", "presentation"], D = ["card", "slide", "square"], q = [
315
315
  "sequence",
316
316
  "group",
317
317
  "bezierCurve",
@@ -340,219 +340,219 @@ const K = ["scene", "player", "presentation"], T = ["card", "slide", "square"],
340
340
  "parallel",
341
341
  "player",
342
342
  "scene"
343
- ], Q = ["none", "fade", "slide-left", "slide-up", "zoom"];
344
- function lt(e, a, t) {
343
+ ], Y = ["none", "fade", "slide-left", "slide-up", "zoom"];
344
+ function mt(e, a, t) {
345
345
  const r = e.type;
346
- if (!K.includes(r)) {
347
- t.push({ path: `${a}.type`, message: `Root type must be one of: ${K.join(", ")}. Got "${r}"`, severity: "error" });
346
+ if (!J.includes(r)) {
347
+ t.push({ path: `${a}.type`, message: `Root type must be one of: ${J.join(", ")}. Got "${r}"`, severity: "error" });
348
348
  return;
349
349
  }
350
- r === "scene" || r === "player" ? Z(e, a, r, t) : r === "presentation" && ut(e, a, t);
350
+ r === "scene" || r === "player" ? ae(e, a, r, t) : r === "presentation" && yt(e, a, t);
351
351
  }
352
- function Z(e, a, t, r) {
353
- Tt(e, "durationInFrames", a, r), m(e, "width", a, r), m(e, "height", a, r), m(e, "fps", a, r), $(e, "background", a, r), e.preset !== void 0 && (typeof e.preset != "string" || !T.includes(e.preset)) && r.push({ path: `${a}.preset`, message: `preset must be one of: ${T.join(", ")}. Got "${e.preset}"`, severity: "error" }), t === "player" && (N(e, "controls", a, r), N(e, "loop", a, r), N(e, "autoPlay", a, r)), O(e, a, r);
352
+ function ae(e, a, t, r) {
353
+ Lt(e, "durationInFrames", a, r), g(e, "width", a, r), g(e, "height", a, r), g(e, "fps", a, r), A(e, "background", a, r), e.preset !== void 0 && (typeof e.preset != "string" || !D.includes(e.preset)) && r.push({ path: `${a}.preset`, message: `preset must be one of: ${D.join(", ")}. Got "${e.preset}"`, severity: "error" }), t === "player" && (N(e, "controls", a, r), N(e, "loop", a, r), N(e, "autoPlay", a, r)), C(e, a, r);
354
354
  }
355
- function ut(e, a, t) {
356
- if (m(e, "width", a, t), m(e, "height", a, t), $(e, "background", a, t), m(e, "transitionDuration", a, t), N(e, "showHud", a, t), N(e, "showNotes", a, t), e.preset !== void 0 && (typeof e.preset != "string" || !T.includes(e.preset)) && t.push({ path: `${a}.preset`, message: `preset must be one of: ${T.join(", ")}. Got "${e.preset}"`, severity: "error" }), e.transition !== void 0 && (Q.includes(e.transition) || t.push({
355
+ function yt(e, a, t) {
356
+ if (g(e, "width", a, t), g(e, "height", a, t), A(e, "background", a, t), g(e, "transitionDuration", a, t), N(e, "showHud", a, t), N(e, "showNotes", a, t), e.preset !== void 0 && (typeof e.preset != "string" || !D.includes(e.preset)) && t.push({ path: `${a}.preset`, message: `preset must be one of: ${D.join(", ")}. Got "${e.preset}"`, severity: "error" }), e.transition !== void 0 && (Y.includes(e.transition) || t.push({
357
357
  path: `${a}.transition`,
358
- message: `Invalid transition "${e.transition}". Must be one of: ${Q.join(", ")}`,
358
+ message: `Invalid transition "${e.transition}". Must be one of: ${Y.join(", ")}`,
359
359
  severity: "error"
360
360
  })), !Array.isArray(e.slides)) {
361
361
  t.push({ path: `${a}.slides`, message: 'Presentation must have a "slides" array', severity: "error" });
362
362
  return;
363
363
  }
364
364
  e.slides.length === 0 && t.push({ path: `${a}.slides`, message: "Presentation must have at least one slide", severity: "warning" }), e.slides.forEach((r, i) => {
365
- ht(r, `${a}.slides[${i}]`, t);
365
+ bt(r, `${a}.slides[${i}]`, t);
366
366
  });
367
367
  }
368
- function ht(e, a, t) {
368
+ function bt(e, a, t) {
369
369
  if (!e || typeof e != "object") {
370
370
  t.push({ path: a, message: "Slide must be an object", severity: "error" });
371
371
  return;
372
372
  }
373
- $(e, "title", a, t), $(e, "notes", a, t), $(e, "background", a, t), e.children !== void 0 && (Array.isArray(e.children) ? e.children.forEach((r, i) => {
374
- ee(r, `${a}.children[${i}]`, t);
373
+ A(e, "title", a, t), A(e, "notes", a, t), A(e, "background", a, t), e.children !== void 0 && (Array.isArray(e.children) ? e.children.forEach((r, i) => {
374
+ re(r, `${a}.children[${i}]`, t);
375
375
  }) : t.push({ path: `${a}.children`, message: "Slide children must be an array", severity: "error" }));
376
376
  }
377
- function O(e, a, t) {
377
+ function C(e, a, t) {
378
378
  if (!Array.isArray(e.children)) {
379
379
  t.push({ path: `${a}.children`, message: 'Expected "children" array', severity: "error" });
380
380
  return;
381
381
  }
382
382
  e.children.forEach((r, i) => {
383
- ee(r, `${a}.children[${i}]`, t);
383
+ re(r, `${a}.children[${i}]`, t);
384
384
  });
385
385
  }
386
- function ee(e, a, t) {
386
+ function re(e, a, t) {
387
387
  if (!e || typeof e != "object") {
388
388
  t.push({ path: a, message: "Element must be an object", severity: "error" });
389
389
  return;
390
390
  }
391
391
  const r = e.type;
392
- if (!r || !V.includes(r)) {
393
- const i = r ? te(r, V) : "";
392
+ if (!r || !q.includes(r)) {
393
+ const i = r ? ie(r, q) : "";
394
394
  t.push({
395
395
  path: `${a}.type`,
396
- message: `Unknown element type "${r}".${i} Valid types: ${V.join(", ")}`,
396
+ message: `Unknown element type "${r}".${i} Valid types: ${q.join(", ")}`,
397
397
  severity: "error"
398
398
  });
399
399
  return;
400
400
  }
401
401
  switch (r) {
402
402
  case "bezierCurve":
403
- ft(e, a, t);
403
+ xt(e, a, t);
404
404
  break;
405
405
  case "circle":
406
- gt(e, a, t);
406
+ vt(e, a, t);
407
407
  break;
408
408
  case "line":
409
- ot(e, a, t);
409
+ dt(e, a, t);
410
410
  break;
411
411
  case "arrow":
412
- yt(e, a, t);
412
+ wt(e, a, t);
413
413
  break;
414
414
  case "rect":
415
- mt(e, a, t);
415
+ kt(e, a, t);
416
416
  break;
417
417
  case "polygon":
418
- bt(e, a, t);
418
+ It(e, a, t);
419
419
  break;
420
420
  case "text":
421
- xt(e, a, t);
421
+ St(e, a, t);
422
422
  break;
423
423
  case "image":
424
- Pt(e, a, t);
424
+ Dt(e, a, t);
425
425
  break;
426
426
  case "axes":
427
- vt(e, a, t);
427
+ $t(e, a, t);
428
428
  break;
429
429
  case "functionPlot":
430
- dt(e, a, t);
430
+ Ot(e, a, t);
431
431
  break;
432
432
  case "vector":
433
- kt(e, a, t);
433
+ At(e, a, t);
434
434
  break;
435
435
  case "vectorField":
436
- wt(e, a, t);
436
+ Ct(e, a, t);
437
437
  break;
438
438
  case "matrix":
439
- It(e, a, t);
439
+ zt(e, a, t);
440
440
  break;
441
441
  case "graph":
442
- St(e, a, t);
442
+ pt(e, a, t);
443
443
  break;
444
444
  case "latex":
445
- $t(e, a, t);
445
+ Et(e, a, t);
446
446
  break;
447
447
  case "barChart":
448
- Nt(e, a, t);
448
+ Vt(e, a, t);
449
449
  break;
450
450
  case "sequence":
451
- Ot(e, a, t);
451
+ Rt(e, a, t);
452
452
  break;
453
453
  case "group":
454
- Rt(e, a, t);
454
+ Wt(e, a, t);
455
455
  break;
456
456
  case "parallel":
457
- O(e, a, t);
457
+ C(e, a, t);
458
458
  break;
459
459
  case "fadeIn":
460
460
  case "fadeOut":
461
461
  case "draw":
462
462
  case "write":
463
- At(e, a, t);
463
+ Ft(e, a, t);
464
464
  break;
465
465
  case "transform":
466
- Ct(e, a, t);
466
+ Pt(e, a, t);
467
467
  break;
468
468
  case "morph":
469
- zt(e, a, t);
469
+ Tt(e, a, t);
470
470
  break;
471
471
  case "stagger":
472
- pt(e, a, t);
472
+ Mt(e, a, t);
473
473
  break;
474
474
  case "scene":
475
475
  case "player":
476
- Z(e, a, r, t);
476
+ ae(e, a, r, t);
477
477
  break;
478
478
  }
479
479
  }
480
- function ft(e, a, t) {
481
- f(e, "x1", a, t), f(e, "y1", a, t), f(e, "cx1", a, t), f(e, "cy1", a, t), f(e, "x2", a, t), f(e, "y2", a, t), e.cx2 !== void 0 && P(e, "cx2", a, t), e.cy2 !== void 0 && P(e, "cy2", a, t), d(e, a, t);
480
+ function xt(e, a, t) {
481
+ h(e, "x1", a, t), h(e, "y1", a, t), h(e, "cx1", a, t), h(e, "cy1", a, t), h(e, "x2", a, t), h(e, "y2", a, t), e.cx2 !== void 0 && F(e, "cx2", a, t), e.cy2 !== void 0 && F(e, "cy2", a, t), v(e, a, t);
482
482
  }
483
- function gt(e, a, t) {
484
- f(e, "cx", a, t), f(e, "cy", a, t), p(e, "r", a, t), d(e, a, t);
483
+ function vt(e, a, t) {
484
+ h(e, "cx", a, t), h(e, "cy", a, t), p(e, "r", a, t), v(e, a, t);
485
485
  }
486
- function ot(e, a, t) {
487
- f(e, "x1", a, t), f(e, "y1", a, t), f(e, "x2", a, t), f(e, "y2", a, t), d(e, a, t);
486
+ function dt(e, a, t) {
487
+ h(e, "x1", a, t), h(e, "y1", a, t), h(e, "x2", a, t), h(e, "y2", a, t), v(e, a, t);
488
488
  }
489
- function yt(e, a, t) {
490
- f(e, "x1", a, t), f(e, "y1", a, t), f(e, "x2", a, t), f(e, "y2", a, t), d(e, a, t);
489
+ function wt(e, a, t) {
490
+ h(e, "x1", a, t), h(e, "y1", a, t), h(e, "x2", a, t), h(e, "y2", a, t), v(e, a, t);
491
491
  }
492
- function mt(e, a, t) {
493
- f(e, "x", a, t), f(e, "y", a, t), p(e, "width", a, t), p(e, "height", a, t), d(e, a, t);
492
+ function kt(e, a, t) {
493
+ h(e, "x", a, t), h(e, "y", a, t), p(e, "width", a, t), p(e, "height", a, t), v(e, a, t);
494
494
  }
495
- function bt(e, a, t) {
495
+ function It(e, a, t) {
496
496
  Array.isArray(e.points) ? e.points.length < 3 ? t.push({ path: `${a}.points`, message: "Polygon requires at least 3 points", severity: "error" }) : e.points.forEach((r, i) => {
497
497
  (!Array.isArray(r) || r.length !== 2 || typeof r[0] != "number" || typeof r[1] != "number") && t.push({ path: `${a}.points[${i}]`, message: "Each point must be [number, number]", severity: "error" });
498
- }) : t.push({ path: `${a}.points`, message: 'Polygon requires a "points" array', severity: "error" }), d(e, a, t);
498
+ }) : t.push({ path: `${a}.points`, message: 'Polygon requires a "points" array', severity: "error" }), v(e, a, t);
499
499
  }
500
- function xt(e, a, t) {
501
- f(e, "x", a, t), f(e, "y", a, t), typeof e.content != "string" && t.push({ path: `${a}.content`, message: 'Text requires a "content" string', severity: "error" }), d(e, a, t);
500
+ function St(e, a, t) {
501
+ h(e, "x", a, t), h(e, "y", a, t), typeof e.content != "string" && t.push({ path: `${a}.content`, message: 'Text requires a "content" string', severity: "error" }), v(e, a, t);
502
502
  }
503
- function vt(e, a, t) {
504
- k(e, "domain", a, t), k(e, "range", a, t), k(e, "origin", a, t), M(e, a, t);
503
+ function $t(e, a, t) {
504
+ k(e, "domain", a, t), k(e, "range", a, t), k(e, "origin", a, t), W(e, a, t);
505
505
  }
506
- function dt(e, a, t) {
506
+ function Ot(e, a, t) {
507
507
  if (typeof e.fn != "string")
508
508
  t.push({ path: `${a}.fn`, message: 'FunctionPlot requires a "fn" expression string', severity: "error" });
509
509
  else {
510
- const r = J(e.fn);
510
+ const r = ee(e.fn);
511
511
  r && t.push({ path: `${a}.fn`, message: `Invalid expression: ${r}`, severity: "error" });
512
512
  }
513
- k(e, "domain", a, t), M(e, a, t);
513
+ k(e, "domain", a, t), W(e, a, t);
514
514
  }
515
- function kt(e, a, t) {
516
- (!Array.isArray(e.to) || e.to.length !== 2) && t.push({ path: `${a}.to`, message: 'Vector requires a "to" array of [number, number]', severity: "error" }), k(e, "from", a, t), M(e, a, t);
515
+ function At(e, a, t) {
516
+ (!Array.isArray(e.to) || e.to.length !== 2) && t.push({ path: `${a}.to`, message: 'Vector requires a "to" array of [number, number]', severity: "error" }), k(e, "from", a, t), W(e, a, t);
517
517
  }
518
- function wt(e, a, t) {
518
+ function Ct(e, a, t) {
519
519
  if (typeof e.fn != "string")
520
520
  t.push({ path: `${a}.fn`, message: 'VectorField requires a "fn" expression string', severity: "error" });
521
521
  else {
522
- const r = J(e.fn);
522
+ const r = ee(e.fn);
523
523
  r && t.push({ path: `${a}.fn`, message: `Invalid vector expression: ${r}`, severity: "error" });
524
524
  }
525
- k(e, "domain", a, t), k(e, "range", a, t), M(e, a, t);
525
+ k(e, "domain", a, t), k(e, "range", a, t), W(e, a, t);
526
526
  }
527
- function It(e, a, t) {
527
+ function zt(e, a, t) {
528
528
  Array.isArray(e.values) ? e.values.forEach((r, i) => {
529
529
  Array.isArray(r) || t.push({ path: `${a}.values[${i}]`, message: "Each matrix row must be an array", severity: "error" });
530
- }) : t.push({ path: `${a}.values`, message: 'Matrix requires a "values" 2D array', severity: "error" }), d(e, a, t);
530
+ }) : t.push({ path: `${a}.values`, message: 'Matrix requires a "values" 2D array', severity: "error" }), v(e, a, t);
531
531
  }
532
- function St(e, a, t) {
532
+ function pt(e, a, t) {
533
533
  if (!Array.isArray(e.nodes))
534
534
  t.push({ path: `${a}.nodes`, message: 'Graph requires a "nodes" array', severity: "error" });
535
535
  else {
536
536
  const r = /* @__PURE__ */ new Set();
537
537
  e.nodes.forEach((i, n) => {
538
- typeof i.id != "string" ? t.push({ path: `${a}.nodes[${n}].id`, message: 'Graph node requires a string "id"', severity: "error" }) : (r.has(i.id) && t.push({ path: `${a}.nodes[${n}].id`, message: `Duplicate node id "${i.id}"`, severity: "error" }), r.add(i.id)), f(i, "x", `${a}.nodes[${n}]`, t), f(i, "y", `${a}.nodes[${n}]`, t);
538
+ typeof i.id != "string" ? t.push({ path: `${a}.nodes[${n}].id`, message: 'Graph node requires a string "id"', severity: "error" }) : (r.has(i.id) && t.push({ path: `${a}.nodes[${n}].id`, message: `Duplicate node id "${i.id}"`, severity: "error" }), r.add(i.id)), h(i, "x", `${a}.nodes[${n}]`, t), h(i, "y", `${a}.nodes[${n}]`, t);
539
539
  }), Array.isArray(e.edges) && e.edges.forEach((i, n) => {
540
540
  (typeof i.from != "string" || !r.has(i.from)) && t.push({ path: `${a}.edges[${n}].from`, message: `Edge "from" references unknown node "${i.from}"`, severity: "error" }), (typeof i.to != "string" || !r.has(i.to)) && t.push({ path: `${a}.edges[${n}].to`, message: `Edge "to" references unknown node "${i.to}"`, severity: "error" });
541
541
  });
542
542
  }
543
- d(e, a, t);
543
+ v(e, a, t);
544
544
  }
545
- function $t(e, a, t) {
546
- typeof e.expression != "string" && t.push({ path: `${a}.expression`, message: 'LaTeX requires an "expression" string', severity: "error" }), f(e, "x", a, t), f(e, "y", a, t), d(e, a, t);
545
+ function Et(e, a, t) {
546
+ typeof e.expression != "string" && t.push({ path: `${a}.expression`, message: 'LaTeX requires an "expression" string', severity: "error" }), h(e, "x", a, t), h(e, "y", a, t), v(e, a, t);
547
547
  }
548
- function Ot(e, a, t) {
549
- f(e, "from", a, t), Mt(e, "durationInFrames", a, t), O(e, a, t);
548
+ function Rt(e, a, t) {
549
+ h(e, "from", a, t), jt(e, "durationInFrames", a, t), C(e, a, t);
550
550
  }
551
- function At(e, a, t) {
552
- m(e, "duration", a, t), R(e, a, t), O(e, a, t);
551
+ function Ft(e, a, t) {
552
+ g(e, "duration", a, t), P(e, a, t), C(e, a, t);
553
553
  }
554
- function Ct(e, a, t) {
555
- if (m(e, "duration", a, t), R(e, a, t), e.translate !== void 0) {
554
+ function Pt(e, a, t) {
555
+ if (g(e, "duration", a, t), P(e, a, t), e.translate !== void 0) {
556
556
  const r = e.translate;
557
557
  (!r || typeof r != "object") && t.push({ path: `${a}.translate`, message: "translate must be { from: [x,y], to: [x,y] }", severity: "error" });
558
558
  }
@@ -568,51 +568,51 @@ function Ct(e, a, t) {
568
568
  const r = e.opacity;
569
569
  (!r || typeof r != "object" || typeof r.from != "number" || typeof r.to != "number") && t.push({ path: `${a}.opacity`, message: "opacity must be { from: number, to: number }", severity: "error" });
570
570
  }
571
- O(e, a, t);
571
+ C(e, a, t);
572
572
  }
573
- function zt(e, a, t) {
574
- m(e, "duration", a, t), R(e, a, t), $(e, "fromColor", a, t), $(e, "toColor", a, t), O(e, a, t);
573
+ function Tt(e, a, t) {
574
+ g(e, "duration", a, t), P(e, a, t), A(e, "fromColor", a, t), A(e, "toColor", a, t), C(e, a, t);
575
575
  }
576
- function pt(e, a, t) {
577
- m(e, "staggerDelay", a, t), R(e, a, t), O(e, a, t);
576
+ function Mt(e, a, t) {
577
+ g(e, "staggerDelay", a, t), P(e, a, t), C(e, a, t);
578
578
  }
579
- function d(e, a, t) {
580
- m(e, "fadeIn", a, t), m(e, "fadeOut", a, t), m(e, "draw", a, t), R(e, a, t), Et(e, a, t);
579
+ function v(e, a, t) {
580
+ g(e, "fadeIn", a, t), g(e, "fadeOut", a, t), g(e, "draw", a, t), P(e, a, t), Nt(e, a, t);
581
581
  }
582
- function M(e, a, t) {
583
- m(e, "fadeIn", a, t), m(e, "fadeOut", a, t), m(e, "draw", a, t), R(e, a, t), Ft(e, a, t);
582
+ function W(e, a, t) {
583
+ g(e, "fadeIn", a, t), g(e, "fadeOut", a, t), g(e, "draw", a, t), P(e, a, t), _t(e, a, t);
584
584
  }
585
- const X = ["none", "circle", "ellipse"];
586
- function Et(e, a, t) {
587
- if (P(e, "rotation", a, t), k(e, "rotationOrigin", a, t), k(e, "translate", a, t), P(e, "zIndex", a, t), e.scale !== void 0) {
585
+ const Z = ["none", "circle", "ellipse"];
586
+ function Nt(e, a, t) {
587
+ if (F(e, "rotation", a, t), k(e, "rotationOrigin", a, t), k(e, "translate", a, t), F(e, "zIndex", a, t), e.scale !== void 0) {
588
588
  const r = e.scale;
589
589
  typeof r == "number" || Array.isArray(r) && r.length === 2 && typeof r[0] == "number" && typeof r[1] == "number" || t.push({ path: `${a}.scale`, message: '"scale" must be a number or [number, number]', severity: "error" });
590
590
  }
591
591
  }
592
- function Ft(e, a, t) {
593
- P(e, "rotation", a, t), k(e, "rotationOrigin", a, t), k(e, "translate", a, t), P(e, "zIndex", a, t);
592
+ function _t(e, a, t) {
593
+ F(e, "rotation", a, t), k(e, "rotationOrigin", a, t), k(e, "translate", a, t), F(e, "zIndex", a, t);
594
594
  }
595
- function Pt(e, a, t) {
596
- typeof e.src != "string" && t.push({ path: `${a}.src`, message: 'Image requires a "src" string', severity: "error" }), f(e, "x", a, t), f(e, "y", a, t), p(e, "width", a, t), p(e, "height", a, t), $(e, "preserveAspectRatio", a, t), e.borderRadius !== void 0 && (typeof e.borderRadius != "number" || e.borderRadius < 0) && t.push({ path: `${a}.borderRadius`, message: '"borderRadius" must be a number >= 0', severity: "error" }), e.clipShape !== void 0 && (X.includes(e.clipShape) || t.push({
595
+ function Dt(e, a, t) {
596
+ typeof e.src != "string" && t.push({ path: `${a}.src`, message: 'Image requires a "src" string', severity: "error" }), h(e, "x", a, t), h(e, "y", a, t), p(e, "width", a, t), p(e, "height", a, t), A(e, "preserveAspectRatio", a, t), e.borderRadius !== void 0 && (typeof e.borderRadius != "number" || e.borderRadius < 0) && t.push({ path: `${a}.borderRadius`, message: '"borderRadius" must be a number >= 0', severity: "error" }), e.clipShape !== void 0 && (Z.includes(e.clipShape) || t.push({
597
597
  path: `${a}.clipShape`,
598
- message: `Invalid clipShape "${e.clipShape}". Must be one of: ${X.join(", ")}`,
598
+ message: `Invalid clipShape "${e.clipShape}". Must be one of: ${Z.join(", ")}`,
599
599
  severity: "error"
600
- })), d(e, a, t);
600
+ })), v(e, a, t);
601
601
  }
602
- function Rt(e, a, t) {
603
- O(e, a, t), d(e, a, t);
602
+ function Wt(e, a, t) {
603
+ C(e, a, t), v(e, a, t);
604
604
  }
605
- function Nt(e, a, t) {
606
- f(e, "x", a, t), f(e, "y", a, t), p(e, "width", a, t), p(e, "height", a, t), Array.isArray(e.bars) || t.push({ path: `${a}.bars`, message: 'BarChart requires a "bars" array', severity: "error" }), d(e, a, t);
605
+ function Vt(e, a, t) {
606
+ h(e, "x", a, t), h(e, "y", a, t), p(e, "width", a, t), p(e, "height", a, t), Array.isArray(e.bars) || t.push({ path: `${a}.bars`, message: 'BarChart requires a "bars" array', severity: "error" }), v(e, a, t);
607
607
  }
608
- function R(e, a, t) {
608
+ function P(e, a, t) {
609
609
  if (e.easing !== void 0) {
610
610
  if (typeof e.easing == "string") {
611
- if (!D.includes(e.easing)) {
612
- const r = te(e.easing, D);
611
+ if (!j.includes(e.easing)) {
612
+ const r = ie(e.easing, j);
613
613
  t.push({
614
614
  path: `${a}.easing`,
615
- message: `Unknown easing "${e.easing}".${r} Available: ${D.join(", ")}`,
615
+ message: `Unknown easing "${e.easing}".${r} Available: ${j.join(", ")}`,
616
616
  severity: "error"
617
617
  });
618
618
  }
@@ -632,27 +632,27 @@ function R(e, a, t) {
632
632
  t.push({ path: `${a}.easing`, message: 'Easing must be a string name or { type: "spring"|"cubicBezier", ... }', severity: "error" });
633
633
  }
634
634
  }
635
- function f(e, a, t, r) {
635
+ function h(e, a, t, r) {
636
636
  typeof e[a] != "number" && r.push({ path: `${t}.${a}`, message: `Required numeric field "${a}" is missing or not a number`, severity: "error" });
637
637
  }
638
638
  function p(e, a, t, r) {
639
639
  (typeof e[a] != "number" || e[a] <= 0) && r.push({ path: `${t}.${a}`, message: `"${a}" must be a positive number`, severity: "error" });
640
640
  }
641
- function Tt(e, a, t, r) {
641
+ function Lt(e, a, t, r) {
642
642
  const i = e[a];
643
643
  (typeof i != "number" || i <= 0 || !Number.isInteger(i)) && r.push({ path: `${t}.${a}`, message: `"${a}" must be a positive integer`, severity: "error" });
644
644
  }
645
- function m(e, a, t, r) {
645
+ function g(e, a, t, r) {
646
646
  e[a] !== void 0 && (typeof e[a] != "number" || e[a] <= 0) && r.push({ path: `${t}.${a}`, message: `"${a}" must be a positive number`, severity: "error" });
647
647
  }
648
- function Mt(e, a, t, r) {
648
+ function jt(e, a, t, r) {
649
649
  const i = e[a];
650
650
  i !== void 0 && (typeof i != "number" || i <= 0 || !Number.isInteger(i)) && r.push({ path: `${t}.${a}`, message: `"${a}" must be a positive integer`, severity: "error" });
651
651
  }
652
- function $(e, a, t, r) {
652
+ function A(e, a, t, r) {
653
653
  e[a] !== void 0 && typeof e[a] != "string" && r.push({ path: `${t}.${a}`, message: `"${a}" must be a string`, severity: "error" });
654
654
  }
655
- function P(e, a, t, r) {
655
+ function F(e, a, t, r) {
656
656
  e[a] !== void 0 && typeof e[a] != "number" && r.push({ path: `${t}.${a}`, message: `"${a}" must be a number`, severity: "error" });
657
657
  }
658
658
  function N(e, a, t, r) {
@@ -662,15 +662,17 @@ function k(e, a, t, r) {
662
662
  const i = e[a];
663
663
  i !== void 0 && (!Array.isArray(i) || i.length !== 2 || typeof i[0] != "number" || typeof i[1] != "number") && r.push({ path: `${t}.${a}`, message: `"${a}" must be [number, number]`, severity: "error" });
664
664
  }
665
- function te(e, a) {
665
+ function ie(e, a) {
666
666
  const t = e.toLowerCase(), r = a.find((n) => n.toLowerCase() === t);
667
667
  if (r) return ` Did you mean '${r}'?`;
668
668
  const i = a.find((n) => n.toLowerCase().startsWith(t.slice(0, 4)));
669
669
  return i ? ` Did you mean '${i}'?` : "";
670
670
  }
671
- const ae = {
672
- foreground: { cssVar: "--elucim-foreground", fallback: "#e0e0e0" },
673
- background: { cssVar: "--elucim-background", fallback: "#0f172a" },
671
+ const ne = {
672
+ foreground: { cssVar: "--elucim-foreground", fallback: "#c8d6e5" },
673
+ background: { cssVar: "--elucim-background", fallback: "#0a0a1e" },
674
+ title: { cssVar: "--elucim-title", fallback: "#e0e7ff" },
675
+ subtitle: { cssVar: "--elucim-subtitle", fallback: "#94a3b8" },
674
676
  accent: { cssVar: "--elucim-accent", fallback: "#4fc3f7" },
675
677
  muted: { cssVar: "--elucim-muted", fallback: "#64748b" },
676
678
  surface: { cssVar: "--elucim-surface", fallback: "#1e293b" },
@@ -681,31 +683,31 @@ const ae = {
681
683
  success: { cssVar: "--elucim-success", fallback: "#34d399" },
682
684
  warning: { cssVar: "--elucim-warning", fallback: "#fbbf24" },
683
685
  error: { cssVar: "--elucim-error", fallback: "#f87171" }
684
- }, Qt = Object.keys(ae);
685
- function h(e) {
686
+ }, ca = Object.keys(ne);
687
+ function u(e) {
686
688
  if (e === void 0) return;
687
689
  if (!e.startsWith("$")) return e;
688
- const a = e.slice(1), t = ae[a];
690
+ const a = e.slice(1), t = ne[a];
689
691
  return t ? `var(${t.cssVar}, ${t.fallback})` : `var(--elucim-${a})`;
690
692
  }
691
- const Wt = {
693
+ const qt = {
692
694
  card: [640, 360],
693
695
  slide: [1280, 720],
694
696
  square: [600, 600]
695
697
  };
696
- function W(e, a, t) {
698
+ function V(e, a, t) {
697
699
  if (!e) return { width: a, height: t };
698
- const [r, i] = Wt[e];
700
+ const [r, i] = qt[e];
699
701
  return { width: a ?? r, height: t ?? i };
700
702
  }
701
- function re(e, a) {
703
+ function se(e, a) {
702
704
  switch (e.type) {
703
705
  case "scene":
704
- return q(e, a);
706
+ return H(e, a);
705
707
  case "player":
706
708
  if ((a == null ? void 0 : a.frame) !== void 0) {
707
- const { width: t, height: r } = W(e.preset, e.width, e.height);
708
- return q(
709
+ const { width: t, height: r } = V(e.preset, e.width, e.height);
710
+ return H(
709
711
  {
710
712
  width: t,
711
713
  height: r,
@@ -717,88 +719,88 @@ function re(e, a) {
717
719
  a
718
720
  );
719
721
  }
720
- return ie(e, a);
722
+ return ce(e, a);
721
723
  case "presentation":
722
- return _t(e);
724
+ return Bt(e);
723
725
  }
724
726
  }
725
- function q(e, a) {
726
- const t = (a == null ? void 0 : a.frame) !== void 0, { width: r, height: i } = W(e.preset, e.width, e.height);
727
+ function H(e, a) {
728
+ const t = (a == null ? void 0 : a.frame) !== void 0, { width: r, height: i } = V(e.preset, e.width, e.height);
727
729
  return /* @__PURE__ */ c(
728
- ze,
730
+ Pe,
729
731
  {
730
732
  width: r,
731
733
  height: i,
732
734
  fps: e.fps,
733
735
  durationInFrames: e.durationInFrames,
734
- background: h(e.background),
736
+ background: u(e.background),
735
737
  ...t ? { frame: a.frame, autoPlay: !1 } : {},
736
- children: e.children.map((n, s) => v(n, s))
738
+ children: e.children.map((n, s) => x(n, s))
737
739
  }
738
740
  );
739
741
  }
740
- function ie(e, a) {
741
- const { width: t, height: r } = W(e.preset, e.width, e.height);
742
+ function ce(e, a) {
743
+ const { width: t, height: r } = V(e.preset, e.width, e.height);
742
744
  return /* @__PURE__ */ c(
743
- pe,
745
+ Te,
744
746
  {
745
747
  ref: a == null ? void 0 : a.playerRef,
746
748
  width: t,
747
749
  height: r,
748
750
  fps: e.fps,
749
751
  durationInFrames: e.durationInFrames,
750
- background: h(e.background),
752
+ background: u(e.background),
751
753
  controls: e.controls,
752
754
  loop: e.loop,
753
755
  autoPlay: e.autoPlay,
754
- children: e.children.map((i, n) => v(i, n))
756
+ children: e.children.map((i, n) => x(i, n))
755
757
  }
756
758
  );
757
759
  }
758
- function _t(e) {
759
- const { width: a, height: t } = W(e.preset, e.width, e.height);
760
+ function Bt(e) {
761
+ const { width: a, height: t } = V(e.preset, e.width, e.height);
760
762
  return /* @__PURE__ */ c(
761
- Ce,
763
+ Fe,
762
764
  {
763
765
  width: a,
764
766
  height: t,
765
- background: h(e.background),
767
+ background: u(e.background),
766
768
  transition: e.transition,
767
769
  transitionDuration: e.transitionDuration,
768
770
  showHUD: e.showHud,
769
771
  showNotes: e.showNotes,
770
- children: e.slides.map((r, i) => Dt(r, i))
772
+ children: e.slides.map((r, i) => Ut(r, i))
771
773
  }
772
774
  );
773
775
  }
774
- function Dt(e, a) {
776
+ function Ut(e, a) {
775
777
  var t;
776
- return /* @__PURE__ */ c(Ee, { title: e.title, notes: e.notes, background: h(e.background), children: (t = e.children) == null ? void 0 : t.map((r, i) => v(r, i)) }, a);
778
+ return /* @__PURE__ */ c(Me, { title: e.title, notes: e.notes, background: u(e.background), children: (t = e.children) == null ? void 0 : t.map((r, i) => x(r, i)) }, a);
777
779
  }
778
- function v(e, a) {
780
+ function x(e, a) {
779
781
  var t, r, i, n;
780
782
  switch (e.type) {
781
783
  case "sequence":
782
- return /* @__PURE__ */ c(tt, { from: e.from, durationInFrames: e.durationInFrames, name: e.name, children: e.children.map((s, l) => v(s, l)) }, a);
784
+ return /* @__PURE__ */ c(st, { from: e.from, durationInFrames: e.durationInFrames, name: e.name, children: e.children.map((s, l) => x(s, l)) }, a);
783
785
  case "group":
784
786
  return /* @__PURE__ */ c(
785
- et,
787
+ nt,
786
788
  {
787
789
  fadeIn: e.fadeIn,
788
790
  fadeOut: e.fadeOut,
789
- easing: g(e.easing),
791
+ easing: o(e.easing),
790
792
  rotation: e.rotation,
791
793
  rotationOrigin: e.rotationOrigin,
792
794
  scale: e.scale,
793
795
  translate: e.translate,
794
796
  zIndex: e.zIndex,
795
- children: e.children.map((s, l) => v(s, l))
797
+ children: e.children.map((s, l) => x(s, l))
796
798
  },
797
799
  a
798
800
  );
799
801
  case "bezierCurve":
800
802
  return /* @__PURE__ */ c(
801
- Ze,
803
+ it,
802
804
  {
803
805
  x1: e.x1,
804
806
  y1: e.y1,
@@ -808,15 +810,15 @@ function v(e, a) {
808
810
  cy2: e.cy2,
809
811
  x2: e.x2,
810
812
  y2: e.y2,
811
- stroke: h(e.stroke),
813
+ stroke: u(e.stroke),
812
814
  strokeWidth: e.strokeWidth,
813
- fill: h(e.fill),
815
+ fill: u(e.fill),
814
816
  strokeDasharray: e.strokeDasharray,
815
817
  opacity: e.opacity,
816
818
  fadeIn: e.fadeIn,
817
819
  fadeOut: e.fadeOut,
818
820
  draw: e.draw,
819
- easing: g(e.easing),
821
+ easing: o(e.easing),
820
822
  rotation: e.rotation,
821
823
  rotationOrigin: e.rotationOrigin,
822
824
  scale: e.scale,
@@ -827,19 +829,19 @@ function v(e, a) {
827
829
  );
828
830
  case "circle":
829
831
  return /* @__PURE__ */ c(
830
- Ye,
832
+ rt,
831
833
  {
832
834
  cx: e.cx,
833
835
  cy: e.cy,
834
836
  r: e.r,
835
- fill: h(e.fill),
836
- stroke: h(e.stroke),
837
+ fill: u(e.fill),
838
+ stroke: u(e.stroke),
837
839
  strokeWidth: e.strokeWidth,
838
840
  opacity: e.opacity,
839
841
  fadeIn: e.fadeIn,
840
842
  fadeOut: e.fadeOut,
841
843
  draw: e.draw,
842
- easing: g(e.easing),
844
+ easing: o(e.easing),
843
845
  rotation: e.rotation,
844
846
  rotationOrigin: e.rotationOrigin,
845
847
  scale: e.scale,
@@ -850,20 +852,20 @@ function v(e, a) {
850
852
  );
851
853
  case "line":
852
854
  return /* @__PURE__ */ c(
853
- Je,
855
+ at,
854
856
  {
855
857
  x1: e.x1,
856
858
  y1: e.y1,
857
859
  x2: e.x2,
858
860
  y2: e.y2,
859
- stroke: h(e.stroke),
861
+ stroke: u(e.stroke),
860
862
  strokeWidth: e.strokeWidth,
861
863
  strokeDasharray: e.strokeDasharray,
862
864
  opacity: e.opacity,
863
865
  fadeIn: e.fadeIn,
864
866
  fadeOut: e.fadeOut,
865
867
  draw: e.draw,
866
- easing: g(e.easing),
868
+ easing: o(e.easing),
867
869
  rotation: e.rotation,
868
870
  rotationOrigin: e.rotationOrigin,
869
871
  scale: e.scale,
@@ -874,13 +876,13 @@ function v(e, a) {
874
876
  );
875
877
  case "arrow":
876
878
  return /* @__PURE__ */ c(
877
- Xe,
879
+ tt,
878
880
  {
879
881
  x1: e.x1,
880
882
  y1: e.y1,
881
883
  x2: e.x2,
882
884
  y2: e.y2,
883
- stroke: h(e.stroke),
885
+ stroke: u(e.stroke),
884
886
  strokeWidth: e.strokeWidth,
885
887
  headSize: e.headSize,
886
888
  strokeDasharray: e.strokeDasharray,
@@ -888,7 +890,7 @@ function v(e, a) {
888
890
  fadeIn: e.fadeIn,
889
891
  fadeOut: e.fadeOut,
890
892
  draw: e.draw,
891
- easing: g(e.easing),
893
+ easing: o(e.easing),
892
894
  rotation: e.rotation,
893
895
  rotationOrigin: e.rotationOrigin,
894
896
  scale: e.scale,
@@ -899,14 +901,14 @@ function v(e, a) {
899
901
  );
900
902
  case "rect":
901
903
  return /* @__PURE__ */ c(
902
- Qe,
904
+ et,
903
905
  {
904
906
  x: e.x,
905
907
  y: e.y,
906
908
  width: e.width,
907
909
  height: e.height,
908
- fill: h(e.fill),
909
- stroke: h(e.stroke),
910
+ fill: u(e.fill),
911
+ stroke: u(e.stroke),
910
912
  strokeWidth: e.strokeWidth,
911
913
  rx: e.rx,
912
914
  ry: e.ry,
@@ -915,7 +917,7 @@ function v(e, a) {
915
917
  fadeIn: e.fadeIn,
916
918
  fadeOut: e.fadeOut,
917
919
  draw: e.draw,
918
- easing: g(e.easing),
920
+ easing: o(e.easing),
919
921
  rotation: e.rotation,
920
922
  rotationOrigin: e.rotationOrigin,
921
923
  scale: e.scale,
@@ -926,18 +928,18 @@ function v(e, a) {
926
928
  );
927
929
  case "polygon":
928
930
  return /* @__PURE__ */ c(
929
- Ke,
931
+ Ze,
930
932
  {
931
933
  points: e.points,
932
- fill: h(e.fill),
933
- stroke: h(e.stroke),
934
+ fill: u(e.fill),
935
+ stroke: u(e.stroke),
934
936
  strokeWidth: e.strokeWidth,
935
937
  closed: e.closed,
936
938
  opacity: e.opacity,
937
939
  fadeIn: e.fadeIn,
938
940
  fadeOut: e.fadeOut,
939
941
  draw: e.draw,
940
- easing: g(e.easing),
942
+ easing: o(e.easing),
941
943
  rotation: e.rotation,
942
944
  rotationOrigin: e.rotationOrigin,
943
945
  scale: e.scale,
@@ -948,11 +950,11 @@ function v(e, a) {
948
950
  );
949
951
  case "text":
950
952
  return /* @__PURE__ */ c(
951
- _,
953
+ L,
952
954
  {
953
955
  x: e.x,
954
956
  y: e.y,
955
- fill: h(e.fill),
957
+ fill: u(e.fill),
956
958
  fontSize: e.fontSize,
957
959
  fontFamily: e.fontFamily,
958
960
  fontWeight: e.fontWeight,
@@ -961,7 +963,7 @@ function v(e, a) {
961
963
  opacity: e.opacity,
962
964
  fadeIn: e.fadeIn,
963
965
  fadeOut: e.fadeOut,
964
- easing: g(e.easing),
966
+ easing: o(e.easing),
965
967
  rotation: e.rotation,
966
968
  rotationOrigin: e.rotationOrigin,
967
969
  scale: e.scale,
@@ -973,7 +975,7 @@ function v(e, a) {
973
975
  );
974
976
  case "image":
975
977
  return /* @__PURE__ */ c(
976
- Ge,
978
+ Ye,
977
979
  {
978
980
  src: e.src,
979
981
  x: e.x,
@@ -986,7 +988,7 @@ function v(e, a) {
986
988
  opacity: e.opacity,
987
989
  fadeIn: e.fadeIn,
988
990
  fadeOut: e.fadeOut,
989
- easing: g(e.easing),
991
+ easing: o(e.easing),
990
992
  rotation: e.rotation,
991
993
  rotationOrigin: e.rotationOrigin,
992
994
  scale: e.scale,
@@ -997,7 +999,7 @@ function v(e, a) {
997
999
  );
998
1000
  case "axes":
999
1001
  return /* @__PURE__ */ c(
1000
- He,
1002
+ Je,
1001
1003
  {
1002
1004
  domain: e.domain,
1003
1005
  range: e.range,
@@ -1007,14 +1009,14 @@ function v(e, a) {
1007
1009
  showTicks: e.showTicks,
1008
1010
  showLabels: e.showLabels,
1009
1011
  tickStep: e.tickStep,
1010
- axisColor: h(e.axisColor),
1011
- gridColor: h(e.gridColor),
1012
- labelColor: h(e.labelColor),
1012
+ axisColor: u(e.axisColor),
1013
+ gridColor: u(e.gridColor),
1014
+ labelColor: u(e.labelColor),
1013
1015
  labelFontSize: e.labelFontSize,
1014
1016
  fadeIn: e.fadeIn,
1015
1017
  fadeOut: e.fadeOut,
1016
1018
  draw: e.draw,
1017
- easing: g(e.easing),
1019
+ easing: o(e.easing),
1018
1020
  rotation: e.rotation,
1019
1021
  rotationOrigin: e.rotationOrigin,
1020
1022
  translate: e.translate,
@@ -1025,10 +1027,10 @@ function v(e, a) {
1025
1027
  case "functionPlot": {
1026
1028
  let s;
1027
1029
  try {
1028
- s = st(e.fn);
1030
+ s = ot(e.fn);
1029
1031
  } catch {
1030
1032
  return /* @__PURE__ */ c(
1031
- _,
1033
+ L,
1032
1034
  {
1033
1035
  x: ((t = e.origin) == null ? void 0 : t[0]) ?? 400,
1034
1036
  y: (((r = e.origin) == null ? void 0 : r[1]) ?? 300) - 20,
@@ -1041,18 +1043,18 @@ function v(e, a) {
1041
1043
  );
1042
1044
  }
1043
1045
  return /* @__PURE__ */ c(
1044
- Ue,
1046
+ Xe,
1045
1047
  {
1046
1048
  fn: (l) => s({ x: l }),
1047
1049
  domain: e.domain,
1048
1050
  yClamp: e.yClamp,
1049
1051
  origin: e.origin,
1050
1052
  scale: e.scale,
1051
- color: h(e.color),
1053
+ color: u(e.color),
1052
1054
  strokeWidth: e.strokeWidth,
1053
1055
  samples: e.samples,
1054
1056
  draw: e.draw,
1055
- easing: g(e.easing),
1057
+ easing: o(e.easing),
1056
1058
  opacity: e.opacity,
1057
1059
  rotation: e.rotation,
1058
1060
  rotationOrigin: e.rotationOrigin,
@@ -1064,23 +1066,23 @@ function v(e, a) {
1064
1066
  }
1065
1067
  case "vector":
1066
1068
  return /* @__PURE__ */ c(
1067
- Be,
1069
+ Qe,
1068
1070
  {
1069
1071
  from: e.from,
1070
1072
  to: e.to,
1071
1073
  origin: e.origin,
1072
1074
  scale: e.scale,
1073
- color: h(e.color),
1075
+ color: u(e.color),
1074
1076
  strokeWidth: e.strokeWidth,
1075
1077
  headSize: e.headSize,
1076
1078
  label: e.label,
1077
1079
  labelOffset: e.labelOffset,
1078
- labelColor: h(e.labelColor),
1080
+ labelColor: u(e.labelColor),
1079
1081
  labelFontSize: e.labelFontSize,
1080
1082
  fadeIn: e.fadeIn,
1081
1083
  fadeOut: e.fadeOut,
1082
1084
  draw: e.draw,
1083
- easing: g(e.easing),
1085
+ easing: o(e.easing),
1084
1086
  rotation: e.rotation,
1085
1087
  rotationOrigin: e.rotationOrigin,
1086
1088
  translate: e.translate,
@@ -1091,10 +1093,10 @@ function v(e, a) {
1091
1093
  case "vectorField": {
1092
1094
  let s;
1093
1095
  try {
1094
- s = ct(e.fn);
1096
+ s = gt(e.fn);
1095
1097
  } catch {
1096
1098
  return /* @__PURE__ */ c(
1097
- _,
1099
+ L,
1098
1100
  {
1099
1101
  x: ((i = e.origin) == null ? void 0 : i[0]) ?? 400,
1100
1102
  y: (((n = e.origin) == null ? void 0 : n[1]) ?? 300) - 20,
@@ -1107,23 +1109,23 @@ function v(e, a) {
1107
1109
  );
1108
1110
  }
1109
1111
  return /* @__PURE__ */ c(
1110
- qe,
1112
+ Ke,
1111
1113
  {
1112
- fn: (l, b) => s({ x: l, y: b }),
1114
+ fn: (l, $) => s({ x: l, y: $ }),
1113
1115
  domain: e.domain,
1114
1116
  range: e.range,
1115
1117
  step: e.step,
1116
1118
  origin: e.origin,
1117
1119
  scale: e.scale,
1118
1120
  arrowScale: e.arrowScale,
1119
- color: h(e.color),
1121
+ color: u(e.color),
1120
1122
  strokeWidth: e.strokeWidth,
1121
1123
  headSize: e.headSize,
1122
1124
  normalize: e.normalize,
1123
1125
  maxLength: e.maxLength,
1124
1126
  fadeIn: e.fadeIn,
1125
1127
  fadeOut: e.fadeOut,
1126
- easing: g(e.easing),
1128
+ easing: o(e.easing),
1127
1129
  rotation: e.rotation,
1128
1130
  rotationOrigin: e.rotationOrigin,
1129
1131
  translate: e.translate,
@@ -1134,18 +1136,18 @@ function v(e, a) {
1134
1136
  }
1135
1137
  case "matrix":
1136
1138
  return /* @__PURE__ */ c(
1137
- je,
1139
+ Ge,
1138
1140
  {
1139
1141
  values: e.values,
1140
1142
  x: e.x,
1141
1143
  y: e.y,
1142
1144
  cellSize: e.cellSize,
1143
- color: h(e.color),
1144
- bracketColor: h(e.bracketColor),
1145
+ color: u(e.color),
1146
+ bracketColor: u(e.bracketColor),
1145
1147
  fontSize: e.fontSize,
1146
1148
  fadeIn: e.fadeIn,
1147
1149
  fadeOut: e.fadeOut,
1148
- easing: g(e.easing),
1150
+ easing: o(e.easing),
1149
1151
  rotation: e.rotation,
1150
1152
  rotationOrigin: e.rotationOrigin,
1151
1153
  scale: e.scale,
@@ -1156,19 +1158,19 @@ function v(e, a) {
1156
1158
  );
1157
1159
  case "graph":
1158
1160
  return /* @__PURE__ */ c(
1159
- Le,
1161
+ He,
1160
1162
  {
1161
1163
  nodes: e.nodes,
1162
1164
  edges: e.edges,
1163
- nodeColor: h(e.nodeColor),
1165
+ nodeColor: u(e.nodeColor),
1164
1166
  nodeRadius: e.nodeRadius,
1165
- edgeColor: h(e.edgeColor),
1167
+ edgeColor: u(e.edgeColor),
1166
1168
  edgeWidth: e.edgeWidth,
1167
- labelColor: h(e.labelColor),
1169
+ labelColor: u(e.labelColor),
1168
1170
  labelFontSize: e.labelFontSize,
1169
1171
  fadeIn: e.fadeIn,
1170
1172
  fadeOut: e.fadeOut,
1171
- easing: g(e.easing),
1173
+ easing: o(e.easing),
1172
1174
  rotation: e.rotation,
1173
1175
  rotationOrigin: e.rotationOrigin,
1174
1176
  scale: e.scale,
@@ -1179,17 +1181,17 @@ function v(e, a) {
1179
1181
  );
1180
1182
  case "latex":
1181
1183
  return /* @__PURE__ */ c(
1182
- Ve,
1184
+ Ue,
1183
1185
  {
1184
1186
  expression: e.expression,
1185
1187
  x: e.x,
1186
1188
  y: e.y,
1187
- color: h(e.color),
1189
+ color: u(e.color),
1188
1190
  fontSize: e.fontSize,
1189
1191
  align: e.align,
1190
1192
  fadeIn: e.fadeIn,
1191
1193
  fadeOut: e.fadeOut,
1192
- easing: g(e.easing),
1194
+ easing: o(e.easing),
1193
1195
  rotation: e.rotation,
1194
1196
  rotationOrigin: e.rotationOrigin,
1195
1197
  scale: e.scale,
@@ -1200,15 +1202,15 @@ function v(e, a) {
1200
1202
  );
1201
1203
  case "barChart":
1202
1204
  return /* @__PURE__ */ c(
1203
- De,
1205
+ Be,
1204
1206
  {
1205
1207
  bars: e.bars,
1206
1208
  x: e.x,
1207
1209
  y: e.y,
1208
1210
  width: e.width,
1209
1211
  height: e.height,
1210
- barColor: h(e.barColor),
1211
- labelColor: h(e.labelColor),
1212
+ barColor: u(e.barColor),
1213
+ labelColor: u(e.labelColor),
1212
1214
  labelFontSize: e.labelFontSize,
1213
1215
  showValues: e.showValues,
1214
1216
  maxValue: e.maxValue,
@@ -1216,7 +1218,7 @@ function v(e, a) {
1216
1218
  valueFormat: e.valueFormat,
1217
1219
  fadeIn: e.fadeIn,
1218
1220
  fadeOut: e.fadeOut,
1219
- easing: g(e.easing),
1221
+ easing: o(e.easing),
1220
1222
  rotation: e.rotation,
1221
1223
  rotationOrigin: e.rotationOrigin,
1222
1224
  scale: e.scale,
@@ -1226,125 +1228,189 @@ function v(e, a) {
1226
1228
  a
1227
1229
  );
1228
1230
  case "fadeIn":
1229
- return /* @__PURE__ */ c(_e, { duration: e.duration, easing: g(e.easing), children: e.children.map((s, l) => v(s, l)) }, a);
1231
+ return /* @__PURE__ */ c(qe, { duration: e.duration, easing: o(e.easing), children: e.children.map((s, l) => x(s, l)) }, a);
1230
1232
  case "fadeOut":
1231
- return /* @__PURE__ */ c(We, { duration: e.duration, totalFrames: e.totalFrames, easing: g(e.easing), children: e.children.map((s, l) => v(s, l)) }, a);
1233
+ return /* @__PURE__ */ c(je, { duration: e.duration, totalFrames: e.totalFrames, easing: o(e.easing), children: e.children.map((s, l) => x(s, l)) }, a);
1232
1234
  case "draw":
1233
- return /* @__PURE__ */ c(Me, { duration: e.duration, pathLength: e.pathLength, easing: g(e.easing), children: v(e.children[0], 0) }, a);
1235
+ return /* @__PURE__ */ c(Le, { duration: e.duration, pathLength: e.pathLength, easing: o(e.easing), children: x(e.children[0], 0) }, a);
1234
1236
  case "write":
1235
- return /* @__PURE__ */ c(Te, { duration: e.duration, easing: g(e.easing), children: e.children.map((s, l) => v(s, l)) }, a);
1237
+ return /* @__PURE__ */ c(Ve, { duration: e.duration, easing: o(e.easing), children: e.children.map((s, l) => x(s, l)) }, a);
1236
1238
  case "transform":
1237
1239
  return /* @__PURE__ */ c(
1238
- Ne,
1240
+ We,
1239
1241
  {
1240
1242
  duration: e.duration,
1241
- easing: g(e.easing),
1243
+ easing: o(e.easing),
1242
1244
  translate: e.translate,
1243
1245
  scale: e.scale,
1244
1246
  rotate: e.rotate,
1245
1247
  opacity: e.opacity,
1246
- children: e.children.map((s, l) => v(s, l))
1248
+ children: e.children.map((s, l) => x(s, l))
1247
1249
  },
1248
1250
  a
1249
1251
  );
1250
1252
  case "morph":
1251
1253
  return /* @__PURE__ */ c(
1252
- Re,
1254
+ De,
1253
1255
  {
1254
1256
  duration: e.duration,
1255
- easing: g(e.easing),
1256
- fromColor: h(e.fromColor),
1257
- toColor: h(e.toColor),
1257
+ easing: o(e.easing),
1258
+ fromColor: u(e.fromColor),
1259
+ toColor: u(e.toColor),
1258
1260
  fromOpacity: e.fromOpacity,
1259
1261
  toOpacity: e.toOpacity,
1260
1262
  fromScale: e.fromScale,
1261
1263
  toScale: e.toScale,
1262
- children: e.children.map((s, l) => v(s, l))
1264
+ children: e.children.map((s, l) => x(s, l))
1263
1265
  },
1264
1266
  a
1265
1267
  );
1266
1268
  case "stagger":
1267
- return /* @__PURE__ */ c(Pe, { staggerDelay: e.staggerDelay, easing: g(e.easing), children: e.children.map((s, l) => v(s, l)) }, a);
1269
+ return /* @__PURE__ */ c(_e, { staggerDelay: e.staggerDelay, easing: o(e.easing), children: e.children.map((s, l) => x(s, l)) }, a);
1268
1270
  case "parallel":
1269
- return /* @__PURE__ */ c(Fe, { children: e.children.map((s, l) => v(s, l)) }, a);
1271
+ return /* @__PURE__ */ c(Ne, { children: e.children.map((s, l) => x(s, l)) }, a);
1270
1272
  case "scene":
1271
- return /* @__PURE__ */ c(H.Fragment, { children: q(e) }, a);
1273
+ return /* @__PURE__ */ c(Q.Fragment, { children: H(e) }, a);
1272
1274
  case "player":
1273
- return /* @__PURE__ */ c(H.Fragment, { children: ie(e) }, a);
1275
+ return /* @__PURE__ */ c(Q.Fragment, { children: ce(e) }, a);
1274
1276
  default:
1275
1277
  return null;
1276
1278
  }
1277
1279
  }
1278
- function Vt(e) {
1280
+ const le = {
1281
+ background: "#0a0a1e",
1282
+ title: "#e0e7ff",
1283
+ subtitle: "#94a3b8",
1284
+ primary: "#4fc3f7",
1285
+ secondary: "#a78bfa",
1286
+ tertiary: "#f472b6",
1287
+ muted: "#64748b",
1288
+ text: "#c8d6e5",
1289
+ boxFill: "rgba(79,195,247,0.12)",
1290
+ boxStroke: "#4fc3f7",
1291
+ success: "#34d399",
1292
+ warning: "#fbbf24",
1293
+ error: "#f87171",
1294
+ palette: ["#4fc3f7", "#a78bfa", "#f472b6", "#34d399", "#fbbf24", "#fb923c", "#6366f1", "#22d3ee"]
1295
+ }, Ht = {
1296
+ background: "#f8fafc",
1297
+ title: "#1e293b",
1298
+ subtitle: "#64748b",
1299
+ primary: "#2563eb",
1300
+ secondary: "#7c3aed",
1301
+ tertiary: "#db2777",
1302
+ muted: "#94a3b8",
1303
+ text: "#334155",
1304
+ boxFill: "rgba(37,99,235,0.08)",
1305
+ boxStroke: "#2563eb",
1306
+ success: "#16a34a",
1307
+ warning: "#d97706",
1308
+ error: "#dc2626",
1309
+ palette: ["#2563eb", "#7c3aed", "#db2777", "#16a34a", "#d97706", "#ea580c", "#4f46e5", "#0891b2"]
1310
+ };
1311
+ function Gt(e) {
1279
1312
  if (!e) return {};
1280
1313
  const a = {};
1281
1314
  for (const [t, r] of Object.entries(e))
1282
1315
  r !== void 0 && (a[`--elucim-${t}`] = r);
1283
1316
  return a;
1284
1317
  }
1285
- const Xt = at(function({ dsl: a, className: t, style: r, theme: i, poster: n, onError: s }, l) {
1286
- const b = rt(null);
1287
- it(l, () => ({
1318
+ function ue(e) {
1319
+ return {
1320
+ "--elucim-foreground": e.text,
1321
+ "--elucim-background": e.background,
1322
+ "--elucim-title": e.title,
1323
+ "--elucim-subtitle": e.subtitle,
1324
+ "--elucim-accent": e.primary,
1325
+ "--elucim-muted": e.muted,
1326
+ "--elucim-surface": e.background,
1327
+ "--elucim-primary": e.primary,
1328
+ "--elucim-secondary": e.secondary,
1329
+ "--elucim-tertiary": e.tertiary,
1330
+ "--elucim-success": e.success,
1331
+ "--elucim-warning": e.warning,
1332
+ "--elucim-error": e.error
1333
+ };
1334
+ }
1335
+ const Kt = ue(le), Qt = ue(Ht);
1336
+ function Xt(e) {
1337
+ if (typeof window > "u" || typeof window.matchMedia != "function") return () => {
1338
+ };
1339
+ const a = window.matchMedia("(prefers-color-scheme: dark)");
1340
+ return a.addEventListener("change", e), () => a.removeEventListener("change", e);
1341
+ }
1342
+ function Jt() {
1343
+ return typeof window > "u" || typeof window.matchMedia != "function" ? !0 : window.matchMedia("(prefers-color-scheme: dark)").matches;
1344
+ }
1345
+ function Yt() {
1346
+ return !0;
1347
+ }
1348
+ function Zt() {
1349
+ return ht(Xt, Jt, Yt);
1350
+ }
1351
+ const la = ct(function({ dsl: a, className: t, style: r, theme: i, colorScheme: n, poster: s, onError: l }, $) {
1352
+ const d = lt(null), E = Zt();
1353
+ ut($, () => ({
1288
1354
  getSvgElement: () => {
1289
- var u;
1290
- return ((u = b.current) == null ? void 0 : u.getSvgElement()) ?? null;
1355
+ var f;
1356
+ return ((f = d.current) == null ? void 0 : f.getSvgElement()) ?? null;
1291
1357
  },
1292
- seekToFrame: (u) => {
1293
- var o;
1294
- return (o = b.current) == null ? void 0 : o.seekToFrame(u);
1358
+ seekToFrame: (f) => {
1359
+ var I;
1360
+ return (I = d.current) == null ? void 0 : I.seekToFrame(f);
1295
1361
  },
1296
1362
  getTotalFrames: () => {
1297
- var u;
1298
- return ((u = b.current) == null ? void 0 : u.getTotalFrames()) ?? 0;
1363
+ var f;
1364
+ return ((f = d.current) == null ? void 0 : f.getTotalFrames()) ?? 0;
1299
1365
  },
1300
1366
  play: () => {
1301
- var u;
1302
- return (u = b.current) == null ? void 0 : u.play();
1367
+ var f;
1368
+ return (f = d.current) == null ? void 0 : f.play();
1303
1369
  },
1304
1370
  pause: () => {
1305
- var u;
1306
- return (u = b.current) == null ? void 0 : u.pause();
1371
+ var f;
1372
+ return (f = d.current) == null ? void 0 : f.pause();
1307
1373
  },
1308
1374
  isPlaying: () => {
1309
- var u;
1310
- return ((u = b.current) == null ? void 0 : u.isPlaying()) ?? !1;
1375
+ var f;
1376
+ return ((f = d.current) == null ? void 0 : f.isPlaying()) ?? !1;
1311
1377
  }
1312
1378
  }));
1313
- const A = Y(a);
1314
- if (!A.valid) {
1315
- const u = A.errors.filter((y) => y.severity === "error").map((y) => ({ path: y.path, message: y.message }));
1316
- s == null || s(u);
1317
- const o = /* @__PURE__ */ new Map();
1318
- for (const y of u) {
1319
- const w = y.path.split("."), S = w.length > 1 ? w.slice(0, -1).join(".") : y.path, C = o.get(S) ?? [];
1320
- C.push(y), o.set(S, C);
1379
+ const w = te(a);
1380
+ if (!w.valid) {
1381
+ const f = w.errors.filter((y) => y.severity === "error").map((y) => ({ path: y.path, message: y.message }));
1382
+ l == null || l(f);
1383
+ const I = /* @__PURE__ */ new Map();
1384
+ for (const y of f) {
1385
+ const T = y.path.split("."), M = T.length > 1 ? T.slice(0, -1).join(".") : y.path, _ = I.get(M) ?? [];
1386
+ _.push(y), I.set(M, _);
1321
1387
  }
1322
- return /* @__PURE__ */ F(
1388
+ return /* @__PURE__ */ R(
1323
1389
  "div",
1324
1390
  {
1325
1391
  className: t,
1326
1392
  style: { color: "#ff6b6b", fontFamily: "monospace", padding: 16, fontSize: 13, ...r },
1327
1393
  "data-testid": "dsl-error",
1328
1394
  children: [
1329
- /* @__PURE__ */ F("strong", { children: [
1395
+ /* @__PURE__ */ R("strong", { children: [
1330
1396
  "Elucim DSL Validation Errors (",
1331
- u.length,
1397
+ f.length,
1332
1398
  "):"
1333
1399
  ] }),
1334
- [...o.entries()].map(([y, w]) => /* @__PURE__ */ F("details", { open: !0, style: { marginTop: 8 }, children: [
1335
- /* @__PURE__ */ F("summary", { style: { cursor: "pointer", fontWeight: "bold" }, children: [
1400
+ [...I.entries()].map(([y, T]) => /* @__PURE__ */ R("details", { open: !0, style: { marginTop: 8 }, children: [
1401
+ /* @__PURE__ */ R("summary", { style: { cursor: "pointer", fontWeight: "bold" }, children: [
1336
1402
  y,
1337
1403
  " (",
1338
- w.length,
1404
+ T.length,
1339
1405
  ")"
1340
1406
  ] }),
1341
- /* @__PURE__ */ c("ul", { style: { margin: "4px 0", paddingLeft: 20 }, children: w.map((S, C) => /* @__PURE__ */ F("li", { children: [
1342
- /* @__PURE__ */ c("code", { style: { color: "#ffa07a" }, children: S.path }),
1407
+ /* @__PURE__ */ c("ul", { style: { margin: "4px 0", paddingLeft: 20 }, children: T.map((M, _) => /* @__PURE__ */ R("li", { children: [
1408
+ /* @__PURE__ */ c("code", { style: { color: "#ffa07a" }, children: M.path }),
1343
1409
  ": ",
1344
- S.message
1345
- ] }, C)) })
1410
+ M.message
1411
+ ] }, _)) })
1346
1412
  ] }, y)),
1347
- /* @__PURE__ */ F("details", { style: { marginTop: 12 }, children: [
1413
+ /* @__PURE__ */ R("details", { style: { marginTop: 12 }, children: [
1348
1414
  /* @__PURE__ */ c("summary", { style: { cursor: "pointer", opacity: 0.7 }, children: "Raw JSON" }),
1349
1415
  /* @__PURE__ */ c("pre", { style: { fontSize: 11, maxHeight: 300, overflow: "auto", marginTop: 4, padding: 8, background: "rgba(0,0,0,0.3)", borderRadius: 4 }, children: JSON.stringify(a, null, 2) })
1350
1416
  ] })
@@ -1352,13 +1418,16 @@ const Xt = at(function({ dsl: a, className: t, style: r, theme: i, poster: n, on
1352
1418
  }
1353
1419
  );
1354
1420
  }
1355
- const E = Vt(i), x = n !== void 0 ? Lt(n, a) : void 0;
1356
- return /* @__PURE__ */ c("div", { className: t, style: { ...E, ...r }, "data-testid": "dsl-root", children: re(a.root, {
1357
- frame: x == null ? void 0 : x.frame,
1358
- playerRef: b
1421
+ const m = Gt(i);
1422
+ let b = {};
1423
+ n && (b = (n === "auto" ? E : n === "dark") ? Kt : Qt);
1424
+ const O = s !== void 0 ? ea(s, a) : void 0;
1425
+ return /* @__PURE__ */ c("div", { className: t, style: { ...b, ...m, ...r }, "data-testid": "dsl-root", children: se(a.root, {
1426
+ frame: O == null ? void 0 : O.frame,
1427
+ playerRef: d
1359
1428
  }) });
1360
1429
  });
1361
- function Lt(e, a) {
1430
+ function ea(e, a) {
1362
1431
  if (e === "first") return { frame: 0 };
1363
1432
  if (e === "last") {
1364
1433
  const r = a.root.durationInFrames ?? 1;
@@ -1366,8 +1435,8 @@ function Lt(e, a) {
1366
1435
  }
1367
1436
  return { frame: e };
1368
1437
  }
1369
- function Jt(e, a, t) {
1370
- const r = Y(e);
1438
+ function ua(e, a, t) {
1439
+ const r = te(e);
1371
1440
  if (!r.valid) {
1372
1441
  const s = r.errors.filter((l) => l.severity === "error");
1373
1442
  throw new Error(
@@ -1378,10 +1447,10 @@ ${s.map((l) => ` ${l.path}: ${l.message}`).join(`
1378
1447
  }
1379
1448
  const i = { ...e.root };
1380
1449
  t != null && t.width && (i.width = t.width), t != null && t.height && (i.height = t.height);
1381
- const n = re(i, { frame: a });
1382
- return nt(n);
1450
+ const n = se(i, { frame: a });
1451
+ return ft(n);
1383
1452
  }
1384
- class jt {
1453
+ class ta {
1385
1454
  constructor(a, t = 30, r = 900, i = 640) {
1386
1455
  this.elements = [], this.cursor = 0, this.theme = a, this._fps = t, this._width = r, this._height = i;
1387
1456
  }
@@ -1600,33 +1669,33 @@ class jt {
1600
1669
  * Returns the box positions for follow-up arrows, etc.
1601
1670
  */
1602
1671
  boxRow(a, t) {
1603
- const r = (t == null ? void 0 : t.boxWidth) ?? 80, i = (t == null ? void 0 : t.boxHeight) ?? 40, n = (t == null ? void 0 : t.gap) ?? 12, s = (t == null ? void 0 : t.y) ?? 250, l = a.length * r + (a.length - 1) * n, b = (this._width - l) / 2;
1672
+ const r = (t == null ? void 0 : t.boxWidth) ?? 80, i = (t == null ? void 0 : t.boxHeight) ?? 40, n = (t == null ? void 0 : t.gap) ?? 12, s = (t == null ? void 0 : t.y) ?? 250, l = a.length * r + (a.length - 1) * n, $ = (this._width - l) / 2;
1604
1673
  t == null || t.fadeIn;
1605
- const A = a.map((x, u) => {
1606
- const o = b + u * (r + n);
1607
- return { x: o, y: s, w: r, h: i, cx: o + r / 2, cy: s + i / 2 };
1608
- }), E = a.map((x, u) => {
1609
- var S, C;
1610
- const o = A[u], y = ((S = t == null ? void 0 : t.colors) == null ? void 0 : S[u]) ?? this.theme.boxFill, w = ((C = t == null ? void 0 : t.strokeColors) == null ? void 0 : C[u]) ?? this.theme.boxStroke;
1674
+ const d = a.map((w, m) => {
1675
+ const b = $ + m * (r + n);
1676
+ return { x: b, y: s, w: r, h: i, cx: b + r / 2, cy: s + i / 2 };
1677
+ }), E = a.map((w, m) => {
1678
+ var I, y;
1679
+ const b = d[m], O = ((I = t == null ? void 0 : t.colors) == null ? void 0 : I[m]) ?? this.theme.boxFill, f = ((y = t == null ? void 0 : t.strokeColors) == null ? void 0 : y[m]) ?? this.theme.boxStroke;
1611
1680
  return {
1612
1681
  type: "group",
1613
1682
  children: [
1614
1683
  {
1615
1684
  type: "rect",
1616
- x: o.x,
1617
- y: o.y,
1685
+ x: b.x,
1686
+ y: b.y,
1618
1687
  width: r,
1619
1688
  height: i,
1620
- fill: y,
1621
- stroke: w,
1689
+ fill: O,
1690
+ stroke: f,
1622
1691
  strokeWidth: 1.5,
1623
1692
  rx: 6
1624
1693
  },
1625
1694
  {
1626
1695
  type: "text",
1627
- x: o.cx,
1628
- y: o.cy + 5,
1629
- content: x,
1696
+ x: b.cx,
1697
+ y: b.cy + 5,
1698
+ content: w,
1630
1699
  fontSize: (t == null ? void 0 : t.fontSize) ?? 13,
1631
1700
  fill: (t == null ? void 0 : t.textColor) ?? this.theme.text,
1632
1701
  textAnchor: "middle",
@@ -1639,7 +1708,7 @@ class jt {
1639
1708
  type: "stagger",
1640
1709
  staggerDelay: 3,
1641
1710
  children: E
1642
- }, 8 + a.length * 2), A;
1711
+ }, 8 + a.length * 2), d;
1643
1712
  }
1644
1713
  /**
1645
1714
  * Render a vertical stack of labeled boxes.
@@ -1647,30 +1716,30 @@ class jt {
1647
1716
  boxColumn(a, t) {
1648
1717
  const r = (t == null ? void 0 : t.boxWidth) ?? 160, i = (t == null ? void 0 : t.boxHeight) ?? 36, n = (t == null ? void 0 : t.gap) ?? 8, s = (t == null ? void 0 : t.y) ?? 150, l = (t == null ? void 0 : t.x) ?? this.cx;
1649
1718
  t == null || t.fadeIn;
1650
- const b = a.map((E, x) => {
1651
- const u = s + x * (i + n);
1652
- return { x: l - r / 2, y: u, w: r, h: i, cx: l, cy: u + i / 2 };
1653
- }), A = a.map((E, x) => {
1654
- var y, w;
1655
- const u = b[x], o = ((y = t == null ? void 0 : t.colors) == null ? void 0 : y[x]) ?? this.theme.boxFill;
1719
+ const $ = a.map((E, w) => {
1720
+ const m = s + w * (i + n);
1721
+ return { x: l - r / 2, y: m, w: r, h: i, cx: l, cy: m + i / 2 };
1722
+ }), d = a.map((E, w) => {
1723
+ var O, f;
1724
+ const m = $[w], b = ((O = t == null ? void 0 : t.colors) == null ? void 0 : O[w]) ?? this.theme.boxFill;
1656
1725
  return {
1657
1726
  type: "group",
1658
1727
  children: [
1659
1728
  {
1660
1729
  type: "rect",
1661
- x: u.x,
1662
- y: u.y,
1730
+ x: m.x,
1731
+ y: m.y,
1663
1732
  width: r,
1664
1733
  height: i,
1665
- fill: o,
1666
- stroke: (w = t == null ? void 0 : t.colors) != null && w[x] ? t.colors[x] : this.theme.boxStroke,
1734
+ fill: b,
1735
+ stroke: (f = t == null ? void 0 : t.colors) != null && f[w] ? t.colors[w] : this.theme.boxStroke,
1667
1736
  strokeWidth: 1.5,
1668
1737
  rx: 6
1669
1738
  },
1670
1739
  {
1671
1740
  type: "text",
1672
- x: u.cx,
1673
- y: u.cy + 5,
1741
+ x: m.cx,
1742
+ y: m.cy + 5,
1674
1743
  content: E,
1675
1744
  fontSize: (t == null ? void 0 : t.fontSize) ?? 13,
1676
1745
  fill: (t == null ? void 0 : t.textColor) ?? this.theme.text,
@@ -1682,8 +1751,8 @@ class jt {
1682
1751
  return this.addAtCursor({
1683
1752
  type: "stagger",
1684
1753
  staggerDelay: 3,
1685
- children: A
1686
- }, 8 + a.length * 2), b;
1754
+ children: d
1755
+ }, 8 + a.length * 2), $;
1687
1756
  }
1688
1757
  /**
1689
1758
  * Draw arrows connecting sequential positions (e.g., output of boxRow/boxColumn).
@@ -1766,40 +1835,9 @@ class jt {
1766
1835
  return { elements: this.elements, durationInFrames: a };
1767
1836
  }
1768
1837
  }
1769
- const qt = {
1770
- background: "#0a0a1e",
1771
- title: "#e0e7ff",
1772
- subtitle: "#94a3b8",
1773
- primary: "#4fc3f7",
1774
- secondary: "#a78bfa",
1775
- tertiary: "#f472b6",
1776
- muted: "#64748b",
1777
- text: "#c8d6e5",
1778
- boxFill: "rgba(79,195,247,0.12)",
1779
- boxStroke: "#4fc3f7",
1780
- success: "#34d399",
1781
- warning: "#fbbf24",
1782
- error: "#f87171",
1783
- palette: ["#4fc3f7", "#a78bfa", "#f472b6", "#34d399", "#fbbf24", "#fb923c", "#6366f1", "#22d3ee"]
1784
- }, Yt = {
1785
- background: "#f8fafc",
1786
- title: "#1e293b",
1787
- subtitle: "#64748b",
1788
- primary: "#2563eb",
1789
- secondary: "#7c3aed",
1790
- tertiary: "#db2777",
1791
- muted: "#94a3b8",
1792
- text: "#334155",
1793
- boxFill: "rgba(37,99,235,0.08)",
1794
- boxStroke: "#2563eb",
1795
- success: "#16a34a",
1796
- warning: "#d97706",
1797
- error: "#dc2626",
1798
- palette: ["#2563eb", "#7c3aed", "#db2777", "#16a34a", "#d97706", "#ea580c", "#4f46e5", "#0891b2"]
1799
- };
1800
- class Bt {
1838
+ class aa {
1801
1839
  constructor(a, t, r) {
1802
- this._slides = [], this._title = a, this._theme = t ?? qt, this._opts = {
1840
+ this._slides = [], this._title = a, this._theme = t ?? le, this._opts = {
1803
1841
  width: 900,
1804
1842
  height: 640,
1805
1843
  fps: 30,
@@ -1817,7 +1855,7 @@ class Bt {
1817
1855
  /** Build the final ElucimDocument */
1818
1856
  build() {
1819
1857
  const a = this._slides.map((r) => {
1820
- const i = new jt(
1858
+ const i = new ta(
1821
1859
  this._theme,
1822
1860
  this._opts.fps,
1823
1861
  this._opts.width,
@@ -1863,29 +1901,29 @@ class Bt {
1863
1901
  return JSON.stringify(this.build(), null, a ? 2 : void 0);
1864
1902
  }
1865
1903
  }
1866
- function Zt(e, a, t) {
1867
- return new Bt(e, a, t);
1904
+ function ha(e, a, t) {
1905
+ return new aa(e, a, t);
1868
1906
  }
1869
1907
  export {
1870
- Xt as DslRenderer,
1871
- Bt as PresentationBuilder,
1872
- ae as SEMANTIC_TOKENS,
1873
- jt as SlideBuilder,
1874
- Qt as TOKEN_NAMES,
1875
- st as compileExpression,
1876
- ct as compileVectorExpression,
1877
- qt as darkTheme,
1878
- Yt as lightTheme,
1879
- Zt as presentation,
1880
- v as renderElement,
1881
- ie as renderPlayer,
1882
- _t as renderPresentation,
1883
- re as renderRoot,
1884
- q as renderScene,
1885
- Dt as renderSlide,
1886
- Jt as renderToSvgString,
1887
- h as resolveColor,
1888
- g as resolveEasing,
1889
- Y as validate,
1890
- J as validateExpression
1908
+ la as DslRenderer,
1909
+ aa as PresentationBuilder,
1910
+ ne as SEMANTIC_TOKENS,
1911
+ ta as SlideBuilder,
1912
+ ca as TOKEN_NAMES,
1913
+ ot as compileExpression,
1914
+ gt as compileVectorExpression,
1915
+ le as darkTheme,
1916
+ Ht as lightTheme,
1917
+ ha as presentation,
1918
+ x as renderElement,
1919
+ ce as renderPlayer,
1920
+ Bt as renderPresentation,
1921
+ se as renderRoot,
1922
+ H as renderScene,
1923
+ Ut as renderSlide,
1924
+ ua as renderToSvgString,
1925
+ u as resolveColor,
1926
+ o as resolveEasing,
1927
+ te as validate,
1928
+ ee as validateExpression
1891
1929
  };