claude-exode-mcp 7.5.7 → 7.5.9

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 +2554 -2408
  24. package/package.json +6 -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,541 @@
1
+ /**
2
+ * Lifts the tunable numbers out of CustomEffect code so they show up as parameters.
3
+ *
4
+ * The editor's Effects panel turns every top-level `var NAME = <number | colour | boolean>` into a
5
+ * control (slider, colour picker, toggle). Generated effects usually bury those values inside
6
+ * render()/update(): `ctx.lineWidth = 3.4`, `L.rgba(col, 0.75 * ax)`, `Math.sin(t * 2.4)`. This pass
7
+ * moves them to named top-level variables and puts the name where the number was, so the effect
8
+ * looks and behaves exactly the same until someone moves a slider.
9
+ *
10
+ * Only values with a clear meaning are lifted (nothing structural like indices, loop bounds or ids):
11
+ * - style assignments: x.lineWidth = 3.4 → WIDTH, x.globalAlpha → ALPHA, x.shadowBlur → BLUR,
12
+ * x.fillStyle / strokeStyle / shadowColor = '#5eeaff' → FILL / STROKE / SHADOW
13
+ * - time rates: t * 2.4, env.time * 0.35, dt * 2.6 → SPEED
14
+ * - colour opacity: a 0..1 factor multiplied inside an rgba()/hsla() call or a fill/stroke style
15
+ * expression → ALPHA
16
+ * Names come from the section comment above the code (`/* temple tank ripples *\/` → TEMPLE_TANK_RIPPLES_SPEED),
17
+ * else from the helper function's name. Running it twice changes nothing.
18
+ */
19
+ const KNOB_MARK = '/* settings: each one is a parameter in the Effects panel */';
20
+ const STYLE_NUM = { lineWidth: 'WIDTH', globalAlpha: 'ALPHA', shadowBlur: 'BLUR' };
21
+ const STYLE_COLOR = { fillStyle: 'FILL', strokeStyle: 'STROKE', shadowColor: 'SHADOW' };
22
+ const COLOR_CALL = /^(rgba?|hsla?|withAlpha|alpha)$/i;
23
+ const STOP = new Set(['a', 'an', 'the', 'of', 'for', 'and', 'or', 'to', 'in', 'on', 'under', 'with', 'from', 'by', 'at', 'is', 'it', 'its', 'that', 'this', 'every', 'each', 'all', 'no', 'not']);
24
+ const NOTE = /^(no|not|if|when|while|only|skip|keep|else|otherwise|unless|note|todo|fixme|so|but|then|also|never|always)\b/i;
25
+ const snake = (n) => n.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();
26
+ const isColor = (s) => /^(#[0-9a-f]{3,8}|rgba?\([^)]*\)|hsla?\([^)]*\))$/i.test(s.trim());
27
+ function tokenize(code) {
28
+ const out = [];
29
+ let depth = 0, nl = true;
30
+ for (let i = 0; i < code.length;) {
31
+ const c = code[i], n = code[i + 1];
32
+ if (c === '\n') {
33
+ nl = true;
34
+ i++;
35
+ continue;
36
+ }
37
+ if (/\s/.test(c)) {
38
+ i++;
39
+ continue;
40
+ }
41
+ const push = (t, e) => { out.push({ t, v: code.slice(i, e), s: i, e, depth, nl }); nl = false; i = e; };
42
+ if (c === '/' && n === '/') {
43
+ const e = code.indexOf('\n', i);
44
+ push('com', e < 0 ? code.length : e);
45
+ continue;
46
+ }
47
+ if (c === '/' && n === '*') {
48
+ const e = code.indexOf('*/', i + 2);
49
+ push('com', e < 0 ? code.length : e + 2);
50
+ continue;
51
+ }
52
+ if (c === '"' || c === "'" || c === '`') {
53
+ let j = i + 1;
54
+ while (j < code.length && code[j] !== c) {
55
+ if (code[j] === '\\')
56
+ j++;
57
+ j++;
58
+ }
59
+ push('str', Math.min(code.length, j + 1));
60
+ continue;
61
+ }
62
+ if (/[0-9]/.test(c) || (c === '.' && /[0-9]/.test(n || ''))) {
63
+ const m = /^(?:0[xX][0-9a-fA-F]+|(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?)/.exec(code.slice(i));
64
+ push('num', i + m[0].length);
65
+ continue;
66
+ }
67
+ if (/[A-Za-z_$]/.test(c)) {
68
+ const m = /^[A-Za-z_$][\w$]*/.exec(code.slice(i));
69
+ push('id', i + m[0].length);
70
+ continue;
71
+ }
72
+ /* regex literals are rare in effect code; a `/` is treated as division */
73
+ if (c === '}' || c === ')' || c === ']')
74
+ depth = Math.max(0, depth - 1);
75
+ push('punc', i + 1);
76
+ if (c === '{' || c === '(' || c === '[')
77
+ depth++;
78
+ }
79
+ return out;
80
+ }
81
+ /** "white scan sweep: bloom and core" → WHITE_SCAN_SWEEP; "bloom under the native edges" → BLOOM */
82
+ function sectionName(comment) {
83
+ let s = comment.replace(/^\/\/+|^\/\*+|\*+\/$/g, '').trim();
84
+ /* "no logic running: …", "if the user …" are notes about the next line, not section headings */
85
+ if (NOTE.test(s))
86
+ return '';
87
+ s = s.split(/[:(.,;—–]|\s-\s/)[0];
88
+ const words = s.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);
89
+ while (words.length && STOP.has(words[0]))
90
+ words.shift();
91
+ const out = [];
92
+ for (const w of words) {
93
+ if (STOP.has(w) || out.length === 3)
94
+ break;
95
+ out.push(w);
96
+ }
97
+ return out.join('_').toUpperCase();
98
+ }
99
+ const fnName = (n) => (/^(render|update|animate|draw|main|tick|step)$/i.test(n) ? '' : snake(n));
100
+ const STATE_WORD = { sel: 'SELECTED', selected: 'SELECTED', hov: 'HOVER', hover: 'HOVER', hovered: 'HOVER', active: 'ACTIVE', on: 'ON', pressed: 'PRESSED', down: 'PRESSED', focus: 'FOCUS', disabled: 'DISABLED' };
101
+ /** The ternary condition ending at token q (`?`): its last identifier, `i === T.sel` → SELECTED. */
102
+ function conditionName(toks, q) {
103
+ const d = toks[q].depth;
104
+ let named = '';
105
+ for (let j = q - 1; j >= 0; j--) {
106
+ const t = toks[j];
107
+ if (t.depth < d || (t.depth === d && /^[;,{}(:?]$/.test(t.v)) || (t.depth === d && t.v === '=' && toks[j - 1]?.v !== '=' && toks[j + 1]?.v !== '='))
108
+ break;
109
+ if (t.t !== 'id')
110
+ continue;
111
+ /* a state word anywhere in the condition wins (p === T.sel && g !== 1 → SELECTED) */
112
+ if (STATE_WORD[t.v.toLowerCase()])
113
+ return STATE_WORD[t.v.toLowerCase()];
114
+ if (!named && t.depth === d && t.v.length >= 3)
115
+ named = snake(t.v);
116
+ }
117
+ return named;
118
+ }
119
+ /** What the statement holding token k assigns to: `T.cam.yaw -= dt * 1.2` → YAW, `var damp = …` → DAMP. */
120
+ function assignTarget(toks, k) {
121
+ const d = toks[k].depth;
122
+ let a = k - 1;
123
+ for (; a >= 0; a--) {
124
+ const t = toks[a];
125
+ if (t.depth <= d && (t.v === ';' || t.v === '{' || t.v === '}'))
126
+ break;
127
+ }
128
+ for (let j = a + 1; j < k; j++) {
129
+ const t = toks[j];
130
+ if (t.v !== '=' || t.depth > d)
131
+ continue;
132
+ const p = toks[j - 1]?.v, n = toks[j + 1]?.v;
133
+ if (n === '=' || p === '=' || p === '!' || p === '<' || p === '>')
134
+ continue;
135
+ const id = /^[+\-*/%]$/.test(p || '') ? toks[j - 2] : toks[j - 1];
136
+ return id && id.t === 'id' && id.v.length >= 3 && !STYLE_COLOR[id.v] && !STYLE_NUM[id.v] ? snake(id.v) : '';
137
+ }
138
+ return '';
139
+ }
140
+ /** Effects that must stay as written: shared libraries, group mirrors, code with no entry point. */
141
+ export function liftable(code) {
142
+ if (typeof code !== 'string' || !code.trim())
143
+ return 'empty';
144
+ if (!/function\s+(render|update)\s*\(/.test(code))
145
+ return 'no render/update';
146
+ /* the library creates or fills the registry; pieces only read globalThis.__exodeLibs[LIB_ID] */
147
+ if (/__exodeLibs\s*(?:=(?!=)|\[[^\]]+\]\s*=(?!=))/.test(code))
148
+ return 'shared library';
149
+ if (/\beval\s*\(|new\s+Function\s*\(/.test(code))
150
+ return 'uses eval';
151
+ return null;
152
+ }
153
+ export function liftEffectKnobs(code) {
154
+ const skip = liftable(code);
155
+ if (skip)
156
+ return { code, knobs: [], changed: false, reason: skip };
157
+ const toks = tokenize(code);
158
+ const used = new Set(toks.filter((t) => t.t === 'id').map((t) => t.v));
159
+ /* identifiers that hold time: env.time copies, plus dt/time/elapsed */
160
+ const timeIds = new Set(['time', 'elapsed', 'dt']);
161
+ for (const m of code.matchAll(/(?:^|[\s,(])([A-Za-z_$][\w$]*)\s*=\s*\(?\s*env\.time\b/g))
162
+ timeIds.add(m[1]);
163
+ const hits = [];
164
+ let topFn = '', pendingFn = '', section = '';
165
+ let colorUntil = -1; // token index where the current fill/stroke style statement ends
166
+ const callStack = []; // for each open '(' : is it a colour call?
167
+ const isTimeOperand = (k, dir) => {
168
+ /* the operand on one side of `*` at token k: a time id, or member `.time` */
169
+ if (dir === -1) {
170
+ const a = toks[k - 1];
171
+ if (!a || a.t !== 'id')
172
+ return false;
173
+ if (a.v === 'time' && toks[k - 2]?.v === '.')
174
+ return true;
175
+ return timeIds.has(a.v) && toks[k - 2]?.v !== '.';
176
+ }
177
+ const a = toks[k + 1];
178
+ if (!a || a.t !== 'id')
179
+ return false;
180
+ const after = toks[k + 2]?.v;
181
+ if (after === '.' && toks[k + 3]?.v === 'time')
182
+ return toks[k + 4]?.v !== '.' && toks[k + 4]?.v !== '(';
183
+ return timeIds.has(a.v) && after !== '.' && after !== '(' && after !== '[';
184
+ };
185
+ const statementEnd = (k) => {
186
+ const d = toks[k].depth;
187
+ for (let j = k + 1; j < toks.length; j++) {
188
+ const t = toks[j];
189
+ if (t.depth < d)
190
+ return j;
191
+ if (t.depth === d && (t.v === ';' || t.v === ',' || (t.nl && t.t !== 'punc')))
192
+ return j;
193
+ }
194
+ return toks.length;
195
+ };
196
+ for (let k = 0; k < toks.length; k++) {
197
+ const tk = toks[k];
198
+ if (tk.depth === 0) {
199
+ if (tk.v === 'function' && toks[k + 1]?.t === 'id')
200
+ pendingFn = toks[k + 1].v;
201
+ if (tk.v === '{' && pendingFn) {
202
+ topFn = pendingFn;
203
+ pendingFn = '';
204
+ section = '';
205
+ }
206
+ if (tk.v === '}')
207
+ topFn = '';
208
+ continue;
209
+ }
210
+ if (tk.t === 'com') {
211
+ if (tk.nl) {
212
+ const n = sectionName(tk.v);
213
+ if (n)
214
+ section = n;
215
+ }
216
+ continue;
217
+ }
218
+ if (tk.v === '(')
219
+ callStack.push(toks[k - 1]?.t === 'id' && COLOR_CALL.test(toks[k - 1].v));
220
+ if (tk.v === ')')
221
+ callStack.pop();
222
+ if (!topFn || /^(NK_|KNOB_|_)/.test(topFn))
223
+ continue;
224
+ const prefix = section || (tk.t === 'num' ? assignTarget(toks, k) : '') || fnName(topFn);
225
+ /* x.fillStyle = … : the statement is a colour expression */
226
+ if (tk.t === 'id' && (STYLE_COLOR[tk.v] || STYLE_NUM[tk.v]) && toks[k - 1]?.v === '.' && toks[k + 1]?.v === '=' && toks[k + 2]?.v !== '=') {
227
+ const rhs = toks[k + 2], end = statementEnd(k + 2);
228
+ const whole = rhs && end === k + 3;
229
+ if (whole && rhs.t === 'num' && STYLE_NUM[tk.v] && Number(rhs.v) !== 0 && !(tk.v === 'globalAlpha' && Number(rhs.v) === 1))
230
+ hits.push({ tok: rhs, kind: STYLE_NUM[tk.v], prefix });
231
+ else if (whole && rhs.t === 'str' && STYLE_COLOR[tk.v] && isColor(rhs.v.slice(1, -1)))
232
+ hits.push({ tok: rhs, kind: STYLE_COLOR[tk.v], prefix });
233
+ else if (STYLE_COLOR[tk.v])
234
+ colorUntil = end;
235
+ continue;
236
+ }
237
+ /* any other colour written as text: addColorStop(0, '#ffb048'), shade('rgba(255,90,31,0.4)') */
238
+ if (tk.t === 'str') {
239
+ const p1 = toks[k - 1]?.v, p2 = toks[k - 2]?.v, n1 = toks[k + 1]?.v, n2 = toks[k + 2]?.v;
240
+ const compared = (p1 === '=' && (p2 === '=' || p2 === '!')) || (n1 === '=' && n2 === '=') || (n1 === '!' && n2 === '=');
241
+ const objectKey = n1 === ':' && (p1 === '{' || p1 === ',');
242
+ /* `i === T.sel ? '#ffb048' : …` is the selected colour: name it after the condition */
243
+ const branch = p1 === '?' ? conditionName(toks, k - 1) : '';
244
+ if (tk.v[0] !== '`' && isColor(tk.v.slice(1, -1)) && !compared && !objectKey && p1 !== '[' && !hits.some((h) => h.tok === tk))
245
+ hits.push({ tok: tk, kind: 'COLOR', prefix: branch || prefix });
246
+ continue;
247
+ }
248
+ if (tk.t !== 'num')
249
+ continue;
250
+ const v = Number(tk.v);
251
+ if (!Number.isFinite(v) || v === 0 || v === 1)
252
+ continue;
253
+ const prevMul = toks[k - 1]?.v === '*', nextMul = toks[k + 1]?.v === '*';
254
+ if (!prevMul && !nextMul)
255
+ continue;
256
+ /* t * 2.4, 2.4 * t, env.time * 0.35, dt * 2.6 */
257
+ if ((prevMul && isTimeOperand(k - 1, -1)) || (nextMul && isTimeOperand(k + 1, 1))) {
258
+ hits.push({ tok: tk, kind: 'SPEED', prefix });
259
+ continue;
260
+ }
261
+ /* 0.75 * ax inside rgba(…) or a fill/stroke style expression */
262
+ const inColor = k < colorUntil || callStack.some(Boolean);
263
+ if (inColor && v > 0 && v < 1 && toks[k - 1]?.v !== '.' && toks[k + 1]?.v !== '.')
264
+ hits.push({ tok: tk, kind: 'ALPHA', prefix });
265
+ }
266
+ if (!hits.length)
267
+ return { code, knobs: [], changed: false, reason: 'nothing to lift' };
268
+ /* names: SECTION_KIND; the same name with the same value shares one knob, a different value gets _2, _3 */
269
+ const knobs = new Map();
270
+ const byNameValue = new Map();
271
+ const names = [];
272
+ for (const h of hits) {
273
+ const value = h.tok.t === 'str' ? h.tok.v.slice(1, -1) : Number(h.tok.v);
274
+ const base = h.prefix ? `${h.prefix}_${h.kind}` : h.kind;
275
+ const key = `${base}=${value}`;
276
+ let name = byNameValue.get(key);
277
+ if (!name) {
278
+ name = base;
279
+ for (let n = 2; knobs.has(name) || used.has(name); n++)
280
+ name = `${base}_${n}`;
281
+ knobs.set(name, { name, value, count: 0 });
282
+ byNameValue.set(key, name);
283
+ }
284
+ knobs.get(name).count++;
285
+ names.push(name);
286
+ }
287
+ /* replace from the end so offsets stay valid */
288
+ let out = code;
289
+ for (let i = hits.length - 1; i >= 0; i--) {
290
+ const { tok } = hits[i];
291
+ out = out.slice(0, tok.s) + names[i] + out.slice(tok.e);
292
+ }
293
+ /* declarations, grouped by section, placed before the first top-level function */
294
+ const groups = new Map();
295
+ for (const kb of knobs.values()) {
296
+ const g = kb.name.replace(/_(WIDTH|ALPHA|BLUR|FILL|STROKE|SHADOW|SPEED|COLOR)(_\d+)?$/, '') || '';
297
+ (groups.get(g) || groups.set(g, []).get(g)).push(kb);
298
+ }
299
+ const lit = (x) => (typeof x === 'number' ? String(x) : `'${x.replace(/['\\\n]/g, '')}'`);
300
+ const decl = [...groups.values()].map((g) => `var ${g.map((kb) => `${kb.name} = ${lit(kb.value)}`).join(', ')};`).join('\n');
301
+ const mark = out.indexOf(KNOB_MARK);
302
+ if (mark >= 0) {
303
+ const at = mark + KNOB_MARK.length;
304
+ out = `${out.slice(0, at)}\n${decl}${out.slice(at)}`;
305
+ }
306
+ else {
307
+ const firstFn = toks.find((t) => t.depth === 0 && t.v === 'function');
308
+ /* the first function's own leading comment stays attached to it */
309
+ let at = firstFn ? firstFn.s : 0;
310
+ const fi = firstFn ? toks.indexOf(firstFn) : -1;
311
+ if (fi > 0 && toks[fi - 1].t === 'com' && toks[fi - 1].depth === 0 && fi > 1 && toks[fi - 1].nl) {
312
+ const prevCode = toks.slice(0, fi - 1).some((t) => t.t !== 'com');
313
+ if (prevCode)
314
+ at = toks[fi - 1].s;
315
+ }
316
+ const lineStart = out.lastIndexOf('\n', at - 1) + 1;
317
+ out = `${out.slice(0, lineStart)}${KNOB_MARK}\n${decl}\n\n${out.slice(lineStart)}`;
318
+ }
319
+ return { code: out, knobs: [...knobs.values()], changed: true };
320
+ }
321
+ /** Shared multi-part app/game scripts (the apps-topic convention: `var GAME = { part: 'world' };` + one script
322
+ * copied into several layers). Lifting their numbers would mint the same knobs once per layer, as
323
+ * meaningless inputs (riverSpeed, rocksSpeed2, …), so these are left as written. */
324
+ export function isSharedPartScript(code) {
325
+ return /^\s*var\s+[A-Za-z_$][\w$]*\s*=\s*\{\s*part\s*:/.test(code);
326
+ }
327
+ /** Lifts knobs in every CustomEffect of an artboard or multi-screen document, in place. */
328
+ export function liftKnobsInDoc(doc) {
329
+ const st = { effects: 0, changed: 0, knobs: 0, lines: [] };
330
+ const boards = Array.isArray(doc?.screens) && doc.screens.length ? [doc, ...doc.screens] : [doc];
331
+ const seen = new Set();
332
+ for (const b of boards) {
333
+ for (const o of b?.objects || []) {
334
+ for (const e of o?.style?.effects || []) {
335
+ if (e?.type !== 'CustomEffect' || typeof e.code !== 'string' || e.groupMirror === true || seen.has(e) || isSharedPartScript(e.code))
336
+ continue;
337
+ seen.add(e);
338
+ st.effects++;
339
+ const r = liftEffectKnobs(e.code);
340
+ if (!r.changed)
341
+ continue;
342
+ e.code = r.code;
343
+ st.changed++;
344
+ st.knobs += r.knobs.length;
345
+ st.lines.push(`${o.name || o.id}: ${r.knobs.map((k) => k.name).join(', ')}`);
346
+ }
347
+ }
348
+ }
349
+ return st;
350
+ }
351
+ /* ── runtime inputs ─────────────────────────────────────────────────────────────────────────────
352
+ * The runtime's controls list state-machine inputs, not code. Every top-level setting the editor
353
+ * shows (var NAME = <number | colour | boolean>) is also declared as an input, and the effect reads
354
+ * it each frame: a value the host sets wins; while the input sits at its default the code's value
355
+ * is used, so editing the setting in the editor still works. Regenerated on every MCP write. */
356
+ const BIND_BEGIN = '/* runtime inputs: each setting above is also a state-machine input (runtime controls). A value the host sets wins; at its default the setting above is used. */';
357
+ const BIND_END = '/* /runtime inputs */';
358
+ const INTERNAL = new Set(['LIB_ID', 'VW', 'VH', 'W', 'H', 'TAU', 'PI', 'PIN', 'NK_PIN', 'DEG', 'RAD', 'EPS', 'name', 'params', 'properties', 'schema']);
359
+ /** Top-level `var NAME = <number | colour string | boolean>` declarations: what the editor shows as parameters. */
360
+ export function topLevelSettings(code) {
361
+ const toks = tokenize(code);
362
+ const out = [];
363
+ for (let k = 0; k < toks.length; k++) {
364
+ const t = toks[k];
365
+ if (t.depth !== 0 || !/^(var|let|const)$/.test(t.v) || t.t !== 'id')
366
+ continue;
367
+ let j = k + 1;
368
+ for (;;) {
369
+ const id = toks[j], eq = toks[j + 1];
370
+ if (!id || id.t !== 'id' || eq?.v !== '=')
371
+ break;
372
+ let p = j + 2, neg = false;
373
+ if (toks[p]?.v === '-' && toks[p + 1]?.t === 'num') {
374
+ neg = true;
375
+ p++;
376
+ }
377
+ const lit = toks[p], after = toks[p + 1];
378
+ const ends = !after || after.v === ',' || after.v === ';' || (after.nl && after.depth === 0);
379
+ let value = null;
380
+ if (lit && ends) {
381
+ if (lit.t === 'num')
382
+ value = (neg ? -1 : 1) * Number(lit.v);
383
+ else if (lit.t === 'str' && lit.v[0] !== '`' && isColor(lit.v.slice(1, -1)))
384
+ value = lit.v.slice(1, -1);
385
+ else if (lit.t === 'id' && (lit.v === 'true' || lit.v === 'false'))
386
+ value = lit.v === 'true';
387
+ }
388
+ if (value !== null && !INTERNAL.has(id.v) && !/^(_|NK_|KNOB_)/.test(id.v))
389
+ out.push({ name: id.v, value });
390
+ /* skip to the next declarator in this statement */
391
+ let q = j + 2;
392
+ for (; q < toks.length; q++) {
393
+ const x = toks[q];
394
+ if (x.depth === 0 && (x.v === ',' || x.v === ';'))
395
+ break;
396
+ if (q > j + 2 && x.depth === 0 && x.nl) {
397
+ q = -1;
398
+ break;
399
+ }
400
+ }
401
+ if (q < 0 || toks[q]?.v !== ',')
402
+ break;
403
+ j = q + 1;
404
+ }
405
+ }
406
+ return out;
407
+ }
408
+ const camel = (n) => n.toLowerCase().replace(/_([a-z0-9])/g, (_m, c) => c.toUpperCase());
409
+ const idCamel = (id) => { const s = String(id).split(/[^A-Za-z0-9]+/).filter(Boolean); if (s.length > 1 && s[0].length <= 2)
410
+ s.shift(); return camel(s.join('_')); };
411
+ const lit = (v) => (typeof v === 'string' ? `'${v.replace(/['\\\n]/g, '')}'` : String(v));
412
+ function stripBinding(code) {
413
+ const a = code.indexOf(BIND_BEGIN);
414
+ if (a >= 0) {
415
+ const b = code.indexOf(BIND_END, a);
416
+ if (b >= 0)
417
+ code = code.slice(0, a).replace(/\n+$/, '\n') + code.slice(b + BIND_END.length).replace(/^\n+/, '');
418
+ }
419
+ return code.replace(/(function\s+(?:render|update)\s*\([^)]*\)\s*\{)\s*KNOB_apply\([^)]*\);/g, '$1');
420
+ }
421
+ /** The input names an effect's binding block already uses, by setting. */
422
+ function boundNames(code) {
423
+ const m = new Map();
424
+ for (const x of code.matchAll(/\b([A-Za-z_$][\w$]*) = KNOB_in\(e, '([^']+)'/g))
425
+ m.set(x[1], x[2]);
426
+ return m;
427
+ }
428
+ /** Writes the binding block for `binds` (setting → input name); with none, removes it. */
429
+ export function bindEffectCode(code, binds) {
430
+ let out = stripBinding(code);
431
+ if (!binds.length)
432
+ return out;
433
+ const block = [
434
+ BIND_BEGIN,
435
+ 'function KNOB_in(e, name, def, cur) {',
436
+ ' var v = e && e.input ? e.input(name) : e && e.inputs ? e.inputs[name] : undefined;',
437
+ " if (v === undefined || v === null || v === '' || String(v) === String(def)) return cur;",
438
+ " if (typeof def === 'number') { v = Number(v); return isNaN(v) ? cur : v; }",
439
+ " if (typeof def === 'boolean') return v === true || v === 'true' || v === 1;",
440
+ ' return String(v);',
441
+ '}',
442
+ `var KNOB_BASE = { ${binds.map((b) => `${b.name}: ${b.name}`).join(', ')} };`,
443
+ 'function KNOB_apply(e) {',
444
+ ...binds.map((b) => ` ${b.name} = KNOB_in(e, '${b.input}', ${lit(b.value)}, KNOB_BASE.${b.name});`),
445
+ '}',
446
+ BIND_END,
447
+ ].join('\n');
448
+ out = out.replace(/\s*$/, '\n\n') + block + '\n';
449
+ /* every entry point applies the inputs first */
450
+ return out.replace(/(function\s+(render|update)\s*\(([^)]*)\)\s*\{)/g, (_m, head, fn, args) => {
451
+ const a = args.split(',').map((s) => s.trim());
452
+ const env = (fn === 'render' ? a[1] : a[0]) || 'env';
453
+ return `${head} KNOB_apply(${env});`;
454
+ });
455
+ }
456
+ /**
457
+ * Declares a state-machine input for every effect setting on one artboard (or screen) and binds the
458
+ * code to it. Input names: the setting in camelCase (bloomWidth), prefixed with the layer id when two
459
+ * effects would share a name (camMotionYawSpeed). Defaults follow the code's current values.
460
+ */
461
+ export function bindKnobInputs(board) {
462
+ const st = { effects: 0, inputs: 0, lines: [] };
463
+ if (!board || !Array.isArray(board.objects))
464
+ return st;
465
+ const sm = board.stateMachine || (board.stateMachine = { inputs: [], layers: [], logicNodes: [] });
466
+ if (!Array.isArray(sm.inputs))
467
+ sm.inputs = [];
468
+ /* names our blocks already own; every other existing input name is taken */
469
+ const ours = new Map(); // input name -> owner key
470
+ const owned = [];
471
+ for (const o of board.objects)
472
+ for (const e of o?.style?.effects || []) {
473
+ if (e?.type !== 'CustomEffect' || typeof e.code !== 'string' || e.groupMirror === true || isSharedPartScript(e.code))
474
+ continue;
475
+ const prev = boundNames(e.code);
476
+ for (const [n, inp] of prev)
477
+ ours.set(inp, `${o.id}/${n}`);
478
+ owned.push({ o, e, prev });
479
+ }
480
+ const taken = new Set(sm.inputs.map((i) => i?.name).filter((n) => typeof n === 'string' && !ours.has(n)));
481
+ const claimed = new Map(); // input name -> owner key, this pass
482
+ for (const { o, e, prev } of owned) {
483
+ if (liftable(e.code)) {
484
+ if (prev.size)
485
+ e.code = stripBinding(e.code);
486
+ continue;
487
+ }
488
+ const settings = topLevelSettings(stripBinding(e.code));
489
+ const binds = [];
490
+ for (const s of settings) {
491
+ const owner = `${o.id}/${s.name}`;
492
+ let input = prev.get(s.name) || camel(s.name);
493
+ if (taken.has(input) || (claimed.has(input) && claimed.get(input) !== owner))
494
+ input = idCamel(o.id) + s.name.charAt(0) + camel(s.name).slice(1);
495
+ for (let n = 2; taken.has(input) || (claimed.has(input) && claimed.get(input) !== owner); n++)
496
+ input = `${idCamel(o.id)}${s.name.charAt(0)}${camel(s.name).slice(1)}${n}`;
497
+ claimed.set(input, owner);
498
+ binds.push({ name: s.name, input, value: s.value });
499
+ }
500
+ const next = bindEffectCode(e.code, binds);
501
+ if (next !== e.code)
502
+ e.code = next;
503
+ if (!binds.length)
504
+ continue;
505
+ st.effects++;
506
+ for (const b of binds) {
507
+ const type = typeof b.value === 'number' ? 'Number' : typeof b.value === 'boolean' ? 'Boolean' : 'Color';
508
+ const value = { type, value: b.value, defaultValue: b.value };
509
+ if (type === 'Number') {
510
+ const v = b.value, a = Math.abs(v);
511
+ value.min = v < 0 ? v * 3 : 0;
512
+ value.max = v === 0 ? 1 : a * 3;
513
+ value.step = Number.isInteger(v) && a >= 1 ? 1 : Math.pow(10, Math.floor(Math.log10(a || 1)) - 1);
514
+ }
515
+ const i = sm.inputs.findIndex((x) => x?.name === b.input);
516
+ if (i >= 0)
517
+ sm.inputs[i] = { ...sm.inputs[i], value: { ...(sm.inputs[i].value || {}), ...value } };
518
+ else
519
+ sm.inputs.push({ id: b.input, name: b.input, value });
520
+ st.inputs++;
521
+ }
522
+ st.lines.push(`${o.name || o.id}: ${binds.map((b) => b.input).join(', ')}`);
523
+ }
524
+ /* inputs a removed setting used to own */
525
+ const live = new Set(claimed.keys());
526
+ sm.inputs = sm.inputs.filter((i) => !(ours.has(i?.name) && !live.has(i.name)));
527
+ return st;
528
+ }
529
+ /** bindKnobInputs on an artboard or every screen of a multi-screen document. */
530
+ export function bindKnobsInDoc(doc) {
531
+ const boards = Array.isArray(doc?.screens) && doc.screens.length ? [doc, ...doc.screens] : [doc];
532
+ const all = { effects: 0, inputs: 0, lines: [] };
533
+ for (const b of boards) {
534
+ const r = bindKnobInputs(b);
535
+ all.effects += r.effects;
536
+ all.inputs += r.inputs;
537
+ all.lines.push(...r.lines);
538
+ }
539
+ return all;
540
+ }
541
+ //# sourceMappingURL=effectKnobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effectKnobs.js","sourceRoot":"","sources":["effectKnobs.ts"],"names":[],"mappings":"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"}