claude-exode-mcp 7.5.7 → 7.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/MCP_DOCUMENTATION.md +1 -0
  2. package/SKILL.md +10 -0
  3. package/examples/aurum-product-page.exode +3208 -0
  4. package/examples/bell-ring-icon.exode +1 -0
  5. package/examples/drift-kinetic-type.exode +770 -0
  6. package/examples/earbuds-product.exode +214 -0
  7. package/examples/energy-flow.exode +1736 -0
  8. package/examples/flux-hero.exode +223 -0
  9. package/examples/gooey-toggle.exode +214 -0
  10. package/examples/gravity-well.exode +3113 -0
  11. package/examples/heart-icon.exode +1 -0
  12. package/examples/hologram-temple.exode +8100 -0
  13. package/examples/jarful-app.exode +1 -0
  14. package/examples/kip-character-rig.exode +1 -0
  15. package/examples/low-tide-tilt.exode +2216 -0
  16. package/examples/manifest.json +352 -0
  17. package/examples/swipe-stack-carousel.exode +4048 -0
  18. package/examples/tokyo-neon-weather.exode +470 -0
  19. package/examples/typographic-collapse.exode +1578 -0
  20. package/examples/void-product-ad.exode +1269 -0
  21. package/examples/wire-globe-card.exode +580 -0
  22. package/index.d.ts +41 -1
  23. package/index.js +2553 -2407
  24. package/package.json +4 -2
  25. package/render-runtime/exode-runtime.js +20 -20
  26. package/skills/creative-motion/SKILL.md +10 -0
  27. package/skills/creative-motion/recipes/character-rig.js +104 -0
  28. package/skills/creative-motion/recipes/dashboard.js +120 -0
  29. package/skills/creative-motion/recipes/game-arcade.js +203 -0
  30. package/skills/creative-motion/recipes/hero-physics.js +65 -0
  31. package/skills/creative-motion/recipes/pricing.js +88 -0
  32. package/skills/creative-motion/recipes/title-sequence.js +62 -0
  33. package/skills/creative-motion/references/apps.md +37 -0
  34. package/skills/creative-motion/references/gotchas.md +80 -0
  35. package/skills/creative-motion/references/native-layers.md +60 -0
  36. package/skills/creative-motion/references/quality.md +54 -0
  37. package/src/__tests__/buildKit.test.ts +127 -0
  38. package/src/__tests__/effectKnobs.test.ts +162 -0
  39. package/src/__tests__/nativeLayers.test.ts +178 -0
  40. package/src/buildKit.d.ts +301 -0
  41. package/src/buildKit.d.ts.map +1 -0
  42. package/src/buildKit.js +559 -0
  43. package/src/buildKit.js.map +1 -0
  44. package/src/buildKit.ts +520 -0
  45. package/src/compiler.d.ts +4 -0
  46. package/src/compiler.d.ts.map +1 -1
  47. package/src/compiler.js +21 -45
  48. package/src/compiler.js.map +1 -1
  49. package/src/compiler.ts +22 -51
  50. package/src/critique.d.ts +8 -0
  51. package/src/critique.d.ts.map +1 -0
  52. package/src/critique.js +348 -0
  53. package/src/critique.js.map +1 -0
  54. package/src/critique.ts +239 -0
  55. package/src/effectKnobs.d.ts +72 -0
  56. package/src/effectKnobs.d.ts.map +1 -0
  57. package/src/effectKnobs.js +541 -0
  58. package/src/effectKnobs.js.map +1 -0
  59. package/src/effectKnobs.ts +445 -0
  60. package/src/effectOptimizer.d.ts +18 -0
  61. package/src/effectOptimizer.d.ts.map +1 -0
  62. package/src/effectOptimizer.js +125 -0
  63. package/src/effectOptimizer.js.map +1 -0
  64. package/src/effectOptimizer.ts +104 -0
  65. package/src/engine/layout.js +1 -1
  66. package/src/engine/layout.js.map +1 -1
  67. package/src/engine/layout.ts +1 -1
  68. package/src/examples.d.ts +30 -0
  69. package/src/examples.d.ts.map +1 -0
  70. package/src/examples.js +168 -0
  71. package/src/examples.js.map +1 -0
  72. package/src/examples.ts +151 -0
  73. package/src/handlers/artboardHandlers.d.ts.map +1 -1
  74. package/src/handlers/artboardHandlers.js +45 -10
  75. package/src/handlers/artboardHandlers.js.map +1 -1
  76. package/src/handlers/artboardHandlers.ts +43 -12
  77. package/src/handlers/buildHandlers.d.ts +2 -0
  78. package/src/handlers/buildHandlers.d.ts.map +1 -0
  79. package/src/handlers/buildHandlers.js +86 -0
  80. package/src/handlers/buildHandlers.js.map +1 -0
  81. package/src/handlers/buildHandlers.ts +76 -0
  82. package/src/handlers/compilerHandlers.d.ts.map +1 -1
  83. package/src/handlers/compilerHandlers.js +32 -2
  84. package/src/handlers/compilerHandlers.js.map +1 -1
  85. package/src/handlers/compilerHandlers.ts +31 -2
  86. package/src/handlers/exampleHandlers.d.ts +2 -0
  87. package/src/handlers/exampleHandlers.d.ts.map +1 -0
  88. package/src/handlers/exampleHandlers.js +81 -0
  89. package/src/handlers/exampleHandlers.js.map +1 -0
  90. package/src/handlers/exampleHandlers.ts +76 -0
  91. package/src/handlers/renderHandlers.d.ts.map +1 -1
  92. package/src/handlers/renderHandlers.js +100 -2
  93. package/src/handlers/renderHandlers.js.map +1 -1
  94. package/src/handlers/renderHandlers.ts +90 -2
  95. package/src/handlers/scaffoldHandlers.d.ts.map +1 -1
  96. package/src/handlers/scaffoldHandlers.js +3 -0
  97. package/src/handlers/scaffoldHandlers.js.map +1 -1
  98. package/src/handlers/scaffoldHandlers.ts +2 -0
  99. package/src/handlers/widgetHandlers.js +1 -1
  100. package/src/handlers/widgetHandlers.js.map +1 -1
  101. package/src/handlers/widgetHandlers.ts +1 -1
  102. package/src/lottie/convert.d.ts +16 -0
  103. package/src/lottie/convert.d.ts.map +1 -0
  104. package/src/lottie/convert.js +1225 -0
  105. package/src/lottie/convert.js.map +1 -0
  106. package/src/lottie/convert.ts +1134 -0
  107. package/src/lottie/evaluate.d.ts +48 -0
  108. package/src/lottie/evaluate.d.ts.map +1 -0
  109. package/src/lottie/evaluate.js +174 -0
  110. package/src/lottie/evaluate.js.map +1 -0
  111. package/src/lottie/evaluate.ts +184 -0
  112. package/src/nativeLayers.d.ts +76 -0
  113. package/src/nativeLayers.d.ts.map +1 -0
  114. package/src/nativeLayers.js +404 -0
  115. package/src/nativeLayers.js.map +1 -0
  116. package/src/nativeLayers.ts +339 -0
  117. package/src/render/motionBrief.d.ts.map +1 -1
  118. package/src/render/motionBrief.js +4 -0
  119. package/src/render/motionBrief.js.map +1 -1
  120. package/src/render/motionBrief.ts +4 -0
  121. package/src/render/videoRenderer.d.ts.map +1 -1
  122. package/src/render/videoRenderer.js +5 -2
  123. package/src/render/videoRenderer.js.map +1 -1
  124. package/src/render/videoRenderer.ts +5 -2
  125. package/src/rive/convert.d.ts +17 -0
  126. package/src/rive/convert.d.ts.map +1 -0
  127. package/src/rive/convert.js +1779 -0
  128. package/src/rive/convert.js.map +1 -0
  129. package/src/rive/convert.ts +1492 -0
  130. package/src/rive/font.d.ts +13 -0
  131. package/src/rive/font.d.ts.map +1 -0
  132. package/src/rive/font.js +154 -0
  133. package/src/rive/font.js.map +1 -0
  134. package/src/rive/font.ts +132 -0
  135. package/src/rive/layout.d.ts +20 -0
  136. package/src/rive/layout.d.ts.map +1 -0
  137. package/src/rive/layout.js +145 -0
  138. package/src/rive/layout.js.map +1 -0
  139. package/src/rive/layout.ts +140 -0
  140. package/src/rive/reader.d.ts +32 -0
  141. package/src/rive/reader.d.ts.map +1 -0
  142. package/src/rive/reader.js +172 -0
  143. package/src/rive/reader.js.map +1 -0
  144. package/src/rive/reader.ts +160 -0
  145. package/src/rive/schema.generated.d.ts +9 -0
  146. package/src/rive/schema.generated.d.ts.map +1 -0
  147. package/src/rive/schema.generated.js +13 -0
  148. package/src/rive/schema.generated.js.map +1 -0
  149. package/src/rive/schema.generated.ts +13 -0
  150. package/src/schema.d.ts +5 -0
  151. package/src/schema.d.ts.map +1 -1
  152. package/src/schema.js +5 -0
  153. package/src/schema.js.map +1 -1
  154. package/src/schema.ts +6 -0
  155. package/src/serverInstructions.d.ts +2 -0
  156. package/src/serverInstructions.d.ts.map +1 -0
  157. package/src/serverInstructions.js +22 -0
  158. package/src/serverInstructions.js.map +1 -0
  159. package/src/serverInstructions.ts +21 -0
  160. package/src/sseServer.d.ts +2 -0
  161. package/src/sseServer.d.ts.map +1 -0
  162. package/src/sseServer.js +165 -0
  163. package/src/sseServer.js.map +1 -0
  164. package/src/sseServer.ts +189 -0
  165. package/src/utils.d.ts.map +1 -1
  166. package/src/utils.js +23 -1
  167. package/src/utils.js.map +1 -1
  168. package/src/utils.ts +13 -1
  169. package/src/widgets.d.ts +26 -0
  170. package/src/widgets.d.ts.map +1 -1
  171. package/src/widgets.js +89 -45
  172. package/src/widgets.js.map +1 -1
  173. package/src/widgets.ts +88 -45
@@ -0,0 +1,48 @@
1
+ export type Vec = number[];
2
+ export interface LottieKeyframe {
3
+ t: number;
4
+ s?: any;
5
+ e?: any;
6
+ i?: {
7
+ x: number | number[];
8
+ y: number | number[];
9
+ };
10
+ o?: {
11
+ x: number | number[];
12
+ y: number | number[];
13
+ };
14
+ h?: number;
15
+ ti?: number[];
16
+ to?: number[];
17
+ }
18
+ export interface LottieProp {
19
+ a?: number;
20
+ k: any;
21
+ x?: string;
22
+ ix?: number;
23
+ s?: boolean;
24
+ }
25
+ export declare const isAnimated: (p: any) => boolean;
26
+ /** CSS-style cubic-bezier(x1, y1, x2, y2) as a function of x. */
27
+ export declare function bezierEasing(x1: number, y1: number, x2: number, y2: number): (x: number) => number;
28
+ /** Eased progress of dimension `d` between keyframe `k` and the next. */
29
+ export declare function easedProgress(k: LottieKeyframe, d: number, u: number): number;
30
+ /** Start and end values of segment n (old format has `e`, new format uses the next `s`). */
31
+ export declare function segmentEnds(keys: LottieKeyframe[], n: number): [any, any];
32
+ /** Value of a (non-path) property at a frame. */
33
+ export declare function valueAt(p: any, frame: number): any;
34
+ /** A scalar dimension of a property at a frame. */
35
+ export declare const scalarAt: (p: any, frame: number, d?: number, fallback?: number) => number;
36
+ export interface LottiePath {
37
+ i: number[][];
38
+ o: number[][];
39
+ v: number[][];
40
+ c: boolean;
41
+ }
42
+ /** Path shape at a frame (vertices interpolate linearly with the keyframe's easing). */
43
+ export declare function pathAt(p: any, frame: number): LottiePath | undefined;
44
+ /** Keyframe frames of a property (empty when static). */
45
+ export declare const keyFrames: (p: any) => number[];
46
+ /** Can this property's keyframes be reproduced natively (no motion-path tangents)? */
47
+ export declare const isNativeFriendly: (p: any) => boolean;
48
+ //# sourceMappingURL=evaluate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["evaluate.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;AAE3B,MAAM,WAAW,cAAc;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,CAAC,EAAE,GAAG,CAAC;IACR,CAAC,CAAC,EAAE,GAAG,CAAC;IACR,CAAC,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC;IACnD,CAAC,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC;IACnD,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IAAG,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,GAAG,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,OAAO,CAAA;CAAE;AAGxF,eAAO,MAAM,UAAU,GAAI,GAAG,GAAG,KAAG,OAA+J,CAAC;AAQpM,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAgClG;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAI7E;AAMD,4FAA4F;AAC5F,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAMzE;AAqCD,iDAAiD;AACjD,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAqBlD;AAED,mDAAmD;AACnD,eAAO,MAAM,QAAQ,GAAI,GAAG,GAAG,EAAE,OAAO,MAAM,EAAE,UAAK,EAAE,iBAAY,KAAG,MAIrE,CAAC;AAIF,MAAM,WAAW,UAAU;IAAG,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,CAAC,EAAE,OAAO,CAAA;CAAE;AAIvF,wFAAwF;AACxF,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAkBpE;AAED,yDAAyD;AACzD,eAAO,MAAM,SAAS,GAAI,GAAG,GAAG,KAAG,MAAM,EAAoE,CAAC;AAE9G,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,GAAI,GAAG,GAAG,KAAG,OAAuF,CAAC"}
@@ -0,0 +1,174 @@
1
+ // @ts-nocheck
2
+ // GENERATED by scripts/sync-lottie-converter.mjs from editor/src/utils/lottie. Edit there, then re-run.
3
+ // Lottie property evaluation (frame -> value), following lottie-web's model:
4
+ // per-dimension cubic-bezier easing between keyframes, hold keys, spatial
5
+ // (motion path) tangents traversed at constant speed, and path morphing.
6
+ // The converter uses this to sample anything Exode cannot express natively.
7
+ // Older Bodymovin exports omit `a: 1`; a keyframe list is recognised by its shape.
8
+ export const isAnimated = (p) => !!p && p.a !== 0 && Array.isArray(p.k) && p.k.length > 0 && typeof p.k[0] === 'object' && p.k[0] !== null && !Array.isArray(p.k[0]) && 't' in p.k[0];
9
+ const pick = (v, d, fallback) => (Array.isArray(v) ? (v[d] ?? v[0] ?? fallback) : (v ?? fallback));
10
+ // ---------------------------------------------------------------- bezier easing
11
+ const cache = new Map();
12
+ /** CSS-style cubic-bezier(x1, y1, x2, y2) as a function of x. */
13
+ export function bezierEasing(x1, y1, x2, y2) {
14
+ const key = `${x1},${y1},${x2},${y2}`;
15
+ const hit = cache.get(key);
16
+ if (hit)
17
+ return hit;
18
+ const cx = 3 * x1, bx = 3 * (x2 - x1) - cx, ax = 1 - cx - bx;
19
+ const cy = 3 * y1, by = 3 * (y2 - y1) - cy, ay = 1 - cy - by;
20
+ const sx = (t) => ((ax * t + bx) * t + cx) * t;
21
+ const sy = (t) => ((ay * t + by) * t + cy) * t;
22
+ const dx = (t) => (3 * ax * t + 2 * bx) * t + cx;
23
+ const f = (x) => {
24
+ if (x <= 0)
25
+ return 0;
26
+ if (x >= 1)
27
+ return 1;
28
+ let t = x;
29
+ for (let i = 0; i < 8; i++) {
30
+ const err = sx(t) - x;
31
+ if (Math.abs(err) < 1e-6)
32
+ return sy(t);
33
+ const d = dx(t);
34
+ if (Math.abs(d) < 1e-6)
35
+ break;
36
+ t -= err / d;
37
+ }
38
+ let lo = 0, hi = 1;
39
+ t = x;
40
+ for (let i = 0; i < 30; i++) {
41
+ const v = sx(t);
42
+ if (Math.abs(v - x) < 1e-6)
43
+ break;
44
+ if (v < x)
45
+ lo = t;
46
+ else
47
+ hi = t;
48
+ t = (lo + hi) / 2;
49
+ }
50
+ return sy(t);
51
+ };
52
+ cache.set(key, f);
53
+ return f;
54
+ }
55
+ /** Eased progress of dimension `d` between keyframe `k` and the next. */
56
+ export function easedProgress(k, d, u) {
57
+ if (!k.o || !k.i)
58
+ return u;
59
+ const x1 = pick(k.o.x, d, 0), y1 = pick(k.o.y, d, 0), x2 = pick(k.i.x, d, 1), y2 = pick(k.i.y, d, 1);
60
+ return bezierEasing(x1, y1, x2, y2)(u);
61
+ }
62
+ // ---------------------------------------------------------------- values
63
+ const asVec = (v) => (Array.isArray(v) ? v : [v]);
64
+ /** Start and end values of segment n (old format has `e`, new format uses the next `s`). */
65
+ export function segmentEnds(keys, n) {
66
+ const k = keys[n];
67
+ const next = keys[n + 1];
68
+ const s = k.s !== undefined ? k.s : (n > 0 ? (keys[n - 1].e ?? keys[n - 1].s) : undefined);
69
+ const e = k.e !== undefined ? k.e : (next && next.s !== undefined ? next.s : s);
70
+ return [s, e];
71
+ }
72
+ const hasSpatial = (k) => !!(k.to && k.ti && (k.to.some(v => v) || k.ti.some(v => v)));
73
+ /** Point on a cubic at parameter t. */
74
+ const cubicAt = (p0, p1, p2, p3, t) => {
75
+ const m = 1 - t;
76
+ return m * m * m * p0 + 3 * m * m * t * p1 + 3 * m * t * t * p2 + t * t * t * p3;
77
+ };
78
+ const spatialCache = new WeakMap();
79
+ /** Position along a spatial bezier at arc-length fraction `f` (AE moves at constant speed). */
80
+ function spatialAt(k, s, e, f) {
81
+ let table = spatialCache.get(k);
82
+ if (!table) {
83
+ const N = 64;
84
+ const pts = [];
85
+ const lens = [0];
86
+ for (let i = 0; i <= N; i++) {
87
+ const t = i / N;
88
+ pts.push(s.map((v, d) => cubicAt(v, v + (k.to[d] || 0), e[d] + (k.ti[d] || 0), e[d], t)));
89
+ if (i > 0)
90
+ lens.push(lens[i - 1] + Math.hypot(...pts[i].map((v, d) => v - pts[i - 1][d])));
91
+ }
92
+ table = { lens, pts };
93
+ spatialCache.set(k, table);
94
+ }
95
+ const total = table.lens[table.lens.length - 1];
96
+ if (total <= 0)
97
+ return s.slice();
98
+ const target = Math.max(0, Math.min(1, f)) * total;
99
+ let i = 1;
100
+ while (i < table.lens.length - 1 && table.lens[i] < target)
101
+ i++;
102
+ const l0 = table.lens[i - 1], l1 = table.lens[i];
103
+ const w = l1 > l0 ? (target - l0) / (l1 - l0) : 0;
104
+ return table.pts[i - 1].map((v, d) => v + (table.pts[i][d] - v) * w);
105
+ }
106
+ /** Value of a (non-path) property at a frame. */
107
+ export function valueAt(p, frame) {
108
+ if (!p)
109
+ return undefined;
110
+ if (!isAnimated(p))
111
+ return p.k;
112
+ const keys = p.k;
113
+ if (frame <= keys[0].t)
114
+ return segmentEnds(keys, 0)[0];
115
+ for (let n = 0; n < keys.length - 1; n++) {
116
+ const k = keys[n], next = keys[n + 1];
117
+ if (frame >= next.t)
118
+ continue;
119
+ const [s, e] = segmentEnds(keys, n);
120
+ if (k.h === 1 || e === undefined)
121
+ return s;
122
+ const u = (frame - k.t) / ((next.t - k.t) || 1);
123
+ if (typeof s === 'number' || typeof e === 'number') {
124
+ const a = asVec(s)[0], b = asVec(e)[0];
125
+ return a + (b - a) * easedProgress(k, 0, u);
126
+ }
127
+ if (hasSpatial(k))
128
+ return spatialAt(k, asVec(s), asVec(e), easedProgress(k, 0, u));
129
+ return asVec(s).map((v, d) => v + ((asVec(e)[d] ?? v) - v) * easedProgress(k, d, u));
130
+ }
131
+ const last = keys[keys.length - 1];
132
+ if (last.s !== undefined)
133
+ return last.s;
134
+ return segmentEnds(keys, keys.length - 2)[1];
135
+ }
136
+ /** A scalar dimension of a property at a frame. */
137
+ export const scalarAt = (p, frame, d = 0, fallback = 0) => {
138
+ const v = valueAt(p, frame);
139
+ if (v === undefined || v === null)
140
+ return fallback;
141
+ return Array.isArray(v) ? (v[d] ?? fallback) : v;
142
+ };
143
+ const pathOf = (v) => (Array.isArray(v) ? v[0] : v);
144
+ /** Path shape at a frame (vertices interpolate linearly with the keyframe's easing). */
145
+ export function pathAt(p, frame) {
146
+ if (!p)
147
+ return undefined;
148
+ if (!isAnimated(p))
149
+ return pathOf(p.k);
150
+ const keys = p.k;
151
+ if (frame <= keys[0].t)
152
+ return pathOf(segmentEnds(keys, 0)[0]);
153
+ for (let n = 0; n < keys.length - 1; n++) {
154
+ const k = keys[n], next = keys[n + 1];
155
+ if (frame >= next.t)
156
+ continue;
157
+ const [s0, e0] = segmentEnds(keys, n);
158
+ const s = pathOf(s0), e = pathOf(e0);
159
+ if (!s)
160
+ return e;
161
+ if (k.h === 1 || !e || e.v.length !== s.v.length)
162
+ return s;
163
+ const f = easedProgress(k, 0, (frame - k.t) / ((next.t - k.t) || 1));
164
+ const mix = (a, b) => a.map((pt, j) => [pt[0] + (b[j][0] - pt[0]) * f, pt[1] + (b[j][1] - pt[1]) * f]);
165
+ return { c: s.c, v: mix(s.v, e.v), i: mix(s.i, e.i), o: mix(s.o, e.o) };
166
+ }
167
+ const last = keys[keys.length - 1];
168
+ return pathOf(last.s ?? segmentEnds(keys, keys.length - 2)[1]);
169
+ }
170
+ /** Keyframe frames of a property (empty when static). */
171
+ export const keyFrames = (p) => (isAnimated(p) ? p.k.map(k => k.t) : []);
172
+ /** Can this property's keyframes be reproduced natively (no motion-path tangents)? */
173
+ export const isNativeFriendly = (p) => isAnimated(p) && !p.k.some(k => hasSpatial(k)) && !p.x;
174
+ //# sourceMappingURL=evaluate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["evaluate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,184 @@
1
+ // @ts-nocheck
2
+ // GENERATED by scripts/sync-lottie-converter.mjs from editor/src/utils/lottie. Edit there, then re-run.
3
+ // Lottie property evaluation (frame -> value), following lottie-web's model:
4
+ // per-dimension cubic-bezier easing between keyframes, hold keys, spatial
5
+ // (motion path) tangents traversed at constant speed, and path morphing.
6
+ // The converter uses this to sample anything Exode cannot express natively.
7
+
8
+ export type Vec = number[];
9
+
10
+ export interface LottieKeyframe {
11
+ t: number;
12
+ s?: any;
13
+ e?: any;
14
+ i?: { x: number | number[]; y: number | number[] };
15
+ o?: { x: number | number[]; y: number | number[] };
16
+ h?: number;
17
+ ti?: number[];
18
+ to?: number[];
19
+ }
20
+
21
+ export interface LottieProp { a?: number; k: any; x?: string; ix?: number; s?: boolean }
22
+
23
+ // Older Bodymovin exports omit `a: 1`; a keyframe list is recognised by its shape.
24
+ export const isAnimated = (p: any): boolean => !!p && p.a !== 0 && Array.isArray(p.k) && p.k.length > 0 && typeof p.k[0] === 'object' && p.k[0] !== null && !Array.isArray(p.k[0]) && 't' in p.k[0];
25
+
26
+ const pick = (v: number | number[] | undefined, d: number, fallback: number) => (Array.isArray(v) ? (v[d] ?? v[0] ?? fallback) : (v ?? fallback));
27
+
28
+ // ---------------------------------------------------------------- bezier easing
29
+
30
+ const cache = new Map<string, (x: number) => number>();
31
+
32
+ /** CSS-style cubic-bezier(x1, y1, x2, y2) as a function of x. */
33
+ export function bezierEasing(x1: number, y1: number, x2: number, y2: number): (x: number) => number {
34
+ const key = `${x1},${y1},${x2},${y2}`;
35
+ const hit = cache.get(key);
36
+ if (hit) return hit;
37
+ const cx = 3 * x1, bx = 3 * (x2 - x1) - cx, ax = 1 - cx - bx;
38
+ const cy = 3 * y1, by = 3 * (y2 - y1) - cy, ay = 1 - cy - by;
39
+ const sx = (t: number) => ((ax * t + bx) * t + cx) * t;
40
+ const sy = (t: number) => ((ay * t + by) * t + cy) * t;
41
+ const dx = (t: number) => (3 * ax * t + 2 * bx) * t + cx;
42
+ const f = (x: number) => {
43
+ if (x <= 0) return 0;
44
+ if (x >= 1) return 1;
45
+ let t = x;
46
+ for (let i = 0; i < 8; i++) {
47
+ const err = sx(t) - x;
48
+ if (Math.abs(err) < 1e-6) return sy(t);
49
+ const d = dx(t);
50
+ if (Math.abs(d) < 1e-6) break;
51
+ t -= err / d;
52
+ }
53
+ let lo = 0, hi = 1;
54
+ t = x;
55
+ for (let i = 0; i < 30; i++) {
56
+ const v = sx(t);
57
+ if (Math.abs(v - x) < 1e-6) break;
58
+ if (v < x) lo = t; else hi = t;
59
+ t = (lo + hi) / 2;
60
+ }
61
+ return sy(t);
62
+ };
63
+ cache.set(key, f);
64
+ return f;
65
+ }
66
+
67
+ /** Eased progress of dimension `d` between keyframe `k` and the next. */
68
+ export function easedProgress(k: LottieKeyframe, d: number, u: number): number {
69
+ if (!k.o || !k.i) return u;
70
+ const x1 = pick(k.o.x, d, 0), y1 = pick(k.o.y, d, 0), x2 = pick(k.i.x, d, 1), y2 = pick(k.i.y, d, 1);
71
+ return bezierEasing(x1, y1, x2, y2)(u);
72
+ }
73
+
74
+ // ---------------------------------------------------------------- values
75
+
76
+ const asVec = (v: any): Vec => (Array.isArray(v) ? v : [v]);
77
+
78
+ /** Start and end values of segment n (old format has `e`, new format uses the next `s`). */
79
+ export function segmentEnds(keys: LottieKeyframe[], n: number): [any, any] {
80
+ const k = keys[n];
81
+ const next = keys[n + 1];
82
+ const s = k.s !== undefined ? k.s : (n > 0 ? (keys[n - 1].e ?? keys[n - 1].s) : undefined);
83
+ const e = k.e !== undefined ? k.e : (next && next.s !== undefined ? next.s : s);
84
+ return [s, e];
85
+ }
86
+
87
+ const hasSpatial = (k: LottieKeyframe) => !!(k.to && k.ti && (k.to.some(v => v) || k.ti.some(v => v)));
88
+
89
+ /** Point on a cubic at parameter t. */
90
+ const cubicAt = (p0: number, p1: number, p2: number, p3: number, t: number) => {
91
+ const m = 1 - t;
92
+ return m * m * m * p0 + 3 * m * m * t * p1 + 3 * m * t * t * p2 + t * t * t * p3;
93
+ };
94
+
95
+ const spatialCache = new WeakMap<LottieKeyframe, { lens: number[]; pts: Vec[] }>();
96
+
97
+ /** Position along a spatial bezier at arc-length fraction `f` (AE moves at constant speed). */
98
+ function spatialAt(k: LottieKeyframe, s: Vec, e: Vec, f: number): Vec {
99
+ let table = spatialCache.get(k);
100
+ if (!table) {
101
+ const N = 64;
102
+ const pts: Vec[] = [];
103
+ const lens: number[] = [0];
104
+ for (let i = 0; i <= N; i++) {
105
+ const t = i / N;
106
+ pts.push(s.map((v, d) => cubicAt(v, v + (k.to![d] || 0), e[d] + (k.ti![d] || 0), e[d], t)));
107
+ if (i > 0) lens.push(lens[i - 1] + Math.hypot(...pts[i].map((v, d) => v - pts[i - 1][d])));
108
+ }
109
+ table = { lens, pts };
110
+ spatialCache.set(k, table);
111
+ }
112
+ const total = table.lens[table.lens.length - 1];
113
+ if (total <= 0) return s.slice();
114
+ const target = Math.max(0, Math.min(1, f)) * total;
115
+ let i = 1;
116
+ while (i < table.lens.length - 1 && table.lens[i] < target) i++;
117
+ const l0 = table.lens[i - 1], l1 = table.lens[i];
118
+ const w = l1 > l0 ? (target - l0) / (l1 - l0) : 0;
119
+ return table.pts[i - 1].map((v, d) => v + (table!.pts[i][d] - v) * w);
120
+ }
121
+
122
+ /** Value of a (non-path) property at a frame. */
123
+ export function valueAt(p: any, frame: number): any {
124
+ if (!p) return undefined;
125
+ if (!isAnimated(p)) return p.k;
126
+ const keys: LottieKeyframe[] = p.k;
127
+ if (frame <= keys[0].t) return segmentEnds(keys, 0)[0];
128
+ for (let n = 0; n < keys.length - 1; n++) {
129
+ const k = keys[n], next = keys[n + 1];
130
+ if (frame >= next.t) continue;
131
+ const [s, e] = segmentEnds(keys, n);
132
+ if (k.h === 1 || e === undefined) return s;
133
+ const u = (frame - k.t) / ((next.t - k.t) || 1);
134
+ if (typeof s === 'number' || typeof e === 'number') {
135
+ const a = asVec(s)[0], b = asVec(e)[0];
136
+ return a + (b - a) * easedProgress(k, 0, u);
137
+ }
138
+ if (hasSpatial(k)) return spatialAt(k, asVec(s), asVec(e), easedProgress(k, 0, u));
139
+ return asVec(s).map((v: number, d: number) => v + ((asVec(e)[d] ?? v) - v) * easedProgress(k, d, u));
140
+ }
141
+ const last = keys[keys.length - 1];
142
+ if (last.s !== undefined) return last.s;
143
+ return segmentEnds(keys, keys.length - 2)[1];
144
+ }
145
+
146
+ /** A scalar dimension of a property at a frame. */
147
+ export const scalarAt = (p: any, frame: number, d = 0, fallback = 0): number => {
148
+ const v = valueAt(p, frame);
149
+ if (v === undefined || v === null) return fallback;
150
+ return Array.isArray(v) ? (v[d] ?? fallback) : v;
151
+ };
152
+
153
+ // ---------------------------------------------------------------- paths
154
+
155
+ export interface LottiePath { i: number[][]; o: number[][]; v: number[][]; c: boolean }
156
+
157
+ const pathOf = (v: any): LottiePath | undefined => (Array.isArray(v) ? v[0] : v);
158
+
159
+ /** Path shape at a frame (vertices interpolate linearly with the keyframe's easing). */
160
+ export function pathAt(p: any, frame: number): LottiePath | undefined {
161
+ if (!p) return undefined;
162
+ if (!isAnimated(p)) return pathOf(p.k);
163
+ const keys: LottieKeyframe[] = p.k;
164
+ if (frame <= keys[0].t) return pathOf(segmentEnds(keys, 0)[0]);
165
+ for (let n = 0; n < keys.length - 1; n++) {
166
+ const k = keys[n], next = keys[n + 1];
167
+ if (frame >= next.t) continue;
168
+ const [s0, e0] = segmentEnds(keys, n);
169
+ const s = pathOf(s0), e = pathOf(e0);
170
+ if (!s) return e;
171
+ if (k.h === 1 || !e || e.v.length !== s.v.length) return s;
172
+ const f = easedProgress(k, 0, (frame - k.t) / ((next.t - k.t) || 1));
173
+ const mix = (a: number[][], b: number[][]) => a.map((pt, j) => [pt[0] + (b[j][0] - pt[0]) * f, pt[1] + (b[j][1] - pt[1]) * f]);
174
+ return { c: s.c, v: mix(s.v, e.v), i: mix(s.i, e.i), o: mix(s.o, e.o) };
175
+ }
176
+ const last = keys[keys.length - 1];
177
+ return pathOf(last.s ?? segmentEnds(keys, keys.length - 2)[1]);
178
+ }
179
+
180
+ /** Keyframe frames of a property (empty when static). */
181
+ export const keyFrames = (p: any): number[] => (isAnimated(p) ? (p.k as LottieKeyframe[]).map(k => k.t) : []);
182
+
183
+ /** Can this property's keyframes be reproduced natively (no motion-path tangents)? */
184
+ export const isNativeFriendly = (p: any): boolean => isAnimated(p) && !(p.k as LottieKeyframe[]).some(k => hasSpatial(k)) && !p.x;
@@ -0,0 +1,76 @@
1
+ export interface BakeGroup {
2
+ id: string;
3
+ name: string;
4
+ parent?: string;
5
+ locked?: boolean;
6
+ }
7
+ export interface BakeLayer {
8
+ id: string;
9
+ name: string;
10
+ parent?: string;
11
+ /** [x, y, moveTo?, closePath?] in artboard coordinates */
12
+ pts: Array<[number, number, (boolean | number)?, (boolean | number)?]>;
13
+ stroke?: string;
14
+ width?: number;
15
+ fill?: string;
16
+ fillOpacity?: number;
17
+ opacity?: number;
18
+ /** 'normal' (default) or 'screen' for additive looks such as holograms and neon */
19
+ blend?: 'screen' | 'normal';
20
+ locked?: boolean;
21
+ lineCap?: string;
22
+ }
23
+ export interface BakeSpec {
24
+ groups?: BakeGroup[];
25
+ layers: BakeLayer[];
26
+ }
27
+ export interface BakeReport {
28
+ effect: string;
29
+ groups: number;
30
+ layers: number;
31
+ segments: number;
32
+ warnings: string[];
33
+ }
34
+ /** Runtime kit: paste once into effect code (minifier-safe: semicolons, block comments only). */
35
+ export declare const NATIVE_KIT_JS = "/* EXODE_NATIVE_KIT v1 \u2014 native Path layers driven from effect code, one state per engine.\n * NK_engine(env) first logic layer, top of update(): returns this engine's key (creates the engineKey input value)\n * NK_key(env) any update()/render(): this engine's key, or 'still' (editor design view, no logic running)\n * NK_state(key) per-engine state object; NK_beat(key) in update(); NK_live(key) in render()\n * NK_pool(id, n) reusable points for Path layer id, room for n points; origin from NATIVE_ORG[id]\n * NK_begin(a) NK_move(a,x,y) NK_line(a,x,y) NK_close(a) NK_end(a) rewrite a layer's points (artboard coords)\n * NK_push(env, a) hand the points to the layer; NK_set(st, env, id, prop, v) writes a property only on change\n * NK_pts(a) the points as [[x, y, moveTo, closePath]] for nativeBake() */\nvar NK_PIN = 1000000; /* pins far outside any artboard: the layer's frame never re-centres, whatever the scene size */\nfunction NK_root() { var G = typeof globalThis !== 'undefined' ? globalThis : window; return G.__exodeNativeV1 || (G.__exodeNativeV1 = {}); }\nfunction NK_sweep() {\n try {\n var R = NK_root(), now = Date.now(), k, b;\n for (k in R) { b = R[k]; if (k === 'still' || !b || typeof b !== 'object' || !b.beat || now - b.beat < 5000) continue; delete R[k]; }\n } catch (e) { /* never block startup */ }\n}\nfunction NK_engine(env) {\n if (!env || !env.input || !env.setInput) return 'still';\n var k = env.input('engineKey');\n if (typeof k === 'string' && k) return k;\n NK_sweep();\n k = 'e' + Math.random().toString(36).slice(2, 10);\n env.setInput('engineKey', k);\n return k;\n}\nfunction NK_key(env) { var k = env && env.input ? env.input('engineKey') : ''; return typeof k === 'string' && k ? k : 'still'; }\nfunction NK_state(key) { var R = NK_root(); return R[key] || (R[key] = { beat: 0 }); }\nfunction NK_beat(key) { NK_state(key).beat = Date.now(); }\nfunction NK_live(key) { var b = NK_root()[key]; return !!(b && key !== 'still' && Date.now() - (b.beat || 0) < 700); }\nfunction NK_pool(id, n) {\n var o = typeof NATIVE_ORG !== 'undefined' && NATIVE_ORG[id];\n var a = [{ x: 0 - NK_PIN, y: 0 - NK_PIN, moveTo: true, closePath: false }, { x: NK_PIN, y: NK_PIN, moveTo: true, closePath: false }];\n for (var i = 0; i < n; i++) a.push({ x: 0, y: 0, moveTo: true, closePath: false });\n a.id = id; a.ox = o ? o[0] : 0; a.oy = o ? o[1] : 0; a.i = 2;\n return a;\n}\nfunction NK_at(a, x, y, mv) {\n if (a.i >= a.length) return;\n var q = a[a.i++], lx = x - a.ox, ly = y - a.oy, L = NK_PIN - 10;\n q.x = lx < 0 - L ? 0 - L : lx > L ? L : lx; q.y = ly < 0 - L ? 0 - L : ly > L ? L : ly; q.moveTo = mv; q.closePath = false;\n}\nfunction NK_begin(a) { a.i = 2; }\nfunction NK_move(a, x, y) { NK_at(a, x, y, true); }\nfunction NK_line(a, x, y) { NK_at(a, x, y, false); }\nfunction NK_close(a) { if (a.i > 2) a[a.i - 1].closePath = true; }\nfunction NK_end(a) { for (var i = a.i; i < a.length; i++) { var q = a[i]; q.x = 0; q.y = 0; q.moveTo = true; q.closePath = false; } }\nfunction NK_push(env, a) { if (env && env.scene) env.scene.set(a.id, 'geometry.points', a); }\nfunction NK_set(st, env, id, prop, v) {\n var c = st.__set || (st.__set = {}), k = id + '|' + prop, o = c[k];\n if (o === v || (typeof v === 'number' && typeof o === 'number' && Math.abs(o - v) < 0.01)) return;\n c[k] = v; env.scene.set(id, prop, v);\n}\nfunction NK_pts(a) { var d = []; for (var i = 2; i < a.i; i++) { var q = a[i]; d.push([q.x + a.ox, q.y + a.oy, q.moveTo, q.closePath]); } return d; }\n";
36
+ /** run the effect's nativeBake() in a sandbox; NATIVE_ORG is {} so points come back in artboard coordinates */
37
+ export declare function runNativeBake(code: string): BakeSpec;
38
+ /** tight frame around the visible (artboard-clipped) segments; path data relative to the frame centre, pinned at its corners */
39
+ export declare function pathGeometry(pts: BakeLayer['pts'], W: number, H: number): {
40
+ data: string;
41
+ cx: number;
42
+ cy: number;
43
+ w: number;
44
+ h: number;
45
+ segments: number;
46
+ };
47
+ /**
48
+ * Bake every effect in the artboard that defines nativeBake(): (re)creates its groups and Path layers just
49
+ * below it, writes NATIVE_ORG into all effects that use it, and adds the engineKey input. Idempotent.
50
+ */
51
+ export declare function bakeNativeLayers(artboard: any, opts?: {
52
+ effectIds?: string[];
53
+ }): BakeReport[];
54
+ /** Problems that make a code-driven scene misbehave in the editor (shared state, full-artboard paths). */
55
+ export declare function nativeLayerChecks(artboard: any): string[];
56
+ export declare const isGroupMirror: (e: any) => boolean;
57
+ export declare function collectGroupEffects(group: any, objects: any[]): Array<{
58
+ obj: any;
59
+ eff: any;
60
+ index: number;
61
+ }>;
62
+ export declare function buildGroupCode(items: Array<{
63
+ obj: any;
64
+ eff: any;
65
+ index: number;
66
+ }>): string;
67
+ /** groups whose direct children include two or more logic pieces (effects that run update()) */
68
+ export declare function logicGroups(artboard: any): any[];
69
+ /**
70
+ * Add a mirror to the given groups (ids or names) and refresh every existing mirror. Returns the groups
71
+ * whose mirror was added or changed. Safe to call on every write.
72
+ */
73
+ export declare function refreshGroupMirrors(artboard: any, add?: string[]): string[];
74
+ /** Logic layout problems: no group effect on a Logic group, or pieces that each carry one big copied script. */
75
+ export declare function logicLayoutChecks(artboard: any): string[];
76
+ //# sourceMappingURL=nativeLayers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeLayers.d.ts","sourceRoot":"","sources":["nativeLayers.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,SAAS;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE;AAC1F,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1C,0DAA0D;IAC1D,GAAG,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IACvF,mFAAmF;IACnF,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CACjE;AACD,MAAM,WAAW,QAAQ;IAAG,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IAAC,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE;AACvE,MAAM,WAAW,UAAU;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE;AAEpH,iGAAiG;AACjG,eAAO,MAAM,aAAa,0+GAqDzB,CAAC;AAMF,+GAA+G;AAC/G,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CASpD;AAYD,gIAAgI;AAChI,wBAAgB,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;;;;;;;EAuBvE;AAQD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAAG,UAAU,EAAE,CAuFjG;AAID,0GAA0G;AAC1G,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,EAAE,CAezD;AAQD,eAAO,MAAM,aAAa,GAAI,GAAG,GAAG,YAAoC,CAAC;AAEzE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,GAAG,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAY5G;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,GAAG,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAG1F;AAED,gGAAgG;AAChG,wBAAgB,WAAW,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,EAAE,CAIhD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAoB/E;AAED,gHAAgH;AAChH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,EAAE,CAezD"}