pixi-effects 0.48.2 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/README.md +53 -8
- package/ai/chat-template.html +8 -4
- package/ai/tools/check.mjs +6 -6
- package/dist/3d.cjs +967 -0
- package/dist/3d.cjs.map +1 -0
- package/dist/3d.d.cts +305 -0
- package/dist/3d.d.ts +305 -0
- package/dist/3d.js +960 -0
- package/dist/3d.js.map +1 -0
- package/dist/Canvas-BfZkAFJm.d.cts +12 -0
- package/dist/Canvas-BfZkAFJm.d.ts +12 -0
- package/dist/Composition-47U5U637.cjs +16 -0
- package/dist/{Composition-TJ5D7Z63.cjs.map → Composition-47U5U637.cjs.map} +1 -1
- package/dist/Composition-GVWWLFDL.js +7 -0
- package/dist/{Composition-5FKV2IBP.js.map → Composition-GVWWLFDL.js.map} +1 -1
- package/dist/Controller.d.cts +2 -2
- package/dist/Controller.d.ts +2 -2
- package/dist/{Movie-svZQF-9Z.d.cts → Movie-DogzDBuW.d.cts} +36 -5
- package/dist/{Movie--qSYKgAQ.d.ts → Movie-Y7iHg2V8.d.ts} +36 -5
- package/dist/{Spans-6A3VLHRH.js → Spans-3SEZSTQV.js} +6 -6
- package/dist/{Spans-6A3VLHRH.js.map → Spans-3SEZSTQV.js.map} +1 -1
- package/dist/{Spans-5ENZ3XGS.cjs → Spans-R426NVY3.cjs} +11 -11
- package/dist/{Spans-5ENZ3XGS.cjs.map → Spans-R426NVY3.cjs.map} +1 -1
- package/dist/{blendModes-V5XHC7U4.cjs → blendModes-2IDILRN6.cjs} +5 -5
- package/dist/{blendModes-V5XHC7U4.cjs.map → blendModes-2IDILRN6.cjs.map} +1 -1
- package/dist/{blendModes-535EMYGK.js → blendModes-4QH44GOL.js} +4 -4
- package/dist/{blendModes-535EMYGK.js.map → blendModes-4QH44GOL.js.map} +1 -1
- package/dist/{chunk-NGJXVJB7.cjs → chunk-3FCDRLW3.cjs} +5 -3
- package/dist/chunk-3FCDRLW3.cjs.map +1 -0
- package/dist/{chunk-JBDBICS2.js → chunk-C2HL5236.js} +4 -4
- package/dist/{chunk-JBDBICS2.js.map → chunk-C2HL5236.js.map} +1 -1
- package/dist/{chunk-WYR2AU4W.cjs → chunk-GXGIISFS.cjs} +5 -5
- package/dist/{chunk-WYR2AU4W.cjs.map → chunk-GXGIISFS.cjs.map} +1 -1
- package/dist/{chunk-BFRWSV3R.js → chunk-J4ZP76IL.js} +5 -4
- package/dist/chunk-J4ZP76IL.js.map +1 -0
- package/dist/{chunk-CCPJD76D.cjs → chunk-O2MD3L4J.cjs} +93 -93
- package/dist/chunk-O2MD3L4J.cjs.map +1 -0
- package/dist/{chunk-IVKI6CPH.js → chunk-SSVHAF3Q.js} +483 -20
- package/dist/chunk-SSVHAF3Q.js.map +1 -0
- package/dist/{chunk-6D4W2KZQ.js → chunk-TXNQLMRT.js} +6 -6
- package/dist/chunk-TXNQLMRT.js.map +1 -0
- package/dist/{chunk-RCKLUCB7.js → chunk-UTUUOQ47.js} +46 -20
- package/dist/chunk-UTUUOQ47.js.map +1 -0
- package/dist/{chunk-Z3DM4ETD.cjs → chunk-VVUSZVP7.cjs} +507 -42
- package/dist/chunk-VVUSZVP7.cjs.map +1 -0
- package/dist/{chunk-45ALIMAF.cjs → chunk-YOKRPAKA.cjs} +89 -63
- package/dist/chunk-YOKRPAKA.cjs.map +1 -0
- package/dist/index.cjs +35 -35
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +5 -5
- package/dist/loader.css +1 -1
- package/dist/{music-P4JRT73P.js → music-ATX22VAT.js} +3 -3
- package/dist/{music-P4JRT73P.js.map → music-ATX22VAT.js.map} +1 -1
- package/dist/{music-XQEPBIDT.cjs → music-OFVM3PYH.cjs} +3 -3
- package/dist/{music-XQEPBIDT.cjs.map → music-OFVM3PYH.cjs.map} +1 -1
- package/dist/present.cjs +5 -5
- package/dist/present.d.cts +2 -2
- package/dist/present.d.ts +2 -2
- package/dist/present.js +5 -5
- package/dist/three.cjs +13 -10
- package/dist/three.cjs.map +1 -1
- package/dist/three.d.cts +4 -12
- package/dist/three.d.ts +4 -12
- package/dist/three.js +8 -5
- package/dist/three.js.map +1 -1
- package/dist/{types-CTSrPvY3.d.cts → types-BZngm4nT.d.cts} +48 -5
- package/dist/{types-CTSrPvY3.d.ts → types-BZngm4nT.d.ts} +48 -5
- package/docs/api.md +45 -2
- package/docs/dsl.md +115 -1
- package/llms-full.txt +307 -6
- package/package.json +19 -3
- package/skills/pixi-effects/SKILL.md +4 -2
- package/skills/pixi-effects/reference/cheatsheet.md +4 -0
- package/skills/pixi-effects/reference/pitfalls.md +20 -0
- package/skills/pixi-effects/reference/recipes.md +119 -1
- package/skills/pixi-effects/template.html +14 -8
- package/dist/Composition-5FKV2IBP.js +0 -7
- package/dist/Composition-TJ5D7Z63.cjs +0 -16
- package/dist/chunk-45ALIMAF.cjs.map +0 -1
- package/dist/chunk-6D4W2KZQ.js.map +0 -1
- package/dist/chunk-BFRWSV3R.js.map +0 -1
- package/dist/chunk-CCPJD76D.cjs.map +0 -1
- package/dist/chunk-IVKI6CPH.js.map +0 -1
- package/dist/chunk-NGJXVJB7.cjs.map +0 -1
- package/dist/chunk-RCKLUCB7.js.map +0 -1
- package/dist/chunk-Z3DM4ETD.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/spring.ts","../src/core/cubicBezier.ts","../src/core/pure/ease.ts","../src/core/pure/colorLerp.ts","../src/core/pure/props.ts","../src/core/pure/PureTimeline.ts","../src/core/timelineEngine.ts","../src/expr/random.ts","../src/expr/Parser.ts","../src/expr/normalizeProps.ts","../src/core/ease.ts","../src/core/Timeline.ts","../src/expr/Scope.ts","../src/filters/ChromaKey.ts","../src/filters/Grain.ts","../src/filters/Warp.ts","../src/filters/named.ts","../src/filters/index.ts","../src/sequences/Base.ts","../src/sequences/Null.ts","../src/sequences/gradient.ts","../src/expr/colorInterp.ts","../src/sequences/gradientAnim.ts","../src/core/revertibleSet.ts","../src/expr/colorTween.ts","../src/text/styleKeys.ts","../src/sequences/Text.ts","../src/core/remap.ts","../src/space/math.ts","../src/space/focus.ts","../src/space/CameraSequence.ts","../src/space/lighting.ts","../src/space/LightSequence.ts","../src/text/spans.ts","../src/sequences/Image.ts","../src/sequences/Audio.ts","../src/core/FrameCache.ts","../src/core/sourceTime.ts","../src/sequences/Video.ts","../src/sequences/gradientFill.ts","../src/sequences/trimPath.ts","../src/sequences/morphPath.ts","../src/sequences/Shape.ts","../src/core/glShared.ts","../src/core/shaderChecks.ts","../src/sequences/Shader.ts","../src/sequences/Canvas.ts","../src/core/Composition.ts"],"names":["at","read","write","Color","mix","parse","suggestName","sub","dot","Filter","GlProgram","defaultFilterVert","GpuProgram","UniformGroup","GL_FRAGMENT","WGSL_SOURCE","warnUnknownOptions","DEG","HASH_GL","GL_VERTEX","BlurFilter","NoiseFilter","AlphaFilter","ColorMatrixFilter","xy","inst","Rectangle","Container","Texture","FillGradient","warned","Text","describeLayer","scope","collectPropKeys","CanvasTextMetrics","align","TextStyle","width","Assets","Sprite","stripKeys","lookup","GraphicsPath","out","a","Graphics","points","num","live","RESERVED","registry"],"mappings":"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","file":"chunk-Z3DM4ETD.cjs","sourcesContent":["/**\n * Spring easing . A unit step response of a damped mass-spring system:\n * m x'' + c x' + k x = k with x(0) = 0, x'(0) = 0, target 1.\n * Closed form, so it is a pure function of time: seek-safe in both directions, no state, no integration.\n *\n * An ease only sees progress p (0..1), not seconds, so the spring is stretched in time: p = 1 is the moment the spring\n * has settled (|x - 1| <= SETTLE_TOL), and the result is divided by x(T) so it ends exactly on 1.\n * With `duration: 'auto'` (springDuration) the keyframe lasts exactly T seconds, and then the timing is the real physics.\n */\nexport interface SpringParams { mass?: number; stiffness?: number; damping?: number }\n\nexport const SETTLE_TOL = 0.005;\nconst DEFAULTS = { mass: 1, stiffness: 100, damping: 10 };\n\n/** Unit step response at t seconds. */\nexport function springResponse(t: number, { mass: m, stiffness: k, damping: c }: Required<SpringParams>): number {\n if (t <= 0) return 0;\n const w0 = Math.sqrt(k / m);\n const zeta = c / (2 * Math.sqrt(k * m));\n if (Math.abs(zeta - 1) < 1e-6) return 1 - Math.exp(-w0 * t) * (1 + w0 * t); // critically damped\n if (zeta < 1) { // under-damped: overshoots, rings\n const wd = w0 * Math.sqrt(1 - zeta * zeta);\n return 1 - Math.exp(-zeta * w0 * t) * (Math.cos(wd * t) + (zeta * w0 / wd) * Math.sin(wd * t));\n }\n const s = w0 * Math.sqrt(zeta * zeta - 1); // over-damped: slow, no overshoot\n const r1 = -zeta * w0 + s, r2 = -zeta * w0 - s; // both negative\n return 1 - (r2 * Math.exp(r1 * t) - r1 * Math.exp(r2 * t)) / (r2 - r1);\n}\n\nfunction complete(p: SpringParams): Required<SpringParams> {\n return { mass: p.mass ?? DEFAULTS.mass, stiffness: p.stiffness ?? DEFAULTS.stiffness, damping: p.damping ?? DEFAULTS.damping };\n}\n\n/** Seconds until the spring stays within `tol` (0.5 %) of its target for good. Exact (bisection on the last crossing), not an envelope bound. */\nexport function springDuration(params: SpringParams = {}, tol = SETTLE_TOL): number {\n const p = complete(params);\n const w0 = Math.sqrt(p.stiffness / p.mass);\n const zeta = p.damping / (2 * Math.sqrt(p.stiffness * p.mass));\n const bad = (t: number) => Math.abs(1 - springResponse(t, p)) > tol;\n let lo: number, hi: number; // bad(lo) true, bad(hi) false, and bad stays false after hi\n if (zeta < 1 - 1e-6) {\n // extrema are at n*pi/wd with error exp(-n*pi*zeta/sqrt(1-zeta^2)); find the first one inside the tolerance\n const wd = w0 * Math.sqrt(1 - zeta * zeta);\n const decay = Math.PI * zeta / Math.sqrt(1 - zeta * zeta);\n const n = Math.max(1, Math.ceil(Math.log(1 / tol) / decay));\n lo = ((n - 1) * Math.PI) / wd; hi = (n * Math.PI) / wd;\n } else { // error only shrinks: grow until inside\n lo = 0; hi = 1 / w0;\n while (bad(hi)) { lo = hi; hi *= 2; }\n }\n for (let i = 0; i < 60; i++) { const mid = (lo + hi) / 2; if (bad(mid)) lo = mid; else hi = mid; }\n return hi;\n}\n\n/** The ease: progress 0..1 -> 0..1 (overshoots above 1 when under-damped), exactly 0 at 0 and exactly 1 at 1. */\nexport function springEase(params: SpringParams = {}): (p: number) => number {\n const sp = complete(params);\n const T = springDuration(sp);\n const end = springResponse(T, sp);\n return (p) => (p <= 0 ? 0 : p >= 1 ? 1 : springResponse(p * T, sp) / end);\n}\n\nexport const SPRING_PRESETS: Record<string, Required<SpringParams>> = {\n gentle: { mass: 1, stiffness: 100, damping: 15 }, // zeta .75, one soft overshoot\n snappy: { mass: 1, stiffness: 300, damping: 28 }, // zeta .81, quick, barely rings\n bouncy: { mass: 1, stiffness: 170, damping: 10 }, // zeta .38\n wobbly: { mass: 1, stiffness: 120, damping: 6 }, // zeta .27, rings several times\n slow: { mass: 1, stiffness: 60, damping: 18 }, // zeta 1.16, no overshoot\n};\n\nconst SPRING_RE = /^spring(?:\\.(\\w+)|\\(([^)]*)\\))?$/;\n\n/** Why a spring ease string is malformed, or null. (Used by the \"unknown ease\" warning.) */\nexport function springProblem(name: string): string | null {\n const m = SPRING_RE.exec(name.trim());\n if (!m) return 'expected \"spring(mass, stiffness, damping)\" or \"spring.<preset>\"';\n if (m[1] && !SPRING_PRESETS[m[1]]) return `no preset \"${m[1]}\" (presets: ${Object.keys(SPRING_PRESETS).join(', ')})`;\n if (m[2] !== undefined && m[2].trim() !== '') {\n const nums = m[2].split(',').map(s => Number(s.trim()));\n if (nums.length > 3 || nums.some(n => !Number.isFinite(n) || n <= 0)) return 'mass, stiffness and damping must be 1 to 3 numbers greater than 0';\n }\n return null;\n}\n\n/** Parse the spring parameters out of an ease string ('spring(1,170,12)', 'spring.bouncy', 'spring'), or null if it is not a (valid) spring. */\nexport function parseSpring(name: unknown): Required<SpringParams> | null {\n if (typeof name !== 'string' || !/^\\s*spring/.test(name) || springProblem(name)) return null;\n const m = SPRING_RE.exec(name.trim())!;\n if (m[1]) return SPRING_PRESETS[m[1]]!;\n const [mass, stiffness, damping] = (m[2] ?? '').split(',').map(s => s.trim()).filter(Boolean).map(Number);\n return complete({ mass, stiffness, damping });\n}\n\nconst autoWarned = new Set<string>();\n/** A keyframe's length in seconds: a number, or 'auto' = the time its spring ease takes to settle (0.5 %). */\nexport function kfDuration(kf: { duration?: number | 'auto'; ease?: string }): number {\n if (kf.duration !== 'auto') return kf.duration ?? 0;\n const sp = parseSpring(kf.ease);\n if (sp) return Math.round(springDuration(sp) * 1000) / 1000;\n const name = String(kf.ease ?? 'none');\n // a malformed spring is already reported by checkEase; saying \"needs a spring ease\" about a spring would only confuse\n if (!/^\\s*spring/.test(name) && !autoWarned.has(name)) {\n autoWarned.add(name);\n console.warn(`pixi-effects: keyframe duration 'auto' needs a spring ease (ease: 'spring(1, 170, 12)' or 'spring.bouncy'), got ease ${JSON.stringify(name)} — using 0.5 s.`);\n }\n return 0.5;\n}\n\n","\n/**\n * CSS `cubic-bezier(x1, y1, x2, y2)` as an ease.\n * The curve is (0,0) (x1,y1) (x2,y2) (1,1); x is time, y is progress. Solve x(t) = p for t (Newton, then bisection when the slope is\n * flat) and return y(t). Exactly 0 at 0 and 1 at 1; y may leave 0..1 (an overshoot), x1 and x2 may not (the CSS rule).\n */\nexport function cubicBezierEase(x1: number, y1: number, x2: number, y2: number): (p: number) => number {\n const cx = 3 * x1, bx = 3 * (x2 - x1) - cx, ax = 1 - cx - bx;\n const cy = 3 * y1, by = 3 * (y2 - y1) - cy, ay = 1 - cy - by;\n const X = (t: number): number => ((ax * t + bx) * t + cx) * t;\n const Y = (t: number): number => ((ay * t + by) * t + cy) * t;\n const dX = (t: number): number => (3 * ax * t + 2 * bx) * t + cx;\n return (p) => {\n if (p <= 0) return 0;\n if (p >= 1) return 1;\n let t = p;\n for (let i = 0; i < 8; i++) { // Newton: quadratic convergence when the slope is healthy\n const err = X(t) - p;\n if (Math.abs(err) < 1e-9) return Y(t);\n const d = dX(t);\n if (Math.abs(d) < 1e-6) break;\n t -= err / d;\n }\n let lo = 0, hi = 1; t = p; // bisection: always converges (x is monotone for x1, x2 in 0..1)\n for (let i = 0; i < 60; i++) {\n const x = X(t);\n if (Math.abs(x - p) < 1e-10) break;\n if (x < p) lo = t; else hi = t;\n t = (lo + hi) / 2;\n }\n return Y(t);\n };\n}\n\nconst NUM = String.raw`\\s*(-?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?)\\s*`;\nconst RE = new RegExp(`^\\\\s*cubic-bezier\\\\(${NUM},${NUM},${NUM},${NUM}\\\\)\\\\s*$`, 'i');\n\n/** The four numbers of a well-formed `cubic-bezier(x1, y1, x2, y2)` string, or null. */\nexport function parseCubicBezier(name: string): [number, number, number, number] | null {\n const m = RE.exec(name);\n return m && !cubicBezierProblem(name) ? [Number(m[1]), Number(m[2]), Number(m[3]), Number(m[4])] : null;\n}\n\n/** Why a cubic-bezier ease string is malformed, or null. */\nexport function cubicBezierProblem(name: string): string | null {\n const m = RE.exec(name);\n if (!m) return 'expected \"cubic-bezier(x1, y1, x2, y2)\" with four numbers, like CSS';\n const x1 = Number(m[1]), x2 = Number(m[3]);\n if (x1 < 0 || x1 > 1 || x2 < 0 || x2 > 1) return 'x1 and x2 must be between 0 and 1 (y1 and y2 may overshoot)';\n return null;\n}\n","/**\n * The eases of a timeline of our own: Penner's equations as GSAP names them (`power2.out`, `back.out(1.7)`, `elastic.out(1, 0.3)`, `steps(5)`),\n * plus our `spring(...)` and `cubic-bezier(...)`. Checked against `gsap.parseEase` point by point (tests/core/pure/ease.test.ts).\n */\nimport { parseSpring, springEase } from '../spring';\nimport { parseCubicBezier, cubicBezierEase } from '../cubicBezier';\n\nexport type EaseFn = (p: number) => number;\n\nconst PI = Math.PI;\nconst power = (strength: number) => ({\n in: (p: number) => Math.pow(p, strength),\n out: (p: number) => 1 - Math.pow(1 - p, strength),\n inOut: (p: number) => (p < 0.5 ? 0.5 * Math.pow(2 * p, strength) : 1 - 0.5 * Math.pow(2 * (1 - p), strength)),\n});\n\ntype Trio = { in: EaseFn; out: EaseFn; inOut: EaseFn };\nconst fromOut = (out: EaseFn): Trio => ({\n in: (p) => 1 - out(1 - p),\n out,\n inOut: (p) => (p < 0.5 ? 0.5 * (1 - out(1 - 2 * p)) : 0.5 + 0.5 * out(2 * p - 1)),\n});\n\n/** GSAP defines only the `in` of these and mirrors the others from it, which is what keeps the ends exactly 0 and 1. */\nconst mirrored = (easeIn: EaseFn): Trio => ({\n in: easeIn,\n out: (p) => 1 - easeIn(1 - p),\n inOut: (p) => (p < 0.5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2),\n});\nconst sine = mirrored((p) => (p === 1 ? 1 : -Math.cos(p * PI / 2) + 1));\nconst circ = mirrored((p) => -(Math.sqrt(1 - p * p) - 1));\n// GSAP blends the textbook 2^(10(p-1)) with p^6(1-p) so that the curve lands exactly on 1; out and inOut are mirrored from it.\nconst expoIn: EaseFn = (p) => Math.pow(2, 10 * (p - 1)) * p + p * p * p * p * p * p * (1 - p);\nconst expo: Trio = {\n in: expoIn,\n out: (p) => 1 - expoIn(1 - p),\n inOut: (p) => (p < 0.5 ? expoIn(p * 2) / 2 : 1 - expoIn((1 - p) * 2) / 2),\n};\nconst bounceOut: EaseFn = (p) => {\n if (p < 1 / 2.75) return 7.5625 * p * p;\n if (p < 2 / 2.75) { p -= 1.5 / 2.75; return 7.5625 * p * p + 0.75; }\n if (p < 2.5 / 2.75) { p -= 2.25 / 2.75; return 7.5625 * p * p + 0.9375; }\n p -= 2.625 / 2.75;\n return 7.5625 * p * p + 0.984375;\n};\nconst bounce = fromOut(bounceOut);\n\nfunction back(s = 1.70158): Trio {\n const out: EaseFn = (p) => (p ? (p -= 1, p * p * ((s + 1) * p + s) + 1) : 0); // exactly 0 at 0, as GSAP's: a colour is cut towards zero, so 2e-16 would change it\n return fromOut(out);\n}\n\nfunction elastic(amplitude?: number, period?: number): Trio {\n const make = (per0: number): Trio => {\n // an amplitude below 1 does not shrink the wave: it stretches the period (GSAP's rule, found by sampling it)\n const amp = amplitude ?? 1;\n const a = amp >= 1 ? amp : 1;\n const per = per0 / (amp < 1 ? amp : 1);\n const s = (per / (2 * PI)) * Math.asin(1 / a);\n const k = (2 * PI) / per;\n return fromOut((p) => (p === 0 ? 0 : p === 1 ? 1 : a * Math.pow(2, -10 * p) * Math.sin((p - s) * k) + 1));\n };\n const usual = make(period ?? 0.3);\n // `inOut` with no period runs a longer one (0.45), as GSAP does\n return { in: usual.in, out: usual.out, inOut: period === undefined ? make(0.45).inOut : usual.inOut };\n}\n\n/** GSAP's `steps(n)`: n steps that reach 1, the first one a (n+1)th of the way in (found by sampling it). */\nfunction steps(n: number): EaseFn {\n const count = Math.max(1, Math.floor(n) || 1);\n return (p) => (p <= 0 ? 0 : p >= 1 ? 1 : Math.min(1, Math.floor(p * (count + 1)) / count));\n}\n\nconst FAMILY: Record<string, (args: number[]) => Trio> = {\n power1: () => power(2), power2: () => power(3), power3: () => power(4), power4: () => power(5),\n quad: () => power(2), cubic: () => power(3), quart: () => power(4), quint: () => power(5), strong: () => power(5),\n sine: () => sine, circ: () => circ, expo: () => expo, bounce: () => bounce,\n back: (a) => back(a[0]), elastic: (a) => elastic(a[0], a[1]),\n};\n\nconst LINEAR: EaseFn = (p) => p;\nconst DEFAULT: EaseFn = power(2).out; // power1.out: what a name nobody knows runs as\n\nconst cache = new Map<string, EaseFn | null>();\n\nfunction lookup(name: string): EaseFn | null {\n let hit = cache.get(name);\n if (hit === undefined) { hit = parse(name.trim()); cache.set(name, hit); }\n return hit;\n}\n\n/** The ease function for an ease name; a name it does not know runs as `power1.out` (`checkEase` has said so). */\nexport function pureEase(name: unknown): EaseFn {\n return (typeof name === 'string' ? lookup(name) : null) ?? DEFAULT;\n}\n\n/** Whether `name` is an ease this library runs (`checkEase` warns about the others). */\nexport function isEaseName(name: unknown): boolean {\n return typeof name === 'string' && lookup(name) !== null;\n}\n\nfunction parse(raw: string): EaseFn | null {\n const s = raw.toLowerCase();\n if (s === 'none' || s === 'linear' || s === 'linear.easenone') return LINEAR;\n if (/^spring/.test(s)) { const sp = parseSpring(raw); return sp ? springEase(sp) : null; }\n if (/^cubic-bezier/.test(s)) { const c = parseCubicBezier(raw); return c ? cubicBezierEase(...c) : LINEAR; } // a malformed one is a straight line (checkEase says so)\n const st = /^steps\\(\\s*([^)]*)\\)$/.exec(s);\n if (st) return steps(Number(st[1]));\n if (/^[a-z][a-z0-9]*$/.test(raw) && FAMILY[raw]) return FAMILY[raw]!([]).out; // `power2`, `back`: the family's `out` (`Power2` with a capital is the family itself, not an ease)\n const m = /^([a-z0-9]+)\\.(?:ease)?(in|out|inout)(?:\\(([^)]*)\\))?$/.exec(s);\n if (!m) return null;\n const make = FAMILY[m[1]!];\n if (!make) return null;\n const args = (m[3] ?? '').split(',').map(x => x.trim()).filter(Boolean).map(Number).filter(n => Number.isFinite(n));\n const trio = make(args);\n return m[2] === 'in' ? trio.in : m[2] === 'out' ? trio.out : trio.inOut;\n}\n","/**\n * `gsap.utils.interpolate('#102030', '#f08060')` without GSAP: a function of 0..1 that gives the start string at 0, the end string at 1,\n * and `rgba(r,g,b,a)` in between (channels rounded to whole numbers, alpha to four decimals, no clamping on an overshoot).\n * */\n\nexport type Rgba = [number, number, number, number];\n\nexport function parseCssColor(s: string): Rgba | null {\n const v = s.trim();\n let m = /^#([0-9a-f]{3,4})$/i.exec(v);\n if (m) {\n const h = m[1]!;\n const d = (i: number): number => parseInt(h[i]! + h[i]!, 16);\n return [d(0), d(1), d(2), h.length === 4 ? d(3) / 255 : 1];\n }\n m = /^#([0-9a-f]{6})([0-9a-f]{2})?$/i.exec(v);\n if (m) {\n const n = parseInt(m[1]!, 16);\n return [(n >> 16) & 255, (n >> 8) & 255, n & 255, m[2] ? parseInt(m[2], 16) / 255 : 1];\n }\n m = /^rgba?\\(\\s*(-?[\\d.]+)\\s*,\\s*(-?[\\d.]+)\\s*,\\s*(-?[\\d.]+)\\s*(?:,\\s*(-?[\\d.]+)\\s*)?\\)$/i.exec(v);\n if (m) return [Number(m[1]), Number(m[2]), Number(m[3]), m[4] === undefined ? 1 : Number(m[4])];\n return null;\n}\n\n/** `fallback` reads what `parseCssColor` cannot (names, hsl ...); a string neither can read stays what it was until the end. */\nexport function rgbInterp(a: string, b: string, fallback: (s: string) => Rgba | null = () => null): (p: number) => string {\n const ca = parseCssColor(a) ?? fallback(a), cb = parseCssColor(b) ?? fallback(b);\n if (!ca || !cb) return (p) => (p >= 1 ? b : a);\n return (p) => {\n if (p === 0) return a;\n if (p === 1) return b;\n const ch = (i: number): number => Math.round(ca[i]! + (cb[i]! - ca[i]!) * p);\n const al = Math.round((ca[3] + (cb[3] - ca[3]) * p) * 1e4) / 1e4;\n return `rgba(${ch(0)},${ch(1)},${ch(2)},${al})`;\n };\n}\n","/**\n * What a key of a keyframe means for a target: a plain property, or one of the shorthands the Pixi plugin of GSAP offers\n * (`scale`, `anchor`, `rotation` in degrees, `tint`, `autoAlpha` ...), as accessors the timeline can read and write.\n * One key can be several accessors (`scale: 2` is `scale.x` and `scale.y`); two keys can meet in one (`scale` and `scaleX`).\n */\n\nexport type Target = Record<string, unknown>;\n\nexport interface Accessor {\n /** Identity inside the target: segments on the same id belong to one channel. */\n id: string;\n get(): any;\n set(value: any): void;\n /**\n * `'color'` is a packed 0xrrggbb number that is tweened per channel; `'css'` is a CSS colour string (`'#ff0000'`, `'rgb(…)'`) tweened as rgba strings; `'raw'` is anything that is not a number (a boolean, a\n * string): it switches when its segment starts; `'fn'` is a value of any kind that a function of the caller moves between\n * two values; the rest are plain numbers.\n */\n kind: 'num' | 'color' | 'css' | 'raw' | 'fn';\n /** `'fn'`: the interpolator between two values. */\n make?(a: any, b: any): (p: number) => any;\n /** Multiplies the value a key gives (degrees to radians). */\n unit: number;\n /** The written number is rounded to 1 / `round`: GSAP keeps six decimals, five for a rotation. */\n round: number;\n /** At the end of a tween (and in a `set`) the exact value is written, not the rounded one: a rotation. */\n exactEnd?: boolean;\n /** `get` is not what `set` writes (autoAlpha's `visible` reads the alpha): every write is made. */\n always?: boolean;\n}\n\nconst DEG = Math.PI / 180;\n\nconst num = (obj: () => Record<string, unknown> | undefined, key: string, id: string, unit = 1): Accessor => ({\n id, kind: 'num', unit, round: 1e6,\n get: () => Number(obj()?.[key]),\n set: (v) => { const o = obj(); if (o) o[key] = v; },\n});\n\nfunction xy(target: Target, base: string, which: 'x' | 'y' | 'both', unit = 1): Accessor[] {\n const o = () => target[base] as Record<string, unknown> | undefined;\n const ax = num(o, 'x', `${base}.x`, unit), ay = num(o, 'y', `${base}.y`, unit);\n return which === 'x' ? [ax] : which === 'y' ? [ay] : [ax, ay];\n}\n\nconst VEC: [string, string, number][] = [\n ['scale', 'scale', 1], ['anchor', 'anchor', 1], ['pivot', 'pivot', 1], ['skew', 'skew', DEG],\n ['position', 'position', 1], ['tilePosition', 'tilePosition', 1], ['tileScale', 'tileScale', 1],\n];\n\n/**\n * `fillColor` and `fillAlpha` reach the timeline as shorthands too; a shape keeps its own colours (live state, redrawn), so a write on the\n * Graphics object is not what is seen: the timeline leaves these alone.\n */\nexport const PIXI_INERT = new Set(['fillColor', 'fillAlpha']);\n\n/** Accessors for a key under `pixi: { ... }`; `null` when the plugin has no such shorthand. */\nexport function pixiAccessors(target: Target, key: string): Accessor[] | null {\n for (const [name, base, unit] of VEC) {\n if (key === name) return xy(target, base, 'both', unit);\n if (key === `${name}X`) return xy(target, base, 'x', unit);\n if (key === `${name}Y`) return xy(target, base, 'y', unit);\n }\n switch (key) {\n case 'rotation': return [{ id: 'rotation', kind: 'num', unit: DEG, round: 1e5, exactEnd: true, get: () => Number(target.rotation), set: (v) => { target.rotation = v; } }];\n case 'tint': return [{ id: 'tint', kind: 'color', unit: 1, round: 1, get: () => Number(target.tint), set: (v) => { target.tint = v; } }];\n case 'autoAlpha': return [\n { id: 'alpha', kind: 'num', unit: 1, round: 1e6, get: () => Number(target.alpha), set: (v) => { target.alpha = v; } },\n // `visible` follows the autoAlpha tweens only, not a plain `alpha` tween on the same layer: a channel of its own\n { id: 'visible#auto', kind: 'num', unit: 1, round: 1e6, always: true, get: () => Number(target.alpha), set: (v) => { target.visible = v !== 0; } },\n ];\n default: return null;\n }\n}\n\n/**\n * A key with dots (`'red.x'`, `'offset.y'`) is a path into the target: the leaf of a point or of an object option (a filter's `red: { x, y }`).\n * Returns a one-property view of that leaf for the accessors above, or `null` when the path leads nowhere (the leaf must exist now).\n * Without this the key was written as a property literally called \"red.x\", and nothing moved.\n */\nexport function pathView(target: Target, key: string): { view: Target; leaf: string } | null {\n const parts = key.split('.');\n const leaf = parts.pop()!;\n const parentOf = (): Record<string, unknown> | null => {\n let o: unknown = target;\n for (const p of parts) { o = (o as Record<string, unknown> | null | undefined)?.[p]; if (o === null || typeof o !== 'object') return null; }\n return o as Record<string, unknown>;\n };\n const first = parentOf();\n if (!first || !(leaf in first)) return null;\n const view: Target = {};\n Object.defineProperty(view, leaf, {\n get: () => parentOf()?.[leaf],\n set: (v: unknown) => { const parent = parentOf(); if (parent) parent[leaf] = v; },\n });\n return { view, leaf };\n}\n\nconst saidPaths = new Set<string>();\n/** A dotted key that leads nowhere on its target: said once per key, and the key is ignored. */\nexport function warnLeadsNowhere(key: string): void {\n if (saidPaths.has(key)) return;\n saidPaths.add(key);\n console.warn(`pixi-effects: \"${key}\" leads nowhere on its target, so it is ignored (a point option of a filter must exist to be animated: give it in the filter's options, e.g. red: { x: 0, y: 0 })`);\n}\n\nexport function rawAccessor(target: Target, key: string): Accessor {\n return { id: key, kind: 'raw', unit: 1, round: 1, get: () => target[key], set: (v) => { target[key] = v; } };\n}\n\nexport function cssAccessor(target: Target, key: string): Accessor {\n return { id: key, kind: 'css', unit: 1, round: 1, get: () => target[key], set: (v) => { target[key] = v; } };\n}\n\nexport function plainAccessor(target: Target, key: string): Accessor {\n return { id: key, kind: 'num', unit: 1, round: 1e6, get: () => Number(target[key]), set: (v) => { target[key] = v; } };\n}\n\n/** `'#ff0000'`, `'#f00'`, `'rgb(255,0,0)'` or a number to 0xrrggbb; `null` if it is none of them. */\nexport function parseColor(v: unknown): number | null {\n if (typeof v === 'number') return v;\n if (typeof v !== 'string') return null;\n const s = v.trim();\n let m = /^#([0-9a-f]{3})$/i.exec(s);\n if (m) { const h = m[1]!; return parseInt(h[0]! + h[0]! + h[1]! + h[1]! + h[2]! + h[2]!, 16); }\n m = /^#([0-9a-f]{6})(?:[0-9a-f]{2})?$/i.exec(s); // the alpha of #rrggbbaa is not a tint\n if (m) return parseInt(m[1]!, 16);\n m = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i.exec(s);\n if (m) return (Number(m[1]) << 16) | (Number(m[2]) << 8) | Number(m[3]);\n return null;\n}\n\n/** A packed colour moved towards another, per channel (cut towards zero), the way the Pixi plugin does it; an overshoot is not clamped. */\nexport function lerpColor(from: number, to: number, p: number): number {\n const r = lerpByte((from >> 16) & 255, (to >> 16) & 255, p);\n const g = lerpByte((from >> 8) & 255, (to >> 8) & 255, p);\n const b = lerpByte(from & 255, to & 255, p);\n return (r << 16) | (g << 8) | b; // bitwise, as GSAP does: a channel below zero fills the bytes above it with ones\n}\n\nfunction lerpByte(a: number, b: number, p: number): number {\n return Math.trunc(a + (b - a) * p);\n}\n","import { pureEase, type EaseFn } from './ease';\nimport { parseCssColor, rgbInterp } from './colorLerp';\nimport { PIXI_INERT, lerpColor, parseColor, pathView, warnLeadsNowhere, pixiAccessors, cssAccessor, plainAccessor, rawAccessor, type Accessor, type Target } from './props';\n\n/**\n * A timeline that is a pure function of time (spike: see docs/superpowers/specs/2026-10-10-pure-timeline-design.md).\n *\n * For every (target, property) it keeps the segments that write it, ordered by start time. The value at `t`\n * is the value of the last segment that has started, computed from `t` alone; nothing is remembered between\n * two calls except the start values captured when the segment was built. GSAP is the oracle: the rules below\n * were taken from black-box probes of `gsap.timeline` and are checked against it by tests/core/pure/timelineParity.test.ts.\n */\n\nexport interface PureVars {\n duration?: number;\n ease?: string | EaseFn;\n repeat?: number;\n yoyo?: boolean;\n repeatDelay?: number;\n onUpdate?: () => void;\n /** The Pixi plugin's shorthands: `scale`, `anchor`, `rotation` (degrees), `tint`, `autoAlpha` ... */\n pixi?: Record<string, unknown>;\n [prop: string]: unknown;\n}\n\n/** One thing a timeline writes: see `segments()`. */\nexport interface SegmentInfo {\n target: object;\n /** The property (`'alpha'`, `'scale.x'`, `'fill'`). */\n id: string;\n start: number;\n duration: number;\n repeat: number;\n yoyo: boolean;\n repeatDelay: number;\n kind: 'set' | 'to' | 'from' | 'fromTo';\n}\n\n/** A property of a target that a segment writes; the unit the value is computed for. */\ninterface Channel {\n target: Target;\n acc: Accessor;\n /** The value shown before the first segment starts (see `prepare`). */\n pre: any;\n /** The property's own value when the channel was first prepared; kept, so that a later `prepare` does not read an animated value. */\n base0?: { v: any };\n /** What the channel wrote last: a segment's `onUpdate` runs when it changes (two segments on one property share it). */\n last: unknown;\n segs: Segment[];\n /** `segs` is sorted by (start, creation order) before it is read. */\n dirty: boolean;\n}\n\ninterface Segment {\n channel: Channel;\n kind: 'set' | 'to' | 'from' | 'fromTo';\n /** What the property was when this segment was built (a `from` ends there unless a tween just before it ends elsewhere). */\n createCur: any;\n start: number;\n dur: number;\n ease: EaseFn;\n repeat: number;\n yoyo: boolean;\n repeatDelay: number;\n /** `null` for a `to` / `from` tween whose start is \"where the property was\": resolved on first use. */\n from: any;\n to: any;\n /** Relative values (`'+=36'`) are resolved against the start. */\n toRel: boolean;\n onUpdate?: () => void;\n order: number;\n /** `'fn'` channels: where it starts and ends, from the value before it (`start`) and the value the channel had at the beginning (`base`). */\n fnFrom?: (prev: any) => any;\n fnTo?: (start: any, prev: any, base: any) => any;\n fnMake?: (a: any, b: any) => (p: number) => any;\n /** A write that switches when the segment starts (revertible sets): `to` is the value, whatever the channel is. */\n step?: boolean;\n /** How this segment writes the property, when it is not the way the channel's first segment did (a tween and a set can share a property). */\n write?: (v: any) => void;\n interp?: (p: number) => any;\n /** The segment of the same call on another channel whose numbers this one copies (autoAlpha's `visible` follows its `alpha`). */\n partner?: Segment;\n /** What was given, before `prepare` resolves it against the segments before: `prepare` can run again when segments are added later. */\n from0: any;\n to0: any;\n toRel0: boolean;\n}\n\ninterface ChildItem {\n child: PureTimeline;\n start: number;\n order: number;\n /** No channel of this child (or of anything under it) writes a property that another channel of the tree writes: its picture depends on its own local time only. */\n exclusive: boolean;\n /** The local time it was last played at; an exclusive child at the same local time writes the same things, so it is skipped. */\n last: number;\n}\n\n/** GSAP keeps start times and durations to seven decimals, and tweened numbers to six; matching both keeps the pictures identical. */\nexport const quantize = (x: number): number => Math.round(x * 1e7) / 1e7 || 0;\nconst TINY = 1e-8;\n\n/** A marker that only lengthens a timeline (what `gsap.to({}, { duration })` is used for). */\nexport interface Spacer { readonly spacer: true; readonly duration: number }\nexport const spacer = (duration: number): Spacer => ({ spacer: true, duration });\n\nconst parseRel = (v: unknown): { rel: boolean; n: number } | null => {\n if (typeof v === 'number') return { rel: false, n: v };\n if (typeof v === 'string') {\n const m = /^([+-])=\\s*(-?\\d*\\.?\\d+(?:e[+-]?\\d+)?)$/i.exec(v.trim());\n if (m) return { rel: true, n: (m[1] === '-' ? -1 : 1) * parseFloat(m[2]!) };\n const n = parseFloat(v);\n if (Number.isFinite(n) && String(n) === v.trim()) return { rel: false, n };\n }\n return null;\n};\n\nconst RESERVED = new Set(['duration', 'ease', 'repeat', 'yoyo', 'repeatDelay', 'onUpdate', 'delay']);\n/** GSAP callbacks that a timeline with no state cannot run (they depend on the way the playhead moved): said once, not written onto the target. */\nconst CALLBACKS = ['onStart', 'onComplete', 'onRepeat', 'onReverseComplete'];\nlet saidCallbacks = false;\n\nexport class PureTimeline {\n private readonly defaultEase: string | EaseFn;\n private readonly channels = new Map<Target, Map<string, Channel>>();\n private readonly channelList: Channel[] = [];\n private readonly children: ChildItem[] = [];\n private spans = 0;\n private now = 0;\n private order = 0;\n private killed = false;\n private prepared = false;\n\n constructor(opts: { paused?: boolean; defaults?: { ease?: string | EaseFn } } = {}) {\n this.defaultEase = opts.defaults?.ease ?? 'none';\n }\n\n // --- building ------------------------------------------------------------------------------------------\n\n /** Adds a child timeline (played with its local time) or a spacer that lengthens this one. */\n add(child: PureTimeline | Spacer, at?: number): this {\n const start = at ?? this.spans;\n if ('spacer' in child) {\n this.spans = Math.max(this.spans, start + child.duration);\n } else if (!(child instanceof PureTimeline)) {\n // a tween of another engine (`gsap.to({}, { duration })`): only its length matters\n this.spans = Math.max(this.spans, start + (child as { duration(): number }).duration());\n } else {\n this.children.push({ child, start: quantize(start), order: this.order++, exclusive: false, last: NaN });\n this.prepared = false;\n this.spans = Math.max(this.spans, start + child.duration());\n }\n return this;\n }\n\n set(target: object, vars: PureVars, at?: number): this {\n return this.build(target, null, { ...vars, duration: 0 }, at, 'set');\n }\n\n to(target: object, vars: PureVars, at?: number): this {\n return this.build(target, null, vars, at, 'to');\n }\n\n from(target: object, vars: PureVars, at?: number): this {\n return this.build(target, null, vars, at, 'from');\n }\n\n fromTo(target: object, fromVars: PureVars, toVars: PureVars, at?: number): this {\n return this.build(target, fromVars, toVars, at, 'fromTo');\n }\n\n private build(target: object, fromVars: PureVars | null, vars: PureVars, at: number | undefined, kind: 'set' | 'to' | 'from' | 'fromTo'): this {\n const t = target as Target;\n const start = quantize((at ?? this.spans) + (Number(vars.delay) || 0));\n const dur = quantize(Math.max(0, vars.duration ?? 0));\n for (const cb of CALLBACKS) if (cb in vars) {\n if (!saidCallbacks) { saidCallbacks = true; console.warn(`pixi-effects: the timeline does not run ${cb}: what a tween does must be a value of the time (use onUpdate for a redraw); it is ignored`); }\n }\n const repeat = Math.max(0, Math.floor(vars.repeat ?? 0));\n const yoyo = !!vars.yoyo;\n const repeatDelay = Math.max(0, vars.repeatDelay ?? 0);\n const easeName = vars.ease ?? this.defaultEase;\n const ease = typeof easeName === 'function' ? easeName : pureEase(easeName);\n const given = (v: PureVars): Map<string, { acc: Accessor; value: unknown }> => {\n const out = new Map<string, { acc: Accessor; value: unknown }>();\n for (const key of Object.keys(v)) {\n if (RESERVED.has(key) || key === 'pixi' || CALLBACKS.includes(key)) continue;\n const value = v[key];\n // 'red.x': a leaf of a point or object option (a filter's `red: { x, y }`); a path that leads nowhere is said once, not written as a property of that name\n const path = key.includes('.') ? pathView(t, key) : null;\n if (key.includes('.') && !path) { warnLeadsNowhere(key); continue; }\n const at = path?.view ?? t, name = path?.leaf ?? key;\n const acc = parseRel(value) ? plainAccessor(at, name)\n : typeof value === 'string' && parseCssColor(value) ? cssAccessor(at, name) // '#ff0000' moves through rgba strings\n : rawAccessor(at, name); // a boolean or a word switches when its segment starts\n acc.id = key;\n out.set(acc.id, { acc, value });\n }\n if (v.pixi) for (const key of Object.keys(v.pixi)) {\n const accs = pixiAccessors(t, key);\n if (!accs) { if (!PIXI_INERT.has(key)) console.warn(`pixi-effects: the timeline has no \"${key}\" shorthand yet; it is ignored`); continue; }\n for (const acc of accs) out.set(acc.id, { acc, value: v.pixi[key] });\n }\n return out;\n };\n const ends = given(vars);\n const starts = fromVars ? given(fromVars) : new Map<string, { acc: Accessor; value: unknown }>();\n const ids = kind === 'fromTo' ? [...new Set([...starts.keys(), ...ends.keys()])] : [...ends.keys()];\n let lastAlpha: Segment | undefined;\n for (const id of ids) {\n const e = ends.get(id), f = starts.get(id);\n const acc = (e ?? f)!.acc;\n const ch = this.channel(t, acc);\n const cur = acc.get();\n const color = acc.kind === 'color';\n const endSpec = e ? read(e.value, acc) : null;\n if (e && !endSpec && acc.kind === 'color') console.warn(`pixi-effects: the timeline cannot read the colour ${JSON.stringify(e.value)} (use #rgb, #rrggbb, rgb(...) or a number); this tween is skipped`);\n const fromSpec = f ? read(f.value, acc) : null;\n let from: number | null = null, to: number, toRel = false;\n if (kind === 'from') {\n // `from`: the value given is where it starts; where it ends is where the property is now (captured now,\n // after any earlier `from` already wrote its start: that is GSAP's immediateRender).\n const g = endSpec ?? { rel: false, n: cur };\n from = g.rel ? cur + g.n : g.n;\n to = cur;\n // immediateRender: the start value is shown from the moment the tween exists.\n acc.set(from);\n } else if (kind === 'fromTo') {\n if (fromSpec) from = fromSpec.rel ? cur + fromSpec.n : fromSpec.n;\n if (endSpec) { to = endSpec.n; toRel = endSpec.rel; } else to = cur;\n if (from !== null) acc.set(from);\n } else {\n if (!endSpec) continue;\n to = endSpec.n; toRel = endSpec.rel;\n }\n if (color && toRel) toRel = false;\n const seg: Segment = {\n channel: ch, kind, createCur: cur, start, dur, ease, repeat, yoyo, repeatDelay, from, to, toRel,\n from0: from, to0: to, toRel0: toRel, onUpdate: vars.onUpdate, order: this.order++,\n };\n if (id === 'visible#auto') seg.partner = lastAlpha;\n else if (id === 'alpha') lastAlpha = seg;\n ch.segs.push(seg);\n ch.dirty = true;\n this.prepared = false;\n }\n const total = dur * (repeat + 1) + repeatDelay * repeat;\n this.spans = Math.max(this.spans, start + total);\n return this;\n }\n\n private channel(target: Target, acc: Accessor): Channel {\n let m = this.channels.get(target);\n if (!m) this.channels.set(target, (m = new Map()));\n let ch = m.get(acc.id);\n if (!ch) {\n ch = { target, acc, pre: NaN, last: NaN, segs: [], dirty: false };\n m.set(acc.id, ch);\n this.channelList.push(ch);\n }\n return ch;\n }\n\n /**\n * A property moved by a function of the caller (a colour in OKLab, a gradient): `to` and `from` say how to get the two ends from\n * the value before the segment, `make` the interpolator between them. The value is only written while the segment is the last\n * one that has started, so nothing is read or kept between two frames.\n */\n tweenValue<T>(spec: {\n holder: object; id: string; get(): T; set(v: T): void;\n from?: (prev: T) => T; to: (start: T, prev: T, base: T) => T; make: (a: T, b: T) => (p: number) => T;\n duration: number; ease: string | EaseFn; at: number; repeat?: number; yoyo?: boolean; repeatDelay?: number;\n }): this {\n const acc: Accessor = { id: spec.id, kind: 'fn', unit: 1, round: 1, get: spec.get, set: spec.set, make: spec.make };\n const ch = this.channel(spec.holder as Target, acc);\n const start = quantize(spec.at);\n const dur = quantize(Math.max(0, spec.duration));\n const repeat = Math.max(0, Math.floor(spec.repeat ?? 0));\n const repeatDelay = Math.max(0, spec.repeatDelay ?? 0);\n const ease = typeof spec.ease === 'function' ? spec.ease : pureEase(spec.ease);\n ch.segs.push({\n channel: ch, kind: 'to', createCur: null, start, dur, ease, repeat, yoyo: !!spec.yoyo, repeatDelay, from: null, to: null, toRel: false, from0: null, to0: null, toRel0: false,\n order: this.order++, fnFrom: spec.from as never, fnTo: spec.to as never, fnMake: spec.make as never, write: spec.set as never,\n });\n ch.dirty = true;\n this.prepared = false;\n this.spans = Math.max(this.spans, start + dur * (repeat + 1) + repeatDelay * repeat);\n return this;\n }\n\n /**\n * A write that is undone when time goes back before it: the property is `value` from `at` on, and what it was before otherwise.\n * `holder` and `id` name the property, so a set and the tweens of the same property are one channel; `write` is the way the caller\n * writes it (it may do more than assign: redraw), and runs again whenever this set is what the property shows.\n */\n setValue<T>(holder: object, id: string, at: number, read: () => T, write: (v: T) => void, value: T): this {\n const acc: Accessor = { id, kind: typeof value === 'number' ? 'num' : 'raw', unit: 1, round: 1e6, get: read, set: write };\n const ch = this.channel(holder as Target, acc);\n ch.segs.push({\n channel: ch, kind: 'set', createCur: null, start: quantize(at), dur: 0, ease: pureEase('none'), repeat: 0, yoyo: false, repeatDelay: 0,\n from: null, to: value, toRel: false, from0: null, to0: value, toRel0: false, order: this.order++, step: true, write: write as never,\n onUpdate: () => write(read()),\n });\n ch.dirty = true;\n this.prepared = false;\n this.spans = Math.max(this.spans, quantize(at));\n return this;\n }\n\n // --- reading -------------------------------------------------------------------------------------------\n\n /** What the timeline will write, for tools and tests: every segment of this timeline and of the ones under it, starts in this timeline's time. */\n segments(offset = 0): SegmentInfo[] {\n const out: SegmentInfo[] = [];\n for (const ch of this.channelList) {\n for (const s of ch.segs) {\n out.push({ target: ch.target, id: ch.acc.id, start: s.start + offset, duration: s.dur, repeat: s.repeat, yoyo: s.yoyo, repeatDelay: s.repeatDelay, kind: s.step ? 'set' : s.kind });\n }\n }\n for (const c of this.children) out.push(...c.child.segments(offset + c.start));\n return out;\n }\n\n /** How many timelines are directly under this one. */\n timelines(): number { return this.children.length; }\n\n duration(): number { return this.spans; }\n\n time(): number;\n time(value: number): this;\n time(value?: number): number | this {\n if (value === undefined) return this.now;\n if (this.killed) return this;\n this.now = value;\n if (!this.prepared) {\n this.prepareDeep();\n const counts = new Map<Target, Map<string, number>>();\n this.countChannels(counts);\n this.markExclusive(counts);\n }\n this.evaluate(quantize(value));\n return this;\n }\n\n /** GSAP's name for `time(t)`. */\n seek(t: number): this { return this.time(t); }\n\n progress(): number;\n progress(p: number): this;\n progress(p?: number): number | this {\n if (p === undefined) return this.spans > 0 ? this.now / this.spans : 0;\n return this.time(p * this.spans);\n }\n\n kill(): void {\n this.killed = true;\n this.channels.clear();\n this.channelList.length = 0;\n this.children.length = 0;\n }\n\n // --- evaluation ----------------------------------------------------------------------------------------\n\n /**\n * What GSAP ended up with once it had been played to the end and back (what Movie used to do at build), as rules that depend\n * on the segments of a property only:\n * - a `from` / `fromTo` shows its start from the moment it is built, so a `to` that comes first starts at the start of the\n * `from` built last, else at the property's own value;\n * - a `to` (and a `set`) starts where the segment before it ended;\n * - a `from` ends where the segment before it ended, or, with none before, where the property was when it was built;\n * - before the first segment the property shows that segment's start.\n */\n private prepare(ch: Channel): void {\n if (!ch.dirty) return;\n ch.segs.sort((a, b) => a.start - b.start || a.order - b.order);\n ch.dirty = false;\n let latest: Segment | null = null;\n for (const s of ch.segs) if ((s.kind === 'from' || s.kind === 'fromTo') && s.from0 !== null && (!latest || s.order > latest.order)) latest = s;\n ch.base0 ??= { v: ch.acc.get() };\n let cur = latest ? latest.from0! : ch.base0.v;\n const base = cur;\n let first = true;\n for (const s of ch.segs) {\n const before = cur;\n s.from = s.from0; s.to = s.to0; s.toRel = s.toRel0;\n if (s.fnTo) {\n s.from = s.fnFrom ? s.fnFrom(cur) : cur;\n s.to = s.fnTo(s.from, before, base);\n s.interp = undefined;\n } else {\n if (s.partner) { s.from = s.partner.from; s.to = s.partner.to; }\n if (s.from === null) s.from = cur;\n if (s.kind === 'from') s.to = first ? s.createCur : cur;\n if (s.toRel) { s.to = s.from + s.to; s.toRel = false; }\n }\n if (first) ch.pre = s.fnTo ? before : s.from;\n cur = endValue(s);\n first = false;\n }\n }\n\n /** Every channel of this timeline and of its children reads the property it starts from before any of them writes. */\n private prepareDeep(): void {\n if (this.prepared) return;\n this.prepared = true;\n for (const ch of this.channelList) this.prepare(ch);\n this.children.sort((a, b) => a.start - b.start || a.order - b.order);\n for (const c of this.children) { c.last = NaN; c.child.prepareDeep(); }\n }\n\n /** How many channels write each (target, property) in this timeline and everything under it. */\n private countChannels(into: Map<Target, Map<string, number>>): void {\n for (const ch of this.channelList) {\n let m = into.get(ch.target);\n if (!m) into.set(ch.target, (m = new Map()));\n m.set(ch.acc.id, (m.get(ch.acc.id) ?? 0) + 1);\n }\n for (const c of this.children) c.child.countChannels(into);\n }\n\n private isExclusive(counts: Map<Target, Map<string, number>>): boolean {\n for (const ch of this.channelList) if ((counts.get(ch.target)?.get(ch.acc.id) ?? 0) > 1) return false;\n return this.children.every(c => c.child.isExclusive(counts));\n }\n\n private markExclusive(counts: Map<Target, Map<string, number>>): void {\n for (const c of this.children) { c.exclusive = c.child.isExclusive(counts); c.child.markExclusive(counts); }\n }\n\n private evaluate(t: number): void {\n this.prepareDeep();\n for (const ch of this.channelList) {\n const segs = ch.segs;\n // the last segment whose start is not after t\n let lo = 0, hi = segs.length;\n while (lo < hi) { const mid = (lo + hi) >> 1; if (segs[mid]!.start <= t + TINY) lo = mid + 1; else hi = mid; }\n let k = lo - 1;\n // a repeating tween is not yet on at the exact moment it starts (GSAP shows what was there before)\n while (k >= 0 && segs[k]!.repeat > 0 && t - segs[k]!.start <= TINY) k--;\n const seg = k >= 0 ? segs[k]! : null;\n if (!seg) {\n const pre = settle(ch.acc, ch.pre);\n write(ch, segs[0], pre);\n const head = segs[0];\n if (pre !== ch.last) { ch.last = pre; head?.onUpdate?.(); }\n continue;\n }\n const v = mix(seg, ratioAt(seg, t), over);\n write(ch, seg, v);\n if (v !== ch.last) { ch.last = v; seg.onUpdate?.(); }\n }\n // children in the order they start (then the order they were added): where two write one property the later one wins, however the playhead came\n for (const c of this.children) {\n const local = Math.min(Math.max(t - c.start, 0), c.child.duration());\n if (c.exclusive && local === c.last) continue;\n c.last = local;\n c.child.now = local;\n c.child.evaluate(quantize(local));\n }\n }\n}\n\n/** Writes a value unless the property already holds it: a setter that decodes a frame or redraws a text runs when the value changes. */\nfunction write(ch: Channel, seg: Segment | undefined, v: any): void {\n if (!ch.acc.always && ch.acc.get() === v) return;\n (seg?.write ?? ch.acc.set)(v);\n}\n\nfunction endValue(s: Segment): any {\n if (s.dur === 0 && s.repeat === 0) return s.to;\n return s.yoyo && s.repeat % 2 === 1 ? s.from! : s.to;\n}\n\n/** The value a key gives, in the unit of the property; `rel` for `'+=36'`. */\nfunction read(value: unknown, acc: Accessor): { rel: boolean; n: any } | null {\n if (acc.kind === 'raw' || acc.kind === 'css') return { rel: false, n: value };\n if (acc.kind === 'color') {\n const c = parseColor(value);\n return c === null ? null : { rel: false, n: c };\n }\n const r = parseRel(value);\n return r ? { rel: r.rel, n: r.n * acc.unit } : null;\n}\n\n/** A start value as GSAP shows it before the tween begins: rendered at ratio 0, so rounded like the rest of the tween. */\nfunction settle(acc: Accessor, v: any): any {\n return acc.kind !== 'num' ? v : Math.round(v * acc.round) / acc.round;\n}\n\n/** Set by `ratioAt`: the tween is over (the exact end value is written), not merely at or past the end of its curve. */\nlet over = false;\n\nfunction mix(s: Segment, r: number, ended: boolean): any {\n const acc = s.channel.acc;\n if (s.step) return s.to;\n if (s.fnMake) { // before `raw`: a channel made by a set can carry a tween\n const interp = (s.interp ??= s.fnMake(s.from, s.to));\n return interp(Math.round(r * 1e6) / 1e6); // a number tweened from 0 to 1, as GSAP writes it\n }\n if (acc.kind === 'raw') return s.to;\n if (acc.kind === 'css') return (s.interp ??= rgbInterp(String(s.from), String(s.to)))(r);\n if (acc.kind === 'color') return ended ? endValue(s) : lerpColor(s.from!, s.to, r);\n if ((ended || r === 1) && acc.exactEnd) return endValue(s);\n const k = acc.round;\n return Math.round((s.from! + (s.to - s.from!) * r) * k) / k;\n}\n\n/** How far along the tween is (the ease applied, repeats and yoyo folded in); 1 when it is over. */\nfunction ratioAt(s: Segment, t: number): number {\n const lt = t - s.start;\n over = true;\n if (s.dur === 0) return 1;\n const total = s.dur * (s.repeat + 1) + s.repeatDelay * s.repeat;\n if (quantize(lt) >= quantize(total) - TINY) return endRatio(s);\n over = false;\n let i = 0;\n let within = lt;\n if (s.repeat > 0) {\n const period = s.dur + s.repeatDelay;\n // an exact hand-over between two cycles belongs to the cycle that ends there; GSAP compares them at seven decimals\n const q = quantize(lt);\n i = Math.min(s.repeat, Math.max(0, Math.floor(lt / period)));\n while (i > 0 && q <= quantize(i * period)) i--;\n while (i < s.repeat && q > quantize((i + 1) * period)) i++;\n within = quantize(lt - i * period);\n }\n let p = within >= s.dur ? 1 : within <= 0 ? 0 : within / s.dur;\n if (s.yoyo && i % 2 === 1) p = 1 - p;\n return s.ease(p);\n}\n\n/** At the end the value is exact: where a yoyo that repeats an odd number of times ends up, or the `to`. */\nfunction endRatio(s: Segment): number {\n return s.yoyo && s.repeat % 2 === 1 ? 0 : 1;\n}\n","import { Color } from 'pixi.js';\nimport { PureTimeline, spacer } from './pure/PureTimeline';\nimport { pureEase } from './pure/ease';\nimport { PIXI_INERT, parseColor, pathView, pixiAccessors, plainAccessor, warnLeadsNowhere } from './pure/props';\nimport { rgbInterp, type Rgba } from './pure/colorLerp';\n\n/**\n * The timeline of the library and the few things around it: a timeline is a pure function of time (a value at a time is computed from the\n * script and the time alone, never from the way the playhead came), see docs/superpowers/specs/2026-10-10-pure-timeline-design.md.\n */\n\nexport type Timeline = PureTimeline;\n\n/** A timeline for the tweens of a layer, a composition or a movie. Without a default ease a tween eases with `power1.out`. */\nexport function createTimeline(opts: { paused?: boolean; defaults?: { ease?: string } } = {}): Timeline {\n return new PureTimeline({ paused: opts.paused, defaults: { ease: opts.defaults?.ease ?? 'power1.out' } });\n}\n\n/** Lengthens a timeline to `duration` without writing anything. */\nexport function lengthen(timeline: Timeline, duration: number): void {\n timeline.add(spacer(duration));\n}\n\n/** An ease name to a function of 0..1 (a name nobody knows runs as `power1.out`; `checkEase` says so). */\nexport function parseEase(name: string): (p: number) => number {\n return pureEase(name);\n}\n\n/** Writes values at once: plain properties, and under `pixi` the shorthands (`scale`, `anchor`, `rotation` in degrees, `tint`, `autoAlpha` ...). */\nexport function setNow(target: object, vars: Record<string, unknown>): void {\n const t = target as Record<string, unknown>;\n for (const key of Object.keys(vars)) {\n if (key === 'pixi') {\n for (const k of Object.keys(vars.pixi as object)) {\n const accs = pixiAccessors(t, k);\n if (!accs) { if (!PIXI_INERT.has(k)) console.warn(`pixi-effects: \"${k}\" is not a property a keyframe or initial can set; it is ignored`); continue; }\n const raw = (vars.pixi as Record<string, unknown>)[k];\n for (const acc of accs) {\n const n = acc.kind === 'color' ? colorNumber(raw) : Number(raw) * acc.unit;\n if (!Number.isNaN(n)) acc.set(n);\n }\n }\n } else {\n const v = vars[key];\n const value = typeof v === 'number' ? Math.round(v * 1e6) / 1e6 : v;\n if (key.includes('.')) { // 'red.x': the leaf of a point or object option (a filter's), as in a keyframe\n const path = pathView(t, key);\n if (path) (path.view as Record<string, unknown>)[path.leaf] = value; else warnLeadsNowhere(key);\n continue;\n }\n plainAccessor(t, key).set(value);\n }\n }\n}\n\nfunction colorNumber(v: unknown): number {\n const c = parseColor(v);\n if (c === null) { console.warn(`pixi-effects: cannot read the colour ${JSON.stringify(v)} (use #rgb, #rrggbb, rgb(...) or a number); it is left as it was`); return NaN; }\n return c;\n}\n\n/** Any other CSS colour (names, hsl, oklch ...) as red, green, blue (0..255) and alpha, through Pixi's own parser. */\nfunction viaPixi(s: string): Rgba | null {\n try {\n const [r, g, b, a] = new Color(s).toArray();\n return [Math.round(r! * 255), Math.round(g! * 255), Math.round(b! * 255), a!];\n } catch { return null; }\n}\n\n/** A function of 0..1 between two CSS colour strings: the start string at 0, the end string at 1, `rgba(r,g,b,a)` between. */\nexport function interpolateColors(a: string, b: string): (p: number) => string {\n return rgbInterp(a, b, viaPixi);\n}\n","/**\n * Seeded randomness. Everything here is a pure function of its inputs (no\n * wall clock, no `Math.random`), so playback, seeking and export always\n * produce the same pixels.\n */\n\n/** 32-bit integer mix (a murmur3-style finaliser). */\nfunction mix(h: number): number {\n h = Math.imul(h ^ (h >>> 16), 0x85ebca6b);\n h = Math.imul(h ^ (h >>> 13), 0xc2b2ae35);\n return (h ^ (h >>> 16)) >>> 0;\n}\n\n/** Fold a number (any real, fractions included) into a 32-bit integer. */\nfunction fold(n: number): number {\n if (!Number.isFinite(n)) return 0;\n const i = Math.floor(n);\n const f = n - i;\n return (i | 0) ^ Math.imul(Math.floor(f * 0x100000), 0x9e3779b1);\n}\n\n/** The same seed always gives the same number in [0, 1). */\nexport function rand(seed: number): number {\n return mix(fold(seed) + 0x9e3779b9) / 4294967296;\n}\n\n/** A repeatable stream of numbers in [0, 1): `const r = random(7); r(); r(); …` */\nexport function random(seed: number): () => number {\n let a = (fold(seed) + 0x6d2b79f5) | 0; // mulberry32\n return () => {\n a = (a + 0x6d2b79f5) | 0;\n let t = Math.imul(a ^ (a >>> 15), 1 | a);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n/** Smooth 1-D noise in [-1, 1]: continuous in `x`, a different curve for every `seed`. */\nexport function noise(x: number, seed = 0): number {\n if (!Number.isFinite(x)) return 0;\n const i = Math.floor(x);\n const f = x - i;\n const s = fold(seed) * 0x27d4eb2d;\n const a = mix((i | 0) + s) / 2147483648 - 1;\n const b = mix(((i + 1) | 0) + s) / 2147483648 - 1;\n const u = f * f * f * (f * (f * 6 - 15) + 10); // quintic fade\n return a + (b - a) * u;\n}\n\n/** Smooth 2-D noise in [-1, 1]: continuous in `x` and in `y`, a different field for every `seed` (add octaves yourself for clouds: `noise2(x, y) + 0.5 * noise2(2 * x, 2 * y)`). */\nexport function noise2(x: number, y: number, seed = 0): number {\n if (!Number.isFinite(x) || !Number.isFinite(y)) return 0;\n const i = Math.floor(x), j = Math.floor(y);\n const fx = x - i, fy = y - j;\n const s = fold(seed) * 0x27d4eb2d;\n const corner = (a: number, b: number): number => mix(Math.imul((a | 0) + s, 0x9e3779b1) ^ Math.imul((b | 0) + 0x7f4a7c15, 0x85ebca6b)) / 2147483648 - 1;\n const ux = fx * fx * fx * (fx * (fx * 6 - 15) + 10), uy = fy * fy * fy * (fy * (fy * 6 - 15) + 10);\n const top = corner(i, j) + (corner(i + 1, j) - corner(i, j)) * ux;\n const bottom = corner(i, j + 1) + (corner(i + 1, j + 1) - corner(i, j + 1)) * ux;\n return top + (bottom - top) * uy;\n}\n","/**\n * Tiny expression parser for the pixi-effects DSL.\n *\n * Supported grammar (recursive descent, LL(1)):\n * expr = additive\n * additive = multiplicative (('+'|'-') multiplicative)*\n * multiplicative = unary (('*'|'/') unary)*\n * unary = ('-'|'+') unary | primary\n * primary = number | identifier ('(' (expr (',' expr)*)? ')')? | '(' expr ')'\n *\n * Numbers are parsed via parseFloat (decimals OK). Identifiers map to keys in\n * the supplied scope. A small fixed function set is exposed: see FUNCS below.\n *\n * Parsed ASTs are cached per source string. CSP-safe: no Function constructor.\n */\nimport { rand, noise } from './random';\n\nconst FUNCS: Record<string, (...args: number[]) => number> = {\n min: Math.min,\n max: Math.max,\n abs: Math.abs,\n floor: Math.floor,\n ceil: Math.ceil,\n round: Math.round,\n sqrt: Math.sqrt,\n pow: Math.pow,\n sin: Math.sin,\n cos: Math.cos,\n tan: Math.tan,\n rand: seed => rand(seed),\n noise: (x, seed = 0) => noise(x, seed),\n lerp: (a, b, t) => a + (b - a) * t,\n clamp: (x, lo, hi) => Math.min(Math.max(x, lo), hi),\n smoothstep: (a, b, x) => { const u = Math.min(Math.max((x - a) / (b - a), 0), 1); return u * u * (3 - 2 * u); },\n mod: (a, b) => ((a % b) + b) % b,\n step: (edge, x) => (x >= edge ? 1 : 0),\n};\nconst CONSTS: Record<string, number> = { PI: Math.PI };\n\n/** The functions and the constant an expression already means: a variable cannot be named like one. */\nexport const EXPRESSION_NAMES: readonly string[] = [...Object.keys(FUNCS), ...Object.keys(CONSTS)];\n\ntype BinOp = '+' | '-' | '*' | '/';\ntype Token =\n | { type: 'num'; value: number }\n | { type: 'id'; name: string }\n | { type: 'op'; op: BinOp }\n | { type: 'lparen' }\n | { type: 'rparen' }\n | { type: 'comma' };\n\ntype Node =\n | { kind: 'num'; value: number }\n | { kind: 'var'; name: string }\n | { kind: 'neg'; child: Node }\n | { kind: 'bin'; op: BinOp; left: Node; right: Node }\n | { kind: 'call'; name: string; args: Node[] };\n\nfunction isDigit(c: string): boolean { return c >= '0' && c <= '9'; }\nfunction isIdStart(c: string): boolean {\n return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c === '_';\n}\nfunction isIdCont(c: string): boolean { return isIdStart(c) || isDigit(c); }\n\nfunction tokenize(src: string): Token[] {\n const out: Token[] = [];\n for (let i = 0; i < src.length;) {\n const c = src[i]!;\n if (c === ' ' || c === '\\t' || c === '\\n' || c === '\\r') { i++; continue; }\n if (isDigit(c) || (c === '.' && isDigit(src[i + 1] ?? ''))) {\n let j = i + 1;\n while (j < src.length && (isDigit(src[j]!) || src[j] === '.')) j++;\n const value = parseFloat(src.slice(i, j));\n if (Number.isNaN(value)) throw new Error(`bad number at ${i}`);\n out.push({ type: 'num', value });\n i = j;\n continue;\n }\n if (isIdStart(c)) {\n let j = i + 1;\n while (j < src.length && isIdCont(src[j]!)) j++;\n out.push({ type: 'id', name: src.slice(i, j) });\n i = j;\n continue;\n }\n if (c === '+' || c === '-' || c === '*' || c === '/') {\n out.push({ type: 'op', op: c });\n i++;\n continue;\n }\n if (c === '(') { out.push({ type: 'lparen' }); i++; continue; }\n if (c === ')') { out.push({ type: 'rparen' }); i++; continue; }\n if (c === ',') { out.push({ type: 'comma' }); i++; continue; }\n throw new Error(`unexpected character \"${c}\" at ${i}`);\n }\n return out;\n}\n\nclass Cursor {\n i = 0;\n constructor(public tokens: Token[]) {}\n peek(): Token | undefined { return this.tokens[this.i]; }\n next(): Token | undefined { return this.tokens[this.i++]; }\n}\n\nfunction parseExpr(c: Cursor): Node { return parseAdd(c); }\n\nfunction parseAdd(c: Cursor): Node {\n let node = parseMul(c);\n for (;;) {\n const t = c.peek();\n if (t?.type !== 'op' || (t.op !== '+' && t.op !== '-')) break;\n c.next();\n node = { kind: 'bin', op: t.op, left: node, right: parseMul(c) };\n }\n return node;\n}\n\nfunction parseMul(c: Cursor): Node {\n let node = parseUnary(c);\n for (;;) {\n const t = c.peek();\n if (t?.type !== 'op' || (t.op !== '*' && t.op !== '/')) break;\n c.next();\n node = { kind: 'bin', op: t.op, left: node, right: parseUnary(c) };\n }\n return node;\n}\n\nfunction parseUnary(c: Cursor): Node {\n const t = c.peek();\n if (t?.type === 'op' && t.op === '-') { c.next(); return { kind: 'neg', child: parseUnary(c) }; }\n if (t?.type === 'op' && t.op === '+') { c.next(); return parseUnary(c); }\n return parsePrimary(c);\n}\n\nfunction parsePrimary(c: Cursor): Node {\n const t = c.next();\n if (!t) throw new Error('unexpected end of expression');\n if (t.type === 'num') return { kind: 'num', value: t.value };\n if (t.type === 'lparen') {\n const node = parseExpr(c);\n const close = c.next();\n if (close?.type !== 'rparen') throw new Error('expected \")\"');\n return node;\n }\n if (t.type === 'id') {\n if (c.peek()?.type === 'lparen') {\n c.next();\n const args: Node[] = [];\n if (c.peek()?.type !== 'rparen') {\n args.push(parseExpr(c));\n while (c.peek()?.type === 'comma') { c.next(); args.push(parseExpr(c)); }\n }\n const close = c.next();\n if (close?.type !== 'rparen') throw new Error('expected \")\"');\n return { kind: 'call', name: t.name, args };\n }\n return { kind: 'var', name: t.name };\n }\n throw new Error(`unexpected token \"${t.type}\"`);\n}\n\nfunction parse(src: string): Node {\n const c = new Cursor(tokenize(src));\n const node = parseExpr(c);\n if (c.peek()) throw new Error('trailing input');\n return node;\n}\n\nfunction evalNode(node: Node, scope: Record<string, number>): number {\n switch (node.kind) {\n case 'num': return node.value;\n case 'var': {\n if (node.name in CONSTS) return CONSTS[node.name]!;\n const v = scope[node.name];\n if (typeof v !== 'number') throw new Error(`undefined variable: ${node.name}`);\n return v;\n }\n case 'neg': return -evalNode(node.child, scope);\n case 'bin': {\n const l = evalNode(node.left, scope);\n const r = evalNode(node.right, scope);\n switch (node.op) {\n case '+': return l + r;\n case '-': return l - r;\n case '*': return l * r;\n case '/': return l / r;\n }\n }\n /* c8 ignore next 5 */\n // eslint-disable-next-line no-fallthrough\n case 'call': {\n const fn = FUNCS[node.name];\n if (!fn) throw new Error(`unknown function: ${node.name}`);\n return fn(...node.args.map(a => evalNode(a, scope)));\n }\n }\n}\n\nconst ZERO_NODE: Node = { kind: 'num', value: 0 };\nconst astCache = new Map<string, Node>();\n\nexport function isExpr(v: unknown): v is string {\n return typeof v === 'string' && v.length > 0;\n}\n\nexport function evaluateExpr(source: string, scope: Record<string, number>): number {\n let ast = astCache.get(source);\n if (ast === undefined) {\n try {\n ast = parse(source);\n } catch (e) {\n console.warn(`pixi-effects: expression failed: ${source}`, e);\n ast = ZERO_NODE;\n }\n astCache.set(source, ast);\n }\n try {\n return evalNode(ast, scope);\n } catch (e) {\n console.warn(`pixi-effects: expression failed: ${source}`, e);\n return 0;\n }\n}\n","import { evaluateExpr, isExpr } from './Parser';\n\nexport interface NormalizeOptions {\n /** Keys whose string values should NOT be evaluated as expressions (e.g. 'fill', 'fontFamily'). */\n skipKeys?: string[];\n /**\n * `'+=36'` / `'-=GW*0.1'`: a value measured from where the layer is. 'allow' keeps it as the string the timeline understands (its right side evaluated);\n * 'forbid' (the default) warns and reads it as the number, because there is nothing to be relative to.\n */\n relative?: 'allow' | 'forbid';\n /** Where the values are, for the warning ('initial', 'the from side of a keyframe', 'a style'). */\n where?: string;\n}\n\nexport function normalizeProps<T>(\n input: T,\n scope: Record<string, number>,\n options: NormalizeOptions = {},\n): T {\n const skip = new Set(options.skipKeys ?? []);\n return walk(input, scope, skip, null, options) as T;\n}\n\nconst RELATIVE = /^\\s*([+-])=([\\s\\S]*)$/;\n\nfunction walk(\n value: unknown,\n scope: Record<string, number>,\n skip: Set<string>,\n currentKey: string | null,\n options: NormalizeOptions,\n): unknown {\n if (Array.isArray(value)) {\n return value.map(v => walk(v, scope, skip, currentKey, options));\n }\n if (value !== null && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const k of Object.keys(value)) {\n out[k] = walk((value as Record<string, unknown>)[k], scope, skip, k, options);\n }\n return out;\n }\n if (typeof value === 'string' && !(currentKey !== null && skip.has(currentKey))) {\n const rel = RELATIVE.exec(value);\n if (rel) {\n const n = evaluateExpr(rel[2]!.trim(), scope);\n if (options.relative === 'allow') return `${rel[1]}=${n}`;\n console.warn(`pixi-effects: \"${value.trim()}\"${currentKey ? ` (${currentKey})` : ''} is a relative value (measured from where the layer is): it works in a keyframe's to / from / set, not in ${options.where ?? 'an initial or a style'}; it is read as the number ${rel[1] === '-' ? -n : n}`);\n return rel[1] === '-' ? -n : n;\n }\n }\n if (isExpr(value) && !(currentKey !== null && skip.has(currentKey))) {\n // Hex colour strings (`#fff`, `#ff0000`, `#ff0000ff`) are passed through\n // verbatim — they're never expressions. Same for `rgb(...)` /\n // `rgba(...)` / `oklch(...)` etc. Without this, a bare `tint: '#ff0000'`\n // would be evaluated and silently zero out.\n if (looksLikeColorString(value)) return value;\n return evaluateExpr(value, scope);\n }\n return value;\n}\n\nfunction looksLikeColorString(s: string): boolean {\n if (s.length === 0) return false;\n if (s.charCodeAt(0) === 35 /* '#' */) return true;\n // Quick prefix check for css-style colour functions: rgb, rgba, hsl,\n // hsla, oklab, oklch, lab, lch.\n return /^(rgb|hsl|oklab|oklch|lab|lch)\\b/i.test(s);\n}\n","import { isEaseName } from './pure/ease';\nimport { suggestName } from './options';\nimport { springProblem } from './spring';\nimport { cubicBezierProblem } from './cubicBezier';\n\nconst FAMILIES = ['power1', 'power2', 'power3', 'power4', 'back', 'elastic', 'bounce', 'circ', 'expo', 'sine'];\n/** The ease names to suggest from (`steps(n)` and parameters such as `back.out(1.7)` are valid too). */\nexport const EASE_NAMES: readonly string[] = ['none', ...FAMILIES.flatMap((f) => [`${f}.in`, `${f}.out`, `${f}.inOut`])];\n\nconst warned = new Set<string>();\nexport const __resetEaseWarnings = (): void => warned.clear();\n\n/**\n * An unknown ease runs as the default (`power1.out`), so a typo in `ease` changes the motion; nothing else would say so.\n * Warn once per name, with a guess.\n */\nexport function checkEase(ease: string, where: string): void {\n if (typeof ease !== 'string') return;\n if (/^\\s*spring/.test(ease)) { // a malformed spring must be said, once\n const problem = springProblem(ease);\n if (!problem || warned.has(ease)) return;\n warned.add(ease);\n console.warn(`pixi-effects: ${where}: unknown ease \"${ease}\" — ${problem}. It runs as its default ease, power1.out.`);\n return;\n }\n if (/^\\s*cubic-bezier/i.test(ease)) { // a malformed one is said once, with what it runs as\n const problem = cubicBezierProblem(ease);\n if (!problem || warned.has(ease)) return;\n warned.add(ease);\n console.warn(`pixi-effects: ${where}: unknown ease \"${ease}\" — ${problem}. It runs as 'none' (a straight line).`);\n return;\n }\n if (isEaseName(ease)) return;\n if (warned.has(ease)) return;\n warned.add(ease);\n if (ease === '') {\n console.warn(`pixi-effects: ${where}: an empty ease (it would run as power1.out): write 'none' for no easing, or a name such as 'power2.out'`);\n return;\n }\n if (/^(power[1-4]|quad|cubic|quart|quint|strong|back|elastic|bounce|circ|expo|sine)$/i.test(ease)) {\n console.warn(`pixi-effects: ${where}: \"${ease}\" is a family, not an ease — write ${ease.toLowerCase()}.out, ${ease.toLowerCase()}.in or ${ease.toLowerCase()}.inOut`);\n return;\n }\n const guess = suggestName(ease, EASE_NAMES);\n console.warn(`pixi-effects: ${where}: unknown ease \"${ease}\"${guess ? ` — did you mean \"${guess}\"?` : ''} (it runs as its default ease, power1.out). Examples: ${EASE_NAMES.slice(0, 7).join(', ')}, back.out(1.7), elastic.out(1, 0.3), steps(8)`);\n}\n","import { setNow, type Timeline } from './timelineEngine';\nimport { kfDuration } from './spring';\nimport { normalizeProps } from '../expr/normalizeProps';\nimport { checkEase } from './ease';\nimport type { Keyframe } from '../types';\nimport type { NamedFilter } from '../filters';\n\nexport type Kind = 'set' | 'to' | 'from' | 'fromTo';\n\nexport interface NormalizedKeyframe {\n at: number;\n duration: number;\n ease: string;\n loop: Record<string, number | boolean>;\n kind: Kind;\n set?: Record<string, unknown>;\n to?: Record<string, unknown>;\n from?: Record<string, unknown>;\n}\n\n/**\n * Loop vars (`repeat`, `yoyo`, `repeatDelay`) for a keyframe. Only a finite,\n * non-negative repeat count is allowed: an infinite repeat would give the\n * timeline an infinite length and break seeking / export.\n */\nexport function loopVars(kf: { repeat?: number; yoyo?: boolean; repeatDelay?: number }): Record<string, number | boolean> {\n const out: Record<string, number | boolean> = {};\n let repeat = 0;\n if (kf.repeat !== undefined) {\n if (Number.isFinite(kf.repeat) && kf.repeat >= 0) {\n repeat = Math.floor(kf.repeat);\n out.repeat = repeat;\n } else {\n console.warn(`pixi-effects: keyframe repeat ${String(kf.repeat)} ignored — repeat must be a finite count >= 0 (the timeline needs a fixed length; for endless motion repeat many times).`);\n }\n }\n if (repeat > 0) {\n if (kf.yoyo !== undefined) out.yoyo = kf.yoyo;\n if (kf.repeatDelay !== undefined && kf.repeatDelay > 0) out.repeatDelay = kf.repeatDelay;\n }\n return out;\n}\n\nexport function resolveAt(at: number | undefined | null, duration: number): number {\n if (at === undefined || at === null) return 0;\n return at < 0 ? duration + at : at;\n}\n\nexport function normalizeKeyframe(kf: Keyframe, parentDuration: number): NormalizedKeyframe {\n const at = resolveAt(kf.at, parentDuration);\n const duration = kfDuration(kf);\n const ease = kf.ease ?? 'none';\n checkEase(ease, 'a keyframe');\n const hasSet = !!kf.set;\n const hasFrom = !!kf.from;\n const hasTo = !!kf.to;\n let kind: Kind;\n if (hasSet) kind = 'set';\n else if (hasFrom && hasTo) kind = 'fromTo';\n else if (hasFrom) kind = 'from';\n else if (hasTo) kind = 'to';\n else kind = 'to';\n return { at, duration, ease, loop: loopVars(kf), kind, set: kf.set, from: kf.from, to: kf.to };\n}\n\nexport interface Partitioned {\n ownProps: Record<string, unknown>;\n filterProps: Record<string, Record<string, unknown>>;\n}\n\nexport function partitionProps(props: Record<string, unknown>): Partitioned {\n const ownProps: Record<string, unknown> = {};\n const filterProps: Record<string, Record<string, unknown>> = {};\n for (const k of Object.keys(props)) {\n const m = k.match(/^filters\\.([^.]+)\\.(.+)$/);\n if (m) {\n const [, name, sub] = m as unknown as [string, string, string];\n (filterProps[name] ??= {})[sub] = props[k];\n } else {\n ownProps[k] = props[k];\n }\n }\n return { ownProps, filterProps };\n}\n\n/**\n * Resolves a routed keyframe path to a concrete tween target.\n * `path` is everything after the registered prefix + dot (for\n * `three.cube.rotation.y` under prefix `three`, path = `cube.rotation.y`).\n * Return null to skip the key (the router is expected to have warned).\n */\nexport type PathRouter = (path: string) => { target: object; prop: string } | null;\nexport type PathRouters = Record<string, PathRouter>;\n\nexport interface RoutedProp {\n target: object;\n prop: string;\n /** Original full key, used to pair from/to sides of a fromTo keyframe. */\n key: string;\n value: unknown;\n}\n\nexport function splitRouted(\n props: Record<string, unknown>,\n routers: PathRouters | undefined,\n): { rest: Record<string, unknown>; routed: RoutedProp[] } {\n if (!routers) return { rest: props, routed: [] };\n const rest: Record<string, unknown> = {};\n const routed: RoutedProp[] = [];\n for (const k of Object.keys(props)) {\n const dot = k.indexOf('.');\n const router = dot > 0 ? routers[k.slice(0, dot)] : undefined;\n if (router) {\n const hit = router(k.slice(dot + 1));\n if (hit) routed.push({ target: hit.target, prop: hit.prop, key: k, value: props[k] });\n // Unresolved keys are dropped — the router already warned.\n } else {\n rest[k] = props[k];\n }\n }\n return { rest, routed };\n}\n\ninterface FilterTarget { filters?: NamedFilter[] | null }\n\nfunction findFilter(target: FilterTarget, name: string): NamedFilter | null {\n if (!target?.filters) return null;\n for (const f of target.filters) {\n if (f?._name === name) return f;\n }\n return null;\n}\n\nconst PIXI_SHORTHANDS = new Set([\n 'scale', 'scaleX', 'scaleY',\n 'anchor', 'anchorX', 'anchorY',\n 'pivot', 'pivotX', 'pivotY',\n 'skew', 'skewX', 'skewY',\n 'rotation',\n 'position', 'positionX', 'positionY',\n 'tilePosition', 'tilePositionX', 'tilePositionY',\n 'tileScale', 'tileScaleX', 'tileScaleY',\n 'tint',\n 'autoAlpha',\n 'fillColor', 'fillAlpha',\n]);\n\nfunction pixiwrap(props: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n const pixi: Record<string, unknown> = {};\n let usedPixi = false;\n for (const [k, v] of Object.entries(props)) {\n if (PIXI_SHORTHANDS.has(k)) { pixi[k] = v; usedPixi = true; }\n else { out[k] = v; }\n }\n if (usedPixi) out.pixi = pixi;\n return out;\n}\n\n\n\nexport function applyKeyframes(\n timeline: Timeline,\n target: object,\n keyframes: Keyframe[] | undefined,\n parentDuration: number,\n scope: Record<string, number>,\n skipKeys: string[] = [],\n offset = 0,\n routers?: PathRouters,\n): void {\n for (const raw of keyframes ?? []) {\n const kf = normalizeKeyframe(raw, parentDuration);\n const at = offset + kf.at;\n if (kf.kind === 'set') {\n const resolved = normalizeProps(kf.set!, scope, { skipKeys, relative: 'allow' });\n const { rest, routed } = splitRouted(resolved, routers);\n for (const r of routed) timeline.set(r.target, { [r.prop]: r.value }, at);\n const { ownProps, filterProps } = partitionProps(rest);\n if (Object.keys(ownProps).length > 0) timeline.set(target, pixiwrap(ownProps), at);\n for (const [name, props] of Object.entries(filterProps)) {\n const f = findFilter(target as FilterTarget, name);\n if (!f) continue;\n timeline.set(f, props, at);\n }\n } else if (kf.kind === 'to') {\n const resolved = normalizeProps(kf.to!, scope, { skipKeys, relative: 'allow' });\n const { rest, routed } = splitRouted(resolved, routers);\n for (const r of routed)\n timeline.to(r.target, { [r.prop]: r.value, duration: kf.duration, ease: kf.ease, ...kf.loop }, at);\n const { ownProps, filterProps } = partitionProps(rest);\n if (Object.keys(ownProps).length > 0)\n timeline.to(target, { ...pixiwrap(ownProps), duration: kf.duration, ease: kf.ease, ...kf.loop }, at);\n for (const [name, props] of Object.entries(filterProps)) {\n const f = findFilter(target as FilterTarget, name);\n if (!f) continue;\n timeline.to(f, { ...props, duration: kf.duration, ease: kf.ease, ...kf.loop }, at);\n }\n } else if (kf.kind === 'from') {\n const resolved = normalizeProps(kf.from!, scope, { skipKeys, relative: 'allow' });\n const { rest, routed } = splitRouted(resolved, routers);\n for (const r of routed)\n timeline.from(r.target, { [r.prop]: r.value, duration: kf.duration, ease: kf.ease, ...kf.loop }, at);\n const { ownProps, filterProps } = partitionProps(rest);\n if (Object.keys(ownProps).length > 0)\n timeline.from(target, { ...pixiwrap(ownProps), duration: kf.duration, ease: kf.ease, ...kf.loop }, at);\n for (const [name, props] of Object.entries(filterProps)) {\n const f = findFilter(target as FilterTarget, name);\n if (!f) continue;\n timeline.from(f, { ...props, duration: kf.duration, ease: kf.ease, ...kf.loop }, at);\n }\n } else {\n const fromResolved = normalizeProps(kf.from!, scope, { skipKeys, where: 'the from side of a from + to keyframe' });\n const toResolved = normalizeProps(kf.to!, scope, { skipKeys, relative: 'allow' });\n const fromRouted = splitRouted(fromResolved, routers);\n const toRouted = splitRouted(toResolved, routers);\n // Pair routed from/to entries by their original key.\n const fromByKey = new Map(fromRouted.routed.map(r => [r.key, r]));\n for (const r of toRouted.routed) {\n const f = fromByKey.get(r.key);\n fromByKey.delete(r.key);\n if (f) {\n timeline.fromTo(r.target, { [r.prop]: f.value },\n { [r.prop]: r.value, duration: kf.duration, ease: kf.ease, ...kf.loop }, at);\n } else {\n timeline.to(r.target, { [r.prop]: r.value, duration: kf.duration, ease: kf.ease, ...kf.loop }, at);\n }\n }\n for (const f of fromByKey.values())\n timeline.from(f.target, { [f.prop]: f.value, duration: kf.duration, ease: kf.ease, ...kf.loop }, at);\n const fromSplit = partitionProps(fromRouted.rest);\n const toSplit = partitionProps(toRouted.rest);\n const ownKeys = new Set([...Object.keys(fromSplit.ownProps), ...Object.keys(toSplit.ownProps)]);\n if (ownKeys.size > 0) {\n timeline.fromTo(\n target,\n { ...pixiwrap(fromSplit.ownProps) },\n { ...pixiwrap(toSplit.ownProps), duration: kf.duration, ease: kf.ease, ...kf.loop },\n at,\n );\n }\n const filterNames = new Set([\n ...Object.keys(fromSplit.filterProps),\n ...Object.keys(toSplit.filterProps),\n ]);\n for (const name of filterNames) {\n const f = findFilter(target as FilterTarget, name);\n if (!f) continue;\n timeline.fromTo(\n f,\n { ...(fromSplit.filterProps[name] ?? {}) },\n { ...(toSplit.filterProps[name] ?? {}), duration: kf.duration, ease: kf.ease, ...kf.loop },\n at,\n );\n }\n }\n }\n}\n\nexport function applyInitial(\n target: object,\n initial: Record<string, unknown> | undefined,\n scope: Record<string, number>,\n skipKeys: string[] = [],\n routers?: PathRouters,\n): void {\n if (!initial) return;\n const resolved = normalizeProps(initial, scope, { skipKeys, where: 'initial' });\n const { rest, routed } = splitRouted(resolved, routers);\n for (const r of routed) setNow(r.target, { [r.prop]: r.value });\n const { ownProps, filterProps } = partitionProps(rest);\n if (Object.keys(ownProps).length > 0) setNow(target, pixiwrap(ownProps));\n for (const [name, props] of Object.entries(filterProps)) {\n const f = findFilter(target as FilterTarget, name);\n if (!f) continue;\n setNow(f, props);\n }\n}\n","import type { CompositionShape } from '../types';\n\n/** Sequence-shaped input expected by buildScope. */\nexport interface ScopeSequence {\n intrinsicWidth: number;\n intrinsicHeight: number;\n at?: number;\n duration?: number;\n}\n\n/** Variables available to expression evaluation. */\nexport interface Scope {\n w: number; h: number;\n W: number; H: number;\n GW: number; GH: number;\n contain: number; cover: number;\n t: number; d: number; T: number;\n}\n\nexport function buildScope(\n sequence: ScopeSequence,\n parent: CompositionShape | null,\n root: CompositionShape,\n): Scope {\n const w = sequence.intrinsicWidth || 0;\n const h = sequence.intrinsicHeight || 0;\n const W = parent?.width ?? root.width;\n const H = parent?.height ?? root.height;\n const GW = root.width;\n const GH = root.height;\n const contain = (w === 0 || h === 0) ? 1 : Math.min(W / w, H / h);\n const cover = (w === 0 || h === 0) ? 1 : Math.max(W / w, H / h);\n return {\n ...(root.vars ?? {}), // the declared numbers first: the built-in words below win\n w, h, W, H, GW, GH,\n contain, cover,\n t: sequence.at ?? 0,\n d: sequence.duration ?? parent?.duration ?? root.duration,\n T: parent?.duration ?? root.duration,\n };\n}\n","import { Filter, GlProgram, GpuProgram, UniformGroup, defaultFilterVert, Color } from 'pixi.js';\n\n// ── Fragment shader ─ GLSL (WebGL renderer) ──────────────────────────────\nconst GL_FRAGMENT = `\nin vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform vec3 uKeyColor;\nuniform float uThreshold;\nuniform float uSmoothing;\nuniform float uSpill;\n\nout vec4 finalColor;\n\nvoid main(void) {\n vec4 raw = texture(uTexture, vTextureCoord);\n\n // Pixi passes pre-multiplied alpha into filters. Un-premultiply so the\n // chromakey distance is computed against the source color, not a darkened\n // version that drifts away from the key as sprite.alpha drops.\n vec3 rgb = raw.a > 0.0 ? raw.rgb / raw.a : vec3(0.0);\n\n vec3 ycbcr = vec3(\n 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b,\n -0.169 * rgb.r - 0.331 * rgb.g + 0.5 * rgb.b + 0.5,\n 0.5 * rgb.r - 0.419 * rgb.g - 0.081 * rgb.b + 0.5\n );\n vec3 keyYcbcr = vec3(\n 0.299 * uKeyColor.r + 0.587 * uKeyColor.g + 0.114 * uKeyColor.b,\n -0.169 * uKeyColor.r - 0.331 * uKeyColor.g + 0.5 * uKeyColor.b + 0.5,\n 0.5 * uKeyColor.r - 0.419 * uKeyColor.g - 0.081 * uKeyColor.b + 0.5\n );\n\n float dist = length(ycbcr - keyYcbcr);\n float alpha = smoothstep(uThreshold - uSmoothing, uThreshold + uSmoothing, dist);\n\n vec3 despilled = rgb;\n if (uSpill > 0.0) {\n float spillAmount = max(0.0, rgb.g - max(rgb.r, rgb.b));\n despilled.g -= spillAmount * uSpill;\n }\n\n float outA = raw.a * alpha;\n finalColor = vec4(despilled * outA, outA);\n}\n`;\n\n// ── Combined vertex+fragment ─ WGSL (WebGPU renderer) ────────────────────\n// Layout follows PIXI v8's built-in filter pattern (see NoiseFilter.wgsl):\n// group(0): global filter uniforms + uTexture + uSampler\n// group(1): the filter's own uniform block — name MUST match the resource\n// key passed to the Filter constructor (`chromaUniforms`).\nconst WGSL_SOURCE = `\nstruct GlobalFilterUniforms {\n uInputSize: vec4<f32>,\n uInputPixel: vec4<f32>,\n uInputClamp: vec4<f32>,\n uOutputFrame: vec4<f32>,\n uGlobalFrame: vec4<f32>,\n uOutputTexture: vec4<f32>,\n};\n\nstruct ChromaUniforms {\n uKeyColor: vec3<f32>,\n uThreshold: f32,\n uSmoothing: f32,\n uSpill: f32,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n@group(0) @binding(1) var uTexture: texture_2d<f32>;\n@group(0) @binding(2) var uSampler : sampler;\n@group(1) @binding(0) var<uniform> chromaUniforms : ChromaUniforms;\n\nstruct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\nfn filterVertexPosition(aPosition : vec2<f32>) -> vec4<f32> {\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n return vec4<f32>(position, 0.0, 1.0);\n}\n\nfn filterTextureCoord(aPosition : vec2<f32>) -> vec2<f32> {\n return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n}\n\n// NOTE on whitespace: PIXI v8's WGSL attribute extractor is regex-based and\n// expects the noise/blur reference format — multi-line param list + space\n// before the colon. A compact one-liner with no space before the colon parses\n// as having NO vertex attributes, which then causes a \"Vertex attribute slot 0\n// not present in the VertexState\" pipeline validation error.\n@vertex\nfn mainVertex(\n @location(0) aPosition : vec2<f32>,\n) -> VSOutput {\n return VSOutput(\n filterVertexPosition(aPosition),\n filterTextureCoord(aPosition),\n );\n}\n\n@fragment\nfn mainFragment(@location(0) uv : vec2<f32>) -> @location(0) vec4<f32> {\n let raw = textureSample(uTexture, uSampler, uv);\n\n // Un-premultiply (see comment in the GLSL version above).\n var rgb: vec3<f32>;\n if (raw.a > 0.0) {\n rgb = raw.rgb / raw.a;\n } else {\n rgb = vec3<f32>(0.0);\n }\n\n let key = chromaUniforms.uKeyColor;\n\n let ycbcr = vec3<f32>(\n 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b,\n -0.169 * rgb.r - 0.331 * rgb.g + 0.5 * rgb.b + 0.5,\n 0.5 * rgb.r - 0.419 * rgb.g - 0.081 * rgb.b + 0.5,\n );\n let keyYcbcr = vec3<f32>(\n 0.299 * key.r + 0.587 * key.g + 0.114 * key.b,\n -0.169 * key.r - 0.331 * key.g + 0.5 * key.b + 0.5,\n 0.5 * key.r - 0.419 * key.g - 0.081 * key.b + 0.5,\n );\n\n let dist = length(ycbcr - keyYcbcr);\n let alpha = smoothstep(\n chromaUniforms.uThreshold - chromaUniforms.uSmoothing,\n chromaUniforms.uThreshold + chromaUniforms.uSmoothing,\n dist,\n );\n\n var despilled = rgb;\n if (chromaUniforms.uSpill > 0.0) {\n let spillAmount = max(0.0, rgb.g - max(rgb.r, rgb.b));\n despilled.g = despilled.g - spillAmount * chromaUniforms.uSpill;\n }\n\n let outA = raw.a * alpha;\n return vec4<f32>(despilled * outA, outA);\n}\n`;\n\nexport interface ChromaKeyOptions {\n keyColor?: string | [number, number, number];\n threshold?: number;\n smoothing?: number;\n spill?: number;\n}\n\nfunction toRgb01(input: string | [number, number, number]): [number, number, number] {\n if (Array.isArray(input)) return [input[0], input[1], input[2]];\n const c = new Color(input);\n return [c.red, c.green, c.blue];\n}\n\nexport class ChromaKeyFilter extends Filter {\n constructor(options: ChromaKeyOptions = {}) {\n const {\n keyColor = '#00ff00',\n threshold = 0.4,\n smoothing = 0.1,\n spill = 0.2,\n } = options;\n\n const glProgram = GlProgram.from({\n vertex: defaultFilterVert,\n fragment: GL_FRAGMENT,\n name: 'chroma-key-filter',\n });\n\n const gpuProgram = GpuProgram.from({\n vertex: { source: WGSL_SOURCE, entryPoint: 'mainVertex' },\n fragment: { source: WGSL_SOURCE, entryPoint: 'mainFragment' },\n });\n\n super({\n glProgram,\n gpuProgram,\n resources: {\n chromaUniforms: new UniformGroup({\n uKeyColor: { value: toRgb01(keyColor), type: 'vec3<f32>' },\n uThreshold: { value: threshold, type: 'f32' },\n uSmoothing: { value: smoothing, type: 'f32' },\n uSpill: { value: spill, type: 'f32' },\n }),\n },\n });\n }\n\n get threshold(): number { return this.resources.chromaUniforms.uniforms.uThreshold as number; }\n set threshold(v: number) { this.resources.chromaUniforms.uniforms.uThreshold = v; }\n get smoothing(): number { return this.resources.chromaUniforms.uniforms.uSmoothing as number; }\n set smoothing(v: number) { this.resources.chromaUniforms.uniforms.uSmoothing = v; }\n get spill(): number { return this.resources.chromaUniforms.uniforms.uSpill as number; }\n set spill(v: number) { this.resources.chromaUniforms.uniforms.uSpill = v; }\n\n setKeyColor(input: string | [number, number, number]): void {\n const rgb = toRgb01(input);\n const u = this.resources.chromaUniforms.uniforms.uKeyColor as [number, number, number];\n u[0] = rgb[0]; u[1] = rgb[1]; u[2] = rgb[2];\n }\n}\n","import { Filter, GlProgram, GpuProgram, UniformGroup } from 'pixi.js';\nimport { warnUnknownOptions } from '../core/options';\n\n/**\n * `{ type: 'grain' }` — film grain that is a pure function of (seed, time, pixel). Integer hash (no sin(), no Math.random()),\n * so the same frame is the same picture when reached by seeking forward, backward or by export, and on any GPU.\n * The grain is added to the un-premultiplied colour, weighted to the mid-tones (it fades out toward pure black and white, so it\n * neither lifts blacks nor clips highlights); zero-mean, so the average brightness of the layer does not change.\n */\nconst HASH_GL = `\nuint hash(uint x) { x ^= x >> 16; x *= 0x7feb352du; x ^= x >> 15; x *= 0x846ca68bu; x ^= x >> 16; return x; }\n// one gaussian-ish value (sum of the four bytes of a hash), mean 0, std 1\nfloat gauss(ivec2 p, uint k) {\n uint h = hash(uint(p.x) + hash(uint(p.y) + hash(k)));\n float s = float(h & 255u) + float((h >> 8) & 255u) + float((h >> 16) & 255u) + float(h >> 24);\n return (s / 255.0 - 2.0) * 1.7320508;\n}\n// the grain value at a pixel: cells of size pixels, smoothly blended\nfloat cell(vec2 pos, float size, uint k) {\n vec2 q = pos / size - 0.5;\n vec2 i = floor(q);\n vec2 f = fract(q);\n ivec2 p = ivec2(i);\n float a = gauss(p, k), b = gauss(p + ivec2(1, 0), k), c = gauss(p + ivec2(0, 1), k), d = gauss(p + ivec2(1, 1), k);\n float v = mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n vec2 wx = vec2(1.0 - f.x, f.x), wy = vec2(1.0 - f.y, f.y);\n return v * inversesqrt(dot(wx, wx) * dot(wy, wy)); // blending lowers the spread: keep std exactly 1 at every pixel\n}`;\n\n// pixi compiles GLSL as WebGL1-compatible by default (no uint); a shader that starts with `#version 300 es` is kept as ES 3.00,\n// and then the vertex shader must be ES 3.00 too.\nconst GL_VERTEX = `#version 300 es\nin vec2 aPosition;\nout vec2 vTextureCoord;\nuniform vec4 uInputSize;\nuniform vec4 uOutputFrame;\nuniform vec4 uOutputTexture;\nvoid main(void) {\n vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;\n position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;\n gl_Position = vec4(position, 0.0, 1.0);\n vTextureCoord = aPosition * (uOutputFrame.zw * uInputSize.zw);\n}`;\n\nconst GL_FRAGMENT = `#version 300 es\nprecision highp float;\nprecision highp int;\nin vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform vec4 uInputSize;\nuniform float uAmount;\nuniform float uSize;\nuniform float uSeed;\nuniform float uFrame;\nuniform float uColor;\nout vec4 finalColor;\n${HASH_GL}\nvoid main(void) {\n vec4 raw = texture(uTexture, vTextureCoord);\n vec3 rgb = raw.a > 0.0 ? raw.rgb / raw.a : vec3(0.0);\n float L = dot(rgb, vec3(0.2126, 0.7152, 0.0722));\n float w = clamp(4.0 * L * (1.0 - L), 0.0, 1.0);\n vec2 pos = vTextureCoord * uInputSize.xy;\n uint k = hash(uint(uSeed) * 0x9E3779B1u + uint(uFrame));\n float n0 = cell(pos, uSize, k);\n vec3 n = vec3(n0);\n if (uColor > 0.0) {\n vec3 nc = vec3(cell(pos, uSize, k + 1u), cell(pos, uSize, k + 2u), cell(pos, uSize, k + 3u));\n n = mix(n, nc, uColor);\n }\n rgb = clamp(rgb + n * (uAmount * w), 0.0, 1.0);\n finalColor = vec4(rgb * raw.a, raw.a);\n}`;\n\nconst WGSL_SOURCE = `\nstruct GlobalFilterUniforms {\n uInputSize: vec4<f32>,\n uInputPixel: vec4<f32>,\n uInputClamp: vec4<f32>,\n uOutputFrame: vec4<f32>,\n uGlobalFrame: vec4<f32>,\n uOutputTexture: vec4<f32>,\n};\nstruct GrainUniforms {\n uAmount: f32,\n uSize: f32,\n uSeed: f32,\n uFrame: f32,\n uColor: f32,\n};\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n@group(0) @binding(1) var uTexture: texture_2d<f32>;\n@group(0) @binding(2) var uSampler : sampler;\n@group(1) @binding(0) var<uniform> grainUniforms : GrainUniforms;\n\nstruct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\nfn filterVertexPosition(aPosition : vec2<f32>) -> vec4<f32> {\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n return vec4<f32>(position, 0.0, 1.0);\n}\nfn filterTextureCoord(aPosition : vec2<f32>) -> vec2<f32> {\n return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n}\n@vertex\nfn mainVertex(\n @location(0) aPosition : vec2<f32>,\n) -> VSOutput {\n return VSOutput(\n filterVertexPosition(aPosition),\n filterTextureCoord(aPosition),\n );\n}\n\nfn hash(xIn: u32) -> u32 {\n var x = xIn;\n x = x ^ (x >> 16u); x = x * 0x7feb352du; x = x ^ (x >> 15u); x = x * 0x846ca68bu; x = x ^ (x >> 16u);\n return x;\n}\nfn gauss(p: vec2<i32>, k: u32) -> f32 {\n let h = hash(u32(p.x) + hash(u32(p.y) + hash(k)));\n let s = f32(h & 255u) + f32((h >> 8u) & 255u) + f32((h >> 16u) & 255u) + f32(h >> 24u);\n return (s / 255.0 - 2.0) * 1.7320508;\n}\nfn cell(pos: vec2<f32>, size: f32, k: u32) -> f32 {\n let q = pos / size - vec2<f32>(0.5);\n let i = floor(q);\n let f = fract(q);\n let p = vec2<i32>(i);\n let a = gauss(p, k);\n let b = gauss(p + vec2<i32>(1, 0), k);\n let c = gauss(p + vec2<i32>(0, 1), k);\n let d = gauss(p + vec2<i32>(1, 1), k);\n let v = mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n let wx = vec2<f32>(1.0 - f.x, f.x);\n let wy = vec2<f32>(1.0 - f.y, f.y);\n return v * inverseSqrt(dot(wx, wx) * dot(wy, wy));\n}\n\n@fragment\nfn mainFragment(@location(0) uv : vec2<f32>) -> @location(0) vec4<f32> {\n let raw = textureSample(uTexture, uSampler, uv);\n var rgb = vec3<f32>(0.0);\n if (raw.a > 0.0) { rgb = raw.rgb / raw.a; }\n let L = dot(rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n let w = clamp(4.0 * L * (1.0 - L), 0.0, 1.0);\n let pos = uv * gfu.uInputSize.xy;\n let k = hash(u32(grainUniforms.uSeed) * 0x9E3779B1u + u32(grainUniforms.uFrame));\n let n0 = cell(pos, grainUniforms.uSize, k);\n var n = vec3<f32>(n0);\n if (grainUniforms.uColor > 0.0) {\n let nc = vec3<f32>(cell(pos, grainUniforms.uSize, k + 1u), cell(pos, grainUniforms.uSize, k + 2u), cell(pos, grainUniforms.uSize, k + 3u));\n n = mix(n, nc, grainUniforms.uColor);\n }\n rgb = clamp(rgb + n * (grainUniforms.uAmount * w), vec3<f32>(0.0), vec3<f32>(1.0));\n return vec4<f32>(rgb * raw.a, raw.a);\n}`;\n\n/** The same integer hash as the shader (an unsigned 32-bit result), so a test can check the maths without a GPU. */\nexport function hash32(xIn: number): number {\n let x = xIn >>> 0;\n x ^= x >>> 16; x = Math.imul(x, 0x7feb352d) >>> 0;\n x ^= x >>> 15; x = Math.imul(x, 0x846ca68b) >>> 0;\n x ^= x >>> 16;\n return x >>> 0;\n}\n\n/** The grain value of the cell (x, y) in grain frame `frame` for `seed`: mean 0, standard deviation 1 (what the shader's `gauss` returns). */\nexport function grainValue(x: number, y: number, frame: number, seed: number): number {\n const k = hash32((Math.imul(seed, 0x9E3779B1) + frame) >>> 0);\n const h = hash32(((x >>> 0) + hash32(((y >>> 0) + hash32(k)) >>> 0)) >>> 0);\n const s = (h & 255) + ((h >>> 8) & 255) + ((h >>> 16) & 255) + (h >>> 24);\n return (s / 255 - 2) * 1.7320508;\n}\n\nconst GRAIN_KEYS = ['amount', 'size', 'seed', 'fps', 'color', 'loop'] as const;\n\nexport interface GrainOptions {\n /** Standard deviation of the grain at mid-grey, 0–1 of full scale (default 0.08). */\n amount?: number;\n /** Grain size in pixels (default 1.5). */\n size?: number;\n /** Another pattern (integer, default 0). */\n seed?: number;\n /** New grain per second (default 24; 0 = a still pattern). */\n fps?: number;\n /** 0 = luminance only, 1 = independent per colour channel (default 0). */\n color?: number;\n /**\n * Seconds after which the pattern starts again (default: never). Give the movie's duration for a clip made to loop, so the grain at the seam is the grain at 0 s\n * and not a jump; `loop × fps` must be a whole number of grain frames (a 10 s clip at 24 fps is 240), or the pattern does not repeat exactly (it warns).\n */\n loop?: number;\n}\n\nexport class GrainFilter extends Filter {\n private _fps: number;\n private _loop = 0;\n constructor(options: GrainOptions = {}) {\n warnUnknownOptions('grain filter', options, GRAIN_KEYS);\n const { amount = 0.08, size = 1.5, seed = 0, fps = 24, color = 0, loop } = options;\n super({\n glProgram: GlProgram.from({ vertex: GL_VERTEX, fragment: GL_FRAGMENT, name: 'grain-filter' }),\n gpuProgram: GpuProgram.from({ vertex: { source: WGSL_SOURCE, entryPoint: 'mainVertex' }, fragment: { source: WGSL_SOURCE, entryPoint: 'mainFragment' } }),\n resources: {\n grainUniforms: new UniformGroup({\n uAmount: { value: amount, type: 'f32' }, uSize: { value: Math.max(size, 0.25), type: 'f32' }, uSeed: { value: Math.floor(seed), type: 'f32' },\n uFrame: { value: 0, type: 'f32' }, uColor: { value: color, type: 'f32' },\n }),\n },\n });\n this._fps = fps;\n if (loop !== undefined) this.loop = loop;\n }\n private get u(): Record<string, number> { return this.resources.grainUniforms.uniforms as Record<string, number>; }\n get amount(): number { return this.u.uAmount!; }\n set amount(v: number) { this.u.uAmount = v; }\n get size(): number { return this.u.uSize!; }\n set size(v: number) { this.u.uSize = Math.max(v, 0.25); }\n get seed(): number { return this.u.uSeed!; }\n set seed(v: number) { this.u.uSeed = Math.floor(v); }\n get color(): number { return this.u.uColor!; }\n set color(v: number) { this.u.uColor = v; }\n get fps(): number { return this._fps; }\n set fps(v: number) { this._fps = v; }\n /** Seconds after which the pattern repeats (0 = never). */\n get loop(): number { return this._loop; }\n set loop(v: number) {\n if (!(v > 0)) {\n if (v !== 0) console.warn(`pixi-effects: grain: loop must be above 0 (seconds), got ${String(v)}: ignored (leave it out for a pattern that never repeats)`);\n this._loop = 0;\n return;\n }\n const n = v * this._fps;\n if (this._fps > 0 && Math.abs(n - Math.round(n)) > 1e-3) {\n console.warn(`pixi-effects: grain: loop ${v} s at ${this._fps} fps is ${(Math.round(n * 10) / 10).toString()} grain frames, not a whole number: the pattern would not repeat exactly at the seam. Change fps (or loop) so that loop × fps is whole`);\n }\n this._loop = v;\n }\n /** The movie calls this with the time (s) of the frame it is about to draw: the grain is new every 1/fps s. */\n setTime(t: number): void {\n // A thousandth of a grain frame of slack: a time that should sit ON a boundary (k / fps) arrives a hair under it when it passes\n // through a remapped clock (the timeline rounds time to 1e-7 s), and the grain would be the previous frame's, a different picture.\n const frame = this._fps > 0 ? Math.floor(t * this._fps + 1e-3) : 0;\n const period = this._fps > 0 && this._loop > 0 ? Math.round(this._loop * this._fps) : 0; // a loop: the pattern comes round again after `loop` seconds\n this.u.uFrame = period > 0 ? frame % period : frame;\n }\n}\n","import { Filter, GlProgram, GpuProgram, UniformGroup } from 'pixi.js';\nimport { suggestName, warnUnknownOptions } from '../core/options';\nimport { hash32 } from './Grain';\n\n/**\n * `{ type: 'warp' }`: a layer's picture bent by a travelling wave (`wave`) or a drifting noise (`haze`: heat shimmer, water). The offset of a\n * pixel is a pure function of (kind, its position, the frame's time, the options): the integer hash of `grain` (no sin() fed with a large\n * phase), and the time the movie hands every `TimeFilter`. So a frame is the same picture however it was reached.\n */\nexport const WARP_KINDS = ['wave', 'haze'] as const;\nexport type WarpKind = (typeof WARP_KINDS)[number];\n\nexport interface WarpOptions {\n /** `'wave'` (default) or `'haze'`. */\n kind?: WarpKind;\n /** The largest shift in px (default 6). */\n strength?: number;\n /** Wavelength (`wave`) or size of the noise cells (`haze`) in px (default 80). */\n scale?: number;\n /** Phase cycles per second for `wave`, drift per second in cells for `haze` (default 0.5; 0 stands still). */\n speed?: number;\n /** Direction the wave travels, in degrees (default 0: to the right, so the picture shifts up and down). */\n angle?: number;\n /** Another noise pattern for `haze` (integer, default 0). */\n seed?: number;\n}\n\nconst OPTION_KEYS = ['kind', 'strength', 'scale', 'speed', 'angle', 'seed'] as const;\nconst DEG = Math.PI / 180;\n\nconst smooth = (f: number): number => f * f * (3 - 2 * f);\n/** A random number in 0..1 for the lattice point (x, y): the integer hash of the shader. */\nfunction lattice(x: number, y: number, seed: number): number {\n const k = hash32(seed >>> 0); // the shader: hash(uint(p.x) + hash(uint(p.y) + hash(k))), k = hash(seed)\n const h = hash32(((x >>> 0) + hash32(((y >>> 0) + hash32(k)) >>> 0)) >>> 0);\n return (h >>> 8) / 16777215;\n}\n/** Smooth value noise in 0..1 at (x, y). */\nfunction valueNoise(x: number, y: number, seed: number): number {\n const ix = Math.floor(x), iy = Math.floor(y);\n const fx = smooth(x - ix), fy = smooth(y - iy);\n const a = lattice(ix, iy, seed), b = lattice(ix + 1, iy, seed), c = lattice(ix, iy + 1, seed), d = lattice(ix + 1, iy + 1, seed);\n return (a + (b - a) * fx) * (1 - fy) + (c + (d - c) * fx) * fy;\n}\n\n/** The same maths as the shader, in px: where to read the picture instead of at (x, y). The tests compare the GPU picture against it. */\nexport function warpOffset(kind: WarpKind, x: number, y: number, t: number, o: { strength: number; scale: number; speed: number; angle: number; seed: number }): { dx: number; dy: number } {\n if (kind === 'wave') {\n const a = o.angle * DEG;\n const phase = (x * Math.cos(a) + y * Math.sin(a)) / o.scale - o.speed * t;\n const s = o.strength * Math.sin(2 * Math.PI * phase);\n return { dx: -Math.sin(a) * s, dy: Math.cos(a) * s };\n }\n const px = x / o.scale, py = y / o.scale - o.speed * t;\n return {\n dx: o.strength * (valueNoise(px, py, o.seed) - 0.5) * 2,\n dy: o.strength * (valueNoise(px + 37.2, py + 17.8, o.seed) - 0.5) * 2,\n };\n}\n\nconst HASH_GL = `\nuint hash(uint x) { x ^= x >> 16; x *= 0x7feb352du; x ^= x >> 15; x *= 0x846ca68bu; x ^= x >> 16; return x; }\nfloat lattice(ivec2 p, uint k) {\n uint h = hash(uint(p.x) + hash(uint(p.y) + hash(k)));\n return float(h >> 8) / 16777215.0;\n}\nfloat valueNoise(vec2 q, uint k) {\n vec2 i = floor(q);\n vec2 f = fract(q);\n vec2 u = f * f * (3.0 - 2.0 * f);\n ivec2 p = ivec2(i);\n float a = lattice(p, k), b = lattice(p + ivec2(1, 0), k), c = lattice(p + ivec2(0, 1), k), d = lattice(p + ivec2(1, 1), k);\n return mix(mix(a, b, u.x), mix(c, d, u.x), u.y);\n}`;\n\n// pixi compiles GLSL as WebGL1-compatible by default (no uint); a shader that starts with `#version 300 es` is kept as ES 3.00,\n// and then the vertex shader must be ES 3.00 too.\nconst GL_VERTEX = `#version 300 es\nprecision highp float;\nin vec2 aPosition;\nout vec2 vTextureCoord;\nuniform highp vec4 uInputSize;\nuniform highp vec4 uOutputFrame;\nuniform highp vec4 uOutputTexture;\nvoid main(void) {\n vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;\n position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;\n gl_Position = vec4(position, 0.0, 1.0);\n vTextureCoord = aPosition * (uOutputFrame.zw * uInputSize.zw);\n}`;\n\nconst GL_FRAGMENT = `#version 300 es\nprecision highp float;\nprecision highp int;\nin vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform highp vec4 uInputSize;\nuniform highp vec4 uInputClamp;\nuniform float uStrength;\nuniform float uScale;\nuniform float uSpeed;\nuniform float uAngle;\nuniform float uSeed;\nuniform float uMode;\nuniform float uTime;\nout vec4 finalColor;\n${HASH_GL}\nvoid main(void) {\n vec2 pos = vTextureCoord * uInputSize.xy;\n vec2 off;\n if (uMode < 0.5) {\n float phase = dot(pos, vec2(cos(uAngle), sin(uAngle))) / uScale - uSpeed * uTime;\n float s = uStrength * sin(6.28318530718 * phase);\n off = vec2(-sin(uAngle), cos(uAngle)) * s;\n } else {\n uint k = hash(uint(uSeed));\n vec2 p = vec2(pos.x / uScale, pos.y / uScale - uSpeed * uTime);\n off = uStrength * 2.0 * vec2(valueNoise(p, k) - 0.5, valueNoise(p + vec2(37.2, 17.8), k) - 0.5);\n }\n vec2 suv = clamp(vTextureCoord + off * uInputSize.zw, uInputClamp.xy, uInputClamp.zw);\n finalColor = texture(uTexture, suv);\n}`;\n\nconst WGSL_SOURCE = `\nstruct GlobalFilterUniforms {\n uInputSize: vec4<f32>,\n uInputPixel: vec4<f32>,\n uInputClamp: vec4<f32>,\n uOutputFrame: vec4<f32>,\n uGlobalFrame: vec4<f32>,\n uOutputTexture: vec4<f32>,\n};\nstruct WarpUniforms {\n uStrength: f32,\n uScale: f32,\n uSpeed: f32,\n uAngle: f32,\n uSeed: f32,\n uMode: f32,\n uTime: f32,\n};\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n@group(0) @binding(1) var uTexture: texture_2d<f32>;\n@group(0) @binding(2) var uSampler : sampler;\n@group(1) @binding(0) var<uniform> warpUniforms : WarpUniforms;\n\nstruct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\nfn filterVertexPosition(aPosition : vec2<f32>) -> vec4<f32> {\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n return vec4<f32>(position, 0.0, 1.0);\n}\nfn filterTextureCoord(aPosition : vec2<f32>) -> vec2<f32> {\n return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n}\n@vertex\nfn mainVertex(\n @location(0) aPosition : vec2<f32>,\n) -> VSOutput {\n return VSOutput(\n filterVertexPosition(aPosition),\n filterTextureCoord(aPosition),\n );\n}\n\nfn hash(xIn: u32) -> u32 {\n var x = xIn;\n x = x ^ (x >> 16u); x = x * 0x7feb352du; x = x ^ (x >> 15u); x = x * 0x846ca68bu; x = x ^ (x >> 16u);\n return x;\n}\nfn lattice(p: vec2<i32>, k: u32) -> f32 {\n let h = hash(u32(p.x) + hash(u32(p.y) + hash(k)));\n return f32(h >> 8u) / 16777215.0;\n}\nfn valueNoise(q: vec2<f32>, k: u32) -> f32 {\n let i = floor(q);\n let f = fract(q);\n let u = f * f * (3.0 - 2.0 * f);\n let p = vec2<i32>(i);\n let a = lattice(p, k);\n let b = lattice(p + vec2<i32>(1, 0), k);\n let c = lattice(p + vec2<i32>(0, 1), k);\n let d = lattice(p + vec2<i32>(1, 1), k);\n return mix(mix(a, b, u.x), mix(c, d, u.x), u.y);\n}\n\n@fragment\nfn mainFragment(@location(0) uv : vec2<f32>) -> @location(0) vec4<f32> {\n let pos = uv * gfu.uInputSize.xy;\n var off = vec2<f32>(0.0);\n if (warpUniforms.uMode < 0.5) {\n let phase = dot(pos, vec2<f32>(cos(warpUniforms.uAngle), sin(warpUniforms.uAngle))) / warpUniforms.uScale - warpUniforms.uSpeed * warpUniforms.uTime;\n let s = warpUniforms.uStrength * sin(6.28318530718 * phase);\n off = vec2<f32>(-sin(warpUniforms.uAngle), cos(warpUniforms.uAngle)) * s;\n } else {\n let k = hash(u32(warpUniforms.uSeed));\n let p = vec2<f32>(pos.x / warpUniforms.uScale, pos.y / warpUniforms.uScale - warpUniforms.uSpeed * warpUniforms.uTime);\n off = warpUniforms.uStrength * 2.0 * vec2<f32>(valueNoise(p, k) - 0.5, valueNoise(p + vec2<f32>(37.2, 17.8), k) - 0.5);\n }\n let suv = clamp(uv + off * gfu.uInputSize.zw, gfu.uInputClamp.xy, gfu.uInputClamp.zw);\n return textureSampleLevel(uTexture, uSampler, suv, 0.0);\n}`;\n\nexport class WarpFilter extends Filter {\n constructor(options: WarpOptions = {}) {\n warnUnknownOptions('warp filter', options, OPTION_KEYS);\n let { kind = 'wave', strength = 6, scale = 80, speed = 0.5, angle = 0, seed = 0 } = options;\n if (!(WARP_KINDS as readonly string[]).includes(kind)) {\n const guess = suggestName(String(kind), WARP_KINDS);\n console.warn(`pixi-effects: warp: kind ${JSON.stringify(kind)} is not supported${guess ? `; did you mean \"${guess}\"?` : ''} (use ${WARP_KINDS.join(' or ')}); wave is used`);\n kind = 'wave';\n }\n if (!(strength >= 0 && strength <= 200)) {\n console.warn(`pixi-effects: warp: strength ${strength} is not a number from 0 to 200: it is the largest shift in pixels (8 is a clear ripple); ${strength > 200 ? '200' : '0'} is used`);\n strength = strength > 200 ? 200 : 0;\n }\n if (!(seed >= 0)) {\n console.warn(`pixi-effects: warp: seed ${seed} must be 0 or more (an integer that picks the haze pattern); 0 is used`);\n seed = 0;\n }\n if (!(scale > 0)) {\n console.warn(`pixi-effects: warp: scale ${scale} must be above 0: it is the wavelength in pixels (80 is the default); 1 is used`);\n scale = 1;\n }\n super({\n glProgram: GlProgram.from({ vertex: GL_VERTEX, fragment: GL_FRAGMENT, name: 'warp-filter' }),\n gpuProgram: GpuProgram.from({ vertex: { source: WGSL_SOURCE, entryPoint: 'mainVertex' }, fragment: { source: WGSL_SOURCE, entryPoint: 'mainFragment' } }),\n resources: {\n warpUniforms: new UniformGroup({\n uStrength: { value: strength, type: 'f32' }, uScale: { value: scale, type: 'f32' }, uSpeed: { value: speed, type: 'f32' },\n uAngle: { value: angle * DEG, type: 'f32' }, uSeed: { value: Math.floor(seed), type: 'f32' },\n uMode: { value: kind === 'haze' ? 1 : 0, type: 'f32' }, uTime: { value: 0, type: 'f32' },\n }),\n },\n });\n this.padding = Math.ceil(strength); // the shifted read may come from outside the layer\n }\n private get u(): Record<string, number> { return this.resources.warpUniforms.uniforms as Record<string, number>; }\n get kind(): WarpKind { return this.u.uMode === 1 ? 'haze' : 'wave'; }\n set kind(v: WarpKind) { this.u.uMode = v === 'haze' ? 1 : 0; }\n get strength(): number { return this.u.uStrength!; }\n set strength(v: number) { this.u.uStrength = v; this.padding = Math.ceil(Math.max(0, v)); }\n get scale(): number { return this.u.uScale!; }\n set scale(v: number) { this.u.uScale = Math.max(v, 1e-3); }\n get speed(): number { return this.u.uSpeed!; }\n set speed(v: number) { this.u.uSpeed = v; }\n get angle(): number { return this.u.uAngle! / DEG; }\n set angle(v: number) { this.u.uAngle = v * DEG; }\n get seed(): number { return this.u.uSeed!; }\n set seed(v: number) { this.u.uSeed = v >= 0 ? Math.floor(v) : 0; }\n /** The movie calls this with the time (s) of the frame it is about to draw. */\n setTime(t: number): void { this.u.uTime = t; }\n}\n","import { AlphaFilter, BlurFilter, ColorMatrixFilter, GpuProgram, NoiseFilter } from 'pixi.js'; // by name, not `* as`: a namespace read by a\nimport type { Filter } from 'pixi.js'; // string keeps all of pixi.js in an app's bundle\nimport type { NamedFilterType } from '../types';\nimport { suggestName } from '../core/options';\nimport { GrainFilter } from './Grain';\nimport { WarpFilter } from './Warp';\n\n/**\n * Declarative filters: `{ type: 'glow', outerStrength: 3 }` instead of `{ type: 'custom', filter: new GlowFilter(...) }`.\n * The type is the filter's class name without `Filter`, in camelCase (case does not matter): `glow`, `dropShadow`,\n * `crt`, `rgbSplit`, `oldFilm`, `pixelate`... Every other key is passed to the filter as its options. `blur`, `noise`,\n * `alpha` and `colorMatrix` come from pixi.js; the rest come from the `pixi-filters` package, loaded on first use.\n */\n\ntype FilterCtor = new (options?: Record<string, unknown>) => Filter;\n\n/** pixi.js's own filters: no extra package. Looked up when used (a test may mock pixi.js without them). */\n/** Read when a filter is made, not when this module loads (a test that mocks pixi.js without the filters still loads it). */\nconst CORE: Record<string, () => FilterCtor> = { blur: () => BlurFilter as unknown as FilterCtor, noise: () => NoiseFilter as unknown as FilterCtor, alpha: () => AlphaFilter as unknown as FilterCtor };\nconst CORE_TYPES = ['blur', 'noise', 'alpha', 'colorMatrix', 'grain', 'warp'] as const;\n\n/** The filters of pixi-filters v6, by type name. */\nconst LIBRARY_TYPES = [\n 'adjustment', 'advancedBloom', 'ascii', 'backdropBlur', 'bevel', 'bloom', 'bulgePinch', 'colorGradient', 'colorMap',\n 'colorOverlay', 'colorReplace', 'convolution', 'crossHatch', 'crt', 'dot', 'dropShadow', 'emboss', 'glitch', 'glow',\n 'godray', 'grayscale', 'hslAdjustment', 'kawaseBlur', 'motionBlur', 'multiColorReplace', 'oldFilm', 'outline',\n 'pixelate', 'radialBlur', 'reflection', 'rgbSplit', 'shockwave', 'simpleLightmap', 'simplexNoise', 'tiltShift',\n 'tiltShiftAxis', 'twist', 'zoomBlur',\n] as const;\n\n/** The compiler checks the type `NamedFilterType` (what `filters: [{ type }]` accepts in TypeScript) and these tables name the same filters, both ways: add a filter to one and `tsc` says so. */\ntype Same<A, B> = [Exclude<A, B>] extends [never] ? ([Exclude<B, A>] extends [never] ? true : { onlyInTables: Exclude<B, A> }) : { onlyInType: Exclude<A, B> };\ntype Assert<T extends true> = T;\nexport type __FilterTypesCovered = Assert<Same<NamedFilterType, (typeof CORE_TYPES)[number] | (typeof LIBRARY_TYPES)[number]>>;\n\n/** Every type that `filters: [{ type }]` accepts besides `chromaKey` and `custom`. */\nexport const FILTER_TYPES: readonly string[] = [...CORE_TYPES, ...LIBRARY_TYPES];\n\nconst NOT_NAMED = new Set(['custom', 'chromaKey']);\nconst lower = (s: string): string => s.toLowerCase();\nconst isLibraryType = (t: string): boolean => LIBRARY_TYPES.some(n => lower(n) === lower(t));\nconst isCoreType = (t: string): boolean => CORE_TYPES.some(n => lower(n) === lower(t));\n\nexport function isNamedFilterType(t: string): boolean {\n return !NOT_NAMED.has(t);\n}\n\nfunction unknownType(t: string): Error {\n const guess = suggestName(t, FILTER_TYPES);\n return new Error(`pixi-effects: unknown filter type \"${t}\"${guess ? ` — did you mean \"${guess}\"?` : ''} (valid: ${[...FILTER_TYPES, 'chromaKey', 'custom'].join(', ')})`);\n}\n\n// ── the pixi-filters module, registered once ──────────────────────────────────────────\nlet library: Map<string, FilterCtor> | null = null;\n\n/** Register the `pixi-filters` module (its exports named `*Filter`). `ensureFilterLibrary` does this for you. */\nexport function registerFilterLibrary(mod: Record<string, unknown>): void {\n library = new Map();\n for (const [key, value] of Object.entries(mod)) {\n if (key.endsWith('Filter') && typeof value === 'function') library.set(lower(key.slice(0, -'Filter'.length)), value as FilterCtor);\n }\n}\nexport function resetFilterLibrary(): void { library = null; }\n\n/** `what`: `\"glow\"`, or a list of quoted types each with its layer (`\"glow\" (layer \"title\"), \"crt\"`); `many` when it names more than one. */\nconst MISSING = (what: string, why?: string, many = false): Error => new Error(\n `pixi-effects: the ${many ? 'filters' : 'filter'} ${what} ${many ? 'come' : 'comes'} from the pixi-filters package${why ? ` (${why})` : ''}. ` +\n 'Add it to your import map (\"pixi-filters\": \"https://esm.sh/pixi-filters@6.1.5?external=pixi.js\") or run `npm i pixi-filters`.');\n\n/** The pixi-filters types this composition uses, each once, with the first named layer that uses it. Also rejects unknown types. */\nfunction libraryFilters(spec: unknown): Map<string, string | undefined> {\n const found = new Map<string, string | undefined>();\n const visit = (node: unknown): void => {\n if (!node || typeof node !== 'object') return;\n if (Array.isArray(node)) { node.forEach(visit); return; }\n const o = node as Record<string, unknown>;\n if (Array.isArray(o.filters)) {\n for (const f of o.filters as Array<{ type?: unknown }>) {\n if (typeof f?.type !== 'string' || !isNamedFilterType(f.type)) continue;\n if (isLibraryType(f.type)) { if (!found.get(f.type)) found.set(f.type, typeof o.name === 'string' && o.name ? o.name : undefined); }\n else if (!isCoreType(f.type)) throw unknownType(f.type);\n }\n }\n for (const key of ['sequences', 'mask', 'layer']) visit(o[key]); // ('layer': a mask written as { layer: <spec>, invert })\n };\n visit(spec);\n return found;\n}\n\n/** Does any layer in this composition use a filter that needs the pixi-filters package? Also rejects unknown types. */\nexport function needsFilterLibrary(spec: unknown): boolean { return libraryFilters(spec).size > 0; }\n\n/** Load `pixi-filters` (once) when the composition uses one of its filters. Call before building the layers. */\nexport async function ensureFilterLibrary(\n spec: unknown,\n load: () => Promise<Record<string, unknown>> = () => import('pixi-filters') as unknown as Promise<Record<string, unknown>>,\n): Promise<void> {\n const used = libraryFilters(spec);\n if (!used.size || library) return;\n try {\n registerFilterLibrary(await load());\n } catch (e) {\n const what = [...used].map(([type, layer]) => `\"${type}\"${layer ? ` (layer \"${layer}\")` : ''}`).join(', ');\n throw MISSING(what, (e as Error).message, used.size > 1);\n }\n}\n\n/** Filters whose constructor takes one plain value instead of an options object: type → the option that is that value. */\nconst SINGLE_VALUE: Record<string, string> = { pixelate: 'size', emboss: 'strength' };\n\nconst MATRIX_PRESETS = ['sepia', 'grayscale', 'negative', 'polaroid', 'technicolor', 'vintage', 'kodachrome', 'browni'] as const;\n\nfunction colorMatrix(params: Record<string, unknown>): Filter {\n const f = new ColorMatrixFilter() as unknown as Record<string, unknown> & { matrix: number[] };\n const preset = params.preset as string | undefined;\n if (preset !== undefined) {\n if (!(MATRIX_PRESETS as readonly string[]).includes(preset)) {\n const guess = suggestName(preset, MATRIX_PRESETS);\n throw new Error(`pixi-effects: colorMatrix preset \"${preset}\" is not one of ${MATRIX_PRESETS.join(', ')}${guess ? ` — did you mean \"${guess}\"?` : ''}`);\n }\n (f[preset === 'grayscale' ? 'desaturate' : preset] as () => void).call(f);\n }\n if (Array.isArray(params.matrix)) f.matrix = params.matrix as number[];\n return f as unknown as Filter;\n}\n\nconst GRADIENT_TYPES = ['linear', 'radial', 'conic'];\n\n/** `colorGradient`: the filter's own option is called `type`, which the DSL already uses, so it is written `gradientType`. */\nfunction colorGradientParams(params: Record<string, unknown>): Record<string, unknown> {\n const { gradientType, ...rest } = params;\n if (gradientType === undefined) return rest;\n const i = GRADIENT_TYPES.indexOf(String(gradientType));\n if (i < 0) throw new Error(`pixi-effects: colorGradient gradientType \"${gradientType}\" is not one of linear, radial or conic`);\n return { ...rest, type: i };\n}\n\n/**\n * `bulgePinch.center` is a fraction of the filtered layer ({ x: 0.5, y: 0.5 } is its middle), unlike `twist.offset`, `zoomBlur.center` and `shockwave.center`, which are\n * canvas pixels. A pixel value ({ x: 900, y: 500 }) puts the bulge far outside the layer and nothing shows, and nothing says so: said here, once per filter.\n */\nfunction lintBulgeCenter(params: Record<string, unknown>): void {\n const c = params.center as { x?: unknown; y?: unknown } | unknown[] | undefined;\n if (!c || typeof c !== 'object') return;\n const xy = Array.isArray(c) ? [c[0], c[1]] : [c.x, c.y];\n if (!xy.some(v => typeof v === 'number' && Math.abs(v) > 3)) return;\n console.warn(`pixi-effects: bulgePinch.center is 0-1 of the layer ({ x: 0.5, y: 0.5 } is its middle), but ${JSON.stringify(c)} reads as pixels: the bulge lands outside the layer and nothing shows. Write the point as a fraction (x / the layer's width), or animate center.x / center.y between 0 and 1.`);\n}\n\n/**\n * pixi-filters 6.1.5: RadialBlurFilter writes `uKernelSize` as an i32 but its WGSL struct reads an f32, so on WebGPU (the default backend) the 15 is read as a\n * denormal 0 and the blur is skipped: `radialBlur` did nothing at all (WebGL, where the GLSL says int, was fine). The WGSL is rebuilt with the field as an i32.\n * Checked against every filter of the package: this is the only mismatch. Remove when pixi-filters fixes it (the check below then finds nothing to change).\n */\nfunction fixRadialBlurGpu(f: Filter): Filter {\n const holder = f as unknown as { gpuProgram?: { name?: string; vertex: unknown; fragment: { source: string } } };\n const gp = holder.gpuProgram;\n if (!gp || !/uKernelSize\\s*:\\s*f32/.test(gp.fragment.source)) return f;\n holder.gpuProgram = GpuProgram.from({ name: gp.name, vertex: gp.vertex as Parameters<typeof GpuProgram.from>[0]['vertex'], fragment: { ...gp.fragment, source: gp.fragment.source.replace(/uKernelSize(\\s*):\\s*f32/, 'uKernelSize$1: i32') } }) as typeof gp;\n return f;\n}\n\n/** Build the filter a `{ type: 'glow', … }` spec names. */\nexport function createNamedFilter(type: string, params: Record<string, unknown>): Filter {\n if (lower(type) === 'bulgepinch') lintBulgeCenter(params);\n if (lower(type) === 'colormatrix') return colorMatrix(params);\n if (lower(type) === 'grain') return new GrainFilter(params) as unknown as Filter;\n if (lower(type) === 'warp') return new WarpFilter(params) as unknown as Filter;\n const core = Object.entries(CORE).find(([k]) => lower(k) === lower(type));\n if (core) return new (core[1]())(params);\n if (!isLibraryType(type)) throw unknownType(type);\n const Ctor = library?.get(lower(type));\n if (!Ctor) throw MISSING(`\"${type}\"`, library ? 'not found in the loaded package' : 'not loaded yet');\n const single = SINGLE_VALUE[Object.keys(SINGLE_VALUE).find(k => lower(k) === lower(type)) ?? ''];\n if (single) return new (Ctor as unknown as new (v?: unknown) => Filter)(params[single]);\n const made = new Ctor(lower(type) === 'colorgradient' ? colorGradientParams(params) : params);\n return lower(type) === 'radialblur' ? fixRadialBlurGpu(made) : made;\n}\n","import type { Filter } from 'pixi.js';\nimport type { FilterSpec, CustomFilterSpec } from '../types';\nimport { ChromaKeyFilter } from './ChromaKey';\nimport { createNamedFilter } from './named';\n\ninterface FilterCtor {\n new (params: Record<string, unknown>): Filter;\n}\n\nconst registry: Record<string, FilterCtor> = {\n chromaKey: ChromaKeyFilter as unknown as FilterCtor,\n};\n\n/** Internal marker we set on filter instances so partition path resolution finds them. */\nexport interface NamedFilter extends Filter {\n _name?: string;\n}\n\n/**\n * Duck-type check for a PIXI Filter. We can't use `instanceof Filter` because\n * filters loaded from a different bundled copy of `pixi.js` (e.g. via esm.sh\n * or a duplicated install) won't share the same class reference. PIXI's\n * `Filter` exposes an `apply` method on its prototype; check for that instead.\n */\nfunction looksLikePixiFilter(x: unknown): x is Filter {\n return !!x && typeof x === 'object' && typeof (x as { apply?: unknown }).apply === 'function';\n}\n\n/**\n * A copy of plain objects and arrays, all the way down: a filter keeps the object it is given (`red: { x, y }` is its uniform), and a keyframe on\n * `'filters.s.red.x'` writes the leaf in place, so without a copy the author's spec would change with the last frame that was drawn.\n */\nfunction copyPlain<T>(v: T): T {\n if (Array.isArray(v)) return v.map(copyPlain) as unknown as T;\n if (v && typeof v === 'object' && Object.getPrototypeOf(v) === Object.prototype) {\n return Object.fromEntries(Object.entries(v as Record<string, unknown>).map(([k, x]) => [k, copyPlain(x)])) as T;\n }\n return v;\n}\n\nexport function createFilter(spec: FilterSpec): NamedFilter {\n if (spec.type === 'custom') {\n const inst = (spec as CustomFilterSpec).filter;\n if (!looksLikePixiFilter(inst)) {\n throw new Error('pixi-effects: { type: \"custom\" } requires a `filter` that is a PIXI Filter instance (duck-typed: must have an `apply` method).');\n }\n const named = inst as NamedFilter;\n named._name = spec.name;\n return named;\n }\n const { type, name, ...given } = spec as Record<string, unknown> & { type: string; name?: string };\n const unset = Object.keys(given).filter(k => given[k] === undefined);\n if (unset.length > 0) { // an explicit undefined would overwrite the filter's own default (bloom: \"reading 'x'\" at init)\n console.warn(`pixi-effects: the \"${type}\" filter has ${unset.map(k => `\"${k}\"`).join(', ')} set to undefined (a misspelt variable or a missing field?): the filter's default is used instead.`);\n for (const k of unset) delete given[k];\n }\n const params = copyPlain(given);\n const Cls = registry[type];\n const inst = (Cls ? new Cls(params) : createNamedFilter(type, params)) as NamedFilter;\n inst._name = name;\n return inst;\n}\n\nexport function findFilterByName(filters: NamedFilter[], name: string): NamedFilter | null {\n return filters.find(f => f._name === name) ?? null;\n}\n","import type { Container } from 'pixi.js';\nimport { Rectangle } from 'pixi.js';\nimport { applyKeyframes, applyInitial, type PathRouters } from '../core/Timeline';\nimport { buildScope, type Scope } from '../expr/Scope';\nimport { createFilter, type NamedFilter } from '../filters';\nimport type { CompositionShape, SequenceSpec, AudioDescriptor } from '../types';\nimport type { SpaceHost } from '../space/Layer3D';\nimport type { Timeline } from '../core/timelineEngine';\n\n\n\nexport abstract class Sequence {\n spec: SequenceSpec;\n parent: CompositionShape | null;\n root: CompositionShape;\n target: Container | null = null;\n intrinsicWidth = 0;\n intrinsicHeight = 0;\n at: number;\n duration: number | undefined;\n /** @internal */\n filters: NamedFilter[] = [];\n /**\n * Mask sequence built from `spec.mask`, if any. Built and added to the\n * scene graph by the parent CompositionSequence; rendered as a mask\n * (not a normal child) by PIXI when `target.mask = maskSequence.target`.\n * @internal\n */\n maskSequence: Sequence | null = null;\n /**\n * Set by the parent composition on a sprite-based (image / video) mask. PIXI hides such a mask with\n * `renderable = false`; the lifespan toggles must not switch it back on, or the mask is drawn as a picture.\n * @internal\n */\n keepHidden = false;\n /**\n * Absolute start time on the global timeline (offset + at), recorded by\n * bindTimeline. Movie._awaitVideoFrames uses it to determine the correct\n * time to pass to awaitFrameAt. Subclasses that override bindTimeline\n * without calling super must set this field themselves. Null until bound.\n * @internal\n */\n absoluteStart: number | null = null;\n\n constructor(spec: SequenceSpec, parent: CompositionShape | null, root: CompositionShape) {\n this.spec = spec;\n this.parent = parent;\n this.root = root;\n this.at = spec.at ?? 0;\n this.duration = spec.duration;\n }\n\n abstract build(): Promise<void>;\n\n buildFilters(): void {\n const specs = this.spec.filters ?? [];\n this.filters = specs.map(createFilter);\n if (this.target && 'filters' in this.target) {\n (this.target as unknown as { filters: NamedFilter[] }).filters = this.filters;\n }\n // Honor an explicit filterArea override (e.g. set by expandTransitions so\n // a wipe / iris filter on a small text sprite still covers the whole\n // composition rather than being clipped to the text bbox).\n const fa = this.spec.filterArea;\n if (fa && this.target) {\n this.target.filterArea = new Rectangle(fa.x, fa.y, fa.width, fa.height);\n }\n }\n\n scope(): Scope {\n return buildScope(this, this.parent, this.root);\n }\n\n /**\n * Prefix routers contributed to the keyframe pipeline (e.g. `three.` in\n * pixi-effects/three). Base sequences route nothing extra.\n */\n protected pathRouters(): PathRouters {\n return {};\n }\n\n /**\n * The `initial` and `keyframes` that go onto the display object. A layer whose `time` runs a clock (video, composition) takes `time`\n * out of them: it is not a property of the display object.\n */\n protected displayProps(): { initial: SequenceSpec['initial']; keyframes: SequenceSpec['keyframes'] } {\n return { initial: this.spec.initial, keyframes: this.spec.keyframes };\n }\n\n /** @internal */\n bindTimeline(timeline: Timeline, offset = 0): void {\n if (!this.target) return;\n const scope = this.scope();\n const routers = this.pathRouters();\n // Keyframe `at` is measured from THIS sequence's start (After Effects style),\n // and negative `at` back from its end — so the origin is offset + this.at.\n const startTime = offset + this.at;\n const { initial, keyframes } = this.displayProps();\n applyInitial(this.target, initial as Record<string, unknown> | undefined, scope as unknown as Record<string, number>, [], routers);\n applyKeyframes(timeline, this.target, keyframes, this.duration!, scope as unknown as Record<string, number>, [], startTime, routers);\n // Hide before lifespan starts. Before its first `set` a property is what it is when the timeline is first played, so this\n // baseline is what a sequence with at>0 (or any non-zero offset from a nested composition) shows at t<startTime, instead of\n // PIXI's default `renderable: true`.\n const endTime = startTime + this.duration!;\n this.absoluteStart = startTime;\n if (this.keepHidden) return; // a sprite mask: PIXI keeps it hidden (see keepHidden)\n this.target.renderable = startTime <= 0;\n timeline.set(this.target, { renderable: true }, startTime);\n timeline.set(this.target, { renderable: false }, endTime);\n }\n\n /** @internal */\n collectAudio(_out: AudioDescriptor[], _baseTime: number): void {\n // default: no audio\n }\n\n /**\n * 2.5D hook. Runs once per rendered frame, after the timeline seek and the\n * per-frame media sync, before the render. Compositions override it to\n * project their `threeD` layers; everything else has nothing to do.\n * @internal\n */\n updateSpace(_t: number, _host: SpaceHost): void {\n // default: nothing to project\n }\n\n /**\n * Runs once per rendered frame, after the timeline seek and before the cull. Layers whose drawn\n * geometry follows tweened state (shapes) redraw here, so the culler measures where the layer is NOW\n * and not where it was drawn at the previous render.\n * @internal\n */\n syncFrame(): void {\n this.maskSequence?.syncFrame();\n }\n\n destroy(): void {\n this.maskSequence?.destroy();\n this.maskSequence = null;\n this.target?.destroy?.();\n this.target = null;\n }\n}\n","import { Container } from 'pixi.js';\nimport { Sequence } from './Base';\nimport type { NullSequenceSpec } from '../types';\n\n/**\n * `type: 'null'`: a layer that draws nothing, only moves. Other layers name it as their `parent`; the\n * composition then draws them inside this container, so its transform and alpha carry them along.\n */\nexport class NullSequence extends Sequence {\n declare spec: NullSequenceSpec;\n\n async build(): Promise<void> {\n this.target = new Container();\n this.buildFilters();\n }\n}\n","import type { GradientSpec } from '../types';\n\n/** `'#rrggbb'` for numbers; CSS colour strings (hex, rgb(), rgba(), names) pass through. */\nexport function cssColor(c: string | number): string {\n return typeof c === 'number' ? '#' + c.toString(16).padStart(6, '0') : c;\n}\n\nfunction normalizedStops(g: GradientSpec): Array<{ offset: number; color: string | number }> {\n const stops = g.stops ?? [];\n if (stops.length < 2) throw new Error('pixi-effects: fillGradient needs at least two colour stops, e.g. stops: [[0, \"#000\"], [1, \"#fff\"]]');\n return stops.map(s => (Array.isArray(s) ? { offset: s[0], color: s[1] } : { offset: s.offset, color: s.color }));\n}\n\n/**\n * PixiJS `FillGradient` options for a LINEAR `fillGradient` (local space: 0–1 across the shape's own\n * bounds, so it follows the shape's size). `angle` in degrees: 0 = left → right, 90 = top → bottom\n * (default, like CSS `to bottom`); the line passes through the centre and spans corner to corner.\n */\nexport function gradientOptions(g: GradientSpec): Record<string, unknown> {\n const colorStops = normalizedStops(g);\n const a = ((g.angle ?? 90) * Math.PI) / 180;\n const dx = Math.cos(a), dy = Math.sin(a);\n const h = (Math.abs(dx) + Math.abs(dy)) / 2; // half-extent so the line reaches the corners\n return {\n type: 'linear',\n start: { x: 0.5 - dx * h, y: 0.5 - dy * h },\n end: { x: 0.5 + dx * h, y: 0.5 + dy * h },\n colorStops, textureSpace: 'local',\n };\n}\n\n/** The slice of CanvasRenderingContext2D that `paintRadial` uses (so tests can fake it). */\nexport interface RadialCtx {\n createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): { addColorStop(offset: number, color: string): void };\n fillRect(x: number, y: number, w: number, h: number): void;\n fillStyle: unknown;\n}\n\n/**\n * Paint a RADIAL `fillGradient` onto a square canvas: centre / `innerRadius` / `radius` in 0–1 of the\n * canvas, concentric circles, so the first stop colours the inside and the last stop everything beyond.\n * The canvas is later stretched over the shape's bounds (an ellipse on a non-square shape — what a\n * vignette wants). Done on a canvas because PixiJS's own radial fill lays an opaque-last-colour underlay\n * over the whole shape, which makes a transparent-centre vignette dark everywhere.\n */\nexport function paintRadial(ctx: RadialCtx, size: number, g: GradientSpec): void {\n const stops = normalizedStops(g);\n const [cx, cy] = g.center ?? [0.5, 0.5];\n const grad = ctx.createRadialGradient(cx * size, cy * size, (g.innerRadius ?? 0) * size, cx * size, cy * size, (g.radius ?? 0.5) * size);\n for (const s of stops) grad.addColorStop(s.offset, cssColor(s.color));\n ctx.fillStyle = grad;\n ctx.fillRect(0, 0, size, size);\n}\n","/**\n * Perceptually uniform colour interpolation in OKLab / OKLCH.\n *\n * These spaces (Björn Ottosson, 2020) keep saturation and lightness\n * intuitive across a tween — a red → green ramp doesn't pass through\n * the muddy olive / brown that linear sRGB interpolation produces.\n *\n * - `oklab` : straight line in the (a, b) chromaticity plane.\n * - `oklch` : (L, C, h) with hue along the shorter angular path —\n * gives smooth rainbow-style sweeps.\n *\n * Inputs accept any of the formats colours appear in our DSL:\n * - hex string (`'#ff3366'`, `'#f36'`)\n * - 0xRRGGBB number\n * - rgb()/rgba() string\n * Outputs are always `'rgba(r,g,b,a)'` strings — that's what PixiJS's\n * Color() parser handles natively.\n */\n\n/**\n * A colour with little chroma has no reliable hue (a \"grey\" like #9a9ab4 has C = 0.038 and a hue of 285° by accident).\n * Below CHROMA_FLOOR its hue is fully replaced by the other endpoint's, above CHROMA_FULL it is used as it is, and in between\n * the two blend smoothly. Vivid colours are C ≥ 0.1, pastels ≈ 0.05–0.08.\n */\nconst CHROMA_FLOOR = 0.03;\nconst CHROMA_FULL = 0.08;\n\nexport type ColorSpace = 'rgb' | 'oklab' | 'oklch';\n\nexport type ColorInput = string | number;\n\n/** Build an interpolator function `t ∈ [0, 1] → 'rgba(...)' string`. */\nexport function buildColorInterp(\n from: ColorInput,\n to: ColorInput,\n space: 'oklab' | 'oklch',\n): (t: number) => string {\n const fromRGBA = parseToRGBA(from);\n const toRGBA = parseToRGBA(to);\n const fromOk = rgbToOklab(fromRGBA);\n const toOk = rgbToOklab(toRGBA);\n\n if (space === 'oklab') {\n return (t: number): string => {\n const L = lerp(fromOk.L, toOk.L, t);\n const a = lerp(fromOk.a, toOk.a, t);\n const b = lerp(fromOk.b, toOk.b, t);\n const alpha = lerp(fromRGBA.a, toRGBA.a, t);\n return rgbaString(oklabToRgb({ L, a, b }), alpha);\n };\n }\n\n // OKLCH: convert to polar and interpolate hue along the shorter arc.\n const fromLCH = oklabToOklch(fromOk);\n const toLCH = oklabToOklch(toOk);\n // A (nearly) grey endpoint has an accidental hue, often about opposite the colour it moves to, and the ramp\n // then swept round the wheel through pink. Let it borrow the other endpoint's hue, the more so the greyer it is.\n const fromHue = fromLCH.h, toHue = toLCH.h;\n fromLCH.h = borrowHue(fromHue, fromLCH.C, toHue);\n toLCH.h = borrowHue(toHue, toLCH.C, fromHue);\n const hueDelta = shortestHueDelta(fromLCH.h, toLCH.h);\n\n return (t: number): string => {\n const L = lerp(fromLCH.L, toLCH.L, t);\n const C = lerp(fromLCH.C, toLCH.C, t);\n const h = fromLCH.h + hueDelta * t;\n const alpha = lerp(fromRGBA.a, toRGBA.a, t);\n const ab = oklchToOklab({ L, C, h });\n return rgbaString(oklabToRgb(ab), alpha);\n };\n}\n\n/** `own`, pulled toward `other` along the shorter arc by how little chroma it has. */\nfunction borrowHue(own: number, chroma: number, other: number): number {\n const u = Math.min(1, Math.max(0, (chroma - CHROMA_FLOOR) / (CHROMA_FULL - CHROMA_FLOOR)));\n const keep = u * u * (3 - 2 * u);\n return own + shortestHueDelta(own, other) * (1 - keep);\n}\n\n// ─── Parsers / formatters ────────────────────────────────────────────────\n\ninterface RGBA { r: number; g: number; b: number; a: number; } // 0..1 each\n\nfunction parseToRGBA(input: ColorInput): RGBA {\n if (typeof input === 'number') {\n return { r: ((input >> 16) & 0xff) / 255, g: ((input >> 8) & 0xff) / 255, b: (input & 0xff) / 255, a: 1 };\n }\n const s = input.trim();\n if (s.startsWith('#')) return parseHex(s);\n if (s.startsWith('rgb')) return parseRgbFunc(s);\n // Unknown format — fall back to opaque black rather than throwing, since\n // styling is best-effort and a single bad colour shouldn't blow the timeline.\n return { r: 0, g: 0, b: 0, a: 1 };\n}\n\nfunction parseHex(s: string): RGBA {\n const hex = s.slice(1);\n let r = 0, g = 0, b = 0, a = 1;\n if (hex.length === 3 || hex.length === 4) {\n r = parseInt(hex[0]! + hex[0]!, 16) / 255;\n g = parseInt(hex[1]! + hex[1]!, 16) / 255;\n b = parseInt(hex[2]! + hex[2]!, 16) / 255;\n if (hex.length === 4) a = parseInt(hex[3]! + hex[3]!, 16) / 255;\n } else if (hex.length === 6 || hex.length === 8) {\n r = parseInt(hex.slice(0, 2), 16) / 255;\n g = parseInt(hex.slice(2, 4), 16) / 255;\n b = parseInt(hex.slice(4, 6), 16) / 255;\n if (hex.length === 8) a = parseInt(hex.slice(6, 8), 16) / 255;\n }\n return { r, g, b, a };\n}\n\nfunction parseRgbFunc(s: string): RGBA {\n // Accept `rgb(r, g, b)` and `rgba(r, g, b, a)` — channels are 0..255 ints.\n const inner = s.replace(/^rgba?\\(/, '').replace(/\\)$/, '');\n const parts = inner.split(/[,\\s/]+/).filter(Boolean).map(parseFloat);\n return {\n r: (parts[0] ?? 0) / 255,\n g: (parts[1] ?? 0) / 255,\n b: (parts[2] ?? 0) / 255,\n a: parts.length > 3 ? (parts[3] ?? 1) : 1,\n };\n}\n\nfunction rgbaString(rgb: { r: number; g: number; b: number }, alpha: number): string {\n const r = Math.round(clamp01(rgb.r) * 255);\n const g = Math.round(clamp01(rgb.g) * 255);\n const b = Math.round(clamp01(rgb.b) * 255);\n return `rgba(${r},${g},${b},${alpha})`;\n}\n\n// ─── sRGB ↔ linear ↔ OKLab ─────────────────────────────────────────────\n\nfunction srgbToLinear(c: number): number {\n return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n}\nfunction linearToSrgb(c: number): number {\n return c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055;\n}\n\ninterface OkLab { L: number; a: number; b: number; }\n\nfunction rgbToOklab(rgba: RGBA): OkLab {\n const r = srgbToLinear(rgba.r);\n const g = srgbToLinear(rgba.g);\n const b = srgbToLinear(rgba.b);\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\n const l_ = Math.cbrt(l);\n const m_ = Math.cbrt(m);\n const s_ = Math.cbrt(s);\n return {\n L: 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_,\n a: 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_,\n b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_,\n };\n}\n\nfunction oklabToRgb(lab: OkLab): { r: number; g: number; b: number } {\n const l_ = lab.L + 0.3963377774 * lab.a + 0.2158037573 * lab.b;\n const m_ = lab.L - 0.1055613458 * lab.a - 0.0638541728 * lab.b;\n const s_ = lab.L - 0.0894841775 * lab.a - 1.2914855480 * lab.b;\n const l = l_ * l_ * l_;\n const m = m_ * m_ * m_;\n const s = s_ * s_ * s_;\n return {\n r: linearToSrgb(+4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s),\n g: linearToSrgb(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s),\n b: linearToSrgb(-0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s),\n };\n}\n\ninterface OkLCh { L: number; C: number; h: number; } // h in radians\n\nfunction oklabToOklch(lab: OkLab): OkLCh {\n return { L: lab.L, C: Math.hypot(lab.a, lab.b), h: Math.atan2(lab.b, lab.a) };\n}\n\nfunction oklchToOklab(lch: OkLCh): OkLab {\n return { L: lch.L, a: lch.C * Math.cos(lch.h), b: lch.C * Math.sin(lch.h) };\n}\n\n// ─── helpers ─────────────────────────────────────────────────────────────\n\nfunction lerp(a: number, b: number, t: number): number { return a + (b - a) * t; }\nfunction clamp01(v: number): number { return v < 0 ? 0 : v > 1 ? 1 : v; }\n\nfunction shortestHueDelta(from: number, to: number): number {\n // Both inputs are in [-π, π] from atan2. Pick the path that crosses the\n // smaller arc — never more than ±π.\n const TWO_PI = Math.PI * 2;\n let d = (to - from) % TWO_PI;\n if (d > Math.PI) d -= TWO_PI;\n if (d < -Math.PI) d += TWO_PI;\n return d;\n}\n","import { Texture, FillGradient } from 'pixi.js';\nimport { cssColor, gradientOptions, paintRadial, type RadialCtx } from './gradient';\nimport { buildColorInterp, type ColorSpace } from '../expr/colorInterp';\nimport { suggestName } from '../core/options';\nimport { kfDuration } from '../core/spring';\nimport { resolveAt, loopVars } from '../core/Timeline';\nimport { revertibleSet } from '../core/revertibleSet';\nimport { interpolateColors, type Timeline } from '../core/timelineEngine';\nimport type { GradientSpec, Keyframe, Props } from '../types';\n\n\n\n/** The live numbers of an animated `fillGradient`. Every colour is a CSS string. */\nexport interface GradState {\n type: 'linear' | 'radial';\n angle: number;\n center: [number, number];\n innerRadius: number;\n radius: number;\n stops: Array<{ offset: number; color: string }>;\n}\n\n/** What a keyframe's `fillGradient` may carry. `type` is only here to say it cannot change. */\nconst PATCH_KEYS = ['type', 'angle', 'center', 'innerRadius', 'radius', 'stops'] as const;\n\nexport function gradStateFrom(g: GradientSpec): GradState {\n return {\n type: g.type ?? 'linear',\n angle: g.angle ?? 90,\n center: [...(g.center ?? [0.5, 0.5])] as [number, number],\n innerRadius: g.innerRadius ?? 0,\n radius: g.radius ?? 0.5,\n stops: (g.stops ?? []).map(s => (Array.isArray(s) ? { offset: s[0], color: cssColor(s[1]) } : { offset: s.offset, color: cssColor(s.color) })),\n };\n}\n\n/**\n * `base` with the keys of `patch` replaced. What cannot be tweened (another number of stops, a new `type`, a patch that is not an\n * object) is ignored here: `validateGradientKeyframes` has said so, once, when the layer was built.\n */\nexport function mergeGrad(base: GradState, patch: unknown): GradState {\n const out: GradState = { ...base, center: [...base.center] as [number, number], stops: base.stops.map(s => ({ ...s })) };\n if (patch === null || typeof patch !== 'object' || Array.isArray(patch)) return out;\n const p = patch as Record<string, unknown>;\n if (typeof p.angle === 'number') out.angle = p.angle;\n if (Array.isArray(p.center)) out.center = [Number(p.center[0]), Number(p.center[1])];\n if (typeof p.innerRadius === 'number') out.innerRadius = p.innerRadius;\n if (typeof p.radius === 'number') out.radius = p.radius;\n if (p.stops !== undefined) {\n const next = gradStateFrom({ stops: p.stops as GradientSpec['stops'] }).stops;\n if (next.length === base.stops.length) out.stops = next;\n }\n return out;\n}\n\nconst objectHint = \"a keyframe's fillGradient must be an object like { angle: 200, stops: [[0, '#f00'], [1, '#00f']] }\";\n\n/**\n * The mistakes a keyframe can make with `fillGradient`, said ONCE when the layer is built (not in a tween's `onStart`, which runs again\n * at every seek). `spec` is the layer's spec: its gradient (top level or in `initial`) and its keyframes.\n */\nexport function validateGradientKeyframes(\n spec: { keyframes?: Keyframe[]; fillGradient?: unknown; initial?: Props },\n who: string,\n warn: (message: string) => void = m => console.warn(m),\n kind: 'shape' | 'text' = 'shape',\n): void {\n const said = new Set<string>();\n const say = (m: string): void => { if (!said.has(m)) { said.add(m); warn(`pixi-effects: ${who}: ${m}`); } };\n const startSpec = (spec.fillGradient ?? (spec.initial as { fillGradient?: unknown } | undefined)?.fillGradient) as GradientSpec | undefined;\n const start = startSpec && typeof startSpec === 'object' && Array.isArray(startSpec.stops) ? gradStateFrom(startSpec) : null;\n let animated = false;\n if (kind === 'text') { // letters take a linear gradient only (a shape has the radial one too)\n const radial = (g: unknown): boolean => !!g && typeof g === 'object' && ['type', 'center', 'innerRadius', 'radius'].some(k => (g as Record<string, unknown>)[k] !== undefined && !(k === 'type' && (g as Record<string, unknown>).type === 'linear'));\n const asked = radial(startSpec) || (spec.keyframes ?? []).some(kf => [kf.set, kf.to, kf.from].some(b => radial((b as Record<string, unknown> | undefined)?.fillGradient)));\n if (asked) say('a text gradient is linear: type, center, innerRadius and radius are ignored (only angle and stops apply); use a shape for a radial gradient');\n }\n for (const kf of spec.keyframes ?? []) {\n for (const bag of [kf.set, kf.to, kf.from] as Array<Record<string, unknown> | undefined>) {\n if (!bag) continue;\n for (const [key, value] of Object.entries(bag)) {\n if (key === 'fillGradient') {\n animated = true;\n if (value === null || typeof value !== 'object' || Array.isArray(value)) { say(objectHint); continue; }\n const p = value as Record<string, unknown>;\n for (const k of Object.keys(p)) {\n if ((PATCH_KEYS as readonly string[]).includes(k)) continue;\n const guess = suggestName(k, PATCH_KEYS.filter(x => x !== 'type'));\n say(`fillGradient.${k} is not a gradient property${guess ? ` — did you mean \"${guess}\"?` : ''} (valid: ${PATCH_KEYS.join(', ')}); it is ignored`);\n }\n if (p.type !== undefined && start && p.type !== start.type) say('fillGradient.type cannot change over time (linear <-> radial); it is ignored');\n if (p.stops !== undefined && start) {\n const n = Array.isArray(p.stops) ? p.stops.length : 0;\n if (n !== start.stops.length) say(`a fillGradient keyframe must give the same number of stops as the gradient has (${start.stops.length}, got ${n}); the stops are left as they were`);\n }\n } else if (/^fillGradient\\./i.test(key) || /^gradient/i.test(key)) {\n const tail = key.replace(/^fillGradient\\./i, '').replace(/^gradient/i, '');\n const sub = tail ? tail[0]!.toLowerCase() + tail.slice(1) : 'angle';\n say(`\"${key}\" is not an animatable property: write fillGradient: { ${(PATCH_KEYS as readonly string[]).includes(sub) ? sub : 'angle'} } (the whole gradient is one object) in the keyframe's to / from / set`);\n }\n }\n }\n }\n if (animated && !start) say('a keyframe animates fillGradient but the layer has none to start from: give it a fillGradient first (top level or in initial)');\n}\n\n/** Tween a gradient state through time: numbers linearly, stop colours through `colorSpace`. */\nexport function tweenGradient(\n timeline: Timeline,\n holder: { grad: GradState },\n fromPatch: unknown,\n toPatch: unknown,\n duration: number, ease: string, at: number,\n colorSpace: ColorSpace,\n onChange: () => void,\n loop: Record<string, number | boolean> = {},\n): void {\n // both ends come from the gradient before the tween, so nothing is kept between two seeks\n timeline.tweenValue<GradState>({\n holder, id: 'grad', get: () => holder.grad, set: (g) => { holder.grad = g; onChange(); },\n from: fromPatch !== undefined ? (prev) => mergeGrad(prev, fromPatch) : undefined,\n to: (start, prev) => (toPatch !== undefined ? mergeGrad(start, toPatch) : prev),\n make: (a, b) => {\n const colors = a.stops.map((s, i) => (colorSpace === 'rgb' ? interpolateColors(s.color, b.stops[i]!.color) : buildColorInterp(s.color, b.stops[i]!.color, colorSpace) as (p: number) => string));\n return (t) => {\n const l = (x: number, y: number): number => x + (y - x) * t;\n return {\n type: a.type, angle: l(a.angle, b.angle),\n center: [l(a.center[0], b.center[0]), l(a.center[1], b.center[1])],\n innerRadius: l(a.innerRadius, b.innerRadius), radius: l(a.radius, b.radius),\n stops: a.stops.map((s, i) => ({ offset: l(s.offset, b.stops[i]!.offset), color: colors[i]!(t) })),\n };\n };\n },\n duration, ease, at, repeat: loop.repeat as number | undefined, yoyo: loop.yoyo as boolean | undefined, repeatDelay: loop.repeatDelay as number | undefined,\n });\n}\n\n/** Resolution of the painted gradient: a hard stop across a 1920 px shape stays sharp enough at 512. */\nconst PAINT_SIZE = 512;\n\n/** One canvas + one Texture per animated gradient, repainted in place (no new GPU object per frame). */\nexport class GradientPainter {\n private canvas = document.createElement('canvas');\n private tex: Texture;\n constructor(private size = PAINT_SIZE) {\n this.canvas.width = size; this.canvas.height = size;\n this.tex = Texture.from(this.canvas);\n (globalThis as { __gradientPainters?: number }).__gradientPainters = ((globalThis as { __gradientPainters?: number }).__gradientPainters ?? 0) + 1;\n }\n /** Paint `g` and return what `Graphics.fill(...)` takes. */\n paint(g: GradState): { texture: Texture; textureSpace: 'local' } | FillGradient {\n const ctx = this.canvas.getContext('2d'), s = this.size;\n if (!ctx) return new FillGradient(gradientOptions({ angle: g.angle, stops: g.stops.map(x => [x.offset, x.color] as [number, string]) }) as never); // no 2D canvas (a test, a worker): the plain linear fill\n ctx.clearRect(0, 0, s, s);\n if (g.type === 'radial') {\n paintRadial(ctx as unknown as RadialCtx, s, { stops: g.stops.map(x => [x.offset, x.color] as [number, string]), center: g.center, innerRadius: g.innerRadius, radius: g.radius });\n } else {\n const a = (g.angle * Math.PI) / 180, dx = Math.cos(a), dy = Math.sin(a);\n const h = (Math.abs(dx) + Math.abs(dy)) / 2; // the same line as gradientOptions: through the centre, corner to corner\n const grad = ctx.createLinearGradient((0.5 - dx * h) * s, (0.5 - dy * h) * s, (0.5 + dx * h) * s, (0.5 + dy * h) * s);\n for (const st of g.stops) grad.addColorStop(Math.min(1, Math.max(0, st.offset)), st.color);\n ctx.fillStyle = grad;\n ctx.fillRect(0, 0, s, s);\n }\n this.tex.source.update();\n return { texture: this.tex, textureSpace: 'local' };\n }\n /** Give the texture and the canvas back (a layer that is destroyed must not leave them). */\n destroy(): void {\n this.tex.destroy(true);\n this.canvas.width = this.canvas.height = 0;\n (globalThis as { __gradientPainters?: number }).__gradientPainters = Math.max(0, ((globalThis as { __gradientPainters?: number }).__gradientPainters ?? 1) - 1);\n }\n}\n\n/** Bind every `fillGradient` keyframe (`set` / `from` / `to`) of a layer onto `holder.grad`. */\nexport function bindGradientKeyframes(\n timeline: Timeline, holder: { grad: GradState }, keyframes: Keyframe[], duration: number, offset: number,\n colorSpace: ColorSpace, onChange: () => void,\n): void {\n const bag = (b: Props | undefined): unknown => (b as Record<string, unknown> | undefined)?.fillGradient;\n for (const kf of keyframes) {\n const at = offset + resolveAt(kf.at, duration);\n const setV = bag(kf.set), fromV = bag(kf.from), toV = bag(kf.to);\n if (setV !== undefined) {\n timeline.tweenValue<GradState>({\n holder, id: 'grad', get: () => holder.grad, set: (g) => { holder.grad = g; onChange(); },\n to: (start) => mergeGrad(start, setV), make: (_a, b) => () => b, duration: 0, ease: 'none', at,\n });\n }\n if (fromV !== undefined || toV !== undefined) {\n tweenGradient(timeline, holder, fromV, toV, kfDuration(kf), kf.ease ?? 'none', at, colorSpace, onChange, loopVars(kf));\n }\n }\n}\n\nexport const hasGradientKeys = (keyframes: Keyframe[] | undefined): boolean =>\n (keyframes ?? []).some(kf => [kf.set, kf.to, kf.from].some(b => b && (b as Record<string, unknown>).fillGradient !== undefined));\n","import type { Timeline } from './timelineEngine';\n\n/**\n * A `set` keyframe for values a tween cannot move (colours, text state, a flag): from `at` on the property is `value`, and what `read`\n * gives (the value before) at any time before. `property` names the property when tweens write it too, so the two are one channel of\n * the timeline and a tween after a set starts from the set's value. `write` is the way the caller writes it (it may redraw).\n */\nexport function revertibleSet<T>(\n timeline: Timeline,\n at: number,\n read: () => T,\n write: (value: T) => void,\n value: T,\n property?: [object, string],\n): void {\n timeline.setValue(property?.[0] ?? read, property?.[1] ?? 'set', at, read, write, value);\n}\n","import { buildColorInterp, type ColorSpace, type ColorInput } from './colorInterp';\nimport { interpolateColors, type Timeline } from '../core/timelineEngine';\n\n/** `'#rrggbb'` for a number, a CSS colour string as it is. */\nconst css = (c: ColorInput): string => (typeof c === 'number' ? '#' + c.toString(16).padStart(6, '0') : c);\n\n/**\n * Shared colour-tween helper used by every sequence type that wants to\n * interpolate a colour-valued property smoothly through a chosen colour\n * space (sRGB / OKLab / OKLCH).\n *\n * Keys to the design:\n * 1. The interpolator is built from the colour before the tween (the end of the\n * keyframe before it, or the layer's own), so a chained-keyframe tween picks\n * up the previous tween's end colour (rather than locking onto the initial spec value).\n * 2. `fromValue` is honoured if explicit; otherwise we read `target[key]`\n * at tween start — like any other `.to()`.\n * 3. The optional `onUpdate` hook lets the caller flag the target as dirty\n * after each write (e.g. PIXI Text needs `_didChange = true` to\n * re-rasterise its fill).\n */\nexport function tweenColor(\n timeline: Timeline,\n target: Record<string, unknown>,\n key: string,\n fromValue: ColorInput | undefined,\n toValue: ColorInput,\n duration: number,\n ease: string,\n at: number,\n colorSpace: ColorSpace,\n onUpdate?: () => void,\n loop: Record<string, number | boolean> = {},\n): void {\n // the colour at a time is made from the colour before the tween, which the timeline knows without playing\n const none = (): unknown => undefined;\n timeline.tweenValue<ColorInput | undefined>({\n holder: target, id: key,\n get: () => target[key] as ColorInput | undefined,\n set: (v) => { if (v === undefined) return; target[key] = v; if (onUpdate) onUpdate(); },\n from: fromValue !== undefined ? () => fromValue : undefined,\n to: () => toValue,\n make: (a, b) => (a === undefined ? (none as (p: number) => undefined)\n : colorSpace === 'rgb' ? (interpolateColors(css(a), css(b!)) as (p: number) => ColorInput)\n : (buildColorInterp(a, b!, colorSpace) as (p: number) => ColorInput)),\n duration, ease, at, repeat: loop.repeat as number | undefined, yoyo: loop.yoyo as boolean | undefined, repeatDelay: loop.repeatDelay as number | undefined,\n });\n}\n","// What a text layer's `style` is made of, shared by the text layer and by `spans` (which must measure with the style a text is DRAWN with).\n\n// TextStyle fields whose string values are words or colours, never expressions. `join` / `cap` / `color`\n// also live inside `stroke` and `dropShadow`, `stroke` itself may be a colour name.\nexport const STYLE_OPAQUE_KEYS = [\n 'fontFamily', 'fill', 'align', 'fontStyle', 'fontWeight', 'fontVariant', 'textBaseline', 'whiteSpace',\n 'lineJoin', 'join', 'cap', 'color', 'stroke',\n];\n\n/** What a text layer is drawn with when its `style` does not say. */\nexport const TEXT_STYLE_DEFAULTS = {\n fontFamily: 'Arial',\n fontSize: 36,\n fill: '#ffffff',\n align: 'center' as 'left' | 'center' | 'right',\n};\n","import { Text, FillGradient } from 'pixi.js';\nimport { gradStateFrom, bindGradientKeyframes, validateGradientKeyframes, type GradState } from './gradientAnim';\nimport { gradientOptions } from './gradient';\nimport { kfDuration } from '../core/spring';\nimport { Sequence } from './Base';\nimport { normalizeProps } from '../expr/normalizeProps';\nimport { applyKeyframes, applyInitial, resolveAt, loopVars } from '../core/Timeline';\nimport { revertibleSet } from '../core/revertibleSet';\nimport { tweenColor } from '../expr/colorTween';\nimport { describeLayer } from '../core/lint';\nimport { STYLE_OPAQUE_KEYS, TEXT_STYLE_DEFAULTS } from '../text/styleKeys';\nimport type { ColorInput } from '../expr/colorInterp';\nimport type { TextSequenceSpec, Keyframe, Props, GradientSpec } from '../types';\nimport type { Timeline } from '../core/timelineEngine';\n\n\n\nexport type CounterState = { value: number; visibleChars: number };\n\nconst TIME_PATTERNS = ['hh:mm:ss', 'h:mm:ss', 'hh:mm', 'mm:ss', 'm:ss'] as const;\n\n/** `format.time`: the value in seconds as a clock. The hours do not wrap (25:00 after 24:59: use `mod` in an expression for a day clock); without an hour field the minutes carry them. */\nfunction formatTime(v: number, pattern: string, warned: Set<string>): string | null {\n if (!(TIME_PATTERNS as readonly string[]).includes(pattern)) {\n if (!warned.has(pattern)) {\n warned.add(pattern); // once per layer, not once per page\n console.warn(`pixi-effects: format.time \"${pattern}\" is not one of ${TIME_PATTERNS.map(p => `\"${p}\"`).join(', ')}: the value is printed as a number`);\n }\n return null;\n }\n const total = Math.floor(Math.abs(v));\n const h = Math.floor(total / 3600), m = Math.floor((total % 3600) / 60), sec = total % 60;\n const two = (n: number): string => String(n).padStart(2, '0');\n const sign = v < 0 && total > 0 ? '-' : ''; // -0.3 s is 00:00, not -00:00\n switch (pattern) {\n case 'hh:mm:ss': return `${sign}${two(h)}:${two(m)}:${two(sec)}`;\n case 'h:mm:ss': return `${sign}${h}:${two(m)}:${two(sec)}`;\n case 'hh:mm': return `${sign}${two(h)}:${two(m)}`;\n case 'mm:ss': return `${sign}${two(Math.floor(total / 60))}:${two(sec)}`;\n default: return `${sign}${Math.floor(total / 60)}:${two(sec)}`; // 'm:ss'\n }\n}\n\nfunction formatValue(v: number, f: TextSequenceSpec['format'], warned: Set<string> = new Set()): string {\n if (f?.time !== undefined) { const t = formatTime(v, String(f.time), warned); if (t !== null) return t; }\n const fixed = v.toFixed(Math.max(0, Math.floor(f?.decimals ?? 0)));\n const pad = Math.max(0, Math.floor(f?.pad ?? 0));\n if (!f?.grouping && !pad) return fixed;\n const [signed, frac] = fixed.split('.') as [string, string | undefined];\n const sign = signed.startsWith('-') ? '-' : '';\n let int = sign ? signed.slice(1) : signed;\n if (pad) int = int.padStart(pad, '0');\n if (f?.grouping) int = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return sign + int + (frac !== undefined ? '.' + frac : '');\n}\n\nexport class TextSequence extends Sequence {\n declare spec: TextSequenceSpec;\n /** `value`: the number for the `{value}` placeholder; `visibleChars`: how many characters show (typewriter). Both tweened by keyframes. */\n private _counters: CounterState = { value: 0, visibleChars: 0 };\n /** The string now on the layer (before `{value}` / `visibleChars`): `text`, or the last `set: { text }`. */\n private _template = '';\n /** `visibleChars` is in play (initial or animated): otherwise the whole text shows. */\n private _typed = false;\n private _lastText = '';\n /** The `format.time` patterns already said to be wrong on this layer. */\n private _timeWarned = new Set<string>();\n /** A gradient fill for the text (`fillGradient`, static or animated): rebuilt as a FillGradient on each change (the text is re-rasterised). */\n private _grad: { grad: GradState } | null = null;\n private _fillGradient: FillGradient | null = null;\n private _applyGradient(): void {\n const g = this._grad!.grad;\n const next = new FillGradient(gradientOptions({ angle: g.angle, stops: g.stops.map(s => [s.offset, s.color] as [number, string]) }) as never);\n (this.target as Text).style.fill = next as never;\n this._fillGradient?.destroy();\n this._fillGradient = next;\n }\n override destroy(): void {\n super.destroy();\n this._fillGradient?.destroy();\n this._fillGradient = null;\n }\n\n /** @internal A `spans` group that types over several pieces: this piece shows its first `n` characters (the piece was built typed). */\n setVisibleChars(n: number): void { this._counters.visibleChars = n; this._refreshText(); }\n\n /** A typewriter that has typed nothing yet: the layer is empty on purpose (inspect must not call that \"no size\"). */\n get showsNothingYet(): boolean { return this._typed && this._lastText === '' && this._template !== ''; }\n\n /** Rewrite the displayed string from the template, the current `value` and `visibleChars`. */\n private _refreshText(): void {\n let next = this._template.includes('{value}')\n ? this._template.split('{value}').join(formatValue(this._counters.value, this.spec.format, this._timeWarned))\n : this._template;\n if (this._typed) next = Array.from(next).slice(0, Math.max(0, Math.floor(this._counters.visibleChars))).join('');\n if (next === this._lastText) return;\n this._lastText = next;\n (this.target as Text).text = next;\n }\n\n async build(): Promise<void> {\n const baseStyle = { ...TEXT_STYLE_DEFAULTS };\n const initialProps = (this.spec.initial ?? {}) as Record<string, unknown>;\n this._template = String(initialProps.text ?? this.spec.text ?? '');\n const text = new Text({\n text: this._template,\n style: baseStyle,\n label: this.spec.name,\n });\n text.cullable = true;\n if (this.spec.resolution !== undefined) {\n const r = this.spec.resolution as unknown;\n if (typeof r === 'number' && r >= 1 && r <= 8) text.resolution = r;\n else console.warn(`pixi-effects: ${describeLayer(this.spec)}: resolution must be a number from 1 to 8 (the text is drawn at that many times the pixels), got ${JSON.stringify(r)}: ignored`);\n }\n this.target = text;\n this.intrinsicWidth = text.width;\n this.intrinsicHeight = text.height;\n if (this.duration === undefined) {\n this.duration = this.parent?.duration ?? this.root.duration;\n }\n if (this.spec.style) {\n const scope = this.scope();\n const resolved = normalizeProps(\n this.spec.style as Record<string, unknown>,\n scope as unknown as Record<string, number>,\n { skipKeys: STYLE_OPAQUE_KEYS },\n );\n // An undefined value (a variable that was never set) would erase the default and leave a text with no size: skip it, and say which keys.\n const unset = Object.keys(resolved).filter(k => (resolved as Record<string, unknown>)[k] === undefined);\n if (unset.length) console.warn(`pixi-effects: ${describeLayer(this.spec)}: ${unset.map(k => `style.${k}`).join(', ')} ${unset.length > 1 ? 'are' : 'is'} undefined (a variable that was never set?), so ${unset.length > 1 ? 'they are' : 'it is'} ignored and the default is used: omit the key instead`);\n // An outline is drawn with PixiJS's default join, `miter`: the sharp corners of W, V, A, k grow spikes. Round unless the author chose a join.\n const outline = (resolved as Record<string, unknown>).stroke;\n if (outline && typeof outline === 'object' && !('join' in outline) && !('lineJoin' in outline)) (resolved as Record<string, unknown>).stroke = { ...outline, join: 'round' };\n for (const k of Object.keys(resolved)) {\n if (unset.includes(k)) continue;\n (text.style as unknown as Record<string, unknown>)[k] = (resolved as Record<string, unknown>)[k];\n }\n // Re-measure: `w` / `h` in expressions must describe the STYLED text.\n this.intrinsicWidth = text.width;\n this.intrinsicHeight = text.height;\n }\n const startFill = initialProps.fill; // `initial: { fill }` is the colour from the start, like a `fill` keyframe later (it used to be dropped without a word)\n if (typeof startFill === 'string' || typeof startFill === 'number') (text.style as unknown as Record<string, unknown>).fill = startFill;\n validateGradientKeyframes(this.spec as never, describeLayer(this.spec), undefined, 'text'); // once, here, not at every evaluation of the timeline\n const gradientSpec = this.spec.fillGradient ?? (initialProps.fillGradient as GradientSpec | undefined);\n if (gradientSpec) { this._grad = { grad: gradStateFrom(gradientSpec) }; this._applyGradient(); }\n // `{value}` counter / `visibleChars`: seed the numbers from initial and print.\n const scope = this.scope();\n if (initialProps.value !== undefined) this._counters.value = resolveNumber(initialProps.value, scope);\n this._typed = initialProps.visibleChars !== undefined || animates(this.spec.keyframes, 'visibleChars');\n if (initialProps.visibleChars !== undefined) this._counters.visibleChars = resolveNumber(initialProps.visibleChars, scope);\n // `w` / `h` describe the whole text, not the part typed so far: measure before slicing.\n const typed = this._typed;\n this._typed = false;\n this._refreshText();\n if (this._lastText !== '') {\n this.intrinsicWidth = text.width;\n this.intrinsicHeight = text.height;\n }\n this._typed = typed;\n this._refreshText();\n this.buildFilters();\n }\n\n override bindTimeline(timeline: Timeline, offset = 0): void {\n if (!this.target) return;\n const colorSpace = this.spec.colorSpace ?? 'rgb';\n // Run the standard pipeline with `fill` stripped — text doesn't have a\n // top-level `fill` property (it lives on `style`), so leaving it in\n // would write a `fill` property onto the Text object. Then route fill through\n // our per-frame text.style.fill update, with optional perceptual\n // interpolation.\n // `value` (the counter) is likewise not a property of the Text object.\n // `text` (a string swap) and `visibleChars` (the typewriter count) are likewise ours, not the Text object's.\n const stripped = stripKeys(this.spec, ['fill', 'value', 'text', 'visibleChars', 'fillGradient']);\n runSuperWithStrippedSpec(this, stripped, timeline, offset);\n const keyframes = this.spec.keyframes ?? [];\n const origin = offset + this.at;\n bindFillKeyframes(timeline, this.target as Text, keyframes, this.duration!, origin, colorSpace);\n if (this._grad) bindGradientKeyframes(timeline, this._grad, keyframes, this.duration!, origin, colorSpace, () => this._applyGradient());\n const refresh = (): void => this._refreshText();\n bindCounterKeyframes(timeline, this._counters, 'value', refresh, keyframes, this.duration!, origin, this.scope());\n bindCounterKeyframes(timeline, this._counters, 'visibleChars', refresh, keyframes, this.duration!, origin, this.scope());\n bindTextKeyframes(timeline, keyframes, this.duration!, origin, () => this._template, t => { this._template = t; refresh(); }, describeLayer(this.spec));\n }\n}\n\n// Helper: temporarily swap in a fill-stripped spec, run the base\n// bindTimeline, restore. Cheaper than reimplementing the entire base\n// behaviour.\nfunction runSuperWithStrippedSpec(\n inst: TextSequence,\n strippedSpec: TextSequenceSpec,\n timeline: Timeline,\n offset: number,\n): void {\n const originalSpec = inst.spec;\n (inst as unknown as { spec: TextSequenceSpec }).spec = strippedSpec;\n try {\n Sequence.prototype.bindTimeline.call(inst, timeline, offset);\n } finally {\n (inst as unknown as { spec: TextSequenceSpec }).spec = originalSpec;\n }\n}\n\nfunction stripKeys(spec: TextSequenceSpec, keys: string[]): TextSequenceSpec {\n return {\n ...spec,\n initial: stripProps(spec.initial, keys),\n keyframes: spec.keyframes\n ? spec.keyframes.map(kf => ({\n ...kf,\n set: stripProps(kf.set, keys),\n to: stripProps(kf.to, keys),\n from: stripProps(kf.from, keys),\n }))\n : undefined,\n };\n}\n\nfunction stripProps(props: Props | undefined, keys: string[]): Props | undefined {\n if (!props) return props;\n if (!keys.some(k => k in props)) return props;\n const out: Record<string, unknown> = {};\n for (const k of Object.keys(props)) if (!keys.includes(k)) out[k] = (props as Record<string, unknown>)[k];\n return out as unknown as Props;\n}\n\nexport function resolveNumber(v: unknown, scope: unknown): number {\n if (typeof v === 'number') return v;\n const out = normalizeProps({ v }, scope as unknown as Record<string, number>).v;\n return typeof out === 'number' ? out : Number(out) || 0;\n}\n\n// Tween a number on the layer (`value` for the `{value}` counter, `visibleChars` for the typewriter). Mirrors the other\n// keyframe kinds (set / to / from / from+to), honours ease and repeat/yoyo, and calls `refresh` after every update.\nexport function bindCounterKeyframes(\n timeline: Timeline,\n state: CounterState,\n key: keyof CounterState,\n refresh: () => void,\n keyframes: Keyframe[],\n parentDuration: number,\n origin: number,\n scope: unknown,\n): void {\n for (const kf of keyframes) {\n const setV = kf.set?.[key];\n const fromV = kf.from?.[key];\n const toV = kf.to?.[key];\n if (setV === undefined && fromV === undefined && toV === undefined) continue;\n const at = origin + resolveAt(kf.at, parentDuration);\n const duration = kfDuration(kf);\n const ease = kf.ease ?? 'none';\n const loop = loopVars(kf);\n if (setV !== undefined) {\n const v = resolveNumber(setV, scope);\n revertibleSet(timeline, at, () => state[key], n => { state[key] = n; refresh(); }, v, [state, key]);\n }\n if (toV !== undefined && fromV !== undefined) {\n timeline.fromTo(state, { [key]: resolveNumber(fromV, scope) },\n { [key]: resolveNumber(toV, scope), duration, ease, ...loop, onUpdate: refresh }, at);\n } else if (toV !== undefined) {\n timeline.to(state, { [key]: resolveNumber(toV, scope), duration, ease, ...loop, onUpdate: refresh }, at);\n } else if (fromV !== undefined) {\n timeline.from(state, { [key]: resolveNumber(fromV, scope), duration, ease, ...loop, onUpdate: refresh }, at);\n }\n }\n}\n\n/** `set: { text }` swaps the string at that time (and back when you seek back). A string cannot be tweened. */\nfunction bindTextKeyframes(\n timeline: Timeline,\n keyframes: Keyframe[],\n parentDuration: number,\n origin: number,\n read: () => string,\n write: (t: string) => void,\n who: string,\n): void {\n for (const kf of keyframes) {\n for (const [what, props] of [['to', kf.to], ['from', kf.from]] as const) {\n if (props && (props as Record<string, unknown>).text !== undefined) {\n console.warn(`pixi-effects: ${who}: a keyframe's ${what}: { text } cannot tween a string: use set: { text: '…' } at the time it should change`);\n }\n }\n const t = (kf.set as Record<string, unknown> | undefined)?.text;\n if (t === undefined) continue;\n revertibleSet(timeline, origin + resolveAt(kf.at, parentDuration), read, write, String(t));\n }\n}\n\nfunction animates(keyframes: Keyframe[] | undefined, key: string): boolean {\n return (keyframes ?? []).some(kf => [kf.set, kf.to, kf.from].some(p => p && (p as Record<string, unknown>)[key] !== undefined));\n}\n\n// Walk the keyframes and emit colour tweens for any `fill` mutation.\n// Updates `text.style.fill` directly; PIXI v8 marks the text dirty on\n// style mutation, so the fill change is rendered on the next frame.\nfunction bindFillKeyframes(\n timeline: Timeline,\n text: Text,\n keyframes: Keyframe[],\n parentDuration: number,\n offset: number,\n colorSpace: 'rgb' | 'oklab' | 'oklch',\n): void {\n // Mirror state object so tweenColor has somewhere consistent to write.\n // We then mirror back to text.style.fill in the onUpdate callback.\n const state: { fill?: ColorInput } = { fill: text.style.fill as ColorInput | undefined };\n const writeFill = (): void => { text.style.fill = state.fill as never; };\n\n for (const kf of keyframes) {\n const at = offset + resolveAt(kf.at, parentDuration);\n const duration = kfDuration(kf);\n const ease = kf.ease ?? 'none';\n const setFill = pickFill(kf.set);\n const fromFill = pickFill(kf.from);\n const toFill = pickFill(kf.to);\n\n if (setFill !== undefined) {\n revertibleSet(timeline, at, () => state.fill, c => { state.fill = c; writeFill(); }, setFill, [state, 'fill']);\n }\n if (toFill !== undefined) {\n tweenColor(\n timeline,\n state as unknown as Record<string, unknown>,\n 'fill',\n fromFill,\n toFill,\n duration, ease, at, colorSpace,\n writeFill, loopVars(kf),\n );\n }\n }\n}\n\nfunction pickFill(props: Props | undefined): ColorInput | undefined {\n if (!props) return undefined;\n const v = (props as Record<string, unknown>).fill;\n if (typeof v === 'string' || typeof v === 'number') return v as ColorInput;\n return undefined;\n}\n","import { createTimeline, type Timeline } from './timelineEngine';\nimport { applyKeyframes } from './Timeline';\nimport type { Keyframe, KeyframeProps } from '../types';\n\n\n\n/**\n * Time remap. A layer's own time is a keyframed property, `time` (seconds of the layer's content: a video's position in the file, a\n * composition's local playhead). `speed` is the same thing as one straight tween. Everything reuses the keyframe pipeline (`at`,\n * `duration`, `ease`, `repeat`, `yoyo`, `from` / `to` / `set`), pointed at a plain clock object instead of a display object.\n */\nexport interface TimeRemap {\n /** the keyframes that touch `time`, with the key renamed to the clock's property */\n timeKfs: Keyframe[];\n /** the layer's other keyframes (`time` taken out): what goes on the display object, or undefined when none is left */\n restKfs: Keyframe[] | undefined;\n /** `initial` without `time` */\n restInitial: Record<string, unknown> | undefined;\n /** `initial.time` */\n start: number | undefined;\n speed: number | undefined;\n}\n\nconst BAGS = ['set', 'to', 'from'] as const;\n\nexport function timeRemapOf(spec: { initial?: Record<string, unknown>; keyframes?: Keyframe[]; speed?: number }, prop = 'time'): TimeRemap | null {\n const hasInitial = !!spec.initial && 'time' in spec.initial;\n const hasKf = (spec.keyframes ?? []).some(kf => BAGS.some(b => kf[b] && 'time' in kf[b]!));\n const speed = typeof spec.speed === 'number' && Number.isFinite(spec.speed) && spec.speed !== 0 ? spec.speed : undefined; // a bad speed is warned about by lintRemap and ignored\n if (!hasInitial && !hasKf && speed === undefined) return null;\n const timeKfs: Keyframe[] = [];\n const restKfs: Keyframe[] = [];\n for (const kf of spec.keyframes ?? []) {\n const t: Keyframe = { ...kf }, r: Keyframe = { ...kf };\n let touched = false, left = false;\n for (const b of BAGS) {\n const bag = kf[b] as Record<string, unknown> | undefined;\n if (!bag) { delete t[b]; delete r[b]; continue; }\n const { time, ...others } = bag;\n if ('time' in bag) { touched = true; t[b] = { [prop]: time } as KeyframeProps; } else delete t[b];\n if (Object.keys(others).length) { r[b] = others as KeyframeProps; left = true; } else delete r[b];\n }\n if (touched) timeKfs.push(t);\n if (!touched || left) restKfs.push(r);\n }\n let restInitial = spec.initial;\n let start: number | undefined;\n if (hasInitial) {\n const { time, ...others } = spec.initial!;\n start = typeof time === 'number' && Number.isFinite(time) ? time : undefined; // a non-number is warned about by lintRemap and ignored\n restInitial = others;\n }\n return { timeKfs, restKfs: restKfs.length ? restKfs : undefined, restInitial, start, speed };\n}\n\n/** A negative number is counted back from the end of the content (as `at` is from the end of its layer); stops at the start. Expressions are left alone. */\nexport function resolveFromEnd(remap: TimeRemap, length: number, prop: string): TimeRemap {\n const fix = (v: unknown): unknown => (typeof v === 'number' && v < 0 ? Math.max(0, length + v) : v);\n const timeKfs = remap.timeKfs.map(kf => {\n const out: Keyframe = { ...kf };\n for (const b of BAGS) {\n const bag = kf[b] as Record<string, unknown> | undefined;\n if (bag && prop in bag) out[b] = { ...bag, [prop]: fix(bag[prop]) } as KeyframeProps;\n }\n return out;\n });\n return { ...remap, timeKfs, start: remap.start === undefined ? undefined : (fix(remap.start) as number) };\n}\n\n/** `timeRemapOf` + `resolveFromEnd`: what a layer keeps. A null `length` leaves negative numbers as they are. */\nexport function remapOf(spec: Parameters<typeof timeRemapOf>[0], prop: string, length: number | null): TimeRemap | null {\n const r = timeRemapOf(spec, prop);\n return r && length !== null ? resolveFromEnd(r, length, prop) : r;\n}\n\n/** How much of its own time a remapped composition's children can use: the lifespan, or further when the clock runs ahead of it. Children default to it. */\nexport function contentLength(remap: TimeRemap, duration: number): number {\n let m = duration;\n if (remap.speed !== undefined) m = Math.max(m, Math.abs(remap.speed) * duration);\n if (remap.start !== undefined) m = Math.max(m, remap.start + (remap.speed ?? 1) * duration);\n for (const kf of remap.timeKfs) {\n for (const b of BAGS) {\n const bag = kf[b] as Record<string, unknown> | undefined;\n const v = bag && Object.values(bag)[0];\n if (typeof v === 'number') m = Math.max(m, v);\n }\n }\n return m;\n}\n\n/**\n * Tween `clock[prop]` through the layer's `time` keyframes, or through `speed` when there are none. `duration` is the layer's\n * lifespan; `at` its start on `timeline`. With keyframes, `initial.time` is the value before the first one.\n */\nexport function bindClock(timeline: Timeline, clock: object, prop: string, remap: TimeRemap, duration: number, at: number, scope: Record<string, number>): void {\n if (remap.timeKfs.length) {\n if (remap.start !== undefined) timeline.set(clock, { [prop]: remap.start }, at);\n applyKeyframes(timeline, clock, remap.timeKfs, duration, scope, [], at);\n return;\n }\n const s = remap.speed ?? 1;\n const from = remap.start ?? (s < 0 ? -s * duration : 0);\n timeline.fromTo(clock, { [prop]: from }, { [prop]: from + s * duration, duration, ease: 'none' }, at);\n}\n\n/** The clock as a function of the movie's time, with the range it covers. */\nexport interface ClockTable { at(t: number): number; min: number; max: number }\n\n/**\n * The clock sampled every millisecond from a throwaway timeline (no scene is touched): what the mixer needs to follow a remap, and\n * the range the clock reaches (for \"a layer starts after the clock can reach it\"). `to` is the last moment that matters.\n */\nexport function clockTable(remap: TimeRemap, prop: string, duration: number, at: number, scope: Record<string, number>, to: number): ClockTable {\n const probe = createTimeline({ paused: true });\n const clock: Record<string, number> = { [prop]: remap.start ?? 0 };\n bindClock(probe, clock, prop, remap, duration, at, scope);\n probe.time(probe.duration()); probe.time(0);\n const h = 1 / 1000;\n const n = Math.max(2, Math.ceil(to / h) + 2);\n const tab = new Float64Array(n);\n let min = Infinity, max = -Infinity;\n for (let k = 0; k < n; k++) {\n probe.time(k * h);\n const v = clock[prop]!;\n tab[k] = v;\n const t = k * h;\n if (t >= at && t <= at + duration) { if (v < min) min = v; if (v > max) max = v; }\n }\n probe.kill();\n return {\n at(t: number): number {\n const x = Math.min(Math.max(t / h, 0), n - 1.000001);\n const k = Math.floor(x), f = x - k;\n return tab[k]! * (1 - f) + tab[k + 1]! * f;\n },\n min: Number.isFinite(min) ? min : 0,\n max: Number.isFinite(max) ? max : 0,\n };\n}\n","/**\n * Pure 2.5D projection math. No Pixi, no DOM.\n *\n * Coordinates are comp pixels: +x right, +y down, +z toward the viewer\n * (CSS `translateZ` / three.js convention). Rotations are radians here; the\n * DSL speaks degrees and Layer3D converts. Rotation signs match CSS\n * `rotateX()` / `rotateY()` / `rotateZ()`.\n */\n\nexport const DEG = Math.PI / 180;\nexport const DEFAULT_FOV = 40;\nexport const MIN_FOV = 1;\nexport const MAX_FOV = 179;\n/** A corner with camera-space depth <= NEAR hides the whole layer for that frame. */\nexport const NEAR = 1;\n\nexport interface Vec3 { x: number; y: number; z: number }\nexport interface Rect { x: number; y: number; width: number; height: number }\n\nexport interface LayerTransform {\n x: number; y: number; z: number;\n /** radians */\n rotationX: number; rotationY: number; rotationZ: number;\n scaleX: number; scaleY: number;\n pivotX: number; pivotY: number;\n}\n\nexport interface CameraState {\n x: number; y: number; z: number;\n lookAtX: number; lookAtY: number; lookAtZ: number;\n /** Vertical field of view, degrees. */\n fov: number;\n /** Depth of field: world z of the focal plane (default 0), and the lens diameter in comp px; 0 = off. */\n focus?: number; aperture?: number;\n}\n\nexport interface CameraBasis {\n cx: number; cy: number; cz: number;\n /** right */ rx: number; ry: number; rz: number;\n /** down */ dx: number; dy: number; dz: number;\n /** forward */ fx: number; fy: number; fz: number;\n /** focal length in comp pixels */ focal: number;\n halfW: number; halfH: number;\n}\n\nexport type Corners = [number, number, number, number, number, number, number, number];\n\nexport interface ProjectedLayer {\n /** Screen corners in comp pixels: TL, TR, BR, BL as x0,y0,x1,y1,x2,y2,x3,y3. */\n corners: Corners;\n /** Camera-space depth of the layer origin (larger = farther). */\n depth: number;\n visible: boolean;\n}\n\nexport function clampFov(fov: number): number {\n if (!Number.isFinite(fov)) return DEFAULT_FOV;\n return Math.min(MAX_FOV, Math.max(MIN_FOV, fov));\n}\n\n/** Camera distance that makes the z=0 plane map 1:1 to comp pixels. */\nexport function homeDistance(compHeight: number, fovDeg: number): number {\n return (compHeight / 2) / Math.tan((clampFov(fovDeg) * DEG) / 2);\n}\n\n/** The camera used when a composition has none: centred, looking at the z=0 plane. */\nexport function homeCamera(compW: number, compH: number, fov: number = DEFAULT_FOV): CameraState {\n return {\n x: compW / 2, y: compH / 2, z: homeDistance(compH, fov),\n lookAtX: compW / 2, lookAtY: compH / 2, lookAtZ: 0,\n fov,\n };\n}\n\nexport function cameraBasis(cam: CameraState, compW: number, compH: number): CameraBasis {\n let fx = cam.lookAtX - cam.x;\n let fy = cam.lookAtY - cam.y;\n let fz = cam.lookAtZ - cam.z;\n let len = Math.hypot(fx, fy, fz);\n if (len < 1e-9) { fx = 0; fy = 0; fz = -1; len = 1; }\n fx /= len; fy /= len; fz /= len;\n\n // right = normalize(forward × (0,1,0)) = normalize(-fz, 0, fx)\n let rx = -fz;\n const ry = 0;\n let rz = fx;\n const rlen = Math.hypot(rx, rz);\n if (rlen < 1e-9) { rx = 1; rz = 0; } else { rx /= rlen; rz /= rlen; }\n\n // down = right × forward\n const dx = ry * fz - rz * fy;\n const dy = rz * fx - rx * fz;\n const dz = rx * fy - ry * fx;\n\n return {\n cx: cam.x, cy: cam.y, cz: cam.z,\n rx, ry, rz, dx, dy, dz, fx, fy, fz,\n focal: (compH / 2) / Math.tan((clampFov(cam.fov) * DEG) / 2),\n halfW: compW / 2, halfH: compH / 2,\n };\n}\n\n/** Local layer point (before pivot) to world space: T(x,y,z) · Rz · Ry · Rx · S · T(-pivot). */\nexport function layerToWorld(t: LayerTransform, px: number, py: number): Vec3 {\n let x = (px - t.pivotX) * t.scaleX;\n let y = (py - t.pivotY) * t.scaleY;\n let z = 0;\n\n let c = Math.cos(t.rotationX);\n let s = Math.sin(t.rotationX);\n [y, z] = [y * c - z * s, y * s + z * c];\n\n c = Math.cos(t.rotationY);\n s = Math.sin(t.rotationY);\n [x, z] = [x * c + z * s, -x * s + z * c];\n\n c = Math.cos(t.rotationZ);\n s = Math.sin(t.rotationZ);\n [x, y] = [x * c - y * s, x * s + y * c];\n\n return { x: x + t.x, y: y + t.y, z: z + t.z };\n}\n\nexport function projectPoint(b: CameraBasis, p: Vec3): { x: number; y: number; depth: number } {\n const vx = p.x - b.cx;\n const vy = p.y - b.cy;\n const vz = p.z - b.cz;\n const xc = vx * b.rx + vy * b.ry + vz * b.rz;\n const yc = vx * b.dx + vy * b.dy + vz * b.dz;\n const zc = vx * b.fx + vy * b.fy + vz * b.fz;\n return { x: b.halfW + (b.focal * xc) / zc, y: b.halfH + (b.focal * yc) / zc, depth: zc };\n}\n\nexport function projectLayer(t: LayerTransform, frame: Rect, b: CameraBasis): ProjectedLayer {\n const pts: Array<[number, number]> = [\n [frame.x, frame.y],\n [frame.x + frame.width, frame.y],\n [frame.x + frame.width, frame.y + frame.height],\n [frame.x, frame.y + frame.height],\n ];\n let visible = true;\n const corners: number[] = [];\n for (const [px, py] of pts) {\n const p = projectPoint(b, layerToWorld(t, px, py));\n if (!(p.depth > NEAR)) visible = false;\n corners.push(p.x, p.y);\n }\n const origin = projectPoint(b, { x: t.x, y: t.y, z: t.z });\n return { corners: corners as Corners, depth: origin.depth, visible };\n}\n","import { suggestName } from '../core/options';\nimport { evaluateExpr } from '../expr/Parser';\nimport type { Keyframe, SequenceSpec } from '../types';\n\n/** `aperture` when the camera writes `focus` or `aperture` but no value of its own. The lens diameter, in comp pixels. */\nexport const DEFAULT_APERTURE = 30;\n/** Below this blur radius (px) a layer gets no filter at all: a sharp layer costs nothing. */\nexport const MIN_BLUR = 0.05;\n/** The largest blur radius (px). A bigger one would grow every blurred layer's padding and sampling without bound. */\nexport const MAX_BLUR = 32;\n/** More blurred layers than this at once cost a filter pass each (WebGPU more): said once. */\nexport const MANY_BLURRED = 20;\n\n/**\n * Depth-of-field blur RADIUS in comp pixels for a layer at camera depth `depth` when the focal plane is at `focusDepth`:\n * the circle of confusion of a lens of diameter `aperture` (px) and focal length `focal` (px), halved. 0 on the focal plane,\n * and for anything at or behind the camera (those layers are hidden anyway).\n */\nexport function blurRadius(aperture: number, focal: number, depth: number, focusDepth: number): number {\n if (!(aperture > 0) || !(focal > 0) || !(depth > 0) || !(focusDepth > 0)) return 0;\n const r = (aperture * focal * Math.abs(1 / depth - 1 / focusDepth)) / 2;\n return Math.min(r, MAX_BLUR);\n}\n\n/** The variables an expression may use (`src/expr/Scope.ts`): a bare one of these is a number, not a layer name. */\nconst SCOPE_NAMES = new Set(['w', 'h', 'W', 'H', 'GW', 'GH', 'contain', 'cover', 't', 'd', 'T']);\n\n/** A `focus` string that is a layer name (`title`, `bg-photo`) rather than an expression (`GW/2`, `-120`, `H`). */\nexport function looksLikeLayerName(s: string): boolean {\n return /^[A-Za-z_][\\w-]*$/.test(s) && !SCOPE_NAMES.has(s);\n}\n\ntype Bag = Record<string, unknown>;\ntype Props = { initial?: Bag; keyframes?: Keyframe[] };\n\n/** A `focus` string that names a layer: exactly the name of a sibling (any string a layer can be called by), or shaped like a name. */\nconst isName = (v: unknown, known: ReadonlySet<string>): v is string => typeof v === 'string' && (known.has(v) || looksLikeLayerName(v));\n\n/** Every layer name in `initial` and in the keyframes' `set` / `to` / `from` (`known`: the names the sibling layers have). */\nfunction focusNames(props: Props, known: ReadonlySet<string>): string[] {\n const out: string[] = [];\n const read = (bag: Bag | undefined) => { const v = bag?.focus; if (isName(v, known)) out.push(v); };\n read(props.initial);\n for (const kf of props.keyframes ?? []) for (const bag of [kf.set, kf.to, kf.from]) read(bag as Bag | undefined);\n return out;\n}\n\n/**\n * A copy of `props` with every layer-name `focus` replaced by the z `zOf` gives (0, the z = 0 plane, if it gives none). The input is not\n * changed. `known` is the set of names the sibling layers have: a string that is exactly one of them is a name even if it looks like\n * an expression (`hero card`, `3d-title`).\n */\nexport function withFocusResolved<T extends Props>(props: T, zOf: (name: string) => number | undefined, known: ReadonlySet<string> = new Set()): T {\n if (focusNames(props, known).length === 0) return props;\n const fix = (bag: Bag | undefined): Bag | undefined => {\n const v = bag?.focus;\n if (!bag || !isName(v, known)) return bag;\n return { ...bag, focus: zOf(v) ?? 0 };\n };\n return {\n ...props,\n initial: fix(props.initial),\n keyframes: props.keyframes?.map(kf => ({ ...kf, set: fix(kf.set as Bag | undefined), to: fix(kf.to as Bag | undefined), from: fix(kf.from as Bag | undefined) })),\n } as T;\n}\n\n/** A layer's first z: its `initial.z` (a number or an expression), else 0 (what `Layer3D` seeds). */\nexport function layerInitialZ(spec: { initial?: Bag }, scope: Record<string, number>): number {\n const z = spec.initial?.z;\n if (typeof z === 'number') return z;\n if (typeof z === 'string') return evaluateExpr(z, scope);\n return 0;\n}\n\nexport type FocusProblem =\n | { kind: 'missing'; name: string; hint: string | null }\n | { kind: 'not-threeD'; name: string }\n | { kind: 'moving'; name: string }\n | { kind: 'duplicate'; name: string; count: number };\n\nconst movesZ = (spec: SequenceSpec): boolean =>\n (spec.keyframes ?? []).some(kf => [kf.set, kf.to, kf.from].some(bag => bag && 'z' in (bag as Bag)));\n\n/** What is wrong with the layer names a camera's `focus` points at, one entry per (name, problem). */\nexport function focusProblems(camera: Props, siblings: readonly SequenceSpec[]): FocusProblem[] {\n const out: FocusProblem[] = [];\n const said = new Set<string>();\n const threeD = siblings.filter(s => s.threeD && s.name).map(s => s.name!);\n const known = new Set(siblings.map(s => s.name).filter((n): n is string => !!n));\n for (const name of focusNames(camera, known)) {\n if (said.has(name)) continue;\n said.add(name);\n const same = siblings.filter(s => s.name === name);\n const hit = same.find(s => s.threeD) ?? same[0]; // the first threeD layer with the name: what the composition resolves to\n if (!hit) out.push({ kind: 'missing', name, hint: suggestName(name, threeD) });\n else if (!hit.threeD) out.push({ kind: 'not-threeD', name });\n else {\n if (same.length > 1) out.push({ kind: 'duplicate', name, count: same.length });\n if (movesZ(hit)) out.push({ kind: 'moving', name });\n }\n }\n return out;\n}\n","import { Color, Container } from 'pixi.js';\nimport { Sequence } from '../sequences/Base';\nimport { MAX_FOV, MIN_FOV, clampFov, homeCamera, homeDistance, type CameraState } from './math';\nimport { collectPropKeys } from './specKeys';\nimport { DEFAULT_APERTURE, withFocusResolved } from './focus';\nimport type { CameraWindow } from './camera';\nimport type { CameraSequenceSpec, Keyframe } from '../types';\n\ntype Carrier = Container & {\n z: number; lookAtX: number; lookAtY: number; lookAtZ: number; fov: number; focus: number; aperture: number;\n offsetX: number; offsetY: number; offsetZ: number; lookOffsetX: number; lookOffsetY: number; lookOffsetZ: number;\n fogNear: number; fogFar: number; fogColor: string | number; fogAmount: number;\n};\n\n/**\n * `type: 'camera'`. Has no display object: `target` is a detached carrier whose\n * numeric props the timeline tweens exactly like any other layer, so the camera reuses\n * the whole `initial` / `keyframes` / expression pipeline. It is never added to\n * the scene graph.\n */\nexport class CameraSequence extends Sequence {\n declare spec: CameraSequenceSpec;\n /** True when `z` is never specified anywhere: z then follows `fov`. */\n autoZ = true;\n private compH = 0;\n private warnedFov = false;\n private warnedLookAt = false;\n private warnedAperture = false;\n /** True when the camera writes `focus` or `aperture` anywhere: depth of field is on. */\n private dof = false;\n /** True when the camera writes any fog key anywhere: depth fog is on (nothing is made for a camera without fog). */\n fog = false;\n private fogC: Color | null = null;\n private zOfName: ((name: string) => number | undefined) | null = null;\n private layerNames: ReadonlySet<string> = new Set();\n\n async build(): Promise<void> {\n const compW = this.parent?.width ?? this.root.width;\n this.compH = this.parent?.height ?? this.root.height;\n if (this.duration === undefined) {\n this.duration = this.parent?.duration ?? this.root.duration;\n }\n const home = homeCamera(compW, this.compH);\n const carrier = new Container() as unknown as Carrier;\n carrier.x = home.x;\n carrier.y = home.y;\n carrier.z = home.z;\n carrier.lookAtX = home.lookAtX;\n carrier.lookAtY = home.lookAtY;\n carrier.lookAtZ = home.lookAtZ;\n carrier.fov = home.fov;\n carrier.focus = 0; // the z = 0 plane, the one the home camera shows 1:1\n carrier.aperture = DEFAULT_APERTURE;\n // added on top of the camera's own move: put a handheld shake (wiggle) here and it never collides with a dolly or an orbit\n carrier.offsetX = carrier.offsetY = carrier.offsetZ = 0;\n carrier.lookOffsetX = carrier.lookOffsetY = carrier.lookOffsetZ = 0;\n // depth fog: near / far are distances along the view direction; the defaults start at the home distance and end at three times it\n carrier.fogNear = home.z; carrier.fogFar = home.z * 3; carrier.fogColor = '#000000'; carrier.fogAmount = 1;\n this.target = carrier as unknown as Container;\n const keys = collectPropKeys(this.spec);\n this.autoZ = !keys.has('z');\n this.dof = keys.has('focus') || keys.has('aperture');\n this.fog = keys.has('fogNear') || keys.has('fogFar') || keys.has('fogColor') || keys.has('fogAmount');\n }\n\n /** The aperture to use now: off unless depth of field is on and the value is a number of 0 or more (said once if it is not). */\n private apertureNow(a: number): number {\n if (!this.dof) return 0;\n if (!(a >= 0) && !this.warnedAperture) {\n this.warnedAperture = true;\n const who = this.spec.name ? ` \"${this.spec.name}\"` : '';\n console.warn(`pixi-effects: camera${who}: aperture ${a} is not a number of 0 or more; depth of field is off (it is the lens diameter in px: 30 is the default, 0 turns it off)`);\n }\n return a > 0 ? a : 0;\n }\n\n /** Called by the composition once its children exist: how a layer name in `focus` becomes the z of that layer. */\n resolveFocusNames(zOf: (name: string) => number | undefined, names: ReadonlySet<string> = new Set()): void {\n this.zOfName = zOf;\n this.layerNames = names;\n }\n\n protected override displayProps(): ReturnType<Sequence['displayProps']> {\n const base = super.displayProps();\n return this.zOfName ? (withFocusResolved(base as { initial?: Record<string, unknown>; keyframes?: Keyframe[] }, this.zOfName, this.layerNames) as typeof base) : base;\n }\n\n /** The camera's state at the current timeline position. */\n state(): CameraState {\n const c = this.target as unknown as Carrier;\n if (!this.warnedFov && !(c.fov >= MIN_FOV && c.fov <= MAX_FOV)) {\n this.warnedFov = true;\n const who = this.spec.name ? ` \"${this.spec.name}\"` : '';\n console.warn(`pixi-effects: camera${who}: fov ${c.fov} is outside [${MIN_FOV}, ${MAX_FOV}]; clamped`);\n }\n const fov = clampFov(c.fov);\n const z = this.autoZ ? homeDistance(this.compH, fov) : c.z;\n if (!this.warnedLookAt && c.lookAtX === c.x && c.lookAtY === c.y && c.lookAtZ === z) {\n this.warnedLookAt = true;\n const who = this.spec.name ? ` \"${this.spec.name}\"` : '';\n console.warn(`pixi-effects: camera${who}: lookAt equals the camera position; looking along -z instead`);\n }\n return {\n x: c.x + c.offsetX, y: c.y + c.offsetY, z: z + c.offsetZ,\n lookAtX: c.lookAtX + c.lookOffsetX, lookAtY: c.lookAtY + c.lookOffsetY, lookAtZ: c.lookAtZ + c.lookOffsetZ,\n fov, focus: Number.isFinite(c.focus) ? c.focus : 0, aperture: this.apertureNow(c.aperture),\n };\n }\n\n /** The fog now (colour as 0..1 channels, distances, 0..1 amount), or null when the camera writes no fog key. */\n fogState(): { r: number; g: number; b: number; near: number; far: number; amount: number } | null {\n if (!this.fog) return null;\n const c = this.target as unknown as Carrier;\n const fc = (this.fogC ??= new Color());\n try { fc.setValue(c.fogColor as never); } catch { fc.setValue(0); }\n const [r, g, b] = fc.toArray();\n const amount = Number.isFinite(c.fogAmount) ? Math.min(1, Math.max(0, c.fogAmount)) : 1;\n return { r: r!, g: g!, b: b!, near: c.fogNear, far: c.fogFar, amount };\n }\n\n /** Lifespan on the global timeline (valid after bindTimeline). */\n window(): CameraWindow {\n const start = this.absoluteStart ?? this.at;\n return { start, end: start + (this.duration ?? 0) };\n }\n}\n","/**\n * Lighting math for lit threeD layers. Pure: no Pixi, no DOM (the shader in LitMaterial.ts computes the same formulas; shadeReference is the\n * independent JS twin the tests compare the picture against).\n *\n * A light is one of: ambient (a flat colour added everywhere), point (from a position, all directions), spot (a point limited to a\n * cone around the direction to its look-at point), parallel (a direction only: from the position toward the look-at point, the sun).\n * Shading of a flat plane: albedo × (ambient + Σ color × intensity × max(0, N·L) × falloff × cone × shadow). N is the plane's normal,\n * turned toward the camera (the side we see is the side that is lit: a light behind the plane does not light it).\n */\nimport type { Vec3 } from './math';\n\nexport const LIGHT_KINDS = ['ambient', 'point', 'spot', 'parallel'] as const;\nexport const FALLOFFS = ['none', 'smooth', 'inverseSquare'] as const;\nexport type LightKind = (typeof LIGHT_KINDS)[number];\nexport type Falloff = (typeof FALLOFFS)[number];\n\nexport interface LightState {\n kind: LightKind;\n x: number; y: number; z: number;\n lookAtX: number; lookAtY: number; lookAtZ: number;\n /** linear rgb 0..1 */\n r: number; g: number; b: number;\n intensity: number;\n /** full cone angle in degrees (spot) */\n coneAngle: number;\n /** 0..1: the soft part of the cone edge, as a fraction of the half-angle */\n coneFeather: number;\n falloff: Falloff;\n /** falloff starts (smooth) / the distance of full intensity (inverseSquare) */\n radius: number;\n falloffDistance: number;\n castsShadows: boolean;\n /** 0..1 */\n shadowDarkness: number;\n /** world px: the light's size, which makes the penumbra (0 = hard) */\n shadowDiffusion: number;\n}\n\n/** The numbers a light layer animates (in `initial` / `keyframes`). */\nexport const LIGHT_PROPS = ['x', 'y', 'z', 'lookAtX', 'lookAtY', 'lookAtZ', 'intensity', 'color', 'coneAngle', 'coneFeather', 'radius', 'falloffDistance', 'shadowDarkness', 'shadowDiffusion'] as const;\n\nexport const MAX_LIGHTS = 8;\nexport const MAX_CASTERS = 4;\nexport const SHADOW_TAPS = 16;\n\nconst FALLOFF_ID: Record<Falloff, number> = { none: 0, smooth: 1, inverseSquare: 2 };\nconst KIND_ID: Record<Exclude<LightKind, 'ambient'>, number> = { point: 1, spot: 2, parallel: 3 };\n\nexport function smoothstep(e0: number, e1: number, x: number): number {\n const t = Math.min(1, Math.max(0, (x - e0) / (e1 - e0)));\n return t * t * (3 - 2 * t);\n}\n\nconst DEG = Math.PI / 180;\nfunction norm(v: Vec3): Vec3 { const l = Math.hypot(v.x, v.y, v.z) || 1; return { x: v.x / l, y: v.y / l, z: v.z / l }; }\nconst dot = (a: Vec3, b: Vec3) => a.x * b.x + a.y * b.y + a.z * b.z;\nconst sub = (a: Vec3, b: Vec3): Vec3 => ({ x: a.x - b.x, y: a.y - b.y, z: a.z - b.z });\n\nexport function coneCos(l: LightState): { cosOuter: number; cosInner: number } {\n const half = Math.min(179, Math.max(0, l.coneAngle)) * DEG / 2;\n const inner = half * (1 - Math.min(1, Math.max(0, l.coneFeather)));\n const cosOuter = Math.cos(half);\n // smoothstep needs e0 < e1: a feather of 0 is a hard edge one hair wide\n const cosInner = Math.max(Math.cos(inner), cosOuter + 1e-4);\n return { cosOuter, cosInner };\n}\n\nexport interface PlaneFrame { o: Vec3; u: Vec3; v: Vec3 }\n\n/** The 32+ floats of light uniforms a lit layer needs this frame (every layer gets the same light list; only the plane differs). */\nexport interface PackedLights {\n count: number;\n ambient: [number, number, number];\n pos: Float32Array; dir: Float32Array; col: Float32Array; fall: Float32Array; shadow: Float32Array;\n}\n\nexport function packLights(lights: readonly LightState[]): PackedLights {\n const pos = new Float32Array(4 * MAX_LIGHTS), dir = new Float32Array(4 * MAX_LIGHTS), col = new Float32Array(4 * MAX_LIGHTS), fall = new Float32Array(4 * MAX_LIGHTS), shadow = new Float32Array(4 * MAX_LIGHTS);\n const ambient: [number, number, number] = [0, 0, 0];\n let n = 0;\n for (const l of lights) {\n if (l.kind === 'ambient') { ambient[0] += l.r * l.intensity; ambient[1] += l.g * l.intensity; ambient[2] += l.b * l.intensity; continue; }\n if (n >= MAX_LIGHTS) continue;\n const d = norm({ x: l.lookAtX - l.x, y: l.lookAtY - l.y, z: l.lookAtZ - l.z });\n const { cosOuter, cosInner } = coneCos(l);\n pos.set([l.x, l.y, l.z, KIND_ID[l.kind]], 4 * n);\n dir.set([d.x, d.y, d.z, cosOuter], 4 * n);\n col.set([l.r * l.intensity, l.g * l.intensity, l.b * l.intensity, cosInner], 4 * n);\n fall.set([FALLOFF_ID[l.falloff], l.radius, l.falloffDistance, l.castsShadows ? 1 : 0], 4 * n);\n shadow.set([l.castsShadows ? l.shadowDarkness : 0, l.shadowDiffusion, 0, 0], 4 * n);\n n++;\n }\n return { count: n, ambient, pos, dir, col, fall, shadow };\n}\n\n/**\n * The independent JS reference of the shader (no shadows): the light multiplier (rgb) at world point `p` of a plane with normal `n`,\n * seen from `cam`. The test compares the GPU picture against albedo × this.\n */\nexport function shadeReference(p: Vec3, n: Vec3, cam: Vec3, lights: readonly LightState[]): [number, number, number] {\n let N = norm(n);\n if (dot(N, sub(cam, p)) < 0) N = { x: -N.x, y: -N.y, z: -N.z };\n const out: [number, number, number] = [0, 0, 0];\n for (const l of lights) {\n if (l.kind === 'ambient') { out[0] += l.r * l.intensity; out[1] += l.g * l.intensity; out[2] += l.b * l.intensity; continue; }\n const dirLA = norm({ x: l.lookAtX - l.x, y: l.lookAtY - l.y, z: l.lookAtZ - l.z });\n let L: Vec3; let dist = 0;\n if (l.kind === 'parallel') L = { x: -dirLA.x, y: -dirLA.y, z: -dirLA.z };\n else { const d = sub({ x: l.x, y: l.y, z: l.z }, p); dist = Math.hypot(d.x, d.y, d.z); L = { x: d.x / dist, y: d.y / dist, z: d.z / dist }; }\n const ndl = Math.max(0, dot(N, L));\n let att = 1;\n if (l.kind !== 'parallel') {\n if (l.falloff === 'smooth') att = 1 - smoothstep(l.radius, l.radius + Math.max(l.falloffDistance, 1e-3), dist);\n else if (l.falloff === 'inverseSquare') att = Math.min(1, (l.radius * l.radius) / Math.max(dist * dist, 1e-6));\n }\n let cone = 1;\n if (l.kind === 'spot') { const { cosOuter, cosInner } = coneCos(l); cone = smoothstep(cosOuter, cosInner, -dot(L, dirLA)); }\n const k = l.intensity * ndl * att * cone;\n out[0] += l.r * k; out[1] += l.g * k; out[2] += l.b * k;\n }\n return out;\n}\n\n/** Fog amount 0..1 at camera depth `depth`. */\nexport function fogAmount(depth: number, near: number, far: number, max = 1): number {\n if (!(far > near)) return depth >= near ? max : 0;\n return Math.min(1, Math.max(0, (depth - near) / (far - near))) * max;\n}\n\n/**\n * The independent JS reference of the shader's HARD shadow (no penumbra): how much of the light reaches the point `p` is blocked by `caster`,\n * 0..1. The ray from `p` toward the light (or against a parallel light's direction) meets the caster's plane; where it meets it inside the\n * plane's rectangle, the caster's alpha there (`alphaAt(u, v)`, uv in 0..1) is the occlusion. A caster that is not between the point and the\n * light (below the point, or past the light) blocks nothing.\n */\nexport function shadowReference(p: Vec3, light: LightState, caster: PlaneFrame, alphaAt: (u: number, v: number) => number): number {\n const Nc = { x: caster.u.y * caster.v.z - caster.u.z * caster.v.y, y: caster.u.z * caster.v.x - caster.u.x * caster.v.z, z: caster.u.x * caster.v.y - caster.u.y * caster.v.x };\n let D: Vec3;\n if (light.kind === 'parallel') {\n const d = norm({ x: light.lookAtX - light.x, y: light.lookAtY - light.y, z: light.lookAtZ - light.z });\n D = { x: -d.x * 100000, y: -d.y * 100000, z: -d.z * 100000 };\n } else D = sub({ x: light.x, y: light.y, z: light.z }, p);\n const denom = dot(D, Nc);\n if (Math.abs(denom) < 1e-9) return 0;\n const t = dot(sub(caster.o, p), Nc) / denom;\n if (t <= 1e-4 || t >= 1) return 0;\n const H = { x: p.x + t * D.x, y: p.y + t * D.y, z: p.z + t * D.z };\n const rel = sub(H, caster.o);\n const u = dot(rel, caster.u) / dot(caster.u, caster.u);\n const v = dot(rel, caster.v) / dot(caster.v, caster.v);\n if (u < 0 || u > 1 || v < 0 || v > 1) return 0;\n return alphaAt(u, v);\n}\n\n/**\n * How lit a layer is, for `inspect`: the brightness (Rec. 709) of the light multiplier (ambient + every light, no shadows) at the middle of the\n * layer's plane, seen from `cam`. 1 = as bright as with no light at all; 0 = black.\n */\nexport function lightLevel(frame: PlaneFrame, cam: Vec3, lights: readonly LightState[]): number {\n const mid = { x: frame.o.x + 0.5 * frame.u.x + 0.5 * frame.v.x, y: frame.o.y + 0.5 * frame.u.y + 0.5 * frame.v.y, z: frame.o.z + 0.5 * frame.u.z + 0.5 * frame.v.z };\n const n = { x: frame.u.y * frame.v.z - frame.u.z * frame.v.y, y: frame.u.z * frame.v.x - frame.u.x * frame.v.z, z: frame.u.x * frame.v.y - frame.u.y * frame.v.x };\n const m = shadeReference(mid, n, cam, lights);\n return 0.2126 * m[0] + 0.7152 * m[1] + 0.0722 * m[2];\n}\n","/**\n * `type: 'light'`. Like the camera: no display object, a detached carrier whose numeric props the timeline tweens with the usual `initial` /\n * `keyframes` (x, y, z, lookAtX/Y/Z, intensity, color, coneAngle, coneFeather, radius, falloffDistance, shadowDarkness, shadowDiffusion).\n * `kind`, `falloff` and `castsShadows` are fixed settings on the layer. Never added to the scene graph.\n */\nimport { Color, Container } from 'pixi.js';\nimport { Sequence } from '../sequences/Base';\nimport { homeDistance } from './math';\nimport type { CameraWindow } from './camera';\nimport { FALLOFFS, LIGHT_KINDS, type LightState } from './lighting';\nimport type { LightSequenceSpec } from '../types';\n\ntype Carrier = Container & {\n z: number; lookAtX: number; lookAtY: number; lookAtZ: number; intensity: number; color: string | number;\n coneAngle: number; coneFeather: number; radius: number; falloffDistance: number; shadowDarkness: number; shadowDiffusion: number;\n};\n\nexport class LightSequence extends Sequence {\n declare spec: LightSequenceSpec;\n private color = new Color();\n\n async build(): Promise<void> {\n const w = this.parent?.width ?? this.root.width;\n const h = this.parent?.height ?? this.root.height;\n if (this.duration === undefined) this.duration = this.parent?.duration ?? this.root.duration;\n const c = new Container() as unknown as Carrier;\n // default: up and to the left of the picture, between it and the camera (After Effects puts a new light up-left too)\n c.x = w * 0.3; c.y = h * 0.2; c.z = homeDistance(h, 40) * 0.6;\n c.lookAtX = w / 2; c.lookAtY = h / 2; c.lookAtZ = 0;\n c.intensity = 1; c.color = '#ffffff';\n c.coneAngle = 90; c.coneFeather = 0.5;\n c.radius = 500; c.falloffDistance = 500;\n c.shadowDarkness = 1; c.shadowDiffusion = 0;\n this.target = c as unknown as Container;\n }\n\n state(): LightState {\n const c = this.target as unknown as Carrier;\n try { this.color.setValue(c.color as never); } catch { this.color.setValue(0xffffff); }\n const [r, g, b] = this.color.toArray();\n return {\n // a kind or falloff nobody knows is the default the warning promises (the shader must never see an unknown id)\n kind: LIGHT_KINDS.includes(this.spec.kind as never) ? this.spec.kind! : 'point',\n x: c.x, y: c.y, z: c.z, lookAtX: c.lookAtX, lookAtY: c.lookAtY, lookAtZ: c.lookAtZ,\n r: r!, g: g!, b: b!, intensity: Number.isFinite(c.intensity) ? Math.max(0, c.intensity) : 1,\n coneAngle: c.coneAngle, coneFeather: c.coneFeather,\n falloff: FALLOFFS.includes(this.spec.falloff as never) ? this.spec.falloff! : 'none', radius: c.radius, falloffDistance: c.falloffDistance,\n castsShadows: !!this.spec.castsShadows,\n shadowDarkness: Math.min(1, Math.max(0, c.shadowDarkness)), shadowDiffusion: Math.max(0, c.shadowDiffusion),\n };\n }\n\n window(): CameraWindow {\n const start = this.absoluteStart ?? this.at;\n return { start, end: start + (this.duration ?? 0) };\n }\n}\n","// `spans`: colour and style inside one text layer. A text layer with `spans: [...]` is expanded, when it is built, into a group (a composition) of\n// ordinary text layers, one per piece (the part of a span that sits on one line), each at the x it has when the pieces are measured one after\n// the other: the same technique as `splitText()`. Nothing new is drawn, so it stays plain data, every filter / mask / keyframe of the layer\n// works on the group, and `inspect` and the timeline view show the pieces.\nimport { CanvasTextMetrics, TextStyle } from 'pixi.js';\nimport { suggestName } from '../core/options';\nimport { normalizeProps } from '../expr/normalizeProps';\nimport { STYLE_OPAQUE_KEYS, TEXT_STYLE_DEFAULTS } from './styleKeys';\nimport { describeLayer } from '../core/lint';\nimport type { SequenceSpec, TextSequenceSpec } from '../types';\nexport type { TextSpan } from '../types';\n\ntype Warn = (message: string) => void;\nconst defaultWarn: Warn = m => console.warn(m);\n\n/** What a span may change without moving the baseline or the places of the pieces: colour, weight, slant, spacing, a shadow. */\nexport const SPAN_STYLE_KEYS = ['fill', 'fontWeight', 'fontStyle', 'fontVariant', 'letterSpacing', 'dropShadow'] as const;\n/** What moves the baseline or the line: said once, ignored. */\nconst LINE_KEYS = ['fontSize', 'fontFamily', 'lineHeight', 'wordWrap', 'wordWrapWidth', 'align', 'leading', 'textBaseline', 'whiteSpace', 'stroke', 'padding'];\n\n\nexport interface SpanPiece {\n text: string;\n /** Left edge and top, in the group's own pixels. */\n x: number; y: number; width: number;\n line: number;\n /** Which span it came from. */\n span: number;\n /** Characters before it in the whole text (newlines count, as in a text layer) and its own length. */\n start: number; length: number;\n /** The span's own style overrides (what differs from the layer's style). */\n style: Record<string, unknown>;\n /** Only whitespace: it takes room and counts characters, but nothing is drawn for it. */\n blank: boolean;\n}\n\nexport interface SpansLayout { pieces: SpanPiece[]; width: number; height: number; lineHeight: number; chars: number }\n\n/** What the group needs to know about its pieces (the typewriter counts over them): kept beside the spec, not in it. */\nexport interface SpansMeta { typed: boolean; pieces: Array<{ start: number; length: number }>; /** The text, for a label (the timeline view). */ preview: string }\nexport const spansMeta = new WeakMap<object, SpansMeta>();\n\nconst widthOf = (text: string, style: TextStyle): number => CanvasTextMetrics.measureText(text, style).width;\n\n/** Each span as `{ text, overrides }`, with what a span may not do said once. */\nfunction normalize(spans: unknown, who: string, warn: Warn): Array<{ text: string; overrides: Record<string, unknown> }> {\n if (!Array.isArray(spans) || spans.length === 0) { warn(`pixi-effects: ${who}: spans is empty: write an array of strings and { text, fill … } objects (nothing is drawn)`); return []; }\n const out: Array<{ text: string; overrides: Record<string, unknown> }> = [];\n const lineKeys = new Set<string>();\n spans.forEach((sp, i) => {\n if (typeof sp === 'string') { out.push({ text: sp, overrides: {} }); return; }\n if (!sp || typeof sp !== 'object' || typeof (sp as { text?: unknown }).text !== 'string') {\n warn(`pixi-effects: ${who}: spans[${i}] must be a string or { text: '…', fill: '#…' }, got ${JSON.stringify(sp)}; skipped`);\n return;\n }\n const { text, ...rest } = sp as unknown as Record<string, unknown>;\n const overrides: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v === undefined) continue;\n if ((SPAN_STYLE_KEYS as readonly string[]).includes(k)) overrides[k] = v;\n else if (LINE_KEYS.includes(k)) lineKeys.add(k);\n else {\n const guess = suggestName(k, [...SPAN_STYLE_KEYS]);\n warn(`pixi-effects: ${who}: spans[${i}]: \"${k}\" is not a span key${guess ? ` — did you mean \"${guess}\"?` : ''} (it is ignored). A span takes text and ${SPAN_STYLE_KEYS.join(', ')}`);\n }\n }\n out.push({ text: text as string, overrides });\n });\n if (lineKeys.size) warn(`pixi-effects: ${who}: a span cannot set ${[...lineKeys].join(', ')}: they move the baseline, the line or the pieces' places (a stroke shifts a piece by half its width); put them in the style of the layer (one size, one font and one outline per layer). They are ignored`);\n return out;\n}\n\n/**\n * Where every piece of `spans` goes: pieces of a line follow each other by their measured widths (a trailing or leading space keeps its room),\n * `\\n` starts the next line, and `align` moves each line on the width of the block. Needs the fonts loaded, like `splitText`.\n */\nexport function layoutSpans(spans: unknown, style: Record<string, unknown>, align: 'left' | 'center' | 'right', who: string, warn: Warn = defaultWarn): SpansLayout {\n const clean = normalize(spans, who, warn);\n const base = new TextStyle(style as never);\n const m = CanvasTextMetrics.measureText('M', base);\n const lineHeight = m.lineHeight ?? m.height;\n const sentinel = (ts: TextStyle): number => widthOf('|', ts);\n const measure = (text: string, ts: TextStyle): number => widthOf(text + '|', ts) - sentinel(ts); // \"text|\" − \"|\" keeps trailing spaces\n const pieces: SpanPiece[] = [];\n let line = 0, chars = 0, x = 0;\n clean.forEach((sp, spanIdx) => {\n const ts = Object.keys(sp.overrides).length ? new TextStyle({ ...style, ...sp.overrides } as never) : base;\n sp.text.split('\\n').forEach((part, k) => {\n if (k > 0) { line++; x = 0; chars += 1; } // the newline is a character of the text\n if (part === '') return;\n const width = measure(part, ts);\n const length = Array.from(part).length;\n pieces.push({ text: part, x, y: line * lineHeight, width, line, span: spanIdx, start: chars, length, style: sp.overrides, blank: part.trim() === '' });\n x += width; chars += length;\n });\n });\n const lineWidth = new Map<number, number>();\n for (const p of pieces) lineWidth.set(p.line, Math.max(lineWidth.get(p.line) ?? 0, p.x + p.width));\n const width = Math.max(0, ...lineWidth.values());\n for (const p of pieces) {\n const room = width - (lineWidth.get(p.line) ?? 0);\n p.x += align === 'center' ? room / 2 : align === 'right' ? room : 0;\n }\n return { pieces, width, height: pieces.length ? (line + 1) * lineHeight : 0, lineHeight, chars };\n}\n\n/**\n * The style the pieces are measured with AND drawn with: the text layer's own defaults, the layer's `style` with its expressions and variables\n * resolved to numbers (in the scope of the layer; the pieces would resolve them against the small group), no wrapping (the lines are the\n * author's `\\n`). A size that cannot be resolved is said and the default is used.\n */\nexport function resolveSpansStyle(style: Record<string, unknown>, scope: Record<string, number> | undefined, who: string, warn: Warn = defaultWarn): Record<string, unknown> {\n const out: Record<string, unknown> = { ...TEXT_STYLE_DEFAULTS };\n for (const [k, raw] of Object.entries(style)) {\n if (raw === undefined) continue;\n let v: unknown = raw;\n if (scope) {\n try { v = (normalizeProps({ [k]: raw }, scope, { skipKeys: STYLE_OPAQUE_KEYS }) as Record<string, unknown>)[k]; }\n catch (e) { v = NaN; if (!(k in TEXT_STYLE_DEFAULTS) || k === 'fontSize') warn(`pixi-effects: ${who}: style.${k} ${JSON.stringify(raw)} could not be resolved (${(e as Error).message}); ${k === 'fontSize' ? `the default, ${TEXT_STYLE_DEFAULTS.fontSize}, is used` : 'it is left out'}`); continue; }\n }\n // an unknown name evaluates to 0: a text of size 0 (or below) draws nothing, so it is the same mistake as not being a number\n if (['fontSize', 'letterSpacing', 'lineHeight'].includes(k) && (typeof v !== 'number' || !Number.isFinite(v) || (k !== 'letterSpacing' && v <= 0))) {\n warn(`pixi-effects: ${who}: style.${k} ${JSON.stringify(raw)} is not a usable number here (a name that is not declared counts as 0; spans measure the text when the layer is built); ${k === 'fontSize' ? `the default, ${TEXT_STYLE_DEFAULTS.fontSize}, is used` : 'it is left out'}`);\n continue;\n }\n out[k] = v;\n }\n return out;\n}\n\n/** Keys a text layer has and a group does not (the pieces carry the style; the string is the spans). */\nconst TEXT_ONLY = ['type', 'spans', 'text', 'style', 'format', 'colorSpace', 'fillGradient', 'initial', 'keyframes', 'resolution'];\n/** Properties of one text that cannot be one number for a group of pieces. */\nconst NOT_FOR_A_GROUP = ['fill', 'text', 'value', 'fillGradient'];\n\n/**\n * The composition that a text layer with `spans` stands for. Its size is the measured block; the layer's `name`, time, `initial`, `keyframes` and\n * picture keys move to it; `anchorX` / `anchorY` become its pivot. Pieces are named `<name>.0`, `<name>.1` … and a typewriter (`visibleChars`) is\n * remembered in `spansMeta` for the sequence that counts over the pieces.\n */\nexport function expandSpans(spec: TextSequenceSpec, warn: Warn = defaultWarn, scope?: Record<string, number>): SequenceSpec {\n const who = describeLayer(spec as SequenceSpec);\n const s = spec as unknown as Record<string, unknown> & TextSequenceSpec;\n if (s.text !== undefined) warn(`pixi-effects: ${who}: \"text\" is ignored when the layer has spans: write the text as spans`);\n const style = resolveSpansStyle((s.style ?? {}) as Record<string, unknown>, scope, who, warn);\n // pieces are single lines placed by the author's `\\n`: wrapping and extra leading would make a piece taller than the line it is placed on\n const noLayout = ['wordWrap', 'wordWrapWidth', 'leading'].filter(k => style[k] !== undefined && style[k] !== false && style[k] !== 0);\n for (const k of ['wordWrap', 'wordWrapWidth', 'leading']) delete style[k];\n if (noLayout.length) warn(`pixi-effects: ${who}: style.${noLayout.join(', style.')} ${noLayout.length > 1 ? 'do' : 'does'} not apply to a spans layer (the lines are the \\\\n of the spans); break the lines with \\\\n. ${noLayout.length > 1 ? 'They are' : 'It is'} ignored`);\n const layout = layoutSpans(s.spans, style, style.align as 'left' | 'center' | 'right', who, warn);\n\n const dropped = new Set<string>(['fillGradient', 'format', 'colorSpace'].filter(k => s[k] !== undefined));\n const clean = (bag: Record<string, unknown> | undefined): Record<string, unknown> | undefined => {\n if (!bag) return bag;\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(bag)) { if (NOT_FOR_A_GROUP.includes(k)) dropped.add(k); else out[k] = v; }\n return out;\n };\n const initial = clean(s.initial as Record<string, unknown> | undefined) ?? {};\n const keyframes = (s.keyframes ?? []).map(kf => ({ ...kf, set: clean(kf.set as never), to: clean(kf.to as never), from: clean(kf.from as never) }));\n if (dropped.size) warn(`pixi-effects: ${who}: ${[...dropped].join(', ')} do not apply to a spans layer (it is a group of text layers): use a separate text layer, or put the colour in a span`);\n\n const typed = initial.visibleChars !== undefined || keyframes.some(kf => [kf.set, kf.to, kf.from].some(p => p && (p as Record<string, unknown>).visibleChars !== undefined));\n const width = Math.max(1, layout.width), height = Math.max(1, layout.height);\n // anchorX / anchorY become the group's pivot, in pixels of the measured block: they must be numbers, and cannot be animated\n for (const [a, pivot, size] of [['anchorX', 'pivotX', width], ['anchorY', 'pivotY', height]] as const) {\n if (initial[a] === undefined) continue;\n if (typeof initial[a] === 'number') { initial[pivot] = (initial[a] as number) * size; delete initial[a]; }\n else { warn(`pixi-effects: ${who}: initial.${a} ${JSON.stringify(initial[a])} must be a number on a spans layer (it becomes the pivot of the block); it is ignored`); delete initial[a]; }\n }\n const animatedAnchors = ['anchorX', 'anchorY'].filter(a => keyframes.some(kf => [kf.set, kf.to, kf.from].some(p => p && (p as Record<string, unknown>)[a] !== undefined)));\n if (animatedAnchors.length) warn(`pixi-effects: ${who}: ${animatedAnchors.join(', ')} cannot be keyframed on a spans layer (the anchor is the pivot of the block, set once in initial); the keyframes do nothing`);\n\n const baseName = typeof s.name === 'string' && s.name ? s.name : 'spans';\n const drawn = layout.pieces.filter(p => !p.blank);\n const sequences = drawn.map((p, i) => ({\n type: 'text' as const, name: `${baseName}.${i}`, text: p.text,\n style: { ...style, ...p.style },\n initial: { x: p.x, y: p.y, ...(typed ? { visibleChars: p.length } : {}) },\n ...(s.resolution !== undefined ? { resolution: s.resolution } : {}), // the pieces are what is drawn\n }));\n const rest: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(s)) if (!TEXT_ONLY.includes(k)) rest[k] = v;\n const group = { type: 'composition', ...rest, width, height, initial, keyframes, sequences } as unknown as SequenceSpec;\n spansMeta.set(group, { typed, pieces: drawn.map(p => ({ start: p.start, length: p.length })), preview: layout.pieces.map((p, i) => (i > 0 && p.line !== layout.pieces[i - 1]!.line ? ' ' : '') + p.text).join('') });\n return group;\n}\n","import { Sprite, Assets, type Texture } from 'pixi.js';\nimport { kfDuration } from '../core/spring';\nimport { Sequence } from './Base';\nimport { applyKeyframes, applyInitial, resolveAt, loopVars } from '../core/Timeline';\nimport { revertibleSet } from '../core/revertibleSet';\nimport { tweenColor } from '../expr/colorTween';\nimport type { ColorInput, ColorSpace } from '../expr/colorInterp';\nimport type { ImageSequenceSpec, Keyframe, Props } from '../types';\nimport type { Timeline } from '../core/timelineEngine';\nimport { describeLayer } from '../core/lint';\n\n\n\n/** The scale mode each texture source had before any layer changed it. */\nconst ORIGINAL_SCALE_MODE = new WeakMap<object, string | undefined>();\n\nexport class ImageSequence extends Sequence {\n declare spec: ImageSequenceSpec;\n\n async build(): Promise<void> {\n const texture = await Assets.get<Texture>(this.spec.asset);\n // The filter belongs to the asset's texture (shared by every layer that shows it, and by a later build of the same page), so the asset's own mode is remembered the\n // first time and put back when a layer does not ask: the same spec draws the same picture whatever was built before it.\n const source = (texture as unknown as { source: { scaleMode?: string } }).source;\n if (source && !ORIGINAL_SCALE_MODE.has(source)) ORIGINAL_SCALE_MODE.set(source, source.scaleMode);\n const mode = this.spec.scaleMode as unknown;\n if (mode !== undefined && mode !== 'nearest' && mode !== 'linear') console.warn(`pixi-effects: ${describeLayer(this.spec)}: scaleMode \"${String(mode)}\" is not \"nearest\" or \"linear\": ignored`);\n if (source) source.scaleMode = (mode === 'nearest' || mode === 'linear' ? mode : ORIGINAL_SCALE_MODE.get(source)) as string;\n const sprite = new Sprite({ texture, label: this.spec.name });\n sprite.cullable = true;\n this.target = sprite;\n this.intrinsicWidth = texture.width;\n this.intrinsicHeight = texture.height;\n if (this.duration === undefined) {\n this.duration = this.parent?.duration ?? this.root.duration;\n }\n this.buildFilters();\n }\n\n override bindTimeline(timeline: Timeline, offset = 0): void {\n if (!this.target) return;\n const colorSpace = this.spec.colorSpace;\n if (!colorSpace || colorSpace === 'rgb') {\n // Default path — tint goes through PixiPlugin's native colour\n // interpolation along with everything else.\n super.bindTimeline(timeline, offset);\n return;\n }\n\n // Custom colour-space path: strip `tint` from the standard pipeline\n // and route it through tweenColor() so the interpolator runs in OKLab\n // / OKLCH instead of linear sRGB.\n const scope = this.scope();\n const startTime = offset + this.at; // keyframe `at` is sequence-local\n const initial = stripKeys(this.spec.initial, ['tint']);\n const keyframes = this.spec.keyframes\n ? this.spec.keyframes.map(kf => stripKeysInKeyframe(kf, ['tint']))\n : undefined;\n applyInitial(this.target, initial as Record<string, unknown> | undefined, scope as unknown as Record<string, number>);\n applyKeyframes(timeline, this.target, keyframes, this.duration!, scope as unknown as Record<string, number>, [], startTime);\n\n // Seed tint from initial.\n const initTint = (this.spec.initial as Record<string, unknown> | undefined)?.tint as ColorInput | undefined;\n if (initTint !== undefined) (this.target as unknown as { tint: ColorInput }).tint = initTint;\n\n // Walk keyframes and emit a perceptual colour tween for any `tint` key.\n for (const kf of this.spec.keyframes ?? []) {\n const at = startTime + resolveAt(kf.at, this.duration!);\n const duration = kfDuration(kf);\n const ease = kf.ease ?? 'none';\n const fromTint = (kf.from as Record<string, unknown> | undefined)?.tint as ColorInput | undefined;\n const toTint = (kf.to as Record<string, unknown> | undefined)?.tint as ColorInput | undefined;\n const setTint = (kf.set as Record<string, unknown> | undefined)?.tint as ColorInput | undefined;\n if (setTint !== undefined) {\n const sprite = this.target as unknown as { tint: ColorInput };\n revertibleSet(timeline, at, () => sprite.tint, c => { sprite.tint = c; }, setTint, [sprite, 'tint']);\n }\n if (toTint !== undefined) {\n tweenColor(\n timeline,\n this.target as unknown as Record<string, unknown>,\n 'tint',\n fromTint,\n toTint,\n duration, ease, at, colorSpace, undefined, loopVars(kf),\n );\n }\n }\n\n this.absoluteStart = startTime;\n const endTime = startTime + this.duration!;\n if (this.keepHidden) return; // a sprite mask: PIXI keeps it hidden (see Sequence.keepHidden)\n this.target.renderable = startTime <= 0;\n timeline.set(this.target, { renderable: true }, startTime);\n timeline.set(this.target, { renderable: false }, endTime);\n }\n}\n\nfunction stripKeys(props: Props | undefined, keys: string[]): Props | undefined {\n if (!props) return props;\n const drop = new Set(keys);\n const out: Record<string, unknown> = {};\n let changed = false;\n for (const k of Object.keys(props)) {\n if (drop.has(k)) { changed = true; continue; }\n out[k] = (props as Record<string, unknown>)[k];\n }\n return changed ? (out as unknown as Props) : props;\n}\n\nfunction stripKeysInKeyframe(kf: Keyframe, keys: string[]): Keyframe {\n return {\n ...kf,\n set: stripKeys(kf.set, keys),\n to: stripKeys(kf.to, keys),\n from: stripKeys(kf.from, keys),\n };\n}\n","import { Assets } from 'pixi.js';\nimport { Sequence } from './Base';\nimport { normalizeKeyframe } from '../core/Timeline';\nimport { describeLayer } from '../core/lint';\nimport { remapOf, clockTable, type TimeRemap } from '../core/remap';\nimport type { AudioSequenceSpec, AudioAssetSpec, AudioSfxSpec, AudioMusicSpec, AudioDescriptor } from '../types';\nimport type { AudioAssetData } from '../core/AssetLoader';\n\nexport class AudioSequence extends Sequence {\n declare spec: AudioSequenceSpec;\n private _audioBuffer: AudioBuffer | null = null;\n private _synth: AudioDescriptor['synth'] | null = null;\n private _music: AudioDescriptor['music'] | null = null;\n private _source = '';\n private _remap: TimeRemap | null = null;\n\n async build(): Promise<void> {\n this.target = null;\n if ((this.spec as AudioMusicSpec).music !== undefined) return this._buildMusic(this.spec as AudioMusicSpec);\n if ((this.spec as AudioSfxSpec).sfx !== undefined) return this._buildSfx(this.spec as AudioSfxSpec);\n const spec = this.spec as AudioAssetSpec;\n this._source = `asset \"${spec.asset}\"`;\n const data = await Assets.get<AudioAssetData>(spec.asset);\n this._audioBuffer = data.audioBuffer;\n this._remap = remapOf(spec as never, 'time', data.duration ?? null);\n // At a constant speed the file lasts its length divided by |speed|; with `time` keyframes it is the keyframes' business.\n const constant = this._remap && this._remap.timeKfs.length === 0 ? Math.abs(this._remap.speed ?? 1) : 1;\n if (this.duration === undefined) {\n // One-shot: exactly as long as the clip. Looping: until the composition ends (a loop that stopped\n // after one clip length would not be a loop).\n const rest = Math.max(0, (this.parent?.duration ?? this.root.duration) - this.at);\n this.duration = spec.duration ?? (spec.loop ? rest : data.duration !== undefined ? data.duration / constant : undefined) ?? this.root.duration;\n }\n // Without `loop` the sound simply stops when the file ends — silently.\n const playable = this._remap && this._remap.timeKfs.length > 0 ? Infinity : (data.duration ?? Infinity) / constant;\n if (!spec.loop && Number.isFinite(playable) && this.duration > playable + 0.05) {\n console.warn(\n `pixi-effects: ${describeLayer(spec)}: audio asset \"${spec.asset}\" plays for ${playable.toFixed(1)}s (${data.duration!.toFixed(1)}s at speed ${constant}) but the layer lasts ` +\n `${this.duration.toFixed(1)}s, so it goes silent after ${playable.toFixed(1)}s. Add loop: true, or shorten the layer's duration.`,\n );\n }\n }\n\n private async _buildSfx(spec: AudioSfxSpec): Promise<void> {\n const who = describeLayer(spec);\n const raw = spec as unknown as Record<string, unknown>;\n if (raw.asset !== undefined) console.warn(`pixi-effects: ${who}: has both asset and sfx — the sfx plays; remove one`);\n if (raw.loop) console.warn(`pixi-effects: ${who}: loop has no effect on an sfx — to repeat it, add one audio layer per hit (a JS loop)`);\n // The synthesiser is its own chunk: movies without sfx never load it.\n const { resolveSfx, renderSfx, sfxKey } = await import('../audio/sfx');\n const sfx = resolveSfx(spec.sfx, spec.duration, who);\n if (!sfx) return; // warned; the layer stays silent\n this.duration = sfx.length;\n this._source = `sfx \"${sfx.preset ?? 'custom'}\"`;\n this._synth = { key: sfxKey(sfx), render: sr => renderSfx(sfx, sr) };\n // lintTiming measured keyframes against the parent's length; an sfx is usually much shorter.\n (spec.keyframes ?? []).forEach((kf, i) => {\n if ((kf.at ?? 0) >= sfx.length) {\n console.warn(`pixi-effects: ${who}: keyframes[${i}] starts at ${kf.at}s, after the sound ends (${sfx.length}s), so it never plays`);\n } else if ((kf.at ?? 0) < 0 && sfx.length + (kf.at ?? 0) < 0) {\n console.warn(`pixi-effects: ${who}: keyframes[${i}] starts ${-(kf.at as number)}s before the END of a ${sfx.length}s sound, which is before the sound begins (a negative \\`at\\` counts back from the end of the layer). Use a shorter \\`at\\`, or stretch the sound with \\`duration\\`.`);\n }\n });\n }\n\n private async _buildMusic(spec: AudioMusicSpec): Promise<void> {\n const who = describeLayer(spec);\n const raw = spec as unknown as Record<string, unknown>;\n if (raw.asset !== undefined) console.warn(`pixi-effects: ${who}: has both asset and music — the music plays; remove one`);\n if (raw.sfx !== undefined) console.warn(`pixi-effects: ${who}: has both sfx and music — the music plays; remove one`);\n // The music synthesiser is its own chunk: movies without music never load it.\n const { resolveMusic, renderMusic, renderMusicAsync, musicLength, musicKey, summarizeMusic } = await import('../audio/music');\n const music = resolveMusic(spec.music, who);\n if (!music) return; // warned; the layer stays silent\n const natural = musicLength(music);\n const rest = Math.max(0, (this.parent?.duration ?? this.root.duration) - this.at);\n let length = natural;\n if (spec.duration !== undefined) {\n if (typeof spec.duration === 'number' && Number.isFinite(spec.duration) && spec.duration > 0) length = spec.duration;\n else console.warn(`pixi-effects: ${who}: duration must be a positive number of seconds (got ${JSON.stringify(spec.duration)}); using the music's own length, ${natural.toFixed(1)}s`);\n } else if (spec.loop) length = rest || natural;\n else if (rest > 0) length = Math.min(natural, rest); // music that outlasts the movie ends with it (with a short fade), not with a warning\n if (!spec.loop && spec.duration !== undefined && length > natural + 0.05) {\n console.warn(`pixi-effects: ${who}: the music is ${natural.toFixed(1)}s (with its tail) but the layer lasts ${length.toFixed(1)}s, so it goes silent after ${natural.toFixed(1)}s. Add loop: true, or shorten the layer's duration.`);\n }\n this.duration = length;\n const loop = !!spec.loop;\n this._source = 'music';\n this._music = summarizeMusic(music);\n this._synth = { key: musicKey(music, length, loop), render: sr => renderMusic(music, sr, length, loop), renderAsync: (sr, pace) => renderMusicAsync(music, sr, length, loop, pace) };\n }\n\n override bindTimeline(_timeline: unknown): void {\n // Audio has no visual; everything happens at mixdown time via collectAudio.\n }\n\n override collectAudio(out: AudioDescriptor[], baseTime: number): void {\n if (!this._audioBuffer && !this._synth) return;\n // `volume` at the top level, or `initial: { volume }` like every other layer's starting values (the top level wins)\n const initialVolume = this.spec.volume ?? (this.spec.initial as { volume?: number } | undefined)?.volume ?? 1;\n const t0 = baseTime + this.at;\n const dur = this.duration!;\n const sourceMap = this._remap\n ? clockTable(this._remap, 'time', dur, t0, this.scope() as unknown as Record<string, number>, t0 + dur).at\n : undefined;\n out.push({\n ...(sourceMap ? { sourceMap } : {}),\n ...(this._audioBuffer ? { buffer: this._audioBuffer } : { synth: this._synth! }),\n layer: describeLayer(this.spec),\n source: this._source,\n ...(this._music ? { music: this._music } : {}),\n loop: !this._synth && !!(this.spec as AudioAssetSpec).loop,\n start: t0,\n end: t0 + dur,\n initialVolume,\n volumeKeyframes: this._volumePoints(t0, dur, initialVolume),\n });\n }\n\n private _volumePoints(t0: number, dur: number, initialVolume: number): { time: number; value: number }[] {\n const volumeKeyframes: { time: number; value: number }[] = [];\n // The mixer ramps linearly from the PREVIOUS event to each point. So, like every other keyframe, a\n // volume change must (1) hold the value it has until its own start (a point at `start` with the\n // current value) and (2) jump with two points at the same time. Keyframes are applied in time order.\n const keyframes = (this.spec.keyframes ?? [])\n .map(raw => normalizeKeyframe(raw, dur))\n .filter(kf => [kf.set, kf.to, kf.from].some(p => p && 'volume' in p))\n .sort((x, y) => x.at - y.at);\n let current = initialVolume;\n const point = (time: number, value: number): void => { volumeKeyframes.push({ time, value }); };\n for (const kf of keyframes) {\n const start = t0 + kf.at;\n const end = start + kf.duration;\n const set = (kf.set as Record<string, number> | undefined)?.volume;\n const to = (kf.to as Record<string, number> | undefined)?.volume;\n const from = (kf.from as Record<string, number> | undefined)?.volume;\n point(start, current); // hold until the keyframe starts\n if (kf.kind === 'set' && set !== undefined) {\n point(start, set);\n current = set;\n } else if (kf.kind === 'to' && to !== undefined) {\n point(end, to);\n current = to;\n } else if (kf.kind === 'fromTo' && to !== undefined) {\n point(start, from ?? current);\n point(end, to);\n current = to;\n } else if (kf.kind === 'from' && from !== undefined) {\n point(start, from);\n point(end, current); // back to the value it had\n }\n }\n return volumeKeyframes;\n }\n\n override destroy(): void {\n this._audioBuffer = null;\n this._synth = null;\n }\n}\n","/** What a decoded sample offers (the subset of mediabunny's VideoSample this reads). */\nexport interface SampleLike {\n timestamp: number;\n toVideoFrame: () => VideoFrame;\n close?: () => void;\n}\n\n/**\n * Subset of the mediabunny VideoSampleSink API we depend on. Exposed as an\n * interface so tests can provide a mock sink.\n */\nexport interface FrameSink {\n /** The frame that covers `time` (the last one that starts at or before it); null before the first. A seek and a fresh decode each call: about 20 ms. */\n getSample(time: number): Promise<SampleLike | null>;\n /** The frames in order, from the one that covers `start`. One decoder pass: under 1 ms a frame (measured 20-40 times faster than getSample per frame). */\n samples?(start?: number): AsyncGenerator<SampleLike, void, unknown>;\n}\n\nexport interface FrameCacheOptions {\n /** The most frames held (default 30); a big frame lowers it so that one video holds about 96 MB of decoded frames, never fewer than 3. */\n capacity?: number;\n /** The length of the file in seconds: with `loop`, the start of the file is read before the end comes, so the wrap does not pause. */\n duration?: number;\n loop?: boolean;\n}\n\nconst BUDGET_BYTES = 96 * 1024 * 1024;\nconst MIN_HELD = 3;\nconst JUMP_SECONDS = 1; // a request further ahead than this restarts the pass (a seek and a GOP) instead of decoding everything in between\nconst EPS = 1e-6;\nconst LOW_BEHIND = 14;\nconst MIN_HELD_TO_READ_BACK = 20; // with fewer frames held (big pictures) there is no room to read a window before it is needed: it would push out what is about to be asked\nconst MIN_HELD_TO_READ_START = 9; // reverse play reads the next window when fewer frames than this are held behind the playhead\n\n/** A decoded frame: it starts at `ts` and runs to `end` (null: not known yet; then it answers only the exact time it was asked for, `req`). */\ninterface Held { ts: number; end: number | null; frame: VideoFrame; req?: number; pinned?: boolean }\n\nfunction reportDecodeError(err: unknown, time: number): void {\n // WebCodecs decoders occasionally surface EncodingError / NotSupportedError on certain seeks (rapid scrubbing, malformed packets at chapter\n // joins, EOF probes). These are known-transient and the next request usually succeeds, so log them at `debug` (hidden in default consoles)\n // instead of `warn`. Anything else still warns loudly.\n const isTransient = err instanceof DOMException && (err.name === 'EncodingError' || err.name === 'NotSupportedError');\n if (isTransient) console.debug('pixi-effects: transient video decode failure at', time, 's —', err.name);\n else console.warn('pixi-effects: video frame decode failed at', time, 's —', err);\n}\n\nexport class FrameCache {\n sink: FrameSink;\n capacity: number;\n cache: Map<number, VideoFrame> = new Map();\n private _pending: Map<number, Promise<VideoFrame | null>> = new Map();\n\n // Sequential mode (the sink has `samples()`): one decoder pass that runs forward as the movie asks for frame after frame.\n private _frames: Held[] = [];\n private _cur: Held | null = null;\n private _iter: AsyncGenerator<SampleLike, void, unknown> | null = null;\n private _next: SampleLike | null = null;\n private _held = 0;\n private _lock: Promise<unknown> = Promise.resolve();\n private _lastTime: number | null = null;\n private _dir: -1 | 0 | 1 = 0;\n private _gen = 0;\n private _backBusy = false;\n private _backGen = 0;\n private _standbyBusy = false;\n /** A second pass at the start of the file, ready for the moment a looping video comes round. */\n private _standby: { iter: AsyncGenerator<SampleLike, void, unknown>; cur: Held; next: SampleLike | null } | null = null;\n private readonly _duration: number | null;\n private readonly _loop: boolean;\n /** How often it had to wait for a decoder (`restarts`, `singles`) and how many reads ahead it made: for tests and for `check`. */\n readonly stats = { restarts: 0, singles: 0, prefetches: 0 };\n\n constructor(sink: FrameSink, options: FrameCacheOptions = {}) {\n this.sink = sink;\n this.capacity = options.capacity ?? 30;\n this._duration = options.duration ?? null;\n this._loop = !!options.loop;\n }\n\n /** How many decoded frames are held right now (the sequential reader's own list, plus the exact-time cache of the old path). */\n get heldFrames(): number { return this._frames.length + this.cache.size; }\n\n private _key(time: number): number {\n return Math.round(time * 1e6); // a microsecond: two different times must not share a frame (the answer would depend on which was asked first)\n }\n\n async getFrameAt(time: number): Promise<VideoFrame | null> {\n if (this.sink.samples) return this._enqueue(() => this._sequentialAt(time));\n const key = this._key(time);\n\n if (this.cache.has(key)) {\n const v = this.cache.get(key)!;\n this.cache.delete(key);\n this.cache.set(key, v);\n return v;\n }\n\n const pending = this._pending.get(key);\n if (pending) return pending;\n\n const promise = this._fetch(time);\n this._pending.set(key, promise);\n try {\n const frame = await promise;\n if (frame) {\n if (this.cache.has(key)) {\n frame.close?.();\n const existing = this.cache.get(key)!;\n this.cache.delete(key);\n this.cache.set(key, existing);\n return existing;\n }\n this.cache.set(key, frame);\n this._evictIfNeeded();\n }\n return frame;\n } finally {\n this._pending.delete(key);\n }\n }\n\n private async _fetch(time: number): Promise<VideoFrame | null> {\n // WebCodecs decoders occasionally surface EncodingError / NotSupportedError\n // on certain seeks (rapid scrubbing, malformed packets at chapter joins,\n // EOF probes). These are known-transient and the next request usually\n // succeeds, so log them at `debug` (hidden in default consoles) instead of\n // `warn`. Anything else still warns loudly.\n try {\n const sample = await this.sink.getSample(time);\n if (!sample) return null;\n const frame = sample.toVideoFrame();\n sample.close?.();\n return frame;\n } catch (err) {\n reportDecodeError(err, time);\n return null;\n }\n }\n\n // ── sequential mode ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n\n /** Requests are answered one at a time, in the order they arrive: one pass cannot serve two places at once. */\n private _enqueue<T>(fn: () => Promise<T>): Promise<T> {\n const run = this._lock.then(fn, fn);\n this._lock = run.then(() => undefined, () => undefined);\n return run;\n }\n\n private _covering(time: number): Held | null {\n for (const e of this._frames) {\n if (e.end === null ? (e.req !== undefined && Math.abs(e.req - time) < EPS) : (e.ts <= time + EPS && time < e.end - EPS)) {\n this._frames.splice(this._frames.indexOf(e), 1); // most recently used last\n this._frames.push(e);\n return e;\n }\n }\n return null;\n }\n\n private async _sequentialAt(time: number): Promise<VideoFrame | null> {\n const last = this._lastTime;\n this._lastTime = time;\n if (last !== null && Math.abs(time - last) <= JUMP_SECONDS) this._dir = time > last + EPS ? 1 : time < last - EPS ? -1 : this._dir;\n let frame: VideoFrame | null;\n try {\n frame = await this._serve(time, last);\n } catch (err) {\n reportDecodeError(err, time);\n await this._closeIter();\n return null;\n }\n this._maybeReadAhead(time);\n return frame;\n }\n\n private async _serve(time: number, last: number | null): Promise<VideoFrame | null> {\n const hit = this._covering(time);\n if (hit) return hit.frame;\n // The start of a looping file was read ahead and the loop has come round: carry on from there.\n const sb = this._standby;\n if (sb && time >= sb.cur.ts - EPS && time - sb.cur.ts <= JUMP_SECONDS && (!this._iter || !this._cur || this._cur.ts > time + JUMP_SECONDS)) return await this._adoptStandby(time);\n // A request far from the last one (a seek, a jump) is answered by one getSample: starting a pass for it would decode ahead for nothing.\n // A pass starts when the requests are next to each other, which is how playback and a drag ask.\n if (last === null || Math.abs(time - last) > JUMP_SECONDS) return await this._single(time);\n const cur = this._cur;\n if (this._iter && cur && time >= cur.ts && time - cur.ts <= JUMP_SECONDS) return await this._advance(time);\n const backwards = !!cur && time < cur.ts;\n return await this._restart(time, backwards ? Math.max(0, time - Math.max(1, this._held - 1) / 30) : time); // going back: decode a window behind that just fits what is held, so the next steps are answered from it\n }\n\n // ── reading ahead ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n\n private _maybeReadAhead(time: number): void {\n if (this._held === 0) return;\n if (this._dir === -1) {\n this._dropStandby();\n let behind = 0, passed = 0, earliest = Infinity;\n for (const e of this._frames) { if (e.ts < time - EPS) behind++; else if (e.ts > time + EPS) passed++; if (e.ts < earliest) earliest = e.ts; }\n if (this._held >= MIN_HELD_TO_READ_BACK && behind < LOW_BEHIND && passed >= 3 && earliest > EPS && !this._backBusy) void this._readBack(earliest, passed);\n } else if (this._held >= MIN_HELD_TO_READ_START && this._dir === 1 && this._loop && this._duration !== null && time >= this._duration - JUMP_SECONDS && !this._standby && !this._standbyBusy) {\n void this._readStart();\n }\n }\n\n /** In the background: the window of frames before the earliest one held (reverse play comes to it next). */\n private async _readBack(earliest: number, room: number): Promise<void> {\n this._backBusy = true;\n this.stats.prefetches++;\n const gen = this._gen, bg = this._backGen;\n const want = Math.max(3, Math.min(Math.floor(this._held * 0.6), room)); // no more than the frames already passed give room for\n let iter: AsyncGenerator<SampleLike, void, unknown> | null = null;\n const got: SampleLike[] = [];\n try {\n iter = this.sink.samples!(Math.max(0, earliest - want / 30));\n for (;;) {\n const r = await iter.next();\n if (r.done) break;\n if (gen !== this._gen || r.value.timestamp >= earliest - EPS) { r.value.close?.(); break; }\n got.push(r.value);\n if (bg !== this._backGen) break; // a window was read in the foreground meanwhile: it covers the same frames\n }\n if (gen === this._gen && bg === this._backGen) {\n for (let k = 0; k < got.length; k++) {\n const s = got[k]!;\n const frame = s.toVideoFrame();\n this._keep({ ts: s.timestamp, end: got[k + 1]?.timestamp ?? earliest, frame }, frame);\n }\n }\n } catch (err) {\n reportDecodeError(err, earliest);\n } finally {\n for (const s of got) s.close?.();\n this._backBusy = false;\n try { await iter?.return?.(undefined); } catch { /* already done */ }\n }\n }\n\n /** In the background: the first frames of the file and a pass that stands behind them; held (pinned) until the loop comes round. */\n private async _readStart(): Promise<void> {\n this._standbyBusy = true;\n this.stats.prefetches++;\n const gen = this._gen;\n const want = Math.max(3, Math.min(10, Math.floor(this._held / 3)));\n let iter: AsyncGenerator<SampleLike, void, unknown> | null = null;\n const got: SampleLike[] = [];\n let keep = false;\n try {\n iter = this.sink.samples!(0);\n for (; got.length < want + 1;) {\n const r = await iter.next();\n if (r.done) break;\n if (gen !== this._gen) { r.value.close?.(); break; }\n got.push(r.value);\n }\n if (gen === this._gen && got.length >= 2) {\n const next = got.pop()!;\n let cur: Held | null = null;\n got.forEach((s, k) => {\n const frame = s.toVideoFrame();\n s.close?.();\n const entry: Held = { ts: s.timestamp, end: (got[k + 1] ?? next).timestamp, frame, pinned: true };\n this._keep(entry, frame);\n cur = entry;\n });\n got.length = 0;\n if (cur) { this._standby = { iter, cur, next }; keep = true; }\n }\n } catch (err) {\n reportDecodeError(err, 0);\n } finally {\n for (const s of got) s.close?.();\n this._standbyBusy = false;\n if (!keep) { try { await iter?.return?.(undefined); } catch { /* already done */ } }\n }\n }\n\n private async _adoptStandby(time: number): Promise<VideoFrame | null> {\n const sb = this._standby!;\n this._standby = null;\n await this._closeIter();\n for (const e of this._frames) e.pinned = false;\n this._iter = sb.iter;\n this._next = sb.next;\n this._cur = sb.cur;\n return this._advance(time);\n }\n\n private _dropStandby(): void {\n const sb = this._standby;\n if (!sb) return;\n this._standby = null;\n sb.next?.close?.();\n for (const e of this._frames.filter(x => x.pinned)) { e.pinned = false; }\n void sb.iter.return?.(undefined);\n }\n\n /** One frame by itself (a seek): getSample, kept so that asking again for the same time costs nothing. The running pass, if any, is closed: it no longer follows the playhead. */\n private async _single(time: number): Promise<VideoFrame | null> {\n this.stats.singles++;\n await this._closeIter();\n this._cur = null;\n const sample = await this.sink.getSample(time);\n if (!sample) return null;\n const frame = sample.toVideoFrame();\n sample.close?.();\n this._keep({ ts: sample.timestamp, end: null, frame, req: time }, frame);\n return frame;\n }\n\n /** Start a pass at `time` (a seek and the frames of one group of pictures), keeping what is still held for a step back. */\n private async _restart(time: number, from = time): Promise<VideoFrame | null> {\n this.stats.restarts++;\n this._backGen++;\n await this._closeIter();\n this._cur = null;\n const iter = this.sink.samples!(from);\n this._iter = iter;\n const first = await iter.next();\n if (first.done) { await this._closeIter(); return null; }\n if (first.value.timestamp > time + EPS) { first.value.close?.(); await this._closeIter(); return null; } // before the first frame, like getSample\n this._take(first.value);\n return this._advance(time);\n }\n\n /** Run the pass forward until the frame that covers `time` is the current one; the next frame is read ahead (its start is where this one ends). */\n private async _advance(time: number): Promise<VideoFrame | null> {\n const cur = () => this._cur!;\n for (;;) {\n if (!this._next) {\n let r: IteratorResult<SampleLike, void>;\n try { r = await this._iter!.next(); }\n catch (err) {\n // the read-ahead failed: the frame we stand on may still be the right answer (the next one would only have ended it), else there is none\n reportDecodeError(err, time);\n await this._closeIter();\n const prev = this._frames.length > 1 ? this._frames[this._frames.length - 2]! : null;\n const spacing = prev ? cur().ts - prev.ts : 1 / 24;\n return time < cur().ts + spacing - EPS ? cur().frame : null;\n }\n if (r.done) { cur().end = Infinity; this._iter = null; break; }\n this._next = r.value;\n }\n cur().end = this._next.timestamp;\n if (this._next.timestamp <= time + EPS) { const s = this._next; this._next = null; this._take(s); } else break;\n }\n return cur().frame;\n }\n\n private _take(sample: SampleLike): void {\n const frame = sample.toVideoFrame();\n sample.close?.();\n const entry: Held = { ts: sample.timestamp, end: null, frame };\n this._keep(entry, frame);\n this._cur = entry;\n }\n\n /** Hold a frame (the first one sets how many fit: a byte budget, not a count) and close the oldest beyond that; the frame the pass stands on is never closed. */\n private _keep(entry: Held, frame: VideoFrame): void {\n if (this._held === 0) {\n const bytes = (frame as unknown as { allocationSize?: () => number }).allocationSize?.() ?? (frame.displayWidth * frame.displayHeight * 1.5);\n this._held = Math.max(MIN_HELD, Math.min(this.capacity, Math.floor(BUDGET_BYTES / Math.max(1, bytes))));\n }\n this._frames.push(entry);\n while (this._frames.length > this._held) {\n const victim = this._victim(entry);\n if (!victim) break;\n this._frames.splice(this._frames.indexOf(victim), 1);\n victim.frame.close?.();\n }\n }\n\n /**\n * The frame to let go: one the playhead has already passed (going forward those before it, going back those after it), the furthest\n * behind first; when there is none, the one furthest ahead of the playhead (the last to be needed). Least recently used when the\n * direction is not known. Frames of the standby (pinned) and the frame the pass stands on are never chosen.\n */\n private _victim(except: Held): Held | null {\n const cand = this._frames.filter(e => e !== this._cur && e !== except && !e.pinned);\n if (cand.length === 0) return null;\n if (this._dir === 0) return cand[0]!;\n const at = this._lastTime ?? 0;\n const passed = cand.filter(e => (this._dir === 1 ? e.ts < at - EPS : e.ts > at + EPS));\n const farthest = (list: Held[], sign: number) => list.reduce((a, b) => (sign * (b.ts - a.ts) > 0 ? b : a));\n if (passed.length) return farthest(passed, this._dir === 1 ? -1 : 1); // forward: the earliest; back: the latest\n return farthest(cand, this._dir === 1 ? 1 : -1); // none passed: the one furthest ahead\n }\n\n private async _closeIter(): Promise<void> {\n const iter = this._iter;\n this._iter = null;\n this._next?.close?.();\n this._next = null;\n if (iter) { try { await iter.return?.(undefined); } catch { /* already done */ } }\n }\n\n private _evictIfNeeded(): void {\n while (this.cache.size > this.capacity) {\n const oldestKey = this.cache.keys().next().value as number | undefined;\n if (oldestKey === undefined) break;\n const oldestFrame = this.cache.get(oldestKey);\n oldestFrame?.close?.();\n this.cache.delete(oldestKey);\n }\n }\n\n dispose(): void {\n this._gen++;\n this._dropStandby();\n for (const f of this.cache.values()) f?.close?.();\n this.cache.clear();\n this._pending.clear();\n for (const e of this._frames) e.frame.close?.();\n this._frames = [];\n this._cur = null;\n this._next?.close?.();\n this._next = null;\n const iter = this._iter;\n this._iter = null;\n void iter?.return?.(undefined);\n }\n}\n","/**\n * A time that should be a frame boundary (k / 30) can reach the decoder a hair under it, which picks the frame before. This many\n * seconds (a twentieth of a thousandth) is added to every lookup: far below any frame length, far above float noise.\n */\nexport const FRAME_EPS = 5e-5;\n\n/**\n * The time to ask the decoder for, given the playhead value `v` of a video layer (seconds in the file). With `loop` the file repeats\n * (a negative value too); without it the value stays inside the file. `sourceDuration` 0 means the length is unknown.\n */\nexport function sourceLookup(v: number, sourceDuration: number, loop: boolean): number {\n if (!(sourceDuration > 0)) return Math.max(0, v);\n const w = v + FRAME_EPS;\n if (loop) return ((w % sourceDuration) + sourceDuration) % sourceDuration;\n return Math.min(Math.max(w, 0), sourceDuration);\n}\n","import { Sprite, Texture, Assets } from 'pixi.js';\nimport { Sequence } from './Base';\nimport { FrameCache, type FrameSink } from '../core/FrameCache';\nimport { sourceLookup } from '../core/sourceTime';\nimport { describeLayer } from '../core/lint';\nimport { remapOf, bindClock, clockTable, type TimeRemap } from '../core/remap';\nimport type { VideoSequenceSpec, AudioDescriptor } from '../types';\nimport type { VideoAssetData } from '../core/AssetLoader';\nimport type { Timeline } from '../core/timelineEngine';\n\n\n\nexport class VideoSequence extends Sequence {\n declare spec: VideoSequenceSpec;\n private _sourceDuration = 0;\n private _audioBuffer: AudioBuffer | null = null;\n private _cache: FrameCache | null = null;\n private _canvas: HTMLCanvasElement | null = null;\n private _ctx: CanvasRenderingContext2D | null = null;\n private _drawSeq = 0;\n /** The playhead value (seconds in the file) the timeline last wrote: already remapped, and local inside a remapped composition. */\n private _cur = 0;\n private _remap: TimeRemap | null = null;\n /** Movie asks this layer to draw the frame its own timeline is at, not the one for a time it computed. */\n readonly selfTimed = true;\n\n async build(): Promise<void> {\n const data = await Assets.get<VideoAssetData>(this.spec.asset);\n this._sourceDuration = data.duration;\n this._remap = remapOf(this.spec as never, 'currentTime', this._sourceDuration);\n this._audioBuffer = (this.spec.audio !== false) ? data.audioBuffer : null;\n this._cache = new FrameCache(data.sink as unknown as FrameSink, { capacity: 30, duration: data.duration, loop: !!this.spec.loop });\n\n const probeFrame = await this._cache.getFrameAt(0);\n const w = probeFrame?.displayWidth ?? 1920;\n const h = probeFrame?.displayHeight ?? 1080;\n\n const canvas = document.createElement('canvas');\n canvas.width = w;\n canvas.height = h;\n this._canvas = canvas;\n this._ctx = canvas.getContext('2d', { alpha: true });\n if (probeFrame && this._ctx) this._ctx.drawImage(probeFrame, 0, 0);\n\n const texture = Texture.from(canvas);\n const sprite = new Sprite({ texture, label: this.spec.name });\n sprite.cullable = true;\n this.target = sprite;\n this.intrinsicWidth = w;\n this.intrinsicHeight = h;\n\n if (this.duration === undefined) {\n // As long as the file; played at a constant speed it lasts the file's length divided by |speed|.\n const constant = this._remap && this._remap.timeKfs.length === 0 ? Math.abs(this._remap.speed ?? 1) : 1;\n this.duration = this.spec.duration ?? (data.duration ?? this.root.duration * constant) / constant;\n }\n\n let currentTime = 0;\n const seq = this;\n Object.defineProperty(sprite, 'currentTime', {\n get(): number { return currentTime; },\n set(v: number) {\n currentTime = v;\n seq._cur = v;\n const mySeq = ++seq._drawSeq;\n const lookup = sourceLookup(v, seq._sourceDuration, !!seq.spec.loop);\n seq._cache!.getFrameAt(lookup).then(frame => {\n if (mySeq !== seq._drawSeq) return;\n if (!frame || !seq._ctx) return;\n seq._ctx.drawImage(frame, 0, 0);\n texture.source.update();\n }).catch((err) => {\n // FrameCache._fetch already swallows decoder errors; this is defense\n // in depth against any failure inside the .then handler (e.g.\n // drawImage on a frame that became invalid mid-draw).\n console.warn('pixi-effects: video frame draw failed:', err);\n });\n },\n });\n\n this.buildFilters();\n }\n\n protected override displayProps(): { initial: VideoSequenceSpec['initial']; keyframes: VideoSequenceSpec['keyframes'] } {\n const r = this._remap;\n return r ? { initial: r.restInitial as VideoSequenceSpec['initial'], keyframes: r.restKfs } : super.displayProps();\n }\n\n override bindTimeline(timeline: Timeline, offset = 0): void {\n super.bindTimeline(timeline, offset);\n const at = offset + this.at;\n if (this._remap) {\n // The playhead is a clock the `time` keyframes (or `speed`) run, instead of one straight tween.\n bindClock(timeline, this.target!, 'currentTime', this._remap, this.duration!, at, this.scope() as unknown as Record<string, number>);\n return;\n }\n const playDuration = this.spec.loop\n ? this.duration!\n : Math.min(this.duration!, this._sourceDuration);\n timeline.fromTo(\n this.target!,\n { currentTime: 0 },\n { currentTime: playDuration, duration: playDuration, ease: 'none' },\n at, // offset = start of the enclosing composition(s); dropping it misplaced videos inside nested compositions\n );\n }\n\n override collectAudio(out: AudioDescriptor[], baseTime: number): void {\n if (!this._audioBuffer) return;\n const initialVolume = this.spec.volume ?? 1;\n const t0 = baseTime + this.at;\n const sourceMap = this._remap\n ? clockTable(this._remap, 'currentTime', this.duration!, t0, this.scope() as unknown as Record<string, number>, t0 + this.duration!).at\n : undefined;\n out.push({\n ...(sourceMap ? { sourceMap } : {}),\n buffer: this._audioBuffer,\n layer: describeLayer(this.spec),\n source: `video \"${this.spec.asset}\"`,\n loop: !!this.spec.loop,\n start: baseTime + this.at,\n end: baseTime + this.at + this.duration!,\n initialVolume,\n volumeKeyframes: [],\n });\n }\n\n /** Draw the frame the playhead is at NOW (`_cur`). The argument (a time Movie worked out for layers that need it) is not used. */\n async awaitFrameAt(_time?: number): Promise<void> {\n const time = this._cur;\n if (!this.keepHidden && !this.target?.renderable) return; // not on screen (a video used as a mask is kept hidden by Pixi and must still draw)\n const mySeq = ++this._drawSeq;\n const lookup = sourceLookup(time, this._sourceDuration, !!this.spec.loop);\n let frame: VideoFrame | null = null;\n try {\n frame = await this._cache!.getFrameAt(lookup);\n } catch (err) {\n // FrameCache should already handle this, but belt-and-suspenders so a\n // sync render path (Movie.gotoFrame) never rejects mid-pipeline.\n console.warn('pixi-effects: awaitFrameAt failed at', time, 's —', err);\n return;\n }\n if (mySeq !== this._drawSeq) return;\n if (frame && this._ctx) {\n try {\n this._ctx.drawImage(frame, 0, 0);\n (this.target as Sprite).texture.source.update();\n } catch (err) {\n console.warn('pixi-effects: drawImage failed at', time, 's —', err);\n }\n }\n }\n\n override destroy(): void {\n this._cache?.dispose();\n this._cache = null;\n super.destroy();\n }\n}\n","import { FillGradient, Texture } from 'pixi.js';\nimport { gradientOptions, paintRadial, type RadialCtx } from './gradient';\nimport type { GradientSpec } from '../types';\n\nconst RADIAL_SIZE = 256;\n\n/** What to hand to `Graphics.fill(...)` for a `fillGradient`: a FillGradient (linear) or a local-space texture (radial). */\nexport function makeGradientFill(g: GradientSpec): FillGradient | { texture: Texture; textureSpace: 'local' } {\n if (g.type === 'radial') {\n const canvas = document.createElement('canvas');\n canvas.width = RADIAL_SIZE;\n canvas.height = RADIAL_SIZE;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n paintRadial(ctx as unknown as RadialCtx, RADIAL_SIZE, g);\n return { texture: Texture.from(canvas), textureSpace: 'local' };\n }\n }\n return new FillGradient(gradientOptions(g) as never);\n}\n","import { GraphicsPath } from 'pixi.js';\n\n/** One sub-path as flat `[x0, y0, x1, y1, …]`; `closed` adds a segment from the last point back to the first. */\nexport interface Polyline { pts: number[]; closed: boolean }\n\nconst CURVE_STEPS = 24; // samples per quarter turn of a rounded corner\nconst ELLIPSE_STEPS = 128;\n\n/** An SVG `d` as polylines (curves sampled by Pixi's own flattening, so the trim follows what is drawn). */\nexport function flattenSvgPath(d: string): Polyline[] {\n const prims = new GraphicsPath(d).shapePath.shapePrimitives;\n const out: Polyline[] = [];\n for (const { shape } of prims) {\n const poly = shape as { points?: number[]; closePath?: boolean };\n if (poly.points && poly.points.length >= 4) out.push({ pts: poly.points.slice(), closed: poly.closePath === true });\n }\n return out;\n}\n\n/** The outline of a (rounded) rectangle: starts at the top edge's left end (after the corner) and goes clockwise. */\nexport function rectOutline(x: number, y: number, w: number, h: number, radius: number): Polyline {\n const r = Math.max(0, Math.min(radius, Math.abs(w) / 2, Math.abs(h) / 2));\n if (r === 0) return { pts: [x, y, x + w, y, x + w, y + h, x, y + h], closed: true };\n const pts: number[] = [];\n const corner = (cx: number, cy: number, from: number): void => {\n for (let i = 0; i <= CURVE_STEPS; i++) {\n const a = from + (i / CURVE_STEPS) * (Math.PI / 2);\n pts.push(cx + r * Math.cos(a), cy + r * Math.sin(a));\n }\n };\n corner(x + w - r, y + r, -Math.PI / 2); // top-right, from 12 o'clock to 3\n corner(x + w - r, y + h - r, 0); // bottom-right\n corner(x + r, y + h - r, Math.PI / 2); // bottom-left\n corner(x + r, y + r, Math.PI); // top-left, ends at the top edge's left end\n // the walk began at the top edge's right end; start it at the left end instead (the last point), same direction\n const startAt = pts.length - 2; // the top-left corner's last point = (x + r, y)\n const rotated = pts.slice(startAt).concat(pts.slice(0, startAt));\n return { pts: rotated, closed: true };\n}\n\n/** The outline of an ellipse: starts at 12 o'clock and goes clockwise. */\nexport function ellipseOutline(cx: number, cy: number, rx: number, ry: number): Polyline {\n const pts: number[] = [];\n for (let i = 0; i < ELLIPSE_STEPS; i++) {\n const a = -Math.PI / 2 + (i / ELLIPSE_STEPS) * Math.PI * 2;\n pts.push(cx + rx * Math.cos(a), cy + ry * Math.sin(a));\n }\n return { pts, closed: true };\n}\n\n/**\n * The part of the outline between `start` and `end` (fractions 0–1 of the TOTAL length of all the sub-paths, in order; with `each`, of\n * every sub-path's own length, so they all draw on at the same time).\n * Returns open polylines, except a closed sub-path that is kept whole, which stays closed (so its join is drawn).\n */\nexport function trimPolylines(lines: Polyline[], start: number, end: number, each = false): Polyline[] {\n const s = Math.max(0, Math.min(1, start)), e = Math.max(0, Math.min(1, end));\n if (!(e > s)) return [];\n if (each) {\n const out: Polyline[] = [];\n for (const line of lines) {\n const len = polylineLength(line);\n if (!(len > 0)) continue;\n if (line.closed && s <= 0 && e >= 1) out.push({ pts: line.pts.slice(), closed: true });\n else out.push({ pts: slice(line, s * len, e * len), closed: false });\n }\n return out;\n }\n const lengths = lines.map(polylineLength);\n const total = lengths.reduce((a, b) => a + b, 0);\n if (!(total > 0)) return [];\n const from = s * total, to = e * total;\n const out: Polyline[] = [];\n let offset = 0;\n lines.forEach((line, i) => {\n const len = lengths[i]!;\n const a = Math.max(from - offset, 0), b = Math.min(to - offset, len);\n offset += len;\n if (!(b > a) || len === 0) return;\n if (line.closed && a <= 0 && b >= len) { out.push({ pts: line.pts.slice(), closed: true }); return; }\n out.push({ pts: slice(line, a, b), closed: false });\n });\n return out;\n}\n\nfunction points(line: Polyline): number[] {\n return line.closed ? [...line.pts, line.pts[0]!, line.pts[1]!] : line.pts;\n}\n\nfunction polylineLength(line: Polyline): number {\n const p = points(line);\n let len = 0;\n for (let i = 2; i < p.length; i += 2) len += Math.hypot(p[i]! - p[i - 2]!, p[i + 1]! - p[i - 1]!);\n return len;\n}\n\n/** The points of `line` between the distances `a` and `b` along it. */\nfunction slice(line: Polyline, a: number, b: number): number[] {\n const p = points(line);\n const out: number[] = [];\n let at = 0;\n for (let i = 2; i < p.length; i += 2) {\n const x0 = p[i - 2]!, y0 = p[i - 1]!, x1 = p[i]!, y1 = p[i + 1]!;\n const seg = Math.hypot(x1 - x0, y1 - y0);\n const segEnd = at + seg;\n if (segEnd > a && at < b && seg > 0) {\n const t0 = Math.max(a - at, 0) / seg, t1 = Math.min(b - at, seg) / seg;\n if (out.length === 0) out.push(x0 + (x1 - x0) * t0, y0 + (y1 - y0) * t0);\n out.push(x0 + (x1 - x0) * t1, y0 + (y1 - y0) * t1);\n }\n at = segEnd;\n if (at >= b) break;\n }\n return out;\n}\n\n/**\n * `fillRule: 'evenodd'` for a path with several sub-paths (a donut is two circles in one `d`): the biggest sub-path is the shape and every other one is a hole cut out of it.\n * Sub-paths start at an `M` / `m`; write them in absolute coordinates (a relative `m` after a closed one starts from the previous end). Islands inside a hole are not drawn.\n */\nexport function splitEvenOdd(d: string): { main: string; holes: string[] } {\n const parts = d.split(/(?=[Mm])/).map(x => x.trim()).filter(Boolean);\n if (parts.length < 2) return { main: d.trim(), holes: [] };\n const area = (sub: string): number => flattenSvgPath(sub).reduce((sum, line) => {\n let a = 0;\n for (let i = 0; i < line.pts.length; i += 2) { const j = (i + 2) % line.pts.length; a += line.pts[i]! * line.pts[j + 1]! - line.pts[j]! * line.pts[i + 1]!; }\n return sum + Math.abs(a) / 2;\n }, 0);\n const areas = parts.map(area);\n const big = areas.indexOf(Math.max(...areas));\n const holes = parts.filter((_, i) => i !== big);\n // An island inside a hole is not drawn (and not cut either: cutting a shape out of a hole that is already cut drew a wedge of fill inside the hole): a sub-path whose first point lies inside another hole is dropped\n const pointOf = (sub: string): [number, number] => { const p0 = flattenSvgPath(sub)[0]?.pts ?? [0, 0]; return [p0[0]!, p0[1]!]; };\n const inPoly = (sub: string, [x, y]: [number, number]): boolean => {\n const line = flattenSvgPath(sub)[0]?.pts ?? [];\n let inside = false;\n for (let i = 0, j = line.length - 2; i < line.length; j = i, i += 2) {\n const xi = line[i]!, yi = line[i + 1]!, xj = line[j]!, yj = line[j + 1]!;\n if ((yi > y) !== (yj > y) && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi) inside = !inside;\n }\n return inside;\n };\n const real = holes.filter((h, i) => !holes.some((o, k) => k !== i && area(o) > area(h) && inPoly(o, pointOf(h))));\n return { main: parts[big]!, holes: real };\n}\n","import type { Polyline } from './trimPath';\n\n/** One sub-path of a morph: `n` points at the start (`a`) and at the end (`b`), flat `[x, y, …]`. */\nexport interface MorphPair { a: number[]; b: number[]; closed: boolean }\n\n/** `n` points spread evenly by length along `line` (a closed one goes round without repeating its first point). */\nexport function resample(line: Polyline, n: number): number[] {\n const p = line.closed ? [...line.pts, line.pts[0]!, line.pts[1]!] : line.pts;\n const cum = [0];\n for (let i = 2; i < p.length; i += 2) cum.push(cum[cum.length - 1]! + Math.hypot(p[i]! - p[i - 2]!, p[i + 1]! - p[i - 1]!));\n const total = cum[cum.length - 1]!;\n const out: number[] = [];\n if (!(total > 0)) { for (let i = 0; i < n; i++) out.push(p[0]!, p[1]!); return out; }\n let seg = 1;\n for (let i = 0; i < n; i++) {\n const s = line.closed ? (i * total) / n : n === 1 ? 0 : (i * total) / (n - 1);\n while (seg < cum.length - 1 && cum[seg]! < s) seg++;\n const len = cum[seg]! - cum[seg - 1]!;\n const t = len > 0 ? (s - cum[seg - 1]!) / len : 0;\n const k = seg * 2;\n out.push(p[k - 2]! + (p[k]! - p[k - 2]!) * t, p[k - 1]! + (p[k + 1]! - p[k - 1]!) * t);\n }\n return out;\n}\n\nconst centroid = (pts: number[]): [number, number] => {\n let x = 0, y = 0;\n for (let i = 0; i < pts.length; i += 2) { x += pts[i]!; y += pts[i + 1]!; }\n const n = pts.length / 2;\n return [x / n, y / n];\n};\n\n/** Re-order the points of the closed outline `b` (its start point and direction) so that it lies closest to `a`: no twisting. */\nfunction align(a: number[], b: number[]): number[] {\n const n = a.length / 2;\n let best = b, bestCost = Infinity;\n for (const reversed of [false, true]) {\n for (let k = 0; k < n; k++) {\n let cost = 0;\n for (let i = 0; i < n && cost < bestCost; i++) {\n const j = reversed ? (((k - i) % n) + n) % n : (k + i) % n;\n cost += (a[2 * i]! - b[2 * j]!) ** 2 + (a[2 * i + 1]! - b[2 * j + 1]!) ** 2;\n }\n if (cost < bestCost) {\n bestCost = cost;\n const out: number[] = [];\n for (let i = 0; i < n; i++) {\n const j = reversed ? (((k - i) % n) + n) % n : (k + i) % n;\n out.push(b[2 * j]!, b[2 * j + 1]!);\n }\n best = out;\n }\n }\n }\n return best;\n}\n\n/**\n * Prepare a morph between two outlines: when a pair of sub-paths has the same number of corners they are paired corner to corner (resampling would round the\n * corners half way when the edges are not in proportion); otherwise both are resampled to `n` points per sub-path, closed outlines are rotated /\n * reversed so they do not twist, and sub-paths are paired by order. A sub-path with no partner grows out of (or shrinks\n * into) its own centre. Empty on either side: nothing to morph.\n */\n/** A closed outline written with a line back to its start before Z has its start twice: it has the corners it has, not one more (a quad stays a quad for the corner-to-corner pairing). */\nfunction withoutClosingPoint(p: Polyline): Polyline {\n const n = p.pts.length;\n if (p.closed && n >= 4 && p.pts[0] === p.pts[n - 2] && p.pts[1] === p.pts[n - 1]) return { ...p, pts: p.pts.slice(0, n - 2) };\n return p;\n}\n\nexport function buildMorph(from: Polyline[], to: Polyline[], n = 128): MorphPair[] {\n from = from.map(withoutClosingPoint); to = to.map(withoutClosingPoint);\n if (from.length === 0 || to.length === 0) return [];\n const pairs: MorphPair[] = [];\n const count = Math.max(from.length, to.length);\n for (let i = 0; i < count; i++) {\n const fa = from[i], fb = to[i];\n const closed = (fa?.closed ?? fb!.closed) && (fb?.closed ?? fa!.closed);\n if (fa && fb && fa.closed === fb.closed && fa.pts.length === fb.pts.length && fa.pts.length >= 6) { // the same number of corners: corner to corner, so a quad stays a quad half way\n const a = [...fa.pts];\n pairs.push({ a, b: closed ? align(a, [...fb.pts]) : [...fb.pts], closed });\n continue;\n }\n const a = fa ? resample({ pts: fa.pts, closed }, n) : collapsed(resample({ pts: fb!.pts, closed }, n));\n let b = fb ? resample({ pts: fb.pts, closed }, n) : collapsed(a);\n if (closed && fa && fb) b = align(a, b);\n pairs.push({ a, b, closed });\n }\n return pairs;\n}\n\nfunction collapsed(pts: number[]): number[] {\n const [cx, cy] = centroid(pts);\n const out: number[] = [];\n for (let i = 0; i < pts.length; i += 2) out.push(cx, cy);\n return out;\n}\n\n/** The outlines `t` of the way (0–1) from the first to the second. */\nexport function morphAt(pairs: MorphPair[], t: number): Polyline[] {\n const u = Math.min(Math.max(t, 0), 1);\n return pairs.map(({ a, b, closed }) => ({ pts: a.map((v, i) => v + (b[i]! - v) * u), closed }));\n}\n","import { Graphics, GraphicsPath } from 'pixi.js';\nimport { kfDuration } from '../core/spring';\nimport { Sequence } from './Base';\nimport { evaluateExpr, isExpr } from '../expr/Parser';\nimport { applyKeyframes, applyInitial, resolveAt, loopVars } from '../core/Timeline';\nimport { revertibleSet } from '../core/revertibleSet';\nimport { describeLayer } from '../core/lint';\nimport { type ColorSpace, type ColorInput } from '../expr/colorInterp';\nimport { tweenColor } from '../expr/colorTween';\nimport type { Scope } from '../expr/Scope';\nimport { makeGradientFill } from './gradientFill';\nimport { GradientPainter, gradStateFrom, bindGradientKeyframes, hasGradientKeys, validateGradientKeyframes, type GradState } from './gradientAnim';\nimport { trimPolylines, rectOutline, ellipseOutline, flattenSvgPath, splitEvenOdd, type Polyline } from './trimPath';\nimport { buildMorph, morphAt, type MorphPair } from './morphPath';\nimport { collectPropKeys } from '../space/specKeys';\nimport type { Timeline } from '../core/timelineEngine';\nimport type {\n ShapeSequenceSpec, GradientSpec,\n LineShapeSpec, PolygonShapeSpec, PathShapeSpec,\n Props, Keyframe, PropValue,\n} from '../types';\n\n\n\n// Style + geometry props live on the shape's `_state`, not on the Graphics.\n// The shape redraws every frame from `_state`, so style AND scalar geometry\n// props (width, radius, …) are both keyframable through the same pipeline.\n//\n// Style is uniform across shape kinds; geometry is shape-kind-specific.\n// `LIVE_KEYS` is the union — any key in this set is stripped from the\n// standard transform/keyframe pipeline and routed through `_state` instead.\ntype StyleKey = 'fillColor' | 'fillAlpha' | 'strokeColor' | 'strokeAlpha' | 'strokeWidth';\ntype GeometryKey = 'width' | 'height' | 'cornerRadius' | 'radius' | 'radiusX' | 'radiusY' | 'anchorX' | 'anchorY' | 'innerRadius' | 'startAngle' | 'endAngle' | 'trimStart' | 'trimEnd' | 'morph';\ntype LiveKey = StyleKey | GeometryKey | 'fillGradient';\n\nconst STYLE_KEYS = ['fillColor', 'fillAlpha', 'strokeColor', 'strokeAlpha', 'strokeWidth'] as const;\nconst COLOR_KEYS = new Set<LiveKey>(['fillColor', 'strokeColor']);\n\n// Per-shape-kind set of geometry keys that are animatable. Array geometry\n// (polygon points, line endpoints, path `d`) isn't animated in v1 — those\n// are baked once at build. `anchorX` / `anchorY` are also animatable —\n// useful for \"morph from left-anchored to centred\" tricks.\nconst TRIM_KEYS = ['trimStart', 'trimEnd'] as const;\nconst GEOMETRY_KEYS_BY_SHAPE: Record<ShapeSequenceSpec['shape'], readonly GeometryKey[]> = {\n rect: ['width', 'height', 'cornerRadius', 'anchorX', 'anchorY', ...TRIM_KEYS],\n circle: ['radius', 'anchorX', 'anchorY', ...TRIM_KEYS],\n ellipse: ['radiusX', 'radiusY', 'anchorX', 'anchorY', ...TRIM_KEYS],\n arc: ['radius', 'innerRadius', 'startAngle', 'endAngle'],\n line: [...TRIM_KEYS],\n polygon: [...TRIM_KEYS],\n path: [...TRIM_KEYS, 'morph'],\n};\n\n// Shape kinds whose geometry is drawn relative to a configurable anchor —\n// they don't need the build-time auto-pivot that user-coord shapes\n// (line / polygon / path) rely on for visual centring.\nconst ANCHORED_SHAPES = new Set<ShapeSequenceSpec['shape']>(['rect', 'circle', 'ellipse', 'arc']);\n\ninterface ShapeState {\n // style\n fillStyle?: unknown; // gradient fill argument for Graphics.fill, built once at build; wins over fillColor\n fillColor: string | number | undefined;\n fillAlpha: number;\n strokeColor: string | number | undefined;\n strokeAlpha: number;\n strokeWidth: number;\n // geometry (only the relevant subset for the shape kind is non-undefined)\n width?: number;\n height?: number;\n cornerRadius?: number;\n radius?: number;\n radiusX?: number;\n radiusY?: number;\n anchorX?: number;\n anchorY?: number;\n innerRadius?: number;\n startAngle?: number;\n endAngle?: number;\n /** Stroke trim: the part of the outline drawn, as fractions 0–1 of its length. */\n trimStart?: number;\n trimEnd?: number;\n /** Path morph: how far from `d` (0) to `morphTo` (1). */\n morph?: number;\n // stroke style that is not animated\n strokeCap?: string;\n strokeJoin?: string;\n /** Trim every sub-path on its own (they all draw on at the same time) instead of walking the whole outline in order. */\n trimEach?: boolean;\n}\n\nexport class ShapeSequence extends Sequence {\n declare spec: ShapeSequenceSpec;\n private _state: ShapeState = {\n fillColor: undefined,\n fillAlpha: 1,\n strokeColor: undefined,\n strokeAlpha: 1,\n strokeWidth: 0,\n };\n // Closure that draws the path commands for this shape kind from the\n // (possibly tweened) `_state`. Bound once at build; called on every frame\n // by `Container.onRender`.\n private _drawGeometry: (g: Graphics) => void = () => {};\n private _liveKeys = new Set<LiveKey>(STYLE_KEYS);\n\n async build(): Promise<void> {\n const graphics = new Graphics({ label: this.spec.name });\n graphics.cullable = true;\n this.target = graphics;\n if (this.duration === undefined) {\n this.duration = this.parent?.duration ?? this.root.duration;\n }\n\n const scope = this.scope();\n const geomKeys = GEOMETRY_KEYS_BY_SHAPE[this.spec.shape];\n for (const k of geomKeys) this._liveKeys.add(k);\n\n // Seed _state with geometry from the spec (resolved against the scope\n // for expression support like `width: 'W * 0.5'`) and the initial style.\n seedGeometry(this._state, this.spec, scope);\n seedStyle(this._state, this.spec.initial ?? {}, scope);\n seedStrokeStyle(this._state, this.spec, this.spec.initial ?? {}, describeLayer(this.spec));\n if (this.spec.shape === 'arc') {\n this._state.startAngle ??= 0;\n this._state.endAngle ??= 360;\n const top = this.spec as unknown as Record<string, unknown>, ini = (this.spec.initial ?? {}) as Record<string, unknown>;\n if ('trimStart' in top || 'trimEnd' in top || 'trimStart' in ini || 'trimEnd' in ini) {\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: trimStart / trimEnd do not apply to an arc: animate its endAngle (and startAngle) instead`);\n }\n } else {\n this._state.trimStart ??= 0;\n this._state.trimEnd ??= 1;\n }\n const gradientSpec = this.spec.fillGradient ?? (this.spec.initial as { fillGradient?: GradientSpec } | undefined)?.fillGradient;\n validateGradientKeyframes(this.spec as never, describeLayer(this.spec)); // once, here, not at every evaluation of the timeline\n if (gradientSpec) {\n if (hasGradientKeys(this.spec.keyframes)) {\n // animated: one canvas + one texture, repainted in place whenever the gradient changes\n this._grad = { grad: gradStateFrom(gradientSpec) };\n this._painter = new GradientPainter();\n this._gradDirty = true;\n this._liveKeys.add('fillGradient');\n } else this._state.fillStyle = makeGradientFill(gradientSpec);\n }\n\n // Build the per-frame draw closure. For symmetric shapes (rect / circle /\n // ellipse) it pulls from _state so geometry tweens take effect; for\n // user-coord shapes (line / polygon / path) the geometry is immutable\n // and resolved once here.\n const morph = this._setupMorph();\n this._drawGeometry = makeDrawGeometry(this.spec, scope, this._state, morph);\n this._outline = makeOutline(this.spec, scope, this._state, morph);\n const eo = this.spec.shape === 'path' && this.spec.fillRule === 'evenodd' && !morph ? splitEvenOdd(this.spec.d) : null;\n this._evenOdd = eo && eo.holes.length > 0 ? eo : null;\n\n // Measure the WHOLE shape (a layer that starts fully trimmed still has its size and centre).\n const { trimStart, trimEnd } = this._state;\n this._state.trimStart = 0; this._state.trimEnd = 1;\n this._drawGeometry(graphics);\n applyState(graphics, this._state);\n\n const bounds = graphics.getLocalBounds();\n this._state.trimStart = trimStart; this._state.trimEnd = trimEnd;\n this.intrinsicWidth = bounds.width;\n this.intrinsicHeight = bounds.height;\n // Auto-pivot only for user-coord shapes (line / polygon / path) — they\n // need it to compensate for whatever local origin the user picked.\n // Anchored shapes (rect / circle / ellipse) already control their own\n // origin via `anchorX` / `anchorY`; setting pivot here would double-up\n // and surprise the user.\n // A user-supplied initial.pivotX / pivotY overrides this in bindTimeline.\n if (!ANCHORED_SHAPES.has(this.spec.shape)) {\n const cx = bounds.x + bounds.width / 2;\n const cy = bounds.y + bounds.height / 2;\n graphics.pivot.set(cx, cy);\n // Pivot at the centre means x,y places the centre. When the author gives no x / y the points\n // are meant as plain coordinates, so default the position to that centre (the shape then\n // appears exactly where its points say). An explicit initial x / y still wins, per axis.\n const init = (this.spec.initial ?? {}) as Record<string, unknown>;\n if (init.x === undefined) graphics.x = cx;\n if (init.y === undefined) graphics.y = cy;\n }\n\n // Per-frame redraw: PIXI v8 `Container.onRender` fires during render, so\n // we read the (possibly tweened) `_state` and re-issue the geometry +\n // fill / stroke. Clearing first is essential because v8 records each\n // .fill()/.stroke() as a separate instruction — without clear() the\n // instruction list grows unbounded.\n graphics.onRender = () => {\n if (this._fresh) { this._fresh = false; return; } // syncFrame() already drew this frame\n this._redraw();\n };\n\n this._redraw();\n this.buildFilters();\n }\n\n /** The prepared morph between `d` and `morphTo`, or null (and a warning when the spec asked for one that cannot work). */\n private _setupMorph(): { pairs: MorphPair[]; to: string } | null {\n const who = describeLayer(this.spec);\n const top = this.spec as unknown as Record<string, unknown>;\n const wanted = this.spec.shape === 'path' && (this._state.morph !== undefined || collectPropKeys(this.spec).has('morph'));\n if (this.spec.shape !== 'path') {\n if ('morphTo' in top) console.warn(`pixi-effects: ${who}: morphTo only works on a path shape (shape: 'path'); ignored`);\n return null;\n }\n if (top.morphTo === undefined) {\n if (wanted) console.warn(`pixi-effects: ${who}: morph needs morphTo (the outline to morph into); ignored`);\n return null;\n }\n let points = 128;\n if (top.morphPoints !== undefined) {\n const n = Number(top.morphPoints);\n if (Number.isInteger(n) && n >= 8 && n <= 2048) points = n;\n else console.warn(`pixi-effects: ${who}: morphPoints must be a whole number from 8 to 2048, got ${String(top.morphPoints)}; using 128`);\n }\n const pairs = buildMorph(flattenSvgPath(this.spec.d), flattenSvgPath(String(top.morphTo)), points);\n if (pairs.length === 0) {\n console.warn(`pixi-effects: ${who}: morphTo \"${String(top.morphTo)}\" (or d) draws nothing, so there is nothing to morph; ignored`);\n return null;\n }\n this._state.morph ??= 0;\n return { pairs, to: String(top.morphTo) };\n }\n\n override destroy(): void {\n super.destroy();\n this._painter?.destroy(); // the animated gradient's texture and canvas go with the layer\n this._painter = null;\n }\n\n private _fresh = false;\n private _grad: { grad: GradState } | null = null;\n private _painter: GradientPainter | null = null;\n private _gradDirty = false;\n private _outline: (() => Polyline[]) | null = null;\n /** fillRule 'evenodd' on a path: the shape and the sub-paths cut out of it after it is filled (null: not used). */\n private _evenOdd: { main: string; holes: string[] } | null = null;\n\n /**\n * fillRule 'evenodd': the shape is filled, each hole is cut out of that fill, and the stroke goes round the shape and every hole. (PIXI's `cut()` only reaches the\n * LAST instruction, so it has to come between the fill and the stroke.)\n */\n private _fillWithHoles(g: Graphics): void {\n const s = this._state, { main, holes } = this._evenOdd!;\n applyFill(g, s);\n for (const hole of holes) { g.beginPath(); g.path(new GraphicsPath(hole)); g.cut(); }\n if (s.strokeColor !== undefined && s.strokeWidth > 0) {\n g.beginPath();\n g.path(new GraphicsPath(main));\n for (const hole of holes) g.path(new GraphicsPath(hole));\n applyStroke(g, s);\n }\n }\n\n private _redraw(): void {\n const graphics = this.target as Graphics;\n const s = this._state;\n if (this._grad && this._gradDirty) { s.fillStyle = this._painter!.paint(this._grad.grad); this._gradDirty = false; }\n graphics.clear();\n const trimmed = (s.trimStart ?? 0) > 0 || (s.trimEnd ?? 1) < 1;\n if (!trimmed || !this._outline || !(s.strokeColor !== undefined && s.strokeWidth > 0)) {\n this._drawGeometry(graphics);\n if (this._evenOdd) { this._fillWithHoles(graphics); return; }\n applyState(graphics, s);\n return;\n }\n // A trim is for the stroke (like After Effects): the fill, if any, is the whole shape; then only the part of\n // the outline between trimStart and trimEnd is stroked.\n if (s.fillStyle || s.fillColor !== undefined) {\n this._drawGeometry(graphics);\n applyFill(graphics, s);\n graphics.beginPath();\n }\n const parts = trimPolylines(this._outline(), s.trimStart ?? 0, s.trimEnd ?? 1, s.trimEach === true);\n if (parts.length === 0) return; // nothing drawn on yet (trimEnd 0)\n for (const part of parts) {\n if (part.closed) { graphics.poly(part.pts, true); continue; }\n graphics.moveTo(part.pts[0]!, part.pts[1]!);\n for (let i = 2; i < part.pts.length; i += 2) graphics.lineTo(part.pts[i]!, part.pts[i + 1]!);\n }\n applyStroke(graphics, s);\n }\n\n /**\n * Draw from the tweened `_state` before the culler runs. The culler measures the geometry as last\n * drawn; a layer drawn only inside `onRender` is culled on stale bounds (a rect growing from\n * `width: 0` at the left edge was skipped after a jump seek, and one frame late in playback).\n */\n override syncFrame(): void {\n super.syncFrame();\n if (!this.target?.renderable) return;\n this._redraw();\n this._fresh = true;\n }\n\n override bindTimeline(timeline: Timeline, offset = 0): void {\n if (!this.target) return;\n const scope = this.scope();\n const startTime = offset + this.at; // keyframe `at` is sequence-local\n // Non-live props go through the standard pipeline (transform, alpha,\n // filter uniforms, …).\n const initial = stripLive(stripGradient(this.spec.initial), this._liveKeys);\n const keyframes = this.spec.keyframes\n ? this.spec.keyframes.map(kf => stripLiveKeyframe(kf, this._liveKeys))\n : undefined;\n applyInitial(this.target, initial as Record<string, unknown> | undefined, scope as unknown as Record<string, number>);\n applyKeyframes(timeline, this.target, keyframes, this.duration!, scope as unknown as Record<string, number>, [], startTime);\n\n // Live props (style + scalar geometry) get a parallel set of tweens\n // targeting `_state`. Colour keys (fillColor / strokeColor) interpolate\n // through a straight rgb lerp (or OKLab / OKLCH if `colorSpace` is\n // set on the spec); geometry / alpha / width tween linearly through\n // the timeline's ordinary numeric interpolation.\n const colorSpace: ColorSpace = (this.spec as { colorSpace?: ColorSpace }).colorSpace ?? 'rgb';\n bindLiveKeyframes(timeline, this._state, this._liveKeys, this.spec.keyframes ?? [], this.duration!, scope, startTime, colorSpace);\n if (this._grad) bindGradientKeyframes(timeline, this._grad, this.spec.keyframes ?? [], this.duration!, startTime, colorSpace, () => { this._gradDirty = true; });\n\n this.absoluteStart = startTime;\n const endTime = startTime + this.duration!;\n this.target.renderable = startTime <= 0;\n timeline.set(this.target, { renderable: true }, startTime);\n timeline.set(this.target, { renderable: false }, endTime);\n }\n}\n\n// ─── State seeding ───────────────────────────────────────────────────────\n\nfunction seedGeometry(state: ShapeState, spec: ShapeSequenceSpec, scope: Scope): void {\n const keys = GEOMETRY_KEYS_BY_SHAPE[spec.shape];\n const initial = (spec.initial ?? {}) as Record<string, PropValue | undefined>;\n for (const k of keys) {\n // Same vocabulary as every other layer: geometry may be written at the top\n // level (next to `shape`) or in `initial`; the top level wins.\n const v = (spec as unknown as Record<string, PropValue | undefined>)[k] ?? initial[k];\n if (v !== undefined) (state as unknown as Record<string, unknown>)[k] = num(v, scope);\n }\n}\n\nconst STROKE_CAPS = ['butt', 'round', 'square'];\nconst STROKE_JOINS = ['miter', 'round', 'bevel'];\n\n/** `strokeCap` / `strokeJoin` (top level or in `initial`): words, not animatable. */\nfunction seedStrokeStyle(state: ShapeState, spec: object, initial: Props, who: string): void {\n const top = spec as Record<string, unknown>;\n const ini = initial as Record<string, unknown>;\n const pick = (key: string, valid: string[]): string | undefined => {\n const v = top[key] ?? ini[key];\n if (v === undefined) return undefined;\n if (valid.includes(String(v))) return String(v);\n console.warn(`pixi-effects: ${who}: ${key} \"${v}\" is not one of ${valid.join(', ')}; ignored`);\n return undefined;\n };\n state.strokeCap = pick('strokeCap', STROKE_CAPS);\n state.strokeJoin = pick('strokeJoin', STROKE_JOINS);\n const each = top.trimEach ?? ini.trimEach;\n if (each !== undefined) {\n if (typeof each === 'boolean') state.trimEach = each;\n else console.warn(`pixi-effects: ${who}: trimEach must be true or false (got ${JSON.stringify(each)}); ignored`);\n }\n}\n\nfunction seedStyle(state: ShapeState, initial: Props, scope: Scope): void {\n for (const k of STYLE_KEYS) {\n const v = (initial as Record<string, unknown>)[k];\n if (v === undefined) continue;\n (state as unknown as Record<string, unknown>)[k] = COLOR_KEYS.has(k) ? v : numOrZero(v, scope);\n }\n}\n\n// ─── Strip live keys from the spec.initial / spec.keyframes that go to PixiPlugin ──\n\nfunction stripGradient(props: Props | undefined): Props | undefined {\n if (!props || !('fillGradient' in props || 'strokeCap' in props || 'strokeJoin' in props || 'trimEach' in props)) return props;\n const { fillGradient: _drop, strokeCap: _cap, strokeJoin: _join, trimEach: _each, ...rest } = props as Record<string, unknown>;\n return rest as unknown as Props;\n}\n\nfunction stripLive(props: Props | undefined, liveKeys: Set<LiveKey>): Props | undefined {\n if (!props) return props;\n const out: Record<string, unknown> = {};\n let changed = false;\n for (const k of Object.keys(props)) {\n if (liveKeys.has(k as LiveKey)) { changed = true; continue; }\n out[k] = (props as Record<string, unknown>)[k];\n }\n return changed ? (out as unknown as Props) : props;\n}\n\nfunction stripLiveKeyframe(kf: Keyframe, liveKeys: Set<LiveKey>): Keyframe {\n return {\n ...kf,\n set: stripLive(kf.set, liveKeys),\n to: stripLive(kf.to, liveKeys),\n from: stripLive(kf.from, liveKeys),\n };\n}\n\nfunction pickLive(props: Props | undefined, liveKeys: Set<LiveKey>): Record<string, unknown> | null {\n if (!props) return null;\n const out: Record<string, unknown> = {};\n let any = false;\n for (const k of Object.keys(props)) {\n if (liveKeys.has(k as LiveKey)) {\n out[k] = (props as Record<string, unknown>)[k];\n any = true;\n }\n }\n return any ? out : null;\n}\n\nfunction resolveLiveValue(key: LiveKey, value: unknown, scope: Scope): unknown {\n if (COLOR_KEYS.has(key)) return value; // colour: pass through as-is\n return numOrZero(value, scope);\n}\n\n// ─── Per-frame redraw ────────────────────────────────────────────────────\n\nfunction applyState(g: Graphics, s: ShapeState): void {\n applyFill(g, s);\n applyStroke(g, s);\n}\nfunction applyFill(g: Graphics, s: ShapeState): void {\n if (s.fillStyle) {\n g.fill(s.fillStyle as never);\n } else if (s.fillColor !== undefined) {\n g.fill({ color: s.fillColor, alpha: s.fillAlpha });\n }\n}\nfunction applyStroke(g: Graphics, s: ShapeState): void {\n if (s.strokeColor !== undefined && s.strokeWidth > 0) {\n g.stroke({\n color: s.strokeColor, alpha: s.strokeAlpha, width: s.strokeWidth,\n ...(s.strokeCap ? { cap: s.strokeCap as 'butt' | 'round' | 'square' } : {}),\n ...(s.strokeJoin ? { join: s.strokeJoin as 'miter' | 'round' | 'bevel' } : {}),\n });\n }\n}\n\n// ─── drawShape closures (live for symmetric shapes, frozen for the rest) ──\n//\n// The closure returned here is what `Container.onRender` calls every frame.\n// For rect / circle / ellipse it captures a reference to `_state`, so any\n// tween of width / radius / etc. is reflected on the next render.\n// For line / polygon / path the geometry is baked at build time and the\n// closure is constant — they aren't animatable in v1.\n\nfunction drawRectFromState(g: Graphics, s: ShapeState): void {\n const w = s.width ?? 0;\n const h = s.height ?? 0;\n const r = s.cornerRadius ?? 0;\n const ax = s.anchorX ?? 0.5;\n const ay = s.anchorY ?? 0.5;\n // The local origin sits at (anchorX * w, anchorY * h) of the rect.\n // anchorX:0 → left edge at origin (rect grows rightward when w animates).\n // anchorX:0.5 → centred (default).\n // (`0 - x` rather than `-x` to avoid JS's -0 quirk in the ax=0 case.)\n const x = 0 - ax * w;\n const y = 0 - ay * h;\n if (r > 0) g.roundRect(x, y, w, h, r);\n else g.rect(x, y, w, h);\n}\nfunction drawCircleFromState(g: Graphics, s: ShapeState): void {\n const r = s.radius ?? 0;\n const ax = s.anchorX ?? 0.5;\n const ay = s.anchorY ?? 0.5;\n // Anchor on the bbox of the circle: (ax, ay) in [0..1] × bbox (2r × 2r).\n // ax:0 → left edge at origin (centre at +r along x).\n g.circle((0.5 - ax) * 2 * r, (0.5 - ay) * 2 * r, r);\n}\nfunction drawEllipseFromState(g: Graphics, s: ShapeState): void {\n const rx = s.radiusX ?? 0;\n const ry = s.radiusY ?? 0;\n const ax = s.anchorX ?? 0.5;\n const ay = s.anchorY ?? 0.5;\n g.ellipse((0.5 - ax) * 2 * rx, (0.5 - ay) * 2 * ry, rx, ry);\n}\nconst DEG = Math.PI / 180;\n\nfunction drawArcFromState(g: Graphics, s: ShapeState): void {\n const r = s.radius ?? 0;\n const ri = Math.max(0, Math.min(s.innerRadius ?? 0, r));\n const startDeg = s.startAngle ?? 0;\n let endDeg = s.endAngle ?? 360;\n if (!(r > 0) || endDeg === startDeg) return; // nothing to draw\n const filled = !!s.fillStyle || s.fillColor !== undefined;\n if (Math.abs(endDeg - startDeg) >= 360) {\n if (!filled) { g.circle(0, 0, r); return; } // a full stroke ring\n endDeg = startDeg + Math.sign(endDeg - startDeg) * 359.999; // a filled full ring: a sliver short of closing (no hole trick needed)\n }\n const a0 = startDeg * DEG, a1 = endDeg * DEG;\n const ccw = a1 < a0;\n if (filled) g.moveTo(r * Math.cos(a0), r * Math.sin(a0)); // a sector starts its outline at the arc's start point\n g.arc(0, 0, r, a0, a1, ccw); // an open arc starts where the arc starts: a moveTo first left a flat start cap\n if (!filled) return; // an open arc line: the stroke follows\n if (ri > 0) {\n g.lineTo(ri * Math.cos(a1), ri * Math.sin(a1));\n g.arc(0, 0, ri, a1, a0, !ccw); // back along the inner edge\n } else {\n g.lineTo(0, 0);\n }\n g.closePath();\n}\nfunction makeLineDraw(spec: LineShapeSpec, scope: Scope): (g: Graphics) => void {\n const fx = num(spec.from[0], scope);\n const fy = num(spec.from[1], scope);\n const tx = num(spec.to[0], scope);\n const ty = num(spec.to[1], scope);\n return (g: Graphics) => { g.moveTo(fx, fy); g.lineTo(tx, ty); };\n}\nfunction makePolygonDraw(spec: PolygonShapeSpec, scope: Scope): (g: Graphics) => void {\n if (spec.points.length === 0) return () => {};\n const flat: number[] = [];\n for (const [x, y] of spec.points) flat.push(num(x, scope), num(y, scope));\n const closed = !spec.open;\n return (g: Graphics) => { g.poly(flat, closed); };\n}\nfunction makePathDraw(spec: PathShapeSpec): (g: Graphics) => void {\n // GraphicsPath accepts the SVG `d` directly; we apply it as a sub-path\n // so user fill / stroke aren't clobbered by the SVG parser's defaults.\n const d = spec.fillRule === 'evenodd' ? splitEvenOdd(spec.d).main : spec.d; // evenodd: only the shape here, the holes are cut after the fill (see _redraw)\n return (g: Graphics) => { g.path(new GraphicsPath(d)); };\n}\n\nconst STATE_DRAWERS: Partial<Record<ShapeSequenceSpec['shape'], (g: Graphics, s: ShapeState) => void>> = {\n rect: drawRectFromState,\n circle: drawCircleFromState,\n ellipse: drawEllipseFromState,\n arc: drawArcFromState,\n};\n\nfunction makeDrawGeometry(spec: ShapeSequenceSpec, scope: Scope, state: ShapeState, morph: { pairs: MorphPair[]; to: string } | null): (g: Graphics) => void {\n const stateDrawer = STATE_DRAWERS[spec.shape];\n if (stateDrawer) return (g: Graphics) => stateDrawer(g, state);\n switch (spec.shape) {\n case 'line': return makeLineDraw(spec, scope);\n case 'polygon': return makePolygonDraw(spec, scope);\n case 'path': {\n const plain = makePathDraw(spec);\n if (!morph) return plain;\n const last = makePathDraw({ ...spec, d: morph.to });\n return (g: Graphics) => {\n const t = state.morph ?? 0;\n if (t <= 0) plain(g);\n else if (t >= 1) last(g); // the ends are the paths themselves, curves and all\n else for (const part of morphAt(morph.pairs, t)) drawPolyline(g, part);\n };\n }\n }\n return () => {};\n}\n\nfunction drawPolyline(g: Graphics, part: Polyline): void {\n if (part.closed) { g.poly(part.pts, true); return; }\n g.moveTo(part.pts[0]!, part.pts[1]!);\n for (let i = 2; i < part.pts.length; i += 2) g.lineTo(part.pts[i]!, part.pts[i + 1]!);\n}\n\n/** The outline a stroke trim walks along: the same geometry as the drawer, as polylines (null: no trim for this kind). */\nfunction makeOutline(spec: ShapeSequenceSpec, scope: Scope, s: ShapeState, morph: { pairs: MorphPair[]; to: string } | null): (() => Polyline[]) | null {\n switch (spec.shape) {\n case 'rect': return () => {\n const w = s.width ?? 0, h = s.height ?? 0;\n return [rectOutline(0 - (s.anchorX ?? 0.5) * w, 0 - (s.anchorY ?? 0.5) * h, w, h, s.cornerRadius ?? 0)];\n };\n case 'circle': return () => {\n const r = s.radius ?? 0;\n return [ellipseOutline((0.5 - (s.anchorX ?? 0.5)) * 2 * r, (0.5 - (s.anchorY ?? 0.5)) * 2 * r, r, r)];\n };\n case 'ellipse': return () => {\n const rx = s.radiusX ?? 0, ry = s.radiusY ?? 0;\n return [ellipseOutline((0.5 - (s.anchorX ?? 0.5)) * 2 * rx, (0.5 - (s.anchorY ?? 0.5)) * 2 * ry, rx, ry)];\n };\n case 'line': {\n const lines: Polyline[] = [{ pts: [num(spec.from[0], scope), num(spec.from[1], scope), num(spec.to[0], scope), num(spec.to[1], scope)], closed: false }];\n return () => lines;\n }\n case 'polygon': {\n const pts: number[] = [];\n for (const [x, y] of spec.points) pts.push(num(x, scope), num(y, scope));\n const lines: Polyline[] = pts.length >= 4 ? [{ pts, closed: !spec.open }] : [];\n return () => lines;\n }\n case 'path': {\n if (morph) return () => morphAt(morph.pairs, s.morph ?? 0);\n let lines: Polyline[] | null = null; // flattened on first use: only a trimmed path needs it\n return () => (lines ??= flattenSvgPath(spec.d));\n }\n default: return null;\n }\n}\n\n// ─── Bind keyframes onto _state ──────────────────────────────────────────\n\nfunction bindLiveKeyframes(\n timeline: Timeline,\n state: ShapeState,\n liveKeys: Set<LiveKey>,\n keyframes: Keyframe[],\n parentDuration: number,\n scope: Scope,\n offset: number,\n colorSpace: ColorSpace,\n): void {\n for (const kf of keyframes) {\n const at = offset + resolveAt(kf.at, parentDuration);\n const duration = kfDuration(kf);\n const ease = kf.ease ?? 'none';\n const loop = loopVars(kf);\n\n if (kf.set) {\n const live = pickLive(kf.set, liveKeys);\n if (live) {\n for (const [k, v] of Object.entries(live)) {\n if (k === 'fillGradient') continue; // animated by bindGradientKeyframes\n const resolved = resolveLiveValue(k as LiveKey, v, scope);\n const live = state as unknown as Record<string, unknown>;\n revertibleSet(timeline, at, () => live[k], v2 => { live[k] = v2; }, resolved, [live, k]);\n }\n }\n }\n\n const fromLive = pickLive(kf.from, liveKeys);\n const toLive = pickLive(kf.to, liveKeys);\n const allKeys = new Set<string>([\n ...(fromLive ? Object.keys(fromLive) : []),\n ...(toLive ? Object.keys(toLive) : []),\n ]);\n for (const k of allKeys) {\n if (k === 'fillGradient') continue; // animated by bindGradientKeyframes\n const key = k as LiveKey;\n const fromRaw = fromLive?.[key];\n const toRaw = toLive?.[key];\n // Only resolve `from` when the user actually specified it.\n // Otherwise leave it undefined so the tween captures the live state\n // value WHEN it starts (not at bind time, which would lock every\n // chained keyframe back to the initial value — masking later changes).\n const fromValue = fromRaw !== undefined ? resolveLiveValue(key, fromRaw, scope) : undefined;\n const toValue = toRaw !== undefined ? resolveLiveValue(key, toRaw, scope) : undefined;\n tweenLiveKey(timeline, state, key, fromValue, toValue, duration, ease, at, colorSpace, loop);\n }\n }\n}\n\nfunction tweenLiveKey(\n timeline: Timeline,\n state: ShapeState,\n key: LiveKey,\n fromValue: unknown, // undefined = pick up live state at tween start\n toValue: unknown,\n duration: number,\n ease: string,\n at: number,\n colorSpace: ColorSpace,\n loop: Record<string, number | boolean>,\n): void {\n if (COLOR_KEYS.has(key) && toValue !== undefined) {\n tweenColor(\n timeline,\n state as unknown as Record<string, unknown>,\n key,\n fromValue as ColorInput | undefined,\n toValue as ColorInput,\n duration, ease, at, colorSpace, undefined, loop,\n );\n } else if (toValue !== undefined) {\n // Numeric keys (alpha, width, geometry).\n if (fromValue !== undefined) {\n // Only force a starting value when `from` was explicit on the keyframe.\n timeline.fromTo(state, { [key]: fromValue }, { [key]: toValue, duration, ease, ...loop }, at);\n } else {\n // Standard `.to()` picks up the live state value at tween start —\n // chains correctly through prior keyframes.\n timeline.to(state, { [key]: toValue, duration, ease, ...loop }, at);\n }\n }\n}\n\n// ─── helpers ─────────────────────────────────────────────────────────────\n\nfunction num(v: PropValue, scope: Scope): number {\n if (typeof v === 'number') return v;\n if (isExpr(v)) return evaluateExpr(v, scope as unknown as Record<string, number>);\n const parsed = parseFloat(v);\n return Number.isNaN(parsed) ? 0 : parsed;\n}\nfunction numOrZero(v: unknown, scope: Scope): number {\n if (typeof v === 'number') return v;\n if (typeof v === 'string') return num(v, scope);\n return 0;\n}\n","/**\n * The one WebGL2 context every shader layer of the page draws with. A context per layer would hit the browser's limit (about 16 live\n * contexts) after a few layers, and a composition with none must not make one: it is created on first use and let go when the last\n * layer is destroyed. If the browser takes it away (`webglcontextlost`), the next `currentGl()` makes a new one and a new `generation`,\n * and the layers compile their programs again.\n */\nexport interface SharedGl { gl: WebGL2RenderingContext; canvas: HTMLCanvasElement; generation: number }\n\nlet shared: SharedGl | null = null;\nlet generation = 0;\nlet refs = 0;\nlet unavailable = false;\n\nfunction create(): SharedGl | null {\n if (typeof document === 'undefined') return null;\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl2', { alpha: true, premultipliedAlpha: true, preserveDrawingBuffer: true, antialias: false }) as WebGL2RenderingContext | null;\n if (!gl) return null;\n const made: SharedGl = { gl, canvas, generation: ++generation };\n canvas.addEventListener('webglcontextlost', (e: Event) => {\n e.preventDefault();\n if (shared === made) shared = null; // the next currentGl() makes a new one\n });\n return made;\n}\n\n/** The context, made when there is none (or it was lost). Null when this browser has no WebGL2. */\nexport function currentGl(): SharedGl | null {\n if (shared) return shared;\n if (unavailable) return null;\n shared = create();\n if (!shared) unavailable = true;\n return shared;\n}\n\n/** A layer that draws with the shared context says so; the context lives while any does. */\nexport function acquireGl(): SharedGl | null { refs++; return currentGl(); }\n\nexport function releaseGl(): void {\n refs = Math.max(0, refs - 1);\n if (refs === 0 && shared) {\n const lose = (shared.gl as { getExtension?: (n: string) => { loseContext(): void } | null }).getExtension?.('WEBGL_lose_context');\n try { lose?.loseContext(); } catch { /* already gone */ }\n shared = null;\n }\n}\n\n/** For tests: forget everything (a new test starts with no context and no memory of a browser without WebGL2). */\nexport function resetGl(): void { shared = null; generation = 0; refs = 0; unavailable = false; }\n","/**\n * What the shader layer says about what it was given, as sentences (the caller puts `pixi-effects: layer \"x\": ` in front), and the pieces of\n * GLSL it builds around the author's code. Pure: no Pixi, no DOM. Nothing here throws.\n */\nimport type { SequenceSpec } from '../types';\n\n/** Declared for the author in every shader (Shadertoy names). */\nexport const SHADER_BUILTINS = ['iResolution', 'iTime', 'iFrame'] as const;\n/** Shadertoy names this version does not provide. */\nexport const SHADER_MISSING = ['iMouse', 'iChannel0', 'iChannel1', 'iChannel2', 'iChannel3', 'iDate', 'iTimeDelta', 'iSampleRate'] as const;\n\nconst IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/;\nconst HEX = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;\n/** GLSL ES 3.00 keywords and the words it reserves: a uniform of this name does not compile. */\nconst RESERVED = new Set(`attribute const uniform varying break continue do for while if else in out inout float int void bool true false discard return\n mat2 mat3 mat4 mat2x2 mat2x3 mat2x4 mat3x2 mat3x3 mat3x4 mat4x2 mat4x3 mat4x4 vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 uvec2 uvec3 uvec4 uint\n sampler2D sampler3D samplerCube sampler2DShadow samplerCubeShadow sampler2DArray sampler2DArrayShadow isampler2D isampler3D isamplerCube isampler2DArray\n usampler2D usampler3D usamplerCube usampler2DArray struct layout centroid flat smooth precision invariant highp mediump lowp\n sample patch subroutine common partition active asm class union enum typedef template this resource goto inline noinline public static extern external\n interface long short double half fixed unsigned superp input output hvec2 hvec3 hvec4 fvec2 fvec3 fvec4 dvec2 dvec3 dvec4 filter sizeof cast namespace using`.split(/\\s+/));\nconst isIdent = (name: string): boolean =>\n IDENT.test(name) && !name.startsWith('gl_') && !name.includes('__') && !RESERVED.has(name) && !(SHADER_BUILTINS as readonly string[]).includes(name);\n\nexport type UniformKind = 'float' | 'vec2' | 'vec3' | 'vec4';\n\n/** The GLSL type of a `uniforms` value, or null when it is not one the layer takes (a number, 2–4 numbers, a hex colour). */\nexport function uniformType(v: unknown): UniformKind | null {\n if (typeof v === 'number') return Number.isFinite(v) ? 'float' : null;\n if (typeof v === 'string') return HEX.test(v) ? 'vec3' : null;\n if (Array.isArray(v) && v.length >= 2 && v.length <= 4 && v.every(n => typeof n === 'number' && Number.isFinite(n))) return `vec${v.length}` as UniformKind;\n return null;\n}\n\n/** The numbers a uniform value stands for (a colour is three channels in 0..1). */\nexport function uniformFloats(v: number | number[] | string): number[] {\n if (typeof v === 'number') return [v];\n if (typeof v === 'string') {\n const h = v.length === 4 ? v.slice(1).replace(/./g, c => c + c) : v.slice(1);\n return [0, 2, 4].map(i => parseInt(h.slice(i, i + 2), 16) / 255);\n }\n return v.slice();\n}\n\n/** One `uniform <type> <name>;` line for every uniform that has a usable name and value. */\nexport function uniformDecls(uniforms: Record<string, unknown>): string {\n let out = '';\n for (const [name, v] of Object.entries(uniforms ?? {})) {\n const type = uniformType(v);\n if (type && isIdent(name)) out += `uniform ${type} ${name};\\n`;\n }\n return out;\n}\n\n// the generated parts have line numbers of their own (100001 for the declarations, 200001 for main()), so an error in them is not mistaken for a line of the author's\nconst HEAD = `#version 300 es\n#line 100001\nprecision highp float;\nprecision highp int;\nuniform vec3 iResolution;\nuniform float iTime;\nuniform int iFrame;\nout vec4 pe_out;\n`;\nconst FOOT = (transparent: boolean): string => `\n#line 200001\nvoid main() { vec4 c = vec4(0.0, 0.0, 0.0, 1.0); mainImage(c, gl_FragCoord.xy); ${transparent ? 'pe_out = vec4(c.rgb * c.a, c.a);' : 'pe_out = vec4(c.rgb, 1.0);'} }\n`;\n\n/**\n * The whole fragment shader: our header, the declared uniforms, then the author's code starting at `#line 1`, so a compiler error names the\n * line the author wrote. `userLine` is the line (1-based) of the whole source where the author's first line sits.\n */\nexport function wrapFragment(user: string, uniforms: Record<string, unknown>, transparent: boolean): { source: string; userLine: number } {\n const prefix = HEAD + uniformDecls(uniforms) + '#line 1\\n';\n return { source: prefix + user + FOOT(transparent), userLine: prefix.split('\\n').length };\n}\n\n/** A compiler log as short sentences with the author's line numbers (ANGLE `ERROR: 0:2: …` and Mesa `0:2(10): error: …`); what it cannot read stays. */\nexport function glslErrors(log: string): string[] {\n const out: string[] = [];\n for (const raw of (log ?? '').split('\\n')) {\n const line = raw.trim();\n if (!line) continue;\n const angle = /^ERROR:\\s*\\d+:(\\d+):\\s*(.*)$/.exec(line);\n const mesa = /^\\d+:(\\d+)\\(\\d+\\):\\s*(?:error|warning):\\s*(.*)$/.exec(line);\n const hit = angle ?? mesa;\n if (!hit) { out.push(line); continue; }\n const n = Number(hit[1]);\n if (n >= 200001) out.push(`in the main() made for you, which calls mainImage: ${hit[2]} (write void mainImage(out vec4 fragColor, in vec2 fragCoord))`);\n else if (n >= 100001) out.push(`in the declarations made from your uniforms: ${hit[2]} (a uniform name GLSL does not allow, such as a reserved word?)`);\n else out.push(`line ${n}: ${hit[2]}`);\n }\n return out;\n}\n\nconst stripComments = (code: string): string => code.replace(/\\/\\*[\\s\\S]*?\\*\\//g, ' ').replace(/\\/\\/.*$/gm, ' ');\n\n/** What is wrong with a shader layer as written (static: nothing is compiled here). */\nexport function shaderProblems(spec: SequenceSpec): string[] {\n const out: string[] = [];\n const raw = spec as unknown as { fragment?: unknown; uniforms?: unknown; resolution?: unknown; transparent?: unknown };\n if (typeof raw.fragment !== 'string' || raw.fragment.trim() === '') {\n out.push('fragment is the GLSL of the shader: write { type: \\'shader\\', fragment: \\'void mainImage(out vec4 fragColor, in vec2 fragCoord) { fragColor = vec4(fragCoord / iResolution.xy, 0.0, 1.0); }\\' }');\n } else {\n const code = stripComments(raw.fragment);\n if (!/\\bvoid\\s+mainImage\\s*\\(/.test(code)) {\n out.push('there is no mainImage: write void mainImage(out vec4 fragColor, in vec2 fragCoord) { … } (Shadertoy style; the layer calls it for every pixel)' +\n (/\\bvoid\\s+main\\s*\\(/.test(code) ? ' and not main()' : ''));\n } else {\n if (/\\bvoid\\s+main\\s*\\(/.test(code)) out.push('main() is written for you (it calls your mainImage): remove your main()');\n if (!/\\bvoid\\s+mainImage\\s*\\(\\s*(?:out|inout)\\s+(?:(?:highp|mediump|lowp)\\s+)?vec4\\s+\\w+\\s*,\\s*(?:in\\s+)?(?:(?:highp|mediump|lowp)\\s+)?vec2\\s+\\w+\\s*\\)/.test(code)) {\n out.push('the signature of mainImage must be void mainImage(out vec4 fragColor, in vec2 fragCoord): the colour parameter is out (without out the layer draws black and nothing says why) and the position is a vec2');\n }\n }\n if (/^\\s*#version\\b/m.test(code)) out.push('#version is added for you (GLSL ES 3.00): remove it');\n if (/\\bgl_FragColor\\b/.test(code)) out.push('gl_FragColor does not exist here: write the colour into the fragColor parameter of mainImage');\n if (/\\btexture2D\\s*\\(|\\btextureCube\\s*\\(/.test(code)) out.push('texture2D is GLSL ES 1.00: this is GLSL ES 3.00, write texture(…) (and note that this version has no textures to read)');\n if (/\\b(?:varying|attribute)\\b/.test(code)) out.push('varying and attribute are not used in a fragment-only shader: remove them');\n for (const b of SHADER_BUILTINS) {\n if (new RegExp(`\\\\buniform\\\\s+\\\\w+\\\\s+${b}\\\\b`).test(code)) out.push(`${b} is declared for you: remove your uniform ${b}`);\n }\n const missing = SHADER_MISSING.filter(n => new RegExp(`\\\\b${n}\\\\b`).test(code));\n if (missing.length) out.push(`${missing.join(', ')} ${missing.length > 1 ? 'are' : 'is'} not provided in this version (the shader has iResolution, iTime, iFrame and your uniforms); the shader will not compile`);\n if (/\\bwhile\\s*\\(/.test(code)) out.push('a while loop may never end and a GPU cannot be stopped: use a for loop with a constant bound');\n const consts = new Set([...code.matchAll(/\\bconst\\s+(?:int|float|uint)\\s+(\\w+)/g)].map(m => m[1]!).concat([...code.matchAll(/#define\\s+(\\w+)/g)].map(m => m[1]!)));\n // a bound is constant when it is made of GLSL number literals (1, 1., .5, 1e2, 10u), consts, #defines and + - * / % ( )\n const constant = (expr: string): boolean => {\n const rest = expr.replace(/\\d+\\.?\\d*(?:[eE][-+]?\\d+)?[uUfF]?|\\.\\d+(?:[eE][-+]?\\d+)?[fF]?|[A-Za-z_]\\w*/g, t => (/^[A-Za-z_]/.test(t) && !consts.has(t) ? '?' : ''));\n return /^[\\s+\\-*/%()]*$/.test(rest);\n };\n for (const m of code.matchAll(/\\bfor\\s*\\(\\s*(?:int|float|uint)\\s+\\w+\\s*=\\s*[^;]+;\\s*\\w+\\s*(?:<=|>=|<|>|!=)\\s*([^;]+?)\\s*;/g)) {\n const bound = m[1]!;\n const ands = bound.split('&&'), ors = bound.split('||');\n const ok = ors.length > 1 ? ors.every(part => constant(part.split('&&')[0]!.replace(/<.*$/, ''))) : ands.length > 1 ? ands.some(constant) || constant(ands[0]!) : constant(bound);\n if (!ok) {\n out.push(`a for loop with the bound \"${bound}\" may run for ever: use a constant bound (a number or a const) and break out early`);\n break;\n }\n }\n }\n if (raw.uniforms !== undefined) {\n if (raw.uniforms === null || typeof raw.uniforms !== 'object' || Array.isArray(raw.uniforms)) {\n out.push('uniforms is an object of names to values: { speed: 1, tint: \\'#ff8040\\', pos: [0.5, 0.5] }');\n } else {\n for (const [name, v] of Object.entries(raw.uniforms as Record<string, unknown>)) {\n if (!isIdent(name)) out.push(`uniform \"${name}\" is not a name GLSL can use (letters, digits and _, not starting with a digit; not a GLSL keyword or reserved word such as sample, smooth, filter, input; not iResolution / iTime / iFrame)`);\n else if (uniformType(v) === null) out.push(`uniform \"${name}\": ${JSON.stringify(v)} is not a number, 2 to 4 numbers or a '#rrggbb' colour`);\n }\n }\n }\n if (raw.resolution !== undefined && !(typeof raw.resolution === 'number' && raw.resolution > 0 && raw.resolution <= 2)) {\n out.push(`resolution ${JSON.stringify(raw.resolution)} is not a number above 0 and at most 2 (0.5 draws a quarter of the pixels and scales up); 1 is used`);\n }\n if (raw.transparent !== undefined && typeof raw.transparent !== 'boolean') out.push('transparent is true or false (true uses the shader\\'s alpha; the default draws opaque)');\n return out;\n}\n","import { Sprite, Texture } from 'pixi.js';\nimport { Sequence } from './Base';\nimport { evaluateExpr } from '../expr/Parser';\nimport { buildScope } from '../expr/Scope';\nimport { describeLayer } from '../core/lint';\nimport { suggestName } from '../core/options';\nimport { acquireGl, currentGl, releaseGl } from '../core/glShared';\nimport { glslErrors, shaderProblems, uniformFloats, uniformType, wrapFragment } from '../core/shaderChecks';\nimport type { PathRouters } from '../core/Timeline';\nimport type { PropValue, ShaderSequenceSpec } from '../types';\n\nconst VERT = `#version 300 es\nvoid main() { vec2 p = vec2(float((gl_VertexID << 1) & 2), float(gl_VertexID & 2)); gl_Position = vec4(p * 2.0 - 1.0, 0.0, 1.0); }`;\n\n// A vector is an object with the keys '0', '1', … and not an array: a keyframe on 'uniforms.pos.1' addresses one component by its key\ntype UniformSlot = number | Record<string, number>;\n\n/**\n * `type: 'shader'`: a Shadertoy `mainImage` drawn into a picture. Like the `three` layer it is a sprite whose texture is a canvas that is redrawn\n * for every frame (`awaitFrameAt`, the one frame path playback and export share), but every shader layer draws with ONE shared WebGL2 context\n * and copies the result into a 2D canvas of its own, so the number of layers is not limited by the browser's number of contexts.\n */\nexport class ShaderSequence extends Sequence {\n private prog: WebGLProgram | null = null;\n private progGeneration = -1;\n private w = 1;\n private h = 1;\n private c2d: HTMLCanvasElement | null = null;\n private fps = 30;\n private failed = false;\n private warnedNoGl = false;\n private acquired = false;\n private warnedPaths = new Set<string>();\n /** The current value of every uniform: what keyframes move (`uniforms.speed`, `uniforms.tint.0`). */\n private carrier: Record<string, UniformSlot> = {};\n /** How many components each vector uniform has (a scalar is not listed). */\n private dims: Record<string, number> = {};\n\n private get shaderSpec(): ShaderSequenceSpec { return this.spec as unknown as ShaderSequenceSpec; }\n\n protected override pathRouters(): PathRouters {\n return { uniforms: (path) => this.resolveUniform(path) };\n }\n\n async build(): Promise<void> {\n const spec = this.shaderSpec;\n const who = describeLayer(spec);\n for (const m of shaderProblems(spec)) console.warn(`pixi-effects: ${who}: ${m}`);\n if (this.duration === undefined) this.duration = this.parent?.duration ?? this.root.duration;\n const scope = buildScope(this, this.parent, this.root) as unknown as Record<string, number>;\n const width = resolveDim(spec.width, scope) ?? this.parent?.width ?? this.root.width;\n const height = resolveDim(spec.height, scope) ?? this.parent?.height ?? this.root.height;\n const res = typeof spec.resolution === 'number' && spec.resolution > 0 && spec.resolution <= 2 ? spec.resolution : 1;\n this.w = Math.max(1, Math.round(width * res));\n this.h = Math.max(1, Math.round(height * res));\n this.fps = this.root.frameRate ?? 30;\n for (const [name, v] of Object.entries(spec.uniforms ?? {})) {\n if (uniformType(v) === null) continue;\n if (typeof v === 'number') this.carrier[name] = v;\n else { const f = uniformFloats(v); this.carrier[name] = Object.fromEntries(f.map((x, i) => [String(i), x])); this.dims[name] = f.length; }\n }\n this.c2d = document.createElement('canvas');\n this.c2d.width = this.w; this.c2d.height = this.h;\n const sprite = new Sprite({ texture: Texture.from(this.c2d), label: spec.name });\n sprite.width = width; sprite.height = height;\n this.target = sprite;\n this.intrinsicWidth = width; this.intrinsicHeight = height;\n this.buildFilters();\n if (typeof spec.fragment === 'string' && spec.fragment.trim() !== '') this.acquire();\n else this.failed = true;\n this.drawAt(0);\n }\n\n async awaitFrameAt(local: number): Promise<void> {\n this.drawAt(Math.max(0, Math.min(local, this.duration ?? local)));\n }\n\n /** Resolve `uniforms.speed` / `uniforms.tint.0` for the keyframe pipeline; a name or index nobody has is said once and dropped. */\n private resolveUniform(path: string): { target: object; prop: string } | null {\n const segs = path.split('.');\n const name = segs[0]!;\n const slot = this.carrier[name];\n const warn = (why: string) => {\n if (this.warnedPaths.has(path)) return;\n this.warnedPaths.add(path);\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: keyframe path uniforms.${path} ${why}; skipped`);\n };\n if (slot === undefined) {\n const guess = suggestName(name, Object.keys(this.carrier));\n warn(`names no uniform \"${name}\"${guess ? `; did you mean \"${guess}\"?` : ''} (declare it in uniforms with a starting value)`);\n return null;\n }\n if (typeof slot === 'number') {\n if (segs.length !== 1) { warn(`has more than a name, but \"${name}\" is a single number`); return null; }\n return { target: this.carrier, prop: name };\n }\n const n = this.dims[name]!;\n const index = segs.length === 2 ? Number(segs[1]) : NaN;\n if (!Number.isInteger(index) || index < 0 || index >= n) {\n warn(`must name a component of \"${name}\" (0 to ${n - 1}): 'uniforms.${name}.0'`);\n return null;\n }\n return { target: slot, prop: String(index) };\n }\n\n private acquire(): void {\n const sh = acquireGl();\n this.acquired = true;\n if (!sh) { this.noGl(); return; }\n this.compile();\n }\n\n private noGl(): void {\n this.failed = true;\n if (!this.warnedNoGl) {\n this.warnedNoGl = true;\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: this browser has no WebGL2, so the shader cannot run; the layer is drawn as a checkerboard`);\n }\n }\n\n private compile(): void {\n const sh = currentGl();\n if (!sh) { this.noGl(); return; }\n const { gl } = sh;\n const spec = this.shaderSpec;\n const make = (type: number, src: string) => { const s = gl.createShader(type)!; gl.shaderSource(s, src); gl.compileShader(s); return s; };\n const vs = make(gl.VERTEX_SHADER, VERT);\n const fs = make(gl.FRAGMENT_SHADER, wrapFragment(spec.fragment, spec.uniforms ?? {}, !!spec.transparent).source);\n const p = gl.createProgram()!;\n gl.attachShader(p, vs); gl.attachShader(p, fs); gl.linkProgram(p);\n const ok = gl.getProgramParameter(p, gl.LINK_STATUS);\n const log = ok ? '' : (gl.getShaderInfoLog(fs) || gl.getProgramInfoLog(p) || '');\n gl.deleteShader(vs); gl.deleteShader(fs);\n if (!ok) {\n gl.deleteProgram(p);\n this.failed = true;\n this.prog = null;\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: the fragment shader did not compile (the line numbers are the lines of your code):\\n${glslErrors(log).join('\\n')}\\nThe layer is drawn as a checkerboard until it is fixed.`);\n return;\n }\n this.prog = p;\n this.progGeneration = sh.generation;\n }\n\n private drawAt(local: number): void {\n const c = this.c2d;\n if (!c) return;\n const ctx2 = c.getContext('2d');\n if (!ctx2) return;\n let sh = this.failed ? null : currentGl();\n if (sh && this.progGeneration !== sh.generation) { this.compile(); sh = this.failed ? null : currentGl(); }\n if (!sh || !this.prog) {\n const s = 32; // a loud checkerboard, not a silent blank\n for (let y = 0; y < c.height; y += s) for (let x = 0; x < c.width; x += s) { ctx2.fillStyle = (((x / s) + (y / s)) & 1) ? '#ff00ff' : '#220022'; ctx2.fillRect(x, y, s, s); }\n } else {\n const { gl, canvas } = sh;\n if (canvas.width !== this.w || canvas.height !== this.h) { canvas.width = this.w; canvas.height = this.h; } // changing it empties the buffer: only when this layer's size differs\n gl.viewport(0, 0, this.w, this.h);\n gl.useProgram(this.prog);\n gl.uniform3f(gl.getUniformLocation(this.prog, 'iResolution'), this.w, this.h, 1);\n gl.uniform1f(gl.getUniformLocation(this.prog, 'iTime'), local);\n gl.uniform1i(gl.getUniformLocation(this.prog, 'iFrame'), Math.round(local * this.fps));\n for (const [name, v] of Object.entries(this.carrier)) {\n const loc = gl.getUniformLocation(this.prog, name);\n if (typeof v === 'number') { gl.uniform1f(loc, v); continue; }\n const n = this.dims[name]!;\n const comps = Array.from({ length: n }, (_, i) => v[String(i)] ?? 0);\n if (n === 2) gl.uniform2fv(loc, comps);\n else if (n === 3) gl.uniform3fv(loc, comps);\n else gl.uniform4fv(loc, comps);\n }\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n ctx2.clearRect(0, 0, c.width, c.height);\n ctx2.drawImage(canvas, 0, 0);\n }\n (this.target as Sprite | null)?.texture.source.update();\n }\n\n override destroy(): void {\n const texture = (this.target as Sprite | null)?.texture;\n if (this.prog) {\n const sh = currentGl();\n if (sh && this.progGeneration === sh.generation) sh.gl.deleteProgram(this.prog);\n this.prog = null;\n }\n if (this.acquired) { this.acquired = false; releaseGl(); }\n if (this.c2d) { this.c2d.width = this.c2d.height = 1; this.c2d = null; }\n super.destroy();\n texture?.destroy(true); // the canvas source is this layer's own\n }\n}\n\nfunction resolveDim(v: PropValue | undefined, scope: Record<string, number>): number | undefined {\n if (v === undefined) return undefined;\n if (typeof v === 'number') return v;\n return evaluateExpr(v, scope);\n}\n","import { Sprite, Texture } from 'pixi.js';\nimport { Sequence } from './Base';\nimport { evaluateExpr } from '../expr/Parser';\nimport { buildScope } from '../expr/Scope';\nimport { describeLayer } from '../core/lint';\nimport { suggestName } from '../core/options';\nimport type { PathRouters } from '../core/Timeline';\nimport type { CanvasInfo, CanvasSequenceSpec, PropValue } from '../types';\n\n/** What the determinism check found: the moments whose two pictures differ (channel values that differ, the largest difference out of 255; -1 when only a hash was compared) and the usual time of one draw. */\nexport interface CanvasCheck { differs: Array<{ t: number; pixels: number; maxDiff: number }>; drawMs: number; /** Moments where `draw` threw (or the layer has no working draw): the picture there is a checkerboard, which is not a picture that is the same twice. */ threw: number[] }\n\nconst MAX_SIZE = 8192;\nconst MIN_RESOLUTION = 0.25;\nconst MAX_RESOLUTION = 4;\n/** What makes a picture depend on more than the time. */\nconst NOT_PURE = /\\bMath\\s*\\.\\s*random\\s*\\(|\\bDate\\s*\\.\\s*now\\s*\\(|\\bperformance\\s*\\.\\s*now\\s*\\(|\\bnew\\s+Date\\s*\\(/;\n\n/** A small seeded generator (mulberry32): the same seed gives the same sequence. */\nfunction seeded(seed: number): () => number {\n let a = seed >>> 0;\n return () => {\n a = (a + 0x6d2b79f5) >>> 0;\n let t = a;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n/** An offscreen canvas whose context is made for reading: the CPU rasteriser, which draws the first time what it draws every time after (a GPU canvas used as a source can differ the first time). */\nfunction offscreen(width: number, height: number): HTMLCanvasElement {\n const c = document.createElement('canvas');\n c.width = Math.max(1, Math.round(width)); c.height = Math.max(1, Math.round(height));\n c.getContext('2d', { willReadFrequently: true }); // the first getContext fixes the kind: later ones get this context\n return c;\n}\n\n/**\n * `type: 'canvas'`: a picture drawn by a function of the time into a canvas of the layer's own. Like the shader layer it is a sprite whose texture is a canvas redrawn\n * for every frame (`awaitFrameAt`, the one frame path playback and export share). The canvas is cleared before every call and nothing a call sets survives into the next\n * (`save` / `restore`), so the same time and the same `params` give the same pixels. It cannot see or paint on what is below it in the stack.\n */\nexport class CanvasSequence extends Sequence {\n private canvas: HTMLCanvasElement | null = null;\n private w = 1;\n private h = 1;\n private res = 1;\n private fps = 30;\n private layerW = 1;\n private layerH = 1;\n private seed = 0;\n private smoothing = true;\n private drawFn: CanvasSequenceSpec['draw'] | null = null;\n private state: unknown;\n /** The current value of every param: what keyframes move (`params.amount`). */\n private carrier: Record<string, number> = {};\n private failed = false;\n private warnedDraw = false;\n private warnedPaths = new Set<string>();\n private lastKey = '';\n private lastLocal = 0;\n\n private get canvasSpec(): CanvasSequenceSpec { return this.spec as unknown as CanvasSequenceSpec; }\n\n protected override pathRouters(): PathRouters {\n return { params: (path) => this.resolveParam(path) };\n }\n\n async build(): Promise<void> {\n const spec = this.canvasSpec;\n const who = describeLayer(spec);\n if (this.duration === undefined) this.duration = this.parent?.duration ?? this.root.duration;\n const scope = buildScope(this, this.parent, this.root) as unknown as Record<string, number>;\n this.layerW = this.size('width', spec.width, scope, this.parent?.width ?? this.root.width, who);\n this.layerH = this.size('height', spec.height, scope, this.parent?.height ?? this.root.height, who);\n const r = spec.resolution;\n if (r === undefined) this.res = 1;\n else if (typeof r === 'number' && Number.isFinite(r) && r >= MIN_RESOLUTION && r <= MAX_RESOLUTION) this.res = r;\n else {\n this.res = typeof r === 'number' && Number.isFinite(r) ? Math.min(MAX_RESOLUTION, Math.max(MIN_RESOLUTION, r)) : 1;\n console.warn(`pixi-effects: ${who}: resolution must be a number from ${MIN_RESOLUTION} to ${MAX_RESOLUTION} (canvas pixels per layer pixel), got ${JSON.stringify(r)}: ${this.res} is used`);\n }\n const longest = Math.max(this.layerW, this.layerH);\n if (longest * this.res > MAX_SIZE) { // a canvas wider than the GPU's texture limit would be blank or fail without a word\n const fitted = MAX_SIZE / longest;\n console.warn(`pixi-effects: ${who}: ${this.layerW}×${this.layerH} at resolution ${this.res} would be a canvas of ${Math.round(longest * this.res)} pixels, more than ${MAX_SIZE}: resolution ${Math.round(fitted * 1000) / 1000} is used (lower the size or the resolution)`);\n this.res = fitted;\n }\n this.w = Math.max(1, Math.round(this.layerW * this.res));\n this.h = Math.max(1, Math.round(this.layerH * this.res));\n this.fps = this.root.frameRate ?? 30;\n this.seed = typeof spec.seed === 'number' && Number.isFinite(spec.seed) ? Math.floor(spec.seed) : 0;\n this.smoothing = spec.smoothing !== false;\n\n const params = spec.params;\n if (params !== undefined) {\n if (params === null || typeof params !== 'object' || Array.isArray(params)) {\n console.warn(`pixi-effects: ${who}: params must be an object of numbers, got ${JSON.stringify(params)}: ignored`);\n } else {\n const bad: string[] = [];\n for (const [k, v] of Object.entries(params)) {\n if (typeof v === 'number' && Number.isFinite(v)) this.carrier[k] = v; else bad.push(`\"${k}\"`);\n }\n if (bad.length) console.warn(`pixi-effects: ${who}: params ${bad.join(', ')} ${bad.length > 1 ? 'are' : 'is'} not a number, so ${bad.length > 1 ? 'they are' : 'it is'} ignored (params holds numbers that keyframes can animate as 'params.<name>')`);\n }\n }\n\n if (typeof spec.draw === 'function') {\n this.drawFn = spec.draw;\n if (NOT_PURE.test(spec.draw.toString())) {\n console.warn(`pixi-effects: ${who}: draw calls Math.random, Date.now, performance.now or new Date, so it is not deterministic: the same frame would draw differently in playback, in a seek and in an export. Use info.random() (seeded), or derive the value from t`);\n }\n } else {\n this.failed = true;\n console.warn(`pixi-effects: ${who}: a canvas layer needs draw: (ctx, t, info) => { … } (a function that draws the picture at time t); the layer is drawn as a checkerboard`);\n }\n\n this.canvas = document.createElement('canvas');\n this.canvas.width = this.w; this.canvas.height = this.h;\n const sprite = new Sprite({ texture: Texture.from(this.canvas), label: spec.name });\n if (!this.smoothing) (sprite.texture.source as unknown as { scaleMode: string }).scaleMode = 'nearest'; // the picture is this layer's own: hard pixels when it is scaled up too\n sprite.width = this.layerW; sprite.height = this.layerH;\n this.target = sprite;\n this.intrinsicWidth = this.layerW; this.intrinsicHeight = this.layerH;\n this.buildFilters();\n\n if (typeof spec.setup === 'function' && !this.failed) {\n try { this.state = await spec.setup(this.info(0)); }\n catch (e) { this.failed = true; this.say(`setup failed: ${e instanceof Error ? e.message : String(e)}; the layer is drawn as a checkerboard`); }\n }\n this.drawAt(0);\n }\n\n async awaitFrameAt(local: number): Promise<void> {\n this.drawAt(Math.max(0, Math.min(local, this.duration ?? local)));\n }\n\n private size(name: 'width' | 'height', v: PropValue | undefined, scope: Record<string, number>, fallback: number, who: string): number {\n if (v === undefined) return fallback;\n const n = typeof v === 'number' ? v : evaluateExpr(v, scope);\n if (!Number.isFinite(n) || n < 1) { console.warn(`pixi-effects: ${who}: ${name} must be a number of pixels of at least 1 (or an expression), got ${JSON.stringify(v)}: ${fallback} is used`); return fallback; }\n if (n > MAX_SIZE) { console.warn(`pixi-effects: ${who}: ${name} ${n} is more than ${MAX_SIZE}: ${MAX_SIZE} is used`); return MAX_SIZE; }\n return n;\n }\n\n private say(why: string): void {\n if (this.warnedDraw) return;\n this.warnedDraw = true;\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: ${why}`);\n }\n\n private info(local: number): CanvasInfo {\n const duration = this.duration ?? 0;\n const start = this.absoluteStart ?? this.at;\n return {\n frame: Math.round(local * this.fps), duration, progress: duration > 0 ? local / duration : 0,\n width: this.layerW, height: this.layerH, resolution: this.res, frameRate: this.fps,\n params: { ...this.carrier }, state: this.state, random: seeded(this.seed),\n start, time: start + local, canvas: offscreen,\n };\n }\n\n /** Resolve `params.amount` for the keyframe pipeline; a name nobody declared is said once and dropped. */\n private resolveParam(path: string): { target: object; prop: string } | null {\n if (path in this.carrier && !path.includes('.')) return { target: this.carrier, prop: path };\n if (!this.warnedPaths.has(path)) {\n this.warnedPaths.add(path);\n const guess = suggestName(path.split('.')[0]!, Object.keys(this.carrier));\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: keyframe path params.${path} names no param \"${path}\"${guess ? `; did you mean \"${guess}\"?` : ''} (declare it in params with a starting value); skipped`);\n }\n return null;\n }\n\n private drawAt(local: number): void {\n const c = this.canvas;\n if (!c) return;\n const ctx = c.getContext('2d');\n if (!ctx) { this.say('this browser gave no 2D context for the layer\\'s canvas, so nothing can be drawn'); return; }\n const key = `${local}|${this.absoluteStart ?? this.at}|${JSON.stringify(this.carrier)}`; // the start is part of what info says: the build draws before the layer is bound to its clock\n if (key === this.lastKey) return; // the same frame again: nothing changes\n this.lastKey = key;\n this.lastLocal = local;\n if (!this.paint(ctx, c, local)) this.lastKey = ''; // a draw that threw: try this frame again next time\n (this.target as Sprite | null)?.texture.source.update();\n }\n\n /** Draws one frame of the layer into `ctx` (the layer's own canvas, or the scratch one of the determinism check). false: `draw` threw. */\n private paint(ctx: CanvasRenderingContext2D, c: HTMLCanvasElement, local: number): boolean {\n // A draw that does not balance its own save() must not leak into the next frame: where the context has `reset()` it is reset (state, transform, clip, the saved stack)\n const hasReset = 'reset' in ctx && typeof (ctx as { reset?: unknown }).reset === 'function';\n const fresh = (): void => { if (hasReset) (ctx as { reset(): void }).reset(); else { ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.clearRect(0, 0, c.width, c.height); } };\n fresh();\n if (this.failed || !this.drawFn) { this.checkerboard(ctx, c); return true; }\n if (!hasReset) ctx.save();\n let ok = true;\n try {\n ctx.scale(this.res, this.res);\n ctx.imageSmoothingEnabled = this.smoothing;\n this.drawFn(ctx, local, this.info(local));\n } catch (e) {\n if (!hasReset) { ctx.restore(); ctx.save(); }\n fresh();\n this.say(`draw threw at ${local.toFixed(2)} s: ${e instanceof Error ? e.message : String(e)}; that frame is drawn as a checkerboard (the other frames are tried again)`);\n this.checkerboard(ctx, c);\n ok = false;\n }\n if (!hasReset) ctx.restore();\n return ok;\n }\n\n /**\n * Draws each of `times` in two orders and returns the moments where the pictures differ (a draw that uses Math.random, the clock or state that outlives the call), with how much\n * (channel values that differ, the largest difference out of 255), and how long a draw took. One draw of every moment comes first and is thrown away: a browser can draw a canvas\n * made in `setup` differently the first time it is used as a source, and a cache a draw fills on its first call is fine. The layer's own canvas is not touched (everything is drawn in a scratch canvas).\n * A layer that failed, or a draw that throws, is reported in `threw`.\n */\n checkDeterminism(times: number[]): CanvasCheck {\n const none: CanvasCheck = { differs: [], drawMs: 0, threw: [] };\n if (!this.canvas) return none;\n if (this.failed || !this.drawFn) return { ...none, threw: [...times] };\n // A scratch canvas of the same size that is read from the start (`willReadFrequently`: drawn by the CPU): reading the pixels of the layer's own canvas a few times would make\n // Chrome move it from the GPU to the CPU in the middle of the check, and the two rasterisers anti-alias a few pixels differently, which is not the author's fault.\n const scratch = document.createElement('canvas');\n scratch.width = this.w; scratch.height = this.h;\n const ctx = scratch.getContext('2d', { willReadFrequently: true });\n if (!ctx) return none;\n // Each moment is drawn in the order given and again in the opposite order, and the two pictures of a moment are compared pixel by pixel (the first pass keeps its pixels while the\n // memory is reasonable, else only a hash of them). Two draws in a row at one time would miss state that builds up from call to call (an integrator that moves by the time since the last call).\n const keep = this.w * this.h * 4 * times.length <= 96e6;\n const read = (): Uint8ClampedArray => ctx.getImageData(0, 0, scratch.width, scratch.height).data;\n const hash = (d: Uint8ClampedArray): number => { let h = 0x811c9dc5; for (let i = 0; i < d.length; i++) { h ^= d[i]!; h = Math.imul(h, 0x01000193); } return h >>> 0; };\n const ms: number[] = [];\n const threw = new Set<number>();\n const once = (t: number, timed: boolean): Uint8ClampedArray => {\n const from = performance.now();\n if (!this.paint(ctx, scratch, t)) threw.add(t);\n if (timed) { ctx.getImageData(0, 0, 1, 1); ms.push(performance.now() - from); } // a canvas keeps its calls until something reads it: one pixel makes the browser do the drawing, so the time is the draw's\n return read();\n };\n for (const t of times) once(t, false); // the warm-up\n const first = times.map(t => { const d = once(t, true); return keep ? d.slice() : hash(d); });\n const second = [...times].reverse().map(t => once(t, false)).reverse();\n scratch.width = scratch.height = 1; // let the memory go\n const differs: CanvasCheck['differs'] = [];\n times.forEach((t, i) => {\n const a = first[i]!, b = second[i]!;\n if (typeof a === 'number') { if (a !== hash(b)) differs.push({ t, pixels: -1, maxDiff: -1 }); return; }\n let pixels = 0, maxDiff = 0;\n for (let k = 0; k < a.length; k++) { const d = Math.abs(a[k]! - b[k]!); if (d) { pixels++; if (d > maxDiff) maxDiff = d; } }\n if (pixels) differs.push({ t, pixels, maxDiff });\n });\n ms.sort((x, y) => x - y);\n return { differs: differs.filter(d => !threw.has(d.t)), drawMs: ms.length ? ms[Math.floor(ms.length / 2)]! : 0, threw: times.filter(t => threw.has(t)) };\n }\n\n private checkerboard(ctx: CanvasRenderingContext2D, c: HTMLCanvasElement): void {\n const s = 32; // a loud checkerboard, not a silent blank\n for (let y = 0; y < c.height; y += s) for (let x = 0; x < c.width; x += s) { ctx.fillStyle = (((x / s) + (y / s)) & 1) ? '#ff00ff' : '#220022'; ctx.fillRect(x, y, s, s); }\n }\n\n override destroy(): void {\n const texture = (this.target as Sprite | null)?.texture;\n if (this.canvas) { this.canvas.width = this.canvas.height = 1; this.canvas = null; }\n super.destroy();\n texture?.destroy(true); // the canvas source is this layer's own\n }\n}\n","import { ImageSequence } from '../sequences/Image';\nimport { TextSequence } from '../sequences/Text';\nimport { AudioSequence } from '../sequences/Audio';\nimport { VideoSequence } from '../sequences/Video';\nimport { ShapeSequence } from '../sequences/Shape';\nimport { NullSequence } from '../sequences/Null';\nimport { CameraSequence } from '../space/CameraSequence';\nimport { LightSequence } from '../space/LightSequence';\nimport { ShaderSequence } from '../sequences/Shader';\nimport { CanvasSequence } from '../sequences/Canvas';\nimport type { Sequence } from '../sequences/Base';\nimport { expandSpans } from '../text/spans';\nimport { buildScope } from '../expr/Scope';\nimport type { SequenceSpec, CompositionShape, TextSequenceSpec } from '../types';\n\nlet _CompositionSequence: typeof import('../sequences/Composition').CompositionSequence | null = null;\nasync function getCompositionSequence() {\n if (!_CompositionSequence) {\n _CompositionSequence = (await import('../sequences/Composition')).CompositionSequence;\n }\n return _CompositionSequence;\n}\n\nlet _SpansSequence: typeof import('../sequences/Spans').SpansSequence | null = null;\nasync function getSpansSequence() {\n if (!_SpansSequence) _SpansSequence = (await import('../sequences/Spans')).SpansSequence;\n return _SpansSequence;\n}\n\nexport type SequenceCtor = { new (spec: SequenceSpec, parent: CompositionShape | null, root: CompositionShape): Sequence };\n\nconst staticTypes: Partial<Record<SequenceSpec['type'], SequenceCtor>> = {\n image: ImageSequence as unknown as SequenceCtor,\n text: TextSequence as unknown as SequenceCtor,\n audio: AudioSequence as unknown as SequenceCtor,\n video: VideoSequence as unknown as SequenceCtor,\n shape: ShapeSequence as unknown as SequenceCtor,\n camera: CameraSequence as unknown as SequenceCtor,\n light: LightSequence as unknown as SequenceCtor,\n shader: ShaderSequence as unknown as SequenceCtor,\n canvas: CanvasSequence as unknown as SequenceCtor,\n null: NullSequence as unknown as SequenceCtor,\n};\n\n// Externally-registered sequence types (e.g. `pixi-effects/three`).\n// tsup splits shared code into common chunks, so every entry point sees this\n// single module instance.\nconst registry: Record<string, SequenceCtor> = {};\n\n/** Register an external sequence type. Later registrations overwrite earlier ones. */\nexport function registerSequenceType(type: string, ctor: SequenceCtor): void {\n registry[type] = ctor;\n}\n\nexport async function buildSequenceTree(\n specs: SequenceSpec[],\n parent: CompositionShape | null,\n root: CompositionShape,\n /** Filled one by one as each layer is built: a layer's setup (a `three` layer) can find the layers listed before it. */\n out: Sequence[] = [],\n): Promise<Sequence[]> {\n for (let spec of specs) {\n let Cls: SequenceCtor | undefined = staticTypes[spec.type] ?? registry[spec.type];\n // a text layer with `spans` stands for a group of text layers, one per piece (src/text/spans.ts)\n if (spec.type === 'text' && (spec as { spans?: unknown }).spans !== undefined) {\n // the layer's own scope (W, H, GW, GH, the declared variables): the style's expressions are resolved for measuring\n spec = expandSpans(spec as TextSequenceSpec, undefined, buildScope({ intrinsicWidth: 0, intrinsicHeight: 0, at: spec.at, duration: spec.duration }, parent, root) as unknown as Record<string, number>);\n Cls = (await getSpansSequence()) as unknown as SequenceCtor;\n }\n if (!Cls && spec.type === 'composition') {\n Cls = (await getCompositionSequence()) as unknown as SequenceCtor;\n }\n if (!Cls) {\n console.warn(`pixi-effects: unknown sequence type \"${(spec as { type: string }).type}\"`);\n await root.onLayerBuilt?.(); // it was counted: count it done, or the bar would stop short\n continue;\n }\n const seq = new Cls(spec, parent, root);\n await seq.build();\n await root.onLayerBuilt?.();\n if (seq.duration === undefined) {\n seq.duration = parent?.duration ?? root.duration;\n }\n out.push(seq);\n }\n return out;\n}\n"]}
|