@weasel-js/animator 1.15.2 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -111,6 +111,7 @@ declare class ColorOverrideRegistry {
111
111
  private readonly map;
112
112
  private readonly slots;
113
113
  private readonly tables;
114
+ private readonly listeners;
114
115
  private _version;
115
116
  set(id: string, channel: VertexColorChannel, override: ColorOverride): void;
116
117
  /** Drops `id`'s override on `channel`, and the colors a finished or canceled animation on its
@@ -119,7 +120,8 @@ declare class ColorOverrideRegistry {
119
120
  clearAll(): void;
120
121
  /** What `set` stored for `id`'s `channel`; failing that, the colors its {@link target} paints. */
121
122
  get(id: string, channel: VertexColorChannel): ColorOverride | undefined;
122
- /** Whether anything overrides `id`, on either channel. */
123
+ /** Whether anything paints over `id`, on either channel: an override from `set`, or a target
124
+ * an animation has committed. A target asked for and never moved does not count. */
123
125
  has(id: string): boolean;
124
126
  /**
125
127
  * The {@link Target} for `id`'s colors on `channel`: `length` numbers, flat RGBA per anchor.
@@ -145,7 +147,66 @@ declare class ColorOverrideRegistry {
145
147
  */
146
148
  resolve(id: string, channel: VertexColorChannel, base: readonly number[] | undefined, tMs: number): readonly number[] | undefined;
147
149
  private apply;
150
+ /** Calls `listener` after a `set`, `clear`, or release changes what paints; an animation's
151
+ * frames reach a painter through `animator.onTick` instead. Returns an unsubscribe. */
152
+ subscribe(listener: () => void): () => void;
148
153
  version(): number;
154
+ private changed;
155
+ }
156
+
157
+ /** A stroke trim's window edges as fractions of the path, as `Stroke.trim`'s bare numbers are:
158
+ * of the length or the anchor range, by the stroke's own `pace`. An edge left out keeps the
159
+ * stroke's own. */
160
+ interface TrimOverride {
161
+ start?: number;
162
+ end?: number;
163
+ }
164
+ /** One edge of a trim window. */
165
+ type TrimEdge = 'start' | 'end';
166
+ /** Per-node, per-edge store of stroke trim overrides. Attached to `useAnimator` as
167
+ * `animator.trimOverrides`; painted onto scene nodes by `<SceneCanvas animator>`. Picking reads
168
+ * the authored `Stroke.trim` and never these. */
169
+ declare class TrimOverrideRegistry {
170
+ private readonly map;
171
+ private readonly slots;
172
+ private readonly listeners;
173
+ private _version;
174
+ set(id: string, override: TrimOverride): void;
175
+ /** Drops `id`'s override, and the edges a finished or canceled animation on its
176
+ * {@link target}s left painted. An animation still running goes on. */
177
+ clear(id: string): void;
178
+ clearAll(): void;
179
+ /** What paints on `id`'s edges now: see {@link resolve}. */
180
+ get(id: string): TrimOverride | undefined;
181
+ /** Whether anything paints over `id`'s trim: an override from `set`, or a target an
182
+ * animation has committed. A target asked for and never moved does not count. */
183
+ has(id: string): boolean;
184
+ /**
185
+ * The {@link Target} for `id`'s `edge`, committed at the whole stroke's (`start` 0, `end` 1)
186
+ * until something moves it. Every caller for one node and edge gets the same one, so their
187
+ * animations add. The registry holds its committed value and nothing writes the scene.
188
+ *
189
+ * What it paints, on its own edge only: with no override from `set` on that edge, its value in
190
+ * place of the stroke's own; over one, only what its animations have left to travel, added on
191
+ * top. Ask again for each animation rather than keeping it: {@link release} and {@link clear}
192
+ * drop a resting one, and the target it had throws from then on.
193
+ */
194
+ target(id: string, edge: TrimEdge): Target<number>;
195
+ /** Drops the value `id`'s {@link target} on `edge` left painted, unless an animation is still
196
+ * moving it. An override from `set` stays. */
197
+ release(id: string, edge: TrimEdge): void;
198
+ /**
199
+ * The edges to paint on `id`'s stroke, each on its own: the override from `set` for that
200
+ * edge plus what its {@link target} has left to travel; failing a `set` value, the target's
201
+ * value once an animation has committed it. An edge with neither is left out, so the stroke's
202
+ * own stands. `undefined` when neither edge is overridden.
203
+ */
204
+ resolve(id: string): TrimOverride | undefined;
205
+ /** Calls `listener` after a `set`, `clear`, or release changes what paints; an animation's
206
+ * frames reach a painter through `animator.onTick` instead. Returns an unsubscribe. */
207
+ subscribe(listener: () => void): () => void;
208
+ version(): number;
209
+ private changed;
149
210
  }
150
211
 
151
212
  /** One keyframe. `easing` shapes the approach INTO this key from the previous
@@ -827,6 +888,10 @@ interface Animator {
827
888
  * `<SceneCanvas animator>` and read by `createPathLayer`. Only this animator can move its
828
889
  * per-node targets. Cleared automatically on animator unmount. */
829
890
  colorOverrides: ColorOverrideRegistry;
891
+ /** Per-node stroke trim override registry, painted onto scene nodes by `<SceneCanvas animator>`:
892
+ * a draw-on with no op and no undo entry. Picking still reads the authored `Stroke.trim`.
893
+ * Cleared automatically on animator unmount. */
894
+ trimOverrides: TrimOverrideRegistry;
830
895
  /**
831
896
  * Subscribe to a callback fired once per RAF frame while any animation is active; returns
832
897
  * an unsubscribe. For consumers that repaint from a non-scene channel such as
@@ -958,4 +1023,4 @@ interface TweenLoopOptions<T> {
958
1023
  label?: string;
959
1024
  }
960
1025
 
961
- export { type TargetTableOptions as $, type Animator as A, type StaggerItemSpringOptions as B, type ColorOverride as C, type DecayOptions as D, type EventBooking as E, type StaggerItemTweenOptions as F, type StaggerOptions as G, type HoldHandle as H, type Interpolate as I, type StaggerPerItem as J, type Keyframe as K, type LiveAnimation as L, type StaggerSpringOptions as M, type NestedTimeline as N, type StaggerTargetSpringOptions as O, type PhysicsHandle as P, type StaggerTargetTweenOptions as Q, type RowsHoldHandle as R, type SampledTrack as S, type Target as T, type StaggerTweenOptions as U, type VertexColorChannel as V, type TargetDecayOptions as W, type TargetOptions as X, type TargetPhysicsOptions as Y, type TargetSpringOptions as Z, type TargetTable as _, type AnimationHandle as a, type TargetTweenOptions as a0, type TimelineClock as a1, type TimelineHandle as a2, type TimelineOptions as a3, type TimelineTrack as a4, type Track as a5, type TweenLoopOptions as a6, type TweenOptions as a7, createTarget as a8, createTargetTable as a9, type TimelineEvent as b, type TargetAxes as c, type AnimationInfo as d, type AnimationKind as e, type AnimatorEvent as f, type AnimatorListener as g, type AxisBuffer as h, type AxisName as i, type AxisRef as j, type ColorOverrideFn as k, ColorOverrideRegistry as l, type EventBookingHandle as m, type EventTrack as n, type HoldOptions as o, type HoldRowsOptions as p, type InterpolatorFactory as q, type LoopFactory as r, type LoopOptions as s, type Naming as t, type PhysicsOptions as u, type ShownArray as v, type SpringOptions as w, type StaggerBuilder as x, type StaggerDelay as y, type StaggerFactory as z };
1026
+ export { type TargetTableOptions as $, type Animator as A, type StaggerItemSpringOptions as B, type ColorOverride as C, type DecayOptions as D, type EventBooking as E, type StaggerItemTweenOptions as F, type StaggerOptions as G, type HoldHandle as H, type Interpolate as I, type StaggerPerItem as J, type Keyframe as K, type LiveAnimation as L, type StaggerSpringOptions as M, type NestedTimeline as N, type StaggerTargetSpringOptions as O, type PhysicsHandle as P, type StaggerTargetTweenOptions as Q, type RowsHoldHandle as R, type SampledTrack as S, type Target as T, type StaggerTweenOptions as U, type VertexColorChannel as V, type TargetDecayOptions as W, type TargetOptions as X, type TargetPhysicsOptions as Y, type TargetSpringOptions as Z, type TargetTable as _, type AnimationHandle as a, type TargetTweenOptions as a0, type TimelineClock as a1, type TimelineHandle as a2, type TimelineOptions as a3, type TimelineTrack as a4, type Track as a5, type TrimEdge as a6, type TrimOverride as a7, TrimOverrideRegistry as a8, type TweenLoopOptions as a9, type TweenOptions as aa, createTarget as ab, createTargetTable as ac, type TimelineEvent as b, type TargetAxes as c, type AnimationInfo as d, type AnimationKind as e, type AnimatorEvent as f, type AnimatorListener as g, type AxisBuffer as h, type AxisName as i, type AxisRef as j, type ColorOverrideFn as k, ColorOverrideRegistry as l, type EventBookingHandle as m, type EventTrack as n, type HoldOptions as o, type HoldRowsOptions as p, type InterpolatorFactory as q, type LoopFactory as r, type LoopOptions as s, type Naming as t, type PhysicsOptions as u, type ShownArray as v, type SpringOptions as w, type StaggerBuilder as x, type StaggerDelay as y, type StaggerFactory as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weasel-js/animator",
3
- "version": "1.15.2",
3
+ "version": "1.16.0",
4
4
  "description": "The weasel animator: tweens, springs, holds, staggers, and timelines that combine on targets, run by one frame loop. Needs no scene; the root entry has no React, and the hook is under /react.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -42,11 +42,11 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@msb235/blits": "0.16.1",
45
- "@weasel-js/clock": "1.15.2",
46
- "@weasel-js/geom": "1.15.2",
47
- "@weasel-js/paint": "1.15.2",
48
- "@weasel-js/react": "1.15.2",
49
- "@weasel-js/registry": "1.15.2"
45
+ "@weasel-js/clock": "1.16.0",
46
+ "@weasel-js/geom": "1.16.0",
47
+ "@weasel-js/paint": "1.16.0",
48
+ "@weasel-js/react": "1.16.0",
49
+ "@weasel-js/registry": "1.16.0"
50
50
  },
51
51
  "peerDependencies": {
52
52
  "react": ">=18"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/engine/axes.ts","../src/axisNames.ts","../src/target.ts","../src/engine/holdStore.ts","../src/tableMoves.ts","../src/targetTable.ts","../src/colorRegistry.ts","../src/engine/offsets.ts","../src/timeline/targetStops.ts","../src/timeline/sampleTrack.ts","../src/timeline/booking.ts","../src/timeline/fireEvents.ts","../src/timeline/trackHolds.ts","../src/timeline/createTimeline.ts"],"names":["share","pass","states","wider","wrapAngle","showing","tables","keys","axes","keysPatch"],"mappings":"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","file":"chunk-7TTE4JM6.js","sourcesContent":["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","/**\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 { axisIndexes, type AxisRef } from './axisNames';\nimport { axesOf } from './engine/axes';\nimport type { HoldStore } from './engine/holdStore';\nimport type { LaneColumns, LanePlace, 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 /** The voices kept in `group`'s lane as the last frame read them; null where none is. */\n columns(group: object): 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 the voices `columns` answers for the\n * table's rows and for its moves, with the table's holds. */\n fill(columns: (group: object) => LaneColumns | null): void;\n /** An animation's move on row `index`, of which `share` of its voices is the move, per axis.\n * The pass shows its voices in `place` by how much the row's holds leave of the move. */\n move(index: number, share: readonly number[]): RowMove;\n /** Says what waits beside row `index`'s holds; null for nothing. */\n beside(index: number, value: readonly number[] | null): void;\n /** The holds on the table's rows, made the first time they are asked for. */\n holds(): HoldStore;\n /** The rows in use. */\n rows(): number[];\n /** Fills its rows' values on screen again from the columns the last frame gave it, for holds\n * written since. */\n refill(): void;\n}\n\n/** An animation's move on a table's row, as the table keeps it for its pass. */\nexport interface RowMove {\n /** Where its voices run: a lane of the table's moves. */\n readonly place: LanePlace;\n /** Says the share of the move still to show, per axis, has changed. */\n kept(kept: readonly number[]): void;\n leave(): void;\n}\n\n/**\n * An animation with a destination on a target: the move its destination made in the committed\n * value is behind the target's holds, which cover it as they cover the committed value, and the\n * rest of its offset shows on top of them.\n */\nexport interface Behind {\n /** What is left of the move its destination made in the committed value. */\n left(): readonly number[];\n /** Its voices' sum: its whole offset. */\n own(): readonly number[];\n /** The share of each axis of its voices that is that move: 1 where all of it is. */\n readonly share: 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 /** The sum of its voices as the last frame read it, where they run on a subject of their own,\n * as a table's row's do; null where they run among its target's, in its `slot`. */\n slot: Reader | null;\n /** What that sum has changed by since; null for nothing. */\n adjust: number[] | null;\n /** Its place in its table's moves, for a row of one. */\n move: RowMove | 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 /** How many holds stand in for its committed value. */\n held: number;\n /** Where its holds are folded, while it has any: the row of its table, or a store of its own. */\n holds: { readonly store: HoldStore; readonly row: 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: 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 /** What animations over many targets, which the table of animations does not file under\n * this one, do to let it go when it is stopped. */\n parts: Set<() => void>;\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 voices but those of `behind`, 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/** How much of the voices of an animation with destination its target shows, on one axis: all\n * but the share that is its move, which shows by what `cover` of holds leave of it and `kept`\n * of those released over it. */\nexport const showing = (share: number, cover: number, kept: number): number =>\n 1 - share * (1 - (1 - cover) * kept);\n\n/**\n * Adds into `out` from `at` what `s`'s animations with a destination show past its holds, whose\n * `cover` is from `base`, null where none stand. One whose voices run on a subject of its own\n * adds them by how much of them shows; one whose voices run among `s`'s own, in `slot` at\n * full already, takes off what does not show.\n */\nfunction addMoves<T>(s: TargetState<T>, out: AxisBuffer, at: number, cover: Float64Array | null, base: number): void {\n const n = s.axes.count;\n const { behind } = s;\n for (let j = 0; j < behind.length; j++) {\n const b = behind[j]!;\n const { slot, adjust, kept, share } = b;\n if (slot) {\n for (let i = 0; i < n; i++) {\n const m = slot.cols[slot.at + i]! + (adjust ? adjust[i]! : 0);\n out[at + i] = out[at + i]! + (cover || kept\n ? m * showing(share[i]!, cover ? cover[base + i]! : 0, kept ? kept[i]! : 1)\n : m);\n }\n } else if (cover || kept) {\n const own = b.own();\n for (let i = 0; i < n; i++) {\n out[at + i] = out[at + i]! - own[i]! * (1 - showing(share[i]!, cover ? cover[base + i]! : 0, kept ? kept[i]! : 1));\n }\n }\n }\n}\n\n/** Adds into `out` from `at` what `s`'s animations add to what it shows. */\nfunction addMoving<T>(s: TargetState<T>, out: AxisBuffer, at: number): void {\n const n = s.axes.count;\n const { slot, adjust, beside } = s;\n for (let i = 0; i < n; i++) {\n out[at + i] = out[at + i]! + (slot ? slot.cols[slot.at + i]! : 0) + adjust[i]! + (beside ? beside[i]! : 0);\n }\n const h = s.holds;\n if (s.behind.length > 0 && (s.row || h || s.dimmed)) addMoves(s, out, at, h ? h.store.cover : null, h ? h.row * n : 0);\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, plus what `s`'s holds add to them, folded again where the committed\n * value has moved under them. */\nfunction heldAxes<T>(s: TargetState<T>, committed: T): number[] {\n const a = s.axes.to(committed);\n const h = s.holds;\n if (!h) return a;\n const at = h.row * a.length;\n const { store } = h;\n for (let i = 0; i < a.length; i++) {\n if (a[i] === store.at[at + i]) continue;\n store.refold(h.row);\n break;\n }\n for (let i = 0; i < a.length; i++) a[i] = a[i]! + store.delta[at + i]!;\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 } = 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.holds || s.dimmed) {\n const a = heldAxes(s, committed);\n addMoving(s, a, 0);\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 d.fill(0, 0, n);\n addMoving(s, d, 0);\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 } = s;\n const moving = s.live > 0;\n if (axes.write && !(moving && s.holds)) 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) addMoving(s, out, at);\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 held: 0,\n holds: null,\n behind: [],\n dimmed: false,\n beside: null,\n parts: new Set(),\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 { wrapAngle } from '@weasel-js/geom';\n\n/**\n * One hold on each of any number of a store's rows, its values and weights kept as rows of flat\n * arrays: `values` laid out as the rows' committed values, `weights` one a row. A row's holds\n * are its layers that hold it, and they are alternatives mixed by weight.\n */\nexport interface HoldLayer {\n /** Row `r`'s held value at `r * axes`. A new array once the store grows. */\n readonly values: Float64Array;\n /** Row `r`'s weight, read as 0 to 1. A new array once the store grows. */\n readonly weights: Float64Array;\n /** Nonzero at each row the layer holds. */\n readonly has: Uint8Array;\n}\n\n/** Where a row's hold in a layer gets its value and weight, when the layer is not written. */\nexport interface HoldSources {\n /** Writes the value to hold into `out` from `at`. */\n value?(out: Float64Array, at: number): void;\n weight?(): number;\n /** The axes it holds, nonzero at each; null for all of them. */\n covers?: Uint8Array | null;\n /** True where `value` and `weight` answer the same until the row is touched: they are then\n * asked as it is held and touched, and on no frame of their own. */\n fixed?: boolean;\n}\n\n/** Holds folded per row into what they add to its committed value. */\nexport interface HoldStore {\n readonly axes: number;\n /** What the holds on row `r` add to its committed value, at `r * axes`: 0 where none hold it. */\n readonly delta: Float64Array;\n /** The share of each of row `r`'s axes its holds cover, 0 to 1, laid out as `delta`. */\n readonly cover: Float64Array;\n /** Row `r`'s committed value as its holds were last folded against, laid out as `delta`. */\n readonly at: Float64Array;\n /** How many holds stand on row `r`. */\n readonly count: Int32Array;\n /** The rows held, the first `size` of them, in no order. */\n readonly held: Int32Array;\n readonly size: number;\n /** Makes room for `rows` rows. */\n grow(rows: number): void;\n /** A layer of its own, holding no row yet. */\n layer(): HoldLayer;\n /** A layer that does not hold `row`, made where every one does. */\n free(row: number): HoldLayer;\n /** Takes `row` into `layer`, asking `sources` for its value and weight from here. */\n join(layer: HoldLayer, row: number, sources?: HoldSources): void;\n /** Takes `row` out of `layer`. */\n part(layer: HoldLayer, row: number): void;\n /** Drops `layer`, which holds no row. */\n drop(layer: HoldLayer): void;\n /** Asks the sources of every row held by a hold that is not fixed, and folds those rows. */\n frame(): void;\n /** Asks `row`'s sources and folds it against its committed value now. */\n refold(row: number): void;\n /** Folds `row`'s holds against `committed` from `at`, leaving out `skip`: what they add to\n * each axis into `delta` and the weight holding it into `total`. Asks nothing. */\n fold(row: number, committed: ArrayLike<number>, at: number, skip: HoldLayer | null, delta: number[], total: number[]): void;\n /** `row`'s value in `layer`, as it was last asked or written. */\n valueOf(layer: HoldLayer, row: number): number[];\n}\n\ninterface Layer extends HoldLayer {\n values: Float64Array;\n weights: Float64Array;\n has: Uint8Array;\n /** Row `r`'s held axes at `r * axes`, nonzero at each; null while every row holds all. */\n covers: Uint8Array | null;\n sources: (HoldSources | undefined)[];\n /** Made by `free`, to hold rows one at a time for whoever asks. */\n pooled: boolean;\n /** The rows whose sources are asked every frame. */\n asked: Set<number>;\n}\n\nconst share = (w: number): number => (w > 0 ? Math.min(w, 1) : 0);\n\nfunction wider<A extends Float64Array | Uint8Array | Int32Array>(a: A, length: number, fill = 0): A {\n const b = new (a.constructor as new (l: number) => A)(length);\n if (fill !== 0) b.fill(fill);\n b.set(a);\n return b;\n}\n\nfunction makeLayer(rows: number, n: number, pooled: boolean): Layer {\n return {\n values: new Float64Array(rows * n), weights: new Float64Array(rows), has: new Uint8Array(rows),\n covers: null, sources: [], pooled, asked: new Set(),\n };\n}\n\nfunction widenLayer(l: Layer, rows: number, n: number): void {\n l.values = wider(l.values, rows * n);\n l.weights = wider(l.weights, rows);\n l.has = wider(l.has, rows);\n if (l.covers) l.covers = wider(l.covers, rows * n);\n}\n\n/** Asks `row`'s sources in `l`: the weight first, and the value only where it weighs something. */\nfunction ask(l: Layer, row: number, n: number): void {\n const src = l.sources[row];\n if (!src) return;\n if (src.weight) l.weights[row] = src.weight();\n if (src.value && share(l.weights[row]!) > 0) src.value(l.values, row * n);\n}\n\n/**\n * Row `row`'s holds in `layers`, without `skip`, as one distance from `committed` per axis. On\n * each axis the holds over it are alternatives: one weighs `w / max(1, total)`, and what their\n * weights leave short of 1 is the committed value's. An angle goes by way of the direction the\n * holds average to, so two holds turn the short way toward each other.\n */\nfunction foldRow(\n layers: readonly Layer[], angle: Uint8Array, n: number, row: number,\n committed: ArrayLike<number>, at: number, skip: HoldLayer | null, delta: number[], total: number[],\n): void {\n const base = row * n;\n const holds = (l: Layer, a: number): number =>\n (l === skip || !l.has[row] || (l.covers && !l.covers[base + a]) ? 0 : share(l.weights[row]!));\n for (let a = 0; a < n; a++) {\n const c = committed[at + a]!;\n let weight = 0;\n let sum = 0;\n let sin = 0;\n let cos = 0;\n for (let h = 0; h < layers.length; h++) {\n const l = layers[h]!;\n const w = holds(l, a);\n if (!(w > 0)) continue;\n const v = l.values[base + a]!;\n weight += w;\n if (!angle[a]) sum += w * (v - c);\n else {\n sin += w * Math.sin(v);\n cos += w * Math.cos(v);\n }\n }\n if (weight > 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 < layers.length; h++) {\n const l = layers[h]!;\n const w = holds(l, a);\n if (!(w > 0)) continue;\n const v = l.values[base + a]!;\n sum += w * (mean === null ? wrapAngle(v - c) : wrapAngle(mean - c) + wrapAngle(v - mean));\n }\n }\n total[a] = weight;\n delta[a] = weight > 0 ? sum / Math.max(1, weight) : 0;\n }\n}\n\n/** `read` writes row `row`'s committed value into `out` from `at`. `angles` are the axes that\n * are angles, where holds meet at the direction they average to. */\nexport function createHoldStore(\n axes: number, rows: number, read: (row: number, out: Float64Array, at: number) => void,\n angles?: readonly number[],\n): HoldStore {\n const n = axes;\n const angle = new Uint8Array(n);\n for (const a of angles ?? []) angle[a] = 1;\n let cap = Math.max(rows, 1);\n const layers: Layer[] = [];\n let size = 0;\n const store = {\n delta: new Float64Array(cap * n),\n cover: new Float64Array(cap * n),\n at: new Float64Array(cap * n),\n count: new Int32Array(cap),\n held: new Int32Array(cap),\n /** Each row's place in `held`; -1 for one not held. */\n place: new Int32Array(cap).fill(-1),\n /** The frame each row was last folded on. */\n folded: new Int32Array(cap),\n };\n let pass = 0;\n\n const fold: HoldStore['fold'] = (row, committed, at, skip, delta, total) =>\n foldRow(layers, angle, n, row, committed, at, skip, delta, total);\n\n const scratchDelta = new Array<number>(n);\n const scratchTotal = new Array<number>(n);\n /** Folds `row` against its committed value now, into the store's own arrays. */\n const settle = (row: number): void => {\n const base = row * n;\n read(row, store.at, base);\n fold(row, store.at, base, null, scratchDelta, scratchTotal);\n for (let a = 0; a < n; a++) {\n store.delta[base + a] = scratchDelta[a]!;\n store.cover[base + a] = Math.min(scratchTotal[a]!, 1);\n }\n };\n const made = (pooled: boolean): Layer => {\n const l = makeLayer(cap, n, pooled);\n layers.push(l);\n return l;\n };\n\n return {\n axes: n,\n get delta() { return store.delta; },\n get cover() { return store.cover; },\n get at() { return store.at; },\n get count() { return store.count; },\n get held() { return store.held; },\n get size() { return size; },\n grow(want) {\n if (want <= cap) return;\n cap = Math.max(want, cap * 2);\n for (const k of ['delta', 'cover', 'at'] as const) store[k] = wider(store[k], cap * n);\n for (const k of ['count', 'held', 'folded'] as const) store[k] = wider(store[k], cap);\n store.place = wider(store.place, cap, -1);\n for (const l of layers) widenLayer(l, cap, n);\n },\n layer: () => made(false),\n free(row) {\n for (const l of layers) if (l.pooled && !l.has[row]) return l;\n return made(true);\n },\n join(layer, row, sources) {\n const l = layer as Layer;\n if (l.has[row]) throw new Error(`holds: row ${row} is held by this layer already`);\n l.has[row] = 1;\n if (sources) {\n l.sources[row] = sources;\n if (!sources.fixed) l.asked.add(row);\n if (sources.covers) (l.covers ??= new Uint8Array(cap * n).fill(1)).set(sources.covers, row * n);\n }\n if (store.count[row]++ > 0) return;\n store.place[row] = size;\n store.held[size++] = row;\n },\n part(layer, row) {\n const l = layer as Layer;\n if (!l.has[row]) return;\n l.has[row] = 0;\n l.sources[row] = undefined;\n l.asked.delete(row);\n l.covers?.fill(1, row * n, (row + 1) * n);\n if (--store.count[row]! > 0) return;\n const at = store.place[row]!;\n const last = store.held[--size]!;\n store.held[at] = last;\n store.place[last] = at;\n store.place[row] = -1;\n store.delta.fill(0, row * n, (row + 1) * n);\n store.cover.fill(0, row * n, (row + 1) * n);\n },\n drop(layer) {\n const i = layers.indexOf(layer as Layer);\n if (i >= 0) layers.splice(i, 1);\n },\n frame() {\n for (const l of layers) for (const row of l.asked) ask(l, row, n);\n // A row asked in two layers is folded once.\n pass += 1;\n for (const l of layers) {\n for (const row of l.asked) {\n if (store.folded[row] === pass) continue;\n store.folded[row] = pass;\n settle(row);\n }\n }\n },\n refold(row) {\n for (const l of layers) if (l.has[row]) ask(l, row, n);\n settle(row);\n },\n fold,\n valueOf: (layer, row) => Array.from(layer.values.subarray(row * n, (row + 1) * n)),\n };\n}\n","import type { LaneColumns } from './engine/lanes';\nimport { showing, type RowMove } from './target';\nimport type { ShownArray } from './targetTable';\n\n/**\n * What a table's pass adds to its rows besides their own voices: the moves of animations with a\n * destination, which the rows' holds cover, and what waits beside those holds. A move's voices\n * run in a lane of their own, `group`, each tagged with the move's id, and the share of them\n * that is the move and what holds released over it kept of it are kept here, one row a move.\n */\nexport interface TableMoves {\n /** The lane group a move's voices run in. */\n readonly group: object;\n move(row: number, share: readonly number[]): RowMove;\n beside(row: number, value: readonly number[] | null): void;\n /** Adds the moves in `columns` to their rows, by how much `cover` of the rows' holds leaves\n * of them, and what waits beside the holds. A row whose `stamp` is not `pass` has nothing\n * in `shown` from this pass yet, and is put at its committed value and `delta` first. */\n add(\n shown: ShownArray, committed: Float64Array, delta: Float64Array | null, cover: Float64Array | null,\n columns: LaneColumns | null, stamp: Int32Array, pass: number,\n ): void;\n}\n\nexport function createTableMoves(n: number): TableMoves {\n const group = {};\n let cap = 16;\n let rowOf = new Int32Array(cap);\n let share = new Float64Array(cap * n);\n let kept = new Float64Array(cap * n);\n const free: number[] = [];\n let high = 0;\n const besides = new Map<number, readonly number[]>();\n /** How many moves have had some of them taken by a hold released over them. */\n let dimmed = 0;\n let dims = new Uint8Array(cap);\n\n const grow = (): void => {\n cap *= 2;\n const r = new Int32Array(cap);\n r.set(rowOf);\n rowOf = r;\n const s = new Float64Array(cap * n);\n s.set(share);\n share = s;\n const k = new Float64Array(cap * n);\n k.set(kept);\n kept = k;\n const d = new Uint8Array(cap);\n d.set(dims);\n dims = d;\n };\n\n return {\n group,\n move(row, of) {\n const id = free.pop() ?? high++;\n if (id >= cap) grow();\n rowOf[id] = row;\n share.set(of, id * n);\n kept.fill(1, id * n, (id + 1) * n);\n let gone = false;\n return {\n place: { group, tag: id },\n kept: (k) => {\n kept.set(k, id * n);\n if (!dims[id]) { dims[id] = 1; dimmed += 1; }\n },\n leave() {\n if (gone) return;\n gone = true;\n if (dims[id]) { dims[id] = 0; dimmed -= 1; }\n free.push(id);\n },\n };\n },\n beside(row, value) {\n if (value) besides.set(row, value);\n else besides.delete(row);\n },\n add(shown, committed, delta, cover, columns, stamp, pass) {\n if (columns) {\n const { cols, tags, count } = columns;\n const whole = !cover && dimmed === 0;\n for (let j = 0; j < count; j++) {\n const id = tags[j]!;\n const row = rowOf[id]!;\n const at = row * n;\n // The first this pass to reach its row starts it from its committed value.\n const fresh = stamp[row] !== pass;\n stamp[row] = pass;\n if (whole && fresh && !delta) {\n for (let k = 0; k < n; k++) shown[at + k] = committed[at + k]! + cols[j * n + k]!;\n continue;\n }\n for (let k = 0; k < n; k++) {\n const f = whole ? 1 : showing(share[id * n + k]!, cover ? cover[at + k]! : 0, kept[id * n + k]!);\n const from = fresh ? committed[at + k]! + (delta ? delta[at + k]! : 0) : shown[at + k]!;\n shown[at + k] = from + cols[j * n + k]! * f;\n }\n }\n }\n for (const [row, value] of besides) {\n for (let k = 0; k < n; k++) shown[row * n + k] = shown[row * n + k]! + value[k]!;\n }\n },\n };\n}\n","import { createHoldStore, type HoldStore } from './engine/holdStore';\nimport { createTableMoves, type TableMoves } from './tableMoves';\nimport 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/** Every moving or held row's value on screen into `shown`: its committed value, what its\n * holds add to it, what its voices in `columns` do, and what its moves in `moved` show past\n * its holds. */\nfunction pass(\n shown: ShownArray, committed: Float64Array, n: number, holds: HoldStore | null,\n moves: TableMoves, columns: LaneColumns | null, moved: LaneColumns | null, stamp: Int32Array, at: number,\n): void {\n const h = holds && holds.size > 0 ? holds : null;\n const delta = h ? h.delta : null;\n if (h) {\n const { held, size } = h;\n for (let j = 0; j < size; j++) {\n const row = held[j]!;\n stamp[row] = at;\n for (let k = 0; k < n; k++) shown[row * n + k] = committed[row * n + k]! + delta![row * n + k]!;\n }\n }\n if (columns) {\n const { cols, tags, count } = columns;\n for (let j = 0; j < count; j++) {\n const row = tags[j]!;\n const base = row * n;\n stamp[row] = at;\n if (delta) for (let k = 0; k < n; k++) shown[base + k] = committed[base + k]! + cols[j * n + k]! + delta[base + k]!;\n else for (let k = 0; k < n; k++) shown[base + k] = committed[base + k]! + cols[j * n + k]!;\n }\n }\n moves.add(shown, committed, delta, h ? h.cover : null, moved, stamp, at);\n}\n\n/** The rows below `high` that are not `free`. */\nfunction inUse(high: number, free: readonly number[]): number[] {\n const gone = new Set(free);\n return Array.from({ length: high }, (_, r) => r).filter((r) => !gone.has(r));\n}\n\nconst tables = new WeakMap<TargetTable<ShownArray>, RowTable>();\n\n/** The animator's side of a table `createTargetTable` made. */\nexport function rowTableOf(table: TargetTable<ShownArray>): RowTable {\n const rows = tables.get(table);\n if (!rows) throw new Error('animator: `table` was not made by createTargetTable');\n return rows;\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 /** The holds on its rows, once any has been held. */\n let holds: HoldStore | null = null;\n const moves = createTableMoves(n);\n /** The pass that last wrote each row's value on screen. */\n let stamp = new Int32Array(committed.length / n);\n let passes = 0;\n /** Where the last frame's pass found the animator's voices. */\n let last: (group: object) => LaneColumns | null = () => null;\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, and the pass gives it from here.\n flush();\n marks.clear();\n },\n fill(columns) {\n last = columns;\n pass(shown, committed, n, holds, moves, columns(rows), columns(moves.group), stamp, ++passes);\n flush();\n opts.show?.();\n },\n move: moves.move,\n beside: moves.beside,\n refill() {\n const { show } = opts;\n opts.show = undefined;\n try { rows.fill(last); } finally { opts.show = show; }\n },\n rows: () => inUse(high, free),\n holds: () => (holds ??= createHoldStore(n, committed.length / n, (row, out, at) => {\n for (let k = 0; k < n; k++) out[at + k] = committed[row * n + k]!;\n })),\n };\n\n const table: TargetTable<S> = {\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 holds?.grow(grown.length / n);\n stamp = Int32Array.from({ length: grown.length / n }, (_, r) => stamp[r] ?? 0);\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 tables.set(table, rows);\n return table;\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 { wrapAngle } from '@weasel-js/geom';\nimport type { HoldStore } from './holdStore';\nimport type { Reader } from './lanes';\nimport { readTarget, type Behind, type RowTable, type TargetAxes, type TargetOwner, type TargetState } from '../target';\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/** `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] = wrapAngle(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\n/** Counts `delta` into what `b`, an animation with a destination on `s`, shows until the next\n * frame reads its voices again. */\nexport function bumpBehind(s: TargetState, b: Behind, delta: readonly number[], sign: 1 | -1): void {\n const adjust = (b.adjust ??= new Array<number>(delta.length).fill(0));\n for (let i = 0; i < delta.length; i++) adjust[i] = adjust[i]! + sign * delta[i]!;\n stale(s);\n s.row?.table.mark(s.row.index);\n}\n\n/** Points `holder`, `s` or one of its `behind`, at `slot`, its voices' subject now. One whose\n * last voice left since the frame is still in what it shows until the next, so that goes into\n * its `adjust`. */\nexport function seat(s: TargetState, holder: { slot: Reader | null; adjust: number[] | null }, slot: Reader): void {\n const was = holder.slot;\n if (was && was !== slot && was.refs === 0) {\n const n = s.axes.count;\n const adjust = (holder.adjust ??= new Array<number>(n).fill(0));\n for (let i = 0; i < n; i++) adjust[i] = adjust[i]! + was.cols[was.at + i]!;\n stale(s);\n }\n holder.slot = slot;\n}\n\n/** Says what waits beside `s`'s holds. */\nexport function setBeside(s: TargetState, beside: number[] | null): void {\n s.beside = beside;\n s.row?.table.beside(s.row.index, beside);\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 with a destination on `s`. `own` answers its voices' sum, `left` what is\n * left of its move, and `share` how much of its voices' each axis that move is. */\nexport function goBehind<T>(\n s: TargetState<T>, own: () => readonly number[], left: () => readonly number[], share: readonly number[],\n): Behind {\n const b: Behind = {\n own, left, share, kept: null, slot: null, adjust: null,\n move: s.row ? s.row.table.move(s.row.index, share) : null,\n };\n s.behind.push(b);\n return b;\n}\n\n/** Where an animation with a destination runs its voices, and counts what they add between\n * frames: on a subject of its own for a table's row, which the table's pass shows apart, and\n * among its target's for any other. */\nexport const runsOn = (s: TargetState, b: Behind): TargetState | Behind => (b.move ? b : s);\n\n/** Counts `delta` into what the voices of `b`, an animation with a destination on `s`, show\n * until the next frame reads them. */\nexport function bumpOn(s: TargetState, b: Behind, delta: readonly number[], sign: 1 | -1): void {\n if (b.move) bumpBehind(s, b, delta, sign);\n else bump(s, delta, sign);\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 const at = s.behind.indexOf(b);\n if (at >= 0) s.behind.splice(at, 1);\n b.move?.leave();\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 setBeside(s as never, 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 if (beside) setBeside(s as never, 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 /** Counts `by` more holds folded in `store`, which each frame asks while it has any. */\n holding(store: HoldStore, by: 1 | -1): 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 /** Each store holds are folded in, and how many. */\n const stores = new Map<HoldStore, 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 if (s.beside) setBeside(s, null);\n for (const b of s.behind) b.move?.leave();\n s.behind.length = 0;\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 for (const b of s.behind) b.adjust = null;\n s.stale = false;\n }\n adjusted.length = 0;\n for (const store of stores.keys()) store.frame();\n for (const t of tables.keys()) t.settle();\n },\n holding(store, by) {\n const count = (stores.get(store) ?? 0) + by;\n if (count > 0) stores.set(store, count);\n else stores.delete(store);\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);\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 { 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/** Where a timeline has fired its events up to. Events fire only going forward: a move back\n * fires nothing, and the next move forward fires from where it stopped. */\nexport interface EventCursor {\n /** Fires the events the playhead crossed going to `to`, and stands there. */\n to(tracks: Track[], to: number): void;\n /** Stands at `t`. With `open`, an event exactly at `t` fires on the next move: where a seek\n * lands, or a new lap starts. */\n place(t: number, open: boolean): void;\n}\n\nexport function createEventCursor(fire: FireEvents): EventCursor {\n let at = -Infinity;\n let open = false;\n return {\n to(tracks, to) {\n fire(tracks, at, to, open);\n at = to;\n open = false;\n },\n place(t, o) {\n at = t;\n open = o;\n },\n };\n}\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 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 /** True where `weight` answers the same throughout: the hold is then read only when touched. */\n fixed?: boolean,\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 typeof w === 'function'\n ? open(st.target!, () => h.value, w, st.axes)\n : open(st.target!, () => h.value, () => w, st.axes, true);\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 { createEventCursor, 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. Played backward below 0, it hands the laps crossed back\n * into, of the `lap` behind it, as a count below 0. */\nfunction crossLaps(\n playhead: number, duration: number, loopsLeft: number, lap: number, take: (laps: number) => void,\n): void {\n if (duration <= 0) return;\n const laps = playhead >= duration ? Math.min(Math.floor(playhead / duration), loopsLeft)\n : playhead < 0 ? -Math.min(Math.ceil(-playhead / duration), lap) : 0;\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 /** 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 canceled = 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 events = createEventCursor(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 = (laps: number): void => {\n if (!held && laps > 0) events.to(opts.tracks, duration);\n events.place(laps > 0 ? -Infinity : playhead, 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, lap, (laps) => {\n loopsLeft -= laps;\n offset -= laps * duration;\n playhead -= laps * duration;\n lap += laps;\n onWrap(laps);\n });\n }\n\n const finished = playhead >= duration && !parked;\n // Played backward, it ends at its start as it ends at its end going forward.\n const rewound = rate < 0 && playhead <= 0;\n playhead = Math.min(Math.max(playhead, 0), duration);\n\n // Sampled before fired, so a handler reads the current frame's values.\n sampler.apply(opts.tracks, playhead);\n if (!held) events.to(opts.tracks, playhead);\n booker?.tick(virtualNow, rate);\n\n if ((finished || rewound) && !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 ((rewound ? playhead > 0 : 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 // canceled by key or by `cancelAll` is as dead as one canceled by hand.\n const onCancel = (): void => {\n const first = !canceled;\n canceled = 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 (canceled || 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 events.place(t, 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"]}