@weasel-js/animator 1.10.0 → 1.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/axisNames.ts","../src/engine/axes.ts","../src/target.ts","../src/targetTable.ts","../src/colorRegistry.ts","../src/observe.ts","../src/loop.ts","../src/stagger.ts","../src/supervisor.ts","../src/timeline/booking.ts","../src/timeline/fireEvents.ts","../src/engine/offsets.ts","../src/timeline/targetStops.ts","../src/timeline/sampleTrack.ts","../src/timeline/trackHolds.ts","../src/timeline/createTimeline.ts","../src/engine/decay.ts","../src/engine/holds.ts","../src/engine/holdAnimation.ts","../src/engine/integrator.ts","../src/engine/physicsAnimation.ts","../src/engine/springRest.ts","../src/engine/springVoices.ts","../src/engine/offsetPhysics.ts","../src/engine/offsetTween.ts","../src/engine/completions.ts","../src/engine/wakes.ts","../src/engine/schedule.ts","../src/engine/roster.ts","../src/engine/table.ts","../src/engine/tweenAnimation.ts","../src/engine/animatorApi.ts","../src/engine/holdVoices.ts","../src/engine/lanes.ts","../src/engine/codec.ts","../src/engine/frame.ts","../src/engine/core.ts","../src/useAnimator.ts","../src/slew.ts","../src/colorInterpolate.ts","../src/colorHelpers.ts","../src/colorCycle.ts","../src/colorArrays.ts","../src/timeline/clip.ts","../src/rig/mirrorPose.ts","../src/rig/resolveSkeleton.ts","../src/rig/types.ts","../src/rig/skeletonAxes.ts","../src/rig/solveIk.ts","../src/rig/skin.ts","../src/rig/autoSkin.ts","../src/rig/skeletonEdits.ts","../src/rig/weightEdits.ts"],"names":["states","keys","axes","keysPatch","createEmitter","sum","group","resolveEasing","share","easeOut","stale","tweenPatch","fnPatch","settle","springPatch","patch","table","TAU","mat3","iterations"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * What an axis of a `T` goes by: a field of a plain object, or a path into a nested one, as a\n * pose's `knee` and `knee.rotation` are. `never` for a number or an array, whose axes have\n * indexes only.\n */\nexport type AxisName<T> = T extends number | readonly unknown[]\n ? never\n : T extends object\n ? { [K in keyof T & string]: NonNullable<T[K]> extends number ? K : K | `${K}.${string}` }[keyof T & string]\n : string;\n\n/** One of a target's axes: its index, or its name where the target's axes have names. */\nexport type AxisRef<T = unknown> = number | AxisName<T>;\n\nconst LISTED = 8;\n\n/**\n * The indexes `wanted` stands for among `count` axes named `names`. A name answers the axis\n * called exactly that, or every axis under it as a path, in axis order. `what` opens the error\n * for an index out of range or a name nothing answers to.\n */\nexport function axisIndexes(\n axes: { readonly count: number; readonly names?: readonly string[] },\n wanted: readonly (number | string)[],\n what = 'animator: `axes`',\n): number[] {\n const { count, names } = axes;\n const out: number[] = [];\n for (const w of wanted) {\n if (typeof w === 'number') {\n if (!Number.isInteger(w) || w < 0 || w >= count) throw new Error(`${what} names axis ${w} of a target with ${count}`);\n out.push(w);\n continue;\n }\n if (!names) throw new Error(`${what} names \"${w}\" on a target whose axes have no names`);\n const before = out.length;\n const under = `${w}.`;\n for (let i = 0; i < names.length; i++) {\n if (names[i] === w || names[i]!.startsWith(under)) out.push(i);\n }\n if (out.length === before) {\n const some = names.slice(0, LISTED).map((n) => `\"${n}\"`).join(', ');\n throw new Error(`${what} names \"${w}\", and the target's axes are ${some}${names.length > LISTED ? ', …' : ''}`);\n }\n }\n return out;\n}\n","import { isPlainObject } from '@weasel-js/registry';\n\n/** How a value maps to the flat numbers blits moves, and back. */\nexport interface Axes<T> {\n count: number;\n /** Equal for two values exactly when their axes line up one for one. */\n shape: string;\n /** A name for each axis where the value has them: a plain object's fields. */\n names?: readonly string[];\n to(v: T): number[];\n /** The value whose `count` axes start at `at` in `a`. */\n from(a: ArrayLike<number>, at?: number): T;\n /** `v` with `delta` added axis by axis. */\n add(v: T, delta: ArrayLike<number>): T;\n /** Puts `v`'s axes into `out` from `at`. */\n write(v: T, out: Float64Array | Float32Array | number[], at: number): void;\n}\n\ntype Fields = Record<string, number>;\ntype Buffer = Float64Array | Float32Array | number[];\n\n/**\n * `add` and `write` for an object of up to four fields, each field read where the code names\n * it. A loop over the keys reads every field at one place, and a place that sees a second key\n * falls back to a lookup several times slower: 10k reads of `{ x, y }` took 1.4 ms through the\n * loop and 0.9 ms through hand-written axes.\n */\nfunction fieldByField(keys: readonly string[]): { add(v: Fields, d: ArrayLike<number>): Fields; write(v: Fields, o: Buffer, at: number): void } | null {\n const [a, b, c, e] = keys as [string, string, string, string];\n switch (keys.length) {\n case 1: return {\n add: (v, d) => ({ [a]: v[a]! + d[0]! }),\n write: (v, o, at) => { o[at] = v[a]!; },\n };\n case 2: return {\n add: (v, d) => ({ [a]: v[a]! + d[0]!, [b]: v[b]! + d[1]! }),\n write: (v, o, at) => { o[at] = v[a]!; o[at + 1] = v[b]!; },\n };\n case 3: return {\n add: (v, d) => ({ [a]: v[a]! + d[0]!, [b]: v[b]! + d[1]!, [c]: v[c]! + d[2]! }),\n write: (v, o, at) => { o[at] = v[a]!; o[at + 1] = v[b]!; o[at + 2] = v[c]!; },\n };\n case 4: return {\n add: (v, d) => ({ [a]: v[a]! + d[0]!, [b]: v[b]! + d[1]!, [c]: v[c]! + d[2]!, [e]: v[e]! + d[3]! }),\n write: (v, o, at) => { o[at] = v[a]!; o[at + 1] = v[b]!; o[at + 2] = v[c]!; o[at + 3] = v[e]!; },\n };\n default: return null;\n }\n}\n\n/** The axes of `sample`'s shape: a number, a plain array of numbers, or a plain object whose\n * fields are all numbers. Null for any other shape, which blits cannot move. */\nexport function axesOf<T>(sample: T): Axes<T> | null {\n if (typeof sample === 'number') {\n return {\n count: 1,\n shape: 'number',\n to: (v) => [v as number],\n from: (a, at = 0) => a[at] as T,\n add: (v, delta) => ((v as number) + delta[0]!) as T,\n write: (v, out, at) => { out[at] = v as number; },\n };\n }\n if (Array.isArray(sample)) {\n if (!sample.every((x) => typeof x === 'number')) return null;\n return {\n count: sample.length,\n shape: `array:${sample.length}`,\n to: (v) => (v as number[]).slice(),\n from: (a, at = 0) => {\n const out = new Array<number>(sample.length);\n for (let i = 0; i < out.length; i++) out[i] = a[at + i]!;\n return out as T;\n },\n add: (v, delta) => {\n const out = new Array<number>(sample.length);\n for (let i = 0; i < out.length; i++) out[i] = (v as number[])[i]! + delta[i]!;\n return out as T;\n },\n write: (v, out, at) => {\n for (let i = 0; i < sample.length; i++) out[at + i] = (v as number[])[i]!;\n },\n };\n }\n if (!isPlainObject(sample)) return null;\n const keys = Object.keys(sample).sort();\n if (keys.length === 0 || !keys.every((k) => typeof sample[k] === 'number')) return null;\n return {\n count: keys.length,\n shape: `object:${JSON.stringify(keys)}`,\n names: keys,\n to: (v) => keys.map((k) => (v as Record<string, number>)[k]!),\n from: (a, at = 0) => {\n const out: Record<string, number> = {};\n for (let i = 0; i < keys.length; i++) out[keys[i]!] = a[at + i]!;\n return out as T;\n },\n ...(fieldByField(keys) ?? {\n add: (v: Fields, delta: ArrayLike<number>) => {\n const out: Fields = {};\n for (let i = 0; i < keys.length; i++) out[keys[i]!] = v[keys[i]!]! + delta[i]!;\n return out;\n },\n write: (v: Fields, out: Buffer, at: number) => {\n for (let i = 0; i < keys.length; i++) out[at + i] = v[keys[i]!]!;\n },\n }) as unknown as Pick<Axes<T>, 'add' | 'write'>,\n };\n}\n","import { axisIndexes, type AxisRef } from './axisNames';\nimport { axesOf } from './engine/axes';\nimport type { LaneColumns, Reader } from './engine/lanes';\n\n/** How a target's value maps to the flat numbers an animation moves, and back. */\nexport interface TargetAxes<T> {\n count: number;\n to(value: T): number[];\n from(axes: ArrayLike<number>): T;\n /** Indexes of axes that are angles in radians. An animation starting from one takes the short\n * way round to its destination. */\n angles?: readonly number[];\n /** A name for each axis, in the order `to` answers them, for `axes` options to go by. A dot\n * makes a path: `knee.rotation` is also reached as `knee`, with the joint's other axes. */\n names?: readonly string[];\n /** Optional. `value` with `delta` added axis by axis: what `from` answers for `to(value)`\n * plus `delta`, built with no array between. A read of a moving target goes through it. */\n add?(value: T, delta: ArrayLike<number>): T;\n /** Optional. Puts `value`'s axes into `out` from `at`: what `to` answers, with no array\n * built. `readInto` goes through it. */\n write?(value: T, out: AxisBuffer, at: number): void;\n}\n\n/** Somewhere a target's axes are written as numbers. */\nexport type AxisBuffer = Float64Array | Float32Array | number[];\n\n/** What {@link createTarget} takes. */\nexport interface TargetOptions<T> {\n /** The committed value: what shows when nothing is animating. */\n get(): T;\n /** Commits a value: an animation's destination as it starts, and where a canceled one stopped. */\n set(value: T): void;\n /** How `T` maps to numbers. Default: a number, an array of numbers, or a plain object whose\n * fields are all numbers, read from `get()` when the target is made. */\n axes?: TargetAxes<T>;\n /** Called once a frame, after the frame's animations, with the value to show: on every frame\n * the target is moving, as an animation starts on it or is redirected, and once more as it\n * comes to rest. Omit for a target whose reader\n * calls `read()` itself. */\n show?(value: T): void;\n /** Called once a frame, after every target that was shown that frame: for a table that\n * publishes many targets at once. Targets passing the same function share one call. */\n publish?(): void;\n}\n\n/**\n * One value an animator can move. Pass it as `target` to `tween`, `spring`, `physics` or `decay`.\n *\n * An animation on a target commits its destination when it starts and contributes only what is\n * left to travel, so several on one target add: a second started mid-flight bends the motion\n * toward its own destination and neither cancels the other.\n */\nexport interface Target<T> {\n /** The value to show: the committed value plus what every running animation has left to travel. */\n read(): T;\n /**\n * As `read`, as numbers: writes the value's `axisCount` axes into `out` from `at` (default 0),\n * in the order the target's `axes.to` answers them. For a reader of many targets that wants\n * the numbers and no value built for each.\n */\n readInto(out: AxisBuffer, at?: number): void;\n /** How many axes `readInto` writes. */\n readonly axisCount: number;\n /** How its value maps to numbers. */\n readonly axes: TargetAxes<T>;\n /**\n * The indexes of the axes `axes` names, in the order named: what a hold's or a track's `axes`\n * resolves through. A name is one of `axes.names`, or a path over several of them; an index\n * passes through. Throws on a name or an index the target has no axis for.\n */\n axisIndexes(axes: readonly AxisRef<T>[]): number[];\n /** The committed value: what shows once nothing is moving it. */\n committed(): T;\n /** Writes the committed value. Animations moving the target go on adding to the new one. */\n commit(value: T): void;\n /** Whether any animation is moving it. */\n readonly active: boolean;\n /**\n * Stops every animation moving it. Each commits where it was, so the value on screen stays,\n * unless `commit` is false: then the committed value is left as it stands and the target\n * shows it. Pass false after something else has written the committed value mid-flight.\n */\n stop(opts?: { commit?: boolean }): void;\n}\n\n/** The animator moving a target, as the target reaches it. */\nexport interface TargetOwner {\n /** Cancels every animation on `s`. */\n stop(s: TargetState): void;\n /** Reads `s`'s voices again now, where what they read from outside has changed. */\n reread(s: TargetState): void;\n /** The voices of `table`'s rows as the last frame read them; null where none is moving. */\n columns(table: RowTable): LaneColumns | null;\n /** Says `s.adjust` holds something, for the next frame's reading to clear. */\n adjusted(s: TargetState): void;\n}\n\n/** What an animator needs of a table of targets, to show its rows in one pass. */\nexport interface RowTable {\n /** Says row `index` shows something the pass over the table's columns will not give: an\n * animation started, stopped, or was redirected since the last frame, or it has a hold. */\n mark(index: number): void;\n /** Called once a frame's voices are read: a mark that reading took in is dropped. */\n settle(): void;\n /** Fills every moving row's value on screen from `columns`. */\n fill(columns: LaneColumns | null): void;\n}\n\n/** An animation's share in moving a target's committed value, which its holds stand in front of. */\nexport interface Behind {\n /** What is left of the move its destination made in the committed value. */\n left(): readonly number[];\n /** The share of that still to show, per axis, once a hold released over it has committed what\n * showed; null for all of it. */\n kept: number[] | null;\n}\n\n/** What an animator keeps on a target it is moving. */\nexport interface TargetState<T = unknown> {\n readonly get: () => T;\n readonly set: (value: T) => void;\n readonly show: ((value: T) => void) | undefined;\n readonly publish: (() => void) | undefined;\n readonly axes: TargetAxes<T>;\n /** Writes the committed value's axes into `out` from `at` with no value built, for a target\n * that keeps them as numbers already; null where `get` and `axes` are the way. */\n write: ((out: AxisBuffer, at: number) => void) | null;\n /** The animator moving it, by its own token; null while none is. */\n owner: TargetOwner | null;\n /** True while its animations are being stopped without committing where they were. */\n discard: boolean;\n /** The committed value's axes as its holds last read them; null while it has none. A hold\n * answers how far its value is from the committed one, so it is stale once that moves. */\n heldAt: number[] | null;\n /** How many holds stand in for its committed value. */\n held: number;\n /** The share of each axis those holds cover, 0 to 1, as they last read; null beside `heldAt`. */\n cover: number[] | null;\n /** The animations with a destination on it. A destination moves the committed value at once\n * and the animation shows what is left of that move, so a hold covers it as it covers the\n * committed value. */\n behind: Set<Behind>;\n /** Whether any of `behind` has a `kept`. */\n dimmed: boolean;\n /** What animations stopped under those holds were showing on top of them: how far a coast\n * had gone, or what was left of a `from` away from the committed value. It waits here, on\n * screen, until the holds go or an animation with a destination takes it up. */\n beside: number[] | null;\n /** Its place in a table of targets, for a row of one. */\n row: { readonly table: RowTable; readonly index: number } | null;\n /** How many animations are moving it. */\n live: number;\n /** The sum of their offsets as the last frame read it. */\n slot: Reader | null;\n /** What that sum has changed by since: animations started, stopped or redirected. */\n adjust: number[];\n /** Whether its owner has been told `adjust` holds something. */\n stale: boolean;\n}\n\nconst states = new WeakMap<object, TargetState>();\n\n/** Where a read gathers what a target's animations add, on the way to `axes.add`. */\nlet scratch = new Float64Array(16);\n\n/** What `s`'s holds, and holds released over it, hide of its animations; null where none. */\nfunction hidden<T>(s: TargetState<T>): number[] | null {\n const { cover } = s;\n if (s.behind.size === 0 || (!cover && !s.dimmed)) return null;\n const out = new Array<number>(s.axes.count).fill(0);\n for (const b of s.behind) {\n const left = b.left();\n for (let i = 0; i < out.length; i++) {\n const shows = (cover ? 1 - cover[i]! : 1) * (b.kept ? b.kept[i]! : 1);\n out[i] = out[i]! + left[i]! * (1 - shows);\n }\n }\n return out;\n}\n\n/** Puts `s`'s committed value's axes into `out` from `at`. */\nexport function committedInto<T>(s: TargetState<T>, out: AxisBuffer, at: number): void {\n if (s.write) s.write(out, at);\n else if (s.axes.write) s.axes.write(s.get(), out, at);\n else {\n const a = s.axes.to(s.get());\n for (let i = 0; i < a.length; i++) out[at + i] = a[i]!;\n }\n}\n\n/** `committed`'s axes, with `s`'s holds read again where it has moved under them. */\nfunction heldAxes<T>(s: TargetState<T>, committed: T): number[] {\n const a = s.axes.to(committed);\n if (s.heldAt && a.some((x, i) => x !== s.heldAt![i])) s.owner?.reread(s as unknown as TargetState);\n return a;\n}\n\n// Each read below keeps a loop of its own over one kind of array: one loop shared between a\n// plain array and a typed one measured slower than building the array it was there to save.\n\n/** The value `s` shows now. */\nexport function readTarget<T>(s: TargetState<T>): T {\n const committed = s.get();\n if (s.live === 0) return committed;\n const { axes, slot, beside, adjust } = s;\n // A hold answers how far it is from the committed value, which takes that value's axes to check.\n if (!axes.add || s.heldAt || s.dimmed) {\n const a = heldAxes(s, committed);\n const hid = hidden(s);\n for (let i = 0; i < a.length; i++) {\n a[i] = a[i]! + (slot ? slot.cols[slot.at + i]! : 0) + adjust[i]! + (beside ? beside[i]! : 0)\n - (hid ? hid[i]! : 0);\n }\n return axes.from(a);\n }\n const n = axes.count;\n if (scratch.length < n) scratch = new Float64Array(n);\n const d = scratch;\n for (let i = 0; i < n; i++) {\n d[i] = (slot ? slot.cols[slot.at + i]! : 0) + adjust[i]! + (beside ? beside[i]! : 0);\n }\n return axes.add(committed, d);\n}\n\n/** The value `s` shows now, as its axes, in `out` from `at`. */\nexport function readTargetInto<T>(s: TargetState<T>, out: AxisBuffer, at: number): void {\n const committed = s.get();\n const { axes, slot, beside, adjust } = s;\n const moving = s.live > 0;\n if (axes.write && !(moving && s.heldAt)) axes.write(committed, out, at);\n else {\n const a = moving ? heldAxes(s, committed) : axes.to(committed);\n for (let i = 0; i < a.length; i++) out[at + i] = a[i]!;\n }\n if (!moving) return;\n const hid = hidden(s);\n for (let i = 0; i < axes.count; i++) {\n out[at + i] = out[at + i]! + (slot ? slot.cols[slot.at + i]! : 0) + adjust[i]! + (beside ? beside[i]! : 0)\n - (hid ? hid[i]! : 0);\n }\n}\n\n/** Whether `x` is a target `createTarget` made. */\nexport function isTarget(x: unknown): x is Target<unknown> {\n return typeof x === 'object' && x !== null && states.has(x);\n}\n\n/** The state behind a target `createTarget` made. */\nexport function stateOf<T>(target: Target<T>): TargetState<T> {\n const s = states.get(target);\n if (!s) throw new Error('animator: `target` was not made by createTarget');\n return s as unknown as TargetState<T>;\n}\n\n/** Make a {@link Target} over a value the caller owns. */\nexport function createTarget<T>(opts: TargetOptions<T>): Target<T> {\n const axes = opts.axes ?? (axesOf(opts.get()) as TargetAxes<T> | null);\n if (!axes) {\n throw new Error('createTarget: `axes` is required for a value that is not a number, an array of numbers, or an object of numeric fields');\n }\n const s: TargetState<T> = {\n get: opts.get,\n set: opts.set,\n show: opts.show,\n publish: opts.publish,\n axes,\n write: null,\n owner: null,\n discard: false,\n heldAt: null,\n held: 0,\n cover: null,\n behind: new Set(),\n dimmed: false,\n beside: null,\n row: null,\n live: 0,\n slot: null,\n adjust: new Array<number>(axes.count).fill(0),\n stale: false,\n };\n const target: Target<T> = {\n read: () => readTarget(s),\n readInto: (out, at = 0) => readTargetInto(s, out, at),\n axisCount: axes.count,\n axes,\n axisIndexes: (wanted) => axisIndexes(axes, wanted),\n committed: opts.get,\n commit: opts.set,\n get active() { return s.live > 0; },\n stop(o) {\n const owner = s.owner;\n if (!owner) return;\n s.discard = o?.commit === false;\n try { owner.stop(s as unknown as TargetState); } finally { s.discard = false; }\n },\n };\n states.set(target, s as unknown as TargetState);\n return target;\n}\n","import type { LaneColumns } from './engine/lanes';\nimport { createTarget, readTargetInto, stateOf, type RowTable, type Target, type TargetState } from './target';\n\n/** The arrays a table can keep its rows' values on screen in. */\nexport type ShownArray = Float64Array | Float32Array;\n\n/** What {@link createTargetTable} takes. */\nexport interface TargetTableOptions<S extends ShownArray = Float64Array> {\n /** How many numbers a row holds. */\n axes: number;\n /** The kind of array to keep `shown` in. Default `Float64Array`. Pass `Float32Array` for a\n * painter that uploads it: the table then fills that each frame, and no copy is made. */\n shown?: new (length: number) => S;\n /** Rows to make room for at first. The table grows past it. Default 64. */\n capacity?: number;\n /** Called after `row` is committed: by `set`, by an animation starting on it, and by one\n * canceled on it. */\n set?(row: number): void;\n /** Called once a frame, after the animator has filled `shown` for the rows it is moving. */\n show?(): void;\n}\n\n/**\n * Many like values an animator can move, kept as rows of numbers in flat arrays: for thousands\n * of particles, dots, or vertex colors, where a `Target` apiece costs a read apiece. Each row\n * is a target (`target(row)`), so it tweens, springs, coasts, and holds like any other, and\n * every row's value on screen is in `shown` after each frame, with no call per row.\n */\nexport interface TargetTable<S extends ShownArray = Float64Array> {\n readonly axes: number;\n /** How many rows are in use. */\n readonly size: number;\n /** Every row's committed value, row `r` at `r * axes`. A new array once the table grows, so\n * read it from the table each time. Write a row through `set`. */\n readonly committed: Float64Array;\n /** Every row's value on screen, laid out as `committed`: current after each frame of the\n * animator moving the rows, and whenever it is read between frames. A new array once the\n * table grows. A `Float32Array` where the table was made with `shown: Float32Array`. */\n readonly shown: S;\n /** Adds a row at `value` and answers its index, which a removed row's index is reused for. */\n add(value: ArrayLike<number>): number;\n /** Stops whatever is moving `row` and frees it. Its target is dead from here: a row added\n * later may take the index, and gets a target of its own. */\n remove(row: number): void;\n /** Commits `value` to `row`. A row that is moving keeps what its animations have left on top. */\n set(row: number, value: ArrayLike<number>): void;\n /** Row `row` as a target, the same one on every call. */\n target(row: number): Target<number[]>;\n}\n\n/** Writes `value` as row `row` of `into`, whose rows are `n` numbers. */\nfunction put(into: ShownArray, n: number, row: number, value: ArrayLike<number>): void {\n if (value.length !== n) throw new Error(`target table: a row is ${n} numbers, and this value is ${value.length}`);\n for (let k = 0; k < n; k++) into[row * n + k] = value[k]!;\n}\n\n/** Row `row` of a table of `n`-number rows as a target. `committed` answers the table's\n * committed values now, and throws once the row is no longer this target's. */\nfunction rowTarget(\n n: number, row: number, rows: RowTable, committed: () => Float64Array,\n commit: (row: number, value: ArrayLike<number>) => void,\n): Target<number[]> {\n const target = createTarget<number[]>({\n get: () => {\n const from = committed();\n // Array.from over a typed array's view measured several times this loop.\n const value = new Array<number>(n);\n for (let k = 0; k < n; k++) value[k] = from[row * n + k]!;\n return value;\n },\n set: (value) => {\n committed();\n commit(row, value);\n },\n });\n const state = stateOf(target);\n state.row = { table: rows, index: row };\n state.write = (out, at) => {\n const from = committed();\n for (let k = 0; k < n; k++) out[at + k] = from[row * n + k]!;\n };\n return target;\n}\n\n/** Make a {@link TargetTable} whose rows each hold `axes` numbers. */\nexport function createTargetTable<S extends ShownArray = Float64Array>(opts: TargetTableOptions<S>): TargetTable<S> {\n const n = opts.axes;\n const Shown = opts.shown ?? (Float64Array as unknown as new (length: number) => S);\n if (!Number.isInteger(n) || n < 1) throw new Error('createTargetTable: `axes` is a whole number of at least 1');\n let committed = new Float64Array(Math.max(opts.capacity ?? 64, 1) * n);\n let shown = new Shown(committed.length);\n /** One past the highest row ever used. */\n let high = 0;\n let size = 0;\n const free: number[] = [];\n const targets: (Target<number[]> | undefined)[] = [];\n const states: (TargetState<number[]> | undefined)[] = [];\n /** How many times each row has been removed: what tells a row's target from its last one's. */\n const removals: number[] = [];\n /** Rows whose value on screen the pass over the table's columns does not give: read apart. */\n const marks = new Set<number>();\n\n const flush = (): void => {\n for (const row of marks) {\n const s = states[row];\n if (s) readTargetInto(s, shown, row * n);\n }\n };\n\n const commit = (row: number, value: ArrayLike<number>): void => {\n put(committed, n, row, value);\n const s = states[row];\n if (s && s.live > 0) marks.add(row);\n else put(shown, n, row, value);\n opts.set?.(row);\n };\n\n const rows: RowTable = {\n mark: (row) => { marks.add(row); },\n settle() {\n // What a mark stood for is on screen once it is read. A hold is a voice among the row's\n // columns; what waits beside one, and what a hold hides of a move behind it, are not.\n flush();\n for (const row of marks) {\n const s = states[row];\n if (!s || s.live === 0 || !(s.beside || s.dimmed || (s.held > 0 && s.behind.size > 0))) marks.delete(row);\n }\n },\n fill(columns: LaneColumns | null) {\n if (columns) {\n const { cols, tags, count } = columns;\n for (let j = 0; j < count; j++) {\n const at = tags[j]! * n;\n for (let k = 0; k < n; k++) shown[at + k] = committed[at + k]! + cols[j * n + k]!;\n }\n }\n flush();\n opts.show?.();\n },\n };\n\n return {\n axes: n,\n get size() { return size; },\n get committed() { return committed; },\n get shown() {\n flush();\n return shown;\n },\n add(value) {\n const row = free.pop() ?? high++;\n if ((row + 1) * n > committed.length) {\n const grown = new Float64Array(Math.max(committed.length * 2, (row + 1) * n));\n grown.set(committed);\n committed = grown;\n const wider = new Shown(grown.length);\n wider.set(shown);\n shown = wider;\n }\n put(committed, n, row, value);\n put(shown, n, row, value);\n size += 1;\n return row;\n },\n remove(row) {\n targets[row]?.stop();\n targets[row] = undefined;\n removals[row] = (removals[row] ?? 0) + 1;\n states[row] = undefined;\n marks.delete(row);\n free.push(row);\n size -= 1;\n },\n set: commit,\n target(row) {\n const held = targets[row];\n if (held) return held;\n const made = (removals[row] ??= 0);\n const mine = (): void => {\n if (removals[row] !== made) throw new Error(`target table: row ${row} was removed, and this is its old target`);\n };\n const target = rowTarget(n, row, rows, () => { mine(); return committed; }, commit);\n targets[row] = target;\n states[row] = stateOf(target);\n return target;\n },\n };\n}\n","import type { Target } from './target';\nimport { createTargetTable, type TargetTable } from './targetTable';\n\n/** Which of a node's two per-anchor color arrays an override applies to. */\nexport type VertexColorChannel = 'fill' | 'stroke';\n\n/** Function-form override: receives the consumer-supplied base color\n * array and the current animation timestamp (ms, from the animator's\n * clock). Returns a flat RGBA float array (values in 0..1, matching\n * the renderer's `stroke.vertexColors` / `PathDrawCommand.vertexColors`\n * color space) of the same length as `base`. */\nexport type ColorOverrideFn = (base: readonly number[], tMs: number) => number[];\n\n/** Either a static per-anchor RGBA float array (0..1) or a function-form\n * override (see {@link ColorOverrideFn}). */\nexport type ColorOverride = readonly number[] | ColorOverrideFn;\n\ninterface NodeOverrides {\n fill?: ColorOverride;\n stroke?: ColorOverride;\n}\n\n/** One node and channel's row in the table of colors as long as its own. */\ninterface ColorSlot {\n readonly table: TargetTable;\n readonly row: number;\n readonly length: number;\n /** False until an animation commits, and again once what it painted is dropped. */\n painted: boolean;\n}\n\n/** Every slot of one length: a table whose rows are that many numbers, and who holds each row. */\ninterface ColorTable {\n readonly table: TargetTable;\n readonly rows: (ColorSlot | undefined)[];\n}\n\ntype NodeSlots = Partial<Record<VertexColorChannel, ColorSlot>>;\n\n/** Per-node, per-channel store of color overrides. Attached to `useAnimator` as\n * `animator.colorOverrides`; painted onto scene nodes by `<SceneCanvas animator>`\n * and onto a `createPathLayer`'s nodes by its `colorOverrides` option. */\nexport class ColorOverrideRegistry {\n private readonly map = new Map<string, NodeOverrides>();\n private readonly slots = new Map<string, NodeSlots>();\n private readonly tables = new Map<number, ColorTable>();\n private _version = 0;\n\n set(id: string, channel: VertexColorChannel, override: ColorOverride): void {\n let entry = this.map.get(id);\n if (!entry) {\n entry = {};\n this.map.set(id, entry);\n }\n entry[channel] = override;\n this._version++;\n }\n\n /** Drops `id`'s override on `channel`, and the colors a finished or canceled animation on its\n * {@link target} left painted. An animation still running goes on. */\n clear(id: string, channel: VertexColorChannel): void {\n this.release(id, channel);\n const entry = this.map.get(id);\n if (!entry) return;\n if (!(channel in entry)) return;\n delete entry[channel];\n if (!entry.fill && !entry.stroke) this.map.delete(id);\n this._version++;\n }\n\n clearAll(): void {\n for (const [id, node] of this.slots) {\n for (const channel of Object.keys(node) as VertexColorChannel[]) this.release(id, channel);\n }\n if (this.map.size === 0) return;\n this.map.clear();\n this._version++;\n }\n\n /** What `set` stored for `id`'s `channel`; failing that, the colors its {@link target} paints. */\n get(id: string, channel: VertexColorChannel): ColorOverride | undefined {\n const override = this.map.get(id)?.[channel];\n if (override !== undefined) return override;\n const slot = this.slots.get(id)?.[channel];\n return slot?.painted ? shownOf(slot) : undefined;\n }\n\n /** Whether anything overrides `id`, on either channel. */\n has(id: string): boolean {\n return this.map.has(id) || this.slots.has(id);\n }\n\n /**\n * The {@link Target} for `id`'s colors on `channel`: `length` numbers, flat RGBA per anchor.\n * Every caller for one node and channel gets the same one, so their animations add. The\n * registry holds its committed colors and nothing writes the scene.\n *\n * What it paints: with no override from `set`, its colors in place of the painter's own; over\n * one, only what its animations have left to travel, added on top. Ask again for each\n * animation rather than keeping it: {@link release} and {@link clear} drop a resting one, and\n * the target it had throws from then on.\n */\n target(id: string, channel: VertexColorChannel, length: number): Target<number[]> {\n if (!(length > 0) || length % 4 !== 0) {\n throw new Error(`vertex colors: length ${length} must be a positive multiple of 4`);\n }\n let node = this.slots.get(id);\n const held = node?.[channel];\n if (held?.length === length) return held.table.target(held.row);\n if (held) {\n if (held.table.target(held.row).active) {\n throw new Error(`vertex colors: ${id}'s ${channel} is moving as ${held.length} numbers, not ${length}`);\n }\n this.drop(held);\n }\n const at = this.tableOf(length);\n const row = at.table.add(new Float64Array(length));\n const slot: ColorSlot = { table: at.table, row, length, painted: false };\n at.rows[row] = slot;\n if (!node) {\n node = {};\n this.slots.set(id, node);\n }\n node[channel] = slot;\n return at.table.target(row);\n }\n\n private tableOf(length: number): ColorTable {\n const held = this.tables.get(length);\n if (held) return held;\n const rows: (ColorSlot | undefined)[] = [];\n const table = createTargetTable({\n axes: length,\n set: (row) => {\n const slot = rows[row];\n if (slot) slot.painted = true;\n this._version++;\n },\n show: () => { this._version++; },\n });\n const made = { table, rows };\n this.tables.set(length, made);\n return made;\n }\n\n private drop(slot: ColorSlot): void {\n const at = this.tables.get(slot.length)!;\n at.rows[slot.row] = undefined;\n slot.table.remove(slot.row);\n if (slot.table.size === 0) this.tables.delete(slot.length);\n }\n\n /** Drops the colors `id`'s {@link target} on `channel` left painted, unless an animation is\n * still moving it. An override from `set` stays. */\n release(id: string, channel: VertexColorChannel): void {\n const node = this.slots.get(id);\n const slot = node?.[channel];\n if (!node || !slot || slot.table.target(slot.row).active) return;\n delete node[channel];\n if (!node.fill && !node.stroke) this.slots.delete(id);\n this.drop(slot);\n if (slot.painted) this._version++;\n }\n\n /**\n * The colors to paint on `id`'s `channel`, given the colors the painter would\n * otherwise paint and the frame's timestamp. A function override needs that\n * `base` and must return an array of its length; failing either, `base`\n * stands. A {@link target} in motion then adds what it has left to travel.\n */\n resolve(\n id: string,\n channel: VertexColorChannel,\n base: readonly number[] | undefined,\n tMs: number,\n ): readonly number[] | undefined {\n const override = this.map.get(id)?.[channel];\n const slot = this.slots.get(id)?.[channel];\n if (override === undefined) return slot?.painted ? shownOf(slot) : base;\n const under = typeof override === 'function' ? this.apply(override, base, tMs) : override;\n if (!slot?.painted || under?.length !== slot.length || !slot.table.target(slot.row).active) return under;\n const { shown, committed } = slot.table;\n const at = slot.row * slot.length;\n return under.map((x, i) => x + shown[at + i]! - committed[at + i]!);\n }\n\n private apply(\n override: ColorOverrideFn,\n base: readonly number[] | undefined,\n tMs: number,\n ): readonly number[] | undefined {\n if (base === undefined) return undefined;\n const result = override(base, tMs);\n return result.length === base.length ? result : base;\n }\n\n version(): number {\n return this._version;\n }\n}\n\n/** The colors `slot`'s row shows now. */\nfunction shownOf(slot: ColorSlot): number[] {\n const { shown } = slot.table;\n const at = slot.row * slot.length;\n const out = new Array<number>(slot.length);\n for (let i = 0; i < out.length; i++) out[i] = shown[at + i]!;\n return out;\n}\n","import { createEmitter } from '@weasel-js/registry';\nimport type { AnimatorEvent, AnimatorListener } from './types';\n\n/** The listener set behind `animator.watch`. Every emit site checks `watched`\n * first and builds its event only then, so an unwatched animator allocates\n * nothing for observability. */\nexport class AnimatorEventHub {\n private readonly events = createEmitter<[AnimatorEvent]>();\n\n get watched(): boolean {\n return this.events.size > 0;\n }\n\n add(listener: AnimatorListener): () => void {\n return this.events.subscribe(listener);\n }\n\n emit(event: AnimatorEvent): void {\n this.events.emit(event);\n }\n}\n","import type { SupervisorFactory } from './supervisor';\nimport type {\n AnimationHandle,\n Animator,\n LoopFactory,\n LoopOptions,\n TweenLoopOptions,\n} from './types';\n\n/**\n * Loop primitive. Repeatedly invokes `factory(i, next)` to produce a child\n * animation. The factory is responsible for wiring its returned handle's\n * `onDone` to call `next` — that's how the loop advances. Pause/resume/\n * setTimeScale reach the current child and each later one; cancel stops the\n * in-flight child and prevents future iterations.\n *\n * The loop is registered with the animator under a supervisor entry, so\n * `animator.cancel(handle)`, `animator.cancelKey(key)`, and\n * `animator.isActive(key)` all work for it.\n */\nexport function createLoop(\n createSupervisor: SupervisorFactory,\n factory: LoopFactory,\n opts: LoopOptions = {},\n): AnimationHandle {\n const max = opts.count ?? Infinity;\n let iteration = 0;\n let cancelled = false;\n let current: AnimationHandle | null = null;\n\n const supervisor = createSupervisor({ kind: 'loop', cancelKey: opts.cancelKey, label: opts.label });\n supervisor.setOnCancel(() => {\n // External cancel path (animator.cancel/cancelKey or handle.cancel).\n // Mark cancelled so `next` short-circuits; tear down the current child.\n cancelled = true;\n current?.cancel();\n current = null;\n });\n\n const applyRate = (paused: boolean, timeScale: number): void => {\n if (!current) return;\n if (paused) current.pause();\n else current.resume();\n current.setTimeScale(timeScale);\n };\n supervisor.setOnRate(applyRate);\n\n const next = (): void => {\n if (cancelled) return;\n if (iteration >= max) {\n current = null;\n // Natural completion: deregister the supervisor so isActive() goes\n // false. `cancelled` makes a late `next` a no-op.\n cancelled = true;\n supervisor.finish();\n opts.onDone?.();\n return;\n }\n const i = iteration++;\n current = factory(i, next);\n if (supervisor.isPaused() || supervisor.timeScale() !== 1) {\n applyRate(supervisor.isPaused(), supervisor.timeScale());\n }\n };\n\n next();\n\n return {\n id: supervisor.id,\n cancel: () => supervisor.cancel(),\n pause: () => supervisor.pause(),\n resume: () => supervisor.resume(),\n setTimeScale: (s) => supervisor.setTimeScale(s),\n timeScale: () => supervisor.timeScale(),\n isPaused: () => supervisor.isPaused(),\n };\n}\n\n/**\n * Sugar over `createLoop` for the common case of looping a tween between two\n * values. `direction` controls per-iteration from/to:\n * - `restart` (default): from→to every iteration\n * - `reverse`: to→from every iteration\n * - `alternate`: even iterations from→to, odd iterations to→from\n */\nexport function createTweenLoop<T>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n opts: TweenLoopOptions<T>,\n): AnimationHandle {\n const direction = opts.direction ?? 'restart';\n return createLoop(\n (o) => createSupervisor({ ...o, kind: 'tweenLoop' }),\n (i, next) => {\n const flipped = direction === 'reverse' || (direction === 'alternate' && i % 2 === 1);\n const from = flipped ? opts.to : opts.from;\n const to = flipped ? opts.from : opts.to;\n return animator.tween({\n from,\n to,\n ms: opts.ms,\n easing: opts.easing,\n interpolate: opts.interpolate,\n onTick: opts.onTick,\n onDone: next,\n });\n },\n { count: opts.count, onDone: opts.onDone, cancelKey: opts.cancelKey, label: opts.label },\n );\n}\n","import { isTarget, type Target } from './target';\nimport type { Supervisor, SupervisorFactory, WatchCompletion } from './supervisor';\nimport type {\n AnimationHandle,\n Animator,\n StaggerBuilder,\n StaggerDelay,\n StaggerFactory,\n StaggerOptions,\n SpringOptions,\n StaggerPerItem,\n StaggerSpringOptions,\n StaggerTargetSpringOptions,\n StaggerTargetTweenOptions,\n StaggerTweenOptions,\n TweenOptions,\n} from './types';\n\n/** An item still waiting: `fire` starts it once the stagger's own virtual\n * time reaches `at`. */\ninterface PendingEntry {\n at: number;\n fire: () => void;\n}\n\n/**\n * Composite handle returned by `createStagger`. Owns a list of in-flight\n * child handles and a list of items still waiting; cancel cancels both.\n * Pause/resume/setTimeScale propagate to in-flight children. The waiting\n * items are counted in the supervisor entry's virtual time, so whatever\n * holds or scales that entry holds or scales the delays with it.\n *\n * Registered with the animator via a supervisor so animator.cancel /\n * cancelKey / isActive all work for it.\n */\nclass CompositeHandle implements AnimationHandle {\n readonly id: number;\n private cancelled = false;\n private paused_ = false;\n private timeScale_ = 1;\n private children: AnimationHandle[] = [];\n private pending: PendingEntry[] = [];\n private outstanding: number;\n private finished = false;\n\n constructor(\n private supervisor: Supervisor,\n totalItems: number,\n ) {\n this.id = supervisor.id;\n this.outstanding = totalItems;\n supervisor.setOnCancel(() => this.handleSupervisorCancel());\n supervisor.setOnRate((paused, timeScale) => {\n if (paused) this.applyPause();\n else this.applyResume();\n this.applyTimeScale(timeScale);\n });\n supervisor.setOnFrame((virtualNow) => this.fireDue(virtualNow));\n }\n\n /** Invoked when the supervisor is cancelled externally (animator.cancel /\n * cancelKey) OR via this composite's own `cancel`. */\n private handleSupervisorCancel(): void {\n if (this.cancelled) return;\n this.cancelled = true;\n this.pending = [];\n // Snapshot children first: child.cancel() may synchronously invoke our\n // own noteChildDone path via the animator's completion listener, which\n // would mutate this.children mid-iteration.\n const kids = this.children.slice();\n this.children = [];\n for (const c of kids) c.cancel();\n }\n\n noteChildDone(): void {\n if (this.cancelled || this.finished) return;\n this.outstanding -= 1;\n if (this.outstanding <= 0) {\n this.finished = true;\n this.children = [];\n this.supervisor.finish();\n }\n }\n\n addChild(h: AnimationHandle): void {\n if (this.cancelled) {\n h.cancel();\n return;\n }\n this.children.push(h);\n if (this.paused_) h.pause();\n if (this.timeScale_ !== 1) h.setTimeScale(this.timeScale_);\n }\n\n schedule(delayMs: number, fire: () => void): void {\n if (this.cancelled) return;\n this.pending.push({ at: delayMs, fire });\n }\n\n private fireDue(virtualNow: number): void {\n if (this.cancelled || this.pending.length === 0) return;\n const due = this.pending.filter((p) => p.at <= virtualNow).sort((a, b) => a.at - b.at);\n this.pending = this.pending.filter((p) => p.at > virtualNow);\n for (const p of due) {\n if (this.cancelled) return;\n p.fire();\n }\n }\n\n cancel(): void {\n // Route through the supervisor so the animator's id table is kept in\n // sync. The supervisor's onCancel forwards back to\n // handleSupervisorCancel which actually tears down children + waiting items.\n this.supervisor.cancel();\n }\n\n pause(): void {\n this.supervisor.pause();\n }\n\n resume(): void {\n this.supervisor.resume();\n }\n\n setTimeScale(s: number): void {\n this.supervisor.setTimeScale(s);\n }\n\n private applyPause(): void {\n if (this.paused_) return;\n this.paused_ = true;\n for (const c of this.children) c.pause();\n }\n\n private applyResume(): void {\n if (!this.paused_) return;\n this.paused_ = false;\n for (const c of this.children) c.resume();\n }\n\n private applyTimeScale(s: number): void {\n if (s === this.timeScale_) return;\n this.timeScale_ = s;\n for (const c of this.children) c.setTimeScale(s);\n }\n\n timeScale(): number {\n return this.timeScale_;\n }\n\n isPaused(): boolean {\n return this.paused_;\n }\n}\n\nfunction delayFor(delay: StaggerDelay, i: number): number {\n return typeof delay === 'function' ? delay(i) : delay * i;\n}\n\n/**\n * Stagger primitive. With `factory`, returns the composite handle directly.\n * Without `factory`, returns a `StaggerBuilder` whose `.each` runs the\n * stagger with a factory.\n */\nexport function createStagger<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n factory: StaggerFactory<TItem>,\n opts?: StaggerOptions,\n): AnimationHandle;\nexport function createStagger<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n): StaggerBuilder<TItem>;\nexport function createStagger<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n factory?: StaggerFactory<TItem>,\n opts?: StaggerOptions,\n): AnimationHandle | StaggerBuilder<TItem> {\n if (factory) return runStagger(createSupervisor, watchCompletion, items, delay, factory, opts);\n return makeBuilder(animator, createSupervisor, watchCompletion, items, delay);\n}\n\nfunction runStagger<TItem>(\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n factory: StaggerFactory<TItem>,\n opts?: StaggerOptions,\n): AnimationHandle {\n const supervisor = createSupervisor({ kind: 'stagger', cancelKey: opts?.cancelKey, label: opts?.label });\n const composite = new CompositeHandle(supervisor, items.length);\n if (items.length === 0) {\n supervisor.finish();\n return composite;\n }\n items.forEach((item, i) => {\n const ms = delayFor(delay, i);\n const fire = (): void => {\n const child = factory(item, i);\n // Hook into the child's deregistration (natural OR cancel). If the\n // composite is already cancelled, the watcher fires immediately on\n // cancel and the noteChildDone branch is a no-op (cancelled guard).\n watchCompletion(child.id, () => composite.noteChildDone());\n composite.addChild(child);\n };\n if (ms <= 0) fire();\n else composite.schedule(ms, fire);\n });\n return composite;\n}\n\nfunction resolvePerItem<T, TItem>(\n v: StaggerPerItem<T, TItem>,\n item: TItem,\n i: number,\n): T {\n return typeof v === 'function'\n ? (v as (item: TItem, index: number) => T)(item, i)\n : v;\n}\n\n/** What `.tween` and `.spring` read of their options, whichever form those take. */\ninterface PerItemOptions<TItem> extends StaggerOptions {\n target?: StaggerPerItem<Target<unknown>, TItem>;\n from?: StaggerPerItem<unknown, TItem>;\n to: StaggerPerItem<unknown, TItem>;\n onTick?: (value: unknown, item: TItem, index: number) => void;\n onDone?: (item: TItem, index: number) => void;\n}\n\n/** One item's share of a builder method's options: its target, or null where its animation\n * hands values to `onTick`, and the options every form of the animation takes. */\nfunction perItem<TItem>(opts: PerItemOptions<TItem>, item: TItem, i: number) {\n const target = opts.target !== undefined ? resolvePerItem(opts.target, item, i) : isTarget(item) ? item : null;\n return {\n target,\n from: opts.from === undefined ? undefined : resolvePerItem(opts.from, item, i),\n to: resolvePerItem(opts.to, item, i),\n onTick: opts.onTick && ((v: unknown) => opts.onTick!(v, item, i)),\n onDone: opts.onDone && (() => opts.onDone!(item, i)),\n };\n}\n\nfunction makeBuilder<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n): StaggerBuilder<TItem> {\n /** Runs `start` per item, once every item has a target to move or an `onTick` to tell. */\n const run = <O extends PerItemOptions<TItem>>(\n method: string,\n opts: O,\n start: (own: ReturnType<typeof perItem<TItem>>, item: TItem, i: number) => AnimationHandle,\n ): AnimationHandle => {\n if (opts.target === undefined && !opts.onTick && !items.every(isTarget)) {\n throw new Error(`animator.stagger: \\`.${method}\\` needs a \\`target\\`, items that are targets, or an \\`onTick\\``);\n }\n return runStagger(createSupervisor, watchCompletion, items, delay, (item, i) => start(perItem(opts, item, i), item, i), opts);\n };\n return {\n each: (factory, opts) =>\n runStagger(createSupervisor, watchCompletion, items, delay, factory, opts),\n tween: ((opts: StaggerTweenOptions<unknown, TItem> | StaggerTargetTweenOptions<unknown, TItem>) =>\n run('tween', opts, ({ target, ...own }, item, i) => {\n const shared = {\n ...own, ms: resolvePerItem(opts.ms, item, i),\n easing: opts.easing, interpolate: opts.interpolate, interpolator: opts.interpolator,\n };\n return target ? animator.tween({ ...shared, target }) : animator.tween(shared as TweenOptions<unknown>);\n })) as StaggerBuilder<TItem>['tween'],\n spring: ((opts: StaggerSpringOptions<unknown, TItem> | StaggerTargetSpringOptions<unknown, TItem>) =>\n run('spring', opts, ({ target, ...own }, item, i) => {\n const shared = {\n ...own, velocity: opts.velocity === undefined ? undefined : resolvePerItem(opts.velocity, item, i),\n preset: opts.preset, stiffness: opts.stiffness, damping: opts.damping, mass: opts.mass,\n restThreshold: opts.restThreshold,\n };\n if (target) return animator.spring({ ...shared, target });\n const { interpolate, add, subtract, scale, magnitude } = opts as StaggerSpringOptions<unknown, TItem>;\n return animator.spring({ ...shared, interpolate, add, subtract, scale, magnitude } as SpringOptions<unknown>);\n })) as StaggerBuilder<TItem>['spring'],\n };\n}\n","import type { AnimationSeed } from './engine/context';\nimport type { AnimationHandle } from './types';\n\n/**\n * Lets a composite (loop / stagger) sit in the animator's id table without\n * being a real animation: its tick never completes, so only `cancel()` or\n * `finish()` removes it. The owning composite installs `setOnCancel` to tear\n * down its children when an external cancel fires.\n *\n * Not part of the public Animator surface.\n */\nexport interface Supervisor {\n id: number;\n cancel(): void;\n pause(): void;\n resume(): void;\n setTimeScale(s: number): void;\n timeScale(): number;\n isPaused(): boolean;\n setOnCancel(cb: () => void): void;\n /** `cb` hears every pause, resume, and time scale set on the entry, by its\n * handle or by `cancelKey`, so the composite can pass it to its children. */\n setOnRate(cb: (paused: boolean, timeScale: number) => void): void;\n /** `cb` hears the entry's virtual time once a frame, after every animation\n * has ticked: what it starts is started outside the tick, as a caller's\n * own code would start it. */\n setOnFrame(cb: (virtualNow: number) => void): void;\n /** Retire the entry because the composite completed on its own. Unlike\n * `cancel`, skips the `setOnCancel` callback and reports an `end`. */\n finish(): void;\n cancelKey?: string;\n}\n\n/** What names a supervisor's entry in the animator's table and its events. */\nexport interface SupervisorOptions {\n kind: 'loop' | 'tweenLoop' | 'stagger' | 'keepAlive';\n cancelKey?: string;\n label?: string;\n}\n\nexport type SupervisorFactory = (opts: SupervisorOptions) => Supervisor;\n\n/** What {@link supervisors} needs of the animator. */\nexport interface SupervisorHost {\n nextId(): number;\n register(seed: AnimationSeed): AnimationHandle;\n /** Takes an entry off the table as finished. */\n finish(id: number): void;\n /** Runs `cb` once this frame's ticks are done. */\n afterTicks(cb: () => void): void;\n}\n\n/** Makes the animator's supervisor factory: each is a registered animation whose tick never\n * finishes, so loop and stagger sit in the id table and answer `cancel`, `cancelKey` and\n * `isActive`. */\nexport function supervisors(host: SupervisorHost): SupervisorFactory {\n return ({ kind, cancelKey, label }) => {\n const id = host.nextId();\n let onCancelCb: (() => void) | undefined;\n let onRateCb: ((paused: boolean, timeScale: number) => void) | undefined;\n let onFrameCb: ((virtualNow: number) => void) | undefined;\n const base = host.register({\n id,\n kind,\n cancelKey,\n label,\n tick: (virtualNow) => {\n if (onFrameCb) host.afterTicks(() => onFrameCb?.(virtualNow));\n return false;\n },\n onCancel: () => onCancelCb?.(),\n onRate: (paused, timeScale) => onRateCb?.(paused, timeScale),\n });\n return {\n id: base.id,\n cancel: base.cancel,\n pause: base.pause,\n resume: base.resume,\n setTimeScale: base.setTimeScale,\n timeScale: base.timeScale,\n isPaused: base.isPaused,\n setOnCancel: (cb) => { onCancelCb = cb; },\n setOnRate: (cb) => { onRateCb = cb; },\n setOnFrame: (cb) => { onFrameCb = cb; },\n finish: () => host.finish(id),\n cancelKey,\n };\n };\n}\n\n/**\n * Subscribe to \"this animation id finished or was canceled and is no longer\n * in the registry.\" Returns an unsubscribe. Fires at most once, and at once\n * for an id that has already left. Fires for both natural completion and\n * external cancel.\n */\nexport type WatchCompletion = (id: number, cb: () => void) => () => void;\n","import type { EventBooking, EventBookingHandle, EventTrack, TimelineEvent, Track } from './types';\n\n/** A clock read further than this from the frame clock's prediction is taken\n * as a discontinuity — a hidden tab, a suspended context — not as jitter. */\nconst RESYNC_MS = 50;\n/** Share of each frame's clock residual folded into the estimate. Small enough\n * to average out a per-frame read that lands a render quantum early or late;\n * large enough to follow ppm-scale drift with well under a millisecond of lag. */\nconst SLEW = 0.05;\n/** A pending booking a rate change or resync moves by more than this is\n * retracted and booked again; anything less is left standing. */\nconst RETIME_MS = 1;\n\n/** Index of the first event after `t`. Binary search: tracks may be long. */\nexport function firstAfter(events: EventTrack['events'], t: number): number {\n let lo = 0;\n let hi = events.length;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (events[mid].t > t) hi = mid; else lo = mid + 1;\n }\n return lo;\n}\n\n/** Index of the first event at or after `t`. */\nexport function firstAtOrAfter(events: EventTrack['events'], t: number): number {\n let i = firstAfter(events, t);\n while (i > 0 && events[i - 1].t === t) i -= 1;\n return i;\n}\n\n/** The timeline state a booker reads. `lap` counts wraps since creation and is\n * never reset, so a (lap, root time) pair names one crossing for good. */\nexport interface BookerHost {\n tracks: Track[];\n duration(): number;\n /** Laps still allowed after the current one; `Infinity` when endless. */\n lapsLeft(): number;\n lap(): number;\n playhead(): number;\n}\n\nexport interface Booker {\n /** After the frame's wraps and crossings. `scale` is the effective one this\n * frame's virtual time advanced at, zero while paused. */\n tick(virtualNow: number, scale: number): void;\n /** Stop every booking still ahead of both the playhead and the clock, and\n * let the next tick book that span again. */\n retract(): void;\n /** After the playhead jumped. Call `retract` first, while it still reads the\n * old playhead. */\n seek(): void;\n /** After the animator restarted the timeline's virtual clock at zero. */\n rearm(): void;\n}\n\n/** Every event at root time `<= r` in lap `lap` has been taken; with `open`,\n * only those before `r`, which is where a seek leaves the cursor. */\ninterface Cursor { lap: number; r: number; open?: boolean }\n\ninterface Booking {\n event: TimelineEvent;\n lap: number;\n r: number;\n when: number;\n handle?: EventBookingHandle;\n}\n\nconst isAfter = (a: Cursor, b: Cursor): boolean => a.lap > b.lap || (a.lap === b.lap && a.r > b.r);\n\nexport function createBooker(opts: EventBooking, host: BookerHost): Booker {\n const lookahead = opts.lookahead ?? 100;\n const maxLate = opts.maxLate ?? Infinity;\n const cursors = new Map<EventTrack, Cursor>();\n let start: Cursor = { lap: 0, r: -Infinity };\n let bookings: Booking[] = [];\n /** Clock time of the current frame, smoothed. Null until anchored. */\n let est: number | null = null;\n let mapVirtual = 0;\n let lastScale = 0;\n\n const playheadCursor = (): Cursor => ({ lap: host.lap(), r: host.playhead() });\n\n const unwrapped = (b: { lap: number; r: number }): number =>\n (b.lap - host.lap()) * host.duration() + b.r;\n\n const ahead = (b: Booking): boolean => isAfter(b, playheadCursor());\n\n const stopWhere = (now: number, pred: (b: Booking) => boolean): void => {\n bookings = bookings.filter((b) => {\n if (!b.handle || b.when <= now || !ahead(b) || !pred(b)) return true;\n try { b.handle.stop(); } catch (err) { console.error('timeline: booking stop threw', err); }\n return false;\n });\n // Back to the playhead, not to each retracted booking: whatever still\n // stands is skipped by identity, and an edit may have added events behind\n // the cursor that only a rescan finds.\n const at = playheadCursor();\n for (const [track, c] of cursors) if (isAfter(c, at)) cursors.set(track, at);\n if (isAfter(start, at)) start = at;\n };\n\n const whenFor = (u: number, playhead: number, scale: number, now: number): number =>\n Math.max(est! + (u - playhead) / scale, now);\n\n const scanTrack = (\n track: EventTrack, at: number, horizon: number, lastLap: number, now: number, scale: number,\n ): void => {\n const lap = host.lap();\n const duration = host.duration();\n const playhead = host.playhead();\n const { events } = track;\n let c = cursors.get(track) ?? start;\n for (;;) {\n const lapStart = (c.lap - lap) * duration;\n if (lapStart > horizon) break;\n const i = (c.open ? firstAtOrAfter : firstAfter)(events, c.r - at);\n if (i >= events.length || at + events[i].t > duration) {\n if (c.lap >= lastLap) break;\n // A frame that skipped whole laps books the outgoing lap's tail and\n // nothing of the laps in between, as crossings do.\n c = { lap: Math.max(c.lap + 1, lap), r: -Infinity };\n continue;\n }\n const r = at + events[i].t;\n const u = lapStart + r;\n if (u > horizon) break;\n c = { lap: c.lap, r };\n for (let j = i; j < events.length && events[j].t === events[i].t; j += 1) {\n const ev = events[j];\n if (!ev.book || bookings.some((b) => b.event === ev && b.lap === c.lap)) continue;\n if ((playhead - u) / scale > maxLate) continue;\n const when = whenFor(u, playhead, scale, now);\n let handle: EventBookingHandle | undefined;\n try {\n handle = ev.book(when) ?? undefined;\n } catch (err) {\n console.error('timeline: book threw', err);\n }\n bookings.push({ event: ev, lap: c.lap, r, when, handle });\n }\n }\n cursors.set(track, c);\n };\n\n const visit = (\n tracks: Track[], at: number, horizon: number, lastLap: number, now: number, scale: number,\n ): void => {\n for (const track of tracks) {\n if (track.kind === 'event') scanTrack(track, at, horizon, lastLap, now, scale);\n else if (track.kind === 'timeline') {\n visit(track.timeline.tracks, at + track.at, horizon, lastLap, now, scale);\n }\n }\n };\n\n return {\n tick(virtualNow, scale) {\n const now = opts.clock.now();\n bookings = bookings.filter(ahead);\n if (!(scale > 0)) {\n if (lastScale > 0) stopWhere(now, () => true);\n lastScale = 0;\n est = null;\n return;\n }\n\n let moved = lastScale > 0 && scale !== lastScale;\n if (est === null) {\n est = now;\n } else {\n est += (virtualNow - mapVirtual) / scale;\n const residual = now - est;\n if (Math.abs(residual) > RESYNC_MS) {\n est = now;\n moved = true;\n } else {\n est += residual * SLEW;\n }\n }\n mapVirtual = virtualNow;\n lastScale = scale;\n\n const playhead = host.playhead();\n if (moved) {\n stopWhere(now, (b) => Math.abs(whenFor(unwrapped(b), playhead, scale, now) - b.when) > RETIME_MS);\n }\n\n const duration = host.duration();\n const lastLap = host.lap() + (duration > 0 ? host.lapsLeft() : 0);\n visit(host.tracks, 0, playhead + lookahead * scale, lastLap, now, scale);\n },\n retract() {\n stopWhere(opts.clock.now(), () => true);\n },\n seek() {\n bookings = [];\n cursors.clear();\n start = { ...playheadCursor(), open: true };\n },\n rearm() {\n est = null;\n },\n };\n}\n","import { firstAfter, firstAtOrAfter } from './booking';\nimport type { TimelineReport } from './createTimeline';\nimport type { Track } from './types';\n\n/** Fires the events of `tracks` the playhead crossed going from `from` to `to`, at any depth.\n * With `fromOpen`, an event exactly at `from` fires too. */\nexport type FireEvents = (tracks: Track[], from: number, to: number, fromOpen: boolean) => void;\n\n/** `booked` says whether the timeline has a booking clock: an event with `book` on one that has\n * none warns, once. */\nexport function createEventFirer(report: TimelineReport | undefined, booked: boolean): FireEvents {\n // Track indexes from the root down to the track being fired, for `report`.\n const path: number[] = [];\n let warnedUnbooked = false;\n const fire: FireEvents = (tracks, from, to, fromOpen) => {\n for (let k = 0; k < tracks.length; k += 1) {\n const track = tracks[k];\n if (track.kind === 'event') {\n const end = firstAfter(track.events, to);\n const first = (fromOpen ? firstAtOrAfter : firstAfter)(track.events, from);\n for (let i = first; i < end; i += 1) {\n const ev = track.events[i];\n ev.fire?.(to - ev.t);\n if (report?.watched) {\n path.push(k);\n report.fire(track, path, ev, to - ev.t);\n path.pop();\n }\n if (ev.book && !booked && !warnedUnbooked) {\n warnedUnbooked = true;\n console.warn('timeline: an event has `book` but the timeline has no `booking` clock; it never books.');\n }\n }\n } else if (track.kind === 'timeline') {\n path.push(k);\n fire(track.timeline.tracks, from - track.at, to - track.at, fromOpen);\n path.pop();\n }\n }\n };\n return fire;\n}\n","import { readTarget, type Behind, type RowTable, type TargetAxes, type TargetOwner, type TargetState } from '../target';\n\nconst TAU = Math.PI * 2;\n\n/** `value` as the target's axes, refused where it is not the target's shape. */\nexport function axesFor<T>(axes: TargetAxes<T>, value: T, what: string): number[] {\n const a = axes.to(value);\n if (a.length !== axes.count || !a.every((x) => typeof x === 'number' && !Number.isNaN(x))) {\n throw new Error(`animator: \\`${what}\\` is not the target's shape`);\n }\n return a;\n}\n\n/** The angle `x` as the turn of at most half a circle that reaches it. */\nexport function shortWay(x: number): number {\n x %= TAU;\n if (x > Math.PI) return x - TAU;\n if (x <= -Math.PI) return x + TAU;\n return x;\n}\n\n/** `a - b` per axis, the short way round on an angle axis. */\nexport function travel<T>(axes: TargetAxes<T>, a: readonly number[], b: readonly number[]): number[] {\n const d = a.map((x, i) => x - b[i]!);\n for (const i of axes.angles ?? []) d[i] = shortWay(d[i]!);\n return d;\n}\n\nexport const plus = (a: readonly number[], b: readonly number[]): number[] => a.map((x, i) => x + b[i]!);\nexport const minus = (a: readonly number[], b: readonly number[]): number[] => a.map((x, i) => x - b[i]!);\nexport const norm = (a: readonly number[]): number => Math.hypot(...a);\n\n/** Counts `delta` into what `s` shows until the next frame reads its voices again. */\nexport function bump(s: TargetState, delta: readonly number[], sign: 1 | -1): void {\n for (let i = 0; i < delta.length; i++) s.adjust[i] = s.adjust[i]! + sign * delta[i]!;\n stale(s);\n s.row?.table.mark(s.row.index);\n}\n\nfunction stale(s: TargetState): void {\n if (s.stale || !s.owner) return;\n s.stale = true;\n s.owner.adjusted(s);\n}\n\n/** Adds `delta` into the committed value. */\nexport function absorb<T>(s: TargetState<T>, delta: readonly number[]): void {\n if (s.discard) return;\n s.set(s.axes.from(plus(s.axes.to(s.get()), delta)));\n}\n\n/**\n * How much of an animation's offset is the move its destination made in the committed value,\n * per axis: that move, from `committed` to `to`, over the whole offset, `start`. The rest is a\n * `from` away from the committed value, or a push, which shows on top of a hold.\n */\nexport function shareBehind<T>(\n axes: TargetAxes<T>, committed: readonly number[], to: readonly number[], start: readonly number[],\n): number[] {\n return travel(axes, committed, to).map((m, i) => (start[i] === 0 ? 0 : m / start[i]!));\n}\n\nexport const times = (a: readonly number[], b: readonly number[]): number[] => a.map((x, i) => x * b[i]!);\n\n/** Puts an animation behind `s`'s holds. `left` answers what is left of its move. */\nexport function goBehind<T>(s: TargetState<T>, left: () => readonly number[]): Behind {\n const b: Behind = { left, kept: null };\n s.behind.add(b);\n return b;\n}\n\n/** Takes `b` out from behind `s`'s holds, and answers how much of `left` was still to show. */\nexport function comeOut<T>(s: TargetState<T>, b: Behind, left: readonly number[]): number[] {\n s.behind.delete(b);\n if (b.kept) {\n s.dimmed = false;\n for (const other of s.behind) if (other.kept) s.dimmed = true;\n }\n return b.kept ? times(left, b.kept) : left.slice();\n}\n\n/** Commits an animation where it stopped: `left` of its move into the committed value, and\n * the rest of its offset, `own`, where `keep` leaves it. */\nexport function commitOffset<T>(s: TargetState<T>, own: readonly number[], left: readonly number[], shown: readonly number[]): void {\n const top = minus(own, left);\n if (s.held === 0) { keep(s, plus(shown, top)); return; }\n if (shown.some((x) => x !== 0)) absorb(s, shown);\n if (top.some((x) => x !== 0)) keep(s, top);\n}\n\n/** Leaves `delta`, what a stopping animation was showing on top of the committed value's own\n * move, where the target keeps showing it: in the committed value, or beside it while a hold\n * stands in front of that. */\nexport function keep<T>(s: TargetState<T>, delta: readonly number[]): void {\n if (s.discard) return;\n if (s.held === 0) absorb(s, delta);\n else s.beside = s.beside ? plus(s.beside, delta) : delta.slice();\n s.row?.table.mark(s.row.index);\n}\n\n/** The committed value's axes as an animation about to commit a destination finds them: with\n * what `keep` left beside it, which that destination replaces. */\nexport function takeUp<T>(s: TargetState<T>): number[] {\n const committed = s.axes.to(s.get());\n const beside = s.beside;\n s.beside = null;\n return beside ? plus(committed, beside) : committed;\n}\n\n/** The targets one animator is moving. */\nexport interface TargetBook {\n /** Counts one more animation on `s`. Throws where another animator is moving it. */\n attach(s: TargetState): void;\n /** Counts one fewer. */\n detach(s: TargetState): void;\n /** Called once the frame's voices are read: what `adjust` held is in that reading now. */\n settle(): void;\n /** Called once `s`'s voices are read again mid-frame: all that reading left out is `queued`. */\n reread(s: TargetState, queued: readonly number[]): void;\n /** Hands each moving target, and each that came to rest since the last call, to its `show`. */\n show(): void;\n /** Shows `s` now, where an animation just started on it or was redirected. */\n showNow(s: TargetState): void;\n /** Whether a target came to rest since the last `show`. */\n readonly resting: boolean;\n}\n\nexport function createTargetBook(owner: Omit<TargetOwner, 'adjusted'>): TargetBook {\n /** The targets whose `adjust` holds something. A frame walks these and not every moving target. */\n const adjusted: TargetState[] = [];\n const token: TargetOwner = { ...owner, adjusted: (s) => { adjusted.push(s); } };\n /** The moving targets with a `show`: the ones a frame has to call. */\n const showing = new Set<TargetState>();\n const rested = new Set<TargetState>();\n const publishes = new Set<() => void>();\n /** Each table with a row moving, and how many of its rows are. */\n const tables = new Map<RowTable, number>();\n const shown = (s: TargetState, value: unknown): void => {\n s.show!(value);\n if (s.publish) publishes.add(s.publish);\n };\n const publish = (): void => {\n for (const p of publishes) p();\n publishes.clear();\n };\n return {\n attach(s) {\n if (s.owner && s.owner !== token) {\n throw new Error('animator: this target is being moved by another animator');\n }\n s.owner = token;\n s.live += 1;\n if (s.show) showing.add(s);\n rested.delete(s);\n if (s.row) {\n tables.set(s.row.table, (tables.get(s.row.table) ?? 0) + 1);\n s.row.table.mark(s.row.index);\n }\n },\n detach(s) {\n s.live -= 1;\n if (s.row) {\n tables.set(s.row.table, tables.get(s.row.table)! - 1);\n s.row.table.mark(s.row.index);\n }\n if (s.live > 0) return;\n s.owner = null;\n s.slot = null;\n s.beside = null;\n s.behind.clear();\n s.dimmed = false;\n s.adjust.fill(0);\n s.stale = false;\n if (s.show && showing.delete(s)) rested.add(s);\n },\n settle() {\n for (const s of adjusted) {\n // One that came to rest since is cleared already, and may be another animator's now.\n if (!s.stale || s.owner !== token) continue;\n s.adjust.fill(0);\n s.stale = false;\n }\n adjusted.length = 0;\n for (const t of tables.keys()) t.settle();\n },\n reread(s, queued) {\n for (let i = 0; i < queued.length; i++) s.adjust[i] = queued[i]!;\n stale(s);\n s.row?.table.mark(s.row.index);\n },\n show() {\n for (const s of showing) shown(s, readTarget(s));\n for (const s of rested) shown(s, s.get());\n rested.clear();\n for (const [t, moving] of tables) {\n t.fill(owner.columns(t));\n if (moving === 0) tables.delete(t);\n }\n publish();\n },\n showNow(s) {\n if (!s.show) return;\n shown(s, readTarget(s));\n publish();\n },\n get resting() { return rested.size > 0; },\n };\n}\n","import { travel } from '../engine/offsets';\nimport { stateOf, type TargetAxes } from '../target';\nimport type { SampledTrack } from './types';\n\n/** A targeted track's keys in its target's axes. */\nexport interface TargetStops<T> {\n axes: TargetAxes<T>;\n /** One row a key. On an angle axis each carries on from the key before by the short way\n * round, so a row may sit whole turns from the value its key names. */\n stops: number[][];\n}\n\nexport function targetStops<T>(track: SampledTrack<T>): TargetStops<T> {\n const { axes } = stateOf(track.target!);\n const stops: number[][] = [];\n for (const k of track.keys) {\n const row = axes.to(k.value);\n if (row.length !== axes.count || !row.every((x) => typeof x === 'number' && !Number.isNaN(x))) {\n throw new Error(\"sampleTrack: a key's value is not its target's shape\");\n }\n const prev = stops[stops.length - 1];\n if (prev && axes.angles) {\n const short = travel(axes, row, prev);\n for (const i of axes.angles) if (short[i] !== row[i]! - prev[i]!) row[i] = prev[i]! + short[i]!;\n }\n stops.push(row);\n }\n return { axes, stops };\n}\n","import { keys as keysPatch, type Patch, type Setting } from '@msb235/blits';\nimport { resolveEasing } from '@weasel-js/geom';\nimport { axesOf } from '../engine/axes';\nimport { targetStops } from './targetStops';\nimport type { SampledTrack } from './types';\n\ntype Out = { v: unknown };\n/** What an interpolated track's stops carry: blits finds the segment and eases it, and the\n * track's own function makes the value. */\ninterface Box { i: number; value: unknown }\n\ninterface Built {\n /** What it was built from, so a cache handed another track, or new keys, rebuilds. */\n track: object;\n keys: readonly unknown[];\n /** Null where there is nothing to interpolate: one key time, or values with no way to lerp. */\n patch: Patch<number, Out, void> | null;\n t0: number;\n span: number;\n /** Every key's time to the value sampling exactly there returns: the later of keys sharing a\n * time, and the key's own value where blits would reach it as `a + (b - a) * ease(1)`. */\n exact: Map<number, unknown>;\n /** For a track that makes its own values, each interior key's time to a fresh value there, so\n * a caller changing its sample leaves the key alone; for a track on a target, every key's. */\n fresh: Map<number, () => unknown> | null;\n first: unknown;\n last: unknown;\n read: (v: unknown) => unknown;\n}\n\nconst NO_SETTING = {} as Setting<void>;\n/** Where a cache holds its track's `Built`; segment indexes start at 1. A `WeakMap` keyed on the\n * cache instead cost about a fifth of every sample. */\nconst BUILT = -1;\n\nfunction build<T>(track: SampledTrack<T>, cache: Map<number, (u: number) => T> | undefined): Built {\n const { keys } = track;\n let t0 = Infinity;\n let t1 = -Infinity;\n const exact = new Map<number, unknown>();\n for (const k of keys) {\n t0 = Math.min(t0, k.t);\n t1 = Math.max(t1, k.t);\n exact.set(k.t, k.value);\n }\n const span = t1 - t0;\n const out: Built = { track, keys, patch: null, t0, span, exact, fresh: null, first: keys[0].value, last: keys[keys.length - 1].value, read: (v) => v };\n const { interpolator, interpolate } = track;\n const onTarget = track.target && !interpolator && !interpolate ? targetStops(track) : null;\n if (onTarget) {\n // A key answers as a sample between keys does: built from its axes, turns carried over.\n const { axes, stops } = onTarget;\n out.fresh = new Map(keys.map((k, i) => [k.t, () => axes.from(stops[i])]));\n out.first = axes.from(stops[0]);\n out.last = axes.from(stops[stops.length - 1]);\n }\n if (span <= 0) return out;\n\n const ease = (k: (typeof keys)[number]) => (k.easing ? resolveEasing(k.easing) : undefined);\n if (onTarget) {\n const { axes, stops } = onTarget;\n out.patch = keysPatch<number, Out>(\n 1,\n keys.map((k, i) => ({ at: (k.t - t0) / span, delta: { v: stops[i] }, ease: ease(k) })),\n );\n out.read = (v) => axes.from(v as number[]);\n return out;\n }\n if (interpolator || interpolate) {\n const boxes: Box[] = keys.map((k, i) => ({ i, value: k.value }));\n const lerp = (a: Box, b: Box, u: number): Box => {\n if (interpolator) {\n let fn = cache?.get(b.i);\n if (!fn) {\n fn = interpolator(a.value as T, b.value as T);\n cache?.set(b.i, fn);\n }\n return { i: -1, value: fn(u) };\n }\n return { i: -1, value: interpolate!(a.value as T, b.value as T, u) };\n };\n out.patch = keysPatch<number, Out>(\n 1,\n keys.map((k, i) => ({ at: (k.t - t0) / span, delta: { v: boxes[i] }, ease: ease(k) })),\n { lerpBy: () => lerp as (a: never, b: never, u: number) => unknown },\n );\n out.read = (v) => (v as Box).value;\n out.fresh = new Map();\n for (let i = 0; i < keys.length - 1; i++) {\n const at = keys[i].t;\n if (at > t0 && at < t1) out.fresh.set(at, () => lerp(boxes[i], boxes[i + 1], 0).value);\n }\n return out;\n }\n\n const axes = axesOf(keys[0].value);\n if (!axes) return out;\n for (const k of keys) {\n if (axesOf(k.value)?.shape !== axes.shape) {\n throw new Error(`sampleTrack: every key needs the shape of the first (${axes.shape})`);\n }\n }\n const scalar = axes.shape === 'number';\n out.patch = keysPatch<number, Out>(\n 1,\n keys.map((k) => ({ at: (k.t - t0) / span, delta: { v: scalar ? k.value : axes.to(k.value) }, ease: ease(k) })),\n );\n if (!scalar) out.read = (v) => axes.from(v as number[]);\n return out;\n}\n\n/**\n * Sample a track at `t`. Pure: no state, no side effects, safe to call for any\n * `t` in any order — which is what makes scrubbing free.\n *\n * `segmentCache` holds what sampling builds from the keys: the track's blits\n * patch and its `interpolator` factories. Handed another track or a replaced\n * `keys` array, it rebuilds; a key edited in place needs the cache dropped,\n * which `createTimeline` does on `edit`. With no cache, every call builds afresh.\n */\nexport function sampleTrack<T>(\n track: SampledTrack<T>,\n t: number,\n segmentCache?: Map<number, (u: number) => T>,\n): T | undefined {\n if (track.keys.length === 0) return undefined;\n const cache = segmentCache as Map<number, unknown> | undefined;\n let b = cache?.get(BUILT) as Built | undefined;\n if (!b || b.track !== track || b.keys !== track.keys) {\n cache?.clear();\n b = build(track, segmentCache);\n cache?.set(BUILT, b);\n }\n if (Number.isNaN(t)) return b.first as T;\n const fresh = b.fresh?.get(t);\n if (fresh) return fresh() as T;\n const hit = b.exact.get(t);\n if (hit !== undefined || b.exact.has(t)) return hit as T;\n if (!b.patch) {\n if (t < b.t0) return b.first as T;\n if (t >= b.t0 + b.span) return b.last as T;\n throw new Error('sampleTrack: interpolate or interpolator is required for non-numeric keyframe values');\n }\n return b.read(b.patch.at((t - b.t0) / b.span, 0, NO_SETTING).v) as T;\n}\n","import type { Target } from '../target';\nimport { sampleTrack } from './sampleTrack';\nimport type { SampledTrack, Track } from './types';\n\n/** A targeted track's voice on its target. */\nexport interface TrackHold {\n /** Says the track's value changed since the frame read it. */\n touch(): void;\n /** Takes the voice off, committing what the target was showing when `commit`. */\n leave(commit: boolean): void;\n}\n\n/** How a timeline holds a target: the animator's seam, so a timeline knows nothing of voices. */\nexport type OpenTrackHold = (\n target: Target<unknown>,\n value: () => unknown,\n weight: () => number,\n axes?: readonly (number | string)[],\n) => TrackHold;\n\n/** A timeline's sampled tracks: sampled at the playhead, and held on the targets they name. */\nexport interface TrackSampler {\n /** Samples every sampled track at `t`, at any depth. */\n apply(tracks: Track[], t: number): void;\n /** After an edit: what sampling built from the keys is stale. */\n edited(): void;\n /** Lets go of every target, each committing what it was showing. */\n release(): void;\n}\n\ninterface Held {\n hold: TrackHold | null;\n value: unknown;\n /** Where the playhead last stood against the track's keys. */\n where: 'before' | 'inside' | 'after' | null;\n t: number;\n edit: number;\n pass: number;\n}\n\nexport function createTrackSampler(open?: OpenTrackHold): TrackSampler {\n // Per-sampled-track sampling caches, dropped wholesale by `edited`.\n let caches = new WeakMap<object, Map<number, (u: number) => unknown>>();\n const cacheFor = (track: object): Map<number, (u: number) => unknown> => {\n let c = caches.get(track);\n if (!c) { c = new Map(); caches.set(track, c); }\n return c;\n };\n const held = new Map<SampledTrack<unknown>, Held>();\n let edit = 0;\n let pass = 0;\n\n const openOn = (st: SampledTrack<unknown>, h: Held): TrackHold => {\n if (!open) throw new Error('timeline: a track with a `target` needs a timeline made by an animator');\n const w = st.weight ?? 1;\n return open(st.target!, () => h.value, typeof w === 'function' ? w : () => w, st.axes);\n };\n\n const place = (st: SampledTrack<unknown>, value: unknown, t: number): void => {\n let h = held.get(st);\n if (!h) held.set(st, h = { hold: null, value, where: null, t, edit, pass });\n const moved = h.t !== t || h.edit !== edit;\n h.value = value;\n h.t = t;\n h.edit = edit;\n h.pass = pass;\n const { keys } = st;\n const where = t < keys[0].t ? 'before' : t > keys[keys.length - 1].t ? 'after' : 'inside';\n if (where === 'inside') {\n if (!h.hold) h.hold = openOn(st, h);\n else if (moved) h.hold.touch();\n } else if (where === 'before') {\n h.hold?.leave(false);\n h.hold = null;\n } else if (h.where !== 'after') {\n // Past its last key the move is made: the target keeps it, and is free for others to move.\n (h.hold ?? openOn(st, h)).leave(true);\n h.hold = null;\n }\n h.where = where;\n };\n\n const visit = (tracks: Track[], t: number): void => {\n for (const track of tracks) {\n if (track.kind === 'sampled') {\n const st = track as SampledTrack<unknown>;\n const v = sampleTrack(st, t, cacheFor(st));\n if (v === undefined) continue;\n if (st.target) place(st, v, t);\n st.onTick?.(v);\n } else if (track.kind === 'timeline') {\n visit(track.timeline.tracks, t - track.at);\n }\n }\n };\n\n return {\n apply(tracks, t) {\n pass += 1;\n visit(tracks, t);\n // A track an edit took out of the timeline, or emptied, was not sampled this pass.\n for (const [st, h] of held) {\n if (h.pass === pass) continue;\n h.hold?.leave(true);\n held.delete(st);\n }\n },\n edited() {\n caches = new WeakMap();\n edit += 1;\n },\n release() {\n for (const h of held.values()) {\n if (!h.hold) continue;\n h.hold.leave(true);\n h.hold = null;\n h.where = null;\n }\n },\n };\n}\n","import { createEmitter } from '@weasel-js/registry';\nimport type { AnimationHandle } from '../types';\nimport { createBooker } from './booking';\nimport { createEventFirer } from './fireEvents';\nimport { createTrackSampler, type OpenTrackHold } from './trackHolds';\nimport type { EventTrack, TimelineEvent, TimelineHandle, TimelineOptions, Track } from './types';\n\n/** The animator's internal `register`, narrowed to what a timeline needs. */\nexport type TimelineRegister = (seed: {\n id: number;\n cancelKey?: string;\n /** Registers under an existing `cancelKey` without cancelling whoever holds\n * it. A revived timeline is the same animation, not a new claim on the key. */\n keepExisting?: boolean;\n /** `scale` is the effective time scale this frame advanced at, zero while\n * paused at any level. */\n tick: (virtualNow: number, scale?: number) => boolean;\n onCancel?: () => void;\n kind: 'timeline';\n label?: string;\n progress?: () => number;\n}) => AnimationHandle;\n\n/** Where a timeline reports its crossings and laps to `animator.watch`. Each\n * call site checks `watched` first, so an unwatched timeline builds nothing. */\nexport interface TimelineReport {\n readonly watched: boolean;\n /** `path` is a scratch stack the timeline goes on mutating; copy it to keep it. */\n fire(track: EventTrack, path: readonly number[], event: TimelineEvent, lateBy: number): void;\n lap(lap: number): void;\n}\n\n/** End time of a track: its last key/event, or a nested timeline's own end. */\nfunction trackEnd(track: Track): number {\n switch (track.kind) {\n case 'sampled': return track.keys.length ? track.keys[track.keys.length - 1].t : 0;\n case 'event': return track.events.length ? track.events[track.events.length - 1].t : 0;\n case 'timeline': return track.at + tracksEnd(track.timeline.tracks, track.timeline.duration);\n }\n}\n\nfunction tracksEnd(tracks: Track[], explicit?: number): number {\n if (explicit != null) return explicit;\n let max = 0;\n for (const t of tracks) max = Math.max(max, trackEnd(t));\n return max;\n}\n\n/** Hands `take` the laps a playhead at or past `duration` has crossed, of those left: one\n * at a time under a lap count, and all at once under an endless loop, where a far seek\n * can skip a billion laps of a short duration. */\nfunction crossLaps(playhead: number, duration: number, loopsLeft: number, take: (laps: number) => void): void {\n if (duration <= 0 || playhead < duration) return;\n if (loopsLeft === Infinity) { take(Math.floor(playhead / duration)); return; }\n for (let at = playhead, left = loopsLeft; at >= duration && left > 0; at -= duration, left -= 1) take(1);\n}\n\n/**\n * Create a timeline as a registered animator animation.\n *\n * The playhead is NOT the entry's `virtualNow` directly — it is\n * `virtualNow + offset`, where `offset` is what `seek` and looping move.\n *\n * A finished timeline leaves the animator's table, so `seek` and a\n * duration-extending `edit` re-register it. Staying registered instead would\n * hold a slot — and the rAF loop — open for every timeline ever created.\n */\nexport function createTimeline(\n register: TimelineRegister,\n id: number,\n opts: TimelineOptions,\n report?: TimelineReport,\n hold?: OpenTrackHold,\n): TimelineHandle {\n let duration = tracksEnd(opts.tracks, opts.duration);\n let offset = 0;\n let lastVirtual = 0;\n let playhead = 0;\n let prevPlayhead = -Infinity;\n /** A seek leaves the event it landed on unfired, so the next span starts at it. */\n let prevOpen = false;\n /** A held playhead fires nothing: what it sits on waits for playback to move. */\n let held = false;\n let done = false;\n let live = true;\n let cancelled = false;\n let wantPaused = opts.autoplay === false;\n let wantScale = 1;\n\n const edited = createEmitter();\n const playback = createEmitter();\n const playbackChanged = playback.emit;\n\n const loopOpt = opts.loop ?? false;\n let loopsLeft = loopOpt === true ? Infinity : loopOpt === false ? 0 : loopOpt;\n let lap = 0;\n\n const booker = opts.booking\n ? createBooker(opts.booking, {\n tracks: opts.tracks,\n duration: () => duration,\n lapsLeft: () => loopsLeft,\n lap: () => lap,\n playhead: () => playhead,\n })\n : null;\n const sampler = createTrackSampler(hold);\n\n const fireEvents = createEventFirer(report, booker !== null);\n\n // Flush the outgoing pass's tail before re-arming, or an event between the\n // last tick and `duration` is dropped whenever a frame straddles the seam.\n const onWrap = (): void => {\n if (!held) fireEvents(opts.tracks, prevPlayhead, duration, prevOpen);\n prevPlayhead = -Infinity;\n prevOpen = false;\n if (report?.watched) report.lap(lap);\n };\n\n const tick = (virtualNow: number, scale?: number): boolean => {\n lastVirtual = virtualNow;\n const rate = scale ?? (base.isPaused() ? 0 : base.timeScale());\n held = rate === 0;\n // A held playhead a seek left on the seam is the end of its lap until it plays.\n const parked = held && duration > 0 && playhead === duration && loopsLeft > 0;\n if (!parked) {\n playhead = virtualNow + offset;\n crossLaps(playhead, duration, loopsLeft, (laps) => {\n loopsLeft -= laps;\n offset -= laps * duration;\n playhead -= laps * duration;\n lap += laps;\n onWrap();\n });\n }\n\n const finished = playhead >= duration && !parked;\n playhead = Math.min(playhead, duration);\n\n // Sampled before fired, so a handler reads the current frame's values.\n sampler.apply(opts.tracks, playhead);\n if (!held) {\n fireEvents(opts.tracks, prevPlayhead, playhead, prevOpen);\n prevPlayhead = playhead;\n prevOpen = false;\n }\n booker?.tick(virtualNow, rate);\n\n if (finished && !done) { done = true; opts.onDone?.(); playbackChanged(); }\n // Re-read: `onDone` may have seeked back or extended the duration, and\n // retiring the entry would strand the replay its own handler just started.\n if (playhead < duration || parked) return false;\n live = false;\n sampler.release();\n return true;\n };\n\n // Every cancel path inside the animator routes through here, so a timeline\n // cancelled by key or by `cancelAll` is as dead as one cancelled by hand.\n const onCancel = (): void => {\n const first = !cancelled;\n cancelled = true;\n live = false;\n booker?.retract();\n sampler.release();\n if (first) playbackChanged();\n };\n\n const seed = { id, cancelKey: opts.cancelKey, tick, onCancel, kind: 'timeline' as const, label: opts.label, progress: () => (duration > 0 ? playhead / duration : 1) };\n const base = register(seed);\n\n // A paused entry's scale is zero, so `virtualNow` never advances and the\n // playhead holds at 0 until the consumer resumes.\n if (opts.autoplay === false) base.pause();\n\n /** Put a finished timeline back on the animator's table. A re-registered\n * entry's `virtualNow` restarts at 0, so `offset` carries the playhead. */\n const rearm = (): void => {\n if (cancelled || playhead >= duration) return;\n done = false;\n if (live) return;\n booker?.rearm();\n lastVirtual = 0;\n offset = playhead;\n live = true;\n register({ ...seed, keepExisting: true });\n if (wantPaused) base.pause();\n base.setTimeScale(wantScale);\n };\n\n // Not left to the next frame: whoever seeks or edits and then reads a target sees it.\n const sampleNow = (): void => {\n if (live && playhead >= 0 && playhead < duration) sampler.apply(opts.tracks, playhead);\n };\n return {\n ...base,\n // Not just `onCancel`: cancelling a finished timeline never reaches the\n // animator, and must still keep a later seek from reviving it.\n cancel() { onCancel(); base.cancel(); },\n // Playback intent is tracked here, not read back from the entry: a revived\n // one is a fresh registration, and defaults to running at scale 1.\n pause() { wantPaused = true; base.pause(); booker?.retract(); playbackChanged(); },\n resume() { wantPaused = false; base.resume(); playbackChanged(); },\n setTimeScale(s) { wantScale = s; base.setTimeScale(s); playbackChanged(); },\n timeScale: () => (live ? base.timeScale() : wantScale),\n isPaused: () => (live ? base.isPaused() : wantPaused),\n seek(t) {\n booker?.retract();\n offset = t - lastVirtual;\n playhead = t;\n prevPlayhead = t;\n prevOpen = true;\n booker?.seek();\n rearm();\n sampleNow();\n playbackChanged();\n },\n time: () => playhead,\n duration: () => duration,\n tracks: () => opts.tracks,\n setLoop(loop) {\n loopsLeft = loop === true ? Infinity : loop === false ? 0 : loop;\n booker?.retract();\n playbackChanged();\n },\n loop: () => (loopsLeft === Infinity ? true : loopsLeft === 0 ? false : loopsLeft),\n edit(fn) {\n fn();\n sampler.edited();\n duration = tracksEnd(opts.tracks, opts.duration);\n booker?.retract();\n rearm();\n sampleNow();\n edited.emit();\n },\n subscribe: edited.subscribe,\n subscribePlayback: playback.subscribe,\n };\n}\n","import type { DecayOptions, PhysicsOptions, TargetDecayOptions, TargetPhysicsOptions } from '../types';\n\n/** A decay as the coast `physics` runs. Per-second friction v(t) = v0 * friction^t is\n * m*dv/dt = -c*v with c = -ln(friction), m = 1, k = 0. */\nexport function decayAsPhysics<T>(o: DecayOptions<T> | TargetDecayOptions<T>): PhysicsOptions<T> | TargetPhysicsOptions<T> {\n const shared = {\n from: o.from, to: null, velocity: o.velocity,\n stiffness: 0, damping: -Math.log(o.friction ?? 0.95), mass: 1, restThreshold: o.threshold ?? 0.5,\n onTick: o.onTick, onDone: o.onDone, cancelKey: o.cancelKey, label: o.label,\n };\n if (o.target) return { ...shared, target: o.target, interrupt: o.interrupt };\n return {\n ...shared,\n from: o.from,\n onTick: o.onTick,\n add: o.add,\n // DecayOptions doesn't carry subtract; derive from add+scale.\n subtract: (a, b) => o.add(a, o.scale(b, -1)),\n scale: o.scale,\n magnitude: o.magnitude,\n };\n}\n","import { axisIndexes } from '../axisNames';\nimport { committedInto, type TargetState } from '../target';\nimport type { AnimationContext } from './context';\nimport { absorb, axesFor, shortWay } from './offsets';\n\n/** What {@link openHold} takes. */\nexport interface HoldSource<T> {\n target: TargetState<T>;\n /** The value to show in place of the committed one, read whenever the target is. */\n value(): T;\n /** Its share among the target's holds, read as `value` is. */\n weight(): number;\n /** The axes it holds, by index or by the target's names for them. Default: all of them. */\n axes?: readonly (number | string)[];\n /** True where `value` and `weight` answer the same until `touch` says otherwise. A target\n * whose holds are all so is read again only when touched, or when its committed value moves. */\n fixed?: boolean;\n}\n\n/** A hold on its target, apart from any row on the animator's table. */\nexport interface OpenHold {\n /** Says `value` or `weight` changed outside a frame's own reading of them. */\n touch(): void;\n /** Takes the hold off the target. With `commit`, the committed value moves so that what the\n * target shows stays where it was. */\n leave(commit: boolean): void;\n}\n\ninterface Member {\n /** Its value's axes, in an array of its own that the next call writes over. */\n value(): number[];\n weight(): number;\n /** Nonzero at each axis it holds; null where it holds them all. */\n covers: Uint8Array | null;\n fixed: boolean;\n /** Its weight and value as the fold now running read them. */\n w: number;\n v: number[];\n}\n\n/** A target's holds, which reach it as one voice. */\ninterface Group {\n members: Member[];\n /** The voice's id in the codec. */\n voice: number;\n /** Nonzero at each angle axis. */\n angle: Uint8Array;\n}\n\nconst groups = new WeakMap<TargetState, Group>();\n\nconst share = (w: number): number => (w > 0 ? Math.min(w, 1) : 0);\n\ninterface Folded {\n /** What the holds add to the committed value. */\n delta: number[];\n /** The weight holding each axis. */\n total: number[];\n}\n\n/**\n * A group's holds as one distance from `committed`, without `skip`. On each axis the holds\n * over it are alternatives: one weighs `w / max(1, total)`, and what their weights leave short\n * of 1 is the committed value's. An angle goes by way of the direction the holds average to,\n * so two holds turn the short way toward each other.\n */\nfunction fold(group: Group, committed: readonly number[], skip?: Member, into?: Folded): Folded {\n const n = committed.length;\n const delta = into ? into.delta : new Array<number>(n);\n const total = into ? into.total : new Array<number>(n);\n const { members, angle } = group;\n // Each member is asked once, whatever the axes: its weight and value are the caller's functions.\n for (let h = 0; h < members.length; h++) {\n const m = members[h]!;\n m.w = m === skip ? 0 : m.weight();\n if (m.w > 0) m.v = m.value();\n }\n for (let a = 0; a < n; a++) {\n const c = committed[a]!;\n let held = 0;\n let sum = 0;\n let sin = 0;\n let cos = 0;\n for (let h = 0; h < members.length; h++) {\n const m = members[h]!;\n if (m === skip || !(m.w > 0) || (m.covers && !m.covers[a])) continue;\n held += m.w;\n if (!angle[a]) sum += m.w * (m.v[a]! - c);\n else {\n sin += m.w * Math.sin(m.v[a]!);\n cos += m.w * Math.cos(m.v[a]!);\n }\n }\n total[a] = held;\n if (held > 0 && angle[a]) {\n // Where the directions cancel out there is no way round between them: each from committed.\n const mean = Math.hypot(sin, cos) < 1e-9 ? null : Math.atan2(sin, cos);\n for (let h = 0; h < members.length; h++) {\n const m = members[h]!;\n if (m === skip || !(m.w > 0) || (m.covers && !m.covers[a])) continue;\n sum += m.w * (mean === null ? shortWay(m.v[a]! - c) : shortWay(mean - c) + shortWay(m.v[a]! - mean));\n }\n }\n delta[a] = held > 0 ? sum / Math.max(1, held) : 0;\n }\n return into ?? { delta, total };\n}\n\n/** How far the committed value moves as `leaving` goes, so the target shows what it did. */\nfunction settle(group: Group, leaving: Member, committed: readonly number[]): number[] {\n const all = fold(group, committed);\n const rest = fold(group, committed, leaving);\n const own = leaving.value().slice();\n return committed.map((c, a) => {\n if (leaving.covers && !leaving.covers[a]) return 0;\n // Holds that cover the committed value outright leave it nothing to show: it takes this one's.\n if (rest.total[a]! >= 1 - 1e-9) return group.angle[a] ? shortWay(own[a]! - c) : own[a]! - c;\n return (all.delta[a]! - rest.delta[a]!) / (1 - rest.total[a]!);\n });\n}\n\n/**\n * Keeps what shows of each move behind `s`'s holds as their weights go from `before` to\n * `after` on a release that commits: a hold that covered a share of a move takes that share\n * with it, so the move goes on as far as it was showing and no further.\n */\nfunction dim(s: TargetState, before: readonly number[], after: readonly number[]): void {\n for (const b of s.behind) {\n for (let a = 0; a < before.length; a++) {\n const open = 1 - Math.min(after[a]!, 1);\n const was = 1 - Math.min(before[a]!, 1);\n if (open < 1e-9 || open === was) continue;\n b.kept ??= new Array<number>(before.length).fill(1);\n b.kept[a] = (b.kept[a]! * was) / open;\n s.dimmed = true;\n }\n }\n}\n\nfunction coverOf(wanted: readonly (number | string)[] | undefined, axes: TargetState['axes']): Uint8Array | null {\n if (!wanted) return null;\n const covers = new Uint8Array(axes.count);\n for (const a of axisIndexes(axes, wanted)) covers[a] = 1;\n return covers;\n}\n\n/** Holds a value on a target: it shows `value` where the committed value would show. */\nexport function openHold<T>(ctx: AnimationContext, o: HoldSource<T>): OpenHold {\n const s = o.target;\n const ax = s.axes;\n const state = s as unknown as TargetState;\n axesFor(ax, o.value(), 'value');\n let gone = false;\n const buffer = new Array<number>(ax.count).fill(0);\n const member: Member = {\n value: ax.write\n ? () => {\n ax.write!(o.value(), buffer, 0);\n return buffer;\n }\n : () => ax.to(o.value()),\n weight: () => (gone ? 0 : share(o.weight())),\n covers: coverOf(o.axes, ax),\n fixed: o.fixed === true,\n w: 0,\n v: buffer,\n };\n\n ctx.targets.attach(state);\n s.held += 1;\n let group = groups.get(state);\n if (!group) {\n const angle = new Uint8Array(ax.count);\n for (const a of ax.angles ?? []) angle[a] = 1;\n const made: Group = { members: [], voice: ctx.nextId(), angle };\n const folded: Folded = { delta: [], total: new Array<number>(ax.count).fill(0) };\n groups.set(state, group = made);\n ctx.seedClock();\n s.slot = ctx.codec.hold({\n id: made.voice,\n on: s,\n axes: ax.count,\n still: member.fixed,\n at: () => {\n // One array each for as long as the holds stand: a frame of many holds builds none.\n const committed = (s.heldAt ??= new Array<number>(ax.count).fill(0));\n committedInto(s, committed, 0);\n // The codec keeps what this answers as the voice's own value, so that one is new.\n folded.delta = new Array<number>(ax.count);\n const { delta, total } = fold(made, committed, undefined, folded);\n const cover = (s.cover ??= new Array<number>(ax.count).fill(0));\n for (let a = 0; a < cover.length; a++) cover[a] = Math.min(total[a]!, 1);\n return delta;\n },\n });\n }\n const { members, voice } = group;\n members.push(member);\n const still = (): void => ctx.codec.still(voice, members.every((m) => m.fixed));\n still();\n ctx.touch(state, true);\n\n return {\n touch: () => { if (!gone) ctx.touch(state); },\n leave(commit) {\n if (gone) return;\n if (commit && !s.discard) {\n const group = groups.get(state)!;\n const committed = ax.to(s.get());\n absorb(s, settle(group, member, committed));\n dim(state, fold(group, committed).total, fold(group, committed, member).total);\n }\n gone = true;\n members.splice(members.indexOf(member), 1);\n s.held -= 1;\n if (s.held === 0) {\n s.heldAt = null;\n s.cover = null;\n groups.delete(state);\n ctx.codec.stop(voice);\n // Nothing stands in front of the committed value now, so it takes what waited beside it.\n const beside = s.beside;\n s.beside = null;\n if (beside) absorb(s, beside);\n } else still();\n ctx.targets.detach(state);\n ctx.touch(state, true);\n },\n };\n}\n","import { stateOf } from '../target';\nimport type { HoldHandle, HoldOptions } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport { openHold } from './holds';\n\nconst isFn = (x: unknown): x is () => unknown => typeof x === 'function';\n\n/** A hold as a row on the animator's table: it stays until canceled or released. */\nexport function startHold<T>(ctx: AnimationContext, o: HoldOptions<T>): HoldHandle {\n const target = stateOf(o.target);\n const id = ctx.nextId();\n const { value, weight = 1 } = o;\n // A hold of plain values changes only when told to, so it asks for no frames of its own.\n const fixed = !isFn(value) && !isFn(weight);\n const seed = {\n id, kind: 'hold', cancelKey: o.cancelKey, label: o.label, target,\n keepExisting: o.interrupt === false,\n idle: fixed,\n // It leaves when released or canceled, and has nothing to do on a frame.\n due: Infinity,\n } as AnimationSeed;\n // Ahead of opening: an interrupted hold commits what it showed, which this one then stands in for.\n if (o.cancelKey != null && o.interrupt !== false) ctx.interrupt(o.cancelKey, seed);\n const held = openHold(ctx, {\n target,\n value: isFn(value) ? (value as () => T) : () => value,\n weight: isFn(weight) ? weight : () => weight,\n axes: o.axes,\n fixed,\n });\n seed.onCancel = () => held.leave(true);\n seed.tick = () => {\n if (!ctx.tripwire()) return false;\n held.leave(true);\n return true;\n };\n const base = ctx.register(seed);\n return {\n ...base,\n touch: held.touch,\n release(r) {\n if (!ctx.has(id)) return;\n held.leave(r?.commit !== false);\n ctx.finish(id);\n },\n };\n}\n","export interface VectorOps<T> {\n add(a: T, b: T): T;\n subtract(a: T, b: T): T;\n scale(v: T, k: number): T;\n}\n\n/** One semi-implicit Euler step of a damped spring toward `target`, or of pure damping when\n * `target` is null. Returns the new value and velocity. */\nexport function stepSpring<T>(\n ops: VectorOps<T>,\n value: T, velocity: T, target: T | null,\n k: number, damping: number, mass: number, dt: number,\n): { value: T; velocity: T } {\n const ref = target ?? value;\n const displacement = ops.subtract(value, ref);\n const springForce = ops.scale(displacement, target == null ? 0 : -k);\n const dampingForce = ops.scale(velocity, -damping);\n const accel = ops.scale(ops.add(springForce, dampingForce), 1 / mass);\n const v = ops.add(velocity, ops.scale(accel, dt));\n return { value: ops.add(value, ops.scale(v, dt)), velocity: v };\n}\n","import { SPRING_PRESETS } from '@weasel-js/geom';\nimport type { AnimationKind, PhysicsHandle, PhysicsOptions } from '../types';\nimport { axesOf } from './axes';\nimport type { SpringReader } from './codec';\nimport type { AnimationContext } from './context';\nimport { stepSpring } from './integrator';\n\nexport function resolveSpringConstants(o: { preset?: string; stiffness?: number; damping?: number; mass?: number }) {\n const preset = o.preset ? SPRING_PRESETS[o.preset as keyof typeof SPRING_PRESETS] : null;\n return {\n stiffness: o.stiffness ?? preset?.stiffness ?? 170,\n damping: o.damping ?? preset?.damping ?? 26,\n mass: o.mass ?? preset?.mass ?? 1,\n };\n}\n\n/** A spring or a coast that hands each frame's value to the caller's `onTick`. */\nexport function startPhysics<T>(\n ctx: AnimationContext,\n o: PhysicsOptions<T>,\n kind: AnimationKind,\n): PhysicsHandle<T> {\n const { codec } = ctx;\n const id = ctx.nextId();\n const isNumeric = typeof o.from === 'number';\n if (!isNumeric && (!o.add || !o.subtract || !o.scale || !o.magnitude)) {\n throw new Error('physics: add/subtract/scale/magnitude are required for non-numeric T');\n }\n const add = o.add ?? ((a: T, b: T) => ((a as unknown as number) + (b as unknown as number)) as unknown as T);\n const subtract = o.subtract ?? ((a: T, b: T) => ((a as unknown as number) - (b as unknown as number)) as unknown as T);\n const scale = o.scale ?? ((v: T, k: number) => ((v as unknown as number) * k) as unknown as T);\n const magnitude = o.magnitude ?? ((v: T) => Math.abs(v as unknown as number));\n const { stiffness: kBase, damping, mass } = resolveSpringConstants(o);\n const restThreshold = o.restThreshold ?? 0.01;\n\n let target: T | null = o.to ?? null;\n let value = o.from;\n // Default to zero velocity: assumes scale(_, 0) returns the zero vector of T. Pass an explicit velocity for unusual T where this isn't true.\n let velocity: T = o.velocity ?? scale(o.from, 0);\n let lastTime: number | null = null;\n\n // blits' closed forms need positive damping and mass, and a spring with a target needs\n // stiffness; decay's handle never takes a target.\n const solvable = damping > 0 && mass > 0 && (kBase > 0 || kind === 'decay');\n const fromAxes = solvable ? axesOf(o.from) : null;\n const sameShape = (v: T | null | undefined): boolean => v == null || axesOf(v)?.shape === fromAxes!.shape;\n const axes = fromAxes && sameShape(o.to) && sameShape(o.velocity) ? fromAxes : null;\n let reader: SpringReader | null = null;\n if (axes) {\n ctx.seedClock();\n // Started ahead of `register`, whose `start` listeners may already cancel it.\n reader = codec.spring({\n id, axes: axes.count,\n from: axes.to(o.from),\n to: o.to == null ? null : axes.to(o.to),\n velocity: o.velocity == null ? new Array<number>(axes.count).fill(0) : axes.to(o.velocity),\n stiffness: kBase, damping, mass,\n });\n }\n\n const baseHandle = ctx.register({\n id,\n kind,\n cancelKey: o.cancelKey,\n label: o.label,\n tick(nowMs) {\n if (ctx.tripwire()) { codec.stop(id); return true; }\n if (lastTime == null) {\n lastTime = nowMs;\n // Already-at-rest short-circuit: decay-mode (target == null)\n // with starting velocity below threshold should complete\n // immediately rather than emit a tick and wait a frame.\n if (target == null && magnitude(velocity) < restThreshold) {\n codec.stop(id);\n ctx.reportEnd(id);\n o.onDone?.();\n return true;\n }\n // The codec's voice has run since registration, so only Euler starts its clock here.\n if (!axes) {\n o.onTick(value);\n return false;\n }\n }\n if (axes) {\n const m = reader!.motion();\n value = axes.from(m.value);\n velocity = axes.from(m.velocity);\n } else {\n // Semi-implicit Euler, for a T blits cannot move as axes, or constants its closed forms can't solve.\n const dt = Math.min(0.064, (nowMs - lastTime) / 1000);\n const next = stepSpring({ add, subtract, scale }, value, velocity, target, kBase, damping, mass, dt);\n value = next.value;\n velocity = next.velocity;\n }\n lastTime = nowMs;\n o.onTick(value);\n const velRested = magnitude(velocity) < restThreshold;\n const posRested = target == null\n ? true\n : magnitude(subtract(value, target)) < restThreshold;\n if (velRested && posRested) {\n if (target != null) o.onTick(target);\n codec.stop(id);\n // As for a tween: canceled from its own onTick, it never completes.\n if (ctx.has(id)) {\n ctx.reportEnd(id);\n o.onDone?.();\n }\n return true;\n }\n return false;\n },\n });\n\n const checkShape = (v: T, what: string): void => {\n if (!sameShape(v)) throw new Error(`physics: ${what} is not the same shape as \\`from\\``);\n };\n return {\n ...baseHandle,\n setTarget: (newTo: T | null) => {\n if (axes && newTo != null) checkShape(newTo, 'setTarget');\n target = newTo;\n if (axes && codec.has(id)) codec.retarget(id, newTo == null ? null : axes.to(newTo));\n },\n setVelocity: (v: T) => {\n if (axes) checkShape(v, 'setVelocity');\n velocity = v;\n if (axes && codec.has(id)) codec.push(id, axes.to(v));\n },\n };\n}\n","/**\n * The soonest a damped spring toward 0 can be at rest, in ms from where it stands at `value`\n * and `velocity`: under `threshold` in both, each as a length over the axes.\n *\n * Damping takes energy out no faster than `2 * damping / mass` of it a second, and at rest the\n * energy is under what `threshold` in both would hold, so the spring cannot be at rest before\n * its energy has had time to fall that far. Never later than the rest itself, and sooner by\n * more the less the spring is damped. With a `stiffness` of 0 it is a coast, at rest once it\n * is slow, and the answer is when that is.\n */\nexport function earliestRest(\n value: readonly number[],\n velocity: readonly number[],\n stiffness: number,\n damping: number,\n mass: number,\n threshold: number,\n): number {\n let energy = 0;\n for (let i = 0; i < value.length; i++) energy += stiffness * value[i]! ** 2 + mass * velocity[i]! ** 2;\n const atRest = (stiffness + mass) * threshold ** 2;\n if (!(energy > atRest)) return 0;\n return ((1000 * mass) / (2 * damping)) * Math.log(energy / atRest);\n}\n","import type { TargetState } from '../target';\nimport type { Codec, Own } from './codec';\nimport { bump, minus, plus } from './offsets';\n\n/** What {@link createSpringVoices} takes. */\nexport interface SpringVoicesOptions {\n /** The animation's id, which its first voice takes. */\n id: number;\n nextId(): number;\n stiffness: number;\n damping: number;\n mass: number;\n}\n\n/**\n * A spring on a target as up to two voices that sum to it. One is the move its destinations\n * made in the committed value, which a hold covers; the other is the rest, which shows on top\n * of a hold: a `from` away from the committed value, a push, a coast. A spring is linear, so\n * the two run apart and add up to the one spring.\n */\nexport interface SpringVoices {\n /** Both voices summed: the animation's whole offset, and its velocity. */\n own(): Own;\n /** What is left of the move. */\n moved(): number[];\n /** Adds `delta` to the move: a destination has moved the committed value by that much. */\n move(delta: readonly number[]): void;\n /** Stops the move's voice, where the committed value has taken what was left of it. */\n settleMove(): void;\n /** Starts the rest over at `from` and `velocity`, toward nothing left or, for a coast, free. */\n rest(from: readonly number[], velocity: readonly number[], coast: boolean): void;\n /** Sets the animation's velocity, by way of the rest. */\n push(velocity: readonly number[]): void;\n rate(rate: number): void;\n stop(): void;\n}\n\nexport function createSpringVoices(codec: Codec, s: TargetState, o: SpringVoicesOptions): SpringVoices {\n const n = s.axes.count;\n const zeros = (): number[] => new Array<number>(n).fill(0);\n const moving = { id: -1 };\n const resting = { id: -1 };\n let first = true;\n let rate = 1;\n let coasting = false;\n\n const of = (v: { id: number }): Own =>\n (v.id >= 0 ? codec.own(v.id) : undefined) ?? { value: zeros(), velocity: zeros() };\n\n const cue = (v: { id: number }, from: readonly number[], velocity: readonly number[], to: number[] | null): void => {\n if (v.id >= 0) {\n const was = codec.own(v.id)!.value;\n codec.recue(v.id, from.slice(), velocity.slice(), to);\n bump(s, minus(from, was), 1);\n return;\n }\n v.id = first ? o.id : o.nextId();\n first = false;\n s.slot = codec.spring({\n id: v.id, on: s, axes: n, from: from.slice(), to, velocity: velocity.slice(),\n stiffness: o.stiffness, damping: o.damping, mass: o.mass,\n });\n if (rate !== 1) codec.rate(v.id, rate);\n bump(s, from, 1);\n };\n\n const drop = (v: { id: number }): void => {\n if (v.id < 0) return;\n const own = codec.own(v.id);\n if (own) bump(s, own.value, -1);\n codec.stop(v.id);\n v.id = -1;\n };\n\n return {\n own() {\n const a = of(moving);\n const b = of(resting);\n return { value: plus(a.value, b.value), velocity: plus(a.velocity, b.velocity) };\n },\n moved: () => of(moving).value,\n move(delta) {\n const m = of(moving);\n cue(moving, plus(m.value, delta), m.velocity, zeros());\n },\n settleMove: () => drop(moving),\n rest(from, velocity, coast) {\n coasting = coast;\n cue(resting, from, velocity, coast ? null : zeros());\n },\n push(velocity) {\n const v = minus(velocity, of(moving).velocity);\n if (resting.id < 0) cue(resting, zeros(), v, coasting ? null : zeros());\n else codec.push(resting.id, v);\n },\n rate(r) {\n rate = r;\n for (const v of [moving, resting]) if (v.id >= 0 && codec.has(v.id)) codec.rate(v.id, r);\n },\n stop() {\n drop(moving);\n drop(resting);\n },\n };\n}\n","import { stateOf } from '../target';\nimport type { AnimationKind, PhysicsHandle, TargetPhysicsOptions } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport { absorb, axesFor, comeOut, commitOffset, goBehind, minus, norm, plus, takeUp, times, travel } from './offsets';\nimport { resolveSpringConstants } from './physicsAnimation';\nimport { earliestRest } from './springRest';\nimport { createSpringVoices } from './springVoices';\n\nconst any = (a: readonly number[]): boolean => a.some((x) => x !== 0);\n\n/** The spring's constants, refused where blits' closed forms cannot solve them. */\nfunction constantsFor(o: Parameters<typeof resolveSpringConstants>[0], kind: AnimationKind, toward: boolean) {\n const c = resolveSpringConstants(o);\n if (!(c.damping > 0) || !(c.mass > 0) || (toward && !(c.stiffness > 0))) {\n throw new Error(`${kind}: an animation on a target needs positive damping and mass, and stiffness to reach \\`to\\``);\n }\n return c;\n}\n\ntype Along = readonly number[];\n\n/** When a spring or a coast with no `onTick` can next be at rest. Until then its tick, which\n * only asks whether it is, has nothing to do. */\nfunction restWaits(\n ctx: AnimationContext,\n id: number,\n quiet: boolean,\n c: { stiffness: number; damping: number; mass: number },\n threshold: number,\n) {\n // Nothing pulls a coast, so it is at rest once it is slow.\n const until = (value: Along, velocity: Along, coast: boolean): number =>\n earliestRest(value, velocity, coast ? 0 : c.stiffness, c.damping, c.mass, threshold);\n return {\n /** The `due` it registers with. */\n first: (value: Along, velocity: Along, coast: boolean): number | undefined =>\n (quiet ? until(value, velocity, coast) : undefined),\n /** Leaves it unticked until then. Answers false, as the tick of one still moving does. */\n again(value: Along, velocity: Along, coast: boolean): false {\n if (quiet) ctx.defer(id, until(value, velocity, coast));\n return false;\n },\n };\n}\n\n/**\n * A spring or a coast on a target. A spring commits its destination as it starts and its voices\n * are what is left to travel. A coast has no destination: its voice is how far it has gone, which\n * it commits when it stops.\n */\nexport function startOffsetPhysics<T>(\n ctx: AnimationContext,\n o: TargetPhysicsOptions<T>,\n kind: AnimationKind,\n): PhysicsHandle<T> {\n const s = stateOf(o.target);\n const ax = s.axes;\n let dest = o.to == null ? null : axesFor(ax, o.to, 'to');\n const constants = constantsFor(o, kind, dest != null);\n const { stiffness, damping, mass } = constants;\n const given = o.from === undefined ? null : axesFor(ax, o.from, 'from');\n let velocity = o.velocity === undefined ? null : axesFor(ax, o.velocity, 'velocity');\n const restThreshold = o.restThreshold ?? 0.01;\n const zeros = (): number[] => new Array<number>(ax.count).fill(0);\n\n const id = ctx.nextId();\n const waits = restWaits(ctx, id, !o.onTick, constants, restThreshold);\n const interrupts = o.interrupt !== false;\n const seed = {\n id, kind, cancelKey: o.cancelKey, label: o.label, target: s, keepExisting: !interrupts,\n } as AnimationSeed;\n if (o.cancelKey != null && interrupts) {\n // Read ahead of the interrupt, which stops the voices whose velocity this is.\n velocity ??= ctx.velocityUnder(o.cancelKey, s as never);\n ctx.interrupt(o.cancelKey, seed);\n }\n const before = ax.to(s.get());\n const committed = dest ? takeUp(s) : before;\n const start = travel(ax, given ?? committed, dest ?? committed);\n /** The move the destination makes in the committed value; the rest of `start` rides on top. */\n const move = dest ? travel(ax, before, dest) : zeros();\n\n ctx.targets.attach(s as never);\n if (o.to != null) s.set(o.to);\n ctx.seedClock();\n const voices = createSpringVoices(ctx.codec, s as never, { id, nextId: ctx.nextId, stiffness, damping, mass });\n if (any(move)) voices.move(move);\n const top = minus(start, move);\n if (!any(move) || any(top) || (velocity && any(velocity))) voices.rest(top, velocity ?? zeros(), dest == null);\n const behind = goBehind(s, voices.moved);\n\n let left = false;\n const leave = (commit: boolean): void => {\n if (left) return;\n left = true;\n const moved = voices.moved();\n const shown = comeOut(s, behind, moved);\n if (commit) commitOffset(s, voices.own().value, moved, shown);\n voices.stop();\n ctx.targets.detach(s as never);\n };\n const finish = (): void => {\n // A coast commits where it stopped; a spring drops what is left under the threshold.\n leave(dest == null);\n ctx.reportEnd(id);\n o.onDone?.();\n };\n\n let ticked = false;\n seed.due = waits.first(start, velocity ?? zeros(), dest == null);\n seed.onCancel = () => leave(true);\n seed.onRate = (paused, timeScale) => voices.rate(paused ? 0 : timeScale);\n seed.velocity = () => voices.own().velocity;\n seed.tick = () => {\n if (ctx.tripwire()) { leave(true); return true; }\n const own = voices.own();\n // A coast too slow to move ends at once rather than emit a tick and wait a frame.\n if (!ticked && dest == null && norm(own.velocity) < restThreshold) {\n finish();\n return true;\n }\n ticked = true;\n o.onTick?.(ax.from(plus(dest ?? ax.to(s.get()), own.value)));\n if (!ctx.has(id)) return true;\n if (norm(own.velocity) >= restThreshold || (dest && norm(own.value) >= restThreshold)) {\n return waits.again(own.value, own.velocity, dest == null);\n }\n if (dest) o.onTick?.(ax.from(dest));\n if (!ctx.has(id)) return true;\n finish();\n return true;\n };\n const base = ctx.register(seed);\n\n return {\n ...base,\n setTarget(next) {\n if (left) return;\n const own = voices.own();\n if (next == null) {\n if (dest == null) return;\n // The committed value stops where the spring had brought it; the coast carries the rest.\n const moved = voices.moved();\n absorb(s, behind.kept ? times(moved, behind.kept) : moved);\n dest = null;\n voices.rest(minus(own.value, moved), own.velocity, true);\n voices.settleMove();\n waits.again(own.value, own.velocity, true);\n return;\n }\n const to = axesFor(ax, next, 'setTarget');\n if (!(stiffness > 0)) throw new Error(`${kind}: setTarget needs a positive stiffness`);\n // The committed value moves under the voices, which shift by as much the other way.\n const shift = travel(ax, ax.to(s.get()), to);\n s.set(next);\n if (dest == null) voices.rest(own.value, own.velocity, false);\n dest = to;\n voices.move(shift);\n waits.again(plus(own.value, shift), own.velocity, false);\n ctx.targets.showNow(s as never);\n },\n setVelocity(v) {\n if (left) return;\n const pushed = axesFor(ax, v, 'setVelocity');\n waits.again(voices.own().value, pushed, dest == null);\n voices.push(pushed);\n },\n };\n}\n","import { easeOut, resolveEasing } from '@weasel-js/geom';\nimport { stateOf } from '../target';\nimport type { AnimationHandle, TargetTweenOptions } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport { axesFor, bump, comeOut, commitOffset, goBehind, minus, plus, shareBehind, takeUp, times, travel } from './offsets';\n\n/** A tween on a target: its destination is committed as it starts, and its voice is what is\n * left to travel. */\nexport function startOffsetTween<T>(ctx: AnimationContext, o: TargetTweenOptions<T>): AnimationHandle {\n const { codec } = ctx;\n const s = stateOf(o.target);\n const ax = s.axes;\n const to = axesFor(ax, o.to, 'to');\n const given = o.from === undefined ? null : axesFor(ax, o.from, 'from');\n const id = ctx.nextId();\n const interrupts = o.interrupt !== false;\n const seed = {\n id, kind: 'tween', cancelKey: o.cancelKey, label: o.label, target: s, keepExisting: !interrupts,\n } as AnimationSeed;\n // Ahead of reading the committed value: an interrupted animation commits where it stopped.\n if (o.cancelKey != null && interrupts) ctx.interrupt(o.cancelKey, seed);\n const committed = ax.to(s.get());\n const base = takeUp(s);\n const from = o.from === undefined ? ax.from(base) : o.from;\n const path = o.interpolator ? o.interpolator(from, o.to)\n : o.interpolate ? (u: number) => o.interpolate!(from, o.to, u)\n : null;\n const easing = resolveEasing(o.easing ?? easeOut);\n const ms = Math.max(o.ms, 1);\n\n ctx.targets.attach(s as never);\n s.set(o.to);\n ctx.seedClock();\n s.slot = path\n ? codec.path({ id, on: s, ms, axes: ax.count, at: (u) => minus(ax.to(path(easing(u))), to) })\n : codec.tween({\n id, on: s, ms, ease: easing,\n from: travel(ax, given ?? base, to),\n to: new Array<number>(ax.count).fill(0),\n });\n bump(s as never, codec.own(id)!.value, 1);\n const share = shareBehind(ax, committed, to, travel(ax, given ?? base, to));\n const behind = goBehind(s, () => times(codec.own(id)!.value, share));\n\n let left = false;\n /** Takes its voice off the target, committing what it had left to travel when `commit`. */\n const leave = (commit: boolean): void => {\n if (left) return;\n left = true;\n const own = codec.own(id);\n const moved = own ? behind.left() : [];\n const shown = comeOut(s, behind, moved);\n if (own) {\n if (commit) commitOffset(s, own.value, moved, shown);\n bump(s as never, own.value, -1);\n }\n codec.stop(id);\n ctx.targets.detach(s as never);\n };\n\n seed.progress = (virtualNow) => (o.ms <= 0 ? 1 : Math.min(1, virtualNow / o.ms));\n // With no `onTick` to call it has nothing to do until it ends.\n if (!o.onTick) seed.due = Math.max(o.ms, 0);\n seed.onCancel = () => leave(true);\n seed.tick = (nowMs) => {\n if (ctx.tripwire()) { leave(true); return true; }\n const t = o.ms <= 0 ? 1 : Math.min(1, nowMs / o.ms);\n if (o.onTick) o.onTick(t >= 1 ? o.to : ax.from(plus(to, codec.own(id)!.value)));\n if (t < 1) return false;\n // That last onTick may have canceled it, which commits where it was and never completes.\n if (!ctx.has(id)) return true;\n leave(false);\n ctx.reportEnd(id);\n o.onDone?.();\n return true;\n };\n return ctx.register(seed);\n}\n","import type { WatchCompletion } from '../supervisor';\n\n/** One-shot listeners for an animation leaving the animator's table, finished or canceled. A\n * stagger watches its children through them, to retire itself when the last one goes. */\nexport interface Completions {\n /** Tells `id`'s listeners it has left, and forgets them. */\n fire(id: number): void;\n watch: WatchCompletion;\n}\n\n/** `has` answers whether an id is still on the table; a watch on one that is not fires at once. */\nexport function createCompletions(has: (id: number) => boolean): Completions {\n const listeners = new Map<number, (() => void)[]>();\n return {\n fire(id) {\n const ls = listeners.get(id);\n if (!ls) return;\n listeners.delete(id);\n for (const cb of ls) cb();\n },\n watch(id, cb) {\n if (!has(id)) {\n cb();\n return () => {};\n }\n const ls = listeners.get(id) ?? [];\n ls.push(cb);\n listeners.set(id, ls);\n return () => {\n const cur = listeners.get(id);\n if (!cur) return;\n const idx = cur.indexOf(cb);\n if (idx >= 0) cur.splice(idx, 1);\n if (cur.length === 0) listeners.delete(id);\n };\n },\n };\n}\n","/** What {@link Wakes} keeps on each thing waiting in it. */\nexport interface Waiting {\n /** The time it is due at; kept by `Wakes`. */\n wakeAt: number;\n /** Its place in the heap; -1 while it is not waiting. */\n heapAt: number;\n /** Orders two due in one call: the lower first. */\n seq: number;\n}\n\n/** Things waiting for a clock to reach a time each, soonest first: a binary heap that knows\n * each one's place, so one can leave or be given another time without a search. */\nexport interface Wakes<W extends Waiting> {\n /** Has `w` wait for `at`, in place of any time it was waiting for. */\n set(w: W, at: number): void;\n /** Stops `w` waiting. */\n remove(w: W): void;\n /** Takes out everything due at or before `now`, in `seq` order. */\n due(now: number): W[];\n clear(): void;\n readonly size: number;\n}\n\nexport function createWakes<W extends Waiting>(): Wakes<W> {\n const heap: W[] = [];\n\n const place = (w: W, i: number): void => {\n heap[i] = w;\n w.heapAt = i;\n };\n const up = (w: W, i: number): void => {\n while (i > 0) {\n const parent = (i - 1) >> 1;\n const p = heap[parent]!;\n if (p.wakeAt <= w.wakeAt) break;\n place(p, i);\n i = parent;\n }\n place(w, i);\n };\n const down = (w: W, i: number): void => {\n const n = heap.length;\n for (;;) {\n let child = 2 * i + 1;\n if (child >= n) break;\n if (child + 1 < n && heap[child + 1]!.wakeAt < heap[child]!.wakeAt) child += 1;\n const c = heap[child]!;\n if (c.wakeAt >= w.wakeAt) break;\n place(c, i);\n i = child;\n }\n place(w, i);\n };\n const remove = (w: W): void => {\n const i = w.heapAt;\n if (i < 0) return;\n w.heapAt = -1;\n const last = heap.pop()!;\n if (last === w) return;\n // The last one takes the gap, and may belong either way from there.\n if (i > 0 && last.wakeAt < heap[(i - 1) >> 1]!.wakeAt) up(last, i);\n else down(last, i);\n };\n\n return {\n set(w, at) {\n remove(w);\n w.wakeAt = at;\n heap.push(w);\n up(w, heap.length - 1);\n },\n remove,\n due(now) {\n const out: W[] = [];\n while (heap.length > 0 && heap[0]!.wakeAt <= now) {\n const w = heap[0]!;\n remove(w);\n out.push(w);\n }\n if (out.length > 1) out.sort((a, b) => a.seq - b.seq);\n return out;\n },\n clear() {\n for (const w of heap) w.heapAt = -1;\n heap.length = 0;\n },\n get size() { return heap.length; },\n };\n}\n","import type { ActiveAnimation } from './context';\nimport { createWakes } from './wakes';\n\n/** Which animations a frame ticks, and each one's own clock. */\nexport interface Schedule {\n /** `a`'s own clock now, in virtual ms. */\n clockOf(a: ActiveAnimation): number;\n /** Takes `a` on, its clock at 0. */\n add(a: ActiveAnimation): void;\n remove(a: ActiveAnimation): void;\n /** Sets `a`'s pause and time scale, leaving its clock where it stands. */\n pace(a: ActiveAnimation, paused: boolean, timeScale: number): void;\n /** Leaves `a` unticked until its clock has run `ms` more, whether it was waiting already or\n * ticked every frame. Nothing for an `a` that has left. */\n defer(a: ActiveAnimation | undefined, ms: number): void;\n /** The animations to tick this frame, in the order they registered: those ticked every\n * frame, and those whose clock has just reached their `due`. */\n ticks(): ActiveAnimation[];\n /** Whether any animation changes from one frame to the next. */\n readonly awake: boolean;\n /** How many animations no frame ticks until they are due. */\n readonly waiting: number;\n clear(): void;\n}\n\n/** `elapsed` answers the animator's clock: its time scale and pauses are already in it. */\nexport function createSchedule(elapsed: () => number): Schedule {\n /** Ticked every frame, in the order they joined. */\n const every = new Set<ActiveAnimation>();\n /** Waiting for the animator's clock to reach the time their own reaches `due`. */\n const wakes = createWakes<ActiveAnimation>();\n let seq = 0;\n let awake = 0;\n /** With a `due` and not yet woken, whether or not a rate above 0 has it in `wakes`. */\n let waiting = 0;\n\n const rateOf = (a: ActiveAnimation): number => (a.paused ? 0 : a.timeScale);\n const clockOf = (a: ActiveAnimation): number => a.base + (elapsed() - a.anchor) * rateOf(a);\n\n const wait = (a: ActiveAnimation): void => {\n const rate = rateOf(a);\n if (rate > 0 && a.due! < Infinity) wakes.set(a, a.anchor + (a.due! - a.base) / rate);\n else wakes.remove(a);\n };\n\n return {\n clockOf,\n add(a) {\n a.base = 0;\n a.anchor = elapsed();\n a.seq = seq++;\n a.heapAt = -1;\n a.wakeAt = Infinity;\n if (!a.idle) awake += 1;\n if (a.due === undefined) {\n every.add(a);\n return;\n }\n waiting += 1;\n wait(a);\n },\n remove(a) {\n if (!a.idle) awake -= 1;\n if (every.delete(a)) return;\n waiting -= 1;\n wakes.remove(a);\n },\n pace(a, paused, timeScale) {\n a.base = clockOf(a);\n a.anchor = elapsed();\n a.paused = paused;\n a.timeScale = timeScale;\n if (!every.has(a)) wait(a);\n },\n defer(a, ms) {\n if (!a) return;\n a.due = clockOf(a) + ms;\n if (every.delete(a)) waiting += 1;\n wait(a);\n },\n ticks() {\n const steady = [...every];\n const woke = wakes.due(elapsed());\n if (woke.length === 0) return steady;\n waiting -= woke.length;\n const out: ActiveAnimation[] = [];\n let i = 0;\n for (const a of woke) {\n // Rounding may leave its clock a hair short of the time it was woken for.\n a.base = Math.max(clockOf(a), a.due!);\n a.anchor = elapsed();\n every.add(a);\n while (i < steady.length && steady[i]!.seq < a.seq) out.push(steady[i++]!);\n out.push(a);\n }\n while (i < steady.length) out.push(steady[i++]!);\n return out;\n },\n get awake() { return awake > 0; },\n get waiting() { return waiting; },\n clear() {\n every.clear();\n wakes.clear();\n awake = 0;\n waiting = 0;\n },\n };\n}\n","import type { TargetState } from '../target';\nimport type { ActiveAnimation } from './context';\nimport { createSchedule, type Schedule } from './schedule';\n\n/** The animations on the table, and the ways a frame and the API find them. */\nexport interface Roster {\n readonly animations: Map<number, ActiveAnimation>;\n readonly schedule: Schedule;\n /** The animations holding `key`, in the order they registered. */\n under(key: string): Iterable<ActiveAnimation>;\n /** The animations moving `target`, in the order they registered. */\n on(target: TargetState): Iterable<ActiveAnimation>;\n /** Puts `a` on the table, in place of one still there under its id: a revived timeline\n * registers again under the id it holds. */\n add(a: ActiveAnimation): void;\n /** Takes `a` off the table, with no report. */\n remove(a: ActiveAnimation): void;\n clear(): void;\n}\n\nconst NONE: Iterable<ActiveAnimation> = [];\n\n/** Files `a` under `key` in `index`, or takes it out. */\nfunction file<K>(index: Map<K, Set<ActiveAnimation>>, key: K, a: ActiveAnimation, on: boolean): void {\n let set = index.get(key);\n if (on) {\n if (!set) index.set(key, set = new Set());\n set.add(a);\n } else if (set?.delete(a) && set.size === 0) index.delete(key);\n}\n\n/** `elapsed` answers the animator's clock, as {@link createSchedule} takes it. */\nexport function createRoster(elapsed: () => number): Roster {\n const animations = new Map<number, ActiveAnimation>();\n const schedule = createSchedule(elapsed);\n // A start interrupts its key and a stop empties its target, and a search of the table for\n // either costs more the more is running.\n const byKey = new Map<string, Set<ActiveAnimation>>();\n const byTarget = new Map<TargetState, Set<ActiveAnimation>>();\n const index = (a: ActiveAnimation, on: boolean): void => {\n if (a.cancelKey != null) file(byKey, a.cancelKey, a, on);\n if (a.target) file(byTarget, a.target, a, on);\n };\n const remove = (a: ActiveAnimation): void => {\n animations.delete(a.id);\n schedule.remove(a);\n index(a, false);\n };\n return {\n animations,\n schedule,\n under: (key) => byKey.get(key) ?? NONE,\n on: (target) => byTarget.get(target) ?? NONE,\n add(a) {\n const had = animations.get(a.id);\n if (had) remove(had);\n animations.set(a.id, a);\n schedule.add(a);\n index(a, true);\n },\n remove,\n clear() {\n animations.clear();\n schedule.clear();\n byKey.clear();\n byTarget.clear();\n },\n };\n}\n","import type { AnimatorEventHub } from '../observe';\nimport type { WatchCompletion } from '../supervisor';\nimport type { TargetState } from '../target';\nimport type { AnimationHandle, AnimationInfo } from '../types';\nimport type { Codec } from './codec';\nimport { createCompletions } from './completions';\nimport type { ActiveAnimation, AnimationSeed } from './context';\nimport { createRoster } from './roster';\n\n/** What {@link createTable} needs of the animator around it. */\nexport interface TableHost {\n codec: Pick<Codec, 'stop' | 'has' | 'rate'>;\n hub: AnimatorEventHub;\n /** The animator's clock: the virtual ms its frames have advanced it by. */\n elapsed(): number;\n /** Starts the frame clock where it stands idle, so a new animation is charged the wait for\n * its first frame. */\n seedClock(): void;\n /** Shows a target as an animation starts on it. */\n showNow(target: TargetState): void;\n /** Whether a target came to rest and is owed one more show. */\n resting(): boolean;\n /** Whether a frame is between reading the codec and showing its targets. */\n framing(): boolean;\n requestFrame(): void;\n}\n\n/** The animator's running animations, and how one joins and leaves. */\nexport interface Table {\n readonly animations: Map<number, ActiveAnimation>;\n infoOf(a: ActiveAnimation): AnimationInfo;\n /** Reports `id` as finished, ahead of its `onDone`, so whatever that handler starts is heard\n * after it. Nothing revives a primitive; a timeline, which can be revived, is reported as it\n * leaves the table. */\n reportEnd(id: number): void;\n /** Takes `id` off the table as canceled, or, given `by`, as interrupted by the animation\n * claiming its key; given `error`, the caller reports it. */\n retire(id: number, by?: ActiveAnimation, error?: true): void;\n cancelByKey(key: string, by?: ActiveAnimation): void;\n /** The animations holding `key`, in the order they registered. */\n under(key: string): Iterable<ActiveAnimation>;\n /** The animations moving `target`, in the order they registered. */\n on(target: TargetState): Iterable<ActiveAnimation>;\n /** Sets `a`'s pause and time scale, and gives its codec subject the rate they ask for. */\n pace(a: ActiveAnimation, paused: boolean, timeScale: number): void;\n /** `a`'s own clock now, in virtual ms. */\n clockOf(a: ActiveAnimation): number;\n /** Leaves `id` unticked until its clock has run `ms` more. */\n defer(id: number, ms: number): void;\n /** The animations to tick this frame, in the order they registered. */\n ticks(): ActiveAnimation[];\n /** Whether any animation changes from one frame to the next. */\n readonly awake: boolean;\n /** How many animations no frame ticks until they are due. */\n readonly waiting: number;\n register(seed: AnimationSeed): AnimationHandle;\n /** Takes `id` off the table as finished. */\n finish(id: number): void;\n /** Takes `a` off the table with no report of its own: it ended and then threw. */\n drop(a: ActiveAnimation): void;\n /** Cancels everything. `cleared` runs once the table is empty, ahead of the reports. */\n cancelAll(cleared: () => void): void;\n watchCompletion: WatchCompletion;\n}\n\n/** `scale` as a time scale, refused below 0: the clock under the animator only goes forward. */\nexport function timeScaleOf(scale: number): number {\n if (!(scale >= 0)) {\n throw new Error(`animator: a time scale is 0 or above, and ${scale} was given; nothing plays backward`);\n }\n return scale;\n}\n\nexport function createTable(host: TableHost): Table {\n const { codec, hub } = host;\n const roster = createRoster(host.elapsed);\n const { animations, schedule, remove } = roster;\n const { fire: fireCompletion, watch: watchCompletion } = createCompletions((id) => animations.has(id));\n\n const infoOf = (a: ActiveAnimation): AnimationInfo => {\n if (!a.info) {\n const info: { -readonly [K in keyof AnimationInfo]: AnimationInfo[K] } = { id: a.id, kind: a.kind };\n if (a.cancelKey != null) info.key = a.cancelKey;\n if (a.label != null) info.label = a.label;\n a.info = info;\n }\n return a.info;\n };\n\n const reportEnd = (id: number): void => {\n const a = animations.get(id);\n if (!a || a.ended) return;\n a.ended = true;\n if (hub.watched) hub.emit({ type: 'end', animation: infoOf(a) });\n };\n\n const retire = (id: number, by?: ActiveAnimation, error?: true): void => {\n const a = animations.get(id);\n if (!a) return;\n a.onCancel?.();\n codec.stop(id);\n remove(a);\n // A target that came to rest is owed one more show, and no frame may be coming.\n if (host.resting()) host.requestFrame();\n fireCompletion(id);\n if (!hub.watched || a.ended || error) return;\n hub.emit(by\n ? { type: 'interrupt', animation: infoOf(a), by: infoOf(by) }\n : { type: 'cancel', animation: infoOf(a) });\n };\n\n const cancelByKey = (key: string, by?: ActiveAnimation): void => {\n // A copy: each one leaves the set as it is retired, and its `onCancel` may retire others.\n for (const a of [...roster.under(key)]) retire(a.id, by);\n };\n\n const pace = (a: ActiveAnimation, paused: boolean, timeScale: number): void => {\n schedule.pace(a, paused, timeScale);\n if (codec.has(a.id)) codec.rate(a.id, paused ? 0 : timeScale);\n a.onRate?.(paused, timeScale);\n };\n\n const register = (seed: AnimationSeed): AnimationHandle => {\n const anim = seed as ActiveAnimation;\n if (seed.cancelKey != null && !seed.keepExisting) cancelByKey(seed.cancelKey, anim);\n anim.paused = false;\n anim.timeScale = 1;\n // Its clock starts with the frame clock, as a voice cued now does: both then advance by\n // the whole of their first frame. Idle, that frame is the wait since the first of the\n // animations it finds was registered.\n host.seedClock();\n roster.add(anim);\n if (anim.target) host.showNow(anim.target);\n if (hub.watched) hub.emit({ type: 'start', animation: infoOf(anim) });\n // A frame in progress asks for the next one itself, after `onTick`: asked for from a tick,\n // it would run ahead of a paint `onTick` requests, and the tick after would paint nothing.\n if (animations.size > 0 && !host.framing()) host.requestFrame();\n const live = (): ActiveAnimation | undefined => animations.get(anim.id);\n return {\n id: anim.id,\n cancel: () => retire(anim.id),\n pause: () => { const a = live(); if (a) pace(a, true, a.timeScale); },\n resume: () => { const a = live(); if (a) pace(a, false, a.timeScale); },\n setTimeScale: (s) => { const a = live(); if (a) pace(a, a.paused, timeScaleOf(s)); },\n timeScale: () => live()?.timeScale ?? 1,\n isPaused: () => live()?.paused ?? false,\n };\n };\n\n return {\n animations,\n infoOf,\n reportEnd,\n retire,\n cancelByKey,\n under: roster.under,\n on: roster.on,\n pace,\n clockOf: schedule.clockOf,\n defer: (id, ms) => schedule.defer(animations.get(id), ms),\n ticks: schedule.ticks,\n get awake() { return schedule.awake; },\n get waiting() { return schedule.waiting; },\n register,\n finish(id) {\n const a = animations.get(id);\n if (!a) return;\n reportEnd(id);\n remove(a);\n fireCompletion(id);\n },\n drop(a) {\n remove(a);\n fireCompletion(a.id);\n },\n cancelAll(cleared) {\n const retired: ActiveAnimation[] = [];\n // Over the table as it stands: one an earlier `onCancel` retired is not canceled twice.\n for (const a of animations.values()) {\n a.onCancel?.();\n codec.stop(a.id);\n retired.push(a);\n }\n roster.clear();\n cleared();\n for (const a of retired) fireCompletion(a.id);\n if (hub.watched) for (const a of retired) hub.emit({ type: 'cancel', animation: infoOf(a) });\n },\n watchCompletion,\n };\n}\n","import { easeOut, resolveEasing } from '@weasel-js/geom';\nimport type { AnimationHandle, TweenOptions } from '../types';\nimport { axesOf } from './axes';\nimport type { AnimationContext } from './context';\n\n/** A tween that hands each frame's value to the caller's `onTick`. */\nexport function startTween<T>(ctx: AnimationContext, o: TweenOptions<T>): AnimationHandle {\n const { codec } = ctx;\n // blits blends in a straight line, which a caller's own function may not do.\n const fromAxes = o.interpolate || o.interpolator ? null : axesOf(o.from);\n const toAxes = fromAxes && axesOf(o.to);\n const axes = fromAxes && toAxes && toAxes.shape === fromAxes.shape ? fromAxes : null;\n // Refused here rather than on a tick, where a throw would stop every other animation.\n if (!axes && !o.interpolate && !o.interpolator) {\n throw new Error('tween: interpolate or interpolator is required for non-numeric T');\n }\n const id = ctx.nextId();\n const easing = resolveEasing(o.easing ?? easeOut);\n // Precedence: factory > per-tick. Factory is built once at tween start so\n // expensive setup (color space conversion etc.) doesn't repeat per frame.\n const factoryFn = o.interpolator ? o.interpolator(o.from, o.to) : null;\n let lastValueEmitted = false;\n ctx.seedClock();\n // Started ahead of `register`, whose `start` listeners may already cancel it.\n const reader = codec.tween({\n id, ms: Math.max(o.ms, 1), ease: easing,\n from: axes ? axes.to(o.from) : [0],\n to: axes ? axes.to(o.to) : [1],\n });\n return ctx.register({\n id,\n kind: 'tween',\n cancelKey: o.cancelKey,\n label: o.label,\n progress: (virtualNow) => (o.ms <= 0 ? 1 : Math.min(1, virtualNow / o.ms)),\n // `nowMs` is the call's own virtual time, so it still decides when the tween ends; the codec\n // supplies only the value in between.\n tick(nowMs) {\n if (ctx.tripwire()) { codec.stop(id); return true; }\n const t = o.ms <= 0 ? 1 : Math.min(1, nowMs / o.ms);\n let value: T;\n if (axes) {\n value = t >= 1 ? o.to : axes.from(reader.cols, reader.at);\n } else {\n const eased = t >= 1 ? easing(1) : reader.cols[reader.at]!;\n value = factoryFn ? factoryFn(eased) : o.interpolate!(o.from, o.to, eased);\n }\n o.onTick(value);\n if (t >= 1 && !lastValueEmitted) {\n lastValueEmitted = true;\n codec.stop(id);\n // That last onTick may have canceled us — deregistering the id.\n // A canceled tween never completes, whenever the cancel landed.\n if (ctx.has(id)) {\n ctx.reportEnd(id);\n o.onDone?.();\n }\n return true;\n }\n return false;\n },\n });\n}\n","import type { ColorOverrideRegistry } from '../colorRegistry';\nimport { createLoop, createTweenLoop } from '../loop';\nimport type { AnimatorEventHub } from '../observe';\nimport { createStagger } from '../stagger';\nimport { supervisors } from '../supervisor';\nimport { stateOf } from '../target';\nimport { createTimeline } from '../timeline/createTimeline';\nimport type { OpenTrackHold } from '../timeline/trackHolds';\nimport type { TimelineOptions } from '../timeline/types';\nimport type {\n AnimationHandle, AnimationInfo, AnimationKind, Animator, DecayOptions, LiveAnimation, PhysicsHandle,\n PhysicsOptions, SpringOptions, TargetDecayOptions, TargetPhysicsOptions, TargetSpringOptions,\n TargetTweenOptions, TweenOptions,\n} from '../types';\nimport type { ActiveAnimation, AnimationContext } from './context';\nimport { decayAsPhysics } from './decay';\nimport type { AnimatorClock } from './frame';\nimport { startHold } from './holdAnimation';\nimport { openHold } from './holds';\nimport { startOffsetPhysics } from './offsetPhysics';\nimport { startOffsetTween } from './offsetTween';\nimport { startPhysics } from './physicsAnimation';\nimport { timeScaleOf, type Table } from './table';\nimport { startTween } from './tweenAnimation';\nimport type { Emitter } from '@weasel-js/registry';\n\n/** What {@link createAnimatorApi} needs of the animator around it. */\nexport interface ApiHost {\n ctx: AnimationContext;\n table: Table;\n clock: AnimatorClock;\n hub: AnimatorEventHub;\n /** Whether an animation's own tick is running. */\n ticking(): boolean;\n /** Runs a callback once the frame's ticks are done. */\n afterTicks(cb: () => void): void;\n subscribers: Pick<Emitter, 'subscribe'>;\n colorOverrides: ColorOverrideRegistry;\n /** Stops the frame loop, once everything is canceled and its targets are shown at rest. */\n halt(): void;\n}\n\n/** Gives every animation holding `key` the pause and time scale `pace` answers for it. */\nfunction eachUnder(\n table: Table, key: string, pace: (a: ActiveAnimation) => [paused: boolean, timeScale: number],\n): void {\n for (const a of table.under(key)) table.pace(a, ...pace(a));\n}\n\nfunction liveRows(table: Table): LiveAnimation[] {\n const rows: LiveAnimation[] = [];\n for (const a of table.animations.values()) {\n rows.push({\n ...table.infoOf(a),\n paused: a.paused,\n timeScale: a.timeScale,\n elapsed: table.clockOf(a),\n ...(a.progress ? { progress: a.progress(table.clockOf(a)) } : {}),\n });\n }\n return rows;\n}\n\nfunction startTimeline(host: ApiHost, o: TimelineOptions): ReturnType<Animator['timeline']> {\n const { ctx, table, hub } = host;\n const id = ctx.nextId();\n const info = (): AnimationInfo | undefined => {\n const a = table.animations.get(id);\n return a && table.infoOf(a);\n };\n const hold: OpenTrackHold = (target, value, weight, axes) =>\n openHold(ctx, { target: stateOf(target), value, weight, axes });\n return createTimeline(table.register, id, o, {\n get watched() { return hub.watched; },\n fire: (track, path, event, lateBy) => {\n const animation = info();\n if (animation) hub.emit({ type: 'fire', animation, track, path: path.slice(), event, lateBy });\n },\n lap: (lap) => {\n const animation = info();\n if (animation) hub.emit({ type: 'lap', animation, lap });\n },\n }, hold);\n}\n\n/** The animator's public surface over its table, clock, and primitives. */\nexport function createAnimatorApi(host: ApiHost): Animator {\n const { ctx, table, clock, hub } = host;\n const { animations } = table;\n const createSupervisor = supervisors({\n nextId: ctx.nextId,\n register: table.register,\n finish: table.finish,\n afterTicks: host.afterTicks,\n });\n\n const physics = <T,>(\n o: PhysicsOptions<T> | TargetPhysicsOptions<T>,\n kind: AnimationKind = 'physics',\n ): PhysicsHandle<T> => (o.target ? startOffsetPhysics(ctx, o, kind) : startPhysics(ctx, o, kind));\n\n const api: Animator = {\n tween: <T,>(o: TweenOptions<T> | TargetTweenOptions<T>): AnimationHandle =>\n (o.target ? startOffsetTween(ctx, o) : startTween(ctx, o)),\n spring: <T,>(o: SpringOptions<T> | TargetSpringOptions<T>): AnimationHandle => physics<T>(o, 'spring'),\n decay: <T,>(o: DecayOptions<T> | TargetDecayOptions<T>): AnimationHandle =>\n physics<T>(decayAsPhysics(o), 'decay'),\n physics,\n hold: (o) => startHold(ctx, o),\n cancel: (handle) => table.retire(handle.id),\n cancelKey: (key) => table.cancelByKey(key),\n cancelAll: () => {\n table.cancelAll(() => {\n clock.frameT = null;\n ctx.targets.show();\n });\n host.halt();\n },\n isActive: (key) => {\n if (key == null) return animations.size > 0;\n for (const _ of table.under(key)) return true;\n return false;\n },\n isTicking: host.ticking,\n pause: () => { clock.paused = true; },\n resume: () => { clock.paused = false; },\n isPaused: () => clock.paused,\n setTimeScale: (s) => { clock.timeScale = timeScaleOf(s); },\n timeScale: () => clock.timeScale,\n pauseKey: (key) => eachUnder(table, key, (a) => [true, a.timeScale]),\n resumeKey: (key) => eachUnder(table, key, (a) => [false, a.timeScale]),\n setTimeScaleByKey: (key, s) => {\n const scale = timeScaleOf(s);\n eachUnder(table, key, (a) => [a.paused, scale]);\n },\n loop: (factory, loopOpts) => createLoop(createSupervisor, factory, loopOpts),\n tweenLoop: (tweenLoopOpts) => createTweenLoop(api, createSupervisor, tweenLoopOpts),\n stagger: ((items, delay, factory, staggerOpts) =>\n createStagger(\n api,\n createSupervisor,\n table.watchCompletion,\n items,\n delay,\n factory as never,\n staggerOpts,\n )) as Animator['stagger'],\n timeline: (o: TimelineOptions) => startTimeline(host, o),\n colorOverrides: host.colorOverrides,\n onTick: (cb) => host.subscribers.subscribe(cb),\n keepAlive: () => {\n const sup = createSupervisor({ kind: 'keepAlive' });\n return () => sup.cancel();\n },\n watch: (listener) => hub.add(listener),\n live: () => liveRows(table),\n };\n return api;\n}\n","import { patch as fnPatch, tween as tweenPatch, type Handle } from '@msb235/blits';\nimport type { Out, Slot } from './lanes';\n\nexport interface HoldStart {\n id: number; axes: number;\n /** The subject it reaches. */\n on: unknown;\n /** The voice's axes now. Asked every frame, and again after a `touch`. */\n at(): number[];\n /** True where what `at` answers changes only when its subject is touched: it is then asked\n * after a touch and on no other frame. */\n still?: boolean;\n}\n\n/** A hold's voice: one with no clock, which reads `at` for as long as it is cued. */\nexport interface HoldVoice {\n slot: Slot;\n start: HoldStart;\n /** Absent for a still hold until the touch or frame that first cues it. */\n handle?: Handle<unknown>;\n /** Its axes as `at` last answered. */\n last?: number[];\n}\n\nexport interface HoldVoices {\n add(slot: Slot, start: HoldStart): HoldVoice;\n /** Says whether `v` is {@link HoldStart.still} from here on. */\n still(v: HoldVoice, still: boolean): void;\n /** Says what the hold on `on` reads has changed, where that hold is still. */\n touch(on: unknown): void;\n /** Cues again each still hold touched since the last call. */\n settle(): void;\n /** Called as a frame starts, ahead of its reading. */\n frame(): void;\n remove(v: HoldVoice): void;\n}\n\nexport function createHoldVoices(): HoldVoices {\n /** The holds asked every frame. */\n const asked = new Set<HoldVoice>();\n /** The still hold on each subject that has one, and those a touch has left to cue again. */\n const stills = new Map<unknown, HoldVoice>();\n const stale = new Set<HoldVoice>();\n\n const cue = (v: HoldVoice): void => {\n const { start } = v;\n const { lane, key } = v.slot;\n v.handle?.fade({ over: 0 });\n stale.delete(v);\n if (start.still) {\n v.last = start.at();\n // A motion at rest costs a frame what a finished tween does, and calls nothing of ours.\n const rest = tweenPatch<unknown, Out, number[]>('v', { from: v.last, to: v.last.slice(), ms: 1 });\n v.handle = lane.mix.cue({ patch: rest, subjects: [key] });\n return;\n }\n const each = fnPatch<unknown, Out>(\n 1,\n () => {\n v.last = start.at();\n return { v: v.last };\n },\n { writes: ['v'] },\n );\n v.handle = lane.mix.cue({ patch: each, subjects: [key], loop: true });\n };\n\n const settle = (): void => {\n for (const v of stale) cue(v);\n };\n\n return {\n add(slot, start) {\n const v: HoldVoice = { slot, start: { ...start } };\n if (start.still) {\n // Cued at the touch or frame that comes first, so one touched as it starts is asked once.\n stills.set(start.on, v);\n stale.add(v);\n } else {\n cue(v);\n asked.add(v);\n }\n return v;\n },\n still(v, still) {\n if (!v.start.still === !still) return;\n v.start.still = still;\n if (still) {\n asked.delete(v);\n stills.set(v.start.on, v);\n } else {\n stills.delete(v.start.on);\n asked.add(v);\n }\n cue(v);\n },\n touch(on) {\n const v = stills.get(on);\n if (v) stale.add(v);\n },\n settle,\n frame() {\n // blits keeps a patch's answer while its clock stands still, and a hold's can change anyway.\n for (const v of asked) v.slot.lane.mix.touch(v.slot.key);\n settle();\n },\n remove(v) {\n v.handle?.fade({ over: 0 });\n asked.delete(v);\n stale.delete(v);\n if (stills.get(v.start.on) === v) stills.delete(v.start.on);\n },\n };\n}\n","import { kit, mix, sum, vec, type Mix } from '@msb235/blits';\n\nexport type Out = { v: number[] };\n\n/** One subject's value, kept current in place. Valid until the subject's last voice stops. */\nexport interface Reader {\n /** The array holding the subject's axes as the last `frame` read them, from `at` on. It is\n * shared with other subjects and valid until the next `frame`. */\n readonly cols: Float64Array;\n /** Where the subject's axes start in `cols`. */\n readonly at: number;\n}\n\n/** One subject of a lane: what `pull` reads for it, summed over every voice reaching it. */\nexport interface Slot extends Reader {\n cols: Float64Array;\n at: number;\n key: unknown;\n lane: Lane;\n /** How many voices reach it. */\n refs: number;\n /** Its place in the lane's `keys`; -1 while no frame has read it. */\n index: number;\n /** What `cols` points at while `index` is -1. */\n held: Float64Array;\n /** A number its owner gave it, kept beside it in the lane's `tags`; -1 where it gave none. */\n tag: number;\n}\n\n/** Where a subject's voices run, for one kept apart from the rest with as many axes. */\nexport interface LanePlace {\n /** Subjects naming one group share a lane no other subject is in. */\n group: object;\n /** Kept in the lane's `tags` at the subject's place. */\n tag: number;\n}\n\n/** A group's lane as the last frame read it: `count` subjects, subject `j`'s axes in `cols`\n * from `j * axes` and its tag at `tags[j]`. Valid until a subject joins or leaves. */\nexport interface LaneColumns {\n cols: Float64Array;\n tags: Int32Array;\n count: number;\n}\n\n/** One mix per axis count, since a kit's channel width is fixed, and one more per group. */\nexport interface Lane {\n /** What the lane is kept under: its group, or its axis count. */\n key: unknown;\n axes: number;\n mix: Mix<unknown, Out>;\n /** The subjects `pull` reads, by place. Joins wait in `pending` until the next `frame`. */\n keys: unknown[];\n /** Each place's slot, beside `keys`. */\n slots: Slot[];\n /** Each place's tag, beside `keys`. */\n tags: Int32Array;\n pending: Set<Slot>;\n dirty: boolean;\n /** Frames in a row it has had no subjects at; it retires at the second. */\n idle: number;\n cols: { v: Float64Array };\n}\n\nexport interface Lanes {\n /** The slot for `key`, made if absent and showing `held` until a frame reads it. Counts one\n * more voice reaching it. */\n join(axes: number, key: unknown, held: ArrayLike<number>): Slot;\n /** The lane of `group` as the last frame read it; null where it has none. */\n columns(group: object): LaneColumns | null;\n /** Counts one voice fewer reaching `slot`. At none it leaves its lane, and the mix forgets\n * the subject. */\n leave(slot: Slot): void;\n /** Syncs every lane to `time` and reads its subjects. */\n frame(time: number): void;\n /** Says what a voice on `key` reads from outside has changed since the last `frame`. */\n touch(key: unknown): void;\n /** Reads each touched subject again where the clock stands, then hands it to `each`. */\n refresh(each: (slot: Slot) => void): void;\n}\n\n/** Takes `s` out of its lane's places, moving the last one into the gap. */\nfunction depart(s: Slot): void {\n const l = s.lane;\n l.dirty = true;\n if (s.index < 0) { l.pending.delete(s); return; }\n const lastKey = l.keys.pop()!;\n const moved = l.slots.pop()!;\n if (moved === s) return;\n const n = l.axes;\n const from = l.keys.length * n;\n l.cols.v.copyWithin(s.index * n, from, from + n);\n l.keys[s.index] = lastKey;\n l.slots[s.index] = moved;\n l.tags[s.index] = moved.tag;\n moved.index = s.index;\n moved.at = s.index * n;\n}\n\n/** Gives the lane's waiting subjects their places. */\nfunction rebuild(l: Lane): void {\n const keys = l.keys.slice();\n const had = keys.length;\n for (const s of l.pending) {\n s.index = keys.length;\n s.at = s.index * l.axes;\n s.cols = l.cols.v;\n keys.push(s.key);\n l.slots.push(s);\n }\n l.pending.clear();\n l.keys = keys;\n if (l.tags.length < keys.length) {\n const tags = new Int32Array(Math.max(keys.length, l.tags.length * 2));\n tags.set(l.tags);\n l.tags = tags;\n }\n for (let i = had; i < keys.length; i++) l.tags[i] = l.slots[i]!.tag;\n if (l.cols.v.length !== keys.length * l.axes) {\n l.cols = { v: new Float64Array(keys.length * l.axes) };\n for (const s of l.slots) s.cols = l.cols.v;\n }\n l.dirty = false;\n}\n\n/** `placeOf` answers the lane a subject is kept in, for one kept apart from the rest. */\nexport function createLanes(placeOf?: (key: object) => LanePlace | undefined): Lanes {\n const lanes = new Map<unknown, Lane>();\n const slots = new Map<unknown, Slot>();\n const touched = new Set<Slot>();\n let now = 0;\n\n const laneOf = (axes: number, group: object | undefined): Lane => {\n const key = group ?? axes;\n let l = lanes.get(key);\n if (!l) {\n const m = mix<unknown, Out>(kit<Out>({ v: vec(axes, sum()) }));\n m.sync(now);\n l = {\n key, axes, mix: m, keys: [], slots: [], tags: new Int32Array(0), pending: new Set(),\n dirty: false, idle: 0, cols: { v: new Float64Array(0) },\n };\n lanes.set(key, l);\n }\n return l;\n };\n\n return {\n join(axes, key, held) {\n const had = slots.get(key);\n if (had) {\n if (had.lane.axes !== axes) {\n throw new Error(`codec: a subject on ${had.lane.axes} axes was given a voice on ${axes}`);\n }\n had.refs += 1;\n return had;\n }\n const place = typeof key === 'object' && key !== null ? placeOf?.(key) : undefined;\n const lane = laneOf(axes, place?.group);\n if (lane.axes !== axes) throw new Error(`codec: a group on ${lane.axes} axes was given a subject on ${axes}`);\n const own = Float64Array.from(held);\n const s: Slot = { key, lane, refs: 1, index: -1, held: own, cols: own, at: 0, tag: place?.tag ?? -1 };\n slots.set(key, s);\n lane.pending.add(s);\n lane.dirty = true;\n return s;\n },\n leave(s) {\n s.refs -= 1;\n if (s.refs > 0) return;\n s.lane.mix.drop(s.key);\n depart(s);\n slots.delete(s.key);\n },\n frame(time) {\n now = time;\n for (const l of lanes.values()) {\n if (l.dirty) rebuild(l);\n if (l.keys.length === 0 && ++l.idle >= 2) {\n lanes.delete(l.key);\n continue;\n }\n l.mix.sync(time);\n if (l.keys.length === 0) continue;\n l.idle = 0;\n l.mix.pull(l.keys, l.cols);\n }\n touched.clear();\n },\n columns(group) {\n const l = lanes.get(group);\n return l ? { cols: l.cols.v, tags: l.tags, count: l.keys.length } : null;\n },\n touch(key) {\n const s = slots.get(key);\n if (!s) return;\n s.lane.mix.touch(key);\n touched.add(s);\n },\n refresh(each) {\n for (const s of touched) {\n touched.delete(s);\n if (slots.get(s.key) !== s) continue;\n const out = s.lane.mix.probe(s.key, { v: new Array<number>(s.lane.axes).fill(0) });\n s.cols.set(out.v, s.at);\n each(s);\n }\n },\n };\n}\n","import {\n glide, patch as fnPatch, spring as springPatch, tween as tweenPatch,\n type Handle, type Motion, type Patch,\n} from '@msb235/blits';\nimport { createHoldVoices, type HoldStart, type HoldVoice } from './holdVoices';\nimport { createLanes, type LaneColumns, type LanePlace, type Out, type Reader, type Slot } from './lanes';\n\nexport type { HoldStart } from './holdVoices';\nexport type { Reader } from './lanes';\n\nexport interface TweenStart {\n id: number; ms: number; ease: (u: number) => number;\n /** Endpoints as axes. A tween whose caller blends its own values passes [0] and [1]. */\n from: number[]; to: number[];\n /** The subject the voice reaches, where several voices share one. Default: its own, `id`. */\n on?: unknown;\n}\nexport interface SpringStart {\n id: number; axes: number;\n from: number[]; to: number[] | null; velocity: number[];\n stiffness: number; damping: number; mass: number;\n /** As {@link TweenStart.on}. */\n on?: unknown;\n}\nexport interface PathStart {\n id: number; ms: number; axes: number;\n /** The voice's axes at linear progress `u`, 0 to 1. */\n at(u: number): number[];\n /** As {@link TweenStart.on}. */\n on?: unknown;\n}\n/** A voice's own value and velocity, apart from any other voice on its subject. */\nexport interface Own { value: number[]; velocity: number[] }\nexport interface SpringReader extends Reader {\n /** Position and velocity at the last `frame`, for a voice alone on its subject. */\n motion(): Own;\n}\nexport interface Codec {\n /** Advances the codec's clock by `dtMs` of animator time, then reads every subject. */\n frame(dtMs: number): void;\n tween(s: TweenStart): Reader;\n spring(s: SpringStart): SpringReader;\n path(s: PathStart): Reader;\n /** A voice with no clock: it reads `at` for as long as it is cued. */\n hold(s: HoldStart): Reader;\n /** Says whether hold `id` is {@link HoldStart.still} from here on. */\n still(id: number, still: boolean): void;\n /** Says what a voice on subject `on` reads from outside has changed since the last `frame`. */\n touch(on: unknown): void;\n /** Reads each touched subject again without moving the clock. `reread` is told the subject\n * and the sum of its voices that reading left out: tweens waiting for the next `frame`. */\n refresh(reread: (on: unknown, queued: number[]) => void): void;\n retarget(id: number, to: number[] | null): void;\n /** Starts spring `id` over from `from` at `velocity`, toward `to` or coasting. */\n recue(id: number, from: number[], velocity: number[], to: number[] | null): void;\n push(id: number, velocity: number[]): void;\n /** Plays `id` at rate `rate` from where it is, without a jump. */\n rate(id: number, rate: number): void;\n stop(id: number): void;\n /** Whether `id` is one of the codec's voices. */\n has(id: number): boolean;\n /** Voice `id`'s own value and velocity as of the last `frame`. */\n own(id: number): Own | undefined;\n /** How many voices the codec is running; for tests and diagnostics. */\n voiceCount(): number;\n /** The lane of `group` as the last frame read it; null where it has none. */\n columns(group: object): LaneColumns | null;\n}\n\n/** What the codec calls on a motion patch: a tween has no `push`, a glide no `to`. */\ninterface Moves {\n to?(key: unknown, target: number[], at?: number): void;\n read(key: unknown, at?: number): Motion<number[]> | undefined;\n push?(key: unknown, velocity: number[], at?: number): void;\n}\n\ninterface Voice {\n kind: 'tween' | 'spring' | 'path' | 'hold';\n slot: Slot;\n /** `handle` and `patch` are absent while a tween is `queued` and for a hold, and a path has\n * no `patch`. */\n handle: Handle<unknown>;\n patch: Moves;\n /** Where it started: what `own` answers until a frame has read it. */\n from: number[];\n /** The codec's own copy, kept at the voice's motion as of its last re-cue. */\n spring?: SpringStart;\n /** A tween's start, until the next `frame` cues its voice. */\n queued?: TweenStart;\n /** A rate asked for while queued. */\n queuedRate?: number;\n /** A path's axes as its patch last answered. */\n last?: number[];\n /** A hold's voice. */\n held?: HoldVoice;\n}\n\n/** `placeOf` answers where a shared subject's voices run, for one kept in a lane of its own. */\nexport function createCodec(placeOf?: (on: object) => LanePlace | undefined): Codec {\n const lanes = createLanes(placeOf);\n const voices = new Map<number, Voice>();\n // Tweens are cued together at the next frame, not one by one as they start: a burst of starts then\n // keeps the caller's objects together rather than each a voice apart, which the frame loop reads.\n const queue: Voice[] = [];\n const holds = createHoldVoices();\n let time = 0;\n\n // A voice cued now reads voice time 0 at codec time `time`. Each patch holds its subject at rest\n // at `from`, and the codec releases it with a `to` or `push` timed at 0.\n const springVoice = (slot: Slot, sp: SpringStart): { handle: Handle<unknown>; patch: Moves } => {\n // With no target the spring force is zero whatever the stiffness, leaving damping alone:\n // velocity falls as exp(-t * damping / mass), a glide whose time constant is mass / damping.\n const patch: Moves & Patch<unknown, Out, void> = sp.to == null\n ? glide<unknown, Out, number[]>('v', { from: sp.from, ms: (1000 * sp.mass) / sp.damping })\n : springPatch<unknown, Out, number[]>('v', {\n from: sp.from, to: sp.from, stiffness: sp.stiffness, damping: sp.damping, mass: sp.mass,\n });\n const handle = slot.lane.mix.cue({ patch, subjects: [slot.key] });\n if (sp.to) patch.to!(slot.key, sp.to, 0);\n patch.push!(slot.key, sp.velocity, 0);\n return { handle, patch };\n };\n\n const get = (id: number): Voice => {\n const v = voices.get(id);\n if (!v) throw new Error(`codec: no subject ${id}`);\n return v;\n };\n /** A spring voice's motion now: as its voice last read it, else where it was last placed. */\n const current = (v: Voice): Own =>\n v.patch.read(v.slot.key) ?? { value: v.spring!.from.slice(), velocity: v.spring!.velocity.slice() };\n\n const respring = (v: Voice, next: SpringStart): void => {\n const rate = v.handle.rate;\n v.handle.fade({ over: 0 });\n const { handle, patch } = springVoice(v.slot, next);\n handle.rate = rate;\n v.handle = handle;\n v.patch = patch;\n v.spring = next;\n };\n\n function stop(id: number): void {\n const v = voices.get(id);\n if (!v) return;\n if (v.held) holds.remove(v.held);\n else if (v.queued) v.queued = undefined;\n else v.handle.fade({ over: 0 });\n lanes.leave(v.slot);\n voices.delete(id);\n }\n\n return {\n frame(dtMs) {\n for (const v of queue) {\n const q = v.queued;\n if (!q) continue;\n v.queued = undefined;\n const key = v.slot.key;\n const patch = tweenPatch<unknown, Out, number[]>('v', { from: q.from.slice(), to: q.from.slice(), ms: q.ms, ease: q.ease });\n v.handle = v.slot.lane.mix.cue({ patch, subjects: [key] });\n v.patch = patch;\n patch.to(key, q.to.slice(), 0);\n if (v.queuedRate !== undefined) v.handle.rate = v.queuedRate;\n }\n queue.length = 0;\n holds.frame();\n time += dtMs;\n lanes.frame(time);\n },\n tween(s) {\n if (s.to.length !== s.from.length) {\n throw new Error(`codec: tween ${s.id} goes from ${s.from.length} axes to ${s.to.length}`);\n }\n const shared = s.on !== undefined;\n const slot = lanes.join(s.from.length, shared ? s.on : s.id, shared ? new Array<number>(s.from.length).fill(0) : s.from);\n const v = { kind: 'tween', slot, from: s.from, queued: s } as Voice;\n voices.set(s.id, v);\n queue.push(v);\n return slot;\n },\n spring(s) {\n const sp = { ...s, from: s.from.slice(), to: s.to && s.to.slice(), velocity: s.velocity.slice() };\n const shared = s.on !== undefined;\n const slot = lanes.join(sp.axes, shared ? s.on : s.id, shared ? new Array<number>(sp.axes).fill(0) : sp.from);\n const { handle, patch } = springVoice(slot, sp);\n const v: Voice = { kind: 'spring', slot, handle, patch, from: sp.from, spring: sp };\n voices.set(s.id, v);\n const reader = slot as Slot & SpringReader;\n if (!shared) reader.motion = () => current(v);\n return reader;\n },\n path(s) {\n const shared = s.on !== undefined;\n const from = s.at(0);\n const slot = lanes.join(s.axes, shared ? s.on : s.id, shared ? new Array<number>(s.axes).fill(0) : from);\n const v = { kind: 'path', slot, from } as Voice;\n const patch = fnPatch<unknown, Out>(\n s.ms,\n (phase) => {\n v.last = s.at(phase);\n return { v: v.last };\n },\n { writes: ['v'] },\n );\n // Held at its end until the animator stops it, so a frame between the two reads the end.\n v.handle = slot.lane.mix.cue({ patch, subjects: [slot.key], loop: false, freeze: 'after' });\n voices.set(s.id, v);\n return slot;\n },\n hold(s) {\n const zeros = new Array<number>(s.axes).fill(0);\n const slot = lanes.join(s.axes, s.on, zeros);\n voices.set(s.id, { kind: 'hold', slot, from: zeros, held: holds.add(slot, s) } as Voice);\n return slot;\n },\n still(id, still) {\n const v = get(id);\n if (!v.held) throw new Error(`codec: subject ${id} is a ${v.kind}, not a hold`);\n holds.still(v.held, still);\n },\n touch(on) {\n holds.touch(on);\n lanes.touch(on);\n },\n refresh(reread) {\n holds.settle();\n lanes.refresh((slot) => {\n const queued = new Array<number>(slot.lane.axes).fill(0);\n for (const v of queue) {\n if (v.queued && v.slot === slot) v.queued.from.forEach((x, i) => { queued[i] += x; });\n }\n reread(slot.key, queued);\n });\n },\n retarget(id, to) {\n const v = get(id);\n if (v.kind !== 'spring') throw new Error(`codec: subject ${id} is a ${v.kind}; ${v.kind}s are not retargeted`);\n const sp = v.spring!;\n if ((to == null) === (sp.to == null)) {\n if (!to) return;\n sp.to = to.slice();\n v.patch.to!(v.slot.key, sp.to);\n return;\n }\n // Held and free run different patches, so the voice is re-cued from where it is.\n const now = current(v);\n respring(v, { ...sp, to: to && to.slice(), from: now.value, velocity: now.velocity });\n },\n recue(id, from, velocity, to) {\n const v = get(id);\n if (v.kind !== 'spring') throw new Error(`codec: subject ${id} is a ${v.kind}; only springs are re-cued`);\n respring(v, { ...v.spring!, from: from.slice(), velocity: velocity.slice(), to: to && to.slice() });\n },\n push(id, velocity) {\n const v = get(id);\n if (v.spring && !v.patch.read(v.slot.key)) v.spring.velocity = velocity.slice();\n v.patch.push?.(v.slot.key, velocity);\n },\n rate(id, rate) {\n const v = get(id);\n if (v.kind === 'hold') return;\n if (v.queued) v.queuedRate = rate;\n else v.handle.rate = rate;\n },\n stop,\n has: (id) => voices.has(id),\n own(id) {\n const v = voices.get(id);\n if (!v) return undefined;\n if (v.kind === 'spring') return current(v);\n if (v.kind === 'path' || v.kind === 'hold') {\n return { value: v.held?.last ?? v.last ?? v.from, velocity: new Array<number>(v.from.length).fill(0) };\n }\n return (!v.queued && v.patch.read(v.slot.key))\n || { value: v.from, velocity: new Array<number>(v.from.length).fill(0) };\n },\n voiceCount: () => voices.size,\n columns: (group) => lanes.columns(group),\n };\n}\n","import type { AnimatorEventHub } from '../observe';\nimport type { Codec } from './codec';\nimport type { ActiveAnimation } from './context';\nimport type { TargetBook } from './offsets';\nimport type { Table } from './table';\nimport type { Emitter } from '@weasel-js/registry';\n\n/** The animator's clock: where its frames stand, and how fast they run. */\nexport interface AnimatorClock {\n /** The timestamp the codec last advanced to. Null after the page was hidden and while nothing\n * runs, so neither gap is charged to the codec; a tween starting then seeds it from `now()`. */\n frameT: number | null;\n /** The virtual ms its frames have advanced it by: each animation's own clock is read off it. */\n elapsed: number;\n timeScale: number;\n paused: boolean;\n}\n\n/** What {@link createFrame} needs of the animator around it. */\nexport interface FrameHost {\n clock: AnimatorClock;\n table: Pick<\n Table,\n 'animations' | 'retire' | 'reportEnd' | 'finish' | 'drop' | 'infoOf' | 'ticks' | 'clockOf' | 'awake' | 'waiting'\n >;\n codec: Pick<Codec, 'frame'>;\n targets: Pick<TargetBook, 'settle' | 'show'>;\n hub: AnimatorEventHub;\n /** Supervisor frame callbacks due this frame, run once its ticks are done. */\n afterTicks: (() => void)[];\n /** Told once a frame, after its ticks and its targets are shown. */\n subscribers: Pick<Emitter, 'emit'>;\n /** Reads each touched target's voices again. */\n reread(): void;\n requestFrame(): void;\n /** True once the host has unmounted; logs the first time. */\n tripwire(): boolean;\n}\n\nexport interface Frame {\n /** Runs one frame at timestamp `t`. */\n tick(t: number): void;\n /** Whether a frame is between reading the codec and showing its targets. */\n framing(): boolean;\n /** Whether an animation's own tick is running. */\n ticking(): boolean;\n}\n\nexport function createFrame(host: FrameHost): Frame {\n const { clock, table, hub } = host;\n const { animations } = table;\n let framing = false;\n // Counted around each animation's tick, so a re-entrant call (`decay.onTick` to\n // `adapter.setPose` to `animateOnSetPose`) can tell it is inside one and write through\n // rather than schedule a tween that would fight the caller.\n let tickDepth = 0;\n\n /** Ticks the animations with something to do this frame, as the table stood when the frame\n * began, and answers which finished. */\n const tickEach = (): ActiveAnimation[] => {\n const finished: ActiveAnimation[] = [];\n const threw: [ActiveAnimation, unknown][] = [];\n // One waiting for its `due` checks for nothing meanwhile, the host's unmount included:\n // once that has happened every animation is ticked, so each sees it and leaves.\n const all = table.waiting > 0 && host.tripwire();\n // A snapshot: an animation registered by this frame's ticks first ticks on the\n // next, or a zero-duration loop would chain inside one frame and never leave it.\n for (const anim of all ? [...animations.values()] : table.ticks()) {\n if (animations.get(anim.id) !== anim) continue;\n const scale = clock.paused ? 0 : clock.timeScale * (anim.paused ? 0 : anim.timeScale);\n tickDepth += 1;\n try {\n if (anim.tick(table.clockOf(anim), scale)) finished.push(anim);\n } catch (error) {\n threw.push([anim, error]);\n } finally {\n tickDepth -= 1;\n }\n }\n for (const [anim, error] of threw) {\n console.error('useAnimator: animation tick threw; retiring it', error);\n if (animations.get(anim.id) !== anim) continue;\n // One that ended before throwing (from `onDone`) is finished, not canceled.\n if (anim.ended) table.drop(anim);\n else table.retire(anim.id, undefined, true);\n if (hub.watched) hub.emit({ type: 'error', animation: table.infoOf(anim), error });\n }\n return finished;\n };\n\n return {\n tick(t) {\n // `t` comes from the frame clock, and `frameT` is seeded from `now()` while the animator\n // is idle. The two share a time origin in a browser, where the rAF timestamp and\n // `performance.now()` are both page-relative, but not everywhere: jsdom starts them\n // ~600ms apart. Time never runs backwards, so a negative sample is never real.\n const frameDt = clock.frameT == null ? 0 : Math.max(0, t - clock.frameT);\n clock.frameT = t;\n framing = true;\n const dt = frameDt * (clock.paused ? 0 : clock.timeScale);\n clock.elapsed += dt;\n host.codec.frame(dt);\n host.targets.settle();\n for (const anim of tickEach()) {\n // Gone already if its own tick canceled it; replaced if something\n // revived it under the same id since.\n if (animations.get(anim.id) === anim) table.finish(anim.id);\n }\n for (const cb of host.afterTicks.splice(0)) {\n try { cb(); } catch (err) { console.error('useAnimator: a staggered start threw', err); }\n }\n host.reread();\n framing = false;\n host.targets.show();\n // After the tick batch, so each subscriber sees the latest color overrides and poses.\n host.subscribers.emit();\n if (table.awake) {\n host.requestFrame();\n return;\n }\n // As when the page was hidden: the time asleep is charged to nothing.\n clock.frameT = null;\n },\n framing: () => framing,\n ticking: () => tickDepth > 0,\n };\n}\n","import type { ColorOverrideRegistry } from '../colorRegistry';\nimport { AnimatorEventHub } from '../observe';\nimport type { TargetState } from '../target';\nimport type { Animator } from '../types';\nimport { createAnimatorApi } from './animatorApi';\nimport { createCodec } from './codec';\nimport type { ActiveAnimation, AnimationContext } from './context';\nimport { createFrame, type AnimatorClock } from './frame';\nimport { createTargetBook } from './offsets';\nimport { createTable } from './table';\nimport { createEmitter } from '@weasel-js/registry';\n\n/** What {@link createAnimatorCore} needs of whoever hosts it: a clock and a frame loop. */\nexport interface CoreHost {\n /** Now, on the clock the frame loop's timestamps are on. */\n now(): number;\n requestFrame(): void;\n cancelFrame(): void;\n /** True once the host has unmounted; logs the first time. */\n tripwire(): boolean;\n colorOverrides: ColorOverrideRegistry;\n}\n\n/** An animator apart from React: its table, clock, and codec, driven by the host's frames. */\nexport interface AnimatorCore {\n api: Animator;\n /** Runs one frame at timestamp `t`. */\n tick(t: number): void;\n /** Says the frame loop is back after time unseen, which is charged to no animation. */\n resumed(): void;\n}\n\nexport function createAnimatorCore(host: CoreHost): AnimatorCore {\n const clock: AnimatorClock = { frameT: null, elapsed: 0, timeScale: 1, paused: false };\n const hub = new AnimatorEventHub();\n const codec = createCodec((on) => {\n const { row } = on as TargetState;\n return row ? { group: row.table, tag: row.index } : undefined;\n });\n const afterTicks: (() => void)[] = [];\n const subscribers = createEmitter();\n let nextId = 1;\n const seedClock = (): void => { if (clock.frameT == null) clock.frameT = host.now(); };\n\n const reread = (): void => codec.refresh((on, queued) => targets.reread(on as TargetState, queued));\n const table = createTable({\n codec,\n hub,\n elapsed: () => clock.elapsed,\n seedClock,\n showNow: (target) => targets.showNow(target),\n resting: () => targets.resting,\n framing: () => frame.framing(),\n requestFrame: host.requestFrame,\n });\n const targets = createTargetBook({\n stop: (s) => {\n for (const a of [...table.on(s)]) table.retire(a.id);\n },\n reread: (s) => {\n codec.touch(s);\n reread();\n },\n columns: (table) => codec.columns(table),\n });\n const frame = createFrame({\n clock, table, codec, targets, hub, afterTicks, subscribers, reread,\n requestFrame: host.requestFrame, tripwire: host.tripwire,\n });\n\n const ctx: AnimationContext = {\n codec,\n targets,\n nextId: () => nextId++,\n seedClock,\n register: table.register,\n has: (id) => table.animations.has(id),\n defer: table.defer,\n reportEnd: table.reportEnd,\n finish: table.finish,\n touch: (target, at) => {\n codec.touch(target);\n if (frame.framing() && !at) return;\n reread();\n if (!frame.framing()) host.requestFrame();\n },\n tripwire: host.tripwire,\n interrupt: (key, by) => table.cancelByKey(key, by as ActiveAnimation),\n velocityUnder: (key, target) => {\n let sum: number[] | null = null;\n for (const a of table.under(key)) {\n if (a.target !== target) continue;\n const v = a.velocity?.() ?? codec.own(a.id)?.velocity;\n if (v) sum = sum ? sum.map((x, i) => x + v[i]!) : v.slice();\n }\n return sum;\n },\n };\n\n const api = createAnimatorApi({\n ctx,\n table,\n clock,\n hub,\n ticking: frame.ticking,\n afterTicks: (cb) => { afterTicks.push(cb); },\n subscribers,\n colorOverrides: host.colorOverrides,\n halt: host.cancelFrame,\n });\n\n return {\n api,\n tick: frame.tick,\n resumed() {\n // An hour spent hidden is not an hour the animation ran: dropping the last frame's\n // timestamp makes the resuming frame advance the clock by nothing.\n clock.frameT = null;\n },\n };\n}\n","import { useCallback, useEffect, useInsertionEffect, useMemo, useRef } from 'react';\nimport { useLatest, useVisibleRaf } from '@weasel-js/react';\nimport { ColorOverrideRegistry } from './colorRegistry';\nimport { createAnimatorCore, type AnimatorCore } from './engine/core';\nimport type { Animator, UseAnimatorOptions } from './types';\n\n/** Create the animator for a canvas. One rAF loop drives every animation it\n * owns, and everything still running is canceled on unmount. */\nexport function useAnimator(opts: UseAnimatorOptions = {}): Animator {\n const optsRef = useLatest(opts);\n const colorOverrides = useRef<ColorOverrideRegistry>(new ColorOverrideRegistry());\n\n // The loop runs behind the visibility gate. The core is built in the memo\n // below, so the frame callback reaches it through a ref, published once the\n // memo's render commits.\n const coreRef = useRef<AnimatorCore | null>(null);\n const frameLoop = useVisibleRaf(\n useCallback((t: number) => { coreRef.current?.tick(t); }, []),\n {\n requestFrame: opts.requestFrame,\n cancelFrame: opts.cancelFrame,\n onResume: () => coreRef.current?.resumed(),\n },\n );\n const frameLoopRef = useLatest(frameLoop);\n\n // Tripwire: dev-only flag that every tween/spring/decay's tick reads to\n // detect \"animation fired after the host component unmounted.\" This is a\n // symptom of cleanup not running (regression) — typically because someone\n // refactored useAnimator and forgot to wire the unmount effect. The flag\n // flips false on cleanup; ticks see it and log a one-time error so the\n // bug is loud rather than just visually-doubled animation.\n const mountedRef = useRef(true);\n const trippedRef = useRef(false);\n\n const core = useMemo(() => {\n const tripwire = (): boolean => {\n if (mountedRef.current) return false;\n if (!trippedRef.current) {\n trippedRef.current = true;\n const isDev = typeof process !== 'undefined' ? process.env.NODE_ENV !== 'production' : true;\n if (isDev) {\n console.error(\n 'weasel useAnimator: animation tick fired after the host component unmounted. ' +\n 'This usually means cleanup logic was bypassed — check for refactors that ' +\n 'removed the unmount effect or replaced cancelAll with a custom path.',\n );\n }\n }\n return true;\n };\n // Default to performance.now() so the time origin matches the\n // requestAnimationFrame callback's DOMHighResTimeStamp argument.\n // Using Date.now() here would mix epoch-millis with page-relative-millis,\n // producing huge negative `elapsed` values that clamp tween `t` to 0\n // forever (never reaching completion).\n const now = (): number =>\n (optsRef.current.now ?? (typeof performance !== 'undefined' ? performance.now.bind(performance) : Date.now))();\n return createAnimatorCore({\n now,\n requestFrame: () => frameLoopRef.current.request(),\n cancelFrame: () => frameLoopRef.current.cancel(),\n tripwire,\n colorOverrides: colorOverrides.current,\n });\n }, [frameLoopRef, optsRef]);\n\n useInsertionEffect(() => {\n coreRef.current = core;\n }, [core]);\n\n // StrictMode-safe cleanup: when the component unmounts (including the\n // dev-mode double-mount that StrictMode performs), cancel every running\n // animation and stop the RAF loop. Without this, the FIRST mount's\n // animator keeps ticking with stale callbacks pointing at the unmounted\n // adapter, while the SECOND mount creates its own animator on top —\n // visible to the user as every animation playing twice.\n const { api } = core;\n useEffect(() => {\n const overrides = colorOverrides.current;\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n api.cancelAll();\n overrides.clearAll();\n };\n }, [api]);\n\n return api;\n}\n","/** Most a slewed value may change per second, in its own units, in each\n * direction. A direction left out is unlimited: the value jumps to a target\n * on that side. `0` holds the value where it is. */\nexport interface SlewRates {\n rise?: number;\n fall?: number;\n}\n\nfunction checkRate(name: string, rate: number | undefined): number {\n if (rate === undefined) return Infinity;\n if (!(rate >= 0)) throw new RangeError(`slew: ${name} must be a rate >= 0, got ${rate}`);\n return rate;\n}\n\n/**\n * One step of a slew limiter: `value` moved toward `target` by at most the\n * rate for that direction times `dt` seconds, landing on `target` rather than\n * passing it. A fast `rise` with a slow `fall` is an attack/release envelope.\n */\nexport function slewToward(value: number, target: number, dt: number, rates: SlewRates): number {\n const rise = checkRate('rise', rates.rise);\n const fall = checkRate('fall', rates.fall);\n if (target > value) return Math.min(target, value + rise * dt);\n if (target < value) return Math.max(target, value - fall * dt);\n return value;\n}\n\n/** A value that follows `target` at limited rates. Both fields are writable:\n * set `target` to steer it, or write `value` to jump it and let it slew on\n * from there. Nothing moves until `step` is called. */\nexport interface Slew {\n value: number;\n target: number;\n /** Advance `dt` seconds and return the new value. */\n step(dt: number): number;\n}\n\n/** A stateful {@link slewToward}. `target` defaults to `value`, so a new slew\n * is at rest. */\nexport function createSlew(options: SlewRates & { value?: number; target?: number } = {}): Slew {\n const rates: SlewRates = { rise: checkRate('rise', options.rise), fall: checkRate('fall', options.fall) };\n const value = options.value ?? 0;\n const slew: Slew = {\n value,\n target: options.target ?? value,\n step(dt) {\n slew.value = slewToward(slew.value, slew.target, dt, rates);\n return slew.value;\n },\n };\n return slew;\n}\n","import { lerpColorArray, type ColorSpace } from '@weasel-js/paint';\n\n/**\n * Color interpolator: receives two flat RGBA float arrays (values in\n * 0..1, the renderer's color space — same shape as\n * `stroke.vertexColors`) and a normalized progress `t` in 0..1.\n * Returns the same-length blended array, also in 0..1 floats. Override\n * the default per-channel lerp via `TweenVertexColorsOptions.interpolate`\n * when a custom color-space or shaping is needed.\n */\nexport type ColorInterpolate = (\n from: readonly number[],\n to: readonly number[],\n t: number,\n) => number[];\n\n/** The interpolator the options ask for: `interpolate` itself, else a lerp in `interpolation`'s space. */\nexport function resolveInterpolator(\n opts: { interpolation?: ColorSpace; interpolate?: ColorInterpolate },\n): ColorInterpolate {\n if (opts.interpolate) return opts.interpolate;\n const space: ColorSpace = opts.interpolation ?? 'rgb';\n return (a, b, t) => lerpColorArray(a, b, t, space);\n}\n","import { linear, resolveEasing } from '@weasel-js/geom';\nimport type { ColorSpace } from '@weasel-js/paint';\nimport type {\n AnimationHandle,\n Animator,\n EasingSpec,\n SpringPresetName,\n} from './types';\nimport type { VertexColorChannel } from './colorRegistry';\nimport { resolveInterpolator, type ColorInterpolate } from './colorInterpolate';\n\n/** Options for `tweenVertexColors`. */\nexport interface TweenVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n /** Per-anchor RGBA, flat, in 0..1 floats (matches the renderer's\n * `stroke.vertexColors` / `PathDrawCommand.vertexColors` color space).\n * Length must equal `from.length`. */\n to: readonly number[];\n /** Per-anchor RGBA, flat, in 0..1 floats. Length must equal `to.length`\n * and be a positive multiple of 4. */\n from: readonly number[];\n ms: number;\n easing?: EasingSpec;\n interpolation?: ColorSpace;\n interpolate?: ColorInterpolate;\n onDone?: () => void;\n}\n\nfunction validateLengths(from: readonly number[], to: readonly number[]): void {\n if (from.length !== to.length) {\n throw new Error(\n `vertex colors: length mismatch (from=${from.length}, to=${to.length})`,\n );\n }\n if (from.length === 0 || from.length % 4 !== 0) {\n throw new Error(\n `vertex colors: length ${from.length} must be a positive multiple of 4`,\n );\n }\n}\n\nconst cancelKeyFor = (id: string, channel: VertexColorChannel): string =>\n `colors:${id}:${channel}`;\n\n/** Under a thousandth of full scale from `to`, and slower than that a second, a color spring is done. */\nconst COLOR_REST = 0.001;\n\n/** What the from-to helpers share: the node's color target, moved by a path through `colorsAt`. */\nfunction tweenColors(\n animator: Animator,\n opts: { id: string; channel: VertexColorChannel; from: readonly number[]; to: readonly number[]; onDone?: () => void },\n ms: number,\n easing: EasingSpec | undefined,\n colorsAt: (t: number) => number[],\n): AnimationHandle {\n const { id, channel } = opts;\n const registry = animator.colorOverrides;\n return animator.tween<number[]>({\n target: registry.target(id, channel, opts.from.length),\n from: opts.from.slice(),\n to: opts.to.slice(),\n ms,\n easing,\n cancelKey: cancelKeyFor(id, channel),\n interrupt: false,\n interpolate: (_from, _to, t) => colorsAt(t),\n onDone: () => {\n registry.release(id, channel);\n opts.onDone?.();\n },\n });\n}\n\n/**\n * Animate one node's per-anchor colors from `from` to `to` over `ms`.\n *\n * It moves the node's color target (`animator.colorOverrides.target`) rather\n * than writing the scene, so nothing is recorded in history and the node's own\n * data is untouched. Another tween or stagger on the same node and channel adds\n * to this one; a spring interrupts it. What it painted is dropped when the last\n * animation on the node and channel finishes, and held where it was if canceled\n * until `animator.colorOverrides.clear`.\n */\nexport function tweenVertexColors(\n animator: Animator,\n opts: TweenVertexColorsOptions,\n): AnimationHandle {\n validateLengths(opts.from, opts.to);\n const interp = resolveInterpolator(opts);\n return tweenColors(animator, opts, opts.ms, opts.easing, (t) => interp(opts.from, opts.to, t));\n}\n\n/** Options for `springVertexColors`. */\nexport interface SpringVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.to`. */\n to: readonly number[];\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.from`. */\n from: readonly number[];\n preset?: SpringPresetName;\n stiffness?: number;\n damping?: number;\n mass?: number;\n onDone?: () => void;\n}\n\n/**\n * `tweenVertexColors` driven by a spring instead of a duration. Each number\n * springs on its own, so an underdamped spring overshoots `to` and the path is\n * a straight line in RGB.\n *\n * It interrupts whatever is animating the node and channel, and starts at the\n * velocity of the one it interrupts, so retargeting mid-flight does not stall.\n */\nexport function springVertexColors(\n animator: Animator,\n opts: SpringVertexColorsOptions,\n): AnimationHandle {\n validateLengths(opts.from, opts.to);\n const { id, channel } = opts;\n const registry = animator.colorOverrides;\n return animator.spring<number[]>({\n target: registry.target(id, channel, opts.from.length),\n from: opts.from.slice(),\n to: opts.to.slice(),\n preset: opts.preset,\n stiffness: opts.stiffness,\n damping: opts.damping,\n mass: opts.mass,\n restThreshold: COLOR_REST,\n cancelKey: cancelKeyFor(id, channel),\n onDone: () => {\n registry.release(id, channel);\n opts.onDone?.();\n },\n });\n}\n\n/** Options for `staggerVertexColors`. `origin` picks which anchor the wave\n * starts from and `perAnchorDelay` how far behind each successive anchor\n * runs. */\nexport interface StaggerVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.to`. */\n to: readonly number[];\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.from`. */\n from: readonly number[];\n anchorMs: number;\n perAnchorDelay: number;\n origin?: 'first' | 'last' | number;\n easing?: EasingSpec;\n interpolation?: ColorSpace;\n interpolate?: ColorInterpolate;\n onDone?: () => void;\n}\n\n/** Run the same color change across a node's anchors as a wave, each anchor\n * starting later than the one before it. It moves the same target as\n * `tweenVertexColors`, and adds to other animations the same way. */\nexport function staggerVertexColors(\n animator: Animator,\n opts: StaggerVertexColorsOptions,\n): AnimationHandle {\n validateLengths(opts.from, opts.to);\n const interp = resolveInterpolator(opts);\n const { from, to, anchorMs, perAnchorDelay } = opts;\n const n = from.length / 4;\n const easing = resolveEasing(opts.easing);\n\n const originIndex =\n opts.origin === 'last' ? n - 1 :\n typeof opts.origin === 'number' ? Math.max(0, Math.min(n - 1, opts.origin)) :\n 0;\n\n const maxDistance = Math.max(originIndex, n - 1 - originIndex);\n const totalMs = maxDistance * perAnchorDelay + anchorMs;\n\n const colorsAt = (elapsedMs: number): number[] => {\n const out = new Array<number>(from.length);\n for (let i = 0; i < n; i++) {\n const distance = Math.abs(i - originIndex);\n const startMs = distance * perAnchorDelay;\n const localT = Math.max(0, Math.min(1, (elapsedMs - startMs) / anchorMs));\n const eased = easing(localT);\n const k = i * 4;\n const fSlice = [from[k], from[k + 1], from[k + 2], from[k + 3]];\n const tSlice = [to[k], to[k + 1], to[k + 2], to[k + 3]];\n const blended = interp(fSlice, tSlice, eased);\n out[k] = blended[0];\n out[k + 1] = blended[1];\n out[k + 2] = blended[2];\n out[k + 3] = blended[3];\n }\n return out;\n };\n\n return tweenColors(animator, opts, totalMs, linear, (t) => colorsAt(t * totalMs));\n}\n","import { resolveEasing } from '@weasel-js/geom';\nimport type { ColorSpace } from '@weasel-js/paint';\nimport type { Animator, EasingSpec } from './types';\nimport type { VertexColorChannel } from './colorRegistry';\nimport { resolveInterpolator, type ColorInterpolate } from './colorInterpolate';\n\n/** Options for `cycleVertexColors`. */\nexport interface CycleVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n msPerCycle: number;\n direction?: 1 | -1;\n easing?: EasingSpec;\n interpolation?: ColorSpace;\n /** Custom interpolator. Receives two RGBA arrays in 0..1 floats and a\n * progress `t` in 0..1; returns the blended array in 0..1 floats. */\n interpolate?: ColorInterpolate;\n}\n\n/** Removes an installed color cycle. Unlike the other color helpers this is\n * not an `AnimationHandle`, because a cycle has no progress to pause or\n * scale — it only ends. */\nexport interface CycleHandle {\n cancel(): void;\n}\n\n/** Register a function override that phase-rotates the base color array\n * along the path index. Returns a handle whose `cancel()` removes the\n * override.\n *\n * The override computes its value purely from `performance.now()`, so\n * there's no per-frame progress to register with the animator's tick\n * loop. To keep the loop alive (so `<SceneCanvas animator>`'s onTick\n * subscription continues firing redraws while the cycle is installed),\n * cycleVertexColors holds an `animator.keepAlive()` entry for the\n * lifetime of the cycle; `cancel()` releases it. */\nexport function cycleVertexColors(\n animator: Animator,\n opts: CycleVertexColorsOptions,\n): CycleHandle {\n const interp = resolveInterpolator(opts);\n const { id, channel } = opts;\n const direction = opts.direction ?? 1;\n const easing = resolveEasing(opts.easing);\n\n const override = (base: readonly number[], tMs: number): number[] => {\n const n = base.length / 4;\n if (n === 0) return base.slice();\n const raw = (tMs / opts.msPerCycle) * n * direction;\n const cycles = raw / n;\n const cycleFrac = cycles - Math.floor(cycles);\n const easedFrac = easing(cycleFrac);\n const easedRaw = (Math.floor(cycles) + easedFrac) * n;\n const phase = ((easedRaw % n) + n) % n;\n const phaseInt = Math.floor(phase);\n const phaseFrac = phase - phaseInt;\n\n const out = new Array<number>(base.length);\n for (let i = 0; i < n; i++) {\n const aIdx = ((i + phaseInt) % n) * 4;\n const bIdx = ((i + phaseInt + 1) % n) * 4;\n const a = [base[aIdx], base[aIdx + 1], base[aIdx + 2], base[aIdx + 3]];\n const b = [base[bIdx], base[bIdx + 1], base[bIdx + 2], base[bIdx + 3]];\n const blended = interp(a, b, phaseFrac);\n const k = i * 4;\n out[k] = blended[0];\n out[k + 1] = blended[1];\n out[k + 2] = blended[2];\n out[k + 3] = blended[3];\n }\n return out;\n };\n\n animator.colorOverrides.set(id, channel, override);\n // Cycle's \"value\" is a function of wall-clock time, not a tween-style\n // progress. We don't register a per-frame ticking animation, so without\n // an explicit keep-alive entry the animator's RAF loop would idle and\n // SceneCanvas's onTick redraw subscription would never fire. Keep the\n // loop running until cancel().\n const releaseKeepAlive = animator.keepAlive();\n\n return {\n cancel(): void {\n animator.colorOverrides.clear(id, channel);\n releaseKeepAlive();\n },\n };\n}\n","import { hslToSrgb } from '@weasel-js/paint';\n\n// Per-anchor RGBA arrays in the 0..1 range the renderer expects: bytes (0..255) clamp every\n// channel to 1.0 on the GPU and render white.\n\n/** Build an n-anchor rainbow RGBA array sweeping the hue wheel. The\n * output is suitable to pass directly into `stroke.vertexColors`,\n * `tweenVertexColors({ from: rainbowVertexColors(n) })`, or any\n * other API that wants per-anchor color floats. */\nexport function rainbowVertexColors(\n n: number,\n opts: { saturation?: number; lightness?: number; alpha?: number } = {},\n): number[] {\n const saturation = opts.saturation ?? 0.8;\n const lightness = opts.lightness ?? 0.6;\n const alpha = opts.alpha ?? 1;\n const out: number[] = [];\n for (let i = 0; i < n; i++) {\n const h = (i * 360) / Math.max(1, n);\n const [r, g, b] = hslToSrgb(h, saturation, lightness);\n out.push(r, g, b, alpha);\n }\n return out;\n}\n\n/** Build an n-anchor solid RGBA array. Shorthand for\n * `[r, g, b, a, r, g, b, a, …]` — the array a `tweenVertexColors`\n * `to`-target typically needs. */\nexport function solidVertexColors(\n n: number,\n r: number,\n g: number,\n b: number,\n a = 1,\n): number[] {\n const out: number[] = [];\n for (let i = 0; i < n; i++) out.push(r, g, b, a);\n return out;\n}\n","import {\n EASINGS, reviveTypedArrays, tagTypedArrays, type BezierEasing, type EasingName, type EasingSpec,\n} from '@weasel-js/geom';\nimport { axisIndexes } from '../axisNames';\nimport type { Target } from '../target';\nimport type { Interpolate } from '../types';\nimport type { EventTrack, NestedTimeline, SampledTrack, TimelineEvent, TimelineTrack, Track } from './types';\n\n/** A value a clip can hold: what `JSON.stringify` writes and `JSON.parse` reads back. An\n * object's `undefined` members are left out, as JSON leaves them. */\nexport type ClipValue = number | string | boolean | null | ClipValue[] | { [key: string]: ClipValue | undefined };\n\n/** A keyframe as data. Its easing is a built-in's name or bezier control points. */\nexport interface ClipKey {\n t: number;\n /** A typed array in the live key's value, as a `Path` has, is held as a `TaggedTypedArray`\n * from `@weasel-js/geom`: `{ __ta: 'f32', data: [...] }`. `bindClip` makes it the array again. */\n value: ClipValue;\n easing?: EasingName | BezierEasing;\n}\n\n/** A `SampledTrack` as data: what it moves and how it interpolates are names. */\nexport interface ClipSampledTrack {\n kind: 'sampled';\n label?: string;\n /** Resolved by `ClipBinder.target`. A track with none is sampled and moves nothing. */\n target?: string;\n keys: ClipKey[];\n /** Resolved from `ClipBinder.interpolate`. Without one the track is sampled in its\n * target's axes, or field by field. */\n interpolate?: string;\n /** The track's share of its target: a number, or a name for `ClipBinder.weight` to resolve\n * into a function read each frame, as a crossfade's is. */\n weight?: number | string;\n /** The part of the target the track holds: the target's names for its axes, a rig's joints\n * among them, or positions in its axes where it has no names. */\n axes?: number[] | string[];\n}\n\n/** An `EventTrack` as data: each event is a name and what to carry with it. */\nexport interface ClipEventTrack {\n kind: 'event';\n label?: string;\n events: { t: number; name: string; data?: ClipValue }[];\n}\n\n/** A `TimelineTrack` as data. */\nexport interface ClipTimelineTrack {\n kind: 'timeline';\n label?: string;\n at: number;\n timeline: ClipTimeline;\n}\n\n/** Any track a clip can hold. */\nexport type ClipTrack = ClipSampledTrack | ClipEventTrack | ClipTimelineTrack;\n\n/** A `NestedTimeline` as data. */\nexport interface ClipTimeline {\n tracks: ClipTrack[];\n duration?: number;\n}\n\n/** A timeline as data: what `JSON.stringify` can write, `bindClip` can play, and `toClip`\n * can read back off a live timeline. */\nexport interface Clip extends ClipTimeline {\n version: 1;\n}\n\n/** What turns the names in a clip into the live things a timeline plays. */\nexport interface ClipBinder {\n /** The target a sampled track names. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n target?(name: string): Target<any> | undefined;\n /** Interpolations by name. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n interpolate?: Readonly<Record<string, Interpolate<any>>>;\n /** The function a track's named weight stands for. */\n weight?(name: string): (() => number) | undefined;\n /** What an event does: its `fire`, its `book`, or both. */\n event?(name: string, data: ClipValue | undefined): Pick<TimelineEvent, 'fire' | 'book'> | undefined;\n}\n\nconst defined = <T extends object>(o: T): T => {\n for (const k in o) if (o[k] === undefined) delete o[k];\n return o;\n};\n\nfunction bindTrack(track: ClipTrack, binder: ClipBinder): Track {\n if (track.kind === 'timeline') {\n return defined<TimelineTrack>({ kind: 'timeline', label: track.label, at: track.at, timeline: bindTimeline(track.timeline, binder) });\n }\n if (track.kind === 'event') {\n return defined<EventTrack>({\n kind: 'event',\n label: track.label,\n events: track.events.map((e) => {\n const does = binder.event?.(e.name, e.data);\n if (!does) throw new Error(`bindClip: the binder has no event named \"${e.name}\".`);\n return defined<TimelineEvent>({ t: e.t, name: e.name, data: e.data, fire: does.fire, book: does.book });\n }),\n });\n }\n const target = track.target === undefined ? undefined : binder.target?.(track.target);\n if (track.target !== undefined && !target) throw new Error(`bindClip: the binder has no target named \"${track.target}\".`);\n const interpolate = track.interpolate === undefined ? undefined : binder.interpolate?.[track.interpolate];\n if (track.interpolate !== undefined && !interpolate) {\n throw new Error(`bindClip: the binder has no interpolation named \"${track.interpolate}\".`);\n }\n return defined<SampledTrack<ClipValue>>({\n kind: 'sampled',\n label: track.label,\n keys: track.keys.map((k) => ({ ...k, value: reviveTypedArrays(k.value) as ClipValue })),\n target,\n targetName: track.target,\n interpolate,\n interpolateName: track.interpolate,\n ...bindWeight(track, binder),\n axes: bindAxes(track, target),\n });\n}\n\nfunction bindWeight(track: ClipSampledTrack, binder: ClipBinder): Pick<SampledTrack<ClipValue>, 'weight' | 'weightName'> {\n const { weight } = track;\n if (typeof weight !== 'string') return { weight };\n const read = binder.weight?.(weight);\n if (!read) throw new Error(`bindClip: the binder has no weight named \"${weight}\".`);\n return { weight: read, weightName: weight };\n}\n\n/** A clip track's axes for the live track, refused here where its target has no such axes\n * rather than when the playhead first reaches the track. */\nfunction bindAxes(track: ClipSampledTrack, target: Target<unknown> | undefined): SampledTrack<ClipValue>['axes'] {\n const { axes } = track;\n if (!axes) return undefined;\n const where = `bindClip: track \"${track.label ?? ''}\"`;\n if (!target) throw new Error(`${where} names axes and no target.`);\n axisIndexes(target.axes, axes, `${where} on the target \"${track.target}\"`);\n return [...axes] as SampledTrack<ClipValue>['axes'];\n}\n\nfunction bindTimeline(timeline: ClipTimeline, binder: ClipBinder): NestedTimeline {\n return defined<NestedTimeline>({ tracks: timeline.tracks.map((t) => bindTrack(t, binder)), duration: timeline.duration });\n}\n\n/**\n * The live timeline a clip describes, for `animator.timeline`: each sampled track given the\n * target and interpolation it names, each event what the binder says it does. The tracks\n * keep those names, so `toClip` can write them back after an editor has changed them.\n * Throws on a name the binder does not resolve.\n */\nexport function bindClip(clip: Clip, binder: ClipBinder): NestedTimeline {\n if (clip.version !== 1) throw new Error(`bindClip: this clip is version ${String(clip.version)}, and version 1 is the one understood.`);\n return bindTimeline(clip, binder);\n}\n\nconst EASING_NAMES = new Map<unknown, EasingName>(\n (Object.keys(EASINGS) as EasingName[]).map((name) => [EASINGS[name], name]),\n);\n\nfunction isClipValue(v: unknown): v is ClipValue {\n if (v === null || typeof v === 'string' || typeof v === 'boolean') return true;\n if (typeof v === 'number') return Number.isFinite(v);\n if (Array.isArray(v)) return v.every(isClipValue);\n if (typeof v !== 'object' || Object.prototype.toString.call(v) !== '[object Object]') return false;\n return Object.values(v as object).every((member) => member === undefined || isClipValue(member));\n}\n\nfunction easingOf(spec: EasingSpec | undefined, where: string): EasingName | BezierEasing | undefined {\n if (spec === undefined || typeof spec === 'string') return spec;\n if (typeof spec !== 'function') return { bezier: [...spec.bezier] as BezierEasing['bezier'] };\n const name = EASING_NAMES.get(spec);\n if (!name) throw new Error(`toClip: ${where} eases a key by a function that is not a built-in; name it or use bezier points.`);\n return name;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction sampledToClip(track: SampledTrack<any>, where: string): ClipSampledTrack {\n if (track.onTick) throw new Error(`toClip: ${where} has an onTick, which a clip cannot hold; move the value with a target.`);\n if (track.target && track.targetName === undefined) throw new Error(`toClip: ${where} has a target and no targetName.`);\n if (track.interpolator) throw new Error(`toClip: ${where} has an interpolator, which a clip cannot hold.`);\n if (track.interpolate && track.interpolateName === undefined) throw new Error(`toClip: ${where} has an interpolate and no interpolateName.`);\n if (typeof track.weight === 'function' && track.weightName === undefined) {\n throw new Error(`toClip: ${where} has a function for its weight and no weightName.`);\n }\n return defined<ClipSampledTrack>({\n kind: 'sampled',\n label: track.label,\n target: track.targetName,\n keys: track.keys.map((k) => {\n const value = tagTypedArrays(k.value);\n if (!isClipValue(value)) throw new Error(`toClip: ${where} holds a value JSON cannot round-trip, at t = ${k.t}.`);\n return defined<ClipKey>({ t: k.t, value, easing: easingOf(k.easing, where) });\n }),\n interpolate: track.interpolateName,\n weight: typeof track.weight === 'function' ? track.weightName : track.weight,\n axes: track.axes && ([...track.axes] as ClipSampledTrack['axes']),\n });\n}\n\nfunction trackToClip(track: Track, index: number): ClipTrack {\n const where = `track \"${track.label ?? index}\"`;\n if (track.kind === 'timeline') {\n return defined<ClipTimelineTrack>({ kind: 'timeline', label: track.label, at: track.at, timeline: timelineToClip(track.timeline) });\n }\n if (track.kind === 'sampled') return sampledToClip(track, where);\n return defined<ClipEventTrack>({\n kind: 'event',\n label: track.label,\n events: track.events.map((e) => {\n if (e.name === undefined) throw new Error(`toClip: ${where} has an event with no name, at t = ${e.t}.`);\n if (e.data !== undefined && !isClipValue(e.data)) throw new Error(`toClip: ${where} carries data JSON cannot round-trip, at t = ${e.t}.`);\n return defined({ t: e.t, name: e.name, data: e.data as ClipValue | undefined });\n }),\n });\n}\n\nfunction timelineToClip(timeline: NestedTimeline): ClipTimeline {\n return defined<ClipTimeline>({ tracks: timeline.tracks.map(trackToClip), duration: timeline.duration });\n}\n\n/**\n * A live timeline as a clip: `{ tracks, duration }` as `animator.timeline` takes them, or\n * `{ tracks: handle.tracks() }` off a running one. Each track is written by the names it\n * carries (`targetName`, `interpolateName`, an event's `name`), which `bindClip` sets and a\n * track written by hand can set too. A typed array in a key's value is written tagged.\n * Throws, naming the track, on anything a clip cannot hold: a function with no name, an\n * `onTick`, or a value JSON would not read back.\n */\nexport function toClip(timeline: NestedTimeline): Clip {\n return { version: 1, ...timelineToClip(timeline) };\n}\n","import type { JointTransform, Pose, Skeleton } from './types';\n\n/**\n * `pose` reflected across the rig's y axis, as deltas against the same\n * skeleton — so the mirrored pose still blends, samples, and resolves like any\n * other, and a rig faces the other way without a negative scale anywhere.\n *\n * Each joint's `x` and `rotation` are negated as bind plus delta, so the delta\n * for a joint the pose leaves at its bind is nonzero whenever the bind is.\n * Applying it twice gives the original pose back.\n */\nexport function mirrorPose(skeleton: Skeleton, pose: Pose): Pose {\n const out: Pose = {};\n const binds = new Map<string, JointTransform>();\n for (const joint of skeleton.joints) binds.set(joint.name, joint.bind);\n const names = new Set([...binds.keys(), ...Object.keys(pose)]);\n for (const name of names) {\n const bind = binds.get(name);\n const d = pose[name];\n out[name] = {\n ...d,\n x: -2 * (bind?.x ?? 0) - (d?.x ?? 0),\n rotation: -2 * (bind?.rotation ?? 0) - (d?.rotation ?? 0),\n };\n }\n return out;\n}\n","import { mat3, type GlMat3 } from '@weasel-js/geom';\nimport type { JointTransform, Pose, Skeleton } from './types';\n\n/** bind + delta, field by field. Scale is multiplicative, the rest additive. */\nexport function compose(bind: JointTransform, delta: Partial<JointTransform> | undefined): JointTransform {\n if (!delta) return bind;\n return {\n x: bind.x + (delta.x ?? 0),\n y: bind.y + (delta.y ?? 0),\n rotation: bind.rotation + (delta.rotation ?? 0),\n scaleX: bind.scaleX * (delta.scaleX ?? 1),\n scaleY: bind.scaleY * (delta.scaleY ?? 1),\n };\n}\n\n/** TRS as a GlMat3: translate * rotate * scale, applied to a column vector. */\nexport function toMat3(t: JointTransform): GlMat3 {\n const c = Math.cos(t.rotation);\n const s = Math.sin(t.rotation);\n const m = new Float32Array(9) as GlMat3;\n m[0] = c * t.scaleX; m[1] = s * t.scaleX; m[2] = 0;\n m[3] = -s * t.scaleY; m[4] = c * t.scaleY; m[5] = 0;\n m[6] = t.x; m[7] = t.y; m[8] = 1;\n return m;\n}\n\n/**\n * Resolve every joint's world transform by walking the skeleton once and\n * composing each joint onto its already-resolved parent.\n *\n * `skeleton.joints` must be in topological order — a joint whose parent has not\n * been resolved yet throws rather than silently resolving against identity,\n * because that failure is otherwise invisible until a limb renders in the wrong\n * place.\n */\nexport function resolveSkeleton(skeleton: Skeleton, pose: Pose): Map<string, GlMat3> {\n const out = new Map<string, GlMat3>();\n for (const joint of skeleton.joints) {\n const local = toMat3(compose(joint.bind, pose[joint.name]));\n if (joint.parent == null) {\n out.set(joint.name, local);\n continue;\n }\n const parent = out.get(joint.parent);\n if (!parent) {\n throw new Error(\n `resolveSkeleton: joint \"${joint.name}\" names parent \"${joint.parent}\", which has not ` +\n 'been resolved. Skeleton.joints must be in topological order.',\n );\n }\n out.set(joint.name, mat3.multiply(parent, local));\n }\n return out;\n}\n","/** A joint's local transform. Deliberately NOT the scene's generic `TPose`:\n * `TPose` is consumer-defined and may be a bare AABB with no rotation term,\n * which a joint chain cannot compose through. */\nexport interface JointTransform {\n x: number;\n y: number;\n /** Radians. */\n rotation: number;\n scaleX: number;\n scaleY: number;\n}\n\n/** One joint of a `Skeleton`. */\nexport interface Joint {\n name: string;\n /** Parent joint name, or null for a root. */\n parent: string | null;\n /** Local transform at rest. */\n bind: JointTransform;\n}\n\n/** Joints in topological order: every joint appears after its parent. */\nexport interface Skeleton {\n joints: Joint[];\n}\n\n/** Local deltas from the bind pose, keyed by joint name. Absent joints and\n * absent fields mean \"no change from bind\". */\nexport type Pose = Record<string, Partial<JointTransform>>;\n\n/** The transform that changes nothing: origin, no rotation, unit scale. */\nexport const IDENTITY_JOINT: JointTransform = {\n x: 0, y: 0, rotation: 0, scaleX: 1, scaleY: 1,\n};\n","import { axisIndexes } from '../axisNames';\nimport type { TargetAxes } from '../target';\nimport { IDENTITY_JOINT, type JointTransform, type Pose, type Skeleton } from './types';\n\nconst FIELDS = ['x', 'y', 'rotation', 'scaleX', 'scaleY'] as const satisfies readonly (keyof JointTransform)[];\nconst ROTATION = FIELDS.indexOf('rotation');\n\n/** A name for each axis of `skeletonAxes(skeleton)`: `<joint>.<field>`. */\nfunction axisNames(skeleton: Skeleton): string[] {\n return skeleton.joints.flatMap((joint) => FIELDS.map((field) => `${joint.name}.${field}`));\n}\n\n/**\n * The axes of `skeletonAxes(skeleton)` that belong to `joints`, as indexes, for a caller with\n * a skeleton and no target. A hold or a track on a rig's target takes the joints' names\n * themselves: `animator.hold({ target: rig.target, value: pose, axes: arm })`.\n */\nexport function jointAxes(skeleton: Skeleton, joints: readonly string[]): number[] {\n const names = axisNames(skeleton);\n return axisIndexes({ count: names.length, names }, joints, 'jointAxes: `joints`');\n}\n\n/**\n * How a {@link Pose} of `skeleton` maps to the numbers an animation moves: five per joint in\n * skeleton order (`x`, `y`, `rotation`, `scaleX`, `scaleY`), every rotation an angle, so a pose\n * blends the short way round. Each axis is named `<joint>.<field>`, so `axes: ['knee']` on a hold\n * reaches a joint's five and `['knee.rotation']` one of them. A joint or field the pose leaves out reads as its identity, and a\n * pose read back names every joint in full. Pass it as `axes` to `createTarget` for a pose target\n * of your own; a bound rig's is `Rig.target`.\n */\nexport function skeletonAxes(skeleton: Skeleton): TargetAxes<Pose> {\n const names = skeleton.joints.map((j) => j.name);\n const n = FIELDS.length;\n return {\n count: names.length * n,\n angles: names.map((_, j) => j * n + ROTATION),\n names: axisNames(skeleton),\n to(pose) {\n const out = new Array<number>(names.length * n);\n for (let j = 0; j < names.length; j++) {\n const joint = pose[names[j]!];\n for (let f = 0; f < n; f++) out[j * n + f] = joint?.[FIELDS[f]!] ?? IDENTITY_JOINT[FIELDS[f]!];\n }\n return out;\n },\n add(pose, delta) {\n const out: Pose = {};\n for (let j = 0; j < names.length; j++) {\n const joint = pose[names[j]!];\n const at = j * n;\n out[names[j]!] = {\n x: (joint?.x ?? IDENTITY_JOINT.x) + delta[at]!,\n y: (joint?.y ?? IDENTITY_JOINT.y) + delta[at + 1]!,\n rotation: (joint?.rotation ?? IDENTITY_JOINT.rotation) + delta[at + 2]!,\n scaleX: (joint?.scaleX ?? IDENTITY_JOINT.scaleX) + delta[at + 3]!,\n scaleY: (joint?.scaleY ?? IDENTITY_JOINT.scaleY) + delta[at + 4]!,\n };\n }\n return out;\n },\n write(pose, out, at) {\n for (let j = 0; j < names.length; j++) {\n const joint = pose[names[j]!];\n for (let f = 0; f < n; f++) out[at + j * n + f] = joint?.[FIELDS[f]!] ?? IDENTITY_JOINT[FIELDS[f]!];\n }\n },\n from(axes) {\n const pose: Pose = {};\n for (let j = 0; j < names.length; j++) {\n const at = j * n;\n pose[names[j]!] = { x: axes[at]!, y: axes[at + 1]!, rotation: axes[at + 2]!, scaleX: axes[at + 3]!, scaleY: axes[at + 4]! };\n }\n return pose;\n },\n };\n}\n","import { mat3, type GlMat3 } from '@weasel-js/geom';\nimport { compose, resolveSkeleton, toMat3 } from './resolveSkeleton';\nimport type { Joint, Pose, Skeleton } from './types';\n\nconst TAU = Math.PI * 2;\n\n/** A point in the skeleton's space — the space `resolveSkeleton` resolves into. */\nexport interface IkPoint {\n x: number;\n y: number;\n}\n\n/** Bounds on a joint's rotation delta from its bind, in radians, with\n * `-PI <= min <= max <= PI`. */\nexport interface IkLimit {\n min: number;\n max: number;\n}\n\n/** Options for {@link solveIk}. */\nexport interface SolveIkOptions {\n /** The joints the solver may rotate, root first, each the parent of the next. */\n joints: readonly string[];\n /** The end effector, in the last joint's local frame — the forearm's length\n * along its +x for an arm, or a hand joint's bind offset. */\n tip: IkPoint;\n /** Where the tip should go, in skeleton space. A rig posed with a `root`\n * wants the target carried back through that root's inverse first. */\n target: IkPoint;\n /** Per-joint limits, keyed by joint name. A joint without one turns freely. */\n limits?: Readonly<Record<string, IkLimit>>;\n /** Two-joint chains only: the middle joint bends toward this point, in\n * skeleton space. Without it the chain keeps the bend the input pose has. */\n pole?: IkPoint;\n /** Most CCD sweeps to run. Default 32. */\n iterations?: number;\n /** Tip-to-target distance that counts as reached, in skeleton units.\n * Default 0.01. */\n tolerance?: number;\n}\n\n/** What {@link solveIk} returns. */\nexport interface IkResult {\n /** The input pose with each chain joint's rotation replaced. */\n pose: Pose;\n /** Tip-to-target distance the solve ended at. */\n distance: number;\n /** Whether `distance` is within the tolerance. False for a target out of\n * reach, which leaves the chain pointing straight at it. */\n reached: boolean;\n /** CCD sweeps run; 0 when the two-joint solution or the straight-line\n * answer for an unreachable target settled it. */\n iterations: number;\n}\n\nfunction wrap(a: number): number {\n return a - TAU * Math.round(a / TAU);\n}\n\n/** `v` held to `limit`, where out of range means the nearer bound around the circle. */\nfunction clampAngle(v: number, limit: IkLimit | undefined): number {\n if (!limit) return v;\n for (const c of [v, v - TAU, v + TAU]) if (c >= limit.min && c <= limit.max) return c;\n return Math.abs(wrap(v - limit.min)) <= Math.abs(wrap(v - limit.max)) ? limit.min : limit.max;\n}\n\nconst cross = (ax: number, ay: number, bx: number, by: number) => ax * by - ay * bx;\n\n/**\n * Rotate a joint chain so its tip reaches `target`, returning the result as an\n * ordinary {@link Pose}. Weighting the IK against an animated pose is\n * `animator.hold({ target: rig.target, value: solved, weight: w })` beside the\n * clip at weight `1 - w`; with `axes: jointAxes(skeleton, joints)` on both, the\n * rest of the body is left to whatever else holds it.\n *\n * The solver is cyclic coordinate descent, and limits clamp the rotation the\n * pose stores. A two-joint chain is solved analytically first: of the two bends\n * that reach the target it takes the one on `pole`'s side, or the input pose's\n * side, and falls back to the other bend and then to CCD when limits refuse it.\n * A target beyond the chain's reach straightens the chain toward it.\n */\nexport function solveIk(skeleton: Skeleton, pose: Pose, options: SolveIkOptions): IkResult {\n const { tip, target, limits } = options;\n const maxIterations = options.iterations ?? 32;\n const tolerance = options.tolerance ?? 0.01;\n\n const byName = new Map<string, Joint>();\n for (const joint of skeleton.joints) byName.set(joint.name, joint);\n const chain = options.joints.map((name, i) => {\n const joint = byName.get(name);\n if (!joint) throw new Error(`solveIk: the skeleton has no joint \"${name}\".`);\n if (i > 0 && joint.parent !== options.joints[i - 1]) {\n throw new Error(\n `solveIk: chain joint \"${name}\" names parent \"${joint.parent}\", not \"${options.joints[i - 1]}\". ` +\n 'Each chain joint must be the parent of the next.',\n );\n }\n return joint;\n });\n const n = chain.length;\n if (n === 0) return { pose: { ...pose }, distance: Infinity, reached: false, iterations: 0 };\n\n const rootParent = chain[0].parent;\n const base = rootParent == null ? mat3.identity() : resolveSkeleton(skeleton, pose).get(rootParent)!;\n const rot = chain.map((joint) => clampAngle(wrap(pose[joint.name]?.rotation ?? 0), limits?.[joint.name]));\n\n let worlds: GlMat3[] = [];\n const resolve = () => {\n worlds = [];\n let parent = base;\n for (let i = 0; i < n; i += 1) {\n const joint = chain[i];\n parent = mat3.multiply(parent, toMat3(compose(joint.bind, { ...pose[joint.name], rotation: rot[i] })));\n worlds.push(parent);\n }\n };\n const pivot = (i: number) => mat3.apply(worlds[i], 0, 0);\n const tipWorld = () => mat3.apply(worlds[n - 1], tip.x, tip.y);\n /** The point joint `i` swings: the next joint's pivot, or the tip. */\n const next = (i: number) => (i + 1 < n ? pivot(i + 1) : tipWorld());\n\n /** Turn joint `i` so `effector` lies on the ray toward `goal`. True when a\n * limit cut the turn short. */\n const aim = (i: number, effector: [number, number], goal: IkPoint): boolean => {\n const inv = mat3.invert(i === 0 ? base : worlds[i - 1]);\n if (!inv) return false;\n const [ox, oy] = mat3.apply(inv, ...pivot(i));\n const [ex, ey] = mat3.apply(inv, ...effector);\n const [gx, gy] = mat3.apply(inv, goal.x, goal.y);\n if (Math.hypot(ex - ox, ey - oy) < 1e-9 || Math.hypot(gx - ox, gy - oy) < 1e-9) return false;\n const want = wrap(rot[i] + Math.atan2(gy - oy, gx - ox) - Math.atan2(ey - oy, ex - ox));\n rot[i] = clampAngle(want, limits?.[chain[i].name]);\n resolve();\n return Math.abs(wrap(rot[i] - want)) > 1e-9;\n };\n\n const distance = () => {\n const [x, y] = tipWorld();\n return Math.hypot(x - target.x, y - target.y);\n };\n const result = (iterations: number): IkResult => {\n const out: Pose = { ...pose };\n chain.forEach((joint, i) => { out[joint.name] = { ...pose[joint.name], rotation: rot[i] }; });\n const d = distance();\n return { pose: out, distance: d, reached: d <= tolerance, iterations };\n };\n\n resolve();\n const [rx, ry] = pivot(0);\n let reach = 0;\n for (let i = 0; i < n; i += 1) {\n const [ax, ay] = pivot(i);\n const [bx, by] = next(i);\n reach += Math.hypot(bx - ax, by - ay);\n }\n const toTarget = Math.hypot(target.x - rx, target.y - ry);\n\n if (toTarget >= reach) {\n for (let i = 0; i < n; i += 1) aim(i, next(i), target);\n return result(0);\n }\n\n if (n === 2 && toTarget > 1e-9) {\n const start = rot.slice();\n const [mx, my] = pivot(1);\n const [tx, ty] = tipWorld();\n const a = Math.hypot(mx - rx, my - ry);\n const b = Math.hypot(tx - mx, ty - my);\n const dx = target.x - rx;\n const dy = target.y - ry;\n const bendSide = options.pole\n ? cross(dx, dy, options.pole.x - rx, options.pole.y - ry)\n : cross(dx, dy, mx - rx, my - ry);\n const side = bendSide < 0 ? -1 : 1;\n const inner = Math.acos(Math.max(-1, Math.min(1, (a * a + toTarget * toTarget - b * b) / (2 * a * toTarget))));\n const heading = Math.atan2(dy, dx);\n\n const bend = (s: number): boolean => {\n rot.splice(0, 2, ...start);\n resolve();\n const elbow = { x: rx + a * Math.cos(heading + s * inner), y: ry + a * Math.sin(heading + s * inner) };\n const cut = aim(0, pivot(1), elbow);\n return aim(1, tipWorld(), target) || cut;\n };\n if (!bend(side) || !bend(-side)) {\n if (distance() <= tolerance) return result(0);\n } else {\n bend(side);\n }\n }\n\n let iterations = 0;\n while (iterations < maxIterations && distance() > tolerance) {\n for (let i = n - 1; i >= 0; i -= 1) aim(i, tipWorld(), target);\n iterations += 1;\n }\n return result(iterations);\n}\n","import { mat3, PATH_L, PATH_M, PATH_Z, type GlMat3, type Path, type PolygonPath } from '@weasel-js/geom';\nimport { resolveSkeleton } from './resolveSkeleton';\nimport type { Skeleton } from './types';\n\n/**\n * How much each point of a path follows each joint: one array per joint name, indexed by\n * point. Point `i` is the `i`-th coordinate pair of a polygon path's `coords`, so anchors and\n * curve handles are weighted alike; a rect's points are its corners, clockwise from the top\n * left. A joint left out, and an index past an array's end, weigh nothing. Weights need not\n * sum to 1: they are normalized per point as they are applied.\n */\nexport type Skin = Readonly<Record<string, readonly number[]>>;\n\n/**\n * Each joint's motion since the bind pose, in world space: `world * inverse(restWorld)`.\n * `world` is what `resolveSkeleton` or `Rig.world()` answers.\n */\nexport function motionsFromRest(\n skeleton: Skeleton,\n world: ReadonlyMap<string, GlMat3>,\n): Map<string, GlMat3> {\n const rest = resolveSkeleton(skeleton, {});\n const out = new Map<string, GlMat3>();\n for (const [name, r] of rest) {\n const inverse = mat3.invert(r);\n if (!inverse) throw new Error(`motionsFromRest: joint \"${name}\" is singular at the bind pose.`);\n const w = world.get(name);\n if (w) out.set(name, mat3.multiply(w, inverse));\n }\n return out;\n}\n\nconst RECT_COMMANDS = new Uint8Array([PATH_M, PATH_L, PATH_L, PATH_L, PATH_Z]);\n\n/** The path whose points a skin indexes: a rect as its four corners. */\nexport function skinnable(path: Path): PolygonPath {\n if (path.kind === 'polygon') return path;\n const { x, y, width, height } = path;\n return {\n kind: 'polygon',\n commands: RECT_COMMANDS,\n coords: new Float32Array([x, y, x + width, y, x + width, y + height, x, y + height]),\n fillRule: 'nonzero',\n };\n}\n\n/**\n * Bend `path` by linear blend skinning: each point goes where its joints' motions since the\n * bind pose would carry it, averaged by weight. `path` is the shape at the bind pose, in the\n * space `motions` are in; it is not modified. A point no joint weighs stays where it is.\n */\nexport function skinPath(path: Path, skin: Skin, motions: ReadonlyMap<string, GlMat3>): PolygonPath {\n const rest = skinnable(path);\n const from = rest.coords;\n const count = from.length >> 1;\n const sum = new Float64Array(from.length);\n const total = new Float64Array(count);\n for (const joint in skin) {\n const m = motions.get(joint);\n if (!m) throw new Error(`skinPath: the skin weighs joint \"${joint}\", which has no motion.`);\n const weights = skin[joint];\n const n = Math.min(count, weights.length);\n for (let i = 0; i < n; i++) {\n const w = weights[i];\n if (!(w > 0)) continue;\n const x = from[2 * i];\n const y = from[2 * i + 1];\n sum[2 * i] += w * (m[0] * x + m[3] * y + m[6]);\n sum[2 * i + 1] += w * (m[1] * x + m[4] * y + m[7]);\n total[i] += w;\n }\n }\n const coords = new Float32Array(from.length);\n for (let i = 0; i < count; i++) {\n const t = total[i];\n coords[2 * i] = t > 0 ? sum[2 * i] / t : from[2 * i];\n coords[2 * i + 1] = t > 0 ? sum[2 * i + 1] / t : from[2 * i + 1];\n }\n return { ...rest, coords };\n}\n","import { mat3, type Path } from '@weasel-js/geom';\nimport { resolveSkeleton } from './resolveSkeleton';\nimport { skinnable, type Skin } from './skin';\nimport type { Skeleton } from './types';\n\n/** Options for `autoSkin`. */\nexport interface AutoSkinOptions {\n /** How fast a bone's pull falls off with distance: a weight is `1 / distance ** power`.\n * Higher keeps the bend closer to the joint. Default 4. */\n power?: number;\n /** The most joints a point follows; the nearest are kept. Default 2. */\n max?: number;\n}\n\ninterface Bone {\n joint: string;\n /** Flat `x0, y0, x1, y1` per segment, from the joint to each of its children. */\n segments: number[];\n}\n\nfunction distanceToSegment(px: number, py: number, ax: number, ay: number, bx: number, by: number): number {\n const dx = bx - ax;\n const dy = by - ay;\n const len2 = dx * dx + dy * dy;\n const t = len2 > 0 ? Math.min(1, Math.max(0, ((px - ax) * dx + (py - ay) * dy) / len2)) : 0;\n return Math.hypot(px - (ax + t * dx), py - (ay + t * dy));\n}\n\n/** A joint's bones run to its children. A joint with no child has none, being where its\n * parent's bone ends, unless it has no parent either. */\nfunction bonesOf(skeleton: Skeleton): Bone[] {\n const world = resolveSkeleton(skeleton, {});\n const at = new Map<string, [number, number]>();\n for (const [name, m] of world) at.set(name, mat3.apply(m, 0, 0));\n const bones = new Map<string, Bone>();\n for (const joint of skeleton.joints) {\n if (joint.parent == null) continue;\n let bone = bones.get(joint.parent);\n if (!bone) {\n bone = { joint: joint.parent, segments: [] };\n bones.set(joint.parent, bone);\n }\n bone.segments.push(...at.get(joint.parent)!, ...at.get(joint.name)!);\n }\n for (const joint of skeleton.joints) {\n if (joint.parent != null || bones.has(joint.name)) continue;\n const [x, y] = at.get(joint.name)!;\n bones.set(joint.name, { joint: joint.name, segments: [x, y, x, y] });\n }\n // Skeleton order, so a tie between bones goes to the one nearer the root.\n return skeleton.joints.flatMap((joint) => bones.get(joint.name) ?? []);\n}\n\n/**\n * Weights for `path` from how far each of its points is from each bone of `skeleton` at the\n * bind pose. `path` is in the skeleton's space. A point on a bone follows that bone alone.\n */\nexport function autoSkin(path: Path, skeleton: Skeleton, options: AutoSkinOptions = {}): Skin {\n const power = options.power ?? 4;\n const max = Math.max(1, options.max ?? 2);\n const bones = bonesOf(skeleton);\n const coords = skinnable(path).coords;\n const count = coords.length >> 1;\n const out = new Map<string, number[]>();\n const distance = new Float64Array(bones.length);\n const order = bones.map((_, b) => b);\n\n for (let i = 0; i < count; i++) {\n const px = coords[2 * i];\n const py = coords[2 * i + 1];\n for (let b = 0; b < bones.length; b++) {\n const s = bones[b].segments;\n let d = Infinity;\n for (let k = 0; k < s.length; k += 4) d = Math.min(d, distanceToSegment(px, py, s[k], s[k + 1], s[k + 2], s[k + 3]));\n distance[b] = d;\n }\n order.sort((a, b) => distance[a] - distance[b] || a - b);\n const kept = order.slice(0, max);\n const nearest = distance[kept[0]];\n let total = 0;\n const raw = kept.map((b) => {\n const w = nearest === 0 ? (distance[b] === 0 ? 1 : 0) : (nearest / distance[b]) ** power;\n total += w;\n return w;\n });\n kept.forEach((b, k) => {\n if (raw[k] === 0) return;\n let weights = out.get(bones[b].joint);\n if (!weights) {\n weights = new Array<number>(count).fill(0);\n out.set(bones[b].joint, weights);\n }\n weights[i] = raw[k] / total;\n });\n }\n return Object.fromEntries(out);\n}\n","import { mat3 } from '@weasel-js/geom';\nimport { resolveSkeleton } from './resolveSkeleton';\nimport type { Skin } from './skin';\nimport { IDENTITY_JOINT, type Joint, type Skeleton } from './types';\n\n/** Where each joint rests, in the skeleton's space and in its order. */\nexport function jointPositions(skeleton: Skeleton): Map<string, { x: number; y: number }> {\n const out = new Map<string, { x: number; y: number }>();\n for (const [name, m] of resolveSkeleton(skeleton, {})) {\n const [x, y] = mat3.apply(m, 0, 0);\n out.set(name, { x, y });\n }\n return out;\n}\n\n/** The joint resting nearest `(x, y)` and no further than `reach` from it, or `null`. */\nexport function jointAt(skeleton: Skeleton, x: number, y: number, reach: number): string | null {\n let best: string | null = null;\n let bestD = reach;\n for (const [name, p] of jointPositions(skeleton)) {\n const d = Math.hypot(p.x - x, p.y - y);\n if (d <= bestD) {\n best = name;\n bestD = d;\n }\n }\n return best;\n}\n\n/** `(x, y)` in the frame `parent`'s children are placed in. */\nfunction inParent(skeleton: Skeleton, parent: string | null, x: number, y: number): [number, number] {\n if (parent == null) return [x, y];\n const world = resolveSkeleton(skeleton, {}).get(parent);\n if (!world) throw new Error(`The skeleton has no joint \"${parent}\".`);\n const inverse = mat3.invert(world);\n if (!inverse) throw new Error(`Joint \"${parent}\" is singular at the bind pose.`);\n return mat3.apply(inverse, x, y);\n}\n\n/** `skeleton` with `name` resting at `(x, y)`. The joints under it keep their offsets from it,\n * so they move along. */\nexport function moveJoint(skeleton: Skeleton, name: string, x: number, y: number): Skeleton {\n const joint = skeleton.joints.find((j) => j.name === name);\n if (!joint) throw new Error(`moveJoint: the skeleton has no joint \"${name}\".`);\n const [lx, ly] = inParent(skeleton, joint.parent, x, y);\n return {\n joints: skeleton.joints.map((j) => (j === joint ? { ...j, bind: { ...j.bind, x: lx, y: ly } } : j)),\n };\n}\n\n/** `skeleton` with a new joint resting at `(x, y)` under `parent`, or as a root for `null`.\n * Without a `name` it gets the first of `joint`, `joint2`, … not in use. */\nexport function addJoint(\n skeleton: Skeleton,\n parent: string | null,\n x: number,\n y: number,\n name?: string,\n): { skeleton: Skeleton; name: string } {\n const taken = new Set(skeleton.joints.map((j) => j.name));\n let picked = name;\n if (picked === undefined) {\n picked = 'joint';\n for (let n = 2; taken.has(picked); n++) picked = `joint${n}`;\n } else if (taken.has(picked)) {\n throw new Error(`addJoint: the skeleton already has a joint \"${picked}\".`);\n }\n const [lx, ly] = inParent(skeleton, parent, x, y);\n const joint: Joint = { name: picked, parent, bind: { ...IDENTITY_JOINT, x: lx, y: ly } };\n return { skeleton: { joints: [...skeleton.joints, joint] }, name: picked };\n}\n\n/** `skeleton` without `name` and the joints under it, and the names that went. */\nexport function removeJoint(skeleton: Skeleton, name: string): { skeleton: Skeleton; removed: string[] } {\n const gone = new Set([name]);\n // Topological order: a joint's parent is decided before it is reached.\n for (const j of skeleton.joints) if (j.parent != null && gone.has(j.parent)) gone.add(j.name);\n const removed = skeleton.joints.filter((j) => gone.has(j.name)).map((j) => j.name);\n return { skeleton: { joints: skeleton.joints.filter((j) => !gone.has(j.name)) }, removed };\n}\n\n/** `skin` without the weights of `joints`; the same object when it weighs none of them. */\nexport function dropSkinJoints(skin: Skin, joints: readonly string[]): Skin {\n if (!joints.some((j) => j in skin)) return skin;\n const out: Record<string, readonly number[]> = {};\n for (const j in skin) if (!joints.includes(j)) out[j] = skin[j];\n return out;\n}\n","import type { Skin } from './skin';\n\n/**\n * `skin` with `joint`'s weight set on some points: `weights` maps a point's index to the new\n * weight, clamped to 0..1. On each of those points the other joints are scaled to share what\n * is left, so the point still sums to 1; a point no other joint weighs goes wholly to `joint`,\n * as it would when the skin is applied. Every array comes back `count` long, and a joint left\n * weighing nothing is dropped.\n */\nexport function setWeights(\n skin: Skin,\n count: number,\n joint: string,\n weights: ReadonlyMap<number, number>,\n): Skin {\n const next: Record<string, number[]> = {};\n for (const name in skin) next[name] = Array.from({ length: count }, (_, i) => skin[name][i] ?? 0);\n const own = (next[joint] ??= new Array<number>(count).fill(0));\n for (const [i, raw] of weights) {\n if (i < 0 || i >= count) continue;\n const w = Math.min(1, Math.max(0, raw));\n let others = 0;\n for (const name in next) if (name !== joint) others += next[name][i];\n if (others > 0) {\n for (const name in next) if (name !== joint) next[name][i] *= (1 - w) / others;\n own[i] = w;\n } else {\n own[i] = w > 0 ? 1 : 0;\n }\n }\n for (const name in next) if (!next[name].some((w) => w > 0)) delete next[name];\n return next;\n}\n\n/**\n * What a round brush at `(x, y)` does to one joint's weights: for each point of `coords`\n * within `radius`, a weight falling off linearly from the center. `'add'` raises a point\n * toward 1 and `'remove'` lowers it toward 0; neither moves a point the other way. Answers\n * only the points that change, by index, for {@link setWeights}.\n */\nexport function brushWeights(\n coords: ArrayLike<number>,\n x: number,\n y: number,\n radius: number,\n current: readonly number[] | undefined,\n mode: 'add' | 'remove',\n): Map<number, number> {\n const out = new Map<number, number>();\n for (let i = 0; 2 * i + 1 < coords.length; i++) {\n const d = Math.hypot(coords[2 * i] - x, coords[2 * i + 1] - y);\n if (d >= radius) continue;\n const had = current?.[i] ?? 0;\n const want = mode === 'add' ? Math.max(had, 1 - d / radius) : Math.min(had, d / radius);\n if (want !== had) out.set(i, want);\n }\n return out;\n}\n"]}
1
+ {"version":3,"sources":["../src/axisNames.ts","../src/engine/axes.ts","../src/target.ts","../src/targetTable.ts","../src/colorRegistry.ts","../src/observe.ts","../src/loop.ts","../src/stagger.ts","../src/supervisor.ts","../src/timeline/booking.ts","../src/timeline/fireEvents.ts","../src/engine/offsets.ts","../src/timeline/targetStops.ts","../src/timeline/sampleTrack.ts","../src/timeline/trackHolds.ts","../src/timeline/createTimeline.ts","../src/engine/decay.ts","../src/engine/holds.ts","../src/engine/holdAnimation.ts","../src/engine/integrator.ts","../src/engine/physicsAnimation.ts","../src/engine/springRest.ts","../src/engine/springVoices.ts","../src/engine/offsetPhysics.ts","../src/engine/offsetTween.ts","../src/engine/completions.ts","../src/engine/wakes.ts","../src/engine/schedule.ts","../src/engine/roster.ts","../src/engine/table.ts","../src/engine/tweenAnimation.ts","../src/engine/animatorApi.ts","../src/engine/holdVoices.ts","../src/engine/lanes.ts","../src/engine/codec.ts","../src/engine/frame.ts","../src/engine/core.ts","../src/useAnimator.ts","../src/slew.ts","../src/colorInterpolate.ts","../src/colorHelpers.ts","../src/colorCycle.ts","../src/colorArrays.ts","../src/timeline/clip.ts","../src/rig/mirrorPose.ts","../src/rig/resolveSkeleton.ts","../src/rig/types.ts","../src/rig/skeletonAxes.ts","../src/rig/solveIk.ts","../src/rig/skin.ts","../src/rig/autoSkin.ts","../src/rig/skeletonEdits.ts","../src/rig/weightEdits.ts"],"names":["states","keys","axes","keysPatch","createEmitter","sum","group","resolveEasing","share","easeOut","stale","tweenPatch","fnPatch","settle","springPatch","patch","table","TAU","mat3","iterations"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * What an axis of a `T` goes by: a field of a plain object, or a path into a nested one, as a\n * pose's `knee` and `knee.rotation` are. `never` for a number or an array, whose axes have\n * indexes only.\n */\nexport type AxisName<T> = T extends number | readonly unknown[]\n ? never\n : T extends object\n ? { [K in keyof T & string]: NonNullable<T[K]> extends number ? K : K | `${K}.${string}` }[keyof T & string]\n : string;\n\n/** One of a target's axes: its index, or its name where the target's axes have names. */\nexport type AxisRef<T = unknown> = number | AxisName<T>;\n\nconst LISTED = 8;\n\n/**\n * The indexes `wanted` stands for among `count` axes named `names`. A name answers the axis\n * called exactly that, or every axis under it as a path, in axis order. `what` opens the error\n * for an index out of range or a name nothing answers to.\n */\nexport function axisIndexes(\n axes: { readonly count: number; readonly names?: readonly string[] },\n wanted: readonly (number | string)[],\n what = 'animator: `axes`',\n): number[] {\n const { count, names } = axes;\n const out: number[] = [];\n for (const w of wanted) {\n if (typeof w === 'number') {\n if (!Number.isInteger(w) || w < 0 || w >= count) throw new Error(`${what} names axis ${w} of a target with ${count}`);\n out.push(w);\n continue;\n }\n if (!names) throw new Error(`${what} names \"${w}\" on a target whose axes have no names`);\n const before = out.length;\n const under = `${w}.`;\n for (let i = 0; i < names.length; i++) {\n if (names[i] === w || names[i]!.startsWith(under)) out.push(i);\n }\n if (out.length === before) {\n const some = names.slice(0, LISTED).map((n) => `\"${n}\"`).join(', ');\n throw new Error(`${what} names \"${w}\", and the target's axes are ${some}${names.length > LISTED ? ', …' : ''}`);\n }\n }\n return out;\n}\n","import { isPlainObject } from '@weasel-js/registry';\n\n/** How a value maps to the flat numbers blits moves, and back. */\nexport interface Axes<T> {\n count: number;\n /** Equal for two values exactly when their axes line up one for one. */\n shape: string;\n /** A name for each axis where the value has them: a plain object's fields. */\n names?: readonly string[];\n to(v: T): number[];\n /** The value whose `count` axes start at `at` in `a`. */\n from(a: ArrayLike<number>, at?: number): T;\n /** `v` with `delta` added axis by axis. */\n add(v: T, delta: ArrayLike<number>): T;\n /** Puts `v`'s axes into `out` from `at`. */\n write(v: T, out: Float64Array | Float32Array | number[], at: number): void;\n}\n\ntype Fields = Record<string, number>;\ntype Buffer = Float64Array | Float32Array | number[];\n\n/**\n * `add` and `write` for an object of up to four fields, each field read where the code names\n * it. A loop over the keys reads every field at one place, and a place that sees a second key\n * falls back to a lookup several times slower: 10k reads of `{ x, y }` took 1.4 ms through the\n * loop and 0.9 ms through hand-written axes.\n */\nfunction fieldByField(keys: readonly string[]): { add(v: Fields, d: ArrayLike<number>): Fields; write(v: Fields, o: Buffer, at: number): void } | null {\n const [a, b, c, e] = keys as [string, string, string, string];\n switch (keys.length) {\n case 1: return {\n add: (v, d) => ({ [a]: v[a]! + d[0]! }),\n write: (v, o, at) => { o[at] = v[a]!; },\n };\n case 2: return {\n add: (v, d) => ({ [a]: v[a]! + d[0]!, [b]: v[b]! + d[1]! }),\n write: (v, o, at) => { o[at] = v[a]!; o[at + 1] = v[b]!; },\n };\n case 3: return {\n add: (v, d) => ({ [a]: v[a]! + d[0]!, [b]: v[b]! + d[1]!, [c]: v[c]! + d[2]! }),\n write: (v, o, at) => { o[at] = v[a]!; o[at + 1] = v[b]!; o[at + 2] = v[c]!; },\n };\n case 4: return {\n add: (v, d) => ({ [a]: v[a]! + d[0]!, [b]: v[b]! + d[1]!, [c]: v[c]! + d[2]!, [e]: v[e]! + d[3]! }),\n write: (v, o, at) => { o[at] = v[a]!; o[at + 1] = v[b]!; o[at + 2] = v[c]!; o[at + 3] = v[e]!; },\n };\n default: return null;\n }\n}\n\n/** The axes of `sample`'s shape: a number, a plain array of numbers, or a plain object whose\n * fields are all numbers. Null for any other shape, which blits cannot move. */\nexport function axesOf<T>(sample: T): Axes<T> | null {\n if (typeof sample === 'number') {\n return {\n count: 1,\n shape: 'number',\n to: (v) => [v as number],\n from: (a, at = 0) => a[at] as T,\n add: (v, delta) => ((v as number) + delta[0]!) as T,\n write: (v, out, at) => { out[at] = v as number; },\n };\n }\n if (Array.isArray(sample)) {\n if (!sample.every((x) => typeof x === 'number')) return null;\n return {\n count: sample.length,\n shape: `array:${sample.length}`,\n to: (v) => (v as number[]).slice(),\n from: (a, at = 0) => {\n const out = new Array<number>(sample.length);\n for (let i = 0; i < out.length; i++) out[i] = a[at + i]!;\n return out as T;\n },\n add: (v, delta) => {\n const out = new Array<number>(sample.length);\n for (let i = 0; i < out.length; i++) out[i] = (v as number[])[i]! + delta[i]!;\n return out as T;\n },\n write: (v, out, at) => {\n for (let i = 0; i < sample.length; i++) out[at + i] = (v as number[])[i]!;\n },\n };\n }\n if (!isPlainObject(sample)) return null;\n const keys = Object.keys(sample).sort();\n if (keys.length === 0 || !keys.every((k) => typeof sample[k] === 'number')) return null;\n return {\n count: keys.length,\n shape: `object:${JSON.stringify(keys)}`,\n names: keys,\n to: (v) => keys.map((k) => (v as Record<string, number>)[k]!),\n from: (a, at = 0) => {\n const out: Record<string, number> = {};\n for (let i = 0; i < keys.length; i++) out[keys[i]!] = a[at + i]!;\n return out as T;\n },\n ...(fieldByField(keys) ?? {\n add: (v: Fields, delta: ArrayLike<number>) => {\n const out: Fields = {};\n for (let i = 0; i < keys.length; i++) out[keys[i]!] = v[keys[i]!]! + delta[i]!;\n return out;\n },\n write: (v: Fields, out: Buffer, at: number) => {\n for (let i = 0; i < keys.length; i++) out[at + i] = v[keys[i]!]!;\n },\n }) as unknown as Pick<Axes<T>, 'add' | 'write'>,\n };\n}\n","import { axisIndexes, type AxisRef } from './axisNames';\nimport { axesOf } from './engine/axes';\nimport type { LaneColumns, Reader } from './engine/lanes';\n\n/** How a target's value maps to the flat numbers an animation moves, and back. */\nexport interface TargetAxes<T> {\n count: number;\n to(value: T): number[];\n from(axes: ArrayLike<number>): T;\n /** Indexes of axes that are angles in radians. An animation starting from one takes the short\n * way round to its destination. */\n angles?: readonly number[];\n /** A name for each axis, in the order `to` answers them, for `axes` options to go by. A dot\n * makes a path: `knee.rotation` is also reached as `knee`, with the joint's other axes. */\n names?: readonly string[];\n /** Optional. `value` with `delta` added axis by axis: what `from` answers for `to(value)`\n * plus `delta`, built with no array between. A read of a moving target goes through it. */\n add?(value: T, delta: ArrayLike<number>): T;\n /** Optional. Puts `value`'s axes into `out` from `at`: what `to` answers, with no array\n * built. `readInto` goes through it. */\n write?(value: T, out: AxisBuffer, at: number): void;\n}\n\n/** Somewhere a target's axes are written as numbers. */\nexport type AxisBuffer = Float64Array | Float32Array | number[];\n\n/** What {@link createTarget} takes. */\nexport interface TargetOptions<T> {\n /** The committed value: what shows when nothing is animating. */\n get(): T;\n /** Commits a value: an animation's destination as it starts, and where a canceled one stopped. */\n set(value: T): void;\n /** How `T` maps to numbers. Default: a number, an array of numbers, or a plain object whose\n * fields are all numbers, read from `get()` when the target is made. */\n axes?: TargetAxes<T>;\n /** Called once a frame, after the frame's animations, with the value to show: on every frame\n * the target is moving, as an animation starts on it or is redirected, and once more as it\n * comes to rest. Omit for a target whose reader\n * calls `read()` itself. */\n show?(value: T): void;\n /** Called once a frame, after every target that was shown that frame: for a table that\n * publishes many targets at once. Targets passing the same function share one call. */\n publish?(): void;\n}\n\n/**\n * One value an animator can move. Pass it as `target` to `tween`, `spring`, `physics` or `decay`.\n *\n * An animation on a target commits its destination when it starts and contributes only what is\n * left to travel, so several on one target add: a second started mid-flight bends the motion\n * toward its own destination and neither cancels the other.\n */\nexport interface Target<T> {\n /** The value to show: the committed value plus what every running animation has left to travel. */\n read(): T;\n /**\n * As `read`, as numbers: writes the value's `axisCount` axes into `out` from `at` (default 0),\n * in the order the target's `axes.to` answers them. For a reader of many targets that wants\n * the numbers and no value built for each.\n */\n readInto(out: AxisBuffer, at?: number): void;\n /** How many axes `readInto` writes. */\n readonly axisCount: number;\n /** How its value maps to numbers. */\n readonly axes: TargetAxes<T>;\n /**\n * The indexes of the axes `axes` names, in the order named: what a hold's or a track's `axes`\n * resolves through. A name is one of `axes.names`, or a path over several of them; an index\n * passes through. Throws on a name or an index the target has no axis for.\n */\n axisIndexes(axes: readonly AxisRef<T>[]): number[];\n /** The committed value: what shows once nothing is moving it. */\n committed(): T;\n /** Writes the committed value. Animations moving the target go on adding to the new one. */\n commit(value: T): void;\n /** Whether any animation is moving it. */\n readonly active: boolean;\n /**\n * Stops every animation moving it. Each commits where it was, so the value on screen stays,\n * unless `commit` is false: then the committed value is left as it stands and the target\n * shows it. Pass false after something else has written the committed value mid-flight.\n */\n stop(opts?: { commit?: boolean }): void;\n}\n\n/** The animator moving a target, as the target reaches it. */\nexport interface TargetOwner {\n /** Cancels every animation on `s`. */\n stop(s: TargetState): void;\n /** Reads `s`'s voices again now, where what they read from outside has changed. */\n reread(s: TargetState): void;\n /** The voices of `table`'s rows as the last frame read them; null where none is moving. */\n columns(table: RowTable): LaneColumns | null;\n /** Says `s.adjust` holds something, for the next frame's reading to clear. */\n adjusted(s: TargetState): void;\n}\n\n/** What an animator needs of a table of targets, to show its rows in one pass. */\nexport interface RowTable {\n /** Says row `index` shows something the pass over the table's columns will not give: an\n * animation started, stopped, or was redirected since the last frame, or it has a hold. */\n mark(index: number): void;\n /** Called once a frame's voices are read: a mark that reading took in is dropped. */\n settle(): void;\n /** Fills every moving row's value on screen from `columns`. */\n fill(columns: LaneColumns | null): void;\n}\n\n/** An animation's share in moving a target's committed value, which its holds stand in front of. */\nexport interface Behind {\n /** What is left of the move its destination made in the committed value. */\n left(): readonly number[];\n /** The share of that still to show, per axis, once a hold released over it has committed what\n * showed; null for all of it. */\n kept: number[] | null;\n}\n\n/** What an animator keeps on a target it is moving. */\nexport interface TargetState<T = unknown> {\n readonly get: () => T;\n readonly set: (value: T) => void;\n readonly show: ((value: T) => void) | undefined;\n readonly publish: (() => void) | undefined;\n readonly axes: TargetAxes<T>;\n /** Writes the committed value's axes into `out` from `at` with no value built, for a target\n * that keeps them as numbers already; null where `get` and `axes` are the way. */\n write: ((out: AxisBuffer, at: number) => void) | null;\n /** The animator moving it, by its own token; null while none is. */\n owner: TargetOwner | null;\n /** True while its animations are being stopped without committing where they were. */\n discard: boolean;\n /** The committed value's axes as its holds last read them; null while it has none. A hold\n * answers how far its value is from the committed one, so it is stale once that moves. */\n heldAt: number[] | null;\n /** How many holds stand in for its committed value. */\n held: number;\n /** The share of each axis those holds cover, 0 to 1, as they last read; null beside `heldAt`. */\n cover: number[] | null;\n /** The animations with a destination on it. A destination moves the committed value at once\n * and the animation shows what is left of that move, so a hold covers it as it covers the\n * committed value. */\n behind: Set<Behind>;\n /** Whether any of `behind` has a `kept`. */\n dimmed: boolean;\n /** What animations stopped under those holds were showing on top of them: how far a coast\n * had gone, or what was left of a `from` away from the committed value. It waits here, on\n * screen, until the holds go or an animation with a destination takes it up. */\n beside: number[] | null;\n /** Its place in a table of targets, for a row of one. */\n row: { readonly table: RowTable; readonly index: number } | null;\n /** How many animations are moving it. */\n live: number;\n /** The sum of their offsets as the last frame read it. */\n slot: Reader | null;\n /** What that sum has changed by since: animations started, stopped or redirected. */\n adjust: number[];\n /** Whether its owner has been told `adjust` holds something. */\n stale: boolean;\n}\n\nconst states = new WeakMap<object, TargetState>();\n\n/** Where a read gathers what a target's animations add, on the way to `axes.add`. */\nlet scratch = new Float64Array(16);\n\n/** What `s`'s holds, and holds released over it, hide of its animations; null where none. */\nfunction hidden<T>(s: TargetState<T>): number[] | null {\n const { cover } = s;\n if (s.behind.size === 0 || (!cover && !s.dimmed)) return null;\n const out = new Array<number>(s.axes.count).fill(0);\n for (const b of s.behind) {\n const left = b.left();\n for (let i = 0; i < out.length; i++) {\n const shows = (cover ? 1 - cover[i]! : 1) * (b.kept ? b.kept[i]! : 1);\n out[i] = out[i]! + left[i]! * (1 - shows);\n }\n }\n return out;\n}\n\n/** Puts `s`'s committed value's axes into `out` from `at`. */\nexport function committedInto<T>(s: TargetState<T>, out: AxisBuffer, at: number): void {\n if (s.write) s.write(out, at);\n else if (s.axes.write) s.axes.write(s.get(), out, at);\n else {\n const a = s.axes.to(s.get());\n for (let i = 0; i < a.length; i++) out[at + i] = a[i]!;\n }\n}\n\n/** `committed`'s axes, with `s`'s holds read again where it has moved under them. */\nfunction heldAxes<T>(s: TargetState<T>, committed: T): number[] {\n const a = s.axes.to(committed);\n if (s.heldAt && a.some((x, i) => x !== s.heldAt![i])) s.owner?.reread(s as unknown as TargetState);\n return a;\n}\n\n// Each read below keeps a loop of its own over one kind of array: one loop shared between a\n// plain array and a typed one measured slower than building the array it was there to save.\n\n/** The value `s` shows now. */\nexport function readTarget<T>(s: TargetState<T>): T {\n const committed = s.get();\n if (s.live === 0) return committed;\n const { axes, slot, beside, adjust } = s;\n // A hold answers how far it is from the committed value, which takes that value's axes to check.\n if (!axes.add || s.heldAt || s.dimmed) {\n const a = heldAxes(s, committed);\n const hid = hidden(s);\n for (let i = 0; i < a.length; i++) {\n a[i] = a[i]! + (slot ? slot.cols[slot.at + i]! : 0) + adjust[i]! + (beside ? beside[i]! : 0)\n - (hid ? hid[i]! : 0);\n }\n return axes.from(a);\n }\n const n = axes.count;\n if (scratch.length < n) scratch = new Float64Array(n);\n const d = scratch;\n for (let i = 0; i < n; i++) {\n d[i] = (slot ? slot.cols[slot.at + i]! : 0) + adjust[i]! + (beside ? beside[i]! : 0);\n }\n return axes.add(committed, d);\n}\n\n/** The value `s` shows now, as its axes, in `out` from `at`. */\nexport function readTargetInto<T>(s: TargetState<T>, out: AxisBuffer, at: number): void {\n const committed = s.get();\n const { axes, slot, beside, adjust } = s;\n const moving = s.live > 0;\n if (axes.write && !(moving && s.heldAt)) axes.write(committed, out, at);\n else {\n const a = moving ? heldAxes(s, committed) : axes.to(committed);\n for (let i = 0; i < a.length; i++) out[at + i] = a[i]!;\n }\n if (!moving) return;\n const hid = hidden(s);\n for (let i = 0; i < axes.count; i++) {\n out[at + i] = out[at + i]! + (slot ? slot.cols[slot.at + i]! : 0) + adjust[i]! + (beside ? beside[i]! : 0)\n - (hid ? hid[i]! : 0);\n }\n}\n\n/** Whether `x` is a target `createTarget` made. */\nexport function isTarget(x: unknown): x is Target<unknown> {\n return typeof x === 'object' && x !== null && states.has(x);\n}\n\n/** The state behind a target `createTarget` made. */\nexport function stateOf<T>(target: Target<T>): TargetState<T> {\n const s = states.get(target);\n if (!s) throw new Error('animator: `target` was not made by createTarget');\n return s as unknown as TargetState<T>;\n}\n\n/** Make a {@link Target} over a value the caller owns. */\nexport function createTarget<T>(opts: TargetOptions<T>): Target<T> {\n const axes = opts.axes ?? (axesOf(opts.get()) as TargetAxes<T> | null);\n if (!axes) {\n throw new Error('createTarget: `axes` is required for a value that is not a number, an array of numbers, or an object of numeric fields');\n }\n const s: TargetState<T> = {\n get: opts.get,\n set: opts.set,\n show: opts.show,\n publish: opts.publish,\n axes,\n write: null,\n owner: null,\n discard: false,\n heldAt: null,\n held: 0,\n cover: null,\n behind: new Set(),\n dimmed: false,\n beside: null,\n row: null,\n live: 0,\n slot: null,\n adjust: new Array<number>(axes.count).fill(0),\n stale: false,\n };\n const target: Target<T> = {\n read: () => readTarget(s),\n readInto: (out, at = 0) => readTargetInto(s, out, at),\n axisCount: axes.count,\n axes,\n axisIndexes: (wanted) => axisIndexes(axes, wanted),\n committed: opts.get,\n commit: opts.set,\n get active() { return s.live > 0; },\n stop(o) {\n const owner = s.owner;\n if (!owner) return;\n s.discard = o?.commit === false;\n try { owner.stop(s as unknown as TargetState); } finally { s.discard = false; }\n },\n };\n states.set(target, s as unknown as TargetState);\n return target;\n}\n","import type { LaneColumns } from './engine/lanes';\nimport { createTarget, readTargetInto, stateOf, type RowTable, type Target, type TargetState } from './target';\n\n/** The arrays a table can keep its rows' values on screen in. */\nexport type ShownArray = Float64Array | Float32Array;\n\n/** What {@link createTargetTable} takes. */\nexport interface TargetTableOptions<S extends ShownArray = Float64Array> {\n /** How many numbers a row holds. */\n axes: number;\n /** The kind of array to keep `shown` in. Default `Float64Array`. Pass `Float32Array` for a\n * painter that uploads it: the table then fills that each frame, and no copy is made. */\n shown?: new (length: number) => S;\n /** Rows to make room for at first. The table grows past it. Default 64. */\n capacity?: number;\n /** Called after `row` is committed: by `set`, by an animation starting on it, and by one\n * canceled on it. */\n set?(row: number): void;\n /** Called once a frame, after the animator has filled `shown` for the rows it is moving. */\n show?(): void;\n}\n\n/**\n * Many like values an animator can move, kept as rows of numbers in flat arrays: for thousands\n * of particles, dots, or vertex colors, where a `Target` apiece costs a read apiece. Each row\n * is a target (`target(row)`), so it tweens, springs, coasts, and holds like any other, and\n * every row's value on screen is in `shown` after each frame, with no call per row.\n */\nexport interface TargetTable<S extends ShownArray = Float64Array> {\n readonly axes: number;\n /** How many rows are in use. */\n readonly size: number;\n /** Every row's committed value, row `r` at `r * axes`. A new array once the table grows, so\n * read it from the table each time. Write a row through `set`. */\n readonly committed: Float64Array;\n /** Every row's value on screen, laid out as `committed`: current after each frame of the\n * animator moving the rows, and whenever it is read between frames. A new array once the\n * table grows. A `Float32Array` where the table was made with `shown: Float32Array`. */\n readonly shown: S;\n /** Adds a row at `value` and answers its index, which a removed row's index is reused for. */\n add(value: ArrayLike<number>): number;\n /** Stops whatever is moving `row` and frees it. Its target is dead from here: a row added\n * later may take the index, and gets a target of its own. */\n remove(row: number): void;\n /** Commits `value` to `row`. A row that is moving keeps what its animations have left on top. */\n set(row: number, value: ArrayLike<number>): void;\n /** Row `row` as a target, the same one on every call. */\n target(row: number): Target<number[]>;\n}\n\n/** Writes `value` as row `row` of `into`, whose rows are `n` numbers. */\nfunction put(into: ShownArray, n: number, row: number, value: ArrayLike<number>): void {\n if (value.length !== n) throw new Error(`target table: a row is ${n} numbers, and this value is ${value.length}`);\n for (let k = 0; k < n; k++) into[row * n + k] = value[k]!;\n}\n\n/** Row `row` of a table of `n`-number rows as a target. `committed` answers the table's\n * committed values now, and throws once the row is no longer this target's. */\nfunction rowTarget(\n n: number, row: number, rows: RowTable, committed: () => Float64Array,\n commit: (row: number, value: ArrayLike<number>) => void,\n): Target<number[]> {\n const target = createTarget<number[]>({\n get: () => {\n const from = committed();\n // Array.from over a typed array's view measured several times this loop.\n const value = new Array<number>(n);\n for (let k = 0; k < n; k++) value[k] = from[row * n + k]!;\n return value;\n },\n set: (value) => {\n committed();\n commit(row, value);\n },\n });\n const state = stateOf(target);\n state.row = { table: rows, index: row };\n state.write = (out, at) => {\n const from = committed();\n for (let k = 0; k < n; k++) out[at + k] = from[row * n + k]!;\n };\n return target;\n}\n\n/** Make a {@link TargetTable} whose rows each hold `axes` numbers. */\nexport function createTargetTable<S extends ShownArray = Float64Array>(opts: TargetTableOptions<S>): TargetTable<S> {\n const n = opts.axes;\n const Shown = opts.shown ?? (Float64Array as unknown as new (length: number) => S);\n if (!Number.isInteger(n) || n < 1) throw new Error('createTargetTable: `axes` is a whole number of at least 1');\n let committed = new Float64Array(Math.max(opts.capacity ?? 64, 1) * n);\n let shown = new Shown(committed.length);\n /** One past the highest row ever used. */\n let high = 0;\n let size = 0;\n const free: number[] = [];\n const targets: (Target<number[]> | undefined)[] = [];\n const states: (TargetState<number[]> | undefined)[] = [];\n /** How many times each row has been removed: what tells a row's target from its last one's. */\n const removals: number[] = [];\n /** Rows whose value on screen the pass over the table's columns does not give: read apart. */\n const marks = new Set<number>();\n\n const flush = (): void => {\n for (const row of marks) {\n const s = states[row];\n if (s) readTargetInto(s, shown, row * n);\n }\n };\n\n const commit = (row: number, value: ArrayLike<number>): void => {\n put(committed, n, row, value);\n const s = states[row];\n if (s && s.live > 0) marks.add(row);\n else put(shown, n, row, value);\n opts.set?.(row);\n };\n\n const rows: RowTable = {\n mark: (row) => { marks.add(row); },\n settle() {\n // What a mark stood for is on screen once it is read. A hold is a voice among the row's\n // columns; what waits beside one, and what a hold hides of a move behind it, are not.\n flush();\n for (const row of marks) {\n const s = states[row];\n if (!s || s.live === 0 || !(s.beside || s.dimmed || (s.held > 0 && s.behind.size > 0))) marks.delete(row);\n }\n },\n fill(columns: LaneColumns | null) {\n if (columns) {\n const { cols, tags, count } = columns;\n for (let j = 0; j < count; j++) {\n const at = tags[j]! * n;\n for (let k = 0; k < n; k++) shown[at + k] = committed[at + k]! + cols[j * n + k]!;\n }\n }\n flush();\n opts.show?.();\n },\n };\n\n return {\n axes: n,\n get size() { return size; },\n get committed() { return committed; },\n get shown() {\n flush();\n return shown;\n },\n add(value) {\n const row = free.pop() ?? high++;\n if ((row + 1) * n > committed.length) {\n const grown = new Float64Array(Math.max(committed.length * 2, (row + 1) * n));\n grown.set(committed);\n committed = grown;\n const wider = new Shown(grown.length);\n wider.set(shown);\n shown = wider;\n }\n put(committed, n, row, value);\n put(shown, n, row, value);\n size += 1;\n return row;\n },\n remove(row) {\n targets[row]?.stop();\n targets[row] = undefined;\n removals[row] = (removals[row] ?? 0) + 1;\n states[row] = undefined;\n marks.delete(row);\n free.push(row);\n size -= 1;\n },\n set: commit,\n target(row) {\n const held = targets[row];\n if (held) return held;\n const made = (removals[row] ??= 0);\n const mine = (): void => {\n if (removals[row] !== made) throw new Error(`target table: row ${row} was removed, and this is its old target`);\n };\n const target = rowTarget(n, row, rows, () => { mine(); return committed; }, commit);\n targets[row] = target;\n states[row] = stateOf(target);\n return target;\n },\n };\n}\n","import type { Target } from './target';\nimport { createTargetTable, type TargetTable } from './targetTable';\n\n/** Which of a node's two per-anchor color arrays an override applies to. */\nexport type VertexColorChannel = 'fill' | 'stroke';\n\n/** Function-form override: receives the consumer-supplied base color\n * array and the current animation timestamp (ms, from the animator's\n * clock). Returns a flat RGBA float array (values in 0..1, matching\n * the renderer's `stroke.vertexColors` / `PathDrawCommand.vertexColors`\n * color space) of the same length as `base`. */\nexport type ColorOverrideFn = (base: readonly number[], tMs: number) => number[];\n\n/** Either a static per-anchor RGBA float array (0..1) or a function-form\n * override (see {@link ColorOverrideFn}). */\nexport type ColorOverride = readonly number[] | ColorOverrideFn;\n\ninterface NodeOverrides {\n fill?: ColorOverride;\n stroke?: ColorOverride;\n}\n\n/** One node and channel's row in the table of colors as long as its own. */\ninterface ColorSlot {\n readonly table: TargetTable;\n readonly row: number;\n readonly length: number;\n /** False until an animation commits, and again once what it painted is dropped. */\n painted: boolean;\n}\n\n/** Every slot of one length: a table whose rows are that many numbers, and who holds each row. */\ninterface ColorTable {\n readonly table: TargetTable;\n readonly rows: (ColorSlot | undefined)[];\n}\n\ntype NodeSlots = Partial<Record<VertexColorChannel, ColorSlot>>;\n\n/** Per-node, per-channel store of color overrides. Attached to `useAnimator` as\n * `animator.colorOverrides`; painted onto scene nodes by `<SceneCanvas animator>`\n * and onto a `createPathLayer`'s nodes by its `colorOverrides` option. */\nexport class ColorOverrideRegistry {\n private readonly map = new Map<string, NodeOverrides>();\n private readonly slots = new Map<string, NodeSlots>();\n private readonly tables = new Map<number, ColorTable>();\n private _version = 0;\n\n set(id: string, channel: VertexColorChannel, override: ColorOverride): void {\n let entry = this.map.get(id);\n if (!entry) {\n entry = {};\n this.map.set(id, entry);\n }\n entry[channel] = override;\n this._version++;\n }\n\n /** Drops `id`'s override on `channel`, and the colors a finished or canceled animation on its\n * {@link target} left painted. An animation still running goes on. */\n clear(id: string, channel: VertexColorChannel): void {\n this.release(id, channel);\n const entry = this.map.get(id);\n if (!entry) return;\n if (!(channel in entry)) return;\n delete entry[channel];\n if (!entry.fill && !entry.stroke) this.map.delete(id);\n this._version++;\n }\n\n clearAll(): void {\n for (const [id, node] of this.slots) {\n for (const channel of Object.keys(node) as VertexColorChannel[]) this.release(id, channel);\n }\n if (this.map.size === 0) return;\n this.map.clear();\n this._version++;\n }\n\n /** What `set` stored for `id`'s `channel`; failing that, the colors its {@link target} paints. */\n get(id: string, channel: VertexColorChannel): ColorOverride | undefined {\n const override = this.map.get(id)?.[channel];\n if (override !== undefined) return override;\n const slot = this.slots.get(id)?.[channel];\n return slot?.painted ? shownOf(slot) : undefined;\n }\n\n /** Whether anything overrides `id`, on either channel. */\n has(id: string): boolean {\n return this.map.has(id) || this.slots.has(id);\n }\n\n /**\n * The {@link Target} for `id`'s colors on `channel`: `length` numbers, flat RGBA per anchor.\n * Every caller for one node and channel gets the same one, so their animations add. The\n * registry holds its committed colors and nothing writes the scene.\n *\n * What it paints: with no override from `set`, its colors in place of the painter's own; over\n * one, only what its animations have left to travel, added on top. Ask again for each\n * animation rather than keeping it: {@link release} and {@link clear} drop a resting one, and\n * the target it had throws from then on.\n */\n target(id: string, channel: VertexColorChannel, length: number): Target<number[]> {\n if (!(length > 0) || length % 4 !== 0) {\n throw new Error(`vertex colors: length ${length} must be a positive multiple of 4`);\n }\n let node = this.slots.get(id);\n const held = node?.[channel];\n if (held?.length === length) return held.table.target(held.row);\n if (held) {\n if (held.table.target(held.row).active) {\n throw new Error(`vertex colors: ${id}'s ${channel} is moving as ${held.length} numbers, not ${length}`);\n }\n this.drop(held);\n }\n const at = this.tableOf(length);\n const row = at.table.add(new Float64Array(length));\n const slot: ColorSlot = { table: at.table, row, length, painted: false };\n at.rows[row] = slot;\n if (!node) {\n node = {};\n this.slots.set(id, node);\n }\n node[channel] = slot;\n return at.table.target(row);\n }\n\n private tableOf(length: number): ColorTable {\n const held = this.tables.get(length);\n if (held) return held;\n const rows: (ColorSlot | undefined)[] = [];\n const table = createTargetTable({\n axes: length,\n set: (row) => {\n const slot = rows[row];\n if (slot) slot.painted = true;\n this._version++;\n },\n show: () => { this._version++; },\n });\n const made = { table, rows };\n this.tables.set(length, made);\n return made;\n }\n\n private drop(slot: ColorSlot): void {\n const at = this.tables.get(slot.length)!;\n at.rows[slot.row] = undefined;\n slot.table.remove(slot.row);\n if (slot.table.size === 0) this.tables.delete(slot.length);\n }\n\n /** Drops the colors `id`'s {@link target} on `channel` left painted, unless an animation is\n * still moving it. An override from `set` stays. */\n release(id: string, channel: VertexColorChannel): void {\n const node = this.slots.get(id);\n const slot = node?.[channel];\n if (!node || !slot || slot.table.target(slot.row).active) return;\n delete node[channel];\n if (!node.fill && !node.stroke) this.slots.delete(id);\n this.drop(slot);\n if (slot.painted) this._version++;\n }\n\n /**\n * The colors to paint on `id`'s `channel`, given the colors the painter would\n * otherwise paint and the frame's timestamp. A function override needs that\n * `base` and must return an array of its length; failing either, `base`\n * stands. A {@link target} in motion then adds what it has left to travel.\n */\n resolve(\n id: string,\n channel: VertexColorChannel,\n base: readonly number[] | undefined,\n tMs: number,\n ): readonly number[] | undefined {\n const override = this.map.get(id)?.[channel];\n const slot = this.slots.get(id)?.[channel];\n if (override === undefined) return slot?.painted ? shownOf(slot) : base;\n const under = typeof override === 'function' ? this.apply(override, base, tMs) : override;\n if (!slot?.painted || under?.length !== slot.length || !slot.table.target(slot.row).active) return under;\n const { shown, committed } = slot.table;\n const at = slot.row * slot.length;\n return under.map((x, i) => x + shown[at + i]! - committed[at + i]!);\n }\n\n private apply(\n override: ColorOverrideFn,\n base: readonly number[] | undefined,\n tMs: number,\n ): readonly number[] | undefined {\n if (base === undefined) return undefined;\n const result = override(base, tMs);\n return result.length === base.length ? result : base;\n }\n\n version(): number {\n return this._version;\n }\n}\n\n/** The colors `slot`'s row shows now. */\nfunction shownOf(slot: ColorSlot): number[] {\n const { shown } = slot.table;\n const at = slot.row * slot.length;\n const out = new Array<number>(slot.length);\n for (let i = 0; i < out.length; i++) out[i] = shown[at + i]!;\n return out;\n}\n","import { createEmitter } from '@weasel-js/registry';\nimport type { AnimatorEvent, AnimatorListener } from './types';\n\n/** The listener set behind `animator.watch`. Every emit site checks `watched`\n * first and builds its event only then, so an unwatched animator allocates\n * nothing for observability. */\nexport class AnimatorEventHub {\n private readonly events = createEmitter<[AnimatorEvent]>();\n\n get watched(): boolean {\n return this.events.size > 0;\n }\n\n add(listener: AnimatorListener): () => void {\n return this.events.subscribe(listener);\n }\n\n emit(event: AnimatorEvent): void {\n this.events.emit(event);\n }\n}\n","import type { SupervisorFactory } from './supervisor';\nimport type {\n AnimationHandle,\n Animator,\n LoopFactory,\n LoopOptions,\n TweenLoopOptions,\n} from './types';\n\n/**\n * Loop primitive. Repeatedly invokes `factory(i, next)` to produce a child\n * animation. The factory is responsible for wiring its returned handle's\n * `onDone` to call `next` — that's how the loop advances. Pause/resume/\n * setTimeScale reach the current child and each later one; cancel stops the\n * in-flight child and prevents future iterations.\n *\n * The loop is registered with the animator under a supervisor entry, so\n * `animator.cancel(handle)`, `animator.cancelKey(key)`, and\n * `animator.isActive(key)` all work for it.\n */\nexport function createLoop(\n createSupervisor: SupervisorFactory,\n factory: LoopFactory,\n opts: LoopOptions = {},\n): AnimationHandle {\n const max = opts.count ?? Infinity;\n let iteration = 0;\n let cancelled = false;\n let current: AnimationHandle | null = null;\n\n const supervisor = createSupervisor({ kind: 'loop', cancelKey: opts.cancelKey, label: opts.label });\n supervisor.setOnCancel(() => {\n // External cancel path (animator.cancel/cancelKey or handle.cancel).\n // Mark cancelled so `next` short-circuits; tear down the current child.\n cancelled = true;\n current?.cancel();\n current = null;\n });\n\n const applyRate = (paused: boolean, timeScale: number): void => {\n if (!current) return;\n if (paused) current.pause();\n else current.resume();\n current.setTimeScale(timeScale);\n };\n supervisor.setOnRate(applyRate);\n\n const next = (): void => {\n if (cancelled) return;\n if (iteration >= max) {\n current = null;\n // Natural completion: deregister the supervisor so isActive() goes\n // false. `cancelled` makes a late `next` a no-op.\n cancelled = true;\n supervisor.finish();\n opts.onDone?.();\n return;\n }\n const i = iteration++;\n current = factory(i, next);\n if (supervisor.isPaused() || supervisor.timeScale() !== 1) {\n applyRate(supervisor.isPaused(), supervisor.timeScale());\n }\n };\n\n next();\n\n return {\n id: supervisor.id,\n cancel: () => supervisor.cancel(),\n pause: () => supervisor.pause(),\n resume: () => supervisor.resume(),\n setTimeScale: (s) => supervisor.setTimeScale(s),\n timeScale: () => supervisor.timeScale(),\n isPaused: () => supervisor.isPaused(),\n };\n}\n\n/**\n * Sugar over `createLoop` for the common case of looping a tween between two\n * values. `direction` controls per-iteration from/to:\n * - `restart` (default): from→to every iteration\n * - `reverse`: to→from every iteration\n * - `alternate`: even iterations from→to, odd iterations to→from\n */\nexport function createTweenLoop<T>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n opts: TweenLoopOptions<T>,\n): AnimationHandle {\n const direction = opts.direction ?? 'restart';\n return createLoop(\n (o) => createSupervisor({ ...o, kind: 'tweenLoop' }),\n (i, next) => {\n const flipped = direction === 'reverse' || (direction === 'alternate' && i % 2 === 1);\n const from = flipped ? opts.to : opts.from;\n const to = flipped ? opts.from : opts.to;\n return animator.tween({\n from,\n to,\n ms: opts.ms,\n easing: opts.easing,\n interpolate: opts.interpolate,\n onTick: opts.onTick,\n onDone: next,\n });\n },\n { count: opts.count, onDone: opts.onDone, cancelKey: opts.cancelKey, label: opts.label },\n );\n}\n","import { isTarget, type Target } from './target';\nimport type { Supervisor, SupervisorFactory, WatchCompletion } from './supervisor';\nimport type {\n AnimationHandle,\n Animator,\n StaggerBuilder,\n StaggerDelay,\n StaggerFactory,\n StaggerOptions,\n SpringOptions,\n StaggerPerItem,\n StaggerSpringOptions,\n StaggerTargetSpringOptions,\n StaggerTargetTweenOptions,\n StaggerTweenOptions,\n TweenOptions,\n} from './types';\n\n/** An item still waiting: `fire` starts it once the stagger's own virtual\n * time reaches `at`. */\ninterface PendingEntry {\n at: number;\n fire: () => void;\n}\n\n/**\n * Composite handle returned by `createStagger`. Owns a list of in-flight\n * child handles and a list of items still waiting; cancel cancels both.\n * Pause/resume/setTimeScale propagate to in-flight children. The waiting\n * items are counted in the supervisor entry's virtual time, so whatever\n * holds or scales that entry holds or scales the delays with it.\n *\n * Registered with the animator via a supervisor so animator.cancel /\n * cancelKey / isActive all work for it.\n */\nclass CompositeHandle implements AnimationHandle {\n readonly id: number;\n private cancelled = false;\n private paused_ = false;\n private timeScale_ = 1;\n private children: AnimationHandle[] = [];\n private pending: PendingEntry[] = [];\n private outstanding: number;\n private finished = false;\n\n constructor(\n private supervisor: Supervisor,\n totalItems: number,\n ) {\n this.id = supervisor.id;\n this.outstanding = totalItems;\n supervisor.setOnCancel(() => this.handleSupervisorCancel());\n supervisor.setOnRate((paused, timeScale) => {\n if (paused) this.applyPause();\n else this.applyResume();\n this.applyTimeScale(timeScale);\n });\n supervisor.setOnFrame((virtualNow) => this.fireDue(virtualNow));\n }\n\n /** Invoked when the supervisor is cancelled externally (animator.cancel /\n * cancelKey) OR via this composite's own `cancel`. */\n private handleSupervisorCancel(): void {\n if (this.cancelled) return;\n this.cancelled = true;\n this.pending = [];\n // Snapshot children first: child.cancel() may synchronously invoke our\n // own noteChildDone path via the animator's completion listener, which\n // would mutate this.children mid-iteration.\n const kids = this.children.slice();\n this.children = [];\n for (const c of kids) c.cancel();\n }\n\n noteChildDone(): void {\n if (this.cancelled || this.finished) return;\n this.outstanding -= 1;\n if (this.outstanding <= 0) {\n this.finished = true;\n this.children = [];\n this.supervisor.finish();\n }\n }\n\n addChild(h: AnimationHandle): void {\n if (this.cancelled) {\n h.cancel();\n return;\n }\n this.children.push(h);\n if (this.paused_) h.pause();\n if (this.timeScale_ !== 1) h.setTimeScale(this.timeScale_);\n }\n\n schedule(delayMs: number, fire: () => void): void {\n if (this.cancelled) return;\n this.pending.push({ at: delayMs, fire });\n }\n\n private fireDue(virtualNow: number): void {\n if (this.cancelled || this.pending.length === 0) return;\n const due = this.pending.filter((p) => p.at <= virtualNow).sort((a, b) => a.at - b.at);\n this.pending = this.pending.filter((p) => p.at > virtualNow);\n for (const p of due) {\n if (this.cancelled) return;\n p.fire();\n }\n }\n\n cancel(): void {\n // Route through the supervisor so the animator's id table is kept in\n // sync. The supervisor's onCancel forwards back to\n // handleSupervisorCancel which actually tears down children + waiting items.\n this.supervisor.cancel();\n }\n\n pause(): void {\n this.supervisor.pause();\n }\n\n resume(): void {\n this.supervisor.resume();\n }\n\n setTimeScale(s: number): void {\n this.supervisor.setTimeScale(s);\n }\n\n private applyPause(): void {\n if (this.paused_) return;\n this.paused_ = true;\n for (const c of this.children) c.pause();\n }\n\n private applyResume(): void {\n if (!this.paused_) return;\n this.paused_ = false;\n for (const c of this.children) c.resume();\n }\n\n private applyTimeScale(s: number): void {\n if (s === this.timeScale_) return;\n this.timeScale_ = s;\n for (const c of this.children) c.setTimeScale(s);\n }\n\n timeScale(): number {\n return this.timeScale_;\n }\n\n isPaused(): boolean {\n return this.paused_;\n }\n}\n\nfunction delayFor(delay: StaggerDelay, i: number): number {\n return typeof delay === 'function' ? delay(i) : delay * i;\n}\n\n/**\n * Stagger primitive. With `factory`, returns the composite handle directly.\n * Without `factory`, returns a `StaggerBuilder` whose `.each` runs the\n * stagger with a factory.\n */\nexport function createStagger<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n factory: StaggerFactory<TItem>,\n opts?: StaggerOptions,\n): AnimationHandle;\nexport function createStagger<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n): StaggerBuilder<TItem>;\nexport function createStagger<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n factory?: StaggerFactory<TItem>,\n opts?: StaggerOptions,\n): AnimationHandle | StaggerBuilder<TItem> {\n if (factory) return runStagger(createSupervisor, watchCompletion, items, delay, factory, opts);\n return makeBuilder(animator, createSupervisor, watchCompletion, items, delay);\n}\n\nfunction runStagger<TItem>(\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n factory: StaggerFactory<TItem>,\n opts?: StaggerOptions,\n): AnimationHandle {\n const supervisor = createSupervisor({ kind: 'stagger', cancelKey: opts?.cancelKey, label: opts?.label });\n const composite = new CompositeHandle(supervisor, items.length);\n if (items.length === 0) {\n supervisor.finish();\n return composite;\n }\n items.forEach((item, i) => {\n const ms = delayFor(delay, i);\n const fire = (): void => {\n const child = factory(item, i);\n // Hook into the child's deregistration (natural OR cancel). If the\n // composite is already cancelled, the watcher fires immediately on\n // cancel and the noteChildDone branch is a no-op (cancelled guard).\n watchCompletion(child.id, () => composite.noteChildDone());\n composite.addChild(child);\n };\n if (ms <= 0) fire();\n else composite.schedule(ms, fire);\n });\n return composite;\n}\n\nfunction resolvePerItem<T, TItem>(\n v: StaggerPerItem<T, TItem>,\n item: TItem,\n i: number,\n): T {\n return typeof v === 'function'\n ? (v as (item: TItem, index: number) => T)(item, i)\n : v;\n}\n\n/** What `.tween` and `.spring` read of their options, whichever form those take. */\ninterface PerItemOptions<TItem> extends StaggerOptions {\n target?: StaggerPerItem<Target<unknown>, TItem>;\n from?: StaggerPerItem<unknown, TItem>;\n to: StaggerPerItem<unknown, TItem>;\n onTick?: (value: unknown, item: TItem, index: number) => void;\n onDone?: (item: TItem, index: number) => void;\n}\n\n/** One item's share of a builder method's options: its target, or null where its animation\n * hands values to `onTick`, and the options every form of the animation takes. */\nfunction perItem<TItem>(opts: PerItemOptions<TItem>, item: TItem, i: number) {\n const target = opts.target !== undefined ? resolvePerItem(opts.target, item, i) : isTarget(item) ? item : null;\n return {\n target,\n from: opts.from === undefined ? undefined : resolvePerItem(opts.from, item, i),\n to: resolvePerItem(opts.to, item, i),\n onTick: opts.onTick && ((v: unknown) => opts.onTick!(v, item, i)),\n onDone: opts.onDone && (() => opts.onDone!(item, i)),\n };\n}\n\nfunction makeBuilder<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n): StaggerBuilder<TItem> {\n /** Runs `start` per item, once every item has a target to move or an `onTick` to tell. */\n const run = <O extends PerItemOptions<TItem>>(\n method: string,\n opts: O,\n start: (own: ReturnType<typeof perItem<TItem>>, item: TItem, i: number) => AnimationHandle,\n ): AnimationHandle => {\n if (opts.target === undefined && !opts.onTick && !items.every(isTarget)) {\n throw new Error(`animator.stagger: \\`.${method}\\` needs a \\`target\\`, items that are targets, or an \\`onTick\\``);\n }\n return runStagger(createSupervisor, watchCompletion, items, delay, (item, i) => start(perItem(opts, item, i), item, i), opts);\n };\n return {\n each: (factory, opts) =>\n runStagger(createSupervisor, watchCompletion, items, delay, factory, opts),\n tween: ((opts: StaggerTweenOptions<unknown, TItem> | StaggerTargetTweenOptions<unknown, TItem>) =>\n run('tween', opts, ({ target, ...own }, item, i) => {\n const shared = {\n ...own, ms: resolvePerItem(opts.ms, item, i),\n easing: opts.easing, interpolate: opts.interpolate, interpolator: opts.interpolator,\n };\n return target ? animator.tween({ ...shared, target }) : animator.tween(shared as TweenOptions<unknown>);\n })) as StaggerBuilder<TItem>['tween'],\n spring: ((opts: StaggerSpringOptions<unknown, TItem> | StaggerTargetSpringOptions<unknown, TItem>) =>\n run('spring', opts, ({ target, ...own }, item, i) => {\n const shared = {\n ...own, velocity: opts.velocity === undefined ? undefined : resolvePerItem(opts.velocity, item, i),\n preset: opts.preset, stiffness: opts.stiffness, damping: opts.damping, mass: opts.mass,\n restThreshold: opts.restThreshold,\n };\n if (target) return animator.spring({ ...shared, target });\n const { interpolate, add, subtract, scale, magnitude } = opts as StaggerSpringOptions<unknown, TItem>;\n return animator.spring({ ...shared, interpolate, add, subtract, scale, magnitude } as SpringOptions<unknown>);\n })) as StaggerBuilder<TItem>['spring'],\n };\n}\n","import type { AnimationSeed } from './engine/context';\nimport type { AnimationHandle } from './types';\n\n/**\n * Lets a composite (loop / stagger) sit in the animator's id table without\n * being a real animation: its tick never completes, so only `cancel()` or\n * `finish()` removes it. The owning composite installs `setOnCancel` to tear\n * down its children when an external cancel fires.\n *\n * Not part of the public Animator surface.\n */\nexport interface Supervisor {\n id: number;\n cancel(): void;\n pause(): void;\n resume(): void;\n setTimeScale(s: number): void;\n timeScale(): number;\n isPaused(): boolean;\n setOnCancel(cb: () => void): void;\n /** `cb` hears every pause, resume, and time scale set on the entry, by its\n * handle or by `cancelKey`, so the composite can pass it to its children. */\n setOnRate(cb: (paused: boolean, timeScale: number) => void): void;\n /** `cb` hears the entry's virtual time once a frame, after every animation\n * has ticked: what it starts is started outside the tick, as a caller's\n * own code would start it. */\n setOnFrame(cb: (virtualNow: number) => void): void;\n /** Retire the entry because the composite completed on its own. Unlike\n * `cancel`, skips the `setOnCancel` callback and reports an `end`. */\n finish(): void;\n cancelKey?: string;\n}\n\n/** What names a supervisor's entry in the animator's table and its events. */\nexport interface SupervisorOptions {\n kind: 'loop' | 'tweenLoop' | 'stagger' | 'keepAlive';\n cancelKey?: string;\n label?: string;\n}\n\nexport type SupervisorFactory = (opts: SupervisorOptions) => Supervisor;\n\n/** What {@link supervisors} needs of the animator. */\nexport interface SupervisorHost {\n nextId(): number;\n register(seed: AnimationSeed): AnimationHandle;\n /** Takes an entry off the table as finished. */\n finish(id: number): void;\n /** Runs `cb` once this frame's ticks are done. */\n afterTicks(cb: () => void): void;\n}\n\n/** Makes the animator's supervisor factory: each is a registered animation whose tick never\n * finishes, so loop and stagger sit in the id table and answer `cancel`, `cancelKey` and\n * `isActive`. */\nexport function supervisors(host: SupervisorHost): SupervisorFactory {\n return ({ kind, cancelKey, label }) => {\n const id = host.nextId();\n let onCancelCb: (() => void) | undefined;\n let onRateCb: ((paused: boolean, timeScale: number) => void) | undefined;\n let onFrameCb: ((virtualNow: number) => void) | undefined;\n const base = host.register({\n id,\n kind,\n cancelKey,\n label,\n tick: (virtualNow) => {\n if (onFrameCb) host.afterTicks(() => onFrameCb?.(virtualNow));\n return false;\n },\n onCancel: () => onCancelCb?.(),\n onRate: (paused, timeScale) => onRateCb?.(paused, timeScale),\n });\n return {\n id: base.id,\n cancel: base.cancel,\n pause: base.pause,\n resume: base.resume,\n setTimeScale: base.setTimeScale,\n timeScale: base.timeScale,\n isPaused: base.isPaused,\n setOnCancel: (cb) => { onCancelCb = cb; },\n setOnRate: (cb) => { onRateCb = cb; },\n setOnFrame: (cb) => { onFrameCb = cb; },\n finish: () => host.finish(id),\n cancelKey,\n };\n };\n}\n\n/**\n * Subscribe to \"this animation id finished or was canceled and is no longer\n * in the registry.\" Returns an unsubscribe. Fires at most once, and at once\n * for an id that has already left. Fires for both natural completion and\n * external cancel.\n */\nexport type WatchCompletion = (id: number, cb: () => void) => () => void;\n","import type { EventBooking, EventBookingHandle, EventTrack, TimelineEvent, Track } from './types';\n\n/** A clock read further than this from the frame clock's prediction is taken\n * as a discontinuity — a hidden tab, a suspended context — not as jitter. */\nconst RESYNC_MS = 50;\n/** Share of each frame's clock residual folded into the estimate. Small enough\n * to average out a per-frame read that lands a render quantum early or late;\n * large enough to follow ppm-scale drift with well under a millisecond of lag. */\nconst SLEW = 0.05;\n/** A pending booking a rate change or resync moves by more than this is\n * retracted and booked again; anything less is left standing. */\nconst RETIME_MS = 1;\n\n/** Index of the first event after `t`. Binary search: tracks may be long. */\nexport function firstAfter(events: EventTrack['events'], t: number): number {\n let lo = 0;\n let hi = events.length;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (events[mid].t > t) hi = mid; else lo = mid + 1;\n }\n return lo;\n}\n\n/** Index of the first event at or after `t`. */\nexport function firstAtOrAfter(events: EventTrack['events'], t: number): number {\n let i = firstAfter(events, t);\n while (i > 0 && events[i - 1].t === t) i -= 1;\n return i;\n}\n\n/** The timeline state a booker reads. `lap` counts wraps since creation and is\n * never reset, so a (lap, root time) pair names one crossing for good. */\nexport interface BookerHost {\n tracks: Track[];\n duration(): number;\n /** Laps still allowed after the current one; `Infinity` when endless. */\n lapsLeft(): number;\n lap(): number;\n playhead(): number;\n}\n\nexport interface Booker {\n /** After the frame's wraps and crossings. `scale` is the effective one this\n * frame's virtual time advanced at, zero while paused. */\n tick(virtualNow: number, scale: number): void;\n /** Stop every booking still ahead of both the playhead and the clock, and\n * let the next tick book that span again. */\n retract(): void;\n /** After the playhead jumped. Call `retract` first, while it still reads the\n * old playhead. */\n seek(): void;\n /** After the animator restarted the timeline's virtual clock at zero. */\n rearm(): void;\n}\n\n/** Every event at root time `<= r` in lap `lap` has been taken; with `open`,\n * only those before `r`, which is where a seek leaves the cursor. */\ninterface Cursor { lap: number; r: number; open?: boolean }\n\ninterface Booking {\n event: TimelineEvent;\n lap: number;\n r: number;\n when: number;\n handle?: EventBookingHandle;\n}\n\nconst isAfter = (a: Cursor, b: Cursor): boolean => a.lap > b.lap || (a.lap === b.lap && a.r > b.r);\n\nexport function createBooker(opts: EventBooking, host: BookerHost): Booker {\n const lookahead = opts.lookahead ?? 100;\n const maxLate = opts.maxLate ?? Infinity;\n const cursors = new Map<EventTrack, Cursor>();\n let start: Cursor = { lap: 0, r: -Infinity };\n let bookings: Booking[] = [];\n /** Clock time of the current frame, smoothed. Null until anchored. */\n let est: number | null = null;\n let mapVirtual = 0;\n let lastScale = 0;\n\n const playheadCursor = (): Cursor => ({ lap: host.lap(), r: host.playhead() });\n\n const unwrapped = (b: { lap: number; r: number }): number =>\n (b.lap - host.lap()) * host.duration() + b.r;\n\n const ahead = (b: Booking): boolean => isAfter(b, playheadCursor());\n\n const stopWhere = (now: number, pred: (b: Booking) => boolean): void => {\n bookings = bookings.filter((b) => {\n if (!b.handle || b.when <= now || !ahead(b) || !pred(b)) return true;\n try { b.handle.stop(); } catch (err) { console.error('timeline: booking stop threw', err); }\n return false;\n });\n // Back to the playhead, not to each retracted booking: whatever still\n // stands is skipped by identity, and an edit may have added events behind\n // the cursor that only a rescan finds.\n const at = playheadCursor();\n for (const [track, c] of cursors) if (isAfter(c, at)) cursors.set(track, at);\n if (isAfter(start, at)) start = at;\n };\n\n const whenFor = (u: number, playhead: number, scale: number, now: number): number =>\n Math.max(est! + (u - playhead) / scale, now);\n\n const scanTrack = (\n track: EventTrack, at: number, horizon: number, lastLap: number, now: number, scale: number,\n ): void => {\n const lap = host.lap();\n const duration = host.duration();\n const playhead = host.playhead();\n const { events } = track;\n let c = cursors.get(track) ?? start;\n for (;;) {\n const lapStart = (c.lap - lap) * duration;\n if (lapStart > horizon) break;\n const i = (c.open ? firstAtOrAfter : firstAfter)(events, c.r - at);\n if (i >= events.length || at + events[i].t > duration) {\n if (c.lap >= lastLap) break;\n // A frame that skipped whole laps books the outgoing lap's tail and\n // nothing of the laps in between, as crossings do.\n c = { lap: Math.max(c.lap + 1, lap), r: -Infinity };\n continue;\n }\n const r = at + events[i].t;\n const u = lapStart + r;\n if (u > horizon) break;\n c = { lap: c.lap, r };\n for (let j = i; j < events.length && events[j].t === events[i].t; j += 1) {\n const ev = events[j];\n if (!ev.book || bookings.some((b) => b.event === ev && b.lap === c.lap)) continue;\n if ((playhead - u) / scale > maxLate) continue;\n const when = whenFor(u, playhead, scale, now);\n let handle: EventBookingHandle | undefined;\n try {\n handle = ev.book(when) ?? undefined;\n } catch (err) {\n console.error('timeline: book threw', err);\n }\n bookings.push({ event: ev, lap: c.lap, r, when, handle });\n }\n }\n cursors.set(track, c);\n };\n\n const visit = (\n tracks: Track[], at: number, horizon: number, lastLap: number, now: number, scale: number,\n ): void => {\n for (const track of tracks) {\n if (track.kind === 'event') scanTrack(track, at, horizon, lastLap, now, scale);\n else if (track.kind === 'timeline') {\n visit(track.timeline.tracks, at + track.at, horizon, lastLap, now, scale);\n }\n }\n };\n\n return {\n tick(virtualNow, scale) {\n const now = opts.clock.now();\n bookings = bookings.filter(ahead);\n if (!(scale > 0)) {\n if (lastScale > 0) stopWhere(now, () => true);\n lastScale = 0;\n est = null;\n return;\n }\n\n let moved = lastScale > 0 && scale !== lastScale;\n if (est === null) {\n est = now;\n } else {\n est += (virtualNow - mapVirtual) / scale;\n const residual = now - est;\n if (Math.abs(residual) > RESYNC_MS) {\n est = now;\n moved = true;\n } else {\n est += residual * SLEW;\n }\n }\n mapVirtual = virtualNow;\n lastScale = scale;\n\n const playhead = host.playhead();\n if (moved) {\n stopWhere(now, (b) => Math.abs(whenFor(unwrapped(b), playhead, scale, now) - b.when) > RETIME_MS);\n }\n\n const duration = host.duration();\n const lastLap = host.lap() + (duration > 0 ? host.lapsLeft() : 0);\n visit(host.tracks, 0, playhead + lookahead * scale, lastLap, now, scale);\n },\n retract() {\n stopWhere(opts.clock.now(), () => true);\n },\n seek() {\n bookings = [];\n cursors.clear();\n start = { ...playheadCursor(), open: true };\n },\n rearm() {\n est = null;\n },\n };\n}\n","import { firstAfter, firstAtOrAfter } from './booking';\nimport type { TimelineReport } from './createTimeline';\nimport type { Track } from './types';\n\n/** Fires the events of `tracks` the playhead crossed going from `from` to `to`, at any depth.\n * With `fromOpen`, an event exactly at `from` fires too. */\nexport type FireEvents = (tracks: Track[], from: number, to: number, fromOpen: boolean) => void;\n\n/** `booked` says whether the timeline has a booking clock: an event with `book` on one that has\n * none warns, once. */\nexport function createEventFirer(report: TimelineReport | undefined, booked: boolean): FireEvents {\n // Track indexes from the root down to the track being fired, for `report`.\n const path: number[] = [];\n let warnedUnbooked = false;\n const fire: FireEvents = (tracks, from, to, fromOpen) => {\n for (let k = 0; k < tracks.length; k += 1) {\n const track = tracks[k];\n if (track.kind === 'event') {\n const end = firstAfter(track.events, to);\n const first = (fromOpen ? firstAtOrAfter : firstAfter)(track.events, from);\n for (let i = first; i < end; i += 1) {\n const ev = track.events[i];\n ev.fire?.(to - ev.t);\n if (report?.watched) {\n path.push(k);\n report.fire(track, path, ev, to - ev.t);\n path.pop();\n }\n if (ev.book && !booked && !warnedUnbooked) {\n warnedUnbooked = true;\n console.warn('timeline: an event has `book` but the timeline has no `booking` clock; it never books.');\n }\n }\n } else if (track.kind === 'timeline') {\n path.push(k);\n fire(track.timeline.tracks, from - track.at, to - track.at, fromOpen);\n path.pop();\n }\n }\n };\n return fire;\n}\n","import { readTarget, type Behind, type RowTable, type TargetAxes, type TargetOwner, type TargetState } from '../target';\n\nconst TAU = Math.PI * 2;\n\n/** `value` as the target's axes, refused where it is not the target's shape. */\nexport function axesFor<T>(axes: TargetAxes<T>, value: T, what: string): number[] {\n const a = axes.to(value);\n if (a.length !== axes.count || !a.every((x) => typeof x === 'number' && !Number.isNaN(x))) {\n throw new Error(`animator: \\`${what}\\` is not the target's shape`);\n }\n return a;\n}\n\n/** The angle `x` as the turn of at most half a circle that reaches it. */\nexport function shortWay(x: number): number {\n x %= TAU;\n if (x > Math.PI) return x - TAU;\n if (x <= -Math.PI) return x + TAU;\n return x;\n}\n\n/** `a - b` per axis, the short way round on an angle axis. */\nexport function travel<T>(axes: TargetAxes<T>, a: readonly number[], b: readonly number[]): number[] {\n const d = a.map((x, i) => x - b[i]!);\n for (const i of axes.angles ?? []) d[i] = shortWay(d[i]!);\n return d;\n}\n\nexport const plus = (a: readonly number[], b: readonly number[]): number[] => a.map((x, i) => x + b[i]!);\nexport const minus = (a: readonly number[], b: readonly number[]): number[] => a.map((x, i) => x - b[i]!);\nexport const norm = (a: readonly number[]): number => Math.hypot(...a);\n\n/** Counts `delta` into what `s` shows until the next frame reads its voices again. */\nexport function bump(s: TargetState, delta: readonly number[], sign: 1 | -1): void {\n for (let i = 0; i < delta.length; i++) s.adjust[i] = s.adjust[i]! + sign * delta[i]!;\n stale(s);\n s.row?.table.mark(s.row.index);\n}\n\nfunction stale(s: TargetState): void {\n if (s.stale || !s.owner) return;\n s.stale = true;\n s.owner.adjusted(s);\n}\n\n/** Adds `delta` into the committed value. */\nexport function absorb<T>(s: TargetState<T>, delta: readonly number[]): void {\n if (s.discard) return;\n s.set(s.axes.from(plus(s.axes.to(s.get()), delta)));\n}\n\n/**\n * How much of an animation's offset is the move its destination made in the committed value,\n * per axis: that move, from `committed` to `to`, over the whole offset, `start`. The rest is a\n * `from` away from the committed value, or a push, which shows on top of a hold.\n */\nexport function shareBehind<T>(\n axes: TargetAxes<T>, committed: readonly number[], to: readonly number[], start: readonly number[],\n): number[] {\n return travel(axes, committed, to).map((m, i) => (start[i] === 0 ? 0 : m / start[i]!));\n}\n\nexport const times = (a: readonly number[], b: readonly number[]): number[] => a.map((x, i) => x * b[i]!);\n\n/** Puts an animation behind `s`'s holds. `left` answers what is left of its move. */\nexport function goBehind<T>(s: TargetState<T>, left: () => readonly number[]): Behind {\n const b: Behind = { left, kept: null };\n s.behind.add(b);\n return b;\n}\n\n/** Takes `b` out from behind `s`'s holds, and answers how much of `left` was still to show. */\nexport function comeOut<T>(s: TargetState<T>, b: Behind, left: readonly number[]): number[] {\n s.behind.delete(b);\n if (b.kept) {\n s.dimmed = false;\n for (const other of s.behind) if (other.kept) s.dimmed = true;\n }\n return b.kept ? times(left, b.kept) : left.slice();\n}\n\n/** Commits an animation where it stopped: `left` of its move into the committed value, and\n * the rest of its offset, `own`, where `keep` leaves it. */\nexport function commitOffset<T>(s: TargetState<T>, own: readonly number[], left: readonly number[], shown: readonly number[]): void {\n const top = minus(own, left);\n if (s.held === 0) { keep(s, plus(shown, top)); return; }\n if (shown.some((x) => x !== 0)) absorb(s, shown);\n if (top.some((x) => x !== 0)) keep(s, top);\n}\n\n/** Leaves `delta`, what a stopping animation was showing on top of the committed value's own\n * move, where the target keeps showing it: in the committed value, or beside it while a hold\n * stands in front of that. */\nexport function keep<T>(s: TargetState<T>, delta: readonly number[]): void {\n if (s.discard) return;\n if (s.held === 0) absorb(s, delta);\n else s.beside = s.beside ? plus(s.beside, delta) : delta.slice();\n s.row?.table.mark(s.row.index);\n}\n\n/** The committed value's axes as an animation about to commit a destination finds them: with\n * what `keep` left beside it, which that destination replaces. */\nexport function takeUp<T>(s: TargetState<T>): number[] {\n const committed = s.axes.to(s.get());\n const beside = s.beside;\n s.beside = null;\n return beside ? plus(committed, beside) : committed;\n}\n\n/** The targets one animator is moving. */\nexport interface TargetBook {\n /** Counts one more animation on `s`. Throws where another animator is moving it. */\n attach(s: TargetState): void;\n /** Counts one fewer. */\n detach(s: TargetState): void;\n /** Called once the frame's voices are read: what `adjust` held is in that reading now. */\n settle(): void;\n /** Called once `s`'s voices are read again mid-frame: all that reading left out is `queued`. */\n reread(s: TargetState, queued: readonly number[]): void;\n /** Hands each moving target, and each that came to rest since the last call, to its `show`. */\n show(): void;\n /** Shows `s` now, where an animation just started on it or was redirected. */\n showNow(s: TargetState): void;\n /** Whether a target came to rest since the last `show`. */\n readonly resting: boolean;\n}\n\nexport function createTargetBook(owner: Omit<TargetOwner, 'adjusted'>): TargetBook {\n /** The targets whose `adjust` holds something. A frame walks these and not every moving target. */\n const adjusted: TargetState[] = [];\n const token: TargetOwner = { ...owner, adjusted: (s) => { adjusted.push(s); } };\n /** The moving targets with a `show`: the ones a frame has to call. */\n const showing = new Set<TargetState>();\n const rested = new Set<TargetState>();\n const publishes = new Set<() => void>();\n /** Each table with a row moving, and how many of its rows are. */\n const tables = new Map<RowTable, number>();\n const shown = (s: TargetState, value: unknown): void => {\n s.show!(value);\n if (s.publish) publishes.add(s.publish);\n };\n const publish = (): void => {\n for (const p of publishes) p();\n publishes.clear();\n };\n return {\n attach(s) {\n if (s.owner && s.owner !== token) {\n throw new Error('animator: this target is being moved by another animator');\n }\n s.owner = token;\n s.live += 1;\n if (s.show) showing.add(s);\n rested.delete(s);\n if (s.row) {\n tables.set(s.row.table, (tables.get(s.row.table) ?? 0) + 1);\n s.row.table.mark(s.row.index);\n }\n },\n detach(s) {\n s.live -= 1;\n if (s.row) {\n tables.set(s.row.table, tables.get(s.row.table)! - 1);\n s.row.table.mark(s.row.index);\n }\n if (s.live > 0) return;\n s.owner = null;\n s.slot = null;\n s.beside = null;\n s.behind.clear();\n s.dimmed = false;\n s.adjust.fill(0);\n s.stale = false;\n if (s.show && showing.delete(s)) rested.add(s);\n },\n settle() {\n for (const s of adjusted) {\n // One that came to rest since is cleared already, and may be another animator's now.\n if (!s.stale || s.owner !== token) continue;\n s.adjust.fill(0);\n s.stale = false;\n }\n adjusted.length = 0;\n for (const t of tables.keys()) t.settle();\n },\n reread(s, queued) {\n for (let i = 0; i < queued.length; i++) s.adjust[i] = queued[i]!;\n stale(s);\n s.row?.table.mark(s.row.index);\n },\n show() {\n for (const s of showing) shown(s, readTarget(s));\n for (const s of rested) shown(s, s.get());\n rested.clear();\n for (const [t, moving] of tables) {\n t.fill(owner.columns(t));\n if (moving === 0) tables.delete(t);\n }\n publish();\n },\n showNow(s) {\n if (!s.show) return;\n shown(s, readTarget(s));\n publish();\n },\n get resting() { return rested.size > 0; },\n };\n}\n","import { travel } from '../engine/offsets';\nimport { stateOf, type TargetAxes } from '../target';\nimport type { SampledTrack } from './types';\n\n/** A targeted track's keys in its target's axes. */\nexport interface TargetStops<T> {\n axes: TargetAxes<T>;\n /** One row a key. On an angle axis each carries on from the key before by the short way\n * round, so a row may sit whole turns from the value its key names. */\n stops: number[][];\n}\n\nexport function targetStops<T>(track: SampledTrack<T>): TargetStops<T> {\n const { axes } = stateOf(track.target!);\n const stops: number[][] = [];\n for (const k of track.keys) {\n const row = axes.to(k.value);\n if (row.length !== axes.count || !row.every((x) => typeof x === 'number' && !Number.isNaN(x))) {\n throw new Error(\"sampleTrack: a key's value is not its target's shape\");\n }\n const prev = stops[stops.length - 1];\n if (prev && axes.angles) {\n const short = travel(axes, row, prev);\n for (const i of axes.angles) if (short[i] !== row[i]! - prev[i]!) row[i] = prev[i]! + short[i]!;\n }\n stops.push(row);\n }\n return { axes, stops };\n}\n","import { keys as keysPatch, type Patch, type Setting } from '@msb235/blits';\nimport { resolveEasing } from '@weasel-js/geom';\nimport { axesOf } from '../engine/axes';\nimport { targetStops } from './targetStops';\nimport type { SampledTrack } from './types';\n\ntype Out = { v: unknown };\n/** What an interpolated track's stops carry: blits finds the segment and eases it, and the\n * track's own function makes the value. */\ninterface Box { i: number; value: unknown }\n\ninterface Built {\n /** What it was built from, so a cache handed another track, or new keys, rebuilds. */\n track: object;\n keys: readonly unknown[];\n /** Null where there is nothing to interpolate: one key time, or values with no way to lerp. */\n patch: Patch<number, Out, void> | null;\n t0: number;\n span: number;\n /** Every key's time to the value sampling exactly there returns: the later of keys sharing a\n * time, and the key's own value where blits would reach it as `a + (b - a) * ease(1)`. */\n exact: Map<number, unknown>;\n /** For a track that makes its own values, each interior key's time to a fresh value there, so\n * a caller changing its sample leaves the key alone; for a track on a target, every key's. */\n fresh: Map<number, () => unknown> | null;\n first: unknown;\n last: unknown;\n read: (v: unknown) => unknown;\n}\n\nconst NO_SETTING = {} as Setting<void>;\n/** Where a cache holds its track's `Built`; segment indexes start at 1. A `WeakMap` keyed on the\n * cache instead cost about a fifth of every sample. */\nconst BUILT = -1;\n\nfunction build<T>(track: SampledTrack<T>, cache: Map<number, (u: number) => T> | undefined): Built {\n const { keys } = track;\n let t0 = Infinity;\n let t1 = -Infinity;\n const exact = new Map<number, unknown>();\n for (const k of keys) {\n t0 = Math.min(t0, k.t);\n t1 = Math.max(t1, k.t);\n exact.set(k.t, k.value);\n }\n const span = t1 - t0;\n const out: Built = { track, keys, patch: null, t0, span, exact, fresh: null, first: keys[0].value, last: keys[keys.length - 1].value, read: (v) => v };\n const { interpolator, interpolate } = track;\n const onTarget = track.target && !interpolator && !interpolate ? targetStops(track) : null;\n if (onTarget) {\n // A key answers as a sample between keys does: built from its axes, turns carried over.\n const { axes, stops } = onTarget;\n out.fresh = new Map(keys.map((k, i) => [k.t, () => axes.from(stops[i])]));\n out.first = axes.from(stops[0]);\n out.last = axes.from(stops[stops.length - 1]);\n }\n if (span <= 0) return out;\n\n const ease = (k: (typeof keys)[number]) => (k.easing ? resolveEasing(k.easing) : undefined);\n if (onTarget) {\n const { axes, stops } = onTarget;\n out.patch = keysPatch<number, Out>(\n 1,\n keys.map((k, i) => ({ at: (k.t - t0) / span, delta: { v: stops[i] }, ease: ease(k) })),\n );\n out.read = (v) => axes.from(v as number[]);\n return out;\n }\n if (interpolator || interpolate) {\n const boxes: Box[] = keys.map((k, i) => ({ i, value: k.value }));\n const lerp = (a: Box, b: Box, u: number): Box => {\n if (interpolator) {\n let fn = cache?.get(b.i);\n if (!fn) {\n fn = interpolator(a.value as T, b.value as T);\n cache?.set(b.i, fn);\n }\n return { i: -1, value: fn(u) };\n }\n return { i: -1, value: interpolate!(a.value as T, b.value as T, u) };\n };\n out.patch = keysPatch<number, Out>(\n 1,\n keys.map((k, i) => ({ at: (k.t - t0) / span, delta: { v: boxes[i] }, ease: ease(k) })),\n { lerpBy: () => lerp as (a: never, b: never, u: number) => unknown },\n );\n out.read = (v) => (v as Box).value;\n out.fresh = new Map();\n for (let i = 0; i < keys.length - 1; i++) {\n const at = keys[i].t;\n if (at > t0 && at < t1) out.fresh.set(at, () => lerp(boxes[i], boxes[i + 1], 0).value);\n }\n return out;\n }\n\n const axes = axesOf(keys[0].value);\n if (!axes) return out;\n for (const k of keys) {\n if (axesOf(k.value)?.shape !== axes.shape) {\n throw new Error(`sampleTrack: every key needs the shape of the first (${axes.shape})`);\n }\n }\n const scalar = axes.shape === 'number';\n out.patch = keysPatch<number, Out>(\n 1,\n keys.map((k) => ({ at: (k.t - t0) / span, delta: { v: scalar ? k.value : axes.to(k.value) }, ease: ease(k) })),\n );\n if (!scalar) out.read = (v) => axes.from(v as number[]);\n return out;\n}\n\n/**\n * Sample a track at `t`. Pure: no state, no side effects, safe to call for any\n * `t` in any order — which is what makes scrubbing free.\n *\n * `segmentCache` holds what sampling builds from the keys: the track's blits\n * patch and its `interpolator` factories. Handed another track or a replaced\n * `keys` array, it rebuilds; a key edited in place needs the cache dropped,\n * which `createTimeline` does on `edit`. With no cache, every call builds afresh.\n */\nexport function sampleTrack<T>(\n track: SampledTrack<T>,\n t: number,\n segmentCache?: Map<number, (u: number) => T>,\n): T | undefined {\n if (track.keys.length === 0) return undefined;\n const cache = segmentCache as Map<number, unknown> | undefined;\n let b = cache?.get(BUILT) as Built | undefined;\n if (!b || b.track !== track || b.keys !== track.keys) {\n cache?.clear();\n b = build(track, segmentCache);\n cache?.set(BUILT, b);\n }\n if (Number.isNaN(t)) return b.first as T;\n const fresh = b.fresh?.get(t);\n if (fresh) return fresh() as T;\n const hit = b.exact.get(t);\n if (hit !== undefined || b.exact.has(t)) return hit as T;\n if (!b.patch) {\n if (t < b.t0) return b.first as T;\n if (t >= b.t0 + b.span) return b.last as T;\n throw new Error('sampleTrack: interpolate or interpolator is required for non-numeric keyframe values');\n }\n return b.read(b.patch.at((t - b.t0) / b.span, 0, NO_SETTING).v) as T;\n}\n","import type { Target } from '../target';\nimport { sampleTrack } from './sampleTrack';\nimport type { SampledTrack, Track } from './types';\n\n/** A targeted track's voice on its target. */\nexport interface TrackHold {\n /** Says the track's value changed since the frame read it. */\n touch(): void;\n /** Takes the voice off, committing what the target was showing when `commit`. */\n leave(commit: boolean): void;\n}\n\n/** How a timeline holds a target: the animator's seam, so a timeline knows nothing of voices. */\nexport type OpenTrackHold = (\n target: Target<unknown>,\n value: () => unknown,\n weight: () => number,\n axes?: readonly (number | string)[],\n) => TrackHold;\n\n/** A timeline's sampled tracks: sampled at the playhead, and held on the targets they name. */\nexport interface TrackSampler {\n /** Samples every sampled track at `t`, at any depth. */\n apply(tracks: Track[], t: number): void;\n /** After an edit: what sampling built from the keys is stale. */\n edited(): void;\n /** Lets go of every target, each committing what it was showing. */\n release(): void;\n}\n\ninterface Held {\n hold: TrackHold | null;\n value: unknown;\n /** Where the playhead last stood against the track's keys. */\n where: 'before' | 'inside' | 'after' | null;\n t: number;\n edit: number;\n pass: number;\n}\n\nexport function createTrackSampler(open?: OpenTrackHold): TrackSampler {\n // Per-sampled-track sampling caches, dropped wholesale by `edited`.\n let caches = new WeakMap<object, Map<number, (u: number) => unknown>>();\n const cacheFor = (track: object): Map<number, (u: number) => unknown> => {\n let c = caches.get(track);\n if (!c) { c = new Map(); caches.set(track, c); }\n return c;\n };\n const held = new Map<SampledTrack<unknown>, Held>();\n let edit = 0;\n let pass = 0;\n\n const openOn = (st: SampledTrack<unknown>, h: Held): TrackHold => {\n if (!open) throw new Error('timeline: a track with a `target` needs a timeline made by an animator');\n const w = st.weight ?? 1;\n return open(st.target!, () => h.value, typeof w === 'function' ? w : () => w, st.axes);\n };\n\n const place = (st: SampledTrack<unknown>, value: unknown, t: number): void => {\n let h = held.get(st);\n if (!h) held.set(st, h = { hold: null, value, where: null, t, edit, pass });\n const moved = h.t !== t || h.edit !== edit;\n h.value = value;\n h.t = t;\n h.edit = edit;\n h.pass = pass;\n const { keys } = st;\n const where = t < keys[0].t ? 'before' : t > keys[keys.length - 1].t ? 'after' : 'inside';\n if (where === 'inside') {\n if (!h.hold) h.hold = openOn(st, h);\n else if (moved) h.hold.touch();\n } else if (where === 'before') {\n h.hold?.leave(false);\n h.hold = null;\n } else if (h.where !== 'after') {\n // Past its last key the move is made: the target keeps it, and is free for others to move.\n (h.hold ?? openOn(st, h)).leave(true);\n h.hold = null;\n }\n h.where = where;\n };\n\n const visit = (tracks: Track[], t: number): void => {\n for (const track of tracks) {\n if (track.kind === 'sampled') {\n const st = track as SampledTrack<unknown>;\n const v = sampleTrack(st, t, cacheFor(st));\n if (v === undefined) continue;\n if (st.target) place(st, v, t);\n st.onTick?.(v);\n } else if (track.kind === 'timeline') {\n visit(track.timeline.tracks, t - track.at);\n }\n }\n };\n\n return {\n apply(tracks, t) {\n pass += 1;\n visit(tracks, t);\n // A track an edit took out of the timeline, or emptied, was not sampled this pass.\n for (const [st, h] of held) {\n if (h.pass === pass) continue;\n h.hold?.leave(true);\n held.delete(st);\n }\n },\n edited() {\n caches = new WeakMap();\n edit += 1;\n },\n release() {\n for (const h of held.values()) {\n if (!h.hold) continue;\n h.hold.leave(true);\n h.hold = null;\n h.where = null;\n }\n },\n };\n}\n","import { createEmitter } from '@weasel-js/registry';\nimport type { AnimationHandle } from '../types';\nimport { createBooker } from './booking';\nimport { createEventFirer } from './fireEvents';\nimport { createTrackSampler, type OpenTrackHold } from './trackHolds';\nimport type { EventTrack, TimelineEvent, TimelineHandle, TimelineOptions, Track } from './types';\n\n/** The animator's internal `register`, narrowed to what a timeline needs. */\nexport type TimelineRegister = (seed: {\n id: number;\n cancelKey?: string;\n /** Registers under an existing `cancelKey` without cancelling whoever holds\n * it. A revived timeline is the same animation, not a new claim on the key. */\n keepExisting?: boolean;\n /** `scale` is the effective time scale this frame advanced at, zero while\n * paused at any level. */\n tick: (virtualNow: number, scale?: number) => boolean;\n onCancel?: () => void;\n kind: 'timeline';\n label?: string;\n progress?: () => number;\n}) => AnimationHandle;\n\n/** Where a timeline reports its crossings and laps to `animator.watch`. Each\n * call site checks `watched` first, so an unwatched timeline builds nothing. */\nexport interface TimelineReport {\n readonly watched: boolean;\n /** `path` is a scratch stack the timeline goes on mutating; copy it to keep it. */\n fire(track: EventTrack, path: readonly number[], event: TimelineEvent, lateBy: number): void;\n lap(lap: number): void;\n}\n\n/** End time of a track: its last key/event, or a nested timeline's own end. */\nfunction trackEnd(track: Track): number {\n switch (track.kind) {\n case 'sampled': return track.keys.length ? track.keys[track.keys.length - 1].t : 0;\n case 'event': return track.events.length ? track.events[track.events.length - 1].t : 0;\n case 'timeline': return track.at + tracksEnd(track.timeline.tracks, track.timeline.duration);\n }\n}\n\nfunction tracksEnd(tracks: Track[], explicit?: number): number {\n if (explicit != null) return explicit;\n let max = 0;\n for (const t of tracks) max = Math.max(max, trackEnd(t));\n return max;\n}\n\n/** Hands `take` the laps a playhead at or past `duration` has crossed, of those left, all at\n * once: a frame that skips whole laps fires the outgoing lap's tail and the lap it lands in,\n * and nothing of the laps in between. */\nfunction crossLaps(playhead: number, duration: number, loopsLeft: number, take: (laps: number) => void): void {\n if (duration <= 0 || playhead < duration) return;\n const laps = Math.min(Math.floor(playhead / duration), loopsLeft);\n if (laps > 0) take(laps);\n}\n\n/**\n * Create a timeline as a registered animator animation.\n *\n * The playhead is NOT the entry's `virtualNow` directly — it is\n * `virtualNow + offset`, where `offset` is what `seek` and looping move.\n *\n * A finished timeline leaves the animator's table, so `seek` and a\n * duration-extending `edit` re-register it. Staying registered instead would\n * hold a slot — and the rAF loop — open for every timeline ever created.\n */\nexport function createTimeline(\n register: TimelineRegister,\n id: number,\n opts: TimelineOptions,\n report?: TimelineReport,\n hold?: OpenTrackHold,\n): TimelineHandle {\n let duration = tracksEnd(opts.tracks, opts.duration);\n let offset = 0;\n let lastVirtual = 0;\n let playhead = 0;\n let prevPlayhead = -Infinity;\n /** A seek leaves the event it landed on unfired, so the next span starts at it. */\n let prevOpen = false;\n /** A held playhead fires nothing: what it sits on waits for playback to move. */\n let held = false;\n let done = false;\n let live = true;\n let cancelled = false;\n let wantPaused = opts.autoplay === false;\n let wantScale = 1;\n\n const edited = createEmitter();\n const playback = createEmitter();\n const playbackChanged = playback.emit;\n\n const loopOpt = opts.loop ?? false;\n let loopsLeft = loopOpt === true ? Infinity : loopOpt === false ? 0 : loopOpt;\n let lap = 0;\n\n const booker = opts.booking\n ? createBooker(opts.booking, {\n tracks: opts.tracks,\n duration: () => duration,\n lapsLeft: () => loopsLeft,\n lap: () => lap,\n playhead: () => playhead,\n })\n : null;\n const sampler = createTrackSampler(hold);\n\n const fireEvents = createEventFirer(report, booker !== null);\n\n // Flush the outgoing pass's tail before re-arming, or an event between the\n // last tick and `duration` is dropped whenever a frame straddles the seam.\n const onWrap = (): void => {\n if (!held) fireEvents(opts.tracks, prevPlayhead, duration, prevOpen);\n prevPlayhead = -Infinity;\n prevOpen = false;\n if (report?.watched) report.lap(lap);\n };\n\n const tick = (virtualNow: number, scale?: number): boolean => {\n lastVirtual = virtualNow;\n const rate = scale ?? (base.isPaused() ? 0 : base.timeScale());\n held = rate === 0;\n // A held playhead a seek left on the seam is the end of its lap until it plays.\n const parked = held && duration > 0 && playhead === duration && loopsLeft > 0;\n if (!parked) {\n playhead = virtualNow + offset;\n crossLaps(playhead, duration, loopsLeft, (laps) => {\n loopsLeft -= laps;\n offset -= laps * duration;\n playhead -= laps * duration;\n lap += laps;\n onWrap();\n });\n }\n\n const finished = playhead >= duration && !parked;\n playhead = Math.min(playhead, duration);\n\n // Sampled before fired, so a handler reads the current frame's values.\n sampler.apply(opts.tracks, playhead);\n if (!held) {\n fireEvents(opts.tracks, prevPlayhead, playhead, prevOpen);\n prevPlayhead = playhead;\n prevOpen = false;\n }\n booker?.tick(virtualNow, rate);\n\n if (finished && !done) { done = true; opts.onDone?.(); playbackChanged(); }\n // Re-read: `onDone` may have seeked back or extended the duration, and\n // retiring the entry would strand the replay its own handler just started.\n if (playhead < duration || parked) return false;\n live = false;\n sampler.release();\n return true;\n };\n\n // Every cancel path inside the animator routes through here, so a timeline\n // cancelled by key or by `cancelAll` is as dead as one cancelled by hand.\n const onCancel = (): void => {\n const first = !cancelled;\n cancelled = true;\n live = false;\n booker?.retract();\n sampler.release();\n if (first) playbackChanged();\n };\n\n const seed = { id, cancelKey: opts.cancelKey, tick, onCancel, kind: 'timeline' as const, label: opts.label, progress: () => (duration > 0 ? playhead / duration : 1) };\n const base = register(seed);\n\n // A paused entry's scale is zero, so `virtualNow` never advances and the\n // playhead holds at 0 until the consumer resumes.\n if (opts.autoplay === false) base.pause();\n\n /** Put a finished timeline back on the animator's table. A re-registered\n * entry's `virtualNow` restarts at 0, so `offset` carries the playhead. */\n const rearm = (): void => {\n if (cancelled || playhead >= duration) return;\n done = false;\n if (live) return;\n booker?.rearm();\n lastVirtual = 0;\n offset = playhead;\n live = true;\n register({ ...seed, keepExisting: true });\n if (wantPaused) base.pause();\n base.setTimeScale(wantScale);\n };\n\n // Not left to the next frame: whoever seeks or edits and then reads a target sees it.\n const sampleNow = (): void => {\n if (live && playhead >= 0 && playhead < duration) sampler.apply(opts.tracks, playhead);\n };\n return {\n ...base,\n // Not just `onCancel`: cancelling a finished timeline never reaches the\n // animator, and must still keep a later seek from reviving it.\n cancel() { onCancel(); base.cancel(); },\n // Playback intent is tracked here, not read back from the entry: a revived\n // one is a fresh registration, and defaults to running at scale 1.\n pause() { wantPaused = true; base.pause(); booker?.retract(); playbackChanged(); },\n resume() { wantPaused = false; base.resume(); playbackChanged(); },\n setTimeScale(s) { wantScale = s; base.setTimeScale(s); playbackChanged(); },\n timeScale: () => (live ? base.timeScale() : wantScale),\n isPaused: () => (live ? base.isPaused() : wantPaused),\n seek(t) {\n booker?.retract();\n offset = t - lastVirtual;\n playhead = t;\n prevPlayhead = t;\n prevOpen = true;\n booker?.seek();\n rearm();\n sampleNow();\n playbackChanged();\n },\n time: () => playhead,\n duration: () => duration,\n tracks: () => opts.tracks,\n setLoop(loop) {\n loopsLeft = loop === true ? Infinity : loop === false ? 0 : loop;\n booker?.retract();\n playbackChanged();\n },\n loop: () => (loopsLeft === Infinity ? true : loopsLeft === 0 ? false : loopsLeft),\n edit(fn) {\n fn();\n sampler.edited();\n duration = tracksEnd(opts.tracks, opts.duration);\n booker?.retract();\n rearm();\n sampleNow();\n edited.emit();\n },\n subscribe: edited.subscribe,\n subscribePlayback: playback.subscribe,\n };\n}\n","import type { DecayOptions, PhysicsOptions, TargetDecayOptions, TargetPhysicsOptions } from '../types';\n\n/** A decay as the coast `physics` runs. Per-second friction v(t) = v0 * friction^t is\n * m*dv/dt = -c*v with c = -ln(friction), m = 1, k = 0. */\nexport function decayAsPhysics<T>(o: DecayOptions<T> | TargetDecayOptions<T>): PhysicsOptions<T> | TargetPhysicsOptions<T> {\n const shared = {\n from: o.from, to: null, velocity: o.velocity,\n stiffness: 0, damping: -Math.log(o.friction ?? 0.95), mass: 1, restThreshold: o.threshold ?? 0.5,\n onTick: o.onTick, onDone: o.onDone, cancelKey: o.cancelKey, label: o.label,\n };\n if (o.target) return { ...shared, target: o.target, interrupt: o.interrupt };\n return {\n ...shared,\n from: o.from,\n onTick: o.onTick,\n add: o.add,\n // DecayOptions doesn't carry subtract; derive from add+scale.\n subtract: (a, b) => o.add(a, o.scale(b, -1)),\n scale: o.scale,\n magnitude: o.magnitude,\n };\n}\n","import { axisIndexes } from '../axisNames';\nimport { committedInto, type TargetState } from '../target';\nimport type { AnimationContext } from './context';\nimport { absorb, axesFor, shortWay } from './offsets';\n\n/** What {@link openHold} takes. */\nexport interface HoldSource<T> {\n target: TargetState<T>;\n /** The value to show in place of the committed one, read whenever the target is. */\n value(): T;\n /** Its share among the target's holds, read as `value` is. */\n weight(): number;\n /** The axes it holds, by index or by the target's names for them. Default: all of them. */\n axes?: readonly (number | string)[];\n /** True where `value` and `weight` answer the same until `touch` says otherwise. A target\n * whose holds are all so is read again only when touched, or when its committed value moves. */\n fixed?: boolean;\n}\n\n/** A hold on its target, apart from any row on the animator's table. */\nexport interface OpenHold {\n /** Says `value` or `weight` changed outside a frame's own reading of them. */\n touch(): void;\n /** Takes the hold off the target. With `commit`, the committed value moves so that what the\n * target shows stays where it was. */\n leave(commit: boolean): void;\n}\n\ninterface Member {\n /** Its value's axes, in an array of its own that the next call writes over. */\n value(): number[];\n weight(): number;\n /** Nonzero at each axis it holds; null where it holds them all. */\n covers: Uint8Array | null;\n fixed: boolean;\n /** Its weight and value as the fold now running read them. */\n w: number;\n v: number[];\n}\n\n/** A target's holds, which reach it as one voice. */\ninterface Group {\n members: Member[];\n /** The voice's id in the codec. */\n voice: number;\n /** Nonzero at each angle axis. */\n angle: Uint8Array;\n}\n\nconst groups = new WeakMap<TargetState, Group>();\n\nconst share = (w: number): number => (w > 0 ? Math.min(w, 1) : 0);\n\ninterface Folded {\n /** What the holds add to the committed value. */\n delta: number[];\n /** The weight holding each axis. */\n total: number[];\n}\n\n/**\n * A group's holds as one distance from `committed`, without `skip`. On each axis the holds\n * over it are alternatives: one weighs `w / max(1, total)`, and what their weights leave short\n * of 1 is the committed value's. An angle goes by way of the direction the holds average to,\n * so two holds turn the short way toward each other.\n */\nfunction fold(group: Group, committed: readonly number[], skip?: Member, into?: Folded): Folded {\n const n = committed.length;\n const delta = into ? into.delta : new Array<number>(n);\n const total = into ? into.total : new Array<number>(n);\n const { members, angle } = group;\n // Each member is asked once, whatever the axes: its weight and value are the caller's functions.\n for (let h = 0; h < members.length; h++) {\n const m = members[h]!;\n m.w = m === skip ? 0 : m.weight();\n if (m.w > 0) m.v = m.value();\n }\n for (let a = 0; a < n; a++) {\n const c = committed[a]!;\n let held = 0;\n let sum = 0;\n let sin = 0;\n let cos = 0;\n for (let h = 0; h < members.length; h++) {\n const m = members[h]!;\n if (m === skip || !(m.w > 0) || (m.covers && !m.covers[a])) continue;\n held += m.w;\n if (!angle[a]) sum += m.w * (m.v[a]! - c);\n else {\n sin += m.w * Math.sin(m.v[a]!);\n cos += m.w * Math.cos(m.v[a]!);\n }\n }\n total[a] = held;\n if (held > 0 && angle[a]) {\n // Where the directions cancel out there is no way round between them: each from committed.\n const mean = Math.hypot(sin, cos) < 1e-9 ? null : Math.atan2(sin, cos);\n for (let h = 0; h < members.length; h++) {\n const m = members[h]!;\n if (m === skip || !(m.w > 0) || (m.covers && !m.covers[a])) continue;\n sum += m.w * (mean === null ? shortWay(m.v[a]! - c) : shortWay(mean - c) + shortWay(m.v[a]! - mean));\n }\n }\n delta[a] = held > 0 ? sum / Math.max(1, held) : 0;\n }\n return into ?? { delta, total };\n}\n\n/** How far the committed value moves as `leaving` goes, so the target shows what it did. */\nfunction settle(group: Group, leaving: Member, committed: readonly number[]): number[] {\n const all = fold(group, committed);\n const rest = fold(group, committed, leaving);\n const own = leaving.value().slice();\n return committed.map((c, a) => {\n if (leaving.covers && !leaving.covers[a]) return 0;\n // Holds that cover the committed value outright leave it nothing to show: it takes this one's.\n if (rest.total[a]! >= 1 - 1e-9) return group.angle[a] ? shortWay(own[a]! - c) : own[a]! - c;\n return (all.delta[a]! - rest.delta[a]!) / (1 - rest.total[a]!);\n });\n}\n\n/**\n * Keeps what shows of each move behind `s`'s holds as their weights go from `before` to\n * `after` on a release that commits: a hold that covered a share of a move takes that share\n * with it, so the move goes on as far as it was showing and no further.\n */\nfunction dim(s: TargetState, before: readonly number[], after: readonly number[]): void {\n for (const b of s.behind) {\n for (let a = 0; a < before.length; a++) {\n const open = 1 - Math.min(after[a]!, 1);\n const was = 1 - Math.min(before[a]!, 1);\n if (open < 1e-9 || open === was) continue;\n b.kept ??= new Array<number>(before.length).fill(1);\n b.kept[a] = (b.kept[a]! * was) / open;\n s.dimmed = true;\n }\n }\n}\n\nfunction coverOf(wanted: readonly (number | string)[] | undefined, axes: TargetState['axes']): Uint8Array | null {\n if (!wanted) return null;\n const covers = new Uint8Array(axes.count);\n for (const a of axisIndexes(axes, wanted)) covers[a] = 1;\n return covers;\n}\n\n/** Holds a value on a target: it shows `value` where the committed value would show. */\nexport function openHold<T>(ctx: AnimationContext, o: HoldSource<T>): OpenHold {\n const s = o.target;\n const ax = s.axes;\n const state = s as unknown as TargetState;\n axesFor(ax, o.value(), 'value');\n let gone = false;\n const buffer = new Array<number>(ax.count).fill(0);\n const member: Member = {\n value: ax.write\n ? () => {\n ax.write!(o.value(), buffer, 0);\n return buffer;\n }\n : () => ax.to(o.value()),\n weight: () => (gone ? 0 : share(o.weight())),\n covers: coverOf(o.axes, ax),\n fixed: o.fixed === true,\n w: 0,\n v: buffer,\n };\n\n ctx.targets.attach(state);\n s.held += 1;\n let group = groups.get(state);\n if (!group) {\n const angle = new Uint8Array(ax.count);\n for (const a of ax.angles ?? []) angle[a] = 1;\n const made: Group = { members: [], voice: ctx.nextId(), angle };\n const folded: Folded = { delta: [], total: new Array<number>(ax.count).fill(0) };\n groups.set(state, group = made);\n ctx.seedClock();\n s.slot = ctx.codec.hold({\n id: made.voice,\n on: s,\n axes: ax.count,\n still: member.fixed,\n at: () => {\n // One array each for as long as the holds stand: a frame of many holds builds none.\n const committed = (s.heldAt ??= new Array<number>(ax.count).fill(0));\n committedInto(s, committed, 0);\n // The codec keeps what this answers as the voice's own value, so that one is new.\n folded.delta = new Array<number>(ax.count);\n const { delta, total } = fold(made, committed, undefined, folded);\n const cover = (s.cover ??= new Array<number>(ax.count).fill(0));\n for (let a = 0; a < cover.length; a++) cover[a] = Math.min(total[a]!, 1);\n return delta;\n },\n });\n }\n const { members, voice } = group;\n members.push(member);\n const still = (): void => ctx.codec.still(voice, members.every((m) => m.fixed));\n still();\n ctx.touch(state, true);\n\n return {\n touch: () => { if (!gone) ctx.touch(state); },\n leave(commit) {\n if (gone) return;\n if (commit && !s.discard) {\n const group = groups.get(state)!;\n const committed = ax.to(s.get());\n absorb(s, settle(group, member, committed));\n dim(state, fold(group, committed).total, fold(group, committed, member).total);\n }\n gone = true;\n members.splice(members.indexOf(member), 1);\n s.held -= 1;\n if (s.held === 0) {\n s.heldAt = null;\n s.cover = null;\n groups.delete(state);\n ctx.codec.stop(voice);\n // Nothing stands in front of the committed value now, so it takes what waited beside it.\n const beside = s.beside;\n s.beside = null;\n if (beside) absorb(s, beside);\n } else still();\n ctx.targets.detach(state);\n ctx.touch(state, true);\n },\n };\n}\n","import { stateOf } from '../target';\nimport type { HoldHandle, HoldOptions } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport { openHold } from './holds';\n\nconst isFn = (x: unknown): x is () => unknown => typeof x === 'function';\n\n/** A hold as a row on the animator's table: it stays until canceled or released. */\nexport function startHold<T>(ctx: AnimationContext, o: HoldOptions<T>): HoldHandle {\n const target = stateOf(o.target);\n const id = ctx.nextId();\n const { value, weight = 1 } = o;\n // A hold of plain values changes only when told to, so it asks for no frames of its own.\n const fixed = !isFn(value) && !isFn(weight);\n const seed = {\n id, kind: 'hold', cancelKey: o.cancelKey, label: o.label, target,\n keepExisting: o.interrupt === false,\n idle: fixed,\n // It leaves when released or canceled, and has nothing to do on a frame.\n due: Infinity,\n } as AnimationSeed;\n // Ahead of opening: an interrupted hold commits what it showed, which this one then stands in for.\n if (o.cancelKey != null && o.interrupt !== false) ctx.interrupt(o.cancelKey, seed);\n const held = openHold(ctx, {\n target,\n value: isFn(value) ? (value as () => T) : () => value,\n weight: isFn(weight) ? weight : () => weight,\n axes: o.axes,\n fixed,\n });\n seed.onCancel = () => held.leave(true);\n seed.tick = () => {\n if (!ctx.tripwire()) return false;\n held.leave(true);\n return true;\n };\n const base = ctx.register(seed);\n return {\n ...base,\n touch: held.touch,\n release(r) {\n if (!ctx.has(id)) return;\n held.leave(r?.commit !== false);\n ctx.finish(id);\n },\n };\n}\n","export interface VectorOps<T> {\n add(a: T, b: T): T;\n subtract(a: T, b: T): T;\n scale(v: T, k: number): T;\n}\n\n/** One semi-implicit Euler step of a damped spring toward `target`, or of pure damping when\n * `target` is null. Returns the new value and velocity. */\nexport function stepSpring<T>(\n ops: VectorOps<T>,\n value: T, velocity: T, target: T | null,\n k: number, damping: number, mass: number, dt: number,\n): { value: T; velocity: T } {\n const ref = target ?? value;\n const displacement = ops.subtract(value, ref);\n const springForce = ops.scale(displacement, target == null ? 0 : -k);\n const dampingForce = ops.scale(velocity, -damping);\n const accel = ops.scale(ops.add(springForce, dampingForce), 1 / mass);\n const v = ops.add(velocity, ops.scale(accel, dt));\n return { value: ops.add(value, ops.scale(v, dt)), velocity: v };\n}\n","import { SPRING_PRESETS } from '@weasel-js/geom';\nimport type { AnimationKind, PhysicsHandle, PhysicsOptions } from '../types';\nimport { axesOf } from './axes';\nimport type { SpringReader } from './codec';\nimport type { AnimationContext } from './context';\nimport { stepSpring } from './integrator';\n\nexport function resolveSpringConstants(o: { preset?: string; stiffness?: number; damping?: number; mass?: number }) {\n const preset = o.preset ? SPRING_PRESETS[o.preset as keyof typeof SPRING_PRESETS] : null;\n return {\n stiffness: o.stiffness ?? preset?.stiffness ?? 170,\n damping: o.damping ?? preset?.damping ?? 26,\n mass: o.mass ?? preset?.mass ?? 1,\n };\n}\n\n/** A spring or a coast that hands each frame's value to the caller's `onTick`. */\nexport function startPhysics<T>(\n ctx: AnimationContext,\n o: PhysicsOptions<T>,\n kind: AnimationKind,\n): PhysicsHandle<T> {\n const { codec } = ctx;\n const id = ctx.nextId();\n const isNumeric = typeof o.from === 'number';\n if (!isNumeric && (!o.add || !o.subtract || !o.scale || !o.magnitude)) {\n throw new Error('physics: add/subtract/scale/magnitude are required for non-numeric T');\n }\n const add = o.add ?? ((a: T, b: T) => ((a as unknown as number) + (b as unknown as number)) as unknown as T);\n const subtract = o.subtract ?? ((a: T, b: T) => ((a as unknown as number) - (b as unknown as number)) as unknown as T);\n const scale = o.scale ?? ((v: T, k: number) => ((v as unknown as number) * k) as unknown as T);\n const magnitude = o.magnitude ?? ((v: T) => Math.abs(v as unknown as number));\n const { stiffness: kBase, damping, mass } = resolveSpringConstants(o);\n const restThreshold = o.restThreshold ?? 0.01;\n\n let target: T | null = o.to ?? null;\n let value = o.from;\n // Default to zero velocity: assumes scale(_, 0) returns the zero vector of T. Pass an explicit velocity for unusual T where this isn't true.\n let velocity: T = o.velocity ?? scale(o.from, 0);\n let lastTime: number | null = null;\n\n // blits' closed forms need positive damping and mass, and a spring with a target needs\n // stiffness; decay's handle never takes a target.\n const solvable = damping > 0 && mass > 0 && (kBase > 0 || kind === 'decay');\n const fromAxes = solvable ? axesOf(o.from) : null;\n const sameShape = (v: T | null | undefined): boolean => v == null || axesOf(v)?.shape === fromAxes!.shape;\n const axes = fromAxes && sameShape(o.to) && sameShape(o.velocity) ? fromAxes : null;\n let reader: SpringReader | null = null;\n if (axes) {\n ctx.seedClock();\n // Started ahead of `register`, whose `start` listeners may already cancel it.\n reader = codec.spring({\n id, axes: axes.count,\n from: axes.to(o.from),\n to: o.to == null ? null : axes.to(o.to),\n velocity: o.velocity == null ? new Array<number>(axes.count).fill(0) : axes.to(o.velocity),\n stiffness: kBase, damping, mass,\n });\n }\n\n const baseHandle = ctx.register({\n id,\n kind,\n cancelKey: o.cancelKey,\n label: o.label,\n tick(nowMs) {\n if (ctx.tripwire()) { codec.stop(id); return true; }\n if (lastTime == null) {\n lastTime = nowMs;\n // Already-at-rest short-circuit: decay-mode (target == null)\n // with starting velocity below threshold should complete\n // immediately rather than emit a tick and wait a frame.\n if (target == null && magnitude(velocity) < restThreshold) {\n codec.stop(id);\n ctx.reportEnd(id);\n o.onDone?.();\n return true;\n }\n // The codec's voice has run since registration, so only Euler starts its clock here.\n if (!axes) {\n o.onTick(value);\n return false;\n }\n }\n if (axes) {\n const m = reader!.motion();\n value = axes.from(m.value);\n velocity = axes.from(m.velocity);\n } else {\n // Semi-implicit Euler, for a T blits cannot move as axes, or constants its closed forms can't solve.\n const dt = Math.min(0.064, (nowMs - lastTime) / 1000);\n const next = stepSpring({ add, subtract, scale }, value, velocity, target, kBase, damping, mass, dt);\n value = next.value;\n velocity = next.velocity;\n }\n lastTime = nowMs;\n o.onTick(value);\n const velRested = magnitude(velocity) < restThreshold;\n const posRested = target == null\n ? true\n : magnitude(subtract(value, target)) < restThreshold;\n if (velRested && posRested) {\n if (target != null) o.onTick(target);\n codec.stop(id);\n // As for a tween: canceled from its own onTick, it never completes.\n if (ctx.has(id)) {\n ctx.reportEnd(id);\n o.onDone?.();\n }\n return true;\n }\n return false;\n },\n });\n\n const checkShape = (v: T, what: string): void => {\n if (!sameShape(v)) throw new Error(`physics: ${what} is not the same shape as \\`from\\``);\n };\n return {\n ...baseHandle,\n setTarget: (newTo: T | null) => {\n if (axes && newTo != null) checkShape(newTo, 'setTarget');\n target = newTo;\n if (axes && codec.has(id)) codec.retarget(id, newTo == null ? null : axes.to(newTo));\n },\n setVelocity: (v: T) => {\n if (axes) checkShape(v, 'setVelocity');\n velocity = v;\n if (axes && codec.has(id)) codec.push(id, axes.to(v));\n },\n };\n}\n","/**\n * The soonest a damped spring toward 0 can be at rest, in ms from where it stands at `value`\n * and `velocity`: under `threshold` in both, each as a length over the axes.\n *\n * Damping takes energy out no faster than `2 * damping / mass` of it a second, and at rest the\n * energy is under what `threshold` in both would hold, so the spring cannot be at rest before\n * its energy has had time to fall that far. Never later than the rest itself, and sooner by\n * more the less the spring is damped. With a `stiffness` of 0 it is a coast, at rest once it\n * is slow, and the answer is when that is.\n */\nexport function earliestRest(\n value: readonly number[],\n velocity: readonly number[],\n stiffness: number,\n damping: number,\n mass: number,\n threshold: number,\n): number {\n let energy = 0;\n for (let i = 0; i < value.length; i++) energy += stiffness * value[i]! ** 2 + mass * velocity[i]! ** 2;\n const atRest = (stiffness + mass) * threshold ** 2;\n if (!(energy > atRest)) return 0;\n return ((1000 * mass) / (2 * damping)) * Math.log(energy / atRest);\n}\n","import type { TargetState } from '../target';\nimport type { Codec, Own } from './codec';\nimport { bump, minus, plus } from './offsets';\n\n/** What {@link createSpringVoices} takes. */\nexport interface SpringVoicesOptions {\n /** The animation's id, which its first voice takes. */\n id: number;\n nextId(): number;\n stiffness: number;\n damping: number;\n mass: number;\n}\n\n/**\n * A spring on a target as up to two voices that sum to it. One is the move its destinations\n * made in the committed value, which a hold covers; the other is the rest, which shows on top\n * of a hold: a `from` away from the committed value, a push, a coast. A spring is linear, so\n * the two run apart and add up to the one spring.\n */\nexport interface SpringVoices {\n /** Both voices summed: the animation's whole offset, and its velocity. */\n own(): Own;\n /** What is left of the move. */\n moved(): number[];\n /** Adds `delta` to the move: a destination has moved the committed value by that much. */\n move(delta: readonly number[]): void;\n /** Stops the move's voice, where the committed value has taken what was left of it. */\n settleMove(): void;\n /** Starts the rest over at `from` and `velocity`, toward nothing left or, for a coast, free. */\n rest(from: readonly number[], velocity: readonly number[], coast: boolean): void;\n /** Sets the animation's velocity, by way of the rest. */\n push(velocity: readonly number[]): void;\n rate(rate: number): void;\n stop(): void;\n}\n\nexport function createSpringVoices(codec: Codec, s: TargetState, o: SpringVoicesOptions): SpringVoices {\n const n = s.axes.count;\n const zeros = (): number[] => new Array<number>(n).fill(0);\n const moving = { id: -1 };\n const resting = { id: -1 };\n let first = true;\n let rate = 1;\n let coasting = false;\n\n const of = (v: { id: number }): Own =>\n (v.id >= 0 ? codec.own(v.id) : undefined) ?? { value: zeros(), velocity: zeros() };\n\n const cue = (v: { id: number }, from: readonly number[], velocity: readonly number[], to: number[] | null): void => {\n if (v.id >= 0) {\n const was = codec.own(v.id)!.value;\n codec.recue(v.id, from.slice(), velocity.slice(), to);\n bump(s, minus(from, was), 1);\n return;\n }\n v.id = first ? o.id : o.nextId();\n first = false;\n s.slot = codec.spring({\n id: v.id, on: s, axes: n, from: from.slice(), to, velocity: velocity.slice(),\n stiffness: o.stiffness, damping: o.damping, mass: o.mass,\n });\n if (rate !== 1) codec.rate(v.id, rate);\n bump(s, from, 1);\n };\n\n const drop = (v: { id: number }): void => {\n if (v.id < 0) return;\n const own = codec.own(v.id);\n if (own) bump(s, own.value, -1);\n codec.stop(v.id);\n v.id = -1;\n };\n\n return {\n own() {\n const a = of(moving);\n const b = of(resting);\n return { value: plus(a.value, b.value), velocity: plus(a.velocity, b.velocity) };\n },\n moved: () => of(moving).value,\n move(delta) {\n const m = of(moving);\n cue(moving, plus(m.value, delta), m.velocity, zeros());\n },\n settleMove: () => drop(moving),\n rest(from, velocity, coast) {\n coasting = coast;\n cue(resting, from, velocity, coast ? null : zeros());\n },\n push(velocity) {\n const v = minus(velocity, of(moving).velocity);\n if (resting.id < 0) cue(resting, zeros(), v, coasting ? null : zeros());\n else codec.push(resting.id, v);\n },\n rate(r) {\n rate = r;\n for (const v of [moving, resting]) if (v.id >= 0 && codec.has(v.id)) codec.rate(v.id, r);\n },\n stop() {\n drop(moving);\n drop(resting);\n },\n };\n}\n","import { stateOf } from '../target';\nimport type { AnimationKind, PhysicsHandle, TargetPhysicsOptions } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport { absorb, axesFor, comeOut, commitOffset, goBehind, minus, norm, plus, takeUp, times, travel } from './offsets';\nimport { resolveSpringConstants } from './physicsAnimation';\nimport { earliestRest } from './springRest';\nimport { createSpringVoices } from './springVoices';\n\nconst any = (a: readonly number[]): boolean => a.some((x) => x !== 0);\n\n/** The spring's constants, refused where blits' closed forms cannot solve them. */\nfunction constantsFor(o: Parameters<typeof resolveSpringConstants>[0], kind: AnimationKind, toward: boolean) {\n const c = resolveSpringConstants(o);\n if (!(c.damping > 0) || !(c.mass > 0) || (toward && !(c.stiffness > 0))) {\n throw new Error(`${kind}: an animation on a target needs positive damping and mass, and stiffness to reach \\`to\\``);\n }\n return c;\n}\n\ntype Along = readonly number[];\n\n/** When a spring or a coast with no `onTick` can next be at rest. Until then its tick, which\n * only asks whether it is, has nothing to do. */\nfunction restWaits(\n ctx: AnimationContext,\n id: number,\n quiet: boolean,\n c: { stiffness: number; damping: number; mass: number },\n threshold: number,\n) {\n // Nothing pulls a coast, so it is at rest once it is slow.\n const until = (value: Along, velocity: Along, coast: boolean): number =>\n earliestRest(value, velocity, coast ? 0 : c.stiffness, c.damping, c.mass, threshold);\n return {\n /** The `due` it registers with. */\n first: (value: Along, velocity: Along, coast: boolean): number | undefined =>\n (quiet ? until(value, velocity, coast) : undefined),\n /** Leaves it unticked until then. Answers false, as the tick of one still moving does. */\n again(value: Along, velocity: Along, coast: boolean): false {\n if (quiet) ctx.defer(id, until(value, velocity, coast));\n return false;\n },\n };\n}\n\n/**\n * A spring or a coast on a target. A spring commits its destination as it starts and its voices\n * are what is left to travel. A coast has no destination: its voice is how far it has gone, which\n * it commits when it stops.\n */\nexport function startOffsetPhysics<T>(\n ctx: AnimationContext,\n o: TargetPhysicsOptions<T>,\n kind: AnimationKind,\n): PhysicsHandle<T> {\n const s = stateOf(o.target);\n const ax = s.axes;\n let dest = o.to == null ? null : axesFor(ax, o.to, 'to');\n const constants = constantsFor(o, kind, dest != null);\n const { stiffness, damping, mass } = constants;\n const given = o.from === undefined ? null : axesFor(ax, o.from, 'from');\n let velocity = o.velocity === undefined ? null : axesFor(ax, o.velocity, 'velocity');\n const restThreshold = o.restThreshold ?? 0.01;\n const zeros = (): number[] => new Array<number>(ax.count).fill(0);\n\n const id = ctx.nextId();\n const waits = restWaits(ctx, id, !o.onTick, constants, restThreshold);\n const interrupts = o.interrupt !== false;\n const seed = {\n id, kind, cancelKey: o.cancelKey, label: o.label, target: s, keepExisting: !interrupts,\n } as AnimationSeed;\n if (o.cancelKey != null && interrupts) {\n // Read ahead of the interrupt, which stops the voices whose velocity this is.\n velocity ??= ctx.velocityUnder(o.cancelKey, s as never);\n ctx.interrupt(o.cancelKey, seed);\n }\n const before = ax.to(s.get());\n const committed = dest ? takeUp(s) : before;\n const start = travel(ax, given ?? committed, dest ?? committed);\n /** The move the destination makes in the committed value; the rest of `start` rides on top. */\n const move = dest ? travel(ax, before, dest) : zeros();\n\n ctx.targets.attach(s as never);\n if (o.to != null) s.set(o.to);\n ctx.seedClock();\n const voices = createSpringVoices(ctx.codec, s as never, { id, nextId: ctx.nextId, stiffness, damping, mass });\n if (any(move)) voices.move(move);\n const top = minus(start, move);\n if (!any(move) || any(top) || (velocity && any(velocity))) voices.rest(top, velocity ?? zeros(), dest == null);\n const behind = goBehind(s, voices.moved);\n\n let left = false;\n const leave = (commit: boolean): void => {\n if (left) return;\n left = true;\n const moved = voices.moved();\n const shown = comeOut(s, behind, moved);\n if (commit) commitOffset(s, voices.own().value, moved, shown);\n voices.stop();\n ctx.targets.detach(s as never);\n };\n const finish = (): void => {\n // A coast commits where it stopped; a spring drops what is left under the threshold.\n leave(dest == null);\n ctx.reportEnd(id);\n o.onDone?.();\n };\n\n let ticked = false;\n seed.due = waits.first(start, velocity ?? zeros(), dest == null);\n seed.onCancel = () => leave(true);\n seed.onRate = (paused, timeScale) => voices.rate(paused ? 0 : timeScale);\n seed.velocity = () => voices.own().velocity;\n seed.tick = () => {\n if (ctx.tripwire()) { leave(true); return true; }\n const own = voices.own();\n // A coast too slow to move ends at once rather than emit a tick and wait a frame.\n if (!ticked && dest == null && norm(own.velocity) < restThreshold) {\n finish();\n return true;\n }\n ticked = true;\n o.onTick?.(ax.from(plus(dest ?? ax.to(s.get()), own.value)));\n if (!ctx.has(id)) return true;\n if (norm(own.velocity) >= restThreshold || (dest && norm(own.value) >= restThreshold)) {\n return waits.again(own.value, own.velocity, dest == null);\n }\n if (dest) o.onTick?.(ax.from(dest));\n if (!ctx.has(id)) return true;\n finish();\n return true;\n };\n const base = ctx.register(seed);\n\n return {\n ...base,\n setTarget(next) {\n if (left) return;\n const own = voices.own();\n if (next == null) {\n if (dest == null) return;\n // The committed value stops where the spring had brought it; the coast carries the rest.\n const moved = voices.moved();\n absorb(s, behind.kept ? times(moved, behind.kept) : moved);\n dest = null;\n voices.rest(minus(own.value, moved), own.velocity, true);\n voices.settleMove();\n waits.again(own.value, own.velocity, true);\n return;\n }\n const to = axesFor(ax, next, 'setTarget');\n if (!(stiffness > 0)) throw new Error(`${kind}: setTarget needs a positive stiffness`);\n // The committed value moves under the voices, which shift by as much the other way.\n const shift = travel(ax, ax.to(s.get()), to);\n s.set(next);\n if (dest == null) voices.rest(own.value, own.velocity, false);\n dest = to;\n voices.move(shift);\n waits.again(plus(own.value, shift), own.velocity, false);\n ctx.targets.showNow(s as never);\n },\n setVelocity(v) {\n if (left) return;\n const pushed = axesFor(ax, v, 'setVelocity');\n waits.again(voices.own().value, pushed, dest == null);\n voices.push(pushed);\n },\n };\n}\n","import { easeOut, resolveEasing } from '@weasel-js/geom';\nimport { stateOf } from '../target';\nimport type { AnimationHandle, TargetTweenOptions } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport { axesFor, bump, comeOut, commitOffset, goBehind, minus, plus, shareBehind, takeUp, times, travel } from './offsets';\n\n/** A tween on a target: its destination is committed as it starts, and its voice is what is\n * left to travel. */\nexport function startOffsetTween<T>(ctx: AnimationContext, o: TargetTweenOptions<T>): AnimationHandle {\n const { codec } = ctx;\n const s = stateOf(o.target);\n const ax = s.axes;\n const to = axesFor(ax, o.to, 'to');\n const given = o.from === undefined ? null : axesFor(ax, o.from, 'from');\n const id = ctx.nextId();\n const interrupts = o.interrupt !== false;\n const seed = {\n id, kind: 'tween', cancelKey: o.cancelKey, label: o.label, target: s, keepExisting: !interrupts,\n } as AnimationSeed;\n // Ahead of reading the committed value: an interrupted animation commits where it stopped.\n if (o.cancelKey != null && interrupts) ctx.interrupt(o.cancelKey, seed);\n const committed = ax.to(s.get());\n const base = takeUp(s);\n const from = o.from === undefined ? ax.from(base) : o.from;\n const path = o.interpolator ? o.interpolator(from, o.to)\n : o.interpolate ? (u: number) => o.interpolate!(from, o.to, u)\n : null;\n const easing = resolveEasing(o.easing ?? easeOut);\n const ms = Math.max(o.ms, 1);\n\n ctx.targets.attach(s as never);\n s.set(o.to);\n ctx.seedClock();\n s.slot = path\n ? codec.path({ id, on: s, ms, axes: ax.count, at: (u) => minus(ax.to(path(easing(u))), to) })\n : codec.tween({\n id, on: s, ms, ease: easing,\n from: travel(ax, given ?? base, to),\n to: new Array<number>(ax.count).fill(0),\n });\n bump(s as never, codec.own(id)!.value, 1);\n const share = shareBehind(ax, committed, to, travel(ax, given ?? base, to));\n const behind = goBehind(s, () => times(codec.own(id)!.value, share));\n\n let left = false;\n /** Takes its voice off the target, committing what it had left to travel when `commit`. */\n const leave = (commit: boolean): void => {\n if (left) return;\n left = true;\n const own = codec.own(id);\n const moved = own ? behind.left() : [];\n const shown = comeOut(s, behind, moved);\n if (own) {\n if (commit) commitOffset(s, own.value, moved, shown);\n bump(s as never, own.value, -1);\n }\n codec.stop(id);\n ctx.targets.detach(s as never);\n };\n\n seed.progress = (virtualNow) => (o.ms <= 0 ? 1 : Math.min(1, virtualNow / o.ms));\n // With no `onTick` to call it has nothing to do until it ends.\n if (!o.onTick) seed.due = Math.max(o.ms, 0);\n seed.onCancel = () => leave(true);\n seed.tick = (nowMs) => {\n if (ctx.tripwire()) { leave(true); return true; }\n const t = o.ms <= 0 ? 1 : Math.min(1, nowMs / o.ms);\n if (o.onTick) o.onTick(t >= 1 ? o.to : ax.from(plus(to, codec.own(id)!.value)));\n if (t < 1) return false;\n // That last onTick may have canceled it, which commits where it was and never completes.\n if (!ctx.has(id)) return true;\n leave(false);\n ctx.reportEnd(id);\n o.onDone?.();\n return true;\n };\n return ctx.register(seed);\n}\n","import type { WatchCompletion } from '../supervisor';\n\n/** One-shot listeners for an animation leaving the animator's table, finished or canceled. A\n * stagger watches its children through them, to retire itself when the last one goes. */\nexport interface Completions {\n /** Tells `id`'s listeners it has left, and forgets them. */\n fire(id: number): void;\n watch: WatchCompletion;\n}\n\n/** `has` answers whether an id is still on the table; a watch on one that is not fires at once. */\nexport function createCompletions(has: (id: number) => boolean): Completions {\n const listeners = new Map<number, (() => void)[]>();\n return {\n fire(id) {\n const ls = listeners.get(id);\n if (!ls) return;\n listeners.delete(id);\n for (const cb of ls) cb();\n },\n watch(id, cb) {\n if (!has(id)) {\n cb();\n return () => {};\n }\n const ls = listeners.get(id) ?? [];\n ls.push(cb);\n listeners.set(id, ls);\n return () => {\n const cur = listeners.get(id);\n if (!cur) return;\n const idx = cur.indexOf(cb);\n if (idx >= 0) cur.splice(idx, 1);\n if (cur.length === 0) listeners.delete(id);\n };\n },\n };\n}\n","/** What {@link Wakes} keeps on each thing waiting in it. */\nexport interface Waiting {\n /** The time it is due at; kept by `Wakes`. */\n wakeAt: number;\n /** Its place in the heap; -1 while it is not waiting. */\n heapAt: number;\n /** Orders two due in one call: the lower first. */\n seq: number;\n}\n\n/** Things waiting for a clock to reach a time each, soonest first: a binary heap that knows\n * each one's place, so one can leave or be given another time without a search. */\nexport interface Wakes<W extends Waiting> {\n /** Has `w` wait for `at`, in place of any time it was waiting for. */\n set(w: W, at: number): void;\n /** Stops `w` waiting. */\n remove(w: W): void;\n /** Takes out everything due at or before `now`, in `seq` order. */\n due(now: number): W[];\n clear(): void;\n readonly size: number;\n}\n\nexport function createWakes<W extends Waiting>(): Wakes<W> {\n const heap: W[] = [];\n\n const place = (w: W, i: number): void => {\n heap[i] = w;\n w.heapAt = i;\n };\n const up = (w: W, i: number): void => {\n while (i > 0) {\n const parent = (i - 1) >> 1;\n const p = heap[parent]!;\n if (p.wakeAt <= w.wakeAt) break;\n place(p, i);\n i = parent;\n }\n place(w, i);\n };\n const down = (w: W, i: number): void => {\n const n = heap.length;\n for (;;) {\n let child = 2 * i + 1;\n if (child >= n) break;\n if (child + 1 < n && heap[child + 1]!.wakeAt < heap[child]!.wakeAt) child += 1;\n const c = heap[child]!;\n if (c.wakeAt >= w.wakeAt) break;\n place(c, i);\n i = child;\n }\n place(w, i);\n };\n const remove = (w: W): void => {\n const i = w.heapAt;\n if (i < 0) return;\n w.heapAt = -1;\n const last = heap.pop()!;\n if (last === w) return;\n // The last one takes the gap, and may belong either way from there.\n if (i > 0 && last.wakeAt < heap[(i - 1) >> 1]!.wakeAt) up(last, i);\n else down(last, i);\n };\n\n return {\n set(w, at) {\n remove(w);\n w.wakeAt = at;\n heap.push(w);\n up(w, heap.length - 1);\n },\n remove,\n due(now) {\n const out: W[] = [];\n while (heap.length > 0 && heap[0]!.wakeAt <= now) {\n const w = heap[0]!;\n remove(w);\n out.push(w);\n }\n if (out.length > 1) out.sort((a, b) => a.seq - b.seq);\n return out;\n },\n clear() {\n for (const w of heap) w.heapAt = -1;\n heap.length = 0;\n },\n get size() { return heap.length; },\n };\n}\n","import type { ActiveAnimation } from './context';\nimport { createWakes } from './wakes';\n\n/** Which animations a frame ticks, and each one's own clock. */\nexport interface Schedule {\n /** `a`'s own clock now, in virtual ms. */\n clockOf(a: ActiveAnimation): number;\n /** Takes `a` on, its clock at 0. */\n add(a: ActiveAnimation): void;\n remove(a: ActiveAnimation): void;\n /** Sets `a`'s pause and time scale, leaving its clock where it stands. */\n pace(a: ActiveAnimation, paused: boolean, timeScale: number): void;\n /** Leaves `a` unticked until its clock has run `ms` more, whether it was waiting already or\n * ticked every frame. Nothing for an `a` that has left. */\n defer(a: ActiveAnimation | undefined, ms: number): void;\n /** The animations to tick this frame, in the order they registered: those ticked every\n * frame, and those whose clock has just reached their `due`. */\n ticks(): ActiveAnimation[];\n /** Whether any animation changes from one frame to the next. */\n readonly awake: boolean;\n /** How many animations no frame ticks until they are due. */\n readonly waiting: number;\n clear(): void;\n}\n\n/** `elapsed` answers the animator's clock: its time scale and pauses are already in it. */\nexport function createSchedule(elapsed: () => number): Schedule {\n /** Ticked every frame, in the order they joined. */\n const every = new Set<ActiveAnimation>();\n /** Waiting for the animator's clock to reach the time their own reaches `due`. */\n const wakes = createWakes<ActiveAnimation>();\n let seq = 0;\n let awake = 0;\n /** With a `due` and not yet woken, whether or not a rate above 0 has it in `wakes`. */\n let waiting = 0;\n\n const rateOf = (a: ActiveAnimation): number => (a.paused ? 0 : a.timeScale);\n const clockOf = (a: ActiveAnimation): number => a.base + (elapsed() - a.anchor) * rateOf(a);\n\n const wait = (a: ActiveAnimation): void => {\n const rate = rateOf(a);\n if (rate > 0 && a.due! < Infinity) wakes.set(a, a.anchor + (a.due! - a.base) / rate);\n else wakes.remove(a);\n };\n\n return {\n clockOf,\n add(a) {\n a.base = 0;\n a.anchor = elapsed();\n a.seq = seq++;\n a.heapAt = -1;\n a.wakeAt = Infinity;\n if (!a.idle) awake += 1;\n if (a.due === undefined) {\n every.add(a);\n return;\n }\n waiting += 1;\n wait(a);\n },\n remove(a) {\n if (!a.idle) awake -= 1;\n if (every.delete(a)) return;\n waiting -= 1;\n wakes.remove(a);\n },\n pace(a, paused, timeScale) {\n a.base = clockOf(a);\n a.anchor = elapsed();\n a.paused = paused;\n a.timeScale = timeScale;\n if (!every.has(a)) wait(a);\n },\n defer(a, ms) {\n if (!a) return;\n a.due = clockOf(a) + ms;\n if (every.delete(a)) waiting += 1;\n wait(a);\n },\n ticks() {\n const steady = [...every];\n const woke = wakes.due(elapsed());\n if (woke.length === 0) return steady;\n waiting -= woke.length;\n const out: ActiveAnimation[] = [];\n let i = 0;\n for (const a of woke) {\n // Rounding may leave its clock a hair short of the time it was woken for.\n a.base = Math.max(clockOf(a), a.due!);\n a.anchor = elapsed();\n every.add(a);\n while (i < steady.length && steady[i]!.seq < a.seq) out.push(steady[i++]!);\n out.push(a);\n }\n while (i < steady.length) out.push(steady[i++]!);\n return out;\n },\n get awake() { return awake > 0; },\n get waiting() { return waiting; },\n clear() {\n every.clear();\n wakes.clear();\n awake = 0;\n waiting = 0;\n },\n };\n}\n","import type { TargetState } from '../target';\nimport type { ActiveAnimation } from './context';\nimport { createSchedule, type Schedule } from './schedule';\n\n/** The animations on the table, and the ways a frame and the API find them. */\nexport interface Roster {\n readonly animations: Map<number, ActiveAnimation>;\n readonly schedule: Schedule;\n /** The animations holding `key`, in the order they registered. */\n under(key: string): Iterable<ActiveAnimation>;\n /** The animations moving `target`, in the order they registered. */\n on(target: TargetState): Iterable<ActiveAnimation>;\n /** Puts `a` on the table, in place of one still there under its id: a revived timeline\n * registers again under the id it holds. */\n add(a: ActiveAnimation): void;\n /** Takes `a` off the table, with no report. */\n remove(a: ActiveAnimation): void;\n clear(): void;\n}\n\nconst NONE: Iterable<ActiveAnimation> = [];\n\n/** Files `a` under `key` in `index`, or takes it out. */\nfunction file<K>(index: Map<K, Set<ActiveAnimation>>, key: K, a: ActiveAnimation, on: boolean): void {\n let set = index.get(key);\n if (on) {\n if (!set) index.set(key, set = new Set());\n set.add(a);\n } else if (set?.delete(a) && set.size === 0) index.delete(key);\n}\n\n/** `elapsed` answers the animator's clock, as {@link createSchedule} takes it. */\nexport function createRoster(elapsed: () => number): Roster {\n const animations = new Map<number, ActiveAnimation>();\n const schedule = createSchedule(elapsed);\n // A start interrupts its key and a stop empties its target, and a search of the table for\n // either costs more the more is running.\n const byKey = new Map<string, Set<ActiveAnimation>>();\n const byTarget = new Map<TargetState, Set<ActiveAnimation>>();\n const index = (a: ActiveAnimation, on: boolean): void => {\n if (a.cancelKey != null) file(byKey, a.cancelKey, a, on);\n if (a.target) file(byTarget, a.target, a, on);\n };\n const remove = (a: ActiveAnimation): void => {\n animations.delete(a.id);\n schedule.remove(a);\n index(a, false);\n };\n return {\n animations,\n schedule,\n under: (key) => byKey.get(key) ?? NONE,\n on: (target) => byTarget.get(target) ?? NONE,\n add(a) {\n const had = animations.get(a.id);\n if (had) remove(had);\n animations.set(a.id, a);\n schedule.add(a);\n index(a, true);\n },\n remove,\n clear() {\n animations.clear();\n schedule.clear();\n byKey.clear();\n byTarget.clear();\n },\n };\n}\n","import type { AnimatorEventHub } from '../observe';\nimport type { WatchCompletion } from '../supervisor';\nimport type { TargetState } from '../target';\nimport type { AnimationHandle, AnimationInfo } from '../types';\nimport type { Codec } from './codec';\nimport { createCompletions } from './completions';\nimport type { ActiveAnimation, AnimationSeed } from './context';\nimport { createRoster } from './roster';\n\n/** What {@link createTable} needs of the animator around it. */\nexport interface TableHost {\n codec: Pick<Codec, 'stop' | 'has' | 'rate'>;\n hub: AnimatorEventHub;\n /** The animator's clock: the virtual ms its frames have advanced it by. */\n elapsed(): number;\n /** Starts the frame clock where it stands idle, so a new animation is charged the wait for\n * its first frame. */\n seedClock(): void;\n /** Shows a target as an animation starts on it. */\n showNow(target: TargetState): void;\n /** Whether a target came to rest and is owed one more show. */\n resting(): boolean;\n /** Whether a frame is between reading the codec and showing its targets. */\n framing(): boolean;\n requestFrame(): void;\n}\n\n/** The animator's running animations, and how one joins and leaves. */\nexport interface Table {\n readonly animations: Map<number, ActiveAnimation>;\n infoOf(a: ActiveAnimation): AnimationInfo;\n /** Reports `id` as finished, ahead of its `onDone`, so whatever that handler starts is heard\n * after it. Nothing revives a primitive; a timeline, which can be revived, is reported as it\n * leaves the table. */\n reportEnd(id: number): void;\n /** Takes `id` off the table as canceled, or, given `by`, as interrupted by the animation\n * claiming its key; given `error`, the caller reports it. */\n retire(id: number, by?: ActiveAnimation, error?: true): void;\n cancelByKey(key: string, by?: ActiveAnimation): void;\n /** The animations holding `key`, in the order they registered. */\n under(key: string): Iterable<ActiveAnimation>;\n /** The animations moving `target`, in the order they registered. */\n on(target: TargetState): Iterable<ActiveAnimation>;\n /** Sets `a`'s pause and time scale, and gives its codec subject the rate they ask for. */\n pace(a: ActiveAnimation, paused: boolean, timeScale: number): void;\n /** `a`'s own clock now, in virtual ms. */\n clockOf(a: ActiveAnimation): number;\n /** Leaves `id` unticked until its clock has run `ms` more. */\n defer(id: number, ms: number): void;\n /** The animations to tick this frame, in the order they registered. */\n ticks(): ActiveAnimation[];\n /** Whether any animation changes from one frame to the next. */\n readonly awake: boolean;\n /** How many animations no frame ticks until they are due. */\n readonly waiting: number;\n register(seed: AnimationSeed): AnimationHandle;\n /** Takes `id` off the table as finished. */\n finish(id: number): void;\n /** Takes `a` off the table with no report of its own: it ended and then threw. */\n drop(a: ActiveAnimation): void;\n /** Cancels everything. `cleared` runs once the table is empty, ahead of the reports. */\n cancelAll(cleared: () => void): void;\n watchCompletion: WatchCompletion;\n}\n\n/** `scale` as a time scale, refused below 0: the clock under the animator only goes forward. */\nexport function timeScaleOf(scale: number): number {\n if (!(scale >= 0)) {\n throw new Error(`animator: a time scale is 0 or above, and ${scale} was given; nothing plays backward`);\n }\n return scale;\n}\n\nexport function createTable(host: TableHost): Table {\n const { codec, hub } = host;\n const roster = createRoster(host.elapsed);\n const { animations, schedule, remove } = roster;\n const { fire: fireCompletion, watch: watchCompletion } = createCompletions((id) => animations.has(id));\n\n const infoOf = (a: ActiveAnimation): AnimationInfo => {\n if (!a.info) {\n const info: { -readonly [K in keyof AnimationInfo]: AnimationInfo[K] } = { id: a.id, kind: a.kind };\n if (a.cancelKey != null) info.key = a.cancelKey;\n if (a.label != null) info.label = a.label;\n a.info = info;\n }\n return a.info;\n };\n\n const reportEnd = (id: number): void => {\n const a = animations.get(id);\n if (!a || a.ended) return;\n a.ended = true;\n if (hub.watched) hub.emit({ type: 'end', animation: infoOf(a) });\n };\n\n const retire = (id: number, by?: ActiveAnimation, error?: true): void => {\n const a = animations.get(id);\n if (!a) return;\n a.onCancel?.();\n codec.stop(id);\n remove(a);\n // A target that came to rest is owed one more show, and no frame may be coming.\n if (host.resting()) host.requestFrame();\n fireCompletion(id);\n if (!hub.watched || a.ended || error) return;\n hub.emit(by\n ? { type: 'interrupt', animation: infoOf(a), by: infoOf(by) }\n : { type: 'cancel', animation: infoOf(a) });\n };\n\n const cancelByKey = (key: string, by?: ActiveAnimation): void => {\n // A copy: each one leaves the set as it is retired, and its `onCancel` may retire others.\n for (const a of [...roster.under(key)]) retire(a.id, by);\n };\n\n const pace = (a: ActiveAnimation, paused: boolean, timeScale: number): void => {\n schedule.pace(a, paused, timeScale);\n if (codec.has(a.id)) codec.rate(a.id, paused ? 0 : timeScale);\n a.onRate?.(paused, timeScale);\n };\n\n const register = (seed: AnimationSeed): AnimationHandle => {\n const anim = seed as ActiveAnimation;\n if (seed.cancelKey != null && !seed.keepExisting) cancelByKey(seed.cancelKey, anim);\n anim.paused = false;\n anim.timeScale = 1;\n // Its clock starts with the frame clock, as a voice cued now does: both then advance by\n // the whole of their first frame. Idle, that frame is the wait since the first of the\n // animations it finds was registered.\n host.seedClock();\n roster.add(anim);\n if (anim.target) host.showNow(anim.target);\n if (hub.watched) hub.emit({ type: 'start', animation: infoOf(anim) });\n // A frame in progress asks for the next one itself, after `onTick`: asked for from a tick,\n // it would run ahead of a paint `onTick` requests, and the tick after would paint nothing.\n if (animations.size > 0 && !host.framing()) host.requestFrame();\n const live = (): ActiveAnimation | undefined => animations.get(anim.id);\n return {\n id: anim.id,\n cancel: () => retire(anim.id),\n pause: () => { const a = live(); if (a) pace(a, true, a.timeScale); },\n resume: () => { const a = live(); if (a) pace(a, false, a.timeScale); },\n setTimeScale: (s) => { const a = live(); if (a) pace(a, a.paused, timeScaleOf(s)); },\n timeScale: () => live()?.timeScale ?? 1,\n isPaused: () => live()?.paused ?? false,\n };\n };\n\n return {\n animations,\n infoOf,\n reportEnd,\n retire,\n cancelByKey,\n under: roster.under,\n on: roster.on,\n pace,\n clockOf: schedule.clockOf,\n defer: (id, ms) => schedule.defer(animations.get(id), ms),\n ticks: schedule.ticks,\n get awake() { return schedule.awake; },\n get waiting() { return schedule.waiting; },\n register,\n finish(id) {\n const a = animations.get(id);\n if (!a) return;\n reportEnd(id);\n remove(a);\n fireCompletion(id);\n },\n drop(a) {\n remove(a);\n fireCompletion(a.id);\n },\n cancelAll(cleared) {\n const retired: ActiveAnimation[] = [];\n // Over the table as it stands: one an earlier `onCancel` retired is not canceled twice.\n for (const a of animations.values()) {\n a.onCancel?.();\n codec.stop(a.id);\n retired.push(a);\n }\n roster.clear();\n cleared();\n for (const a of retired) fireCompletion(a.id);\n if (hub.watched) for (const a of retired) hub.emit({ type: 'cancel', animation: infoOf(a) });\n },\n watchCompletion,\n };\n}\n","import { easeOut, resolveEasing } from '@weasel-js/geom';\nimport type { AnimationHandle, TweenOptions } from '../types';\nimport { axesOf } from './axes';\nimport type { AnimationContext } from './context';\n\n/** A tween that hands each frame's value to the caller's `onTick`. */\nexport function startTween<T>(ctx: AnimationContext, o: TweenOptions<T>): AnimationHandle {\n const { codec } = ctx;\n // blits blends in a straight line, which a caller's own function may not do.\n const fromAxes = o.interpolate || o.interpolator ? null : axesOf(o.from);\n const toAxes = fromAxes && axesOf(o.to);\n const axes = fromAxes && toAxes && toAxes.shape === fromAxes.shape ? fromAxes : null;\n // Refused here rather than on a tick, where a throw would stop every other animation.\n if (!axes && !o.interpolate && !o.interpolator) {\n throw new Error('tween: interpolate or interpolator is required for non-numeric T');\n }\n const id = ctx.nextId();\n const easing = resolveEasing(o.easing ?? easeOut);\n // Precedence: factory > per-tick. Factory is built once at tween start so\n // expensive setup (color space conversion etc.) doesn't repeat per frame.\n const factoryFn = o.interpolator ? o.interpolator(o.from, o.to) : null;\n let lastValueEmitted = false;\n ctx.seedClock();\n // Started ahead of `register`, whose `start` listeners may already cancel it.\n const reader = codec.tween({\n id, ms: Math.max(o.ms, 1), ease: easing,\n from: axes ? axes.to(o.from) : [0],\n to: axes ? axes.to(o.to) : [1],\n });\n return ctx.register({\n id,\n kind: 'tween',\n cancelKey: o.cancelKey,\n label: o.label,\n progress: (virtualNow) => (o.ms <= 0 ? 1 : Math.min(1, virtualNow / o.ms)),\n // `nowMs` is the call's own virtual time, so it still decides when the tween ends; the codec\n // supplies only the value in between.\n tick(nowMs) {\n if (ctx.tripwire()) { codec.stop(id); return true; }\n const t = o.ms <= 0 ? 1 : Math.min(1, nowMs / o.ms);\n let value: T;\n if (axes) {\n value = t >= 1 ? o.to : axes.from(reader.cols, reader.at);\n } else {\n const eased = t >= 1 ? easing(1) : reader.cols[reader.at]!;\n value = factoryFn ? factoryFn(eased) : o.interpolate!(o.from, o.to, eased);\n }\n o.onTick(value);\n if (t >= 1 && !lastValueEmitted) {\n lastValueEmitted = true;\n codec.stop(id);\n // That last onTick may have canceled us — deregistering the id.\n // A canceled tween never completes, whenever the cancel landed.\n if (ctx.has(id)) {\n ctx.reportEnd(id);\n o.onDone?.();\n }\n return true;\n }\n return false;\n },\n });\n}\n","import type { ColorOverrideRegistry } from '../colorRegistry';\nimport { createLoop, createTweenLoop } from '../loop';\nimport type { AnimatorEventHub } from '../observe';\nimport { createStagger } from '../stagger';\nimport { supervisors } from '../supervisor';\nimport { stateOf } from '../target';\nimport { createTimeline } from '../timeline/createTimeline';\nimport type { OpenTrackHold } from '../timeline/trackHolds';\nimport type { TimelineOptions } from '../timeline/types';\nimport type {\n AnimationHandle, AnimationInfo, AnimationKind, Animator, DecayOptions, LiveAnimation, PhysicsHandle,\n PhysicsOptions, SpringOptions, TargetDecayOptions, TargetPhysicsOptions, TargetSpringOptions,\n TargetTweenOptions, TweenOptions,\n} from '../types';\nimport type { ActiveAnimation, AnimationContext } from './context';\nimport { decayAsPhysics } from './decay';\nimport type { AnimatorClock } from './frame';\nimport { startHold } from './holdAnimation';\nimport { openHold } from './holds';\nimport { startOffsetPhysics } from './offsetPhysics';\nimport { startOffsetTween } from './offsetTween';\nimport { startPhysics } from './physicsAnimation';\nimport { timeScaleOf, type Table } from './table';\nimport { startTween } from './tweenAnimation';\nimport type { Emitter } from '@weasel-js/registry';\n\n/** What {@link createAnimatorApi} needs of the animator around it. */\nexport interface ApiHost {\n ctx: AnimationContext;\n table: Table;\n clock: AnimatorClock;\n hub: AnimatorEventHub;\n /** Whether an animation's own tick is running. */\n ticking(): boolean;\n /** Runs a callback once the frame's ticks are done. */\n afterTicks(cb: () => void): void;\n subscribers: Pick<Emitter, 'subscribe'>;\n colorOverrides: ColorOverrideRegistry;\n /** Stops the frame loop, once everything is canceled and its targets are shown at rest. */\n halt(): void;\n}\n\n/** Gives every animation holding `key` the pause and time scale `pace` answers for it. */\nfunction eachUnder(\n table: Table, key: string, pace: (a: ActiveAnimation) => [paused: boolean, timeScale: number],\n): void {\n for (const a of table.under(key)) table.pace(a, ...pace(a));\n}\n\nfunction liveRows(table: Table): LiveAnimation[] {\n const rows: LiveAnimation[] = [];\n for (const a of table.animations.values()) {\n rows.push({\n ...table.infoOf(a),\n paused: a.paused,\n timeScale: a.timeScale,\n elapsed: table.clockOf(a),\n ...(a.progress ? { progress: a.progress(table.clockOf(a)) } : {}),\n });\n }\n return rows;\n}\n\nfunction startTimeline(host: ApiHost, o: TimelineOptions): ReturnType<Animator['timeline']> {\n const { ctx, table, hub } = host;\n const id = ctx.nextId();\n const info = (): AnimationInfo | undefined => {\n const a = table.animations.get(id);\n return a && table.infoOf(a);\n };\n const hold: OpenTrackHold = (target, value, weight, axes) =>\n openHold(ctx, { target: stateOf(target), value, weight, axes });\n return createTimeline(table.register, id, o, {\n get watched() { return hub.watched; },\n fire: (track, path, event, lateBy) => {\n const animation = info();\n if (animation) hub.emit({ type: 'fire', animation, track, path: path.slice(), event, lateBy });\n },\n lap: (lap) => {\n const animation = info();\n if (animation) hub.emit({ type: 'lap', animation, lap });\n },\n }, hold);\n}\n\n/** The animator's public surface over its table, clock, and primitives. */\nexport function createAnimatorApi(host: ApiHost): Animator {\n const { ctx, table, clock, hub } = host;\n const { animations } = table;\n const createSupervisor = supervisors({\n nextId: ctx.nextId,\n register: table.register,\n finish: table.finish,\n afterTicks: host.afterTicks,\n });\n\n const physics = <T,>(\n o: PhysicsOptions<T> | TargetPhysicsOptions<T>,\n kind: AnimationKind = 'physics',\n ): PhysicsHandle<T> => (o.target ? startOffsetPhysics(ctx, o, kind) : startPhysics(ctx, o, kind));\n\n const api: Animator = {\n tween: <T,>(o: TweenOptions<T> | TargetTweenOptions<T>): AnimationHandle =>\n (o.target ? startOffsetTween(ctx, o) : startTween(ctx, o)),\n spring: <T,>(o: SpringOptions<T> | TargetSpringOptions<T>): AnimationHandle => physics<T>(o, 'spring'),\n decay: <T,>(o: DecayOptions<T> | TargetDecayOptions<T>): AnimationHandle =>\n physics<T>(decayAsPhysics(o), 'decay'),\n physics,\n hold: (o) => startHold(ctx, o),\n cancel: (handle) => table.retire(handle.id),\n cancelKey: (key) => table.cancelByKey(key),\n cancelAll: () => {\n table.cancelAll(() => {\n clock.frameT = null;\n ctx.targets.show();\n });\n host.halt();\n },\n isActive: (key) => {\n if (key == null) return animations.size > 0;\n for (const _ of table.under(key)) return true;\n return false;\n },\n isTicking: host.ticking,\n pause: () => { clock.paused = true; },\n resume: () => { clock.paused = false; },\n isPaused: () => clock.paused,\n setTimeScale: (s) => { clock.timeScale = timeScaleOf(s); },\n timeScale: () => clock.timeScale,\n pauseKey: (key) => eachUnder(table, key, (a) => [true, a.timeScale]),\n resumeKey: (key) => eachUnder(table, key, (a) => [false, a.timeScale]),\n setTimeScaleByKey: (key, s) => {\n const scale = timeScaleOf(s);\n eachUnder(table, key, (a) => [a.paused, scale]);\n },\n loop: (factory, loopOpts) => createLoop(createSupervisor, factory, loopOpts),\n tweenLoop: (tweenLoopOpts) => createTweenLoop(api, createSupervisor, tweenLoopOpts),\n stagger: ((items, delay, factory, staggerOpts) =>\n createStagger(\n api,\n createSupervisor,\n table.watchCompletion,\n items,\n delay,\n factory as never,\n staggerOpts,\n )) as Animator['stagger'],\n timeline: (o: TimelineOptions) => startTimeline(host, o),\n colorOverrides: host.colorOverrides,\n onTick: (cb) => host.subscribers.subscribe(cb),\n keepAlive: () => {\n const sup = createSupervisor({ kind: 'keepAlive' });\n return () => sup.cancel();\n },\n watch: (listener) => hub.add(listener),\n live: () => liveRows(table),\n };\n return api;\n}\n","import { patch as fnPatch, tween as tweenPatch, type Handle } from '@msb235/blits';\nimport type { Out, Slot } from './lanes';\n\nexport interface HoldStart {\n id: number; axes: number;\n /** The subject it reaches. */\n on: unknown;\n /** The voice's axes now. Asked every frame, and again after a `touch`. */\n at(): number[];\n /** True where what `at` answers changes only when its subject is touched: it is then asked\n * after a touch and on no other frame. */\n still?: boolean;\n}\n\n/** A hold's voice: one with no clock, which reads `at` for as long as it is cued. */\nexport interface HoldVoice {\n slot: Slot;\n start: HoldStart;\n /** Absent for a still hold until the touch or frame that first cues it. */\n handle?: Handle<unknown>;\n /** Its axes as `at` last answered. */\n last?: number[];\n}\n\nexport interface HoldVoices {\n add(slot: Slot, start: HoldStart): HoldVoice;\n /** Says whether `v` is {@link HoldStart.still} from here on. */\n still(v: HoldVoice, still: boolean): void;\n /** Says what the hold on `on` reads has changed, where that hold is still. */\n touch(on: unknown): void;\n /** Cues again each still hold touched since the last call. */\n settle(): void;\n /** Called as a frame starts, ahead of its reading. */\n frame(): void;\n remove(v: HoldVoice): void;\n}\n\nexport function createHoldVoices(): HoldVoices {\n /** The holds asked every frame. */\n const asked = new Set<HoldVoice>();\n /** The still hold on each subject that has one, and those a touch has left to cue again. */\n const stills = new Map<unknown, HoldVoice>();\n const stale = new Set<HoldVoice>();\n\n const cue = (v: HoldVoice): void => {\n const { start } = v;\n const { lane, key } = v.slot;\n v.handle?.fade({ over: 0 });\n stale.delete(v);\n if (start.still) {\n v.last = start.at();\n // A motion at rest costs a frame what a finished tween does, and calls nothing of ours.\n const rest = tweenPatch<unknown, Out, number[]>('v', { from: v.last, to: v.last.slice(), ms: 1 });\n v.handle = lane.mix.cue({ patch: rest, subjects: [key] });\n return;\n }\n const each = fnPatch<unknown, Out>(\n 1,\n () => {\n v.last = start.at();\n return { v: v.last };\n },\n { writes: ['v'] },\n );\n v.handle = lane.mix.cue({ patch: each, subjects: [key], loop: true });\n };\n\n const settle = (): void => {\n for (const v of stale) cue(v);\n };\n\n return {\n add(slot, start) {\n const v: HoldVoice = { slot, start: { ...start } };\n if (start.still) {\n // Cued at the touch or frame that comes first, so one touched as it starts is asked once.\n stills.set(start.on, v);\n stale.add(v);\n } else {\n cue(v);\n asked.add(v);\n }\n return v;\n },\n still(v, still) {\n if (!v.start.still === !still) return;\n v.start.still = still;\n if (still) {\n asked.delete(v);\n stills.set(v.start.on, v);\n } else {\n stills.delete(v.start.on);\n asked.add(v);\n }\n cue(v);\n },\n touch(on) {\n const v = stills.get(on);\n if (v) stale.add(v);\n },\n settle,\n frame() {\n // blits keeps a patch's answer while its clock stands still, and a hold's can change anyway.\n for (const v of asked) v.slot.lane.mix.touch(v.slot.key);\n settle();\n },\n remove(v) {\n v.handle?.fade({ over: 0 });\n asked.delete(v);\n stale.delete(v);\n if (stills.get(v.start.on) === v) stills.delete(v.start.on);\n },\n };\n}\n","import { kit, mix, sum, vec, type Mix } from '@msb235/blits';\n\nexport type Out = { v: number[] };\n\n/** One subject's value, kept current in place. Valid until the subject's last voice stops. */\nexport interface Reader {\n /** The array holding the subject's axes as the last `frame` read them, from `at` on. It is\n * shared with other subjects and valid until the next `frame`. */\n readonly cols: Float64Array;\n /** Where the subject's axes start in `cols`. */\n readonly at: number;\n}\n\n/** One subject of a lane: what `pull` reads for it, summed over every voice reaching it. */\nexport interface Slot extends Reader {\n cols: Float64Array;\n at: number;\n key: unknown;\n lane: Lane;\n /** How many voices reach it. */\n refs: number;\n /** Its place in the lane's `keys`; -1 while no frame has read it. */\n index: number;\n /** What `cols` points at while `index` is -1. */\n held: Float64Array;\n /** A number its owner gave it, kept beside it in the lane's `tags`; -1 where it gave none. */\n tag: number;\n}\n\n/** Where a subject's voices run, for one kept apart from the rest with as many axes. */\nexport interface LanePlace {\n /** Subjects naming one group share a lane no other subject is in. */\n group: object;\n /** Kept in the lane's `tags` at the subject's place. */\n tag: number;\n}\n\n/** A group's lane as the last frame read it: `count` subjects, subject `j`'s axes in `cols`\n * from `j * axes` and its tag at `tags[j]`. Valid until a subject joins or leaves. */\nexport interface LaneColumns {\n cols: Float64Array;\n tags: Int32Array;\n count: number;\n}\n\n/** One mix per axis count, since a kit's channel width is fixed, and one more per group. */\nexport interface Lane {\n /** What the lane is kept under: its group, or its axis count. */\n key: unknown;\n axes: number;\n mix: Mix<unknown, Out>;\n /** The subjects `pull` reads, by place. Joins wait in `pending` until the next `frame`. */\n keys: unknown[];\n /** Each place's slot, beside `keys`. */\n slots: Slot[];\n /** Each place's tag, beside `keys`. */\n tags: Int32Array;\n pending: Set<Slot>;\n dirty: boolean;\n /** Frames in a row it has had no subjects at; it retires at the second. */\n idle: number;\n cols: { v: Float64Array };\n}\n\nexport interface Lanes {\n /** The slot for `key`, made if absent and showing `held` until a frame reads it. Counts one\n * more voice reaching it. */\n join(axes: number, key: unknown, held: ArrayLike<number>): Slot;\n /** The lane of `group` as the last frame read it; null where it has none. */\n columns(group: object): LaneColumns | null;\n /** Counts one voice fewer reaching `slot`. At none it leaves its lane, and the mix forgets\n * the subject. */\n leave(slot: Slot): void;\n /** Syncs every lane to `time` and reads its subjects. */\n frame(time: number): void;\n /** Says what a voice on `key` reads from outside has changed since the last `frame`. */\n touch(key: unknown): void;\n /** Reads each touched subject again where the clock stands, then hands it to `each`. */\n refresh(each: (slot: Slot) => void): void;\n}\n\n/** Takes `s` out of its lane's places, moving the last one into the gap. */\nfunction depart(s: Slot): void {\n const l = s.lane;\n l.dirty = true;\n if (s.index < 0) { l.pending.delete(s); return; }\n const lastKey = l.keys.pop()!;\n const moved = l.slots.pop()!;\n if (moved === s) return;\n const n = l.axes;\n const from = l.keys.length * n;\n l.cols.v.copyWithin(s.index * n, from, from + n);\n l.keys[s.index] = lastKey;\n l.slots[s.index] = moved;\n l.tags[s.index] = moved.tag;\n moved.index = s.index;\n moved.at = s.index * n;\n}\n\n/** Gives the lane's waiting subjects their places. */\nfunction rebuild(l: Lane): void {\n const keys = l.keys.slice();\n const had = keys.length;\n for (const s of l.pending) {\n s.index = keys.length;\n s.at = s.index * l.axes;\n s.cols = l.cols.v;\n keys.push(s.key);\n l.slots.push(s);\n }\n l.pending.clear();\n l.keys = keys;\n if (l.tags.length < keys.length) {\n const tags = new Int32Array(Math.max(keys.length, l.tags.length * 2));\n tags.set(l.tags);\n l.tags = tags;\n }\n for (let i = had; i < keys.length; i++) l.tags[i] = l.slots[i]!.tag;\n if (l.cols.v.length !== keys.length * l.axes) {\n l.cols = { v: new Float64Array(keys.length * l.axes) };\n for (const s of l.slots) s.cols = l.cols.v;\n }\n l.dirty = false;\n}\n\n/** `placeOf` answers the lane a subject is kept in, for one kept apart from the rest. */\nexport function createLanes(placeOf?: (key: object) => LanePlace | undefined): Lanes {\n const lanes = new Map<unknown, Lane>();\n const slots = new Map<unknown, Slot>();\n const touched = new Set<Slot>();\n let now = 0;\n\n const laneOf = (axes: number, group: object | undefined): Lane => {\n const key = group ?? axes;\n let l = lanes.get(key);\n if (!l) {\n const m = mix<unknown, Out>(kit<Out>({ v: vec(axes, sum()) }));\n m.sync(now);\n l = {\n key, axes, mix: m, keys: [], slots: [], tags: new Int32Array(0), pending: new Set(),\n dirty: false, idle: 0, cols: { v: new Float64Array(0) },\n };\n lanes.set(key, l);\n }\n return l;\n };\n\n return {\n join(axes, key, held) {\n const had = slots.get(key);\n if (had) {\n if (had.lane.axes !== axes) {\n throw new Error(`codec: a subject on ${had.lane.axes} axes was given a voice on ${axes}`);\n }\n had.refs += 1;\n return had;\n }\n const place = typeof key === 'object' && key !== null ? placeOf?.(key) : undefined;\n const lane = laneOf(axes, place?.group);\n if (lane.axes !== axes) throw new Error(`codec: a group on ${lane.axes} axes was given a subject on ${axes}`);\n const own = Float64Array.from(held);\n const s: Slot = { key, lane, refs: 1, index: -1, held: own, cols: own, at: 0, tag: place?.tag ?? -1 };\n slots.set(key, s);\n lane.pending.add(s);\n lane.dirty = true;\n return s;\n },\n leave(s) {\n s.refs -= 1;\n if (s.refs > 0) return;\n s.lane.mix.drop(s.key);\n depart(s);\n slots.delete(s.key);\n },\n frame(time) {\n now = time;\n for (const l of lanes.values()) {\n if (l.dirty) rebuild(l);\n if (l.keys.length === 0 && ++l.idle >= 2) {\n lanes.delete(l.key);\n continue;\n }\n l.mix.sync(time);\n if (l.keys.length === 0) continue;\n l.idle = 0;\n l.mix.pull(l.keys, l.cols);\n }\n touched.clear();\n },\n columns(group) {\n const l = lanes.get(group);\n return l ? { cols: l.cols.v, tags: l.tags, count: l.keys.length } : null;\n },\n touch(key) {\n const s = slots.get(key);\n if (!s) return;\n s.lane.mix.touch(key);\n touched.add(s);\n },\n refresh(each) {\n for (const s of touched) {\n touched.delete(s);\n if (slots.get(s.key) !== s) continue;\n const out = s.lane.mix.probe(s.key, { v: new Array<number>(s.lane.axes).fill(0) });\n s.cols.set(out.v, s.at);\n each(s);\n }\n },\n };\n}\n","import {\n glide, patch as fnPatch, spring as springPatch, tween as tweenPatch,\n type Handle, type Motion, type Patch,\n} from '@msb235/blits';\nimport { createHoldVoices, type HoldStart, type HoldVoice } from './holdVoices';\nimport { createLanes, type LaneColumns, type LanePlace, type Out, type Reader, type Slot } from './lanes';\n\nexport type { HoldStart } from './holdVoices';\nexport type { Reader } from './lanes';\n\nexport interface TweenStart {\n id: number; ms: number; ease: (u: number) => number;\n /** Endpoints as axes. A tween whose caller blends its own values passes [0] and [1]. */\n from: number[]; to: number[];\n /** The subject the voice reaches, where several voices share one. Default: its own, `id`. */\n on?: unknown;\n}\nexport interface SpringStart {\n id: number; axes: number;\n from: number[]; to: number[] | null; velocity: number[];\n stiffness: number; damping: number; mass: number;\n /** As {@link TweenStart.on}. */\n on?: unknown;\n}\nexport interface PathStart {\n id: number; ms: number; axes: number;\n /** The voice's axes at linear progress `u`, 0 to 1. */\n at(u: number): number[];\n /** As {@link TweenStart.on}. */\n on?: unknown;\n}\n/** A voice's own value and velocity, apart from any other voice on its subject. */\nexport interface Own { value: number[]; velocity: number[] }\nexport interface SpringReader extends Reader {\n /** Position and velocity at the last `frame`, for a voice alone on its subject. */\n motion(): Own;\n}\nexport interface Codec {\n /** Advances the codec's clock by `dtMs` of animator time, then reads every subject. */\n frame(dtMs: number): void;\n tween(s: TweenStart): Reader;\n spring(s: SpringStart): SpringReader;\n path(s: PathStart): Reader;\n /** A voice with no clock: it reads `at` for as long as it is cued. */\n hold(s: HoldStart): Reader;\n /** Says whether hold `id` is {@link HoldStart.still} from here on. */\n still(id: number, still: boolean): void;\n /** Says what a voice on subject `on` reads from outside has changed since the last `frame`. */\n touch(on: unknown): void;\n /** Reads each touched subject again without moving the clock. `reread` is told the subject\n * and the sum of its voices that reading left out: tweens waiting for the next `frame`. */\n refresh(reread: (on: unknown, queued: number[]) => void): void;\n retarget(id: number, to: number[] | null): void;\n /** Starts spring `id` over from `from` at `velocity`, toward `to` or coasting. */\n recue(id: number, from: number[], velocity: number[], to: number[] | null): void;\n push(id: number, velocity: number[]): void;\n /** Plays `id` at rate `rate` from where it is, without a jump. */\n rate(id: number, rate: number): void;\n stop(id: number): void;\n /** Whether `id` is one of the codec's voices. */\n has(id: number): boolean;\n /** Voice `id`'s own value and velocity as of the last `frame`. */\n own(id: number): Own | undefined;\n /** How many voices the codec is running; for tests and diagnostics. */\n voiceCount(): number;\n /** The lane of `group` as the last frame read it; null where it has none. */\n columns(group: object): LaneColumns | null;\n}\n\n/** What the codec calls on a motion patch: a tween has no `push`, a glide no `to`. */\ninterface Moves {\n to?(key: unknown, target: number[], at?: number): void;\n read(key: unknown, at?: number): Motion<number[]> | undefined;\n push?(key: unknown, velocity: number[], at?: number): void;\n}\n\ninterface Voice {\n kind: 'tween' | 'spring' | 'path' | 'hold';\n slot: Slot;\n /** `handle` and `patch` are absent while a tween is `queued` and for a hold, and a path has\n * no `patch`. */\n handle: Handle<unknown>;\n patch: Moves;\n /** Where it started: what `own` answers until a frame has read it. */\n from: number[];\n /** The codec's own copy, kept at the voice's motion as of its last re-cue. */\n spring?: SpringStart;\n /** A tween's start, until the next `frame` cues its voice. */\n queued?: TweenStart;\n /** A rate asked for while queued. */\n queuedRate?: number;\n /** A path's axes as its patch last answered. */\n last?: number[];\n /** A hold's voice. */\n held?: HoldVoice;\n}\n\n/** `placeOf` answers where a shared subject's voices run, for one kept in a lane of its own. */\nexport function createCodec(placeOf?: (on: object) => LanePlace | undefined): Codec {\n const lanes = createLanes(placeOf);\n const voices = new Map<number, Voice>();\n // Tweens are cued together at the next frame, not one by one as they start: a burst of starts then\n // keeps the caller's objects together rather than each a voice apart, which the frame loop reads.\n const queue: Voice[] = [];\n const holds = createHoldVoices();\n let time = 0;\n\n // A voice cued now reads voice time 0 at codec time `time`. Each patch holds its subject at rest\n // at `from`, and the codec releases it with a `to` or `push` timed at 0.\n const springVoice = (slot: Slot, sp: SpringStart): { handle: Handle<unknown>; patch: Moves } => {\n // With no target the spring force is zero whatever the stiffness, leaving damping alone:\n // velocity falls as exp(-t * damping / mass), a glide whose time constant is mass / damping.\n const patch: Moves & Patch<unknown, Out, void> = sp.to == null\n ? glide<unknown, Out, number[]>('v', { from: sp.from, ms: (1000 * sp.mass) / sp.damping })\n : springPatch<unknown, Out, number[]>('v', {\n from: sp.from, to: sp.from, stiffness: sp.stiffness, damping: sp.damping, mass: sp.mass,\n });\n const handle = slot.lane.mix.cue({ patch, subjects: [slot.key] });\n if (sp.to) patch.to!(slot.key, sp.to, 0);\n patch.push!(slot.key, sp.velocity, 0);\n return { handle, patch };\n };\n\n const get = (id: number): Voice => {\n const v = voices.get(id);\n if (!v) throw new Error(`codec: no subject ${id}`);\n return v;\n };\n /** A spring voice's motion now: as its voice last read it, else where it was last placed. */\n const current = (v: Voice): Own =>\n v.patch.read(v.slot.key) ?? { value: v.spring!.from.slice(), velocity: v.spring!.velocity.slice() };\n\n const respring = (v: Voice, next: SpringStart): void => {\n const rate = v.handle.rate;\n v.handle.fade({ over: 0 });\n const { handle, patch } = springVoice(v.slot, next);\n handle.rate = rate;\n v.handle = handle;\n v.patch = patch;\n v.spring = next;\n };\n\n function stop(id: number): void {\n const v = voices.get(id);\n if (!v) return;\n if (v.held) holds.remove(v.held);\n else if (v.queued) v.queued = undefined;\n else v.handle.fade({ over: 0 });\n lanes.leave(v.slot);\n voices.delete(id);\n }\n\n return {\n frame(dtMs) {\n for (const v of queue) {\n const q = v.queued;\n if (!q) continue;\n v.queued = undefined;\n const key = v.slot.key;\n const patch = tweenPatch<unknown, Out, number[]>('v', { from: q.from.slice(), to: q.from.slice(), ms: q.ms, ease: q.ease });\n v.handle = v.slot.lane.mix.cue({ patch, subjects: [key] });\n v.patch = patch;\n patch.to(key, q.to.slice(), 0);\n if (v.queuedRate !== undefined) v.handle.rate = v.queuedRate;\n }\n queue.length = 0;\n holds.frame();\n time += dtMs;\n lanes.frame(time);\n },\n tween(s) {\n if (s.to.length !== s.from.length) {\n throw new Error(`codec: tween ${s.id} goes from ${s.from.length} axes to ${s.to.length}`);\n }\n const shared = s.on !== undefined;\n const slot = lanes.join(s.from.length, shared ? s.on : s.id, shared ? new Array<number>(s.from.length).fill(0) : s.from);\n const v = { kind: 'tween', slot, from: s.from, queued: s } as Voice;\n voices.set(s.id, v);\n queue.push(v);\n return slot;\n },\n spring(s) {\n const sp = { ...s, from: s.from.slice(), to: s.to && s.to.slice(), velocity: s.velocity.slice() };\n const shared = s.on !== undefined;\n const slot = lanes.join(sp.axes, shared ? s.on : s.id, shared ? new Array<number>(sp.axes).fill(0) : sp.from);\n const { handle, patch } = springVoice(slot, sp);\n const v: Voice = { kind: 'spring', slot, handle, patch, from: sp.from, spring: sp };\n voices.set(s.id, v);\n const reader = slot as Slot & SpringReader;\n if (!shared) reader.motion = () => current(v);\n return reader;\n },\n path(s) {\n const shared = s.on !== undefined;\n const from = s.at(0);\n const slot = lanes.join(s.axes, shared ? s.on : s.id, shared ? new Array<number>(s.axes).fill(0) : from);\n const v = { kind: 'path', slot, from } as Voice;\n const patch = fnPatch<unknown, Out>(\n s.ms,\n (phase) => {\n v.last = s.at(phase);\n return { v: v.last };\n },\n { writes: ['v'] },\n );\n // Held at its end until the animator stops it, so a frame between the two reads the end.\n v.handle = slot.lane.mix.cue({ patch, subjects: [slot.key], loop: false, freeze: 'after' });\n voices.set(s.id, v);\n return slot;\n },\n hold(s) {\n const zeros = new Array<number>(s.axes).fill(0);\n const slot = lanes.join(s.axes, s.on, zeros);\n voices.set(s.id, { kind: 'hold', slot, from: zeros, held: holds.add(slot, s) } as Voice);\n return slot;\n },\n still(id, still) {\n const v = get(id);\n if (!v.held) throw new Error(`codec: subject ${id} is a ${v.kind}, not a hold`);\n holds.still(v.held, still);\n },\n touch(on) {\n holds.touch(on);\n lanes.touch(on);\n },\n refresh(reread) {\n holds.settle();\n lanes.refresh((slot) => {\n const queued = new Array<number>(slot.lane.axes).fill(0);\n for (const v of queue) {\n if (v.queued && v.slot === slot) v.queued.from.forEach((x, i) => { queued[i] += x; });\n }\n reread(slot.key, queued);\n });\n },\n retarget(id, to) {\n const v = get(id);\n if (v.kind !== 'spring') throw new Error(`codec: subject ${id} is a ${v.kind}; ${v.kind}s are not retargeted`);\n const sp = v.spring!;\n if ((to == null) === (sp.to == null)) {\n if (!to) return;\n sp.to = to.slice();\n v.patch.to!(v.slot.key, sp.to);\n return;\n }\n // Held and free run different patches, so the voice is re-cued from where it is.\n const now = current(v);\n respring(v, { ...sp, to: to && to.slice(), from: now.value, velocity: now.velocity });\n },\n recue(id, from, velocity, to) {\n const v = get(id);\n if (v.kind !== 'spring') throw new Error(`codec: subject ${id} is a ${v.kind}; only springs are re-cued`);\n respring(v, { ...v.spring!, from: from.slice(), velocity: velocity.slice(), to: to && to.slice() });\n },\n push(id, velocity) {\n const v = get(id);\n if (v.spring && !v.patch.read(v.slot.key)) v.spring.velocity = velocity.slice();\n v.patch.push?.(v.slot.key, velocity);\n },\n rate(id, rate) {\n const v = get(id);\n if (v.kind === 'hold') return;\n if (v.queued) v.queuedRate = rate;\n else v.handle.rate = rate;\n },\n stop,\n has: (id) => voices.has(id),\n own(id) {\n const v = voices.get(id);\n if (!v) return undefined;\n if (v.kind === 'spring') return current(v);\n if (v.kind === 'path' || v.kind === 'hold') {\n return { value: v.held?.last ?? v.last ?? v.from, velocity: new Array<number>(v.from.length).fill(0) };\n }\n return (!v.queued && v.patch.read(v.slot.key))\n || { value: v.from, velocity: new Array<number>(v.from.length).fill(0) };\n },\n voiceCount: () => voices.size,\n columns: (group) => lanes.columns(group),\n };\n}\n","import type { AnimatorEventHub } from '../observe';\nimport type { Codec } from './codec';\nimport type { ActiveAnimation } from './context';\nimport type { TargetBook } from './offsets';\nimport type { Table } from './table';\nimport type { Emitter } from '@weasel-js/registry';\n\n/** The animator's clock: where its frames stand, and how fast they run. */\nexport interface AnimatorClock {\n /** The timestamp the codec last advanced to. Null after the page was hidden and while nothing\n * runs, so neither gap is charged to the codec; a tween starting then seeds it from `now()`. */\n frameT: number | null;\n /** The virtual ms its frames have advanced it by: each animation's own clock is read off it. */\n elapsed: number;\n timeScale: number;\n paused: boolean;\n}\n\n/** What {@link createFrame} needs of the animator around it. */\nexport interface FrameHost {\n clock: AnimatorClock;\n table: Pick<\n Table,\n 'animations' | 'retire' | 'reportEnd' | 'finish' | 'drop' | 'infoOf' | 'ticks' | 'clockOf' | 'awake' | 'waiting'\n >;\n codec: Pick<Codec, 'frame'>;\n targets: Pick<TargetBook, 'settle' | 'show'>;\n hub: AnimatorEventHub;\n /** Supervisor frame callbacks due this frame, run once its ticks are done. */\n afterTicks: (() => void)[];\n /** Told once a frame, after its ticks and its targets are shown. */\n subscribers: Pick<Emitter, 'emit'>;\n /** Reads each touched target's voices again. */\n reread(): void;\n requestFrame(): void;\n /** True once the host has unmounted; logs the first time. */\n tripwire(): boolean;\n}\n\nexport interface Frame {\n /** Runs one frame at timestamp `t`. */\n tick(t: number): void;\n /** Whether a frame is between reading the codec and showing its targets. */\n framing(): boolean;\n /** Whether an animation's own tick is running. */\n ticking(): boolean;\n}\n\nexport function createFrame(host: FrameHost): Frame {\n const { clock, table, hub } = host;\n const { animations } = table;\n let framing = false;\n // Counted around each animation's tick, so a re-entrant call (`decay.onTick` to\n // `adapter.setPose` to `animateOnSetPose`) can tell it is inside one and write through\n // rather than schedule a tween that would fight the caller.\n let tickDepth = 0;\n\n /** Ticks the animations with something to do this frame, as the table stood when the frame\n * began, and answers which finished. */\n const tickEach = (): ActiveAnimation[] => {\n const finished: ActiveAnimation[] = [];\n const threw: [ActiveAnimation, unknown][] = [];\n // One waiting for its `due` checks for nothing meanwhile, the host's unmount included:\n // once that has happened every animation is ticked, so each sees it and leaves.\n const all = table.waiting > 0 && host.tripwire();\n // A snapshot: an animation registered by this frame's ticks first ticks on the\n // next, or a zero-duration loop would chain inside one frame and never leave it.\n for (const anim of all ? [...animations.values()] : table.ticks()) {\n if (animations.get(anim.id) !== anim) continue;\n const scale = clock.paused ? 0 : clock.timeScale * (anim.paused ? 0 : anim.timeScale);\n tickDepth += 1;\n try {\n if (anim.tick(table.clockOf(anim), scale)) finished.push(anim);\n } catch (error) {\n threw.push([anim, error]);\n } finally {\n tickDepth -= 1;\n }\n }\n for (const [anim, error] of threw) {\n console.error('useAnimator: animation tick threw; retiring it', error);\n if (animations.get(anim.id) !== anim) continue;\n // One that ended before throwing (from `onDone`) is finished, not canceled.\n if (anim.ended) table.drop(anim);\n else table.retire(anim.id, undefined, true);\n if (hub.watched) hub.emit({ type: 'error', animation: table.infoOf(anim), error });\n }\n return finished;\n };\n\n return {\n tick(t) {\n // `t` comes from the frame clock, and `frameT` is seeded from `now()` while the animator\n // is idle. The two share a time origin in a browser, where the rAF timestamp and\n // `performance.now()` are both page-relative, but not everywhere: jsdom starts them\n // ~600ms apart. Time never runs backwards, so a negative sample is never real.\n const frameDt = clock.frameT == null ? 0 : Math.max(0, t - clock.frameT);\n clock.frameT = t;\n framing = true;\n const dt = frameDt * (clock.paused ? 0 : clock.timeScale);\n clock.elapsed += dt;\n host.codec.frame(dt);\n host.targets.settle();\n for (const anim of tickEach()) {\n // Gone already if its own tick canceled it; replaced if something\n // revived it under the same id since.\n if (animations.get(anim.id) === anim) table.finish(anim.id);\n }\n for (const cb of host.afterTicks.splice(0)) {\n try { cb(); } catch (err) { console.error('useAnimator: a staggered start threw', err); }\n }\n host.reread();\n framing = false;\n host.targets.show();\n // After the tick batch, so each subscriber sees the latest color overrides and poses.\n host.subscribers.emit();\n if (table.awake) {\n host.requestFrame();\n return;\n }\n // As when the page was hidden: the time asleep is charged to nothing.\n clock.frameT = null;\n },\n framing: () => framing,\n ticking: () => tickDepth > 0,\n };\n}\n","import type { ColorOverrideRegistry } from '../colorRegistry';\nimport { AnimatorEventHub } from '../observe';\nimport type { TargetState } from '../target';\nimport type { Animator } from '../types';\nimport { createAnimatorApi } from './animatorApi';\nimport { createCodec } from './codec';\nimport type { ActiveAnimation, AnimationContext } from './context';\nimport { createFrame, type AnimatorClock } from './frame';\nimport { createTargetBook } from './offsets';\nimport { createTable } from './table';\nimport { createEmitter } from '@weasel-js/registry';\n\n/** What {@link createAnimatorCore} needs of whoever hosts it: a clock and a frame loop. */\nexport interface CoreHost {\n /** Now, on the clock the frame loop's timestamps are on. */\n now(): number;\n requestFrame(): void;\n cancelFrame(): void;\n /** True once the host has unmounted; logs the first time. */\n tripwire(): boolean;\n colorOverrides: ColorOverrideRegistry;\n}\n\n/** An animator apart from React: its table, clock, and codec, driven by the host's frames. */\nexport interface AnimatorCore {\n api: Animator;\n /** Runs one frame at timestamp `t`. */\n tick(t: number): void;\n /** Says the frame loop is back after time unseen, which is charged to no animation. */\n resumed(): void;\n}\n\nexport function createAnimatorCore(host: CoreHost): AnimatorCore {\n const clock: AnimatorClock = { frameT: null, elapsed: 0, timeScale: 1, paused: false };\n const hub = new AnimatorEventHub();\n const codec = createCodec((on) => {\n const { row } = on as TargetState;\n return row ? { group: row.table, tag: row.index } : undefined;\n });\n const afterTicks: (() => void)[] = [];\n const subscribers = createEmitter();\n let nextId = 1;\n const seedClock = (): void => { if (clock.frameT == null) clock.frameT = host.now(); };\n\n const reread = (): void => codec.refresh((on, queued) => targets.reread(on as TargetState, queued));\n const table = createTable({\n codec,\n hub,\n elapsed: () => clock.elapsed,\n seedClock,\n showNow: (target) => targets.showNow(target),\n resting: () => targets.resting,\n framing: () => frame.framing(),\n requestFrame: host.requestFrame,\n });\n const targets = createTargetBook({\n stop: (s) => {\n for (const a of [...table.on(s)]) table.retire(a.id);\n },\n reread: (s) => {\n codec.touch(s);\n reread();\n },\n columns: (table) => codec.columns(table),\n });\n const frame = createFrame({\n clock, table, codec, targets, hub, afterTicks, subscribers, reread,\n requestFrame: host.requestFrame, tripwire: host.tripwire,\n });\n\n const ctx: AnimationContext = {\n codec,\n targets,\n nextId: () => nextId++,\n seedClock,\n register: table.register,\n has: (id) => table.animations.has(id),\n defer: table.defer,\n reportEnd: table.reportEnd,\n finish: table.finish,\n touch: (target, at) => {\n codec.touch(target);\n if (frame.framing() && !at) return;\n reread();\n if (!frame.framing()) host.requestFrame();\n },\n tripwire: host.tripwire,\n interrupt: (key, by) => table.cancelByKey(key, by as ActiveAnimation),\n velocityUnder: (key, target) => {\n let sum: number[] | null = null;\n for (const a of table.under(key)) {\n if (a.target !== target) continue;\n const v = a.velocity?.() ?? codec.own(a.id)?.velocity;\n if (v) sum = sum ? sum.map((x, i) => x + v[i]!) : v.slice();\n }\n return sum;\n },\n };\n\n const api = createAnimatorApi({\n ctx,\n table,\n clock,\n hub,\n ticking: frame.ticking,\n afterTicks: (cb) => { afterTicks.push(cb); },\n subscribers,\n colorOverrides: host.colorOverrides,\n halt: host.cancelFrame,\n });\n\n return {\n api,\n tick: frame.tick,\n resumed() {\n // An hour spent hidden is not an hour the animation ran: dropping the last frame's\n // timestamp makes the resuming frame advance the clock by nothing.\n clock.frameT = null;\n },\n };\n}\n","import { useCallback, useEffect, useInsertionEffect, useMemo, useRef } from 'react';\nimport { useLatest, useVisibleRaf } from '@weasel-js/react';\nimport { ColorOverrideRegistry } from './colorRegistry';\nimport { createAnimatorCore, type AnimatorCore } from './engine/core';\nimport type { Animator, UseAnimatorOptions } from './types';\n\n/** Create the animator for a canvas. One rAF loop drives every animation it\n * owns, and everything still running is canceled on unmount. */\nexport function useAnimator(opts: UseAnimatorOptions = {}): Animator {\n const optsRef = useLatest(opts);\n const colorOverrides = useRef<ColorOverrideRegistry>(new ColorOverrideRegistry());\n\n // The loop runs behind the visibility gate. The core is built in the memo\n // below, so the frame callback reaches it through a ref, published once the\n // memo's render commits.\n const coreRef = useRef<AnimatorCore | null>(null);\n const frameLoop = useVisibleRaf(\n useCallback((t: number) => { coreRef.current?.tick(t); }, []),\n {\n requestFrame: opts.requestFrame,\n cancelFrame: opts.cancelFrame,\n onResume: () => coreRef.current?.resumed(),\n },\n );\n const frameLoopRef = useLatest(frameLoop);\n\n // Tripwire: dev-only flag that every tween/spring/decay's tick reads to\n // detect \"animation fired after the host component unmounted.\" This is a\n // symptom of cleanup not running (regression) — typically because someone\n // refactored useAnimator and forgot to wire the unmount effect. The flag\n // flips false on cleanup; ticks see it and log a one-time error so the\n // bug is loud rather than just visually-doubled animation.\n const mountedRef = useRef(true);\n const trippedRef = useRef(false);\n\n const core = useMemo(() => {\n const tripwire = (): boolean => {\n if (mountedRef.current) return false;\n if (!trippedRef.current) {\n trippedRef.current = true;\n const isDev = typeof process !== 'undefined' ? process.env.NODE_ENV !== 'production' : true;\n if (isDev) {\n console.error(\n 'weasel useAnimator: animation tick fired after the host component unmounted. ' +\n 'This usually means cleanup logic was bypassed — check for refactors that ' +\n 'removed the unmount effect or replaced cancelAll with a custom path.',\n );\n }\n }\n return true;\n };\n // Default to performance.now() so the time origin matches the\n // requestAnimationFrame callback's DOMHighResTimeStamp argument.\n // Using Date.now() here would mix epoch-millis with page-relative-millis,\n // producing huge negative `elapsed` values that clamp tween `t` to 0\n // forever (never reaching completion).\n const now = (): number =>\n (optsRef.current.now ?? (typeof performance !== 'undefined' ? performance.now.bind(performance) : Date.now))();\n return createAnimatorCore({\n now,\n requestFrame: () => frameLoopRef.current.request(),\n cancelFrame: () => frameLoopRef.current.cancel(),\n tripwire,\n colorOverrides: colorOverrides.current,\n });\n }, [frameLoopRef, optsRef]);\n\n useInsertionEffect(() => {\n coreRef.current = core;\n }, [core]);\n\n // StrictMode-safe cleanup: when the component unmounts (including the\n // dev-mode double-mount that StrictMode performs), cancel every running\n // animation and stop the RAF loop. Without this, the FIRST mount's\n // animator keeps ticking with stale callbacks pointing at the unmounted\n // adapter, while the SECOND mount creates its own animator on top —\n // visible to the user as every animation playing twice.\n const { api } = core;\n useEffect(() => {\n const overrides = colorOverrides.current;\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n api.cancelAll();\n overrides.clearAll();\n };\n }, [api]);\n\n return api;\n}\n","/** Most a slewed value may change per second, in its own units, in each\n * direction. A direction left out is unlimited: the value jumps to a target\n * on that side. `0` holds the value where it is. */\nexport interface SlewRates {\n rise?: number;\n fall?: number;\n}\n\nfunction checkRate(name: string, rate: number | undefined): number {\n if (rate === undefined) return Infinity;\n if (!(rate >= 0)) throw new RangeError(`slew: ${name} must be a rate >= 0, got ${rate}`);\n return rate;\n}\n\n/**\n * One step of a slew limiter: `value` moved toward `target` by at most the\n * rate for that direction times `dt` seconds, landing on `target` rather than\n * passing it. A fast `rise` with a slow `fall` is an attack/release envelope.\n */\nexport function slewToward(value: number, target: number, dt: number, rates: SlewRates): number {\n const rise = checkRate('rise', rates.rise);\n const fall = checkRate('fall', rates.fall);\n if (target > value) return Math.min(target, value + rise * dt);\n if (target < value) return Math.max(target, value - fall * dt);\n return value;\n}\n\n/** A value that follows `target` at limited rates. Both fields are writable:\n * set `target` to steer it, or write `value` to jump it and let it slew on\n * from there. Nothing moves until `step` is called. */\nexport interface Slew {\n value: number;\n target: number;\n /** Advance `dt` seconds and return the new value. */\n step(dt: number): number;\n}\n\n/** A stateful {@link slewToward}. `target` defaults to `value`, so a new slew\n * is at rest. */\nexport function createSlew(options: SlewRates & { value?: number; target?: number } = {}): Slew {\n const rates: SlewRates = { rise: checkRate('rise', options.rise), fall: checkRate('fall', options.fall) };\n const value = options.value ?? 0;\n const slew: Slew = {\n value,\n target: options.target ?? value,\n step(dt) {\n slew.value = slewToward(slew.value, slew.target, dt, rates);\n return slew.value;\n },\n };\n return slew;\n}\n","import { lerpColorArray, type ColorSpace } from '@weasel-js/paint';\n\n/**\n * Color interpolator: receives two flat RGBA float arrays (values in\n * 0..1, the renderer's color space — same shape as\n * `stroke.vertexColors`) and a normalized progress `t` in 0..1.\n * Returns the same-length blended array, also in 0..1 floats. Override\n * the default per-channel lerp via `TweenVertexColorsOptions.interpolate`\n * when a custom color-space or shaping is needed.\n */\nexport type ColorInterpolate = (\n from: readonly number[],\n to: readonly number[],\n t: number,\n) => number[];\n\n/** The interpolator the options ask for: `interpolate` itself, else a lerp in `interpolation`'s space. */\nexport function resolveInterpolator(\n opts: { interpolation?: ColorSpace; interpolate?: ColorInterpolate },\n): ColorInterpolate {\n if (opts.interpolate) return opts.interpolate;\n const space: ColorSpace = opts.interpolation ?? 'rgb';\n return (a, b, t) => lerpColorArray(a, b, t, space);\n}\n","import { linear, resolveEasing } from '@weasel-js/geom';\nimport type { ColorSpace } from '@weasel-js/paint';\nimport type {\n AnimationHandle,\n Animator,\n EasingSpec,\n SpringPresetName,\n} from './types';\nimport type { VertexColorChannel } from './colorRegistry';\nimport { resolveInterpolator, type ColorInterpolate } from './colorInterpolate';\n\n/** Options for `tweenVertexColors`. */\nexport interface TweenVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n /** Per-anchor RGBA, flat, in 0..1 floats (matches the renderer's\n * `stroke.vertexColors` / `PathDrawCommand.vertexColors` color space).\n * Length must equal `from.length`. */\n to: readonly number[];\n /** Per-anchor RGBA, flat, in 0..1 floats. Length must equal `to.length`\n * and be a positive multiple of 4. */\n from: readonly number[];\n ms: number;\n easing?: EasingSpec;\n interpolation?: ColorSpace;\n interpolate?: ColorInterpolate;\n onDone?: () => void;\n}\n\nfunction validateLengths(from: readonly number[], to: readonly number[]): void {\n if (from.length !== to.length) {\n throw new Error(\n `vertex colors: length mismatch (from=${from.length}, to=${to.length})`,\n );\n }\n if (from.length === 0 || from.length % 4 !== 0) {\n throw new Error(\n `vertex colors: length ${from.length} must be a positive multiple of 4`,\n );\n }\n}\n\nconst cancelKeyFor = (id: string, channel: VertexColorChannel): string =>\n `colors:${id}:${channel}`;\n\n/** Under a thousandth of full scale from `to`, and slower than that a second, a color spring is done. */\nconst COLOR_REST = 0.001;\n\n/** What the from-to helpers share: the node's color target, moved by a path through `colorsAt`. */\nfunction tweenColors(\n animator: Animator,\n opts: { id: string; channel: VertexColorChannel; from: readonly number[]; to: readonly number[]; onDone?: () => void },\n ms: number,\n easing: EasingSpec | undefined,\n colorsAt: (t: number) => number[],\n): AnimationHandle {\n const { id, channel } = opts;\n const registry = animator.colorOverrides;\n return animator.tween<number[]>({\n target: registry.target(id, channel, opts.from.length),\n from: opts.from.slice(),\n to: opts.to.slice(),\n ms,\n easing,\n cancelKey: cancelKeyFor(id, channel),\n interrupt: false,\n interpolate: (_from, _to, t) => colorsAt(t),\n onDone: () => {\n registry.release(id, channel);\n opts.onDone?.();\n },\n });\n}\n\n/**\n * Animate one node's per-anchor colors from `from` to `to` over `ms`.\n *\n * It moves the node's color target (`animator.colorOverrides.target`) rather\n * than writing the scene, so nothing is recorded in history and the node's own\n * data is untouched. Another tween or stagger on the same node and channel adds\n * to this one; a spring interrupts it. What it painted is dropped when the last\n * animation on the node and channel finishes, and held where it was if canceled\n * until `animator.colorOverrides.clear`.\n */\nexport function tweenVertexColors(\n animator: Animator,\n opts: TweenVertexColorsOptions,\n): AnimationHandle {\n validateLengths(opts.from, opts.to);\n const interp = resolveInterpolator(opts);\n return tweenColors(animator, opts, opts.ms, opts.easing, (t) => interp(opts.from, opts.to, t));\n}\n\n/** Options for `springVertexColors`. */\nexport interface SpringVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.to`. */\n to: readonly number[];\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.from`. */\n from: readonly number[];\n preset?: SpringPresetName;\n stiffness?: number;\n damping?: number;\n mass?: number;\n onDone?: () => void;\n}\n\n/**\n * `tweenVertexColors` driven by a spring instead of a duration. Each number\n * springs on its own, so an underdamped spring overshoots `to` and the path is\n * a straight line in RGB.\n *\n * It interrupts whatever is animating the node and channel, and starts at the\n * velocity of the one it interrupts, so retargeting mid-flight does not stall.\n */\nexport function springVertexColors(\n animator: Animator,\n opts: SpringVertexColorsOptions,\n): AnimationHandle {\n validateLengths(opts.from, opts.to);\n const { id, channel } = opts;\n const registry = animator.colorOverrides;\n return animator.spring<number[]>({\n target: registry.target(id, channel, opts.from.length),\n from: opts.from.slice(),\n to: opts.to.slice(),\n preset: opts.preset,\n stiffness: opts.stiffness,\n damping: opts.damping,\n mass: opts.mass,\n restThreshold: COLOR_REST,\n cancelKey: cancelKeyFor(id, channel),\n onDone: () => {\n registry.release(id, channel);\n opts.onDone?.();\n },\n });\n}\n\n/** Options for `staggerVertexColors`. `origin` picks which anchor the wave\n * starts from and `perAnchorDelay` how far behind each successive anchor\n * runs. */\nexport interface StaggerVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.to`. */\n to: readonly number[];\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.from`. */\n from: readonly number[];\n anchorMs: number;\n perAnchorDelay: number;\n origin?: 'first' | 'last' | number;\n easing?: EasingSpec;\n interpolation?: ColorSpace;\n interpolate?: ColorInterpolate;\n onDone?: () => void;\n}\n\n/** Run the same color change across a node's anchors as a wave, each anchor\n * starting later than the one before it. It moves the same target as\n * `tweenVertexColors`, and adds to other animations the same way. */\nexport function staggerVertexColors(\n animator: Animator,\n opts: StaggerVertexColorsOptions,\n): AnimationHandle {\n validateLengths(opts.from, opts.to);\n const interp = resolveInterpolator(opts);\n const { from, to, anchorMs, perAnchorDelay } = opts;\n const n = from.length / 4;\n const easing = resolveEasing(opts.easing);\n\n const originIndex =\n opts.origin === 'last' ? n - 1 :\n typeof opts.origin === 'number' ? Math.max(0, Math.min(n - 1, opts.origin)) :\n 0;\n\n const maxDistance = Math.max(originIndex, n - 1 - originIndex);\n const totalMs = maxDistance * perAnchorDelay + anchorMs;\n\n const colorsAt = (elapsedMs: number): number[] => {\n const out = new Array<number>(from.length);\n for (let i = 0; i < n; i++) {\n const distance = Math.abs(i - originIndex);\n const startMs = distance * perAnchorDelay;\n const localT = Math.max(0, Math.min(1, (elapsedMs - startMs) / anchorMs));\n const eased = easing(localT);\n const k = i * 4;\n const fSlice = [from[k], from[k + 1], from[k + 2], from[k + 3]];\n const tSlice = [to[k], to[k + 1], to[k + 2], to[k + 3]];\n const blended = interp(fSlice, tSlice, eased);\n out[k] = blended[0];\n out[k + 1] = blended[1];\n out[k + 2] = blended[2];\n out[k + 3] = blended[3];\n }\n return out;\n };\n\n return tweenColors(animator, opts, totalMs, linear, (t) => colorsAt(t * totalMs));\n}\n","import { resolveEasing } from '@weasel-js/geom';\nimport type { ColorSpace } from '@weasel-js/paint';\nimport type { Animator, EasingSpec } from './types';\nimport type { VertexColorChannel } from './colorRegistry';\nimport { resolveInterpolator, type ColorInterpolate } from './colorInterpolate';\n\n/** Options for `cycleVertexColors`. */\nexport interface CycleVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n msPerCycle: number;\n direction?: 1 | -1;\n easing?: EasingSpec;\n interpolation?: ColorSpace;\n /** Custom interpolator. Receives two RGBA arrays in 0..1 floats and a\n * progress `t` in 0..1; returns the blended array in 0..1 floats. */\n interpolate?: ColorInterpolate;\n}\n\n/** Removes an installed color cycle. Unlike the other color helpers this is\n * not an `AnimationHandle`, because a cycle has no progress to pause or\n * scale — it only ends. */\nexport interface CycleHandle {\n cancel(): void;\n}\n\n/** Register a function override that phase-rotates the base color array\n * along the path index. Returns a handle whose `cancel()` removes the\n * override.\n *\n * The override computes its value purely from `performance.now()`, so\n * there's no per-frame progress to register with the animator's tick\n * loop. To keep the loop alive (so `<SceneCanvas animator>`'s onTick\n * subscription continues firing redraws while the cycle is installed),\n * cycleVertexColors holds an `animator.keepAlive()` entry for the\n * lifetime of the cycle; `cancel()` releases it. */\nexport function cycleVertexColors(\n animator: Animator,\n opts: CycleVertexColorsOptions,\n): CycleHandle {\n const interp = resolveInterpolator(opts);\n const { id, channel } = opts;\n const direction = opts.direction ?? 1;\n const easing = resolveEasing(opts.easing);\n\n const override = (base: readonly number[], tMs: number): number[] => {\n const n = base.length / 4;\n if (n === 0) return base.slice();\n const raw = (tMs / opts.msPerCycle) * n * direction;\n const cycles = raw / n;\n const cycleFrac = cycles - Math.floor(cycles);\n const easedFrac = easing(cycleFrac);\n const easedRaw = (Math.floor(cycles) + easedFrac) * n;\n const phase = ((easedRaw % n) + n) % n;\n const phaseInt = Math.floor(phase);\n const phaseFrac = phase - phaseInt;\n\n const out = new Array<number>(base.length);\n for (let i = 0; i < n; i++) {\n const aIdx = ((i + phaseInt) % n) * 4;\n const bIdx = ((i + phaseInt + 1) % n) * 4;\n const a = [base[aIdx], base[aIdx + 1], base[aIdx + 2], base[aIdx + 3]];\n const b = [base[bIdx], base[bIdx + 1], base[bIdx + 2], base[bIdx + 3]];\n const blended = interp(a, b, phaseFrac);\n const k = i * 4;\n out[k] = blended[0];\n out[k + 1] = blended[1];\n out[k + 2] = blended[2];\n out[k + 3] = blended[3];\n }\n return out;\n };\n\n animator.colorOverrides.set(id, channel, override);\n // Cycle's \"value\" is a function of wall-clock time, not a tween-style\n // progress. We don't register a per-frame ticking animation, so without\n // an explicit keep-alive entry the animator's RAF loop would idle and\n // SceneCanvas's onTick redraw subscription would never fire. Keep the\n // loop running until cancel().\n const releaseKeepAlive = animator.keepAlive();\n\n return {\n cancel(): void {\n animator.colorOverrides.clear(id, channel);\n releaseKeepAlive();\n },\n };\n}\n","import { hslToSrgb } from '@weasel-js/paint';\n\n// Per-anchor RGBA arrays in the 0..1 range the renderer expects: bytes (0..255) clamp every\n// channel to 1.0 on the GPU and render white.\n\n/** Build an n-anchor rainbow RGBA array sweeping the hue wheel. The\n * output is suitable to pass directly into `stroke.vertexColors`,\n * `tweenVertexColors({ from: rainbowVertexColors(n) })`, or any\n * other API that wants per-anchor color floats. */\nexport function rainbowVertexColors(\n n: number,\n opts: { saturation?: number; lightness?: number; alpha?: number } = {},\n): number[] {\n const saturation = opts.saturation ?? 0.8;\n const lightness = opts.lightness ?? 0.6;\n const alpha = opts.alpha ?? 1;\n const out: number[] = [];\n for (let i = 0; i < n; i++) {\n const h = (i * 360) / Math.max(1, n);\n const [r, g, b] = hslToSrgb(h, saturation, lightness);\n out.push(r, g, b, alpha);\n }\n return out;\n}\n\n/** Build an n-anchor solid RGBA array. Shorthand for\n * `[r, g, b, a, r, g, b, a, …]` — the array a `tweenVertexColors`\n * `to`-target typically needs. */\nexport function solidVertexColors(\n n: number,\n r: number,\n g: number,\n b: number,\n a = 1,\n): number[] {\n const out: number[] = [];\n for (let i = 0; i < n; i++) out.push(r, g, b, a);\n return out;\n}\n","import {\n EASINGS, reviveTypedArrays, tagTypedArrays, type BezierEasing, type EasingName, type EasingSpec,\n} from '@weasel-js/geom';\nimport { axisIndexes } from '../axisNames';\nimport type { Target } from '../target';\nimport type { Interpolate } from '../types';\nimport type { EventTrack, NestedTimeline, SampledTrack, TimelineEvent, TimelineTrack, Track } from './types';\n\n/** A value a clip can hold: what `JSON.stringify` writes and `JSON.parse` reads back. The\n * object arm is any object, so a pose typed by an interface is one; `toClip` is what refuses\n * a member JSON cannot round-trip. An object's `undefined` members are left out, as JSON\n * leaves them. */\nexport type ClipValue = number | string | boolean | null | ClipValue[] | object;\n\n/** A keyframe as data. Its easing is a built-in's name or bezier control points. */\nexport interface ClipKey {\n t: number;\n /** A typed array in the live key's value, as a `Path` has, is held as a `TaggedTypedArray`\n * from `@weasel-js/geom`: `{ __ta: 'f32', data: [...] }`. `bindClip` makes it the array again. */\n value: ClipValue;\n easing?: EasingName | BezierEasing;\n}\n\n/** A `SampledTrack` as data: what it moves and how it interpolates are names. */\nexport interface ClipSampledTrack {\n kind: 'sampled';\n label?: string;\n /** Resolved by `ClipBinder.target`. A track with none is sampled and moves nothing. */\n target?: string;\n keys: ClipKey[];\n /** Resolved from `ClipBinder.interpolate`. Without one the track is sampled in its\n * target's axes, or field by field. */\n interpolate?: string;\n /** The track's share of its target: a number, or a name for `ClipBinder.weight` to resolve\n * into a function read each frame, as a crossfade's is. */\n weight?: number | string;\n /** The part of the target the track holds: the target's names for its axes, a rig's joints\n * among them, or positions in its axes where it has no names. */\n axes?: number[] | string[];\n}\n\n/** An `EventTrack` as data: each event is a name and what to carry with it. */\nexport interface ClipEventTrack {\n kind: 'event';\n label?: string;\n events: { t: number; name: string; data?: ClipValue }[];\n}\n\n/** A `TimelineTrack` as data. */\nexport interface ClipTimelineTrack {\n kind: 'timeline';\n label?: string;\n at: number;\n timeline: ClipTimeline;\n}\n\n/** Any track a clip can hold. */\nexport type ClipTrack = ClipSampledTrack | ClipEventTrack | ClipTimelineTrack;\n\n/** A `NestedTimeline` as data. */\nexport interface ClipTimeline {\n tracks: ClipTrack[];\n duration?: number;\n}\n\n/** A timeline as data: what `JSON.stringify` can write, `bindClip` can play, and `toClip`\n * can read back off a live timeline. */\nexport interface Clip extends ClipTimeline {\n version: 1;\n}\n\n/** What turns the names in a clip into the live things a timeline plays. */\nexport interface ClipBinder {\n /** The target a sampled track names. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n target?(name: string): Target<any> | undefined;\n /** Interpolations by name. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n interpolate?: Readonly<Record<string, Interpolate<any>>>;\n /** The function a track's named weight stands for. */\n weight?(name: string): (() => number) | undefined;\n /** What an event does: its `fire`, its `book`, or both. */\n event?(name: string, data: ClipValue | undefined): Pick<TimelineEvent, 'fire' | 'book'> | undefined;\n}\n\nconst defined = <T extends object>(o: T): T => {\n for (const k in o) if (o[k] === undefined) delete o[k];\n return o;\n};\n\nfunction bindTrack(track: ClipTrack, binder: ClipBinder): Track {\n if (track.kind === 'timeline') {\n return defined<TimelineTrack>({ kind: 'timeline', label: track.label, at: track.at, timeline: bindTimeline(track.timeline, binder) });\n }\n if (track.kind === 'event') {\n return defined<EventTrack>({\n kind: 'event',\n label: track.label,\n events: track.events.map((e) => {\n const does = binder.event?.(e.name, e.data);\n if (!does) throw new Error(`bindClip: the binder has no event named \"${e.name}\".`);\n return defined<TimelineEvent>({ t: e.t, name: e.name, data: e.data, fire: does.fire, book: does.book });\n }),\n });\n }\n const target = track.target === undefined ? undefined : binder.target?.(track.target);\n if (track.target !== undefined && !target) throw new Error(`bindClip: the binder has no target named \"${track.target}\".`);\n const interpolate = track.interpolate === undefined ? undefined : binder.interpolate?.[track.interpolate];\n if (track.interpolate !== undefined && !interpolate) {\n throw new Error(`bindClip: the binder has no interpolation named \"${track.interpolate}\".`);\n }\n return defined<SampledTrack<ClipValue>>({\n kind: 'sampled',\n label: track.label,\n keys: track.keys.map((k) => ({ ...k, value: reviveTypedArrays(k.value) as ClipValue })),\n target,\n targetName: track.target,\n interpolate,\n interpolateName: track.interpolate,\n ...bindWeight(track, binder),\n axes: bindAxes(track, target),\n });\n}\n\nfunction bindWeight(track: ClipSampledTrack, binder: ClipBinder): Pick<SampledTrack<ClipValue>, 'weight' | 'weightName'> {\n const { weight } = track;\n if (typeof weight !== 'string') return { weight };\n const read = binder.weight?.(weight);\n if (!read) throw new Error(`bindClip: the binder has no weight named \"${weight}\".`);\n return { weight: read, weightName: weight };\n}\n\n/** A clip track's axes for the live track, refused here where its target has no such axes\n * rather than when the playhead first reaches the track. */\nfunction bindAxes(track: ClipSampledTrack, target: Target<unknown> | undefined): SampledTrack<ClipValue>['axes'] {\n const { axes } = track;\n if (!axes) return undefined;\n const where = `bindClip: track \"${track.label ?? ''}\"`;\n if (!target) throw new Error(`${where} names axes and no target.`);\n axisIndexes(target.axes, axes, `${where} on the target \"${track.target}\"`);\n return [...axes] as SampledTrack<ClipValue>['axes'];\n}\n\nfunction bindTimeline(timeline: ClipTimeline, binder: ClipBinder): NestedTimeline {\n return defined<NestedTimeline>({ tracks: timeline.tracks.map((t) => bindTrack(t, binder)), duration: timeline.duration });\n}\n\n/**\n * The live timeline a clip describes, for `animator.timeline`: each sampled track given the\n * target and interpolation it names, each event what the binder says it does. The tracks\n * keep those names, so `toClip` can write them back after an editor has changed them.\n * Throws on a name the binder does not resolve.\n */\nexport function bindClip(clip: Clip, binder: ClipBinder): NestedTimeline {\n if (clip.version !== 1) throw new Error(`bindClip: this clip is version ${String(clip.version)}, and version 1 is the one understood.`);\n return bindTimeline(clip, binder);\n}\n\nconst EASING_NAMES = new Map<unknown, EasingName>(\n (Object.keys(EASINGS) as EasingName[]).map((name) => [EASINGS[name], name]),\n);\n\nfunction isClipValue(v: unknown): v is ClipValue {\n if (v === null || typeof v === 'string' || typeof v === 'boolean') return true;\n if (typeof v === 'number') return Number.isFinite(v);\n if (Array.isArray(v)) return v.every(isClipValue);\n if (typeof v !== 'object' || Object.prototype.toString.call(v) !== '[object Object]') return false;\n return Object.values(v as object).every((member) => member === undefined || isClipValue(member));\n}\n\nfunction easingOf(spec: EasingSpec | undefined, where: string): EasingName | BezierEasing | undefined {\n if (spec === undefined || typeof spec === 'string') return spec;\n if (typeof spec !== 'function') return { bezier: [...spec.bezier] as BezierEasing['bezier'] };\n const name = EASING_NAMES.get(spec);\n if (!name) throw new Error(`toClip: ${where} eases a key by a function that is not a built-in; name it or use bezier points.`);\n return name;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction sampledToClip(track: SampledTrack<any>, where: string): ClipSampledTrack {\n if (track.onTick) throw new Error(`toClip: ${where} has an onTick, which a clip cannot hold; move the value with a target.`);\n if (track.target && track.targetName === undefined) throw new Error(`toClip: ${where} has a target and no targetName.`);\n if (track.interpolator) throw new Error(`toClip: ${where} has an interpolator, which a clip cannot hold.`);\n if (track.interpolate && track.interpolateName === undefined) throw new Error(`toClip: ${where} has an interpolate and no interpolateName.`);\n if (typeof track.weight === 'function' && track.weightName === undefined) {\n throw new Error(`toClip: ${where} has a function for its weight and no weightName.`);\n }\n return defined<ClipSampledTrack>({\n kind: 'sampled',\n label: track.label,\n target: track.targetName,\n keys: track.keys.map((k) => {\n const value = tagTypedArrays(k.value);\n if (!isClipValue(value)) throw new Error(`toClip: ${where} holds a value JSON cannot round-trip, at t = ${k.t}.`);\n return defined<ClipKey>({ t: k.t, value, easing: easingOf(k.easing, where) });\n }),\n interpolate: track.interpolateName,\n weight: typeof track.weight === 'function' ? track.weightName : track.weight,\n axes: track.axes && ([...track.axes] as ClipSampledTrack['axes']),\n });\n}\n\nfunction trackToClip(track: Track, index: number): ClipTrack {\n const where = `track \"${track.label ?? index}\"`;\n if (track.kind === 'timeline') {\n return defined<ClipTimelineTrack>({ kind: 'timeline', label: track.label, at: track.at, timeline: timelineToClip(track.timeline) });\n }\n if (track.kind === 'sampled') return sampledToClip(track, where);\n return defined<ClipEventTrack>({\n kind: 'event',\n label: track.label,\n events: track.events.map((e) => {\n if (e.name === undefined) throw new Error(`toClip: ${where} has an event with no name, at t = ${e.t}.`);\n if (e.data !== undefined && !isClipValue(e.data)) throw new Error(`toClip: ${where} carries data JSON cannot round-trip, at t = ${e.t}.`);\n return defined({ t: e.t, name: e.name, data: e.data as ClipValue | undefined });\n }),\n });\n}\n\nfunction timelineToClip(timeline: NestedTimeline): ClipTimeline {\n return defined<ClipTimeline>({ tracks: timeline.tracks.map(trackToClip), duration: timeline.duration });\n}\n\n/**\n * A live timeline as a clip: `{ tracks, duration }` as `animator.timeline` takes them, or\n * `{ tracks: handle.tracks() }` off a running one. Each track is written by the names it\n * carries (`targetName`, `interpolateName`, an event's `name`), which `bindClip` sets and a\n * track written by hand can set too. A typed array in a key's value is written tagged.\n * Throws, naming the track, on anything a clip cannot hold: a function with no name, an\n * `onTick`, or a value JSON would not read back.\n */\nexport function toClip(timeline: NestedTimeline): Clip {\n return { version: 1, ...timelineToClip(timeline) };\n}\n","import type { JointTransform, Pose, Skeleton } from './types';\n\n/**\n * `pose` reflected across the rig's y axis, as deltas against the same\n * skeleton — so the mirrored pose still blends, samples, and resolves like any\n * other, and a rig faces the other way without a negative scale anywhere.\n *\n * Each joint's `x` and `rotation` are negated as bind plus delta, so the delta\n * for a joint the pose leaves at its bind is nonzero whenever the bind is.\n * Applying it twice gives the original pose back.\n */\nexport function mirrorPose(skeleton: Skeleton, pose: Pose): Pose {\n const out: Pose = {};\n const binds = new Map<string, JointTransform>();\n for (const joint of skeleton.joints) binds.set(joint.name, joint.bind);\n const names = new Set([...binds.keys(), ...Object.keys(pose)]);\n for (const name of names) {\n const bind = binds.get(name);\n const d = pose[name];\n out[name] = {\n ...d,\n x: -2 * (bind?.x ?? 0) - (d?.x ?? 0),\n rotation: -2 * (bind?.rotation ?? 0) - (d?.rotation ?? 0),\n };\n }\n return out;\n}\n","import { mat3, type GlMat3 } from '@weasel-js/geom';\nimport type { JointTransform, Pose, Skeleton } from './types';\n\n/** bind + delta, field by field. Scale is multiplicative, the rest additive. */\nexport function compose(bind: JointTransform, delta: Partial<JointTransform> | undefined): JointTransform {\n if (!delta) return bind;\n return {\n x: bind.x + (delta.x ?? 0),\n y: bind.y + (delta.y ?? 0),\n rotation: bind.rotation + (delta.rotation ?? 0),\n scaleX: bind.scaleX * (delta.scaleX ?? 1),\n scaleY: bind.scaleY * (delta.scaleY ?? 1),\n };\n}\n\n/** TRS as a GlMat3: translate * rotate * scale, applied to a column vector. */\nexport function toMat3(t: JointTransform): GlMat3 {\n const c = Math.cos(t.rotation);\n const s = Math.sin(t.rotation);\n const m = new Float32Array(9) as GlMat3;\n m[0] = c * t.scaleX; m[1] = s * t.scaleX; m[2] = 0;\n m[3] = -s * t.scaleY; m[4] = c * t.scaleY; m[5] = 0;\n m[6] = t.x; m[7] = t.y; m[8] = 1;\n return m;\n}\n\n/**\n * Resolve every joint's world transform by walking the skeleton once and\n * composing each joint onto its already-resolved parent.\n *\n * `skeleton.joints` must be in topological order — a joint whose parent has not\n * been resolved yet throws rather than silently resolving against identity,\n * because that failure is otherwise invisible until a limb renders in the wrong\n * place.\n */\nexport function resolveSkeleton(skeleton: Skeleton, pose: Pose): Map<string, GlMat3> {\n const out = new Map<string, GlMat3>();\n for (const joint of skeleton.joints) {\n const local = toMat3(compose(joint.bind, pose[joint.name]));\n if (joint.parent == null) {\n out.set(joint.name, local);\n continue;\n }\n const parent = out.get(joint.parent);\n if (!parent) {\n throw new Error(\n `resolveSkeleton: joint \"${joint.name}\" names parent \"${joint.parent}\", which has not ` +\n 'been resolved. Skeleton.joints must be in topological order.',\n );\n }\n out.set(joint.name, mat3.multiply(parent, local));\n }\n return out;\n}\n","/** A joint's local transform. Deliberately NOT the scene's generic `TPose`:\n * `TPose` is consumer-defined and may be a bare AABB with no rotation term,\n * which a joint chain cannot compose through. */\nexport interface JointTransform {\n x: number;\n y: number;\n /** Radians. */\n rotation: number;\n scaleX: number;\n scaleY: number;\n}\n\n/** One joint of a `Skeleton`. */\nexport interface Joint {\n name: string;\n /** Parent joint name, or null for a root. */\n parent: string | null;\n /** Local transform at rest. */\n bind: JointTransform;\n}\n\n/** Joints in topological order: every joint appears after its parent. */\nexport interface Skeleton {\n joints: Joint[];\n}\n\n/** Local deltas from the bind pose, keyed by joint name. Absent joints and\n * absent fields mean \"no change from bind\". */\nexport type Pose = Record<string, Partial<JointTransform>>;\n\n/** The transform that changes nothing: origin, no rotation, unit scale. */\nexport const IDENTITY_JOINT: JointTransform = {\n x: 0, y: 0, rotation: 0, scaleX: 1, scaleY: 1,\n};\n","import { axisIndexes } from '../axisNames';\nimport type { TargetAxes } from '../target';\nimport { IDENTITY_JOINT, type JointTransform, type Pose, type Skeleton } from './types';\n\nconst FIELDS = ['x', 'y', 'rotation', 'scaleX', 'scaleY'] as const satisfies readonly (keyof JointTransform)[];\nconst ROTATION = FIELDS.indexOf('rotation');\n\n/** A name for each axis of `skeletonAxes(skeleton)`: `<joint>.<field>`. */\nfunction axisNames(skeleton: Skeleton): string[] {\n return skeleton.joints.flatMap((joint) => FIELDS.map((field) => `${joint.name}.${field}`));\n}\n\n/**\n * The axes of `skeletonAxes(skeleton)` that belong to `joints`, as indexes, for a caller with\n * a skeleton and no target. A hold or a track on a rig's target takes the joints' names\n * themselves: `animator.hold({ target: rig.target, value: pose, axes: arm })`.\n */\nexport function jointAxes(skeleton: Skeleton, joints: readonly string[]): number[] {\n const names = axisNames(skeleton);\n return axisIndexes({ count: names.length, names }, joints, 'jointAxes: `joints`');\n}\n\n/**\n * How a {@link Pose} of `skeleton` maps to the numbers an animation moves: five per joint in\n * skeleton order (`x`, `y`, `rotation`, `scaleX`, `scaleY`), every rotation an angle, so a pose\n * blends the short way round. Each axis is named `<joint>.<field>`, so `axes: ['knee']` on a hold\n * reaches a joint's five and `['knee.rotation']` one of them. A joint or field the pose leaves out reads as its identity, and a\n * pose read back names every joint in full. Pass it as `axes` to `createTarget` for a pose target\n * of your own; a bound rig's is `Rig.target`.\n */\nexport function skeletonAxes(skeleton: Skeleton): TargetAxes<Pose> {\n const names = skeleton.joints.map((j) => j.name);\n const n = FIELDS.length;\n return {\n count: names.length * n,\n angles: names.map((_, j) => j * n + ROTATION),\n names: axisNames(skeleton),\n to(pose) {\n const out = new Array<number>(names.length * n);\n for (let j = 0; j < names.length; j++) {\n const joint = pose[names[j]!];\n for (let f = 0; f < n; f++) out[j * n + f] = joint?.[FIELDS[f]!] ?? IDENTITY_JOINT[FIELDS[f]!];\n }\n return out;\n },\n add(pose, delta) {\n const out: Pose = {};\n for (let j = 0; j < names.length; j++) {\n const joint = pose[names[j]!];\n const at = j * n;\n out[names[j]!] = {\n x: (joint?.x ?? IDENTITY_JOINT.x) + delta[at]!,\n y: (joint?.y ?? IDENTITY_JOINT.y) + delta[at + 1]!,\n rotation: (joint?.rotation ?? IDENTITY_JOINT.rotation) + delta[at + 2]!,\n scaleX: (joint?.scaleX ?? IDENTITY_JOINT.scaleX) + delta[at + 3]!,\n scaleY: (joint?.scaleY ?? IDENTITY_JOINT.scaleY) + delta[at + 4]!,\n };\n }\n return out;\n },\n write(pose, out, at) {\n for (let j = 0; j < names.length; j++) {\n const joint = pose[names[j]!];\n for (let f = 0; f < n; f++) out[at + j * n + f] = joint?.[FIELDS[f]!] ?? IDENTITY_JOINT[FIELDS[f]!];\n }\n },\n from(axes) {\n const pose: Pose = {};\n for (let j = 0; j < names.length; j++) {\n const at = j * n;\n pose[names[j]!] = { x: axes[at]!, y: axes[at + 1]!, rotation: axes[at + 2]!, scaleX: axes[at + 3]!, scaleY: axes[at + 4]! };\n }\n return pose;\n },\n };\n}\n","import { mat3, type GlMat3 } from '@weasel-js/geom';\nimport { compose, resolveSkeleton, toMat3 } from './resolveSkeleton';\nimport type { Joint, Pose, Skeleton } from './types';\n\nconst TAU = Math.PI * 2;\n\n/** A point in the skeleton's space — the space `resolveSkeleton` resolves into. */\nexport interface IkPoint {\n x: number;\n y: number;\n}\n\n/** Bounds on a joint's rotation delta from its bind, in radians, with\n * `-PI <= min <= max <= PI`. */\nexport interface IkLimit {\n min: number;\n max: number;\n}\n\n/** Options for {@link solveIk}. */\nexport interface SolveIkOptions {\n /** The joints the solver may rotate, root first, each the parent of the next. */\n joints: readonly string[];\n /** The end effector, in the last joint's local frame — the forearm's length\n * along its +x for an arm, or a hand joint's bind offset. */\n tip: IkPoint;\n /** Where the tip should go, in skeleton space. A rig posed with a `root`\n * wants the target carried back through that root's inverse first. */\n target: IkPoint;\n /** Per-joint limits, keyed by joint name. A joint without one turns freely. */\n limits?: Readonly<Record<string, IkLimit>>;\n /** Two-joint chains only: the middle joint bends toward this point, in\n * skeleton space. Without it the chain keeps the bend the input pose has. */\n pole?: IkPoint;\n /** Most CCD sweeps to run. Default 32. */\n iterations?: number;\n /** Tip-to-target distance that counts as reached, in skeleton units.\n * Default 0.01. */\n tolerance?: number;\n}\n\n/** What {@link solveIk} returns. */\nexport interface IkResult {\n /** The input pose with each chain joint's rotation replaced. */\n pose: Pose;\n /** Tip-to-target distance the solve ended at. */\n distance: number;\n /** Whether `distance` is within the tolerance. False for a target out of\n * reach, which leaves the chain pointing straight at it. */\n reached: boolean;\n /** CCD sweeps run; 0 when the two-joint solution or the straight-line\n * answer for an unreachable target settled it. */\n iterations: number;\n}\n\nfunction wrap(a: number): number {\n return a - TAU * Math.round(a / TAU);\n}\n\n/** `v` held to `limit`, where out of range means the nearer bound around the circle. */\nfunction clampAngle(v: number, limit: IkLimit | undefined): number {\n if (!limit) return v;\n for (const c of [v, v - TAU, v + TAU]) if (c >= limit.min && c <= limit.max) return c;\n return Math.abs(wrap(v - limit.min)) <= Math.abs(wrap(v - limit.max)) ? limit.min : limit.max;\n}\n\nconst cross = (ax: number, ay: number, bx: number, by: number) => ax * by - ay * bx;\n\n/**\n * Rotate a joint chain so its tip reaches `target`, returning the result as an\n * ordinary {@link Pose}. Weighting the IK against an animated pose is\n * `animator.hold({ target: rig.target, value: solved, weight: w })` beside the\n * clip at weight `1 - w`; with `axes: jointAxes(skeleton, joints)` on both, the\n * rest of the body is left to whatever else holds it.\n *\n * The solver is cyclic coordinate descent, and limits clamp the rotation the\n * pose stores. A two-joint chain is solved analytically first: of the two bends\n * that reach the target it takes the one on `pole`'s side, or the input pose's\n * side, and falls back to the other bend and then to CCD when limits refuse it.\n * A target beyond the chain's reach straightens the chain toward it.\n */\nexport function solveIk(skeleton: Skeleton, pose: Pose, options: SolveIkOptions): IkResult {\n const { tip, target, limits } = options;\n const maxIterations = options.iterations ?? 32;\n const tolerance = options.tolerance ?? 0.01;\n\n const byName = new Map<string, Joint>();\n for (const joint of skeleton.joints) byName.set(joint.name, joint);\n const chain = options.joints.map((name, i) => {\n const joint = byName.get(name);\n if (!joint) throw new Error(`solveIk: the skeleton has no joint \"${name}\".`);\n if (i > 0 && joint.parent !== options.joints[i - 1]) {\n throw new Error(\n `solveIk: chain joint \"${name}\" names parent \"${joint.parent}\", not \"${options.joints[i - 1]}\". ` +\n 'Each chain joint must be the parent of the next.',\n );\n }\n return joint;\n });\n const n = chain.length;\n if (n === 0) return { pose: { ...pose }, distance: Infinity, reached: false, iterations: 0 };\n\n const rootParent = chain[0].parent;\n const base = rootParent == null ? mat3.identity() : resolveSkeleton(skeleton, pose).get(rootParent)!;\n const rot = chain.map((joint) => clampAngle(wrap(pose[joint.name]?.rotation ?? 0), limits?.[joint.name]));\n\n let worlds: GlMat3[] = [];\n const resolve = () => {\n worlds = [];\n let parent = base;\n for (let i = 0; i < n; i += 1) {\n const joint = chain[i];\n parent = mat3.multiply(parent, toMat3(compose(joint.bind, { ...pose[joint.name], rotation: rot[i] })));\n worlds.push(parent);\n }\n };\n const pivot = (i: number) => mat3.apply(worlds[i], 0, 0);\n const tipWorld = () => mat3.apply(worlds[n - 1], tip.x, tip.y);\n /** The point joint `i` swings: the next joint's pivot, or the tip. */\n const next = (i: number) => (i + 1 < n ? pivot(i + 1) : tipWorld());\n\n /** Turn joint `i` so `effector` lies on the ray toward `goal`. True when a\n * limit cut the turn short. */\n const aim = (i: number, effector: [number, number], goal: IkPoint): boolean => {\n const inv = mat3.invert(i === 0 ? base : worlds[i - 1]);\n if (!inv) return false;\n const [ox, oy] = mat3.apply(inv, ...pivot(i));\n const [ex, ey] = mat3.apply(inv, ...effector);\n const [gx, gy] = mat3.apply(inv, goal.x, goal.y);\n if (Math.hypot(ex - ox, ey - oy) < 1e-9 || Math.hypot(gx - ox, gy - oy) < 1e-9) return false;\n const want = wrap(rot[i] + Math.atan2(gy - oy, gx - ox) - Math.atan2(ey - oy, ex - ox));\n rot[i] = clampAngle(want, limits?.[chain[i].name]);\n resolve();\n return Math.abs(wrap(rot[i] - want)) > 1e-9;\n };\n\n const distance = () => {\n const [x, y] = tipWorld();\n return Math.hypot(x - target.x, y - target.y);\n };\n const result = (iterations: number): IkResult => {\n const out: Pose = { ...pose };\n chain.forEach((joint, i) => { out[joint.name] = { ...pose[joint.name], rotation: rot[i] }; });\n const d = distance();\n return { pose: out, distance: d, reached: d <= tolerance, iterations };\n };\n\n resolve();\n const [rx, ry] = pivot(0);\n let reach = 0;\n for (let i = 0; i < n; i += 1) {\n const [ax, ay] = pivot(i);\n const [bx, by] = next(i);\n reach += Math.hypot(bx - ax, by - ay);\n }\n const toTarget = Math.hypot(target.x - rx, target.y - ry);\n\n if (toTarget >= reach) {\n for (let i = 0; i < n; i += 1) aim(i, next(i), target);\n return result(0);\n }\n\n if (n === 2 && toTarget > 1e-9) {\n const start = rot.slice();\n const [mx, my] = pivot(1);\n const [tx, ty] = tipWorld();\n const a = Math.hypot(mx - rx, my - ry);\n const b = Math.hypot(tx - mx, ty - my);\n const dx = target.x - rx;\n const dy = target.y - ry;\n const bendSide = options.pole\n ? cross(dx, dy, options.pole.x - rx, options.pole.y - ry)\n : cross(dx, dy, mx - rx, my - ry);\n const side = bendSide < 0 ? -1 : 1;\n const inner = Math.acos(Math.max(-1, Math.min(1, (a * a + toTarget * toTarget - b * b) / (2 * a * toTarget))));\n const heading = Math.atan2(dy, dx);\n\n const bend = (s: number): boolean => {\n rot.splice(0, 2, ...start);\n resolve();\n const elbow = { x: rx + a * Math.cos(heading + s * inner), y: ry + a * Math.sin(heading + s * inner) };\n const cut = aim(0, pivot(1), elbow);\n return aim(1, tipWorld(), target) || cut;\n };\n if (!bend(side) || !bend(-side)) {\n if (distance() <= tolerance) return result(0);\n } else {\n bend(side);\n }\n }\n\n let iterations = 0;\n while (iterations < maxIterations && distance() > tolerance) {\n for (let i = n - 1; i >= 0; i -= 1) aim(i, tipWorld(), target);\n iterations += 1;\n }\n return result(iterations);\n}\n","import { mat3, PATH_L, PATH_M, PATH_Z, type GlMat3, type Path, type PolygonPath } from '@weasel-js/geom';\nimport { resolveSkeleton } from './resolveSkeleton';\nimport type { Skeleton } from './types';\n\n/**\n * How much each point of a path follows each joint: one array per joint name, indexed by\n * point. Point `i` is the `i`-th coordinate pair of a polygon path's `coords`, so anchors and\n * curve handles are weighted alike; a rect's points are its corners, clockwise from the top\n * left. A joint left out, and an index past an array's end, weigh nothing. Weights need not\n * sum to 1: they are normalized per point as they are applied.\n */\nexport type Skin = Readonly<Record<string, readonly number[]>>;\n\n/**\n * Each joint's motion since the bind pose, in world space: `world * inverse(restWorld)`.\n * `world` is what `resolveSkeleton` or `Rig.world()` answers.\n */\nexport function motionsFromRest(\n skeleton: Skeleton,\n world: ReadonlyMap<string, GlMat3>,\n): Map<string, GlMat3> {\n const rest = resolveSkeleton(skeleton, {});\n const out = new Map<string, GlMat3>();\n for (const [name, r] of rest) {\n const inverse = mat3.invert(r);\n if (!inverse) throw new Error(`motionsFromRest: joint \"${name}\" is singular at the bind pose.`);\n const w = world.get(name);\n if (w) out.set(name, mat3.multiply(w, inverse));\n }\n return out;\n}\n\nconst RECT_COMMANDS = new Uint8Array([PATH_M, PATH_L, PATH_L, PATH_L, PATH_Z]);\n\n/** The path whose points a skin indexes: a rect as its four corners. */\nexport function skinnable(path: Path): PolygonPath {\n if (path.kind === 'polygon') return path;\n const { x, y, width, height } = path;\n return {\n kind: 'polygon',\n commands: RECT_COMMANDS,\n coords: new Float32Array([x, y, x + width, y, x + width, y + height, x, y + height]),\n fillRule: 'nonzero',\n };\n}\n\n/**\n * Bend `path` by linear blend skinning: each point goes where its joints' motions since the\n * bind pose would carry it, averaged by weight. `path` is the shape at the bind pose, in the\n * space `motions` are in; it is not modified. A point no joint weighs stays where it is.\n */\nexport function skinPath(path: Path, skin: Skin, motions: ReadonlyMap<string, GlMat3>): PolygonPath {\n const rest = skinnable(path);\n const from = rest.coords;\n const count = from.length >> 1;\n const sum = new Float64Array(from.length);\n const total = new Float64Array(count);\n for (const joint in skin) {\n const m = motions.get(joint);\n if (!m) throw new Error(`skinPath: the skin weighs joint \"${joint}\", which has no motion.`);\n const weights = skin[joint];\n const n = Math.min(count, weights.length);\n for (let i = 0; i < n; i++) {\n const w = weights[i];\n if (!(w > 0)) continue;\n const x = from[2 * i];\n const y = from[2 * i + 1];\n sum[2 * i] += w * (m[0] * x + m[3] * y + m[6]);\n sum[2 * i + 1] += w * (m[1] * x + m[4] * y + m[7]);\n total[i] += w;\n }\n }\n const coords = new Float32Array(from.length);\n for (let i = 0; i < count; i++) {\n const t = total[i];\n coords[2 * i] = t > 0 ? sum[2 * i] / t : from[2 * i];\n coords[2 * i + 1] = t > 0 ? sum[2 * i + 1] / t : from[2 * i + 1];\n }\n return { ...rest, coords };\n}\n","import { mat3, type Path } from '@weasel-js/geom';\nimport { resolveSkeleton } from './resolveSkeleton';\nimport { skinnable, type Skin } from './skin';\nimport type { Skeleton } from './types';\n\n/** Options for `autoSkin`. */\nexport interface AutoSkinOptions {\n /** How fast a bone's pull falls off with distance: a weight is `1 / distance ** power`.\n * Higher keeps the bend closer to the joint. Default 4. */\n power?: number;\n /** The most joints a point follows; the nearest are kept. Default 2. */\n max?: number;\n}\n\ninterface Bone {\n joint: string;\n /** Flat `x0, y0, x1, y1` per segment, from the joint to each of its children. */\n segments: number[];\n}\n\nfunction distanceToSegment(px: number, py: number, ax: number, ay: number, bx: number, by: number): number {\n const dx = bx - ax;\n const dy = by - ay;\n const len2 = dx * dx + dy * dy;\n const t = len2 > 0 ? Math.min(1, Math.max(0, ((px - ax) * dx + (py - ay) * dy) / len2)) : 0;\n return Math.hypot(px - (ax + t * dx), py - (ay + t * dy));\n}\n\n/** A joint's bones run to its children. A joint with no child has none, being where its\n * parent's bone ends, unless it has no parent either. */\nfunction bonesOf(skeleton: Skeleton): Bone[] {\n const world = resolveSkeleton(skeleton, {});\n const at = new Map<string, [number, number]>();\n for (const [name, m] of world) at.set(name, mat3.apply(m, 0, 0));\n const bones = new Map<string, Bone>();\n for (const joint of skeleton.joints) {\n if (joint.parent == null) continue;\n let bone = bones.get(joint.parent);\n if (!bone) {\n bone = { joint: joint.parent, segments: [] };\n bones.set(joint.parent, bone);\n }\n bone.segments.push(...at.get(joint.parent)!, ...at.get(joint.name)!);\n }\n for (const joint of skeleton.joints) {\n if (joint.parent != null || bones.has(joint.name)) continue;\n const [x, y] = at.get(joint.name)!;\n bones.set(joint.name, { joint: joint.name, segments: [x, y, x, y] });\n }\n // Skeleton order, so a tie between bones goes to the one nearer the root.\n return skeleton.joints.flatMap((joint) => bones.get(joint.name) ?? []);\n}\n\n/**\n * Weights for `path` from how far each of its points is from each bone of `skeleton` at the\n * bind pose. `path` is in the skeleton's space. A point on a bone follows that bone alone.\n */\nexport function autoSkin(path: Path, skeleton: Skeleton, options: AutoSkinOptions = {}): Skin {\n const power = options.power ?? 4;\n const max = Math.max(1, options.max ?? 2);\n const bones = bonesOf(skeleton);\n const coords = skinnable(path).coords;\n const count = coords.length >> 1;\n const out = new Map<string, number[]>();\n const distance = new Float64Array(bones.length);\n const order = bones.map((_, b) => b);\n\n for (let i = 0; i < count; i++) {\n const px = coords[2 * i];\n const py = coords[2 * i + 1];\n for (let b = 0; b < bones.length; b++) {\n const s = bones[b].segments;\n let d = Infinity;\n for (let k = 0; k < s.length; k += 4) d = Math.min(d, distanceToSegment(px, py, s[k], s[k + 1], s[k + 2], s[k + 3]));\n distance[b] = d;\n }\n order.sort((a, b) => distance[a] - distance[b] || a - b);\n const kept = order.slice(0, max);\n const nearest = distance[kept[0]];\n let total = 0;\n const raw = kept.map((b) => {\n const w = nearest === 0 ? (distance[b] === 0 ? 1 : 0) : (nearest / distance[b]) ** power;\n total += w;\n return w;\n });\n kept.forEach((b, k) => {\n if (raw[k] === 0) return;\n let weights = out.get(bones[b].joint);\n if (!weights) {\n weights = new Array<number>(count).fill(0);\n out.set(bones[b].joint, weights);\n }\n weights[i] = raw[k] / total;\n });\n }\n return Object.fromEntries(out);\n}\n","import { mat3 } from '@weasel-js/geom';\nimport { resolveSkeleton } from './resolveSkeleton';\nimport type { Skin } from './skin';\nimport { IDENTITY_JOINT, type Joint, type Skeleton } from './types';\n\n/** Where each joint rests, in the skeleton's space and in its order. */\nexport function jointPositions(skeleton: Skeleton): Map<string, { x: number; y: number }> {\n const out = new Map<string, { x: number; y: number }>();\n for (const [name, m] of resolveSkeleton(skeleton, {})) {\n const [x, y] = mat3.apply(m, 0, 0);\n out.set(name, { x, y });\n }\n return out;\n}\n\n/** The joint resting nearest `(x, y)` and no further than `reach` from it, or `null`. */\nexport function jointAt(skeleton: Skeleton, x: number, y: number, reach: number): string | null {\n let best: string | null = null;\n let bestD = reach;\n for (const [name, p] of jointPositions(skeleton)) {\n const d = Math.hypot(p.x - x, p.y - y);\n if (d <= bestD) {\n best = name;\n bestD = d;\n }\n }\n return best;\n}\n\n/** `(x, y)` in the frame `parent`'s children are placed in. */\nfunction inParent(skeleton: Skeleton, parent: string | null, x: number, y: number): [number, number] {\n if (parent == null) return [x, y];\n const world = resolveSkeleton(skeleton, {}).get(parent);\n if (!world) throw new Error(`The skeleton has no joint \"${parent}\".`);\n const inverse = mat3.invert(world);\n if (!inverse) throw new Error(`Joint \"${parent}\" is singular at the bind pose.`);\n return mat3.apply(inverse, x, y);\n}\n\n/** `skeleton` with `name` resting at `(x, y)`. The joints under it keep their offsets from it,\n * so they move along. */\nexport function moveJoint(skeleton: Skeleton, name: string, x: number, y: number): Skeleton {\n const joint = skeleton.joints.find((j) => j.name === name);\n if (!joint) throw new Error(`moveJoint: the skeleton has no joint \"${name}\".`);\n const [lx, ly] = inParent(skeleton, joint.parent, x, y);\n return {\n joints: skeleton.joints.map((j) => (j === joint ? { ...j, bind: { ...j.bind, x: lx, y: ly } } : j)),\n };\n}\n\n/** `skeleton` with a new joint resting at `(x, y)` under `parent`, or as a root for `null`.\n * Without a `name` it gets the first of `joint`, `joint2`, … not in use. */\nexport function addJoint(\n skeleton: Skeleton,\n parent: string | null,\n x: number,\n y: number,\n name?: string,\n): { skeleton: Skeleton; name: string } {\n const taken = new Set(skeleton.joints.map((j) => j.name));\n let picked = name;\n if (picked === undefined) {\n picked = 'joint';\n for (let n = 2; taken.has(picked); n++) picked = `joint${n}`;\n } else if (taken.has(picked)) {\n throw new Error(`addJoint: the skeleton already has a joint \"${picked}\".`);\n }\n const [lx, ly] = inParent(skeleton, parent, x, y);\n const joint: Joint = { name: picked, parent, bind: { ...IDENTITY_JOINT, x: lx, y: ly } };\n return { skeleton: { joints: [...skeleton.joints, joint] }, name: picked };\n}\n\n/** `skeleton` without `name` and the joints under it, and the names that went. */\nexport function removeJoint(skeleton: Skeleton, name: string): { skeleton: Skeleton; removed: string[] } {\n const gone = new Set([name]);\n // Topological order: a joint's parent is decided before it is reached.\n for (const j of skeleton.joints) if (j.parent != null && gone.has(j.parent)) gone.add(j.name);\n const removed = skeleton.joints.filter((j) => gone.has(j.name)).map((j) => j.name);\n return { skeleton: { joints: skeleton.joints.filter((j) => !gone.has(j.name)) }, removed };\n}\n\n/** `skin` without the weights of `joints`; the same object when it weighs none of them. */\nexport function dropSkinJoints(skin: Skin, joints: readonly string[]): Skin {\n if (!joints.some((j) => j in skin)) return skin;\n const out: Record<string, readonly number[]> = {};\n for (const j in skin) if (!joints.includes(j)) out[j] = skin[j];\n return out;\n}\n","import type { Skin } from './skin';\n\n/**\n * `skin` with `joint`'s weight set on some points: `weights` maps a point's index to the new\n * weight, clamped to 0..1. On each of those points the other joints are scaled to share what\n * is left, so the point still sums to 1; a point no other joint weighs goes wholly to `joint`,\n * as it would when the skin is applied. Every array comes back `count` long, and a joint left\n * weighing nothing is dropped.\n */\nexport function setWeights(\n skin: Skin,\n count: number,\n joint: string,\n weights: ReadonlyMap<number, number>,\n): Skin {\n const next: Record<string, number[]> = {};\n for (const name in skin) next[name] = Array.from({ length: count }, (_, i) => skin[name][i] ?? 0);\n const own = (next[joint] ??= new Array<number>(count).fill(0));\n for (const [i, raw] of weights) {\n if (i < 0 || i >= count) continue;\n const w = Math.min(1, Math.max(0, raw));\n let others = 0;\n for (const name in next) if (name !== joint) others += next[name][i];\n if (others > 0) {\n for (const name in next) if (name !== joint) next[name][i] *= (1 - w) / others;\n own[i] = w;\n } else {\n own[i] = w > 0 ? 1 : 0;\n }\n }\n for (const name in next) if (!next[name].some((w) => w > 0)) delete next[name];\n return next;\n}\n\n/**\n * What a round brush at `(x, y)` does to one joint's weights: for each point of `coords`\n * within `radius`, a weight falling off linearly from the center. `'add'` raises a point\n * toward 1 and `'remove'` lowers it toward 0; neither moves a point the other way. Answers\n * only the points that change, by index, for {@link setWeights}.\n */\nexport function brushWeights(\n coords: ArrayLike<number>,\n x: number,\n y: number,\n radius: number,\n current: readonly number[] | undefined,\n mode: 'add' | 'remove',\n): Map<number, number> {\n const out = new Map<number, number>();\n for (let i = 0; 2 * i + 1 < coords.length; i++) {\n const d = Math.hypot(coords[2 * i] - x, coords[2 * i + 1] - y);\n if (d >= radius) continue;\n const had = current?.[i] ?? 0;\n const want = mode === 'add' ? Math.max(had, 1 - d / radius) : Math.min(had, d / radius);\n if (want !== had) out.set(i, want);\n }\n return out;\n}\n"]}