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.
- package/MCP_DOCUMENTATION.md +1 -0
- package/SKILL.md +10 -0
- package/examples/aurum-product-page.exode +3208 -0
- package/examples/bell-ring-icon.exode +1 -0
- package/examples/drift-kinetic-type.exode +770 -0
- package/examples/earbuds-product.exode +214 -0
- package/examples/energy-flow.exode +1736 -0
- package/examples/flux-hero.exode +223 -0
- package/examples/gooey-toggle.exode +214 -0
- package/examples/gravity-well.exode +3113 -0
- package/examples/heart-icon.exode +1 -0
- package/examples/hologram-temple.exode +8100 -0
- package/examples/jarful-app.exode +1 -0
- package/examples/kip-character-rig.exode +1 -0
- package/examples/low-tide-tilt.exode +2216 -0
- package/examples/manifest.json +352 -0
- package/examples/swipe-stack-carousel.exode +4048 -0
- package/examples/tokyo-neon-weather.exode +470 -0
- package/examples/typographic-collapse.exode +1578 -0
- package/examples/void-product-ad.exode +1269 -0
- package/examples/wire-globe-card.exode +580 -0
- package/index.d.ts +41 -1
- package/index.js +2554 -2408
- package/package.json +6 -2
- package/render-runtime/exode-runtime.js +20 -20
- package/skills/creative-motion/SKILL.md +10 -0
- package/skills/creative-motion/recipes/character-rig.js +104 -0
- package/skills/creative-motion/recipes/dashboard.js +120 -0
- package/skills/creative-motion/recipes/game-arcade.js +203 -0
- package/skills/creative-motion/recipes/hero-physics.js +65 -0
- package/skills/creative-motion/recipes/pricing.js +88 -0
- package/skills/creative-motion/recipes/title-sequence.js +62 -0
- package/skills/creative-motion/references/apps.md +37 -0
- package/skills/creative-motion/references/gotchas.md +80 -0
- package/skills/creative-motion/references/native-layers.md +60 -0
- package/skills/creative-motion/references/quality.md +54 -0
- package/src/__tests__/buildKit.test.ts +127 -0
- package/src/__tests__/effectKnobs.test.ts +162 -0
- package/src/__tests__/nativeLayers.test.ts +178 -0
- package/src/buildKit.d.ts +301 -0
- package/src/buildKit.d.ts.map +1 -0
- package/src/buildKit.js +559 -0
- package/src/buildKit.js.map +1 -0
- package/src/buildKit.ts +520 -0
- package/src/compiler.d.ts +4 -0
- package/src/compiler.d.ts.map +1 -1
- package/src/compiler.js +21 -45
- package/src/compiler.js.map +1 -1
- package/src/compiler.ts +22 -51
- package/src/critique.d.ts +8 -0
- package/src/critique.d.ts.map +1 -0
- package/src/critique.js +348 -0
- package/src/critique.js.map +1 -0
- package/src/critique.ts +239 -0
- package/src/effectKnobs.d.ts +72 -0
- package/src/effectKnobs.d.ts.map +1 -0
- package/src/effectKnobs.js +541 -0
- package/src/effectKnobs.js.map +1 -0
- package/src/effectKnobs.ts +445 -0
- package/src/effectOptimizer.d.ts +18 -0
- package/src/effectOptimizer.d.ts.map +1 -0
- package/src/effectOptimizer.js +125 -0
- package/src/effectOptimizer.js.map +1 -0
- package/src/effectOptimizer.ts +104 -0
- package/src/engine/layout.js +1 -1
- package/src/engine/layout.js.map +1 -1
- package/src/engine/layout.ts +1 -1
- package/src/examples.d.ts +30 -0
- package/src/examples.d.ts.map +1 -0
- package/src/examples.js +168 -0
- package/src/examples.js.map +1 -0
- package/src/examples.ts +151 -0
- package/src/handlers/artboardHandlers.d.ts.map +1 -1
- package/src/handlers/artboardHandlers.js +45 -10
- package/src/handlers/artboardHandlers.js.map +1 -1
- package/src/handlers/artboardHandlers.ts +43 -12
- package/src/handlers/buildHandlers.d.ts +2 -0
- package/src/handlers/buildHandlers.d.ts.map +1 -0
- package/src/handlers/buildHandlers.js +86 -0
- package/src/handlers/buildHandlers.js.map +1 -0
- package/src/handlers/buildHandlers.ts +76 -0
- package/src/handlers/compilerHandlers.d.ts.map +1 -1
- package/src/handlers/compilerHandlers.js +32 -2
- package/src/handlers/compilerHandlers.js.map +1 -1
- package/src/handlers/compilerHandlers.ts +31 -2
- package/src/handlers/exampleHandlers.d.ts +2 -0
- package/src/handlers/exampleHandlers.d.ts.map +1 -0
- package/src/handlers/exampleHandlers.js +81 -0
- package/src/handlers/exampleHandlers.js.map +1 -0
- package/src/handlers/exampleHandlers.ts +76 -0
- package/src/handlers/renderHandlers.d.ts.map +1 -1
- package/src/handlers/renderHandlers.js +100 -2
- package/src/handlers/renderHandlers.js.map +1 -1
- package/src/handlers/renderHandlers.ts +90 -2
- package/src/handlers/scaffoldHandlers.d.ts.map +1 -1
- package/src/handlers/scaffoldHandlers.js +3 -0
- package/src/handlers/scaffoldHandlers.js.map +1 -1
- package/src/handlers/scaffoldHandlers.ts +2 -0
- package/src/handlers/widgetHandlers.js +1 -1
- package/src/handlers/widgetHandlers.js.map +1 -1
- package/src/handlers/widgetHandlers.ts +1 -1
- package/src/lottie/convert.d.ts +16 -0
- package/src/lottie/convert.d.ts.map +1 -0
- package/src/lottie/convert.js +1225 -0
- package/src/lottie/convert.js.map +1 -0
- package/src/lottie/convert.ts +1134 -0
- package/src/lottie/evaluate.d.ts +48 -0
- package/src/lottie/evaluate.d.ts.map +1 -0
- package/src/lottie/evaluate.js +174 -0
- package/src/lottie/evaluate.js.map +1 -0
- package/src/lottie/evaluate.ts +184 -0
- package/src/nativeLayers.d.ts +76 -0
- package/src/nativeLayers.d.ts.map +1 -0
- package/src/nativeLayers.js +404 -0
- package/src/nativeLayers.js.map +1 -0
- package/src/nativeLayers.ts +339 -0
- package/src/render/motionBrief.d.ts.map +1 -1
- package/src/render/motionBrief.js +4 -0
- package/src/render/motionBrief.js.map +1 -1
- package/src/render/motionBrief.ts +4 -0
- package/src/render/videoRenderer.d.ts.map +1 -1
- package/src/render/videoRenderer.js +5 -2
- package/src/render/videoRenderer.js.map +1 -1
- package/src/render/videoRenderer.ts +5 -2
- package/src/rive/convert.d.ts +17 -0
- package/src/rive/convert.d.ts.map +1 -0
- package/src/rive/convert.js +1779 -0
- package/src/rive/convert.js.map +1 -0
- package/src/rive/convert.ts +1492 -0
- package/src/rive/font.d.ts +13 -0
- package/src/rive/font.d.ts.map +1 -0
- package/src/rive/font.js +154 -0
- package/src/rive/font.js.map +1 -0
- package/src/rive/font.ts +132 -0
- package/src/rive/layout.d.ts +20 -0
- package/src/rive/layout.d.ts.map +1 -0
- package/src/rive/layout.js +145 -0
- package/src/rive/layout.js.map +1 -0
- package/src/rive/layout.ts +140 -0
- package/src/rive/reader.d.ts +32 -0
- package/src/rive/reader.d.ts.map +1 -0
- package/src/rive/reader.js +172 -0
- package/src/rive/reader.js.map +1 -0
- package/src/rive/reader.ts +160 -0
- package/src/rive/schema.generated.d.ts +9 -0
- package/src/rive/schema.generated.d.ts.map +1 -0
- package/src/rive/schema.generated.js +13 -0
- package/src/rive/schema.generated.js.map +1 -0
- package/src/rive/schema.generated.ts +13 -0
- package/src/schema.d.ts +5 -0
- package/src/schema.d.ts.map +1 -1
- package/src/schema.js +5 -0
- package/src/schema.js.map +1 -1
- package/src/schema.ts +6 -0
- package/src/serverInstructions.d.ts +2 -0
- package/src/serverInstructions.d.ts.map +1 -0
- package/src/serverInstructions.js +22 -0
- package/src/serverInstructions.js.map +1 -0
- package/src/serverInstructions.ts +21 -0
- package/src/sseServer.d.ts +2 -0
- package/src/sseServer.d.ts.map +1 -0
- package/src/sseServer.js +165 -0
- package/src/sseServer.js.map +1 -0
- package/src/sseServer.ts +189 -0
- package/src/utils.d.ts.map +1 -1
- package/src/utils.js +23 -1
- package/src/utils.js.map +1 -1
- package/src/utils.ts +13 -1
- package/src/widgets.d.ts +26 -0
- package/src/widgets.d.ts.map +1 -1
- package/src/widgets.js +89 -45
- package/src/widgets.js.map +1 -1
- 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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"}
|