@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.
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/observe.ts","../src/loop.ts","../src/stagger.ts","../src/supervisor.ts","../src/engine/decay.ts","../src/engine/holds.ts","../src/engine/holdAnimation.ts","../src/engine/holdRows.ts","../src/engine/integrator.ts","../src/engine/physicsAnimation.ts","../src/engine/springRest.ts","../src/engine/springVoices.ts","../src/engine/offsetPhysics.ts","../src/engine/offsetTween.ts","../src/engine/completions.ts","../src/engine/wakes.ts","../src/engine/schedule.ts","../src/engine/roster.ts","../src/engine/table.ts","../src/engine/tweenAnimation.ts","../src/engine/animatorApi.ts","../src/engine/lanes.ts","../src/engine/rewinds.ts","../src/engine/codec.ts","../src/engine/frame.ts","../src/engine/core.ts","../src/useAnimator.ts"],"names":["zeros","own","resolveEasing","easeOut","springPatch","tweenPatch","patch","fnPatch","createEmitter","table","sum","handle"],"mappings":"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","file":"react.js","sourcesContent":["import { createEmitter } from '@weasel-js/registry';\nimport type { AnimatorEvent, AnimatorListener } from './types';\n\n/** The listener set behind `animator.watch`. Every emit site checks `watched`\n * first and builds its event only then, so an unwatched animator allocates\n * nothing for observability. */\nexport class AnimatorEventHub {\n private readonly events = createEmitter<[AnimatorEvent]>();\n\n get watched(): boolean {\n return this.events.size > 0;\n }\n\n add(listener: AnimatorListener): () => void {\n return this.events.subscribe(listener);\n }\n\n emit(event: AnimatorEvent): void {\n this.events.emit(event);\n }\n}\n","import type { SupervisorFactory } from './supervisor';\nimport type {\n AnimationHandle,\n Animator,\n LoopFactory,\n LoopOptions,\n TweenLoopOptions,\n} from './types';\n\n/**\n * Loop primitive. Repeatedly invokes `factory(i, next)` to produce a child\n * animation. The factory is responsible for wiring its returned handle's\n * `onDone` to call `next` — that's how the loop advances. Pause/resume/\n * setTimeScale reach the current child and each later one; cancel stops the\n * in-flight child and prevents future iterations. Played backward, it starts each pass before\n * the one in flight at that pass's end, and ends at the start of pass 0.\n *\n * The loop is registered with the animator under a supervisor entry, so\n * `animator.cancel(handle)`, `animator.cancelKey(key)`, and\n * `animator.isActive(key)` all work for it.\n */\nexport function createLoop(\n createSupervisor: SupervisorFactory,\n factory: LoopFactory,\n opts: LoopOptions = {},\n): AnimationHandle {\n const max = opts.count ?? Infinity;\n let canceled = false;\n let current: AnimationHandle | null = null;\n\n const supervisor = createSupervisor({ kind: 'loop', cancelKey: opts.cancelKey, label: opts.label });\n supervisor.setOnCancel(() => {\n // External cancel path (animator.cancel/cancelKey or handle.cancel).\n // Mark canceled so `next` short-circuits; tear down the current child.\n canceled = true;\n current?.cancel();\n current = null;\n });\n\n const applyRate = (paused: boolean, timeScale: number): void => {\n if (!current) return;\n if (paused) current.pause();\n else current.resume();\n current.setTimeScale(timeScale);\n };\n supervisor.setOnRate(applyRate);\n\n // Started at its end inside a loop run back, it starts its last pass at that pass's end.\n const fromEnd = supervisor.atEnd && max < Infinity;\n /** The pass in flight. */\n let pass = fromEnd ? max : -1;\n let first = true;\n\n const next = (): void => {\n if (canceled) return;\n // Played backward, it starts each pass before at its end, and ends at the start of pass 0.\n const back = first ? fromEnd : supervisor.rate() < 0;\n first = false;\n const i = back ? pass - 1 : pass + 1;\n if (i < 0 || i >= max) {\n current = null;\n // Natural completion: deregister the supervisor so isActive() goes\n // false. `canceled` makes a late `next` a no-op.\n canceled = true;\n supervisor.finish();\n opts.onDone?.();\n return;\n }\n pass = i;\n current = supervisor.starting(back, () => factory(i, next));\n if (supervisor.isPaused() || supervisor.timeScale() !== 1) {\n applyRate(supervisor.isPaused(), supervisor.timeScale());\n }\n };\n\n next();\n\n return {\n id: supervisor.id,\n cancel: () => supervisor.cancel(),\n pause: () => supervisor.pause(),\n resume: () => supervisor.resume(),\n setTimeScale: (s) => supervisor.setTimeScale(s),\n timeScale: () => supervisor.timeScale(),\n isPaused: () => supervisor.isPaused(),\n };\n}\n\n/**\n * Sugar over `createLoop` for the common case of looping a tween between two\n * values. `direction` controls per-iteration from/to:\n * - `restart` (default): from→to every iteration\n * - `reverse`: to→from every iteration\n * - `alternate`: even iterations from→to, odd iterations to→from\n */\nexport function createTweenLoop<T>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n opts: TweenLoopOptions<T>,\n): AnimationHandle {\n const direction = opts.direction ?? 'restart';\n return createLoop(\n (o) => createSupervisor({ ...o, kind: 'tweenLoop' }),\n (i, next) => {\n const flipped = direction === 'reverse' || (direction === 'alternate' && i % 2 === 1);\n const from = flipped ? opts.to : opts.from;\n const to = flipped ? opts.from : opts.to;\n return animator.tween({\n from,\n to,\n ms: opts.ms,\n easing: opts.easing,\n interpolate: opts.interpolate,\n onTick: opts.onTick,\n onDone: next,\n });\n },\n { count: opts.count, onDone: opts.onDone, cancelKey: opts.cancelKey, label: opts.label },\n );\n}\n","import { isTarget, type Target } from './target';\nimport type { Supervisor, SupervisorFactory, WatchCompletion } from './supervisor';\nimport type {\n AnimationHandle,\n Animator,\n StaggerBuilder,\n StaggerDelay,\n StaggerFactory,\n StaggerOptions,\n SpringOptions,\n StaggerPerItem,\n StaggerSpringOptions,\n StaggerTargetSpringOptions,\n StaggerTargetTweenOptions,\n StaggerTweenOptions,\n TweenOptions,\n} from './types';\n\n/** An item still waiting: `fire` starts it once the stagger's own virtual\n * time reaches `at`. */\ninterface PendingEntry {\n at: number;\n fire: () => void;\n}\n\n/**\n * Composite handle returned by `createStagger`. Owns a list of in-flight\n * child handles and a list of items still waiting; cancel cancels both.\n * Pause/resume/setTimeScale propagate to in-flight children. The waiting\n * items are counted in the supervisor entry's virtual time, so whatever\n * holds or scales that entry holds or scales the delays with it.\n *\n * Registered with the animator via a supervisor so animator.cancel /\n * cancelKey / isActive all work for it.\n */\nclass CompositeHandle implements AnimationHandle {\n readonly id: number;\n private canceled = false;\n private paused_ = false;\n private timeScale_ = 1;\n private children: AnimationHandle[] = [];\n private pending: PendingEntry[] = [];\n private outstanding: number;\n /** Children started and not yet done. */\n private running = 0;\n private finished = false;\n\n constructor(\n private supervisor: Supervisor,\n totalItems: number,\n ) {\n this.id = supervisor.id;\n this.outstanding = totalItems;\n supervisor.setOnCancel(() => this.handleSupervisorCancel());\n supervisor.setOnRate((paused, timeScale) => {\n if (paused) this.applyPause();\n else this.applyResume();\n this.applyTimeScale(timeScale);\n });\n supervisor.setOnFrame((virtualNow) => this.fireDue(virtualNow));\n }\n\n /** Invoked when the supervisor is canceled externally (animator.cancel /\n * cancelKey) OR via this composite's own `cancel`. */\n private handleSupervisorCancel(): void {\n if (this.canceled) return;\n this.canceled = true;\n this.pending = [];\n // Snapshot children first: child.cancel() may synchronously invoke our\n // own noteChildDone path via the animator's completion listener, which\n // would mutate this.children mid-iteration.\n const kids = this.children.slice();\n this.children = [];\n for (const c of kids) c.cancel();\n }\n\n noteChildDone(): void {\n if (this.canceled || this.finished) return;\n this.outstanding -= 1;\n this.running -= 1;\n if (this.outstanding <= 0) this.finish();\n else this.rewound();\n }\n\n private finish(): void {\n this.finished = true;\n this.children = [];\n this.pending = [];\n this.supervisor.finish();\n }\n\n /** Played backward, it ends once every item running has run back to its start: the items\n * still waiting are not reached going that way. */\n private rewound(): void {\n if (this.running <= 0 && this.supervisor.rate() < 0) this.finish();\n }\n\n addChild(h: AnimationHandle): void {\n if (this.canceled) {\n h.cancel();\n return;\n }\n this.running += 1;\n this.children.push(h);\n if (this.paused_) h.pause();\n if (this.timeScale_ !== 1) h.setTimeScale(this.timeScale_);\n }\n\n schedule(delayMs: number, fire: () => void): void {\n if (this.canceled) return;\n this.pending.push({ at: delayMs, fire });\n }\n\n private fireDue(virtualNow: number): void {\n if (this.canceled || this.finished) return;\n this.rewound();\n if (this.finished || this.pending.length === 0) return;\n const due = this.pending.filter((p) => p.at <= virtualNow).sort((a, b) => a.at - b.at);\n this.pending = this.pending.filter((p) => p.at > virtualNow);\n for (const p of due) {\n if (this.canceled) return;\n p.fire();\n }\n }\n\n cancel(): void {\n // Route through the supervisor so the animator's id table is kept in\n // sync. The supervisor's onCancel forwards back to\n // handleSupervisorCancel which actually tears down children + waiting items.\n this.supervisor.cancel();\n }\n\n pause(): void {\n this.supervisor.pause();\n }\n\n resume(): void {\n this.supervisor.resume();\n }\n\n setTimeScale(s: number): void {\n this.supervisor.setTimeScale(s);\n }\n\n private applyPause(): void {\n if (this.paused_) return;\n this.paused_ = true;\n for (const c of this.children) c.pause();\n }\n\n private applyResume(): void {\n if (!this.paused_) return;\n this.paused_ = false;\n for (const c of this.children) c.resume();\n }\n\n private applyTimeScale(s: number): void {\n if (s === this.timeScale_) return;\n this.timeScale_ = s;\n for (const c of this.children) c.setTimeScale(s);\n }\n\n timeScale(): number {\n return this.timeScale_;\n }\n\n isPaused(): boolean {\n return this.paused_;\n }\n}\n\nfunction delayFor(delay: StaggerDelay, i: number): number {\n return typeof delay === 'function' ? delay(i) : delay * i;\n}\n\n/**\n * Stagger primitive. With `factory`, returns the composite handle directly.\n * Without `factory`, returns a `StaggerBuilder` whose `.each` runs the\n * stagger with a factory.\n */\nexport function createStagger<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n factory: StaggerFactory<TItem>,\n opts?: StaggerOptions,\n): AnimationHandle;\nexport function createStagger<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n): StaggerBuilder<TItem>;\nexport function createStagger<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n factory?: StaggerFactory<TItem>,\n opts?: StaggerOptions,\n): AnimationHandle | StaggerBuilder<TItem> {\n if (factory) return runStagger(createSupervisor, watchCompletion, items, delay, factory, opts);\n return makeBuilder(animator, createSupervisor, watchCompletion, items, delay);\n}\n\nfunction runStagger<TItem>(\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n factory: StaggerFactory<TItem>,\n opts?: StaggerOptions,\n): AnimationHandle {\n const supervisor = createSupervisor({ kind: 'stagger', cancelKey: opts?.cancelKey, label: opts?.label });\n const composite = new CompositeHandle(supervisor, items.length);\n if (items.length === 0) {\n supervisor.finish();\n return composite;\n }\n // Its items start at their own starts whenever the stagger does.\n supervisor.starting(false, () => items.forEach((item, i) => {\n const ms = delayFor(delay, i);\n const fire = (): void => {\n const child = factory(item, i);\n // Hook into the child's deregistration (natural OR cancel). If the\n // composite is already canceled, the watcher fires immediately on\n // cancel and the noteChildDone branch is a no-op (canceled guard).\n watchCompletion(child.id, () => composite.noteChildDone());\n composite.addChild(child);\n };\n if (ms <= 0) fire();\n else composite.schedule(ms, fire);\n }));\n return composite;\n}\n\nfunction resolvePerItem<T, TItem>(\n v: StaggerPerItem<T, TItem>,\n item: TItem,\n i: number,\n): T {\n return typeof v === 'function'\n ? (v as (item: TItem, index: number) => T)(item, i)\n : v;\n}\n\n/** What `.tween` and `.spring` read of their options, whichever form those take. */\ninterface PerItemOptions<TItem> extends StaggerOptions {\n target?: StaggerPerItem<Target<unknown>, TItem>;\n from?: StaggerPerItem<unknown, TItem>;\n to: StaggerPerItem<unknown, TItem>;\n onTick?: (value: unknown, item: TItem, index: number) => void;\n onDone?: (item: TItem, index: number) => void;\n}\n\n/** One item's share of a builder method's options: its target, or null where its animation\n * hands values to `onTick`, and the options every form of the animation takes. */\nfunction perItem<TItem>(opts: PerItemOptions<TItem>, item: TItem, i: number) {\n const target = opts.target !== undefined ? resolvePerItem(opts.target, item, i) : isTarget(item) ? item : null;\n return {\n target,\n from: opts.from === undefined ? undefined : resolvePerItem(opts.from, item, i),\n to: resolvePerItem(opts.to, item, i),\n onTick: opts.onTick && ((v: unknown) => opts.onTick!(v, item, i)),\n onDone: opts.onDone && (() => opts.onDone!(item, i)),\n };\n}\n\nfunction makeBuilder<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n): StaggerBuilder<TItem> {\n /** Runs `start` per item, once every item has a target to move or an `onTick` to tell. */\n const run = <O extends PerItemOptions<TItem>>(\n method: string,\n opts: O,\n start: (own: ReturnType<typeof perItem<TItem>>, item: TItem, i: number) => AnimationHandle,\n ): AnimationHandle => {\n if (opts.target === undefined && !opts.onTick && !items.every(isTarget)) {\n throw new Error(`animator.stagger: \\`.${method}\\` needs a \\`target\\`, items that are targets, or an \\`onTick\\``);\n }\n return runStagger(createSupervisor, watchCompletion, items, delay, (item, i) => start(perItem(opts, item, i), item, i), opts);\n };\n return {\n each: (factory, opts) =>\n runStagger(createSupervisor, watchCompletion, items, delay, factory, opts),\n tween: ((opts: StaggerTweenOptions<unknown, TItem> | StaggerTargetTweenOptions<unknown, TItem>) =>\n run('tween', opts, ({ target, ...own }, item, i) => {\n const shared = {\n ...own, ms: resolvePerItem(opts.ms, item, i),\n easing: opts.easing, interpolate: opts.interpolate, interpolator: opts.interpolator,\n };\n return target ? animator.tween({ ...shared, target }) : animator.tween(shared as TweenOptions<unknown>);\n })) as StaggerBuilder<TItem>['tween'],\n spring: ((opts: StaggerSpringOptions<unknown, TItem> | StaggerTargetSpringOptions<unknown, TItem>) =>\n run('spring', opts, ({ target, ...own }, item, i) => {\n const shared = {\n ...own, velocity: opts.velocity === undefined ? undefined : resolvePerItem(opts.velocity, item, i),\n preset: opts.preset, stiffness: opts.stiffness, damping: opts.damping, mass: opts.mass,\n restThreshold: opts.restThreshold,\n };\n if (target) return animator.spring({ ...shared, target });\n const { interpolate, add, subtract, scale, magnitude } = opts as StaggerSpringOptions<unknown, TItem>;\n return animator.spring({ ...shared, interpolate, add, subtract, scale, magnitude } as SpringOptions<unknown>);\n })) as StaggerBuilder<TItem>['spring'],\n };\n}\n","import type { AnimationSeed } from './engine/context';\nimport type { AnimationHandle } from './types';\n\n/**\n * Lets a composite (loop / stagger) sit in the animator's id table without\n * being a real animation: its tick never completes, so only `cancel()` or\n * `finish()` removes it. The owning composite installs `setOnCancel` to tear\n * down its children when an external cancel fires.\n *\n * Not part of the public Animator surface.\n */\nexport interface Supervisor {\n id: number;\n cancel(): void;\n pause(): void;\n resume(): void;\n setTimeScale(s: number): void;\n timeScale(): number;\n isPaused(): boolean;\n /** The rate its clock runs at, the animator's own included: below 0 while it plays backward. */\n rate(): number;\n /** Whether it was started at its end, to play backward. */\n readonly atEnd: boolean;\n /** Runs `start`, which starts the composite's children: at their ends, given `end`. */\n starting<T>(end: boolean, start: () => T): T;\n setOnCancel(cb: () => void): void;\n /** `cb` hears every pause, resume, and time scale set on the entry, by its\n * handle or by `cancelKey`, so the composite can pass it to its children. */\n setOnRate(cb: (paused: boolean, timeScale: number) => void): void;\n /** `cb` hears the entry's virtual time once a frame, after every animation\n * has ticked: what it starts is started outside the tick, as a caller's\n * own code would start it. */\n setOnFrame(cb: (virtualNow: number) => void): void;\n /** Retire the entry because the composite completed on its own. Unlike\n * `cancel`, skips the `setOnCancel` callback and reports an `end`. */\n finish(): void;\n cancelKey?: string;\n}\n\n/** What names a supervisor's entry in the animator's table and its events. */\nexport interface SupervisorOptions {\n kind: 'loop' | 'tweenLoop' | 'stagger' | 'keepAlive';\n cancelKey?: string;\n label?: string;\n}\n\nexport type SupervisorFactory = (opts: SupervisorOptions) => Supervisor;\n\n/** What {@link supervisors} needs of the animator. */\nexport interface SupervisorHost {\n nextId(): number;\n /** Whether an animation starting now starts at its end. */\n atEnd(): boolean;\n /** Runs `start`, starting what it starts at its end where `end` says. */\n starting<T>(end: boolean, start: () => T): T;\n register(seed: AnimationSeed): AnimationHandle;\n /** Takes an entry off the table as finished. */\n finish(id: number): void;\n /** Runs `cb` once this frame's ticks are done. */\n afterTicks(cb: () => void): void;\n /** The rate entry `id`'s clock runs at; 0 for one that has left. */\n rateOf(id: number): number;\n}\n\n/** Makes the animator's supervisor factory: each is a registered animation whose tick never\n * finishes, so loop and stagger sit in the id table and answer `cancel`, `cancelKey` and\n * `isActive`. */\nexport function supervisors(host: SupervisorHost): SupervisorFactory {\n return ({ kind, cancelKey, label }) => {\n const id = host.nextId();\n const atEnd = host.atEnd();\n let onCancelCb: (() => void) | undefined;\n let onRateCb: ((paused: boolean, timeScale: number) => void) | undefined;\n let onFrameCb: ((virtualNow: number) => void) | undefined;\n const base = host.register({\n id,\n kind,\n cancelKey,\n label,\n tick: (virtualNow) => {\n if (onFrameCb) host.afterTicks(() => onFrameCb?.(virtualNow));\n return false;\n },\n onCancel: () => onCancelCb?.(),\n onRate: (paused, timeScale) => onRateCb?.(paused, timeScale),\n });\n return {\n id: base.id,\n cancel: base.cancel,\n pause: base.pause,\n resume: base.resume,\n setTimeScale: base.setTimeScale,\n timeScale: base.timeScale,\n isPaused: base.isPaused,\n rate: () => host.rateOf(id),\n atEnd,\n starting: host.starting,\n setOnCancel: (cb) => { onCancelCb = cb; },\n setOnRate: (cb) => { onRateCb = cb; },\n setOnFrame: (cb) => { onFrameCb = cb; },\n finish: () => host.finish(id),\n cancelKey,\n };\n };\n}\n\n/**\n * Subscribe to \"this animation id finished or was canceled and is no longer\n * in the registry.\" Returns an unsubscribe. Fires at most once, and at once\n * for an id that has already left. Fires for both natural completion and\n * external cancel.\n */\nexport type WatchCompletion = (id: number, cb: () => void) => () => void;\n","import type { DecayOptions, PhysicsOptions, TargetDecayOptions, TargetPhysicsOptions } from '../types';\n\n/** A decay as the coast `physics` runs. Per-second friction v(t) = v0 * friction^t is\n * m*dv/dt = -c*v with c = -ln(friction), m = 1, k = 0. */\nexport function decayAsPhysics<T>(o: DecayOptions<T> | TargetDecayOptions<T>): PhysicsOptions<T> | TargetPhysicsOptions<T> {\n const shared = {\n from: o.from, to: null, velocity: o.velocity,\n stiffness: 0, damping: -Math.log(o.friction ?? 0.95), mass: 1, restThreshold: o.threshold ?? 0.5,\n onTick: o.onTick, onDone: o.onDone, cancelKey: o.cancelKey, label: o.label,\n };\n if (o.target) return { ...shared, target: o.target, interrupt: o.interrupt };\n return {\n ...shared,\n from: o.from,\n onTick: o.onTick,\n add: o.add,\n // DecayOptions doesn't carry subtract; derive from add+scale.\n subtract: (a, b) => o.add(a, o.scale(b, -1)),\n scale: o.scale,\n magnitude: o.magnitude,\n };\n}\n","import { wrapAngle } from '@weasel-js/geom';\nimport { axisIndexes } from '../axisNames';\nimport { committedInto, type TargetState } from '../target';\nimport type { AnimationContext } from './context';\nimport { createHoldStore, type HoldLayer, type HoldSources, type HoldStore } from './holdStore';\nimport { absorb, axesFor, setBeside } from './offsets';\n\n/** What {@link openHold} takes. */\nexport interface HoldSource<T> {\n target: TargetState<T>;\n /** The value to show in place of the committed one, read whenever the target is. */\n value(): T;\n /** Its share among the target's holds, read as `value` is. */\n weight(): number;\n /** The axes it holds, by index or by the target's names for them. Default: all of them. */\n axes?: readonly (number | string)[];\n /** True where `value` and `weight` answer the same until `touch` says otherwise. A target\n * whose holds are all so is read again only when touched, or when its committed value moves. */\n fixed?: boolean;\n}\n\n/** A hold on its target, apart from any row on the animator's table. */\nexport interface OpenHold {\n /** Says `value` or `weight` changed outside a frame's own reading of them. */\n touch(): void;\n /** Takes the hold off the target. With `commit`, the committed value moves so that what the\n * target shows stays where it was. */\n leave(commit: boolean): void;\n}\n\n/** Where `s`'s holds are folded: its table's store, for a row of one, or a store of its own. */\nexport function holdsOf(s: TargetState): { readonly store: HoldStore; readonly row: number } {\n if (s.holds) return s.holds;\n if (s.row) return (s.holds = { store: s.row.table.holds(), row: s.row.index });\n const store = createHoldStore(s.axes.count, 1, (_, out, at) => committedInto(s, out, at), s.axes.angles);\n return (s.holds = { store, row: 0 });\n}\n\n/** Where the holds on `s` are folded, what they show against `committed`, with and without\n * the hold `skip`. */\nfunction both(s: TargetState, skip: HoldLayer, committed: readonly number[]) {\n const { store, row } = s.holds!;\n const n = committed.length;\n const all = { delta: new Array<number>(n), total: new Array<number>(n) };\n const rest = { delta: new Array<number>(n), total: new Array<number>(n) };\n store.fold(row, committed, 0, null, all.delta, all.total);\n store.fold(row, committed, 0, skip, rest.delta, rest.total);\n return { all, rest, own: store.valueOf(skip, row) };\n}\n\n/** How far the committed value moves as `leaving` goes, so the target shows what it did. */\nfunction settle(\n s: TargetState, f: ReturnType<typeof both>, covers: Uint8Array | null, committed: readonly number[],\n): number[] {\n const { all, rest, own } = f;\n const angles = s.axes.angles ?? [];\n return committed.map((c, a) => {\n if (covers && !covers[a]) return 0;\n // Holds that cover the committed value outright leave it nothing to show: it takes this one's.\n if (rest.total[a]! >= 1 - 1e-9) return angles.includes(a) ? wrapAngle(own[a]! - c) : own[a]! - c;\n return (all.delta[a]! - rest.delta[a]!) / (1 - rest.total[a]!);\n });\n}\n\n/**\n * Keeps what shows of each move behind `s`'s holds as their weights go from `before` to\n * `after` on a release that commits: a hold that covered a share of a move takes that share\n * with it, so the move goes on as far as it was showing and no further.\n */\nfunction dim(s: TargetState, before: readonly number[], after: readonly number[]): void {\n for (const b of s.behind) {\n for (let a = 0; a < before.length; a++) {\n const open = 1 - Math.min(after[a]!, 1);\n const was = 1 - Math.min(before[a]!, 1);\n if (open < 1e-9 || open === was) continue;\n b.kept ??= new Array<number>(before.length).fill(1);\n b.kept[a] = (b.kept[a]! * was) / open;\n s.dimmed = true;\n }\n if (b.kept) b.move?.kept(b.kept);\n }\n}\n\nexport function coverOf(wanted: readonly (number | string)[] | undefined, axes: TargetState['axes']): Uint8Array | null {\n if (!wanted) return null;\n const covers = new Uint8Array(axes.count);\n for (const a of axisIndexes(axes, wanted)) covers[a] = 1;\n return covers;\n}\n\n/** Puts a hold on `s` in `layer` of the store its holds fold in. The caller folds it in. */\nexport function enterHold(\n ctx: AnimationContext, s: TargetState, layer: (store: HoldStore, row: number) => HoldLayer, sources: HoldSources,\n): { store: HoldStore; row: number; layer: HoldLayer } {\n ctx.targets.attach(s);\n s.held += 1;\n const { store, row } = holdsOf(s);\n const l = layer(store, row);\n store.join(l, row, sources);\n ctx.targets.holding(store, 1);\n return { store, row, layer: l };\n}\n\n/** Takes `s`'s hold in `layer` off it. With `commit`, the committed value moves so that what\n * `s` shows stays where it was. The caller shows what is left. */\nexport function leaveHold(ctx: AnimationContext, s: TargetState, layer: HoldLayer, covers: Uint8Array | null, commit: boolean): void {\n const { store, row } = s.holds!;\n if (commit && !s.discard) {\n store.refold(row);\n const committed = s.axes.to(s.get());\n const f = both(s, layer, committed);\n absorb(s, settle(s, f, covers, committed));\n dim(s, f.all.total, f.rest.total);\n }\n store.part(layer, row);\n ctx.targets.holding(store, -1);\n s.held -= 1;\n if (s.held === 0) {\n s.holds = null;\n // Nothing stands in front of the committed value now, so it takes what waited beside it.\n const beside = s.beside;\n if (beside) {\n setBeside(s, null);\n absorb(s, beside);\n }\n }\n ctx.targets.detach(s);\n}\n\n/** Holds a value on a target: it shows `value` where the committed value would show. */\nexport function openHold<T>(ctx: AnimationContext, o: HoldSource<T>): OpenHold {\n const s = o.target;\n const ax = s.axes;\n const state = s as unknown as TargetState;\n axesFor(ax, o.value(), 'value');\n let gone = false;\n const covers = coverOf(o.axes, ax);\n const { layer } = enterHold(ctx, state, (store, row) => store.free(row), {\n value: ax.write\n ? (out, at) => ax.write!(o.value(), out, at)\n : (out, at) => out.set(ax.to(o.value()), at),\n weight: o.weight,\n covers,\n fixed: o.fixed === true,\n });\n ctx.touch(state, true);\n\n return {\n touch: () => { if (!gone) ctx.touch(state); },\n leave(commit) {\n if (gone) return;\n gone = true;\n leaveHold(ctx, state, layer, covers, commit);\n ctx.touch(state, true);\n },\n };\n}\n","import { stateOf } from '../target';\nimport type { HoldHandle, HoldOptions } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport { openHold } from './holds';\n\nconst isFn = (x: unknown): x is () => unknown => typeof x === 'function';\n\n/** A hold as a row on the animator's table: it stays until canceled or released. */\nexport function startHold<T>(ctx: AnimationContext, o: HoldOptions<T>): HoldHandle {\n const target = stateOf(o.target);\n const id = ctx.nextId();\n const { value, weight = 1 } = o;\n // A hold of plain values changes only when told to, so it asks for no frames of its own.\n const fixed = !isFn(value) && !isFn(weight);\n const seed = {\n id, kind: 'hold', cancelKey: o.cancelKey, label: o.label, target,\n keepExisting: o.interrupt === false,\n idle: fixed,\n // It leaves when released or canceled, and has nothing to do on a frame.\n due: Infinity,\n } as AnimationSeed;\n // Ahead of opening: an interrupted hold commits what it showed, which this one then stands in for.\n if (o.cancelKey != null && o.interrupt !== false) ctx.interrupt(o.cancelKey, seed);\n const held = openHold(ctx, {\n target,\n value: isFn(value) ? (value as () => T) : () => value,\n weight: isFn(weight) ? weight : () => weight,\n axes: o.axes,\n fixed,\n });\n seed.onCancel = () => held.leave(true);\n seed.tick = () => {\n if (!ctx.tripwire()) return false;\n held.leave(true);\n return true;\n };\n const base = ctx.register(seed);\n return {\n ...base,\n touch: held.touch,\n release(r) {\n if (!ctx.has(id)) return;\n held.leave(r?.commit !== false);\n ctx.finish(id);\n },\n };\n}\n","import { stateOf, type TargetState } from '../target';\nimport { rowTableOf } from '../targetTable';\nimport type { HoldRowsOptions, RowsHoldHandle } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport type { HoldLayer } from './holdStore';\nimport { coverOf, enterHold, leaveHold } from './holds';\n\n/** Holds rows of a table in a layer of the table's holds whose values and weights the caller\n * writes: one row on the animator's table for all of them. */\nexport function startHoldRows(ctx: AnimationContext, o: HoldRowsOptions): RowsHoldHandle {\n const { table } = o;\n const rows = rowTableOf(table);\n const n = table.axes;\n const store = rows.holds();\n const id = ctx.nextId();\n const seed = {\n id, kind: 'hold', cancelKey: o.cancelKey, label: o.label, keepExisting: o.interrupt === false,\n idle: true, due: Infinity,\n } as AnimationSeed;\n if (o.cancelKey != null && o.interrupt !== false) ctx.interrupt(o.cancelKey, seed);\n\n let layer!: HoldLayer;\n /** The rows it holds, each with what lets it go. */\n const held = new Map<number, { s: TargetState; part: () => void }>();\n const weight = o.weight ?? 1;\n let covers: Uint8Array | null = null;\n const letGo = (row: number, commit: boolean): void => {\n const h = held.get(row);\n if (!h) return;\n held.delete(row);\n h.s.parts.delete(h.part);\n leaveHold(ctx, h.s, layer, covers, commit);\n // Read apart once, as the pass no longer shows it.\n rows.mark(row);\n };\n for (const row of o.rows ? Array.from(o.rows) : rows.rows()) {\n if (held.has(row)) continue;\n const s = stateOf(table.target(row)) as TargetState;\n covers ??= coverOf(o.axes, s.axes);\n enterHold(ctx, s, (st) => (layer ??= st.layer()), { covers, fixed: true });\n layer.values.set(table.committed.subarray(row * n, (row + 1) * n), row * n);\n layer.weights[row] = weight;\n const part = (): void => letGo(row, true);\n s.parts.add(part);\n held.set(row, { s, part });\n }\n layer ??= store.layer();\n\n const touch = (): void => {\n for (const row of held.keys()) store.refold(row);\n rows.refill();\n ctx.wake();\n };\n const leave = (commit: boolean): void => {\n for (const row of [...held.keys()]) letGo(row, commit);\n store.drop(layer);\n rows.refill();\n ctx.wake();\n };\n touch();\n seed.onCancel = () => leave(true);\n seed.tick = () => {\n if (!ctx.tripwire()) return false;\n leave(true);\n return true;\n };\n const base = ctx.register(seed);\n return {\n ...base,\n get values() { return layer.values; },\n get weights() { return layer.weights; },\n touch,\n release(r) {\n if (!ctx.has(id)) return;\n leave(r?.commit !== false);\n ctx.finish(id);\n },\n };\n}\n","export interface VectorOps<T> {\n add(a: T, b: T): T;\n subtract(a: T, b: T): T;\n scale(v: T, k: number): T;\n}\n\n/** One semi-implicit Euler step of a damped spring toward `target`, or of pure damping when\n * `target` is null. Returns the new value and velocity. */\nexport function stepSpring<T>(\n ops: VectorOps<T>,\n value: T, velocity: T, target: T | null,\n k: number, damping: number, mass: number, dt: number,\n): { value: T; velocity: T } {\n const ref = target ?? value;\n const displacement = ops.subtract(value, ref);\n const springForce = ops.scale(displacement, target == null ? 0 : -k);\n const dampingForce = ops.scale(velocity, -damping);\n const accel = ops.scale(ops.add(springForce, dampingForce), 1 / mass);\n const v = ops.add(velocity, ops.scale(accel, dt));\n return { value: ops.add(value, ops.scale(v, dt)), velocity: v };\n}\n","import { SPRING_PRESETS } from '@weasel-js/geom';\nimport type { AnimationKind, PhysicsHandle, PhysicsOptions } from '../types';\nimport { axesOf } from './axes';\nimport type { SpringReader } from './codec';\nimport type { AnimationContext } from './context';\nimport { stepSpring } from './integrator';\n\nexport function resolveSpringConstants(o: { preset?: string; stiffness?: number; damping?: number; mass?: number }) {\n const preset = o.preset ? SPRING_PRESETS[o.preset as keyof typeof SPRING_PRESETS] : null;\n return {\n stiffness: o.stiffness ?? preset?.stiffness ?? 170,\n damping: o.damping ?? preset?.damping ?? 26,\n mass: o.mass ?? preset?.mass ?? 1,\n };\n}\n\n/** A spring or a coast that hands each frame's value to the caller's `onTick`. */\nexport function startPhysics<T>(\n ctx: AnimationContext,\n o: PhysicsOptions<T>,\n kind: AnimationKind,\n): PhysicsHandle<T> {\n const { codec } = ctx;\n const id = ctx.nextId();\n const isNumeric = typeof o.from === 'number';\n if (!isNumeric && (!o.add || !o.subtract || !o.scale || !o.magnitude)) {\n throw new Error('physics: add/subtract/scale/magnitude are required for non-numeric T');\n }\n const add = o.add ?? ((a: T, b: T) => ((a as unknown as number) + (b as unknown as number)) as unknown as T);\n const subtract = o.subtract ?? ((a: T, b: T) => ((a as unknown as number) - (b as unknown as number)) as unknown as T);\n const scale = o.scale ?? ((v: T, k: number) => ((v as unknown as number) * k) as unknown as T);\n const magnitude = o.magnitude ?? ((v: T) => Math.abs(v as unknown as number));\n const { stiffness: kBase, damping, mass } = resolveSpringConstants(o);\n const restThreshold = o.restThreshold ?? 0.01;\n\n let target: T | null = o.to ?? null;\n let value = o.from;\n // Default to zero velocity: assumes scale(_, 0) returns the zero vector of T. Pass an explicit velocity for unusual T where this isn't true.\n let velocity: T = o.velocity ?? scale(o.from, 0);\n let lastTime: number | null = null;\n\n // blits' closed forms need positive damping and mass, and a spring with a target needs\n // stiffness; decay's handle never takes a target.\n const solvable = damping > 0 && mass > 0 && (kBase > 0 || kind === 'decay');\n const fromAxes = solvable ? axesOf(o.from) : null;\n const sameShape = (v: T | null | undefined): boolean => v == null || axesOf(v)?.shape === fromAxes!.shape;\n const axes = fromAxes && sameShape(o.to) && sameShape(o.velocity) ? fromAxes : null;\n let reader: SpringReader | null = null;\n if (axes) {\n ctx.seedClock();\n // Started ahead of `register`, whose `start` listeners may already cancel it.\n reader = codec.spring({\n id, axes: axes.count,\n from: axes.to(o.from),\n to: o.to == null ? null : axes.to(o.to),\n velocity: o.velocity == null ? new Array<number>(axes.count).fill(0) : axes.to(o.velocity),\n stiffness: kBase, damping, mass,\n });\n }\n\n /** Ends it. As for a tween: canceled from its own onTick, it never completes. */\n const end = (): true => {\n codec.stop(id);\n if (ctx.has(id)) {\n ctx.reportEnd(id);\n o.onDone?.();\n }\n return true;\n };\n const baseHandle = ctx.register({\n id,\n kind,\n cancelKey: o.cancelKey,\n label: o.label,\n tick(nowMs, rate) {\n if (ctx.tripwire()) { codec.stop(id); return true; }\n // Played backward, it ends where it started, as a tween does.\n if (rate < 0 && (nowMs <= 0 || (axes && codec.rewound(id)))) {\n o.onTick(axes ? axes.from(reader!.motion().value) : o.from);\n return end();\n }\n if (lastTime == null) {\n lastTime = nowMs;\n // Already-at-rest short-circuit: decay-mode (target == null)\n // with starting velocity below threshold should complete\n // immediately rather than emit a tick and wait a frame.\n if (target == null && magnitude(velocity) < restThreshold) return end();\n // The codec's voice has run since registration, so only Euler starts its clock here.\n if (!axes) {\n o.onTick(value);\n return false;\n }\n }\n if (axes) {\n const m = reader!.motion();\n value = axes.from(m.value);\n velocity = axes.from(m.velocity);\n } else {\n // Semi-implicit Euler, for a T blits cannot move as axes, or constants its closed forms can't solve.\n const dt = Math.max(-0.064, Math.min(0.064, (nowMs - lastTime) / 1000));\n const next = stepSpring({ add, subtract, scale }, value, velocity, target, kBase, damping, mass, dt);\n value = next.value;\n velocity = next.velocity;\n }\n lastTime = nowMs;\n o.onTick(value);\n const velRested = magnitude(velocity) < restThreshold;\n const posRested = target == null\n ? true\n : magnitude(subtract(value, target)) < restThreshold;\n if (!velRested || !posRested) return false;\n if (target != null) o.onTick(target);\n return end();\n },\n });\n\n const checkShape = (v: T, what: string): void => {\n if (!sameShape(v)) throw new Error(`physics: ${what} is not the same shape as \\`from\\``);\n };\n return {\n ...baseHandle,\n setTarget: (newTo: T | null) => {\n if (axes && newTo != null) checkShape(newTo, 'setTarget');\n target = newTo;\n if (axes && codec.has(id)) codec.retarget(id, newTo == null ? null : axes.to(newTo));\n },\n setVelocity: (v: T) => {\n if (axes) checkShape(v, 'setVelocity');\n velocity = v;\n if (axes && codec.has(id)) codec.push(id, axes.to(v));\n },\n };\n}\n","/**\n * The soonest a damped spring toward 0 can be at rest, in ms from where it stands at `value`\n * and `velocity`: under `threshold` in both, each as a length over the axes.\n *\n * Damping takes energy out no faster than `2 * damping / mass` of it a second, and at rest the\n * energy is under what `threshold` in both would hold, so the spring cannot be at rest before\n * its energy has had time to fall that far. Never later than the rest itself, and sooner by\n * more the less the spring is damped. With a `stiffness` of 0 it is a coast, at rest once it\n * is slow, and the answer is when that is.\n */\nexport function earliestRest(\n value: readonly number[],\n velocity: readonly number[],\n stiffness: number,\n damping: number,\n mass: number,\n threshold: number,\n): number {\n let energy = 0;\n for (let i = 0; i < value.length; i++) energy += stiffness * value[i]! ** 2 + mass * velocity[i]! ** 2;\n const atRest = (stiffness + mass) * threshold ** 2;\n if (!(energy > atRest)) return 0;\n return ((1000 * mass) / (2 * damping)) * Math.log(energy / atRest);\n}\n","import type { Behind, TargetState } from '../target';\nimport type { Codec, Own } from './codec';\nimport { bump, bumpOn, minus, plus, runsOn, seat } from './offsets';\n\n/** What {@link createSpringVoices} takes. */\nexport interface SpringVoicesOptions {\n /** The animation's id, which its first voice takes. */\n id: number;\n nextId(): number;\n stiffness: number;\n damping: number;\n mass: number;\n /** Where the move's voice runs, behind the target's holds. */\n behind: Behind;\n}\n\n/**\n * A spring on a target as up to two voices that sum to it. One is the move its destinations\n * made in the committed value, which a hold covers; the other is the rest, which shows on top\n * of a hold: a `from` away from the committed value, a push, a coast. A spring is linear, so\n * the two run apart and add up to the one spring.\n */\nexport interface SpringVoices {\n /** Both voices summed: the animation's whole offset, and its velocity. */\n own(): Own;\n /** What is left of the move. */\n moved(): number[];\n /** Adds `delta` to the move: a destination has moved the committed value by that much. */\n move(delta: readonly number[]): void;\n /** Stops the move's voice, where the committed value has taken what was left of it. */\n settleMove(): void;\n /** Starts the rest over at `from` and `velocity`, toward nothing left or, for a coast, free. */\n rest(from: readonly number[], velocity: readonly number[], coast: boolean): void;\n /** Sets the animation's velocity, by way of the rest. */\n push(velocity: readonly number[]): void;\n rate(rate: number): void;\n /** Whether every voice, played backward, has got back to where it was last cued. */\n rewound(): boolean;\n stop(): void;\n}\n\nexport function createSpringVoices(codec: Codec, s: TargetState, o: SpringVoicesOptions): SpringVoices {\n const n = s.axes.count;\n const zeros = (): number[] => new Array<number>(n).fill(0);\n const moving = { id: -1 };\n const resting = { id: -1 };\n let first = true;\n let rate = 1;\n let coasting = false;\n\n const of = (v: { id: number }): Own =>\n (v.id >= 0 ? codec.own(v.id) : undefined) ?? { value: zeros(), velocity: zeros() };\n\n /** Counts `delta` into what `v` shows until the next frame reads it. */\n const adjust = (v: { id: number }, delta: readonly number[], sign: 1 | -1): void => {\n if (v === moving) bumpOn(s, o.behind, delta, sign);\n else bump(s, delta, sign);\n };\n const cue = (v: { id: number }, from: readonly number[], velocity: readonly number[], to: number[] | null): void => {\n if (v.id >= 0) {\n const was = codec.own(v.id)!.value;\n codec.recue(v.id, from.slice(), velocity.slice(), to);\n adjust(v, minus(from, was), 1);\n return;\n }\n v.id = first ? o.id : o.nextId();\n first = false;\n const on = v === moving ? runsOn(s, o.behind) : s;\n seat(s, on, codec.spring({\n id: v.id, on, axes: n, from: from.slice(), to, velocity: velocity.slice(),\n stiffness: o.stiffness, damping: o.damping, mass: o.mass,\n }));\n if (rate !== 1) codec.rate(v.id, rate);\n adjust(v, from, 1);\n };\n\n const drop = (v: { id: number }): void => {\n if (v.id < 0) return;\n const own = codec.own(v.id);\n if (own) adjust(v, own.value, -1);\n codec.stop(v.id);\n v.id = -1;\n };\n\n return {\n own() {\n const a = of(moving);\n const b = of(resting);\n return { value: plus(a.value, b.value), velocity: plus(a.velocity, b.velocity) };\n },\n moved: () => of(moving).value,\n move(delta) {\n const m = of(moving);\n cue(moving, plus(m.value, delta), m.velocity, zeros());\n },\n settleMove: () => drop(moving),\n rest(from, velocity, coast) {\n coasting = coast;\n cue(resting, from, velocity, coast ? null : zeros());\n },\n push(velocity) {\n const v = minus(velocity, of(moving).velocity);\n if (resting.id < 0) cue(resting, zeros(), v, coasting ? null : zeros());\n else codec.push(resting.id, v);\n },\n rate(r) {\n rate = r;\n for (const v of [moving, resting]) if (v.id >= 0 && codec.has(v.id)) codec.rate(v.id, r);\n },\n rewound: () => (moving.id >= 0 || resting.id >= 0)\n && [moving, resting].every((v) => v.id < 0 || codec.rewound(v.id)),\n stop() {\n drop(moving);\n drop(resting);\n },\n };\n}\n","import { stateOf, type Behind, type TargetState } from '../target';\nimport type { AnimationKind, PhysicsHandle, TargetPhysicsOptions } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport { absorb, axesFor, comeOut, commitOffset, goBehind, minus, norm, plus, takeUp, times, travel } from './offsets';\nimport { resolveSpringConstants } from './physicsAnimation';\nimport { earliestRest } from './springRest';\nimport { createSpringVoices, type SpringVoices, type SpringVoicesOptions } from './springVoices';\n\nconst any = (a: readonly number[]): boolean => a.some((x) => x !== 0);\n\n/** The spring's constants, refused where blits' closed forms cannot solve them. */\nfunction constantsFor(o: Parameters<typeof resolveSpringConstants>[0], kind: AnimationKind, toward: boolean) {\n const c = resolveSpringConstants(o);\n if (!(c.damping > 0) || !(c.mass > 0) || (toward && !(c.stiffness > 0))) {\n throw new Error(`${kind}: an animation on a target needs positive damping and mass, and stiffness to reach \\`to\\``);\n }\n return c;\n}\n\ntype Along = readonly number[];\n\n/** When a spring or a coast with no `onTick` can next be at rest. Until then its tick, which\n * only asks whether it is, has nothing to do. */\nfunction restWaits(\n ctx: AnimationContext,\n id: number,\n quiet: boolean,\n c: { stiffness: number; damping: number; mass: number },\n threshold: number,\n) {\n // Nothing pulls a coast, so it is at rest once it is slow.\n const until = (value: Along, velocity: Along, coast: boolean): number =>\n earliestRest(value, velocity, coast ? 0 : c.stiffness, c.damping, c.mass, threshold);\n return {\n /** The `due` it registers with. */\n first: (value: Along, velocity: Along, coast: boolean): number | undefined =>\n (quiet ? until(value, velocity, coast) : undefined),\n /** Leaves it unticked until then. Answers false, as the tick of one still moving does. */\n again(value: Along, velocity: Along, coast: boolean): false {\n if (quiet) ctx.defer(id, until(value, velocity, coast));\n return false;\n },\n };\n}\n\n/** The voices a spring or a coast starts with: `move` behind the target's holds, all of its\n * voice the move, and the rest of `start`, with `velocity`, on top. */\nfunction startVoices(\n ctx: AnimationContext, s: TargetState, o: Omit<SpringVoicesOptions, 'behind'>,\n move: Along, start: Along, velocity: Along, coast: boolean,\n): { voices: SpringVoices; behind: Behind } {\n const behind = goBehind(s, () => voices.moved(), () => voices.moved(), new Array<number>(move.length).fill(1));\n const voices = createSpringVoices(ctx.codec, s, { ...o, behind });\n if (any(move)) voices.move(move);\n const top = minus(start, move);\n if (!any(move) || any(top) || any(velocity)) voices.rest(top, velocity, coast);\n return { voices, behind };\n}\n\n/**\n * A spring or a coast on a target. A spring commits its destination as it starts and its voices\n * are what is left to travel. A coast has no destination: its voice is how far it has gone, which\n * it commits when it stops.\n */\nexport function startOffsetPhysics<T>(\n ctx: AnimationContext,\n o: TargetPhysicsOptions<T>,\n kind: AnimationKind,\n): PhysicsHandle<T> {\n const s = stateOf(o.target);\n const ax = s.axes;\n let dest = o.to == null ? null : axesFor(ax, o.to, 'to');\n const constants = constantsFor(o, kind, dest != null);\n const { stiffness } = constants;\n const given = o.from === undefined ? null : axesFor(ax, o.from, 'from');\n let velocity = o.velocity === undefined ? null : axesFor(ax, o.velocity, 'velocity');\n const restThreshold = o.restThreshold ?? 0.01;\n const zeros = (): number[] => new Array<number>(ax.count).fill(0);\n\n const id = ctx.nextId();\n const waits = restWaits(ctx, id, !o.onTick, constants, restThreshold);\n const interrupts = o.interrupt !== false;\n const seed = {\n id, kind, cancelKey: o.cancelKey, label: o.label, target: s, keepExisting: !interrupts,\n } as AnimationSeed;\n if (o.cancelKey != null && interrupts) {\n // Read ahead of the interrupt, which stops the voices whose velocity this is.\n velocity ??= ctx.velocityUnder(o.cancelKey, s as never);\n ctx.interrupt(o.cancelKey, seed);\n }\n const before = ax.to(s.get());\n const committed = dest ? takeUp(s) : before;\n const start = travel(ax, given ?? committed, dest ?? committed);\n /** The move the destination makes in the committed value; the rest of `start` rides on top. */\n const move = dest ? travel(ax, before, dest) : zeros();\n\n ctx.targets.attach(s as never);\n if (o.to != null) s.set(o.to);\n ctx.seedClock();\n const { voices, behind } = startVoices(\n ctx, s as never, { id, nextId: ctx.nextId, ...constants }, move, start, velocity ?? zeros(), dest == null,\n );\n\n let left = false;\n const leave = (commit: boolean): void => {\n if (left) return;\n left = true;\n const moved = voices.moved();\n const shown = comeOut(s, behind, moved);\n if (commit) commitOffset(s, voices.own().value, moved, shown);\n voices.stop();\n ctx.targets.detach(s as never);\n };\n /** A coast commits where it stopped, and so does one played back to its start; a spring\n * drops what is left under the threshold. */\n const finish = (commit = dest == null): true => {\n leave(commit);\n ctx.reportEnd(id);\n o.onDone?.();\n return true;\n };\n /** What it shows, for `onTick`. */\n const shows = (own: readonly number[]): T => ax.from(plus(dest ?? ax.to(s.get()), own));\n\n let ticked = false;\n seed.due = waits.first(start, velocity ?? zeros(), dest == null);\n seed.onCancel = () => leave(true);\n seed.onRate = (_paused, _timeScale, rate) => voices.rate(rate);\n seed.velocity = () => voices.own().velocity;\n seed.tick = (nowMs, scale) => {\n if (ctx.tripwire()) { leave(true); return true; }\n const own = voices.own();\n if (scale < 0 && (nowMs <= 0 || voices.rewound())) {\n o.onTick?.(shows(own.value));\n return ctx.has(id) ? finish(true) : true;\n }\n // A coast too slow to move ends at once rather than emit a tick and wait a frame.\n if (!ticked && dest == null && norm(own.velocity) < restThreshold) return finish();\n ticked = true;\n o.onTick?.(shows(own.value));\n if (!ctx.has(id)) return true;\n if (norm(own.velocity) >= restThreshold || (dest && norm(own.value) >= restThreshold)) {\n return waits.again(own.value, own.velocity, dest == null);\n }\n if (dest) o.onTick?.(ax.from(dest));\n return ctx.has(id) ? finish() : true;\n };\n const base = ctx.register(seed);\n\n return {\n ...base,\n setTarget(next) {\n if (left) return;\n const own = voices.own();\n if (next == null) {\n if (dest == null) return;\n // The committed value stops where the spring had brought it; the coast carries the rest.\n const moved = voices.moved();\n absorb(s, behind.kept ? times(moved, behind.kept) : moved);\n dest = null;\n voices.rest(minus(own.value, moved), own.velocity, true);\n voices.settleMove();\n waits.again(own.value, own.velocity, true);\n return;\n }\n const to = axesFor(ax, next, 'setTarget');\n if (!(stiffness > 0)) throw new Error(`${kind}: setTarget needs a positive stiffness`);\n // The committed value moves under the voices, which shift by as much the other way.\n const shift = travel(ax, ax.to(s.get()), to);\n s.set(next);\n if (dest == null) voices.rest(own.value, own.velocity, false);\n dest = to;\n voices.move(shift);\n waits.again(plus(own.value, shift), own.velocity, false);\n ctx.targets.showNow(s as never);\n },\n setVelocity(v) {\n if (left) return;\n const pushed = axesFor(ax, v, 'setVelocity');\n waits.again(voices.own().value, pushed, dest == null);\n voices.push(pushed);\n },\n };\n}\n","import { easeOut, resolveEasing } from '@weasel-js/geom';\nimport { stateOf } from '../target';\nimport type { AnimationHandle, TargetTweenOptions } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport { axesFor, bump, bumpOn, comeOut, commitOffset, goBehind, minus, plus, runsOn, seat, shareBehind, takeUp, times, travel } from './offsets';\n\n/** A tween on a target: its destination is committed as it starts, and its voice is what is\n * left to travel. */\nexport function startOffsetTween<T>(ctx: AnimationContext, o: TargetTweenOptions<T>): AnimationHandle {\n const { codec } = ctx;\n const s = stateOf(o.target);\n const ax = s.axes;\n const to = axesFor(ax, o.to, 'to');\n const given = o.from === undefined ? null : axesFor(ax, o.from, 'from');\n const id = ctx.nextId();\n const interrupts = o.interrupt !== false;\n const seed = {\n id, kind: 'tween', cancelKey: o.cancelKey, label: o.label, target: s, keepExisting: !interrupts,\n } as AnimationSeed;\n // Ahead of reading the committed value: an interrupted animation commits where it stopped.\n if (o.cancelKey != null && interrupts) ctx.interrupt(o.cancelKey, seed);\n const committed = ax.to(s.get());\n const base = takeUp(s);\n const from = o.from === undefined ? ax.from(base) : o.from;\n const path = o.interpolator ? o.interpolator(from, o.to)\n : o.interpolate ? (u: number) => o.interpolate!(from, o.to, u)\n : null;\n const easing = resolveEasing(o.easing ?? easeOut);\n const ms = Math.max(o.ms, 1);\n\n ctx.targets.attach(s as never);\n s.set(o.to);\n const atEnd = ctx.atEnd();\n ctx.seedClock();\n const offsetAt = (u: number): number[] => minus(ax.to(path!(easing(u))), to);\n /** Its offset at its start, where a run backward ends. */\n const first = path ? offsetAt(0) : travel(ax, given ?? base, to);\n const share = shareBehind(ax, committed, to, travel(ax, given ?? base, to));\n const own = (): number[] => codec.own(id)!.value;\n const behind = goBehind(s, own, () => times(own(), share), share);\n const on = runsOn(s as never, behind);\n seat(s as never, on, path\n ? codec.path({ id, on, ms, axes: ax.count, at: offsetAt, atEnd })\n : codec.tween({ id, on, ms, ease: easing, from: first, to: new Array<number>(ax.count).fill(0), atEnd }));\n bumpOn(s as never, behind, own(), 1);\n\n let left = false;\n /** Takes its voice off the target, committing what it had left to travel when `commit`, or\n * given `at`, that offset in its place. */\n const leave = (commit: boolean, at?: readonly number[]): void => {\n if (left) return;\n left = true;\n const own = codec.own(id);\n const value = at ?? own?.value;\n const moved = value ? times(value, share) : [];\n const shown = comeOut(s, behind, moved);\n if (own) {\n if (commit) commitOffset(s, value!, moved, shown);\n // Voices among the target's own are in its `slot` until the next frame reads it.\n if (!behind.move) bump(s as never, own.value, -1);\n }\n codec.stop(id);\n ctx.targets.detach(s as never);\n };\n /** Ends it at its destination, or played backward, at its start. */\n const end = (atStart: boolean): true => {\n o.onTick?.(atStart ? from : o.to);\n // That last onTick may have canceled it, which commits where it was and never completes.\n if (!ctx.has(id)) return true;\n leave(atStart, atStart ? first : undefined);\n ctx.reportEnd(id);\n o.onDone?.();\n return true;\n };\n\n if (atEnd) seed.startAt = Math.max(o.ms, 0);\n seed.progress = (virtualNow) => (o.ms <= 0 ? 1 : Math.min(1, Math.max(0, virtualNow / o.ms)));\n // With no `onTick` to call it has nothing to do until it ends.\n if (!o.onTick) seed.due = Math.max(o.ms, 0);\n seed.onCancel = () => leave(true);\n seed.tick = (nowMs, scale) => {\n if (ctx.tripwire()) { leave(true); return true; }\n if (scale < 0 && (nowMs <= 0 || codec.rewound(id))) return end(true);\n if (o.ms <= 0 || nowMs >= o.ms) return end(false);\n o.onTick?.(ax.from(plus(to, codec.own(id)!.value)));\n return false;\n };\n return ctx.register(seed);\n}\n","import type { WatchCompletion } from '../supervisor';\n\n/** One-shot listeners for an animation leaving the animator's table, finished or canceled. A\n * stagger watches its children through them, to retire itself when the last one goes. */\nexport interface Completions {\n /** Tells `id`'s listeners it has left, and forgets them. */\n fire(id: number): void;\n watch: WatchCompletion;\n}\n\n/** `has` answers whether an id is still on the table; a watch on one that is not fires at once. */\nexport function createCompletions(has: (id: number) => boolean): Completions {\n const listeners = new Map<number, (() => void)[]>();\n return {\n fire(id) {\n const ls = listeners.get(id);\n if (!ls) return;\n listeners.delete(id);\n for (const cb of ls) cb();\n },\n watch(id, cb) {\n if (!has(id)) {\n cb();\n return () => {};\n }\n const ls = listeners.get(id) ?? [];\n ls.push(cb);\n listeners.set(id, ls);\n return () => {\n const cur = listeners.get(id);\n if (!cur) return;\n const idx = cur.indexOf(cb);\n if (idx >= 0) cur.splice(idx, 1);\n if (cur.length === 0) listeners.delete(id);\n };\n },\n };\n}\n","/** What {@link Wakes} keeps on each thing waiting in it. */\nexport interface Waiting {\n /** The time it is due at; kept by `Wakes`. */\n wakeAt: number;\n /** Its place in the heap; -1 while it is not waiting. */\n heapAt: number;\n /** Orders two due in one call: the lower first. */\n seq: number;\n}\n\n/** Things waiting for a clock to reach a time each, soonest first: a binary heap that knows\n * each one's place, so one can leave or be given another time without a search. */\nexport interface Wakes<W extends Waiting> {\n /** Has `w` wait for `at`, in place of any time it was waiting for. */\n set(w: W, at: number): void;\n /** Stops `w` waiting. */\n remove(w: W): void;\n /** Takes out everything due at or before `now`, in `seq` order. */\n due(now: number): W[];\n clear(): void;\n readonly size: number;\n}\n\nexport function createWakes<W extends Waiting>(): Wakes<W> {\n const heap: W[] = [];\n\n const place = (w: W, i: number): void => {\n heap[i] = w;\n w.heapAt = i;\n };\n const up = (w: W, i: number): void => {\n while (i > 0) {\n const parent = (i - 1) >> 1;\n const p = heap[parent]!;\n if (p.wakeAt <= w.wakeAt) break;\n place(p, i);\n i = parent;\n }\n place(w, i);\n };\n const down = (w: W, i: number): void => {\n const n = heap.length;\n for (;;) {\n let child = 2 * i + 1;\n if (child >= n) break;\n if (child + 1 < n && heap[child + 1]!.wakeAt < heap[child]!.wakeAt) child += 1;\n const c = heap[child]!;\n if (c.wakeAt >= w.wakeAt) break;\n place(c, i);\n i = child;\n }\n place(w, i);\n };\n const remove = (w: W): void => {\n const i = w.heapAt;\n if (i < 0) return;\n w.heapAt = -1;\n const last = heap.pop()!;\n if (last === w) return;\n // The last one takes the gap, and may belong either way from there.\n if (i > 0 && last.wakeAt < heap[(i - 1) >> 1]!.wakeAt) up(last, i);\n else down(last, i);\n };\n\n return {\n set(w, at) {\n remove(w);\n w.wakeAt = at;\n heap.push(w);\n up(w, heap.length - 1);\n },\n remove,\n due(now) {\n const out: W[] = [];\n while (heap.length > 0 && heap[0]!.wakeAt <= now) {\n const w = heap[0]!;\n remove(w);\n out.push(w);\n }\n if (out.length > 1) out.sort((a, b) => a.seq - b.seq);\n return out;\n },\n clear() {\n for (const w of heap) w.heapAt = -1;\n heap.length = 0;\n },\n get size() { return heap.length; },\n };\n}\n","import type { ActiveAnimation } from './context';\nimport { createWakes } from './wakes';\n\n/** Which animations a frame ticks, and each one's own clock. */\nexport interface Schedule {\n /** `a`'s own clock now, in virtual ms. */\n clockOf(a: ActiveAnimation): number;\n /** Takes `a` on, its clock at its `startAt`. */\n add(a: ActiveAnimation): void;\n remove(a: ActiveAnimation): void;\n /** Sets `a`'s pause and time scale, leaving its clock where it stands. */\n pace(a: ActiveAnimation, paused: boolean, timeScale: number): void;\n /** `a`'s rate now: its own time scale, 0 while paused, and below 0 while it plays backward. */\n rateOf(a: ActiveAnimation): number;\n /** Runs `flip`, which turns the direction the animations play in, leaving every one of `all`\n * with its clock where it stands. */\n turn(all: Iterable<ActiveAnimation>, flip: () => void): void;\n /** Leaves `a` unticked until its clock has run `ms` more, whether it was waiting already or\n * ticked every frame. Nothing for an `a` that has left. */\n defer(a: ActiveAnimation | undefined, ms: number): void;\n /** The animations to tick this frame, in the order they registered: those ticked every\n * frame, and those whose clock has just reached their `due`. */\n ticks(): ActiveAnimation[];\n /** Whether any animation changes from one frame to the next. */\n readonly awake: boolean;\n /** How many animations no frame ticks until they are due. */\n readonly waiting: number;\n clear(): void;\n}\n\n/** `elapsed` answers the animator's clock, which only goes forward: its time scale and pauses\n * are already in it. `direction` is -1 while the animator plays backward. */\nexport function createSchedule(elapsed: () => number, direction: () => number = () => 1): Schedule {\n /** Ticked every frame, in the order they joined. */\n const every = new Set<ActiveAnimation>();\n /** Waiting for the animator's clock to reach the time their own reaches `due`. */\n const wakes = createWakes<ActiveAnimation>();\n let seq = 0;\n let awake = 0;\n /** With a `due` and not yet woken, whether or not a rate above 0 has it in `wakes`. */\n let waiting = 0;\n\n const rateOf = (a: ActiveAnimation): number => (a.paused ? 0 : a.timeScale * direction());\n const clockOf = (a: ActiveAnimation): number => a.base + (elapsed() - a.anchor) * rateOf(a);\n const rebase = (a: ActiveAnimation): void => {\n a.base = clockOf(a);\n a.anchor = elapsed();\n };\n\n /** Has `a` wait for its `due`. One playing backward is ticked every frame instead: it ends\n * where its clock gets back to 0, which no `due` ahead of it marks. */\n const wait = (a: ActiveAnimation): void => {\n const rate = rateOf(a);\n if (rate < 0 && a.due! < Infinity) {\n if (every.has(a)) return;\n wakes.remove(a);\n waiting -= 1;\n every.add(a);\n a.rewinding = true;\n return;\n }\n if (a.rewinding) {\n a.rewinding = false;\n every.delete(a);\n waiting += 1;\n }\n if (rate > 0 && a.due! < Infinity) wakes.set(a, a.anchor + (a.due! - a.base) / rate);\n else wakes.remove(a);\n };\n\n return {\n clockOf,\n add(a) {\n a.base = a.startAt ?? 0;\n a.anchor = elapsed();\n a.seq = seq++;\n a.heapAt = -1;\n a.wakeAt = Infinity;\n a.rewinding = false;\n if (!a.idle) awake += 1;\n if (a.due === undefined) {\n every.add(a);\n return;\n }\n waiting += 1;\n wait(a);\n },\n remove(a) {\n if (!a.idle) awake -= 1;\n if (every.delete(a)) return;\n waiting -= 1;\n wakes.remove(a);\n },\n pace(a, paused, timeScale) {\n rebase(a);\n a.paused = paused;\n a.timeScale = timeScale;\n if (!every.has(a) || a.rewinding) wait(a);\n },\n rateOf,\n turn(all, flip) {\n const each = [...all];\n for (const a of each) rebase(a);\n flip();\n for (const a of each) if (!every.has(a) || a.rewinding) wait(a);\n },\n defer(a, ms) {\n if (!a) return;\n a.due = clockOf(a) + ms;\n if (every.delete(a)) waiting += 1;\n a.rewinding = false;\n wait(a);\n },\n ticks() {\n const steady = [...every];\n const woke = wakes.due(elapsed());\n if (woke.length === 0) return steady;\n waiting -= woke.length;\n const out: ActiveAnimation[] = [];\n let i = 0;\n for (const a of woke) {\n // Rounding may leave its clock a hair short of the time it was woken for.\n a.base = Math.max(clockOf(a), a.due!);\n a.anchor = elapsed();\n every.add(a);\n while (i < steady.length && steady[i]!.seq < a.seq) out.push(steady[i++]!);\n out.push(a);\n }\n while (i < steady.length) out.push(steady[i++]!);\n return out;\n },\n get awake() { return awake > 0; },\n get waiting() { return waiting; },\n clear() {\n every.clear();\n wakes.clear();\n awake = 0;\n waiting = 0;\n },\n };\n}\n","import type { TargetState } from '../target';\nimport type { ActiveAnimation } from './context';\nimport { createSchedule, type Schedule } from './schedule';\n\n/** The animations on the table, and the ways a frame and the API find them. */\nexport interface Roster {\n readonly animations: Map<number, ActiveAnimation>;\n readonly schedule: Schedule;\n /** The animations holding `key`, in the order they registered. */\n under(key: string): Iterable<ActiveAnimation>;\n /** The animations moving `target`, in the order they registered. */\n on(target: TargetState): Iterable<ActiveAnimation>;\n /** Puts `a` on the table, in place of one still there under its id: a revived timeline\n * registers again under the id it holds. */\n add(a: ActiveAnimation): void;\n /** Takes `a` off the table, with no report. */\n remove(a: ActiveAnimation): void;\n clear(): void;\n}\n\nconst NONE: Iterable<ActiveAnimation> = [];\n\n/** Files `a` under `key` in `index`, or takes it out. */\nfunction file<K>(index: Map<K, Set<ActiveAnimation>>, key: K, a: ActiveAnimation, on: boolean): void {\n let set = index.get(key);\n if (on) {\n if (!set) index.set(key, set = new Set());\n set.add(a);\n } else if (set?.delete(a) && set.size === 0) index.delete(key);\n}\n\n/** `elapsed` and `direction` answer the animator's clock, as {@link createSchedule} takes them. */\nexport function createRoster(elapsed: () => number, direction?: () => number): Roster {\n const animations = new Map<number, ActiveAnimation>();\n const schedule = createSchedule(elapsed, direction);\n // A start interrupts its key and a stop empties its target, and a search of the table for\n // either costs more the more is running.\n const byKey = new Map<string, Set<ActiveAnimation>>();\n const byTarget = new Map<TargetState, Set<ActiveAnimation>>();\n const index = (a: ActiveAnimation, on: boolean): void => {\n if (a.cancelKey != null) file(byKey, a.cancelKey, a, on);\n if (a.target) file(byTarget, a.target, a, on);\n };\n const remove = (a: ActiveAnimation): void => {\n animations.delete(a.id);\n schedule.remove(a);\n index(a, false);\n };\n return {\n animations,\n schedule,\n under: (key) => byKey.get(key) ?? NONE,\n on: (target) => byTarget.get(target) ?? NONE,\n add(a) {\n const had = animations.get(a.id);\n if (had) remove(had);\n animations.set(a.id, a);\n schedule.add(a);\n index(a, true);\n },\n remove,\n clear() {\n animations.clear();\n schedule.clear();\n byKey.clear();\n byTarget.clear();\n },\n };\n}\n","import type { AnimatorEventHub } from '../observe';\nimport type { WatchCompletion } from '../supervisor';\nimport type { TargetState } from '../target';\nimport type { AnimationHandle, AnimationInfo } from '../types';\nimport type { Codec } from './codec';\nimport { createCompletions } from './completions';\nimport type { ActiveAnimation, AnimationSeed } from './context';\nimport { createRoster } from './roster';\n\n/** What {@link createTable} needs of the animator around it. */\nexport interface TableHost {\n codec: Pick<Codec, 'stop' | 'has' | 'rate'>;\n hub: AnimatorEventHub;\n /** The animator's clock: the virtual ms its frames have advanced it by. */\n elapsed(): number;\n /** -1 while the animator plays backward, else 1. */\n direction(): number;\n /** Starts the frame clock where it stands idle, so a new animation is charged the wait for\n * its first frame. */\n seedClock(): void;\n /** Shows a target as an animation starts on it. */\n showNow(target: TargetState): void;\n /** Whether a target came to rest and is owed one more show. */\n resting(): boolean;\n /** Whether a frame is between reading the codec and showing its targets. */\n framing(): boolean;\n requestFrame(): void;\n}\n\n/** The animator's running animations, and how one joins and leaves. */\nexport interface Table {\n readonly animations: Map<number, ActiveAnimation>;\n infoOf(a: ActiveAnimation): AnimationInfo;\n /** Reports `id` as finished, ahead of its `onDone`, so whatever that handler starts is heard\n * after it. Nothing revives a primitive; a timeline, which can be revived, is reported as it\n * leaves the table. */\n reportEnd(id: number): void;\n /** Takes `id` off the table as canceled, or, given `by`, as interrupted by the animation\n * claiming its key; given `error`, the caller reports it. */\n retire(id: number, by?: ActiveAnimation, error?: true): void;\n cancelByKey(key: string, by?: ActiveAnimation): void;\n /** The animations holding `key`, in the order they registered. */\n under(key: string): Iterable<ActiveAnimation>;\n /** The animations moving `target`, in the order they registered. */\n on(target: TargetState): Iterable<ActiveAnimation>;\n /** Sets `a`'s pause and time scale, and gives its codec subject the rate they ask for. */\n pace(a: ActiveAnimation, paused: boolean, timeScale: number): void;\n /** Runs `flip`, which turns the animator's direction, and gives every animation the rate that\n * leaves it, its clock where it stands. */\n turn(flip: () => void): void;\n /** `a`'s own clock now, in virtual ms. */\n clockOf(a: ActiveAnimation): number;\n /** The rate `a`'s clock runs at: 0 while paused, below 0 while it plays backward. */\n rateOf(a: ActiveAnimation): number;\n /** Leaves `id` unticked until its clock has run `ms` more. */\n defer(id: number, ms: number): void;\n /** The animations to tick this frame, in the order they registered. */\n ticks(): ActiveAnimation[];\n /** Whether any animation changes from one frame to the next. */\n readonly awake: boolean;\n /** How many animations no frame ticks until they are due. */\n readonly waiting: number;\n register(seed: AnimationSeed): AnimationHandle;\n /** Takes `id` off the table as finished. */\n finish(id: number): void;\n /** Takes `a` off the table with no report of its own: it ended and then threw. */\n drop(a: ActiveAnimation): void;\n /** Cancels everything. `cleared` runs once the table is empty, ahead of the reports. */\n cancelAll(cleared: () => void): void;\n watchCompletion: WatchCompletion;\n}\n\n/** `scale` as a time scale, refused where it is no finite number. Below 0 plays backward. */\nexport function timeScaleOf(scale: number): number {\n if (!Number.isFinite(scale)) throw new Error(`animator: a time scale is a finite number, and ${scale} was given`);\n return scale;\n}\n\nfunction infoOf(a: ActiveAnimation): AnimationInfo {\n if (!a.info) {\n const info: { -readonly [K in keyof AnimationInfo]: AnimationInfo[K] } = { id: a.id, kind: a.kind };\n if (a.cancelKey != null) info.key = a.cancelKey;\n if (a.label != null) info.label = a.label;\n a.info = info;\n }\n return a.info;\n}\n\nexport function createTable(host: TableHost): Table {\n const { codec, hub } = host;\n const roster = createRoster(host.elapsed, host.direction);\n const { animations, schedule, remove } = roster;\n const { fire: fireCompletion, watch: watchCompletion } = createCompletions((id) => animations.has(id));\n\n const reportEnd = (id: number): void => {\n const a = animations.get(id);\n if (!a || a.ended) return;\n a.ended = true;\n if (hub.watched) hub.emit({ type: 'end', animation: infoOf(a) });\n };\n\n const retire = (id: number, by?: ActiveAnimation, error?: true): void => {\n const a = animations.get(id);\n if (!a) return;\n a.onCancel?.();\n codec.stop(id);\n remove(a);\n // A target that came to rest is owed one more show, and no frame may be coming.\n if (host.resting()) host.requestFrame();\n fireCompletion(id);\n if (!hub.watched || a.ended || error) return;\n hub.emit(by\n ? { type: 'interrupt', animation: infoOf(a), by: infoOf(by) }\n : { type: 'cancel', animation: infoOf(a) });\n };\n\n const cancelByKey = (key: string, by?: ActiveAnimation): void => {\n // A copy: each one leaves the set as it is retired, and its `onCancel` may retire others.\n for (const a of [...roster.under(key)]) retire(a.id, by);\n };\n\n /** Hands `a`'s voices the rate its schedule now gives it. */\n const rerate = (a: ActiveAnimation): void => {\n const rate = schedule.rateOf(a);\n if (codec.has(a.id)) codec.rate(a.id, rate);\n a.onRate?.(a.paused, a.timeScale, rate);\n };\n const pace = (a: ActiveAnimation, paused: boolean, timeScale: number): void => {\n schedule.pace(a, paused, timeScale);\n rerate(a);\n };\n\n const register = (seed: AnimationSeed): AnimationHandle => {\n const anim = seed as ActiveAnimation;\n if (seed.cancelKey != null && !seed.keepExisting) cancelByKey(seed.cancelKey, anim);\n anim.paused = false;\n anim.timeScale = 1;\n // Its clock starts with the frame clock, as a voice cued now does: both then advance by\n // the whole of their first frame. Idle, that frame is the wait since the first of the\n // animations it finds was registered.\n host.seedClock();\n roster.add(anim);\n if (host.direction() < 0) rerate(anim);\n if (anim.target) host.showNow(anim.target);\n if (hub.watched) hub.emit({ type: 'start', animation: infoOf(anim) });\n // A frame in progress asks for the next one itself, after `onTick`: asked for from a tick,\n // it would run ahead of a paint `onTick` requests, and the tick after would paint nothing.\n if (animations.size > 0 && !host.framing()) host.requestFrame();\n const live = (): ActiveAnimation | undefined => animations.get(anim.id);\n return {\n id: anim.id,\n cancel: () => retire(anim.id),\n pause: () => { const a = live(); if (a) pace(a, true, a.timeScale); },\n resume: () => { const a = live(); if (a) pace(a, false, a.timeScale); },\n setTimeScale: (s) => { const a = live(); if (a) pace(a, a.paused, timeScaleOf(s)); },\n timeScale: () => live()?.timeScale ?? 1,\n isPaused: () => live()?.paused ?? false,\n };\n };\n\n return {\n animations,\n infoOf,\n reportEnd,\n retire,\n cancelByKey,\n under: roster.under,\n on: roster.on,\n pace,\n turn(flip) {\n schedule.turn(animations.values(), flip);\n for (const a of [...animations.values()]) if (animations.get(a.id) === a) rerate(a);\n },\n clockOf: schedule.clockOf,\n rateOf: schedule.rateOf,\n defer: (id, ms) => schedule.defer(animations.get(id), ms),\n ticks: schedule.ticks,\n get awake() { return schedule.awake; },\n get waiting() { return schedule.waiting; },\n register,\n finish(id) {\n const a = animations.get(id);\n if (!a) return;\n reportEnd(id);\n remove(a);\n fireCompletion(id);\n },\n drop(a) {\n remove(a);\n fireCompletion(a.id);\n },\n cancelAll(cleared) {\n const retired: ActiveAnimation[] = [];\n // Over the table as it stands: one an earlier `onCancel` retired is not canceled twice.\n for (const a of animations.values()) {\n a.onCancel?.();\n codec.stop(a.id);\n retired.push(a);\n }\n roster.clear();\n cleared();\n for (const a of retired) fireCompletion(a.id);\n if (hub.watched) for (const a of retired) hub.emit({ type: 'cancel', animation: infoOf(a) });\n },\n watchCompletion,\n };\n}\n","import { easeOut, resolveEasing } from '@weasel-js/geom';\nimport type { AnimationHandle, TweenOptions } from '../types';\nimport { axesOf } from './axes';\nimport type { AnimationContext } from './context';\n\n/** A tween that hands each frame's value to the caller's `onTick`. */\nexport function startTween<T>(ctx: AnimationContext, o: TweenOptions<T>): AnimationHandle {\n const { codec } = ctx;\n // blits blends in a straight line, which a caller's own function may not do.\n const fromAxes = o.interpolate || o.interpolator ? null : axesOf(o.from);\n const toAxes = fromAxes && axesOf(o.to);\n const axes = fromAxes && toAxes && toAxes.shape === fromAxes.shape ? fromAxes : null;\n // Refused here rather than on a tick, where a throw would stop every other animation.\n if (!axes && !o.interpolate && !o.interpolator) {\n throw new Error('tween: interpolate or interpolator is required for non-numeric T');\n }\n const id = ctx.nextId();\n const easing = resolveEasing(o.easing ?? easeOut);\n // Precedence: factory > per-tick. Factory is built once at tween start so\n // expensive setup (color space conversion etc.) doesn't repeat per frame.\n const factoryFn = o.interpolator ? o.interpolator(o.from, o.to) : null;\n let lastValueEmitted = false;\n const atEnd = ctx.atEnd();\n ctx.seedClock();\n // Started ahead of `register`, whose `start` listeners may already cancel it.\n const reader = codec.tween({\n id, ms: Math.max(o.ms, 1), ease: easing,\n from: axes ? axes.to(o.from) : [0],\n to: axes ? axes.to(o.to) : [1],\n atEnd,\n });\n return ctx.register({\n id,\n kind: 'tween',\n cancelKey: o.cancelKey,\n label: o.label,\n startAt: atEnd ? Math.max(o.ms, 0) : 0,\n progress: (virtualNow) => (o.ms <= 0 ? 1 : Math.min(1, Math.max(0, virtualNow / o.ms))),\n // `nowMs` is the call's own virtual time, so it still decides when the tween ends; the codec\n // supplies only the value in between.\n tick(nowMs, scale) {\n if (ctx.tripwire()) { codec.stop(id); return true; }\n // Played backward, it ends at its start as it ends at its end going forward.\n const atStart = scale < 0 && (nowMs <= 0 || codec.rewound(id));\n const t = atStart ? 0 : o.ms <= 0 ? 1 : Math.min(1, nowMs / o.ms);\n const ends = atStart || t >= 1;\n let value: T;\n if (axes) {\n value = ends ? (atStart ? o.from : o.to) : axes.from(reader.cols, reader.at);\n } else {\n const eased = ends ? easing(t) : reader.cols[reader.at]!;\n value = factoryFn ? factoryFn(eased) : o.interpolate!(o.from, o.to, eased);\n }\n o.onTick(value);\n if (ends && !lastValueEmitted) {\n lastValueEmitted = true;\n codec.stop(id);\n // That last onTick may have canceled us — deregistering the id.\n // A canceled tween never completes, whenever the cancel landed.\n if (ctx.has(id)) {\n ctx.reportEnd(id);\n o.onDone?.();\n }\n return true;\n }\n return false;\n },\n });\n}\n","import type { ColorOverrideRegistry } from '../colorRegistry';\nimport { createLoop, createTweenLoop } from '../loop';\nimport type { AnimatorEventHub } from '../observe';\nimport { createStagger } from '../stagger';\nimport { supervisors } from '../supervisor';\nimport { stateOf } from '../target';\nimport { createTimeline } from '../timeline/createTimeline';\nimport type { OpenTrackHold } from '../timeline/trackHolds';\nimport type { TimelineOptions } from '../timeline/types';\nimport type {\n AnimationHandle, AnimationInfo, AnimationKind, Animator, DecayOptions, LiveAnimation, PhysicsHandle,\n PhysicsOptions, SpringOptions, TargetDecayOptions, TargetPhysicsOptions, TargetSpringOptions,\n TargetTweenOptions, TweenOptions,\n} from '../types';\nimport type { ActiveAnimation, AnimationContext } from './context';\nimport { decayAsPhysics } from './decay';\nimport type { AnimatorClock } from './frame';\nimport { startHold } from './holdAnimation';\nimport { startHoldRows } from './holdRows';\nimport { openHold } from './holds';\nimport { startOffsetPhysics } from './offsetPhysics';\nimport { startOffsetTween } from './offsetTween';\nimport { startPhysics } from './physicsAnimation';\nimport { timeScaleOf, type Table } from './table';\nimport { startTween } from './tweenAnimation';\nimport type { Emitter } from '@weasel-js/registry';\n\n/** What {@link createAnimatorApi} needs of the animator around it. */\nexport interface ApiHost {\n ctx: AnimationContext;\n table: Table;\n clock: AnimatorClock;\n hub: AnimatorEventHub;\n /** Whether an animation's own tick is running. */\n ticking(): boolean;\n /** Runs a callback once the frame's ticks are done. */\n afterTicks(cb: () => void): void;\n subscribers: Pick<Emitter, 'subscribe'>;\n colorOverrides: ColorOverrideRegistry;\n /** Stops the frame loop, once everything is canceled and its targets are shown at rest. */\n halt(): void;\n}\n\n/** Gives every animation holding `key` the pause and time scale `pace` answers for it. */\nfunction eachUnder(\n table: Table, key: string, pace: (a: ActiveAnimation) => [paused: boolean, timeScale: number],\n): void {\n for (const a of table.under(key)) table.pace(a, ...pace(a));\n}\n\nfunction liveRows(table: Table): LiveAnimation[] {\n const rows: LiveAnimation[] = [];\n for (const a of table.animations.values()) {\n rows.push({\n ...table.infoOf(a),\n paused: a.paused,\n timeScale: a.timeScale,\n elapsed: table.clockOf(a),\n ...(a.progress ? { progress: a.progress(table.clockOf(a)) } : {}),\n });\n }\n return rows;\n}\n\nfunction startTimeline(host: ApiHost, o: TimelineOptions): ReturnType<Animator['timeline']> {\n const { ctx, table, hub } = host;\n const id = ctx.nextId();\n const info = (): AnimationInfo | undefined => {\n const a = table.animations.get(id);\n return a && table.infoOf(a);\n };\n const hold: OpenTrackHold = (target, value, weight, axes, fixed) =>\n openHold(ctx, { target: stateOf(target), value, weight, axes, fixed });\n return createTimeline(table.register, id, o, {\n get watched() { return hub.watched; },\n fire: (track, path, event, lateBy) => {\n const animation = info();\n if (animation) hub.emit({ type: 'fire', animation, track, path: path.slice(), event, lateBy });\n },\n lap: (lap) => {\n const animation = info();\n if (animation) hub.emit({ type: 'lap', animation, lap });\n },\n }, hold);\n}\n\n/** The animator's public surface over its table, clock, and primitives. */\nexport function createAnimatorApi(host: ApiHost): Animator {\n const { ctx, table, clock, hub } = host;\n const { animations } = table;\n const createSupervisor = supervisors({\n nextId: ctx.nextId,\n atEnd: ctx.atEnd,\n starting: ctx.starting,\n register: table.register,\n finish: table.finish,\n afterTicks: host.afterTicks,\n rateOf: (id) => {\n const a = animations.get(id);\n return a ? table.rateOf(a) : 0;\n },\n });\n\n const physics = <T,>(\n o: PhysicsOptions<T> | TargetPhysicsOptions<T>,\n kind: AnimationKind = 'physics',\n ): PhysicsHandle<T> => (o.target ? startOffsetPhysics(ctx, o, kind) : startPhysics(ctx, o, kind));\n\n const api: Animator = {\n tween: <T,>(o: TweenOptions<T> | TargetTweenOptions<T>): AnimationHandle =>\n (o.target ? startOffsetTween(ctx, o) : startTween(ctx, o)),\n spring: <T,>(o: SpringOptions<T> | TargetSpringOptions<T>): AnimationHandle => physics<T>(o, 'spring'),\n decay: <T,>(o: DecayOptions<T> | TargetDecayOptions<T>): AnimationHandle =>\n physics<T>(decayAsPhysics(o), 'decay'),\n physics,\n hold: (o) => startHold(ctx, o),\n holdRows: (o) => startHoldRows(ctx, o),\n cancel: (handle) => table.retire(handle.id),\n cancelKey: (key) => table.cancelByKey(key),\n cancelAll: () => {\n table.cancelAll(() => {\n clock.frameT = null;\n ctx.targets.show();\n });\n host.halt();\n },\n isActive: (key) => {\n if (key == null) return animations.size > 0;\n for (const _ of table.under(key)) return true;\n return false;\n },\n isTicking: host.ticking,\n pause: () => { clock.paused = true; },\n resume: () => { clock.paused = false; },\n isPaused: () => clock.paused,\n setTimeScale: (s) => {\n const scale = timeScaleOf(s);\n if ((scale < 0) === (clock.timeScale < 0)) clock.timeScale = scale;\n else table.turn(() => { clock.timeScale = scale; });\n },\n timeScale: () => clock.timeScale,\n pauseKey: (key) => eachUnder(table, key, (a) => [true, a.timeScale]),\n resumeKey: (key) => eachUnder(table, key, (a) => [false, a.timeScale]),\n setTimeScaleByKey: (key, s) => {\n const scale = timeScaleOf(s);\n eachUnder(table, key, (a) => [a.paused, scale]);\n },\n loop: (factory, loopOpts) => createLoop(createSupervisor, factory, loopOpts),\n tweenLoop: (tweenLoopOpts) => createTweenLoop(api, createSupervisor, tweenLoopOpts),\n stagger: ((items, delay, factory, staggerOpts) =>\n createStagger(\n api,\n createSupervisor,\n table.watchCompletion,\n items,\n delay,\n factory as never,\n staggerOpts,\n )) as Animator['stagger'],\n timeline: (o: TimelineOptions) => startTimeline(host, o),\n colorOverrides: host.colorOverrides,\n onTick: (cb) => host.subscribers.subscribe(cb),\n keepAlive: () => {\n const sup = createSupervisor({ kind: 'keepAlive' });\n return () => sup.cancel();\n },\n watch: (listener) => hub.add(listener),\n live: () => liveRows(table),\n };\n return api;\n}\n","import { kit, mix, sum, vec, type Mix } from '@msb235/blits';\n\nexport type Out = { v: number[] };\n\n/** One subject's value, kept current in place. Valid until the subject's last voice stops. */\nexport interface Reader {\n /** The array holding the subject's axes as the last `frame` read them, from `at` on. It is\n * shared with other subjects and valid until the next `frame`. */\n readonly cols: Float64Array;\n /** Where the subject's axes start in `cols`. */\n readonly at: number;\n /** How many voices reach it: 0 once the last has left, and it reads what it showed then. */\n readonly refs: number;\n}\n\n/** One subject of a lane: what `pull` reads for it, summed over every voice reaching it. */\nexport interface Slot extends Reader {\n cols: Float64Array;\n at: number;\n key: unknown;\n lane: Lane;\n /** How many voices reach it. */\n refs: number;\n /** Its place in the lane's `keys`; -1 while no frame has read it. */\n index: number;\n /** What `cols` points at while `index` is -1. */\n held: Float64Array;\n /** A number its owner gave it, kept beside it in the lane's `tags`; -1 where it gave none. */\n tag: number;\n}\n\n/** Where a subject's voices run, for one kept apart from the rest with as many axes. */\nexport interface LanePlace {\n /** Subjects naming one group share a lane no other subject is in. */\n group: object;\n /** Kept in the lane's `tags` at the subject's place. */\n tag: number;\n}\n\n/** A group's lane as the last frame read it: `count` subjects, subject `j`'s axes in `cols`\n * from `j * axes` and its tag at `tags[j]`. Valid until a subject joins or leaves. */\nexport interface LaneColumns {\n cols: Float64Array;\n tags: Int32Array;\n count: number;\n}\n\n/** One mix per axis count, since a kit's channel width is fixed, and one more per group. */\nexport interface Lane {\n /** What the lane is kept under: its group, or its axis count. */\n key: unknown;\n axes: number;\n mix: Mix<unknown, Out>;\n /** The subjects `pull` reads, by place. Joins wait in `pending` until the next `frame`. */\n keys: unknown[];\n /** Each place's slot, beside `keys`. */\n slots: Slot[];\n /** Each place's tag, beside `keys`. */\n tags: Int32Array;\n pending: Set<Slot>;\n dirty: boolean;\n /** Frames in a row it has had no subjects at; it retires at the second. */\n idle: number;\n cols: { v: Float64Array };\n}\n\nexport interface Lanes {\n /** The slot for `key`, made if absent and showing `held` until a frame reads it. Counts one\n * more voice reaching it. */\n join(axes: number, key: unknown, held: ArrayLike<number>): Slot;\n /** The lane of `group` as the last frame read it; null where it has none. */\n columns(group: object): LaneColumns | null;\n /** Counts one voice fewer reaching `slot`. At none it leaves its lane, and the mix forgets\n * the subject. */\n leave(slot: Slot): void;\n /** Syncs every lane to `time` and reads its subjects. */\n frame(time: number): void;\n}\n\n/** Takes `s` out of its lane's places, moving the last one into the gap. */\nfunction depart(s: Slot): void {\n const l = s.lane;\n l.dirty = true;\n if (s.index < 0) { l.pending.delete(s); return; }\n const lastKey = l.keys.pop()!;\n const moved = l.slots.pop()!;\n if (moved === s) return;\n const n = l.axes;\n const from = l.keys.length * n;\n l.cols.v.copyWithin(s.index * n, from, from + n);\n l.keys[s.index] = lastKey;\n l.slots[s.index] = moved;\n l.tags[s.index] = moved.tag;\n moved.index = s.index;\n moved.at = s.index * n;\n}\n\n/** Gives the lane's waiting subjects their places. */\nfunction rebuild(l: Lane): void {\n const keys = l.keys.slice();\n const had = keys.length;\n for (const s of l.pending) {\n s.index = keys.length;\n s.at = s.index * l.axes;\n s.cols = l.cols.v;\n keys.push(s.key);\n l.slots.push(s);\n }\n l.pending.clear();\n l.keys = keys;\n if (l.tags.length < keys.length) {\n const tags = new Int32Array(Math.max(keys.length, l.tags.length * 2));\n tags.set(l.tags);\n l.tags = tags;\n }\n for (let i = had; i < keys.length; i++) l.tags[i] = l.slots[i]!.tag;\n if (l.cols.v.length !== keys.length * l.axes) {\n l.cols = { v: new Float64Array(keys.length * l.axes) };\n for (const s of l.slots) s.cols = l.cols.v;\n }\n l.dirty = false;\n}\n\n/** `placeOf` answers the lane a subject is kept in, for one kept apart from the rest. */\nexport function createLanes(placeOf?: (key: object) => LanePlace | undefined): Lanes {\n const lanes = new Map<unknown, Lane>();\n const slots = new Map<unknown, Slot>();\n /** Slots whose last voice left since the last frame. */\n const gone: Slot[] = [];\n let now = 0;\n\n const laneOf = (axes: number, group: object | undefined): Lane => {\n const key = group ?? axes;\n let l = lanes.get(key);\n if (!l) {\n const m = mix<unknown, Out>(kit<Out>({ v: vec(axes, sum()) }));\n m.sync(now);\n l = {\n key, axes, mix: m, keys: [], slots: [], tags: new Int32Array(0), pending: new Set(),\n dirty: false, idle: 0, cols: { v: new Float64Array(0) },\n };\n lanes.set(key, l);\n }\n return l;\n };\n\n return {\n join(axes, key, held) {\n const had = slots.get(key);\n if (had) {\n if (had.lane.axes !== axes) {\n throw new Error(`codec: a subject on ${had.lane.axes} axes was given a voice on ${axes}`);\n }\n had.refs += 1;\n return had;\n }\n const place = typeof key === 'object' && key !== null ? placeOf?.(key) : undefined;\n const lane = laneOf(axes, place?.group);\n if (lane.axes !== axes) throw new Error(`codec: a group on ${lane.axes} axes was given a subject on ${axes}`);\n const own = Float64Array.from(held);\n const s: Slot = { key, lane, refs: 1, index: -1, held: own, cols: own, at: 0, tag: place?.tag ?? -1 };\n slots.set(key, s);\n lane.pending.add(s);\n lane.dirty = true;\n return s;\n },\n leave(s) {\n s.refs -= 1;\n if (s.refs > 0) return;\n // Whoever holds it reads what it showed as its last voice left, until the next frame.\n const n = s.lane.axes;\n s.held.set(s.cols.subarray(s.at, s.at + n));\n s.lane.mix.drop(s.key);\n depart(s);\n s.cols = s.held;\n s.at = 0;\n gone.push(s);\n slots.delete(s.key);\n },\n frame(time) {\n now = time;\n for (const s of gone) s.held.fill(0);\n gone.length = 0;\n for (const l of lanes.values()) {\n if (l.dirty) rebuild(l);\n if (l.keys.length === 0 && ++l.idle >= 2) {\n lanes.delete(l.key);\n continue;\n }\n l.mix.sync(time);\n if (l.keys.length === 0) continue;\n l.idle = 0;\n l.mix.pull(l.keys, l.cols);\n }\n },\n columns(group) {\n const l = lanes.get(group);\n return l ? { cols: l.cols.v, tags: l.tags, count: l.keys.length } : null;\n },\n };\n}\n","import type { Handle } from '@msb235/blits';\nimport type { Slot } from './lanes';\n\n/** What {@link createRewinds} reads of a codec voice. */\nexport interface Rewindable {\n slot: Slot;\n /** Absent while a tween waits to be cued. */\n handle?: Handle<unknown>;\n /** Its first frame. */\n from: number[];\n /** A spring's start, where a re-cue has moved its first frame since. */\n spring?: { from: number[] };\n}\n\n/**\n * The voices playing backward. blits takes one out of its mix once its clock is back at 0, and\n * its subject then reads as though it never ran; for an offset that is its destination. The\n * animator ends the animation there holding its start, so until it stops the voice, each frame\n * puts the voice's first frame back where its subject is read.\n */\nexport interface Rewinds<V extends Rewindable> {\n /** Says `v` plays at `rate` from here. */\n rate(v: V, rate: number): void;\n /** After a frame has read every subject: marks the voices back at their start, and adds what\n * each shows into its subject's axes. */\n frame(): void;\n /** Whether `v` has run back to its start. */\n has(v: V): boolean;\n /** Says `v` was cued again, from a start of its own. */\n recued(v: V): void;\n remove(v: V): void;\n}\n\nconst firstOf = (v: Rewindable): number[] => v.spring?.from ?? v.from;\n\nexport function createRewinds<V extends Rewindable>(): Rewinds<V> {\n const backward = new Set<V>();\n const back = new Set<V>();\n return {\n rate(v, rate) {\n // One back at its start has left blits' mix, and plays no further either way.\n if (rate < 0) backward.add(v);\n else backward.delete(v);\n },\n frame() {\n for (const v of backward) if (v.handle?.state === 'done') back.add(v);\n for (const v of back) {\n const { cols, at } = v.slot;\n const first = firstOf(v);\n for (let i = 0; i < first.length; i++) cols[at + i] = cols[at + i]! + first[i]!;\n }\n },\n has: (v) => back.has(v),\n recued: (v) => { back.delete(v); },\n remove(v) {\n backward.delete(v);\n back.delete(v);\n },\n };\n}\n","import {\n glide, patch as fnPatch, spring as springPatch, tween as tweenPatch,\n type Handle, type Motion, type Patch,\n} from '@msb235/blits';\nimport { createLanes, type LaneColumns, type LanePlace, type Out, type Reader, type Slot } from './lanes';\nimport { createRewinds } from './rewinds';\n\nexport type { Reader } from './lanes';\n\nexport interface TweenStart {\n id: number; ms: number; ease: (u: number) => number;\n /** Endpoints as axes. A tween whose caller blends its own values passes [0] and [1]. */\n from: number[]; to: number[];\n /** The subject the voice reaches, where several voices share one. Default: its own, `id`. */\n on?: unknown;\n /** Starts it at its end, to play backward. */\n atEnd?: boolean;\n}\nexport interface SpringStart {\n id: number; axes: number;\n from: number[]; to: number[] | null; velocity: number[];\n stiffness: number; damping: number; mass: number;\n /** As {@link TweenStart.on}. */\n on?: unknown;\n}\nexport interface PathStart {\n id: number; ms: number; axes: number;\n /** The voice's axes at linear progress `u`, 0 to 1. */\n at(u: number): number[];\n /** As {@link TweenStart.on}. */\n on?: unknown;\n /** As {@link TweenStart.atEnd}. */\n atEnd?: boolean;\n}\n/** A voice's own value and velocity, apart from any other voice on its subject. */\nexport interface Own { value: number[]; velocity: number[] }\nexport interface SpringReader extends Reader {\n /** Position and velocity at the last `frame`, for a voice alone on its subject. */\n motion(): Own;\n}\nexport interface Codec {\n /** Advances the codec's clock by `dtMs` of animator time, then reads every subject. */\n frame(dtMs: number): void;\n tween(s: TweenStart): Reader;\n spring(s: SpringStart): SpringReader;\n path(s: PathStart): Reader;\n retarget(id: number, to: number[] | null): void;\n /** Starts spring `id` over from `from` at `velocity`, toward `to` or coasting. */\n recue(id: number, from: number[], velocity: number[], to: number[] | null): void;\n push(id: number, velocity: number[]): void;\n /** Plays `id` at rate `rate` from where it is, without a jump. */\n rate(id: number, rate: number): void;\n /** Whether `id`, played backward, has got back to its start: its subject shows its first\n * frame from then until it stops. */\n rewound(id: number): boolean;\n stop(id: number): void;\n /** Whether `id` is one of the codec's voices. */\n has(id: number): boolean;\n /** Voice `id`'s own value and velocity as of the last `frame`. */\n own(id: number): Own | undefined;\n /** How many voices the codec is running; for tests and diagnostics. */\n voiceCount(): number;\n /** The lane of `group` as the last frame read it; null where it has none. */\n columns(group: object): LaneColumns | null;\n}\n\n/** What the codec calls on a motion patch: a tween has no `push`, a glide no `to`. */\ninterface Moves {\n to?(key: unknown, target: number[], at?: number): void;\n read(key: unknown, at?: number): Motion<number[]> | undefined;\n push?(key: unknown, velocity: number[], at?: number): void;\n}\n\ninterface Voice {\n kind: 'tween' | 'spring' | 'path';\n slot: Slot;\n /** `handle` and `patch` are absent while a tween is `queued`, and a path has\n * no `patch`. */\n handle: Handle<unknown>;\n patch: Moves;\n /** Where it started: what `own` answers until a frame has read it. */\n from: number[];\n /** The codec's own copy, kept at the voice's motion as of its last re-cue. */\n spring?: SpringStart;\n /** A tween's start, until the next `frame` cues its voice. */\n queued?: TweenStart;\n /** A rate asked for while queued. */\n queuedRate?: number;\n /** A path's axes as its patch last answered. */\n last?: number[];\n}\n\n// A voice cued now reads voice time 0 at codec time `time`. Each patch holds its subject at rest\n// at `from`, and the codec releases it with a `to` or `push` timed at 0.\nfunction springVoice(slot: Slot, sp: SpringStart): { handle: Handle<unknown>; patch: Moves } {\n // With no target the spring force is zero whatever the stiffness, leaving damping alone:\n // velocity falls as exp(-t * damping / mass), a glide whose time constant is mass / damping.\n const patch: Moves & Patch<unknown, Out, void> = sp.to == null\n ? glide<unknown, Out, number[]>('v', { from: sp.from, ms: (1000 * sp.mass) / sp.damping })\n : springPatch<unknown, Out, number[]>('v', {\n from: sp.from, to: sp.from, stiffness: sp.stiffness, damping: sp.damping, mass: sp.mass,\n });\n const handle = slot.lane.mix.cue({ patch, subjects: [slot.key] });\n if (sp.to) patch.to!(slot.key, sp.to, 0);\n patch.push!(slot.key, sp.velocity, 0);\n return { handle, patch };\n}\n\nconst zeros = (n: number): number[] => new Array<number>(n).fill(0);\n\n/** `placeOf` answers where a shared subject's voices run, for one kept in a lane of its own. */\nexport function createCodec(placeOf?: (on: object) => LanePlace | undefined): Codec {\n const lanes = createLanes(placeOf);\n const voices = new Map<number, Voice>();\n // Tweens are cued together at the next frame, not one by one as they start: a burst of starts then\n // keeps the caller's objects together rather than each a voice apart, which the frame loop reads.\n const queue: Voice[] = [];\n const rewinds = createRewinds<Voice>();\n let time = 0;\n\n const get = (id: number): Voice => {\n const v = voices.get(id);\n if (!v) throw new Error(`codec: no subject ${id}`);\n return v;\n };\n /** A spring voice's motion now: as its voice last read it, else where it was last placed. */\n const current = (v: Voice): Own =>\n v.patch.read(v.slot.key) ?? { value: v.spring!.from.slice(), velocity: v.spring!.velocity.slice() };\n\n const respring = (v: Voice, next: SpringStart): void => {\n const rate = v.handle.rate;\n v.handle.fade({ over: 0 });\n const { handle, patch } = springVoice(v.slot, next);\n handle.rate = rate;\n v.handle = handle;\n v.patch = patch;\n v.spring = next;\n rewinds.recued(v);\n };\n\n function stop(id: number): void {\n const v = voices.get(id);\n if (!v) return;\n if (v.queued) v.queued = undefined;\n else v.handle.fade({ over: 0 });\n rewinds.remove(v);\n lanes.leave(v.slot);\n voices.delete(id);\n }\n\n return {\n frame(dtMs) {\n for (const v of queue) {\n const q = v.queued;\n if (!q) continue;\n v.queued = undefined;\n const key = v.slot.key;\n const patch = tweenPatch<unknown, Out, number[]>('v', { from: q.from.slice(), to: q.from.slice(), ms: q.ms, ease: q.ease });\n v.handle = v.slot.lane.mix.cue({ patch, subjects: [key], seek: q.atEnd ? q.ms : 0 });\n v.patch = patch;\n patch.to(key, q.to.slice(), 0);\n if (v.queuedRate !== undefined) v.handle.rate = v.queuedRate;\n }\n queue.length = 0;\n time += dtMs;\n lanes.frame(time);\n rewinds.frame();\n },\n tween(s) {\n if (s.to.length !== s.from.length) {\n throw new Error(`codec: tween ${s.id} goes from ${s.from.length} axes to ${s.to.length}`);\n }\n const shared = s.on !== undefined;\n const slot = lanes.join(s.from.length, shared ? s.on : s.id, shared ? zeros(s.from.length) : s.atEnd ? s.to : s.from);\n const v = { kind: 'tween', slot, from: s.from, queued: s } as Voice;\n voices.set(s.id, v);\n queue.push(v);\n return slot;\n },\n spring(s) {\n const sp = { ...s, from: s.from.slice(), to: s.to && s.to.slice(), velocity: s.velocity.slice() };\n const shared = s.on !== undefined;\n const slot = lanes.join(sp.axes, shared ? s.on : s.id, shared ? new Array<number>(sp.axes).fill(0) : sp.from);\n const { handle, patch } = springVoice(slot, sp);\n const v: Voice = { kind: 'spring', slot, handle, patch, from: sp.from, spring: sp };\n voices.set(s.id, v);\n const reader = slot as Slot & SpringReader;\n if (!shared) reader.motion = () => current(v);\n return reader;\n },\n path(s) {\n const shared = s.on !== undefined;\n const from = s.at(0);\n const last = s.atEnd ? s.at(1) : undefined;\n const slot = lanes.join(s.axes, shared ? s.on : s.id, shared ? zeros(s.axes) : last ?? from);\n const v = { kind: 'path', slot, from, last } as Voice;\n const patch = fnPatch<unknown, Out>(s.ms, (phase) => {\n v.last = s.at(phase);\n return { v: v.last };\n }, { writes: ['v'] });\n // Held at its end until the animator stops it, so a frame between the two reads the end.\n v.handle = slot.lane.mix.cue({ patch, subjects: [slot.key], loop: false, freeze: 'after', seek: s.atEnd ? s.ms : 0 });\n voices.set(s.id, v);\n return slot;\n },\n retarget(id, to) {\n const v = get(id);\n if (v.kind !== 'spring') throw new Error(`codec: subject ${id} is a ${v.kind}; ${v.kind}s are not retargeted`);\n const sp = v.spring!;\n if ((to == null) === (sp.to == null)) {\n if (!to) return;\n sp.to = to.slice();\n v.patch.to!(v.slot.key, sp.to);\n return;\n }\n // Held and free run different patches, so the voice is re-cued from where it is.\n const now = current(v);\n respring(v, { ...sp, to: to && to.slice(), from: now.value, velocity: now.velocity });\n },\n recue(id, from, velocity, to) {\n const v = get(id);\n if (v.kind !== 'spring') throw new Error(`codec: subject ${id} is a ${v.kind}; only springs are re-cued`);\n respring(v, { ...v.spring!, from: from.slice(), velocity: velocity.slice(), to: to && to.slice() });\n },\n push(id, velocity) {\n const v = get(id);\n if (v.spring && !v.patch.read(v.slot.key)) v.spring.velocity = velocity.slice();\n v.patch.push?.(v.slot.key, velocity);\n },\n rate(id, rate) {\n const v = get(id);\n rewinds.rate(v, rate);\n if (v.queued) v.queuedRate = rate;\n else v.handle.rate = rate;\n },\n rewound: (id) => { const v = voices.get(id); return v !== undefined && rewinds.has(v); },\n stop,\n has: (id) => voices.has(id),\n own(id) {\n const v = voices.get(id);\n if (!v) return undefined;\n if (v.kind === 'spring') return current(v);\n if (v.kind === 'path') {\n return { value: v.last ?? v.from, velocity: new Array<number>(v.from.length).fill(0) };\n }\n return (!v.queued && v.patch.read(v.slot.key))\n || { value: v.queued?.atEnd ? v.queued.to : v.from, velocity: zeros(v.from.length) };\n },\n voiceCount: () => voices.size,\n columns: (group) => lanes.columns(group),\n };\n}\n","import type { AnimatorEventHub } from '../observe';\nimport type { Codec } from './codec';\nimport type { ActiveAnimation } from './context';\nimport type { TargetBook } from './offsets';\nimport type { Table } from './table';\nimport type { Emitter } from '@weasel-js/registry';\n\n/** The animator's clock: where its frames stand, and how fast they run. */\nexport interface AnimatorClock {\n /** The timestamp the codec last advanced to. Null after the page was hidden and while nothing\n * runs, so neither gap is charged to the codec; a tween starting then seeds it from `now()`. */\n frameT: number | null;\n /** The virtual ms its frames have advanced it by: each animation's own clock is read off it. */\n elapsed: number;\n timeScale: number;\n paused: boolean;\n /** -1 while an outside clock runs it backward, turning every animation as a negative time\n * scale does; otherwise 1. */\n drive: 1 | -1;\n}\n\n/** What {@link createFrame} needs of the animator around it. */\nexport interface FrameHost {\n clock: AnimatorClock;\n table: Pick<\n Table,\n 'animations' | 'retire' | 'reportEnd' | 'finish' | 'drop' | 'infoOf' | 'ticks' | 'clockOf' | 'awake' | 'waiting'\n >;\n codec: Pick<Codec, 'frame'>;\n targets: Pick<TargetBook, 'settle' | 'show'>;\n hub: AnimatorEventHub;\n /** Supervisor frame callbacks due this frame, run once its ticks are done. */\n afterTicks: (() => void)[];\n /** Told once a frame, after its ticks and its targets are shown. */\n subscribers: Pick<Emitter, 'emit'>;\n /** Folds again the holds of each target a tick touched. */\n refold(): void;\n requestFrame(): void;\n /** True once the host has unmounted; logs the first time. */\n tripwire(): boolean;\n}\n\nexport interface Frame {\n /** Runs one frame at timestamp `t`. */\n tick(t: number): void;\n /** Whether a frame is between reading the codec and showing its targets. */\n framing(): boolean;\n /** Whether an animation's own tick is running. */\n ticking(): boolean;\n}\n\nexport function createFrame(host: FrameHost): Frame {\n const { clock, table, hub } = host;\n const { animations } = table;\n let framing = false;\n // Counted around each animation's tick, so a re-entrant call (`decay.onTick` to\n // `adapter.setPose` to `animateOnSetPose`) can tell it is inside one and write through\n // rather than schedule a tween that would fight the caller.\n let tickDepth = 0;\n\n /** Ticks the animations with something to do this frame, as the table stood when the frame\n * began, and answers which finished. */\n const tickEach = (): ActiveAnimation[] => {\n const finished: ActiveAnimation[] = [];\n const threw: [ActiveAnimation, unknown][] = [];\n // One waiting for its `due` checks for nothing meanwhile, the host's unmount included:\n // once that has happened every animation is ticked, so each sees it and leaves.\n const all = table.waiting > 0 && host.tripwire();\n // A snapshot: an animation registered by this frame's ticks first ticks on the\n // next, or a zero-duration loop would chain inside one frame and never leave it.\n for (const anim of all ? [...animations.values()] : table.ticks()) {\n if (animations.get(anim.id) !== anim) continue;\n const scale = clock.paused ? 0 : clock.timeScale * clock.drive * (anim.paused ? 0 : anim.timeScale);\n tickDepth += 1;\n try {\n if (anim.tick(table.clockOf(anim), scale)) finished.push(anim);\n } catch (error) {\n threw.push([anim, error]);\n } finally {\n tickDepth -= 1;\n }\n }\n for (const [anim, error] of threw) {\n console.error('useAnimator: animation tick threw; retiring it', error);\n if (animations.get(anim.id) !== anim) continue;\n // One that ended before throwing (from `onDone`) is finished, not canceled.\n if (anim.ended) table.drop(anim);\n else table.retire(anim.id, undefined, true);\n if (hub.watched) hub.emit({ type: 'error', animation: table.infoOf(anim), error });\n }\n return finished;\n };\n\n return {\n tick(t) {\n // `t` comes from the frame clock, and `frameT` is seeded from `now()` while the animator\n // is idle. The two share a time origin in a browser, where the rAF timestamp and\n // `performance.now()` are both page-relative, but not everywhere: jsdom starts them\n // ~600ms apart. Time never runs against the way it is driven, so such a sample is never real.\n const frameDt = clock.frameT == null ? 0 : Math.max(0, (t - clock.frameT) * clock.drive);\n clock.frameT = t;\n framing = true;\n // Backward is each animation's own rate: the clock under them only goes forward.\n const dt = frameDt * (clock.paused ? 0 : Math.abs(clock.timeScale));\n clock.elapsed += dt;\n host.codec.frame(dt);\n host.targets.settle();\n for (const anim of tickEach()) {\n // Gone already if its own tick canceled it; replaced if something\n // revived it under the same id since.\n if (animations.get(anim.id) === anim) table.finish(anim.id);\n }\n for (const cb of host.afterTicks.splice(0)) {\n try { cb(); } catch (err) { console.error('useAnimator: a staggered start threw', err); }\n }\n host.refold();\n framing = false;\n host.targets.show();\n // After the tick batch, so each subscriber sees the latest color overrides and poses.\n host.subscribers.emit();\n if (table.awake) {\n host.requestFrame();\n return;\n }\n // As when the page was hidden: the time asleep is charged to nothing.\n clock.frameT = null;\n },\n framing: () => framing,\n ticking: () => tickDepth > 0,\n };\n}\n","import type { ColorOverrideRegistry } from '../colorRegistry';\nimport { AnimatorEventHub } from '../observe';\nimport type { Behind, TargetState } from '../target';\nimport type { Animator } from '../types';\nimport { createAnimatorApi } from './animatorApi';\nimport { createCodec } from './codec';\nimport type { ActiveAnimation, AnimationContext } from './context';\nimport { createFrame, type AnimatorClock } from './frame';\nimport { createTargetBook } from './offsets';\nimport { createTable } from './table';\nimport { createEmitter } from '@weasel-js/registry';\n\n/** What {@link createAnimatorCore} needs of whoever hosts it: a clock and a frame loop. */\nexport interface CoreHost {\n /** Now, on the clock the frame loop's timestamps are on. */\n now(): number;\n requestFrame(): void;\n cancelFrame(): void;\n /** True once the host has unmounted; logs the first time. */\n tripwire(): boolean;\n colorOverrides: ColorOverrideRegistry;\n}\n\n/** An animator apart from React: its table, clock, and codec, driven by the host's frames. */\nexport interface AnimatorCore {\n api: Animator;\n /** Runs one frame at timestamp `t`. */\n tick(t: number): void;\n /** Runs one frame at time `t` of an outside clock, which may have gone back since the last:\n * the animations then play backward over the difference, as under a negative time scale.\n * `rate` is the clock's, which sets the direction when it has not moved. */\n follow(t: number, rate: number): void;\n /** Says the frame loop is back after time unseen, which is charged to no animation. */\n resumed(): void;\n}\n\nexport function createAnimatorCore(host: CoreHost): AnimatorCore {\n const clock: AnimatorClock = { frameT: null, elapsed: 0, timeScale: 1, paused: false, drive: 1 };\n const hub = new AnimatorEventHub();\n const codec = createCodec((on) => {\n // A move behind a row's holds runs in its table's lane for moves; the rest of a row's voices\n // run in its table's lane.\n if ('move' in on) return (on as Behind).move?.place;\n const { row } = on as TargetState;\n return row ? { group: row.table, tag: row.index } : undefined;\n });\n const afterTicks: (() => void)[] = [];\n const subscribers = createEmitter();\n let nextId = 1;\n let atEnd = false;\n const seedClock = (): void => { if (clock.frameT == null) clock.frameT = host.now(); };\n\n /** Targets whose holds a tick touched, folded again once the frame's ticks are done. */\n const touched = new Set<TargetState>();\n const refold = (s: TargetState): void => {\n if (s.holds) s.holds.store.refold(s.holds.row);\n // Between frames a table's `shown` is read apart for such a row; a frame's pass shows it.\n if (s.row && !frame.framing()) s.row.table.mark(s.row.index);\n };\n const refoldTouched = (): void => {\n for (const s of touched) refold(s);\n touched.clear();\n };\n const table = createTable({\n codec,\n hub,\n elapsed: () => clock.elapsed,\n direction: () => (clock.timeScale * clock.drive < 0 ? -1 : 1),\n seedClock,\n showNow: (target) => targets.showNow(target),\n resting: () => targets.resting,\n framing: () => frame.framing(),\n requestFrame: host.requestFrame,\n });\n const targets = createTargetBook({\n stop: (s) => {\n for (const a of [...table.on(s)]) table.retire(a.id);\n for (const part of [...s.parts]) part();\n },\n columns: (table) => codec.columns(table),\n });\n const frame = createFrame({\n clock, table, codec, targets, hub, afterTicks, subscribers, refold: refoldTouched,\n requestFrame: host.requestFrame, tripwire: host.tripwire,\n });\n\n const ctx: AnimationContext = {\n codec,\n targets,\n nextId: () => nextId++,\n atEnd: () => atEnd,\n starting: (end, start) => {\n const was = atEnd;\n atEnd = end;\n try { return start(); } finally { atEnd = was; }\n },\n seedClock,\n register: table.register,\n has: (id) => table.animations.has(id),\n defer: table.defer,\n reportEnd: table.reportEnd,\n finish: table.finish,\n touch: (target, at) => {\n if (frame.framing() && !at) { touched.add(target); return; }\n touched.delete(target);\n refold(target);\n if (!frame.framing()) host.requestFrame();\n },\n wake: () => { if (!frame.framing()) host.requestFrame(); },\n tripwire: host.tripwire,\n interrupt: (key, by) => table.cancelByKey(key, by as ActiveAnimation),\n velocityUnder: (key, target) => {\n let sum: number[] | null = null;\n for (const a of table.under(key)) {\n if (a.target !== target) continue;\n const v = a.velocity?.() ?? codec.own(a.id)?.velocity;\n if (v) sum = sum ? sum.map((x, i) => x + v[i]!) : v.slice();\n }\n return sum;\n },\n };\n\n const api = createAnimatorApi({\n ctx,\n table,\n clock,\n hub,\n ticking: frame.ticking,\n afterTicks: (cb) => { afterTicks.push(cb); },\n subscribers,\n colorOverrides: host.colorOverrides,\n halt: host.cancelFrame,\n });\n\n return {\n api,\n tick: frame.tick,\n follow(t, rate) {\n const moved = clock.frameT == null ? 0 : t - clock.frameT;\n const drive = moved < 0 || (moved === 0 && rate < 0) ? -1 : 1;\n if (drive !== clock.drive) table.turn(() => { clock.drive = drive; });\n frame.tick(t);\n },\n resumed() {\n // An hour spent hidden is not an hour the animation ran: dropping the last frame's\n // timestamp makes the resuming frame advance the clock by nothing.\n clock.frameT = null;\n },\n };\n}\n","import { useCallback, useEffect, useInsertionEffect, useMemo, useRef } from 'react';\nimport { isDev, useLatest, useVisibleRaf } from '@weasel-js/react';\nimport type { Clock } from '@weasel-js/clock';\nimport { ColorOverrideRegistry } from './colorRegistry';\nimport { createAnimatorCore, type AnimatorCore } from './engine/core';\nimport type { Animator } from './types';\nimport type { UseAnimatorOptions } from './useAnimatorOptions';\n\n/** Create the animator for a canvas. One rAF loop drives every animation it\n * owns, or the clock in `opts.clock` does, and everything still running is\n * canceled on unmount. */\nexport function useAnimator(opts: UseAnimatorOptions = {}): Animator {\n const optsRef = useLatest(opts);\n const colorOverrides = useRef<ColorOverrideRegistry>(new ColorOverrideRegistry());\n\n // The loop runs behind the visibility gate. The core is built in the memo\n // below, so the frame callback reaches it through a ref, published once the\n // memo's render commits. On a clock, the clock's frames advance it, and the\n // loop only shows a change made between them, at the time the clock stands.\n const coreRef = useRef<AnimatorCore | null>(null);\n const followingRef = useRef(false);\n const follow = useCallback((clock: Clock) => {\n followingRef.current = true;\n try { coreRef.current?.follow(clock.elapsed, clock.rate); } finally { followingRef.current = false; }\n }, []);\n const frameLoop = useVisibleRaf(\n useCallback((t: number) => {\n const handle = optsRef.current.clock;\n if (handle) follow(handle.clock);\n else coreRef.current?.tick(t);\n }, [follow, optsRef]),\n {\n requestFrame: opts.requestFrame,\n cancelFrame: opts.cancelFrame,\n onResume: () => { if (!optsRef.current.clock) coreRef.current?.resumed(); },\n },\n );\n const frameLoopRef = useLatest(frameLoop);\n\n // Tripwire: dev-only flag that every tween/spring/decay's tick reads to\n // detect \"animation fired after the host component unmounted.\" This is a\n // symptom of cleanup not running (regression) — typically because someone\n // refactored useAnimator and forgot to wire the unmount effect. The flag\n // flips false on cleanup; ticks see it and log a one-time error so the\n // bug is loud rather than just visually-doubled animation.\n const mountedRef = useRef(true);\n const trippedRef = useRef(false);\n\n const core = useMemo(() => {\n const tripwire = (): boolean => {\n if (mountedRef.current) return false;\n if (!trippedRef.current) {\n trippedRef.current = true;\n if (isDev()) {\n console.error(\n 'weasel useAnimator: animation tick fired after the host component unmounted. ' +\n 'This usually means cleanup logic was bypassed — check for refactors that ' +\n 'removed the unmount effect or replaced cancelAll with a custom path.',\n );\n }\n }\n return true;\n };\n // Default to performance.now() so the time origin matches the\n // requestAnimationFrame callback's DOMHighResTimeStamp argument.\n // Using Date.now() here would mix epoch-millis with page-relative-millis,\n // producing huge negative `elapsed` values that clamp tween `t` to 0\n // forever (never reaching completion).\n const now = (): number => {\n const handle = optsRef.current.clock;\n if (handle) return handle.clock.elapsed;\n return (optsRef.current.now ?? (typeof performance !== 'undefined' ? performance.now.bind(performance) : Date.now))();\n };\n return createAnimatorCore({\n now,\n // On a clock, a frame asked for from inside one comes with the clock's next move: one shown\n // at the same time would only ask again.\n requestFrame: () => { if (!followingRef.current) frameLoopRef.current.request(); },\n cancelFrame: () => frameLoopRef.current.cancel(),\n tripwire,\n colorOverrides: colorOverrides.current,\n });\n }, [frameLoopRef, optsRef]);\n\n useInsertionEffect(() => {\n coreRef.current = core;\n }, [core]);\n\n // StrictMode-safe cleanup: when the component unmounts (including the\n // dev-mode double-mount that StrictMode performs), cancel every running\n // animation and stop the RAF loop. Without this, the FIRST mount's\n // animator keeps ticking with stale callbacks pointing at the unmounted\n // adapter, while the SECOND mount creates its own animator on top —\n // visible to the user as every animation playing twice.\n const handle = opts.clock;\n useEffect(() => {\n if (!handle) return;\n // The last frame's time may stand on another clock's.\n core.resumed();\n return handle.onFrame(() => { if (core.api.isActive()) follow(handle.clock); });\n }, [core, handle, follow]);\n\n const { api } = core;\n useEffect(() => {\n const overrides = colorOverrides.current;\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n api.cancelAll();\n overrides.clearAll();\n };\n }, [api]);\n\n return api;\n}\n"]}
1
+ {"version":3,"sources":["../src/observe.ts","../src/loop.ts","../src/stagger.ts","../src/supervisor.ts","../src/engine/decay.ts","../src/engine/holds.ts","../src/engine/holdAnimation.ts","../src/engine/holdRows.ts","../src/engine/integrator.ts","../src/engine/physicsAnimation.ts","../src/engine/springRest.ts","../src/engine/springVoices.ts","../src/engine/offsetPhysics.ts","../src/engine/offsetTween.ts","../src/engine/completions.ts","../src/engine/wakes.ts","../src/engine/schedule.ts","../src/engine/roster.ts","../src/engine/table.ts","../src/engine/tweenAnimation.ts","../src/engine/animatorApi.ts","../src/engine/lanes.ts","../src/engine/rewinds.ts","../src/engine/codec.ts","../src/engine/frame.ts","../src/engine/core.ts","../src/useAnimator.ts"],"names":["zeros","own","resolveEasing","easeOut","springPatch","tweenPatch","patch","fnPatch","createEmitter","table","sum","handle"],"mappings":"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","file":"react.js","sourcesContent":["import { createEmitter } from '@weasel-js/registry';\nimport type { AnimatorEvent, AnimatorListener } from './types';\n\n/** The listener set behind `animator.watch`. Every emit site checks `watched`\n * first and builds its event only then, so an unwatched animator allocates\n * nothing for observability. */\nexport class AnimatorEventHub {\n private readonly events = createEmitter<[AnimatorEvent]>();\n\n get watched(): boolean {\n return this.events.size > 0;\n }\n\n add(listener: AnimatorListener): () => void {\n return this.events.subscribe(listener);\n }\n\n emit(event: AnimatorEvent): void {\n this.events.emit(event);\n }\n}\n","import type { SupervisorFactory } from './supervisor';\nimport type {\n AnimationHandle,\n Animator,\n LoopFactory,\n LoopOptions,\n TweenLoopOptions,\n} from './types';\n\n/**\n * Loop primitive. Repeatedly invokes `factory(i, next)` to produce a child\n * animation. The factory is responsible for wiring its returned handle's\n * `onDone` to call `next` — that's how the loop advances. Pause/resume/\n * setTimeScale reach the current child and each later one; cancel stops the\n * in-flight child and prevents future iterations. Played backward, it starts each pass before\n * the one in flight at that pass's end, and ends at the start of pass 0.\n *\n * The loop is registered with the animator under a supervisor entry, so\n * `animator.cancel(handle)`, `animator.cancelKey(key)`, and\n * `animator.isActive(key)` all work for it.\n */\nexport function createLoop(\n createSupervisor: SupervisorFactory,\n factory: LoopFactory,\n opts: LoopOptions = {},\n): AnimationHandle {\n const max = opts.count ?? Infinity;\n let canceled = false;\n let current: AnimationHandle | null = null;\n\n const supervisor = createSupervisor({ kind: 'loop', cancelKey: opts.cancelKey, label: opts.label });\n supervisor.setOnCancel(() => {\n // External cancel path (animator.cancel/cancelKey or handle.cancel).\n // Mark canceled so `next` short-circuits; tear down the current child.\n canceled = true;\n current?.cancel();\n current = null;\n });\n\n const applyRate = (paused: boolean, timeScale: number): void => {\n if (!current) return;\n if (paused) current.pause();\n else current.resume();\n current.setTimeScale(timeScale);\n };\n supervisor.setOnRate(applyRate);\n\n // Started at its end inside a loop run back, it starts its last pass at that pass's end.\n const fromEnd = supervisor.atEnd && max < Infinity;\n /** The pass in flight. */\n let pass = fromEnd ? max : -1;\n let first = true;\n\n const next = (): void => {\n if (canceled) return;\n // Played backward, it starts each pass before at its end, and ends at the start of pass 0.\n const back = first ? fromEnd : supervisor.rate() < 0;\n first = false;\n const i = back ? pass - 1 : pass + 1;\n if (i < 0 || i >= max) {\n current = null;\n // Natural completion: deregister the supervisor so isActive() goes\n // false. `canceled` makes a late `next` a no-op.\n canceled = true;\n supervisor.finish();\n opts.onDone?.();\n return;\n }\n pass = i;\n current = supervisor.starting(back, () => factory(i, next));\n if (supervisor.isPaused() || supervisor.timeScale() !== 1) {\n applyRate(supervisor.isPaused(), supervisor.timeScale());\n }\n };\n\n next();\n\n return {\n id: supervisor.id,\n cancel: () => supervisor.cancel(),\n pause: () => supervisor.pause(),\n resume: () => supervisor.resume(),\n setTimeScale: (s) => supervisor.setTimeScale(s),\n timeScale: () => supervisor.timeScale(),\n isPaused: () => supervisor.isPaused(),\n };\n}\n\n/**\n * Sugar over `createLoop` for the common case of looping a tween between two\n * values. `direction` controls per-iteration from/to:\n * - `restart` (default): from→to every iteration\n * - `reverse`: to→from every iteration\n * - `alternate`: even iterations from→to, odd iterations to→from\n */\nexport function createTweenLoop<T>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n opts: TweenLoopOptions<T>,\n): AnimationHandle {\n const direction = opts.direction ?? 'restart';\n return createLoop(\n (o) => createSupervisor({ ...o, kind: 'tweenLoop' }),\n (i, next) => {\n const flipped = direction === 'reverse' || (direction === 'alternate' && i % 2 === 1);\n const from = flipped ? opts.to : opts.from;\n const to = flipped ? opts.from : opts.to;\n return animator.tween({\n from,\n to,\n ms: opts.ms,\n easing: opts.easing,\n interpolate: opts.interpolate,\n onTick: opts.onTick,\n onDone: next,\n });\n },\n { count: opts.count, onDone: opts.onDone, cancelKey: opts.cancelKey, label: opts.label },\n );\n}\n","import { isTarget, type Target } from './target';\nimport type { Supervisor, SupervisorFactory, WatchCompletion } from './supervisor';\nimport type {\n AnimationHandle,\n Animator,\n StaggerBuilder,\n StaggerDelay,\n StaggerFactory,\n StaggerOptions,\n SpringOptions,\n StaggerPerItem,\n StaggerSpringOptions,\n StaggerTargetSpringOptions,\n StaggerTargetTweenOptions,\n StaggerTweenOptions,\n TweenOptions,\n} from './types';\n\n/** An item still waiting: `fire` starts it once the stagger's own virtual\n * time reaches `at`. */\ninterface PendingEntry {\n at: number;\n fire: () => void;\n}\n\n/**\n * Composite handle returned by `createStagger`. Owns a list of in-flight\n * child handles and a list of items still waiting; cancel cancels both.\n * Pause/resume/setTimeScale propagate to in-flight children. The waiting\n * items are counted in the supervisor entry's virtual time, so whatever\n * holds or scales that entry holds or scales the delays with it.\n *\n * Registered with the animator via a supervisor so animator.cancel /\n * cancelKey / isActive all work for it.\n */\nclass CompositeHandle implements AnimationHandle {\n readonly id: number;\n private canceled = false;\n private paused_ = false;\n private timeScale_ = 1;\n private children: AnimationHandle[] = [];\n private pending: PendingEntry[] = [];\n private outstanding: number;\n /** Children started and not yet done. */\n private running = 0;\n private finished = false;\n\n constructor(\n private supervisor: Supervisor,\n totalItems: number,\n ) {\n this.id = supervisor.id;\n this.outstanding = totalItems;\n supervisor.setOnCancel(() => this.handleSupervisorCancel());\n supervisor.setOnRate((paused, timeScale) => {\n if (paused) this.applyPause();\n else this.applyResume();\n this.applyTimeScale(timeScale);\n });\n supervisor.setOnFrame((virtualNow) => this.fireDue(virtualNow));\n }\n\n /** Invoked when the supervisor is canceled externally (animator.cancel /\n * cancelKey) OR via this composite's own `cancel`. */\n private handleSupervisorCancel(): void {\n if (this.canceled) return;\n this.canceled = true;\n this.pending = [];\n // Snapshot children first: child.cancel() may synchronously invoke our\n // own noteChildDone path via the animator's completion listener, which\n // would mutate this.children mid-iteration.\n const kids = this.children.slice();\n this.children = [];\n for (const c of kids) c.cancel();\n }\n\n noteChildDone(): void {\n if (this.canceled || this.finished) return;\n this.outstanding -= 1;\n this.running -= 1;\n if (this.outstanding <= 0) this.finish();\n else this.rewound();\n }\n\n private finish(): void {\n this.finished = true;\n this.children = [];\n this.pending = [];\n this.supervisor.finish();\n }\n\n /** Played backward, it ends once every item running has run back to its start: the items\n * still waiting are not reached going that way. */\n private rewound(): void {\n if (this.running <= 0 && this.supervisor.rate() < 0) this.finish();\n }\n\n addChild(h: AnimationHandle): void {\n if (this.canceled) {\n h.cancel();\n return;\n }\n this.running += 1;\n this.children.push(h);\n if (this.paused_) h.pause();\n if (this.timeScale_ !== 1) h.setTimeScale(this.timeScale_);\n }\n\n schedule(delayMs: number, fire: () => void): void {\n if (this.canceled) return;\n this.pending.push({ at: delayMs, fire });\n }\n\n private fireDue(virtualNow: number): void {\n if (this.canceled || this.finished) return;\n this.rewound();\n if (this.finished || this.pending.length === 0) return;\n const due = this.pending.filter((p) => p.at <= virtualNow).sort((a, b) => a.at - b.at);\n this.pending = this.pending.filter((p) => p.at > virtualNow);\n for (const p of due) {\n if (this.canceled) return;\n p.fire();\n }\n }\n\n cancel(): void {\n // Route through the supervisor so the animator's id table is kept in\n // sync. The supervisor's onCancel forwards back to\n // handleSupervisorCancel which actually tears down children + waiting items.\n this.supervisor.cancel();\n }\n\n pause(): void {\n this.supervisor.pause();\n }\n\n resume(): void {\n this.supervisor.resume();\n }\n\n setTimeScale(s: number): void {\n this.supervisor.setTimeScale(s);\n }\n\n private applyPause(): void {\n if (this.paused_) return;\n this.paused_ = true;\n for (const c of this.children) c.pause();\n }\n\n private applyResume(): void {\n if (!this.paused_) return;\n this.paused_ = false;\n for (const c of this.children) c.resume();\n }\n\n private applyTimeScale(s: number): void {\n if (s === this.timeScale_) return;\n this.timeScale_ = s;\n for (const c of this.children) c.setTimeScale(s);\n }\n\n timeScale(): number {\n return this.timeScale_;\n }\n\n isPaused(): boolean {\n return this.paused_;\n }\n}\n\nfunction delayFor(delay: StaggerDelay, i: number): number {\n return typeof delay === 'function' ? delay(i) : delay * i;\n}\n\n/**\n * Stagger primitive. With `factory`, returns the composite handle directly.\n * Without `factory`, returns a `StaggerBuilder` whose `.each` runs the\n * stagger with a factory.\n */\nexport function createStagger<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n factory: StaggerFactory<TItem>,\n opts?: StaggerOptions,\n): AnimationHandle;\nexport function createStagger<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n): StaggerBuilder<TItem>;\nexport function createStagger<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n factory?: StaggerFactory<TItem>,\n opts?: StaggerOptions,\n): AnimationHandle | StaggerBuilder<TItem> {\n if (factory) return runStagger(createSupervisor, watchCompletion, items, delay, factory, opts);\n return makeBuilder(animator, createSupervisor, watchCompletion, items, delay);\n}\n\nfunction runStagger<TItem>(\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n factory: StaggerFactory<TItem>,\n opts?: StaggerOptions,\n): AnimationHandle {\n const supervisor = createSupervisor({ kind: 'stagger', cancelKey: opts?.cancelKey, label: opts?.label });\n const composite = new CompositeHandle(supervisor, items.length);\n if (items.length === 0) {\n supervisor.finish();\n return composite;\n }\n // Its items start at their own starts whenever the stagger does.\n supervisor.starting(false, () => items.forEach((item, i) => {\n const ms = delayFor(delay, i);\n const fire = (): void => {\n const child = factory(item, i);\n // Hook into the child's deregistration (natural OR cancel). If the\n // composite is already canceled, the watcher fires immediately on\n // cancel and the noteChildDone branch is a no-op (canceled guard).\n watchCompletion(child.id, () => composite.noteChildDone());\n composite.addChild(child);\n };\n if (ms <= 0) fire();\n else composite.schedule(ms, fire);\n }));\n return composite;\n}\n\nfunction resolvePerItem<T, TItem>(\n v: StaggerPerItem<T, TItem>,\n item: TItem,\n i: number,\n): T {\n return typeof v === 'function'\n ? (v as (item: TItem, index: number) => T)(item, i)\n : v;\n}\n\n/** What `.tween` and `.spring` read of their options, whichever form those take. */\ninterface PerItemOptions<TItem> extends StaggerOptions {\n target?: StaggerPerItem<Target<unknown>, TItem>;\n from?: StaggerPerItem<unknown, TItem>;\n to: StaggerPerItem<unknown, TItem>;\n onTick?: (value: unknown, item: TItem, index: number) => void;\n onDone?: (item: TItem, index: number) => void;\n}\n\n/** One item's share of a builder method's options: its target, or null where its animation\n * hands values to `onTick`, and the options every form of the animation takes. */\nfunction perItem<TItem>(opts: PerItemOptions<TItem>, item: TItem, i: number) {\n const target = opts.target !== undefined ? resolvePerItem(opts.target, item, i) : isTarget(item) ? item : null;\n return {\n target,\n from: opts.from === undefined ? undefined : resolvePerItem(opts.from, item, i),\n to: resolvePerItem(opts.to, item, i),\n onTick: opts.onTick && ((v: unknown) => opts.onTick!(v, item, i)),\n onDone: opts.onDone && (() => opts.onDone!(item, i)),\n };\n}\n\nfunction makeBuilder<TItem>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n watchCompletion: WatchCompletion,\n items: readonly TItem[],\n delay: StaggerDelay,\n): StaggerBuilder<TItem> {\n /** Runs `start` per item, once every item has a target to move or an `onTick` to tell. */\n const run = <O extends PerItemOptions<TItem>>(\n method: string,\n opts: O,\n start: (own: ReturnType<typeof perItem<TItem>>, item: TItem, i: number) => AnimationHandle,\n ): AnimationHandle => {\n if (opts.target === undefined && !opts.onTick && !items.every(isTarget)) {\n throw new Error(`animator.stagger: \\`.${method}\\` needs a \\`target\\`, items that are targets, or an \\`onTick\\``);\n }\n return runStagger(createSupervisor, watchCompletion, items, delay, (item, i) => start(perItem(opts, item, i), item, i), opts);\n };\n return {\n each: (factory, opts) =>\n runStagger(createSupervisor, watchCompletion, items, delay, factory, opts),\n tween: ((opts: StaggerTweenOptions<unknown, TItem> | StaggerTargetTweenOptions<unknown, TItem>) =>\n run('tween', opts, ({ target, ...own }, item, i) => {\n const shared = {\n ...own, ms: resolvePerItem(opts.ms, item, i),\n easing: opts.easing, interpolate: opts.interpolate, interpolator: opts.interpolator,\n };\n return target ? animator.tween({ ...shared, target }) : animator.tween(shared as TweenOptions<unknown>);\n })) as StaggerBuilder<TItem>['tween'],\n spring: ((opts: StaggerSpringOptions<unknown, TItem> | StaggerTargetSpringOptions<unknown, TItem>) =>\n run('spring', opts, ({ target, ...own }, item, i) => {\n const shared = {\n ...own, velocity: opts.velocity === undefined ? undefined : resolvePerItem(opts.velocity, item, i),\n preset: opts.preset, stiffness: opts.stiffness, damping: opts.damping, mass: opts.mass,\n restThreshold: opts.restThreshold,\n };\n if (target) return animator.spring({ ...shared, target });\n const { interpolate, add, subtract, scale, magnitude } = opts as StaggerSpringOptions<unknown, TItem>;\n return animator.spring({ ...shared, interpolate, add, subtract, scale, magnitude } as SpringOptions<unknown>);\n })) as StaggerBuilder<TItem>['spring'],\n };\n}\n","import type { AnimationSeed } from './engine/context';\nimport type { AnimationHandle } from './types';\n\n/**\n * Lets a composite (loop / stagger) sit in the animator's id table without\n * being a real animation: its tick never completes, so only `cancel()` or\n * `finish()` removes it. The owning composite installs `setOnCancel` to tear\n * down its children when an external cancel fires.\n *\n * Not part of the public Animator surface.\n */\nexport interface Supervisor {\n id: number;\n cancel(): void;\n pause(): void;\n resume(): void;\n setTimeScale(s: number): void;\n timeScale(): number;\n isPaused(): boolean;\n /** The rate its clock runs at, the animator's own included: below 0 while it plays backward. */\n rate(): number;\n /** Whether it was started at its end, to play backward. */\n readonly atEnd: boolean;\n /** Runs `start`, which starts the composite's children: at their ends, given `end`. */\n starting<T>(end: boolean, start: () => T): T;\n setOnCancel(cb: () => void): void;\n /** `cb` hears every pause, resume, and time scale set on the entry, by its\n * handle or by `cancelKey`, so the composite can pass it to its children. */\n setOnRate(cb: (paused: boolean, timeScale: number) => void): void;\n /** `cb` hears the entry's virtual time once a frame, after every animation\n * has ticked: what it starts is started outside the tick, as a caller's\n * own code would start it. */\n setOnFrame(cb: (virtualNow: number) => void): void;\n /** Retire the entry because the composite completed on its own. Unlike\n * `cancel`, skips the `setOnCancel` callback and reports an `end`. */\n finish(): void;\n cancelKey?: string;\n}\n\n/** What names a supervisor's entry in the animator's table and its events. */\nexport interface SupervisorOptions {\n kind: 'loop' | 'tweenLoop' | 'stagger' | 'keepAlive';\n cancelKey?: string;\n label?: string;\n}\n\nexport type SupervisorFactory = (opts: SupervisorOptions) => Supervisor;\n\n/** What {@link supervisors} needs of the animator. */\nexport interface SupervisorHost {\n nextId(): number;\n /** Whether an animation starting now starts at its end. */\n atEnd(): boolean;\n /** Runs `start`, starting what it starts at its end where `end` says. */\n starting<T>(end: boolean, start: () => T): T;\n register(seed: AnimationSeed): AnimationHandle;\n /** Takes an entry off the table as finished. */\n finish(id: number): void;\n /** Runs `cb` once this frame's ticks are done. */\n afterTicks(cb: () => void): void;\n /** The rate entry `id`'s clock runs at; 0 for one that has left. */\n rateOf(id: number): number;\n}\n\n/** Makes the animator's supervisor factory: each is a registered animation whose tick never\n * finishes, so loop and stagger sit in the id table and answer `cancel`, `cancelKey` and\n * `isActive`. */\nexport function supervisors(host: SupervisorHost): SupervisorFactory {\n return ({ kind, cancelKey, label }) => {\n const id = host.nextId();\n const atEnd = host.atEnd();\n let onCancelCb: (() => void) | undefined;\n let onRateCb: ((paused: boolean, timeScale: number) => void) | undefined;\n let onFrameCb: ((virtualNow: number) => void) | undefined;\n const base = host.register({\n id,\n kind,\n cancelKey,\n label,\n tick: (virtualNow) => {\n if (onFrameCb) host.afterTicks(() => onFrameCb?.(virtualNow));\n return false;\n },\n onCancel: () => onCancelCb?.(),\n onRate: (paused, timeScale) => onRateCb?.(paused, timeScale),\n });\n return {\n id: base.id,\n cancel: base.cancel,\n pause: base.pause,\n resume: base.resume,\n setTimeScale: base.setTimeScale,\n timeScale: base.timeScale,\n isPaused: base.isPaused,\n rate: () => host.rateOf(id),\n atEnd,\n starting: host.starting,\n setOnCancel: (cb) => { onCancelCb = cb; },\n setOnRate: (cb) => { onRateCb = cb; },\n setOnFrame: (cb) => { onFrameCb = cb; },\n finish: () => host.finish(id),\n cancelKey,\n };\n };\n}\n\n/**\n * Subscribe to \"this animation id finished or was canceled and is no longer\n * in the registry.\" Returns an unsubscribe. Fires at most once, and at once\n * for an id that has already left. Fires for both natural completion and\n * external cancel.\n */\nexport type WatchCompletion = (id: number, cb: () => void) => () => void;\n","import type { DecayOptions, PhysicsOptions, TargetDecayOptions, TargetPhysicsOptions } from '../types';\n\n/** A decay as the coast `physics` runs. Per-second friction v(t) = v0 * friction^t is\n * m*dv/dt = -c*v with c = -ln(friction), m = 1, k = 0. */\nexport function decayAsPhysics<T>(o: DecayOptions<T> | TargetDecayOptions<T>): PhysicsOptions<T> | TargetPhysicsOptions<T> {\n const shared = {\n from: o.from, to: null, velocity: o.velocity,\n stiffness: 0, damping: -Math.log(o.friction ?? 0.95), mass: 1, restThreshold: o.threshold ?? 0.5,\n onTick: o.onTick, onDone: o.onDone, cancelKey: o.cancelKey, label: o.label,\n };\n if (o.target) return { ...shared, target: o.target, interrupt: o.interrupt };\n return {\n ...shared,\n from: o.from,\n onTick: o.onTick,\n add: o.add,\n // DecayOptions doesn't carry subtract; derive from add+scale.\n subtract: (a, b) => o.add(a, o.scale(b, -1)),\n scale: o.scale,\n magnitude: o.magnitude,\n };\n}\n","import { wrapAngle } from '@weasel-js/geom';\nimport { axisIndexes } from '../axisNames';\nimport { committedInto, type TargetState } from '../target';\nimport type { AnimationContext } from './context';\nimport { createHoldStore, type HoldLayer, type HoldSources, type HoldStore } from './holdStore';\nimport { absorb, axesFor, setBeside } from './offsets';\n\n/** What {@link openHold} takes. */\nexport interface HoldSource<T> {\n target: TargetState<T>;\n /** The value to show in place of the committed one, read whenever the target is. */\n value(): T;\n /** Its share among the target's holds, read as `value` is. */\n weight(): number;\n /** The axes it holds, by index or by the target's names for them. Default: all of them. */\n axes?: readonly (number | string)[];\n /** True where `value` and `weight` answer the same until `touch` says otherwise. A target\n * whose holds are all so is read again only when touched, or when its committed value moves. */\n fixed?: boolean;\n}\n\n/** A hold on its target, apart from any row on the animator's table. */\nexport interface OpenHold {\n /** Says `value` or `weight` changed outside a frame's own reading of them. */\n touch(): void;\n /** Takes the hold off the target. With `commit`, the committed value moves so that what the\n * target shows stays where it was. */\n leave(commit: boolean): void;\n}\n\n/** Where `s`'s holds are folded: its table's store, for a row of one, or a store of its own. */\nexport function holdsOf(s: TargetState): { readonly store: HoldStore; readonly row: number } {\n if (s.holds) return s.holds;\n if (s.row) return (s.holds = { store: s.row.table.holds(), row: s.row.index });\n const store = createHoldStore(s.axes.count, 1, (_, out, at) => committedInto(s, out, at), s.axes.angles);\n return (s.holds = { store, row: 0 });\n}\n\n/** Where the holds on `s` are folded, what they show against `committed`, with and without\n * the hold `skip`. */\nfunction both(s: TargetState, skip: HoldLayer, committed: readonly number[]) {\n const { store, row } = s.holds!;\n const n = committed.length;\n const all = { delta: new Array<number>(n), total: new Array<number>(n) };\n const rest = { delta: new Array<number>(n), total: new Array<number>(n) };\n store.fold(row, committed, 0, null, all.delta, all.total);\n store.fold(row, committed, 0, skip, rest.delta, rest.total);\n return { all, rest, own: store.valueOf(skip, row) };\n}\n\n/** How far the committed value moves as `leaving` goes, so the target shows what it did. */\nfunction settle(\n s: TargetState, f: ReturnType<typeof both>, covers: Uint8Array | null, committed: readonly number[],\n): number[] {\n const { all, rest, own } = f;\n const angles = s.axes.angles ?? [];\n return committed.map((c, a) => {\n if (covers && !covers[a]) return 0;\n // Holds that cover the committed value outright leave it nothing to show: it takes this one's.\n if (rest.total[a]! >= 1 - 1e-9) return angles.includes(a) ? wrapAngle(own[a]! - c) : own[a]! - c;\n return (all.delta[a]! - rest.delta[a]!) / (1 - rest.total[a]!);\n });\n}\n\n/**\n * Keeps what shows of each move behind `s`'s holds as their weights go from `before` to\n * `after` on a release that commits: a hold that covered a share of a move takes that share\n * with it, so the move goes on as far as it was showing and no further.\n */\nfunction dim(s: TargetState, before: readonly number[], after: readonly number[]): void {\n for (const b of s.behind) {\n for (let a = 0; a < before.length; a++) {\n const open = 1 - Math.min(after[a]!, 1);\n const was = 1 - Math.min(before[a]!, 1);\n if (open < 1e-9 || open === was) continue;\n b.kept ??= new Array<number>(before.length).fill(1);\n b.kept[a] = (b.kept[a]! * was) / open;\n s.dimmed = true;\n }\n if (b.kept) b.move?.kept(b.kept);\n }\n}\n\nexport function coverOf(wanted: readonly (number | string)[] | undefined, axes: TargetState['axes']): Uint8Array | null {\n if (!wanted) return null;\n const covers = new Uint8Array(axes.count);\n for (const a of axisIndexes(axes, wanted)) covers[a] = 1;\n return covers;\n}\n\n/** Puts a hold on `s` in `layer` of the store its holds fold in. The caller folds it in. */\nexport function enterHold(\n ctx: AnimationContext, s: TargetState, layer: (store: HoldStore, row: number) => HoldLayer, sources: HoldSources,\n): { store: HoldStore; row: number; layer: HoldLayer } {\n ctx.targets.attach(s);\n s.held += 1;\n const { store, row } = holdsOf(s);\n const l = layer(store, row);\n store.join(l, row, sources);\n ctx.targets.holding(store, 1);\n return { store, row, layer: l };\n}\n\n/** Takes `s`'s hold in `layer` off it. With `commit`, the committed value moves so that what\n * `s` shows stays where it was. The caller shows what is left. */\nexport function leaveHold(ctx: AnimationContext, s: TargetState, layer: HoldLayer, covers: Uint8Array | null, commit: boolean): void {\n const { store, row } = s.holds!;\n if (commit && !s.discard) {\n store.refold(row);\n const committed = s.axes.to(s.get());\n const f = both(s, layer, committed);\n absorb(s, settle(s, f, covers, committed));\n dim(s, f.all.total, f.rest.total);\n }\n store.part(layer, row);\n ctx.targets.holding(store, -1);\n s.held -= 1;\n if (s.held === 0) {\n s.holds = null;\n // Nothing stands in front of the committed value now, so it takes what waited beside it.\n const beside = s.beside;\n if (beside) {\n setBeside(s, null);\n absorb(s, beside);\n }\n }\n ctx.targets.detach(s);\n}\n\n/** Holds a value on a target: it shows `value` where the committed value would show. */\nexport function openHold<T>(ctx: AnimationContext, o: HoldSource<T>): OpenHold {\n const s = o.target;\n const ax = s.axes;\n const state = s as unknown as TargetState;\n axesFor(ax, o.value(), 'value');\n let gone = false;\n const covers = coverOf(o.axes, ax);\n const { layer } = enterHold(ctx, state, (store, row) => store.free(row), {\n value: ax.write\n ? (out, at) => ax.write!(o.value(), out, at)\n : (out, at) => out.set(ax.to(o.value()), at),\n weight: o.weight,\n covers,\n fixed: o.fixed === true,\n });\n ctx.touch(state, true);\n\n return {\n touch: () => { if (!gone) ctx.touch(state); },\n leave(commit) {\n if (gone) return;\n gone = true;\n leaveHold(ctx, state, layer, covers, commit);\n ctx.touch(state, true);\n },\n };\n}\n","import { stateOf } from '../target';\nimport type { HoldHandle, HoldOptions } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport { openHold } from './holds';\n\nconst isFn = (x: unknown): x is () => unknown => typeof x === 'function';\n\n/** A hold as a row on the animator's table: it stays until canceled or released. */\nexport function startHold<T>(ctx: AnimationContext, o: HoldOptions<T>): HoldHandle {\n const target = stateOf(o.target);\n const id = ctx.nextId();\n const { value, weight = 1 } = o;\n // A hold of plain values changes only when told to, so it asks for no frames of its own.\n const fixed = !isFn(value) && !isFn(weight);\n const seed = {\n id, kind: 'hold', cancelKey: o.cancelKey, label: o.label, target,\n keepExisting: o.interrupt === false,\n idle: fixed,\n // It leaves when released or canceled, and has nothing to do on a frame.\n due: Infinity,\n } as AnimationSeed;\n // Ahead of opening: an interrupted hold commits what it showed, which this one then stands in for.\n if (o.cancelKey != null && o.interrupt !== false) ctx.interrupt(o.cancelKey, seed);\n const held = openHold(ctx, {\n target,\n value: isFn(value) ? (value as () => T) : () => value,\n weight: isFn(weight) ? weight : () => weight,\n axes: o.axes,\n fixed,\n });\n seed.onCancel = () => held.leave(true);\n seed.tick = () => {\n if (!ctx.tripwire()) return false;\n held.leave(true);\n return true;\n };\n const base = ctx.register(seed);\n return {\n ...base,\n touch: held.touch,\n release(r) {\n if (!ctx.has(id)) return;\n held.leave(r?.commit !== false);\n ctx.finish(id);\n },\n };\n}\n","import { stateOf, type TargetState } from '../target';\nimport { rowTableOf } from '../targetTable';\nimport type { HoldRowsOptions, RowsHoldHandle } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport type { HoldLayer } from './holdStore';\nimport { coverOf, enterHold, leaveHold } from './holds';\n\n/** Holds rows of a table in a layer of the table's holds whose values and weights the caller\n * writes: one row on the animator's table for all of them. */\nexport function startHoldRows(ctx: AnimationContext, o: HoldRowsOptions): RowsHoldHandle {\n const { table } = o;\n const rows = rowTableOf(table);\n const n = table.axes;\n const store = rows.holds();\n const id = ctx.nextId();\n const seed = {\n id, kind: 'hold', cancelKey: o.cancelKey, label: o.label, keepExisting: o.interrupt === false,\n idle: true, due: Infinity,\n } as AnimationSeed;\n if (o.cancelKey != null && o.interrupt !== false) ctx.interrupt(o.cancelKey, seed);\n\n let layer!: HoldLayer;\n /** The rows it holds, each with what lets it go. */\n const held = new Map<number, { s: TargetState; part: () => void }>();\n const weight = o.weight ?? 1;\n let covers: Uint8Array | null = null;\n const letGo = (row: number, commit: boolean): void => {\n const h = held.get(row);\n if (!h) return;\n held.delete(row);\n h.s.parts.delete(h.part);\n leaveHold(ctx, h.s, layer, covers, commit);\n // Read apart once, as the pass no longer shows it.\n rows.mark(row);\n };\n for (const row of o.rows ? Array.from(o.rows) : rows.rows()) {\n if (held.has(row)) continue;\n const s = stateOf(table.target(row)) as TargetState;\n covers ??= coverOf(o.axes, s.axes);\n enterHold(ctx, s, (st) => (layer ??= st.layer()), { covers, fixed: true });\n layer.values.set(table.committed.subarray(row * n, (row + 1) * n), row * n);\n layer.weights[row] = weight;\n const part = (): void => letGo(row, true);\n s.parts.add(part);\n held.set(row, { s, part });\n }\n layer ??= store.layer();\n\n const touch = (): void => {\n for (const row of held.keys()) store.refold(row);\n rows.refill();\n ctx.wake();\n };\n const leave = (commit: boolean): void => {\n for (const row of [...held.keys()]) letGo(row, commit);\n store.drop(layer);\n rows.refill();\n ctx.wake();\n };\n touch();\n seed.onCancel = () => leave(true);\n seed.tick = () => {\n if (!ctx.tripwire()) return false;\n leave(true);\n return true;\n };\n const base = ctx.register(seed);\n return {\n ...base,\n get values() { return layer.values; },\n get weights() { return layer.weights; },\n touch,\n release(r) {\n if (!ctx.has(id)) return;\n leave(r?.commit !== false);\n ctx.finish(id);\n },\n };\n}\n","export interface VectorOps<T> {\n add(a: T, b: T): T;\n subtract(a: T, b: T): T;\n scale(v: T, k: number): T;\n}\n\n/** One semi-implicit Euler step of a damped spring toward `target`, or of pure damping when\n * `target` is null. Returns the new value and velocity. */\nexport function stepSpring<T>(\n ops: VectorOps<T>,\n value: T, velocity: T, target: T | null,\n k: number, damping: number, mass: number, dt: number,\n): { value: T; velocity: T } {\n const ref = target ?? value;\n const displacement = ops.subtract(value, ref);\n const springForce = ops.scale(displacement, target == null ? 0 : -k);\n const dampingForce = ops.scale(velocity, -damping);\n const accel = ops.scale(ops.add(springForce, dampingForce), 1 / mass);\n const v = ops.add(velocity, ops.scale(accel, dt));\n return { value: ops.add(value, ops.scale(v, dt)), velocity: v };\n}\n","import { SPRING_PRESETS } from '@weasel-js/geom';\nimport type { AnimationKind, PhysicsHandle, PhysicsOptions } from '../types';\nimport { axesOf } from './axes';\nimport type { SpringReader } from './codec';\nimport type { AnimationContext } from './context';\nimport { stepSpring } from './integrator';\n\nexport function resolveSpringConstants(o: { preset?: string; stiffness?: number; damping?: number; mass?: number }) {\n const preset = o.preset ? SPRING_PRESETS[o.preset as keyof typeof SPRING_PRESETS] : null;\n return {\n stiffness: o.stiffness ?? preset?.stiffness ?? 170,\n damping: o.damping ?? preset?.damping ?? 26,\n mass: o.mass ?? preset?.mass ?? 1,\n };\n}\n\n/** A spring or a coast that hands each frame's value to the caller's `onTick`. */\nexport function startPhysics<T>(\n ctx: AnimationContext,\n o: PhysicsOptions<T>,\n kind: AnimationKind,\n): PhysicsHandle<T> {\n const { codec } = ctx;\n const id = ctx.nextId();\n const isNumeric = typeof o.from === 'number';\n if (!isNumeric && (!o.add || !o.subtract || !o.scale || !o.magnitude)) {\n throw new Error('physics: add/subtract/scale/magnitude are required for non-numeric T');\n }\n const add = o.add ?? ((a: T, b: T) => ((a as unknown as number) + (b as unknown as number)) as unknown as T);\n const subtract = o.subtract ?? ((a: T, b: T) => ((a as unknown as number) - (b as unknown as number)) as unknown as T);\n const scale = o.scale ?? ((v: T, k: number) => ((v as unknown as number) * k) as unknown as T);\n const magnitude = o.magnitude ?? ((v: T) => Math.abs(v as unknown as number));\n const { stiffness: kBase, damping, mass } = resolveSpringConstants(o);\n const restThreshold = o.restThreshold ?? 0.01;\n\n let target: T | null = o.to ?? null;\n let value = o.from;\n // Default to zero velocity: assumes scale(_, 0) returns the zero vector of T. Pass an explicit velocity for unusual T where this isn't true.\n let velocity: T = o.velocity ?? scale(o.from, 0);\n let lastTime: number | null = null;\n\n // blits' closed forms need positive damping and mass, and a spring with a target needs\n // stiffness; decay's handle never takes a target.\n const solvable = damping > 0 && mass > 0 && (kBase > 0 || kind === 'decay');\n const fromAxes = solvable ? axesOf(o.from) : null;\n const sameShape = (v: T | null | undefined): boolean => v == null || axesOf(v)?.shape === fromAxes!.shape;\n const axes = fromAxes && sameShape(o.to) && sameShape(o.velocity) ? fromAxes : null;\n let reader: SpringReader | null = null;\n if (axes) {\n ctx.seedClock();\n // Started ahead of `register`, whose `start` listeners may already cancel it.\n reader = codec.spring({\n id, axes: axes.count,\n from: axes.to(o.from),\n to: o.to == null ? null : axes.to(o.to),\n velocity: o.velocity == null ? new Array<number>(axes.count).fill(0) : axes.to(o.velocity),\n stiffness: kBase, damping, mass,\n });\n }\n\n /** Ends it. As for a tween: canceled from its own onTick, it never completes. */\n const end = (): true => {\n codec.stop(id);\n if (ctx.has(id)) {\n ctx.reportEnd(id);\n o.onDone?.();\n }\n return true;\n };\n const baseHandle = ctx.register({\n id,\n kind,\n cancelKey: o.cancelKey,\n label: o.label,\n tick(nowMs, rate) {\n if (ctx.tripwire()) { codec.stop(id); return true; }\n // Played backward, it ends where it started, as a tween does.\n if (rate < 0 && (nowMs <= 0 || (axes && codec.rewound(id)))) {\n o.onTick(axes ? axes.from(reader!.motion().value) : o.from);\n return end();\n }\n if (lastTime == null) {\n lastTime = nowMs;\n // Already-at-rest short-circuit: decay-mode (target == null)\n // with starting velocity below threshold should complete\n // immediately rather than emit a tick and wait a frame.\n if (target == null && magnitude(velocity) < restThreshold) return end();\n // The codec's voice has run since registration, so only Euler starts its clock here.\n if (!axes) {\n o.onTick(value);\n return false;\n }\n }\n if (axes) {\n const m = reader!.motion();\n value = axes.from(m.value);\n velocity = axes.from(m.velocity);\n } else {\n // Semi-implicit Euler, for a T blits cannot move as axes, or constants its closed forms can't solve.\n const dt = Math.max(-0.064, Math.min(0.064, (nowMs - lastTime) / 1000));\n const next = stepSpring({ add, subtract, scale }, value, velocity, target, kBase, damping, mass, dt);\n value = next.value;\n velocity = next.velocity;\n }\n lastTime = nowMs;\n o.onTick(value);\n const velRested = magnitude(velocity) < restThreshold;\n const posRested = target == null\n ? true\n : magnitude(subtract(value, target)) < restThreshold;\n if (!velRested || !posRested) return false;\n if (target != null) o.onTick(target);\n return end();\n },\n });\n\n const checkShape = (v: T, what: string): void => {\n if (!sameShape(v)) throw new Error(`physics: ${what} is not the same shape as \\`from\\``);\n };\n return {\n ...baseHandle,\n setTarget: (newTo: T | null) => {\n if (axes && newTo != null) checkShape(newTo, 'setTarget');\n target = newTo;\n if (axes && codec.has(id)) codec.retarget(id, newTo == null ? null : axes.to(newTo));\n },\n setVelocity: (v: T) => {\n if (axes) checkShape(v, 'setVelocity');\n velocity = v;\n if (axes && codec.has(id)) codec.push(id, axes.to(v));\n },\n };\n}\n","/**\n * The soonest a damped spring toward 0 can be at rest, in ms from where it stands at `value`\n * and `velocity`: under `threshold` in both, each as a length over the axes.\n *\n * Damping takes energy out no faster than `2 * damping / mass` of it a second, and at rest the\n * energy is under what `threshold` in both would hold, so the spring cannot be at rest before\n * its energy has had time to fall that far. Never later than the rest itself, and sooner by\n * more the less the spring is damped. With a `stiffness` of 0 it is a coast, at rest once it\n * is slow, and the answer is when that is.\n */\nexport function earliestRest(\n value: readonly number[],\n velocity: readonly number[],\n stiffness: number,\n damping: number,\n mass: number,\n threshold: number,\n): number {\n let energy = 0;\n for (let i = 0; i < value.length; i++) energy += stiffness * value[i]! ** 2 + mass * velocity[i]! ** 2;\n const atRest = (stiffness + mass) * threshold ** 2;\n if (!(energy > atRest)) return 0;\n return ((1000 * mass) / (2 * damping)) * Math.log(energy / atRest);\n}\n","import type { Behind, TargetState } from '../target';\nimport type { Codec, Own } from './codec';\nimport { bump, bumpOn, minus, plus, runsOn, seat } from './offsets';\n\n/** What {@link createSpringVoices} takes. */\nexport interface SpringVoicesOptions {\n /** The animation's id, which its first voice takes. */\n id: number;\n nextId(): number;\n stiffness: number;\n damping: number;\n mass: number;\n /** Where the move's voice runs, behind the target's holds. */\n behind: Behind;\n}\n\n/**\n * A spring on a target as up to two voices that sum to it. One is the move its destinations\n * made in the committed value, which a hold covers; the other is the rest, which shows on top\n * of a hold: a `from` away from the committed value, a push, a coast. A spring is linear, so\n * the two run apart and add up to the one spring.\n */\nexport interface SpringVoices {\n /** Both voices summed: the animation's whole offset, and its velocity. */\n own(): Own;\n /** What is left of the move. */\n moved(): number[];\n /** Adds `delta` to the move: a destination has moved the committed value by that much. */\n move(delta: readonly number[]): void;\n /** Stops the move's voice, where the committed value has taken what was left of it. */\n settleMove(): void;\n /** Starts the rest over at `from` and `velocity`, toward nothing left or, for a coast, free. */\n rest(from: readonly number[], velocity: readonly number[], coast: boolean): void;\n /** Sets the animation's velocity, by way of the rest. */\n push(velocity: readonly number[]): void;\n rate(rate: number): void;\n /** Whether every voice, played backward, has got back to where it was last cued. */\n rewound(): boolean;\n stop(): void;\n}\n\nexport function createSpringVoices(codec: Codec, s: TargetState, o: SpringVoicesOptions): SpringVoices {\n const n = s.axes.count;\n const zeros = (): number[] => new Array<number>(n).fill(0);\n const moving = { id: -1 };\n const resting = { id: -1 };\n let first = true;\n let rate = 1;\n let coasting = false;\n\n const of = (v: { id: number }): Own =>\n (v.id >= 0 ? codec.own(v.id) : undefined) ?? { value: zeros(), velocity: zeros() };\n\n /** Counts `delta` into what `v` shows until the next frame reads it. */\n const adjust = (v: { id: number }, delta: readonly number[], sign: 1 | -1): void => {\n if (v === moving) bumpOn(s, o.behind, delta, sign);\n else bump(s, delta, sign);\n };\n const cue = (v: { id: number }, from: readonly number[], velocity: readonly number[], to: number[] | null): void => {\n if (v.id >= 0) {\n const was = codec.own(v.id)!.value;\n codec.recue(v.id, from.slice(), velocity.slice(), to);\n adjust(v, minus(from, was), 1);\n return;\n }\n v.id = first ? o.id : o.nextId();\n first = false;\n const on = v === moving ? runsOn(s, o.behind) : s;\n seat(s, on, codec.spring({\n id: v.id, on, axes: n, from: from.slice(), to, velocity: velocity.slice(),\n stiffness: o.stiffness, damping: o.damping, mass: o.mass,\n }));\n if (rate !== 1) codec.rate(v.id, rate);\n adjust(v, from, 1);\n };\n\n const drop = (v: { id: number }): void => {\n if (v.id < 0) return;\n const own = codec.own(v.id);\n if (own) adjust(v, own.value, -1);\n codec.stop(v.id);\n v.id = -1;\n };\n\n return {\n own() {\n const a = of(moving);\n const b = of(resting);\n return { value: plus(a.value, b.value), velocity: plus(a.velocity, b.velocity) };\n },\n moved: () => of(moving).value,\n move(delta) {\n const m = of(moving);\n cue(moving, plus(m.value, delta), m.velocity, zeros());\n },\n settleMove: () => drop(moving),\n rest(from, velocity, coast) {\n coasting = coast;\n cue(resting, from, velocity, coast ? null : zeros());\n },\n push(velocity) {\n const v = minus(velocity, of(moving).velocity);\n if (resting.id < 0) cue(resting, zeros(), v, coasting ? null : zeros());\n else codec.push(resting.id, v);\n },\n rate(r) {\n rate = r;\n for (const v of [moving, resting]) if (v.id >= 0 && codec.has(v.id)) codec.rate(v.id, r);\n },\n rewound: () => (moving.id >= 0 || resting.id >= 0)\n && [moving, resting].every((v) => v.id < 0 || codec.rewound(v.id)),\n stop() {\n drop(moving);\n drop(resting);\n },\n };\n}\n","import { stateOf, type Behind, type TargetState } from '../target';\nimport type { AnimationKind, PhysicsHandle, TargetPhysicsOptions } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport { absorb, axesFor, comeOut, commitOffset, goBehind, minus, norm, plus, takeUp, times, travel } from './offsets';\nimport { resolveSpringConstants } from './physicsAnimation';\nimport { earliestRest } from './springRest';\nimport { createSpringVoices, type SpringVoices, type SpringVoicesOptions } from './springVoices';\n\nconst any = (a: readonly number[]): boolean => a.some((x) => x !== 0);\n\n/** The spring's constants, refused where blits' closed forms cannot solve them. */\nfunction constantsFor(o: Parameters<typeof resolveSpringConstants>[0], kind: AnimationKind, toward: boolean) {\n const c = resolveSpringConstants(o);\n if (!(c.damping > 0) || !(c.mass > 0) || (toward && !(c.stiffness > 0))) {\n throw new Error(`${kind}: an animation on a target needs positive damping and mass, and stiffness to reach \\`to\\``);\n }\n return c;\n}\n\ntype Along = readonly number[];\n\n/** When a spring or a coast with no `onTick` can next be at rest. Until then its tick, which\n * only asks whether it is, has nothing to do. */\nfunction restWaits(\n ctx: AnimationContext,\n id: number,\n quiet: boolean,\n c: { stiffness: number; damping: number; mass: number },\n threshold: number,\n) {\n // Nothing pulls a coast, so it is at rest once it is slow.\n const until = (value: Along, velocity: Along, coast: boolean): number =>\n earliestRest(value, velocity, coast ? 0 : c.stiffness, c.damping, c.mass, threshold);\n return {\n /** The `due` it registers with. */\n first: (value: Along, velocity: Along, coast: boolean): number | undefined =>\n (quiet ? until(value, velocity, coast) : undefined),\n /** Leaves it unticked until then. Answers false, as the tick of one still moving does. */\n again(value: Along, velocity: Along, coast: boolean): false {\n if (quiet) ctx.defer(id, until(value, velocity, coast));\n return false;\n },\n };\n}\n\n/** The voices a spring or a coast starts with: `move` behind the target's holds, all of its\n * voice the move, and the rest of `start`, with `velocity`, on top. */\nfunction startVoices(\n ctx: AnimationContext, s: TargetState, o: Omit<SpringVoicesOptions, 'behind'>,\n move: Along, start: Along, velocity: Along, coast: boolean,\n): { voices: SpringVoices; behind: Behind } {\n const behind = goBehind(s, () => voices.moved(), () => voices.moved(), new Array<number>(move.length).fill(1));\n const voices = createSpringVoices(ctx.codec, s, { ...o, behind });\n if (any(move)) voices.move(move);\n const top = minus(start, move);\n if (!any(move) || any(top) || any(velocity)) voices.rest(top, velocity, coast);\n return { voices, behind };\n}\n\n/**\n * A spring or a coast on a target. A spring commits its destination as it starts and its voices\n * are what is left to travel. A coast has no destination: its voice is how far it has gone, which\n * it commits when it stops.\n */\nexport function startOffsetPhysics<T>(\n ctx: AnimationContext,\n o: TargetPhysicsOptions<T>,\n kind: AnimationKind,\n): PhysicsHandle<T> {\n const s = stateOf(o.target);\n const ax = s.axes;\n let dest = o.to == null ? null : axesFor(ax, o.to, 'to');\n const constants = constantsFor(o, kind, dest != null);\n const { stiffness } = constants;\n const given = o.from === undefined ? null : axesFor(ax, o.from, 'from');\n let velocity = o.velocity === undefined ? null : axesFor(ax, o.velocity, 'velocity');\n const restThreshold = o.restThreshold ?? 0.01;\n const zeros = (): number[] => new Array<number>(ax.count).fill(0);\n\n const id = ctx.nextId();\n const waits = restWaits(ctx, id, !o.onTick, constants, restThreshold);\n const interrupts = o.interrupt !== false;\n const seed = {\n id, kind, cancelKey: o.cancelKey, label: o.label, target: s, keepExisting: !interrupts,\n } as AnimationSeed;\n if (o.cancelKey != null && interrupts) {\n // Read ahead of the interrupt, which stops the voices whose velocity this is.\n velocity ??= ctx.velocityUnder(o.cancelKey, s as never);\n ctx.interrupt(o.cancelKey, seed);\n }\n const before = ax.to(s.get());\n const committed = dest ? takeUp(s) : before;\n const start = travel(ax, given ?? committed, dest ?? committed);\n /** The move the destination makes in the committed value; the rest of `start` rides on top. */\n const move = dest ? travel(ax, before, dest) : zeros();\n\n ctx.targets.attach(s as never);\n if (o.to != null) s.set(o.to);\n ctx.seedClock();\n const { voices, behind } = startVoices(\n ctx, s as never, { id, nextId: ctx.nextId, ...constants }, move, start, velocity ?? zeros(), dest == null,\n );\n\n let left = false;\n const leave = (commit: boolean): void => {\n if (left) return;\n left = true;\n const moved = voices.moved();\n const shown = comeOut(s, behind, moved);\n if (commit) commitOffset(s, voices.own().value, moved, shown);\n voices.stop();\n ctx.targets.detach(s as never);\n };\n /** A coast commits where it stopped, and so does one played back to its start; a spring\n * drops what is left under the threshold. */\n const finish = (commit = dest == null): true => {\n leave(commit);\n ctx.reportEnd(id);\n o.onDone?.();\n return true;\n };\n /** What it shows, for `onTick`. */\n const shows = (own: readonly number[]): T => ax.from(plus(dest ?? ax.to(s.get()), own));\n\n let ticked = false;\n seed.due = waits.first(start, velocity ?? zeros(), dest == null);\n seed.onCancel = () => leave(true);\n seed.onRate = (_paused, _timeScale, rate) => voices.rate(rate);\n seed.velocity = () => voices.own().velocity;\n seed.tick = (nowMs, scale) => {\n if (ctx.tripwire()) { leave(true); return true; }\n const own = voices.own();\n if (scale < 0 && (nowMs <= 0 || voices.rewound())) {\n o.onTick?.(shows(own.value));\n return ctx.has(id) ? finish(true) : true;\n }\n // A coast too slow to move ends at once rather than emit a tick and wait a frame.\n if (!ticked && dest == null && norm(own.velocity) < restThreshold) return finish();\n ticked = true;\n o.onTick?.(shows(own.value));\n if (!ctx.has(id)) return true;\n if (norm(own.velocity) >= restThreshold || (dest && norm(own.value) >= restThreshold)) {\n return waits.again(own.value, own.velocity, dest == null);\n }\n if (dest) o.onTick?.(ax.from(dest));\n return ctx.has(id) ? finish() : true;\n };\n const base = ctx.register(seed);\n\n return {\n ...base,\n setTarget(next) {\n if (left) return;\n const own = voices.own();\n if (next == null) {\n if (dest == null) return;\n // The committed value stops where the spring had brought it; the coast carries the rest.\n const moved = voices.moved();\n absorb(s, behind.kept ? times(moved, behind.kept) : moved);\n dest = null;\n voices.rest(minus(own.value, moved), own.velocity, true);\n voices.settleMove();\n waits.again(own.value, own.velocity, true);\n return;\n }\n const to = axesFor(ax, next, 'setTarget');\n if (!(stiffness > 0)) throw new Error(`${kind}: setTarget needs a positive stiffness`);\n // The committed value moves under the voices, which shift by as much the other way.\n const shift = travel(ax, ax.to(s.get()), to);\n s.set(next);\n if (dest == null) voices.rest(own.value, own.velocity, false);\n dest = to;\n voices.move(shift);\n waits.again(plus(own.value, shift), own.velocity, false);\n ctx.targets.showNow(s as never);\n },\n setVelocity(v) {\n if (left) return;\n const pushed = axesFor(ax, v, 'setVelocity');\n waits.again(voices.own().value, pushed, dest == null);\n voices.push(pushed);\n },\n };\n}\n","import { easeOut, resolveEasing } from '@weasel-js/geom';\nimport { stateOf } from '../target';\nimport type { AnimationHandle, TargetTweenOptions } from '../types';\nimport type { AnimationContext, AnimationSeed } from './context';\nimport { axesFor, bump, bumpOn, comeOut, commitOffset, goBehind, minus, plus, runsOn, seat, shareBehind, takeUp, times, travel } from './offsets';\n\n/** A tween on a target: its destination is committed as it starts, and its voice is what is\n * left to travel. */\nexport function startOffsetTween<T>(ctx: AnimationContext, o: TargetTweenOptions<T>): AnimationHandle {\n const { codec } = ctx;\n const s = stateOf(o.target);\n const ax = s.axes;\n const to = axesFor(ax, o.to, 'to');\n const given = o.from === undefined ? null : axesFor(ax, o.from, 'from');\n const id = ctx.nextId();\n const interrupts = o.interrupt !== false;\n const seed = {\n id, kind: 'tween', cancelKey: o.cancelKey, label: o.label, target: s, keepExisting: !interrupts,\n } as AnimationSeed;\n // Ahead of reading the committed value: an interrupted animation commits where it stopped.\n if (o.cancelKey != null && interrupts) ctx.interrupt(o.cancelKey, seed);\n const committed = ax.to(s.get());\n const base = takeUp(s);\n const from = o.from === undefined ? ax.from(base) : o.from;\n const path = o.interpolator ? o.interpolator(from, o.to)\n : o.interpolate ? (u: number) => o.interpolate!(from, o.to, u)\n : null;\n const easing = resolveEasing(o.easing ?? easeOut);\n const ms = Math.max(o.ms, 1);\n\n ctx.targets.attach(s as never);\n s.set(o.to);\n const atEnd = ctx.atEnd();\n ctx.seedClock();\n const offsetAt = (u: number): number[] => minus(ax.to(path!(easing(u))), to);\n /** Its offset at its start, where a run backward ends. */\n const first = path ? offsetAt(0) : travel(ax, given ?? base, to);\n const share = shareBehind(ax, committed, to, travel(ax, given ?? base, to));\n const own = (): number[] => codec.own(id)!.value;\n const behind = goBehind(s, own, () => times(own(), share), share);\n const on = runsOn(s as never, behind);\n seat(s as never, on, path\n ? codec.path({ id, on, ms, axes: ax.count, at: offsetAt, atEnd })\n : codec.tween({ id, on, ms, ease: easing, from: first, to: new Array<number>(ax.count).fill(0), atEnd }));\n bumpOn(s as never, behind, own(), 1);\n\n let left = false;\n /** Takes its voice off the target, committing what it had left to travel when `commit`, or\n * given `at`, that offset in its place. */\n const leave = (commit: boolean, at?: readonly number[]): void => {\n if (left) return;\n left = true;\n const own = codec.own(id);\n const value = at ?? own?.value;\n const moved = value ? times(value, share) : [];\n const shown = comeOut(s, behind, moved);\n if (own) {\n if (commit) commitOffset(s, value!, moved, shown);\n // Voices among the target's own are in its `slot` until the next frame reads it.\n if (!behind.move) bump(s as never, own.value, -1);\n }\n codec.stop(id);\n ctx.targets.detach(s as never);\n };\n /** Ends it at its destination, or played backward, at its start. */\n const end = (atStart: boolean): true => {\n o.onTick?.(atStart ? from : o.to);\n // That last onTick may have canceled it, which commits where it was and never completes.\n if (!ctx.has(id)) return true;\n leave(atStart, atStart ? first : undefined);\n ctx.reportEnd(id);\n o.onDone?.();\n return true;\n };\n\n if (atEnd) seed.startAt = Math.max(o.ms, 0);\n seed.progress = (virtualNow) => (o.ms <= 0 ? 1 : Math.min(1, Math.max(0, virtualNow / o.ms)));\n // With no `onTick` to call it has nothing to do until it ends.\n if (!o.onTick) seed.due = Math.max(o.ms, 0);\n seed.onCancel = () => leave(true);\n seed.tick = (nowMs, scale) => {\n if (ctx.tripwire()) { leave(true); return true; }\n if (scale < 0 && (nowMs <= 0 || codec.rewound(id))) return end(true);\n if (o.ms <= 0 || nowMs >= o.ms) return end(false);\n o.onTick?.(ax.from(plus(to, codec.own(id)!.value)));\n return false;\n };\n return ctx.register(seed);\n}\n","import type { WatchCompletion } from '../supervisor';\n\n/** One-shot listeners for an animation leaving the animator's table, finished or canceled. A\n * stagger watches its children through them, to retire itself when the last one goes. */\nexport interface Completions {\n /** Tells `id`'s listeners it has left, and forgets them. */\n fire(id: number): void;\n watch: WatchCompletion;\n}\n\n/** `has` answers whether an id is still on the table; a watch on one that is not fires at once. */\nexport function createCompletions(has: (id: number) => boolean): Completions {\n const listeners = new Map<number, (() => void)[]>();\n return {\n fire(id) {\n const ls = listeners.get(id);\n if (!ls) return;\n listeners.delete(id);\n for (const cb of ls) cb();\n },\n watch(id, cb) {\n if (!has(id)) {\n cb();\n return () => {};\n }\n const ls = listeners.get(id) ?? [];\n ls.push(cb);\n listeners.set(id, ls);\n return () => {\n const cur = listeners.get(id);\n if (!cur) return;\n const idx = cur.indexOf(cb);\n if (idx >= 0) cur.splice(idx, 1);\n if (cur.length === 0) listeners.delete(id);\n };\n },\n };\n}\n","/** What {@link Wakes} keeps on each thing waiting in it. */\nexport interface Waiting {\n /** The time it is due at; kept by `Wakes`. */\n wakeAt: number;\n /** Its place in the heap; -1 while it is not waiting. */\n heapAt: number;\n /** Orders two due in one call: the lower first. */\n seq: number;\n}\n\n/** Things waiting for a clock to reach a time each, soonest first: a binary heap that knows\n * each one's place, so one can leave or be given another time without a search. */\nexport interface Wakes<W extends Waiting> {\n /** Has `w` wait for `at`, in place of any time it was waiting for. */\n set(w: W, at: number): void;\n /** Stops `w` waiting. */\n remove(w: W): void;\n /** Takes out everything due at or before `now`, in `seq` order. */\n due(now: number): W[];\n clear(): void;\n readonly size: number;\n}\n\nexport function createWakes<W extends Waiting>(): Wakes<W> {\n const heap: W[] = [];\n\n const place = (w: W, i: number): void => {\n heap[i] = w;\n w.heapAt = i;\n };\n const up = (w: W, i: number): void => {\n while (i > 0) {\n const parent = (i - 1) >> 1;\n const p = heap[parent]!;\n if (p.wakeAt <= w.wakeAt) break;\n place(p, i);\n i = parent;\n }\n place(w, i);\n };\n const down = (w: W, i: number): void => {\n const n = heap.length;\n for (;;) {\n let child = 2 * i + 1;\n if (child >= n) break;\n if (child + 1 < n && heap[child + 1]!.wakeAt < heap[child]!.wakeAt) child += 1;\n const c = heap[child]!;\n if (c.wakeAt >= w.wakeAt) break;\n place(c, i);\n i = child;\n }\n place(w, i);\n };\n const remove = (w: W): void => {\n const i = w.heapAt;\n if (i < 0) return;\n w.heapAt = -1;\n const last = heap.pop()!;\n if (last === w) return;\n // The last one takes the gap, and may belong either way from there.\n if (i > 0 && last.wakeAt < heap[(i - 1) >> 1]!.wakeAt) up(last, i);\n else down(last, i);\n };\n\n return {\n set(w, at) {\n remove(w);\n w.wakeAt = at;\n heap.push(w);\n up(w, heap.length - 1);\n },\n remove,\n due(now) {\n const out: W[] = [];\n while (heap.length > 0 && heap[0]!.wakeAt <= now) {\n const w = heap[0]!;\n remove(w);\n out.push(w);\n }\n if (out.length > 1) out.sort((a, b) => a.seq - b.seq);\n return out;\n },\n clear() {\n for (const w of heap) w.heapAt = -1;\n heap.length = 0;\n },\n get size() { return heap.length; },\n };\n}\n","import type { ActiveAnimation } from './context';\nimport { createWakes } from './wakes';\n\n/** Which animations a frame ticks, and each one's own clock. */\nexport interface Schedule {\n /** `a`'s own clock now, in virtual ms. */\n clockOf(a: ActiveAnimation): number;\n /** Takes `a` on, its clock at its `startAt`. */\n add(a: ActiveAnimation): void;\n remove(a: ActiveAnimation): void;\n /** Sets `a`'s pause and time scale, leaving its clock where it stands. */\n pace(a: ActiveAnimation, paused: boolean, timeScale: number): void;\n /** `a`'s rate now: its own time scale, 0 while paused, and below 0 while it plays backward. */\n rateOf(a: ActiveAnimation): number;\n /** Runs `flip`, which turns the direction the animations play in, leaving every one of `all`\n * with its clock where it stands. */\n turn(all: Iterable<ActiveAnimation>, flip: () => void): void;\n /** Leaves `a` unticked until its clock has run `ms` more, whether it was waiting already or\n * ticked every frame. Nothing for an `a` that has left. */\n defer(a: ActiveAnimation | undefined, ms: number): void;\n /** The animations to tick this frame, in the order they registered: those ticked every\n * frame, and those whose clock has just reached their `due`. */\n ticks(): ActiveAnimation[];\n /** Whether any animation changes from one frame to the next. */\n readonly awake: boolean;\n /** How many animations no frame ticks until they are due. */\n readonly waiting: number;\n clear(): void;\n}\n\n/** `elapsed` answers the animator's clock, which only goes forward: its time scale and pauses\n * are already in it. `direction` is -1 while the animator plays backward. */\nexport function createSchedule(elapsed: () => number, direction: () => number = () => 1): Schedule {\n /** Ticked every frame, in the order they joined. */\n const every = new Set<ActiveAnimation>();\n /** Waiting for the animator's clock to reach the time their own reaches `due`. */\n const wakes = createWakes<ActiveAnimation>();\n let seq = 0;\n let awake = 0;\n /** With a `due` and not yet woken, whether or not a rate above 0 has it in `wakes`. */\n let waiting = 0;\n\n const rateOf = (a: ActiveAnimation): number => (a.paused ? 0 : a.timeScale * direction());\n const clockOf = (a: ActiveAnimation): number => a.base + (elapsed() - a.anchor) * rateOf(a);\n const rebase = (a: ActiveAnimation): void => {\n a.base = clockOf(a);\n a.anchor = elapsed();\n };\n\n /** Has `a` wait for its `due`. One playing backward is ticked every frame instead: it ends\n * where its clock gets back to 0, which no `due` ahead of it marks. */\n const wait = (a: ActiveAnimation): void => {\n const rate = rateOf(a);\n if (rate < 0 && a.due! < Infinity) {\n if (every.has(a)) return;\n wakes.remove(a);\n waiting -= 1;\n every.add(a);\n a.rewinding = true;\n return;\n }\n if (a.rewinding) {\n a.rewinding = false;\n every.delete(a);\n waiting += 1;\n }\n if (rate > 0 && a.due! < Infinity) wakes.set(a, a.anchor + (a.due! - a.base) / rate);\n else wakes.remove(a);\n };\n\n return {\n clockOf,\n add(a) {\n a.base = a.startAt ?? 0;\n a.anchor = elapsed();\n a.seq = seq++;\n a.heapAt = -1;\n a.wakeAt = Infinity;\n a.rewinding = false;\n if (!a.idle) awake += 1;\n if (a.due === undefined) {\n every.add(a);\n return;\n }\n waiting += 1;\n wait(a);\n },\n remove(a) {\n if (!a.idle) awake -= 1;\n if (every.delete(a)) return;\n waiting -= 1;\n wakes.remove(a);\n },\n pace(a, paused, timeScale) {\n rebase(a);\n a.paused = paused;\n a.timeScale = timeScale;\n if (!every.has(a) || a.rewinding) wait(a);\n },\n rateOf,\n turn(all, flip) {\n const each = [...all];\n for (const a of each) rebase(a);\n flip();\n for (const a of each) if (!every.has(a) || a.rewinding) wait(a);\n },\n defer(a, ms) {\n if (!a) return;\n a.due = clockOf(a) + ms;\n if (every.delete(a)) waiting += 1;\n a.rewinding = false;\n wait(a);\n },\n ticks() {\n const steady = [...every];\n const woke = wakes.due(elapsed());\n if (woke.length === 0) return steady;\n waiting -= woke.length;\n const out: ActiveAnimation[] = [];\n let i = 0;\n for (const a of woke) {\n // Rounding may leave its clock a hair short of the time it was woken for.\n a.base = Math.max(clockOf(a), a.due!);\n a.anchor = elapsed();\n every.add(a);\n while (i < steady.length && steady[i]!.seq < a.seq) out.push(steady[i++]!);\n out.push(a);\n }\n while (i < steady.length) out.push(steady[i++]!);\n return out;\n },\n get awake() { return awake > 0; },\n get waiting() { return waiting; },\n clear() {\n every.clear();\n wakes.clear();\n awake = 0;\n waiting = 0;\n },\n };\n}\n","import type { TargetState } from '../target';\nimport type { ActiveAnimation } from './context';\nimport { createSchedule, type Schedule } from './schedule';\n\n/** The animations on the table, and the ways a frame and the API find them. */\nexport interface Roster {\n readonly animations: Map<number, ActiveAnimation>;\n readonly schedule: Schedule;\n /** The animations holding `key`, in the order they registered. */\n under(key: string): Iterable<ActiveAnimation>;\n /** The animations moving `target`, in the order they registered. */\n on(target: TargetState): Iterable<ActiveAnimation>;\n /** Puts `a` on the table, in place of one still there under its id: a revived timeline\n * registers again under the id it holds. */\n add(a: ActiveAnimation): void;\n /** Takes `a` off the table, with no report. */\n remove(a: ActiveAnimation): void;\n clear(): void;\n}\n\nconst NONE: Iterable<ActiveAnimation> = [];\n\n/** Files `a` under `key` in `index`, or takes it out. */\nfunction file<K>(index: Map<K, Set<ActiveAnimation>>, key: K, a: ActiveAnimation, on: boolean): void {\n let set = index.get(key);\n if (on) {\n if (!set) index.set(key, set = new Set());\n set.add(a);\n } else if (set?.delete(a) && set.size === 0) index.delete(key);\n}\n\n/** `elapsed` and `direction` answer the animator's clock, as {@link createSchedule} takes them. */\nexport function createRoster(elapsed: () => number, direction?: () => number): Roster {\n const animations = new Map<number, ActiveAnimation>();\n const schedule = createSchedule(elapsed, direction);\n // A start interrupts its key and a stop empties its target, and a search of the table for\n // either costs more the more is running.\n const byKey = new Map<string, Set<ActiveAnimation>>();\n const byTarget = new Map<TargetState, Set<ActiveAnimation>>();\n const index = (a: ActiveAnimation, on: boolean): void => {\n if (a.cancelKey != null) file(byKey, a.cancelKey, a, on);\n if (a.target) file(byTarget, a.target, a, on);\n };\n const remove = (a: ActiveAnimation): void => {\n animations.delete(a.id);\n schedule.remove(a);\n index(a, false);\n };\n return {\n animations,\n schedule,\n under: (key) => byKey.get(key) ?? NONE,\n on: (target) => byTarget.get(target) ?? NONE,\n add(a) {\n const had = animations.get(a.id);\n if (had) remove(had);\n animations.set(a.id, a);\n schedule.add(a);\n index(a, true);\n },\n remove,\n clear() {\n animations.clear();\n schedule.clear();\n byKey.clear();\n byTarget.clear();\n },\n };\n}\n","import type { AnimatorEventHub } from '../observe';\nimport type { WatchCompletion } from '../supervisor';\nimport type { TargetState } from '../target';\nimport type { AnimationHandle, AnimationInfo } from '../types';\nimport type { Codec } from './codec';\nimport { createCompletions } from './completions';\nimport type { ActiveAnimation, AnimationSeed } from './context';\nimport { createRoster } from './roster';\n\n/** What {@link createTable} needs of the animator around it. */\nexport interface TableHost {\n codec: Pick<Codec, 'stop' | 'has' | 'rate'>;\n hub: AnimatorEventHub;\n /** The animator's clock: the virtual ms its frames have advanced it by. */\n elapsed(): number;\n /** -1 while the animator plays backward, else 1. */\n direction(): number;\n /** Starts the frame clock where it stands idle, so a new animation is charged the wait for\n * its first frame. */\n seedClock(): void;\n /** Shows a target as an animation starts on it. */\n showNow(target: TargetState): void;\n /** Whether a target came to rest and is owed one more show. */\n resting(): boolean;\n /** Whether a frame is between reading the codec and showing its targets. */\n framing(): boolean;\n requestFrame(): void;\n}\n\n/** The animator's running animations, and how one joins and leaves. */\nexport interface Table {\n readonly animations: Map<number, ActiveAnimation>;\n infoOf(a: ActiveAnimation): AnimationInfo;\n /** Reports `id` as finished, ahead of its `onDone`, so whatever that handler starts is heard\n * after it. Nothing revives a primitive; a timeline, which can be revived, is reported as it\n * leaves the table. */\n reportEnd(id: number): void;\n /** Takes `id` off the table as canceled, or, given `by`, as interrupted by the animation\n * claiming its key; given `error`, the caller reports it. */\n retire(id: number, by?: ActiveAnimation, error?: true): void;\n cancelByKey(key: string, by?: ActiveAnimation): void;\n /** The animations holding `key`, in the order they registered. */\n under(key: string): Iterable<ActiveAnimation>;\n /** The animations moving `target`, in the order they registered. */\n on(target: TargetState): Iterable<ActiveAnimation>;\n /** Sets `a`'s pause and time scale, and gives its codec subject the rate they ask for. */\n pace(a: ActiveAnimation, paused: boolean, timeScale: number): void;\n /** Runs `flip`, which turns the animator's direction, and gives every animation the rate that\n * leaves it, its clock where it stands. */\n turn(flip: () => void): void;\n /** `a`'s own clock now, in virtual ms. */\n clockOf(a: ActiveAnimation): number;\n /** The rate `a`'s clock runs at: 0 while paused, below 0 while it plays backward. */\n rateOf(a: ActiveAnimation): number;\n /** Leaves `id` unticked until its clock has run `ms` more. */\n defer(id: number, ms: number): void;\n /** The animations to tick this frame, in the order they registered. */\n ticks(): ActiveAnimation[];\n /** Whether any animation changes from one frame to the next. */\n readonly awake: boolean;\n /** How many animations no frame ticks until they are due. */\n readonly waiting: number;\n register(seed: AnimationSeed): AnimationHandle;\n /** Takes `id` off the table as finished. */\n finish(id: number): void;\n /** Takes `a` off the table with no report of its own: it ended and then threw. */\n drop(a: ActiveAnimation): void;\n /** Cancels everything. `cleared` runs once the table is empty, ahead of the reports. */\n cancelAll(cleared: () => void): void;\n watchCompletion: WatchCompletion;\n}\n\n/** `scale` as a time scale, refused where it is no finite number. Below 0 plays backward. */\nexport function timeScaleOf(scale: number): number {\n if (!Number.isFinite(scale)) throw new Error(`animator: a time scale is a finite number, and ${scale} was given`);\n return scale;\n}\n\nfunction infoOf(a: ActiveAnimation): AnimationInfo {\n if (!a.info) {\n const info: { -readonly [K in keyof AnimationInfo]: AnimationInfo[K] } = { id: a.id, kind: a.kind };\n if (a.cancelKey != null) info.key = a.cancelKey;\n if (a.label != null) info.label = a.label;\n a.info = info;\n }\n return a.info;\n}\n\nexport function createTable(host: TableHost): Table {\n const { codec, hub } = host;\n const roster = createRoster(host.elapsed, host.direction);\n const { animations, schedule, remove } = roster;\n const { fire: fireCompletion, watch: watchCompletion } = createCompletions((id) => animations.has(id));\n\n const reportEnd = (id: number): void => {\n const a = animations.get(id);\n if (!a || a.ended) return;\n a.ended = true;\n if (hub.watched) hub.emit({ type: 'end', animation: infoOf(a) });\n };\n\n const retire = (id: number, by?: ActiveAnimation, error?: true): void => {\n const a = animations.get(id);\n if (!a) return;\n a.onCancel?.();\n codec.stop(id);\n remove(a);\n // A target that came to rest is owed one more show, and no frame may be coming.\n if (host.resting()) host.requestFrame();\n fireCompletion(id);\n if (!hub.watched || a.ended || error) return;\n hub.emit(by\n ? { type: 'interrupt', animation: infoOf(a), by: infoOf(by) }\n : { type: 'cancel', animation: infoOf(a) });\n };\n\n const cancelByKey = (key: string, by?: ActiveAnimation): void => {\n // A copy: each one leaves the set as it is retired, and its `onCancel` may retire others.\n for (const a of [...roster.under(key)]) retire(a.id, by);\n };\n\n /** Hands `a`'s voices the rate its schedule now gives it. */\n const rerate = (a: ActiveAnimation): void => {\n const rate = schedule.rateOf(a);\n if (codec.has(a.id)) codec.rate(a.id, rate);\n a.onRate?.(a.paused, a.timeScale, rate);\n };\n const pace = (a: ActiveAnimation, paused: boolean, timeScale: number): void => {\n schedule.pace(a, paused, timeScale);\n rerate(a);\n };\n\n const register = (seed: AnimationSeed): AnimationHandle => {\n const anim = seed as ActiveAnimation;\n if (seed.cancelKey != null && !seed.keepExisting) cancelByKey(seed.cancelKey, anim);\n anim.paused = false;\n anim.timeScale = 1;\n // Its clock starts with the frame clock, as a voice cued now does: both then advance by\n // the whole of their first frame. Idle, that frame is the wait since the first of the\n // animations it finds was registered.\n host.seedClock();\n roster.add(anim);\n if (host.direction() < 0) rerate(anim);\n if (anim.target) host.showNow(anim.target);\n if (hub.watched) hub.emit({ type: 'start', animation: infoOf(anim) });\n // A frame in progress asks for the next one itself, after `onTick`: asked for from a tick,\n // it would run ahead of a paint `onTick` requests, and the tick after would paint nothing.\n if (animations.size > 0 && !host.framing()) host.requestFrame();\n const live = (): ActiveAnimation | undefined => animations.get(anim.id);\n return {\n id: anim.id,\n cancel: () => retire(anim.id),\n pause: () => { const a = live(); if (a) pace(a, true, a.timeScale); },\n resume: () => { const a = live(); if (a) pace(a, false, a.timeScale); },\n setTimeScale: (s) => { const a = live(); if (a) pace(a, a.paused, timeScaleOf(s)); },\n timeScale: () => live()?.timeScale ?? 1,\n isPaused: () => live()?.paused ?? false,\n };\n };\n\n return {\n animations,\n infoOf,\n reportEnd,\n retire,\n cancelByKey,\n under: roster.under,\n on: roster.on,\n pace,\n turn(flip) {\n schedule.turn(animations.values(), flip);\n for (const a of [...animations.values()]) if (animations.get(a.id) === a) rerate(a);\n },\n clockOf: schedule.clockOf,\n rateOf: schedule.rateOf,\n defer: (id, ms) => schedule.defer(animations.get(id), ms),\n ticks: schedule.ticks,\n get awake() { return schedule.awake; },\n get waiting() { return schedule.waiting; },\n register,\n finish(id) {\n const a = animations.get(id);\n if (!a) return;\n reportEnd(id);\n remove(a);\n fireCompletion(id);\n },\n drop(a) {\n remove(a);\n fireCompletion(a.id);\n },\n cancelAll(cleared) {\n const retired: ActiveAnimation[] = [];\n // Over the table as it stands: one an earlier `onCancel` retired is not canceled twice.\n for (const a of animations.values()) {\n a.onCancel?.();\n codec.stop(a.id);\n retired.push(a);\n }\n roster.clear();\n cleared();\n for (const a of retired) fireCompletion(a.id);\n if (hub.watched) for (const a of retired) hub.emit({ type: 'cancel', animation: infoOf(a) });\n },\n watchCompletion,\n };\n}\n","import { easeOut, resolveEasing } from '@weasel-js/geom';\nimport type { AnimationHandle, TweenOptions } from '../types';\nimport { axesOf } from './axes';\nimport type { AnimationContext } from './context';\n\n/** A tween that hands each frame's value to the caller's `onTick`. */\nexport function startTween<T>(ctx: AnimationContext, o: TweenOptions<T>): AnimationHandle {\n const { codec } = ctx;\n // blits blends in a straight line, which a caller's own function may not do.\n const fromAxes = o.interpolate || o.interpolator ? null : axesOf(o.from);\n const toAxes = fromAxes && axesOf(o.to);\n const axes = fromAxes && toAxes && toAxes.shape === fromAxes.shape ? fromAxes : null;\n // Refused here rather than on a tick, where a throw would stop every other animation.\n if (!axes && !o.interpolate && !o.interpolator) {\n throw new Error('tween: interpolate or interpolator is required for non-numeric T');\n }\n const id = ctx.nextId();\n const easing = resolveEasing(o.easing ?? easeOut);\n // Precedence: factory > per-tick. Factory is built once at tween start so\n // expensive setup (color space conversion etc.) doesn't repeat per frame.\n const factoryFn = o.interpolator ? o.interpolator(o.from, o.to) : null;\n let lastValueEmitted = false;\n const atEnd = ctx.atEnd();\n ctx.seedClock();\n // Started ahead of `register`, whose `start` listeners may already cancel it.\n const reader = codec.tween({\n id, ms: Math.max(o.ms, 1), ease: easing,\n from: axes ? axes.to(o.from) : [0],\n to: axes ? axes.to(o.to) : [1],\n atEnd,\n });\n return ctx.register({\n id,\n kind: 'tween',\n cancelKey: o.cancelKey,\n label: o.label,\n startAt: atEnd ? Math.max(o.ms, 0) : 0,\n progress: (virtualNow) => (o.ms <= 0 ? 1 : Math.min(1, Math.max(0, virtualNow / o.ms))),\n // `nowMs` is the call's own virtual time, so it still decides when the tween ends; the codec\n // supplies only the value in between.\n tick(nowMs, scale) {\n if (ctx.tripwire()) { codec.stop(id); return true; }\n // Played backward, it ends at its start as it ends at its end going forward.\n const atStart = scale < 0 && (nowMs <= 0 || codec.rewound(id));\n const t = atStart ? 0 : o.ms <= 0 ? 1 : Math.min(1, nowMs / o.ms);\n const ends = atStart || t >= 1;\n let value: T;\n if (axes) {\n value = ends ? (atStart ? o.from : o.to) : axes.from(reader.cols, reader.at);\n } else {\n const eased = ends ? easing(t) : reader.cols[reader.at]!;\n value = factoryFn ? factoryFn(eased) : o.interpolate!(o.from, o.to, eased);\n }\n o.onTick(value);\n if (ends && !lastValueEmitted) {\n lastValueEmitted = true;\n codec.stop(id);\n // That last onTick may have canceled us — deregistering the id.\n // A canceled tween never completes, whenever the cancel landed.\n if (ctx.has(id)) {\n ctx.reportEnd(id);\n o.onDone?.();\n }\n return true;\n }\n return false;\n },\n });\n}\n","import type { ColorOverrideRegistry } from '../colorRegistry';\nimport type { TrimOverrideRegistry } from '../trimRegistry';\nimport { createLoop, createTweenLoop } from '../loop';\nimport type { AnimatorEventHub } from '../observe';\nimport { createStagger } from '../stagger';\nimport { supervisors } from '../supervisor';\nimport { stateOf } from '../target';\nimport { createTimeline } from '../timeline/createTimeline';\nimport type { OpenTrackHold } from '../timeline/trackHolds';\nimport type { TimelineOptions } from '../timeline/types';\nimport type {\n AnimationHandle, AnimationInfo, AnimationKind, Animator, DecayOptions, LiveAnimation, PhysicsHandle,\n PhysicsOptions, SpringOptions, TargetDecayOptions, TargetPhysicsOptions, TargetSpringOptions,\n TargetTweenOptions, TweenOptions,\n} from '../types';\nimport type { ActiveAnimation, AnimationContext } from './context';\nimport { decayAsPhysics } from './decay';\nimport type { AnimatorClock } from './frame';\nimport { startHold } from './holdAnimation';\nimport { startHoldRows } from './holdRows';\nimport { openHold } from './holds';\nimport { startOffsetPhysics } from './offsetPhysics';\nimport { startOffsetTween } from './offsetTween';\nimport { startPhysics } from './physicsAnimation';\nimport { timeScaleOf, type Table } from './table';\nimport { startTween } from './tweenAnimation';\nimport type { Emitter } from '@weasel-js/registry';\n\n/** What {@link createAnimatorApi} needs of the animator around it. */\nexport interface ApiHost {\n ctx: AnimationContext;\n table: Table;\n clock: AnimatorClock;\n hub: AnimatorEventHub;\n /** Whether an animation's own tick is running. */\n ticking(): boolean;\n /** Runs a callback once the frame's ticks are done. */\n afterTicks(cb: () => void): void;\n subscribers: Pick<Emitter, 'subscribe'>;\n colorOverrides: ColorOverrideRegistry;\n trimOverrides: TrimOverrideRegistry;\n /** Stops the frame loop, once everything is canceled and its targets are shown at rest. */\n halt(): void;\n}\n\n/** Gives every animation holding `key` the pause and time scale `pace` answers for it. */\nfunction eachUnder(\n table: Table, key: string, pace: (a: ActiveAnimation) => [paused: boolean, timeScale: number],\n): void {\n for (const a of table.under(key)) table.pace(a, ...pace(a));\n}\n\nfunction liveRows(table: Table): LiveAnimation[] {\n const rows: LiveAnimation[] = [];\n for (const a of table.animations.values()) {\n rows.push({\n ...table.infoOf(a),\n paused: a.paused,\n timeScale: a.timeScale,\n elapsed: table.clockOf(a),\n ...(a.progress ? { progress: a.progress(table.clockOf(a)) } : {}),\n });\n }\n return rows;\n}\n\nfunction startTimeline(host: ApiHost, o: TimelineOptions): ReturnType<Animator['timeline']> {\n const { ctx, table, hub } = host;\n const id = ctx.nextId();\n const info = (): AnimationInfo | undefined => {\n const a = table.animations.get(id);\n return a && table.infoOf(a);\n };\n const hold: OpenTrackHold = (target, value, weight, axes, fixed) =>\n openHold(ctx, { target: stateOf(target), value, weight, axes, fixed });\n return createTimeline(table.register, id, o, {\n get watched() { return hub.watched; },\n fire: (track, path, event, lateBy) => {\n const animation = info();\n if (animation) hub.emit({ type: 'fire', animation, track, path: path.slice(), event, lateBy });\n },\n lap: (lap) => {\n const animation = info();\n if (animation) hub.emit({ type: 'lap', animation, lap });\n },\n }, hold);\n}\n\n/** The animator's public surface over its table, clock, and primitives. */\nexport function createAnimatorApi(host: ApiHost): Animator {\n const { ctx, table, clock, hub } = host;\n const { animations } = table;\n const createSupervisor = supervisors({\n nextId: ctx.nextId,\n atEnd: ctx.atEnd,\n starting: ctx.starting,\n register: table.register,\n finish: table.finish,\n afterTicks: host.afterTicks,\n rateOf: (id) => {\n const a = animations.get(id);\n return a ? table.rateOf(a) : 0;\n },\n });\n\n const physics = <T,>(\n o: PhysicsOptions<T> | TargetPhysicsOptions<T>,\n kind: AnimationKind = 'physics',\n ): PhysicsHandle<T> => (o.target ? startOffsetPhysics(ctx, o, kind) : startPhysics(ctx, o, kind));\n\n const api: Animator = {\n tween: <T,>(o: TweenOptions<T> | TargetTweenOptions<T>): AnimationHandle =>\n (o.target ? startOffsetTween(ctx, o) : startTween(ctx, o)),\n spring: <T,>(o: SpringOptions<T> | TargetSpringOptions<T>): AnimationHandle => physics<T>(o, 'spring'),\n decay: <T,>(o: DecayOptions<T> | TargetDecayOptions<T>): AnimationHandle =>\n physics<T>(decayAsPhysics(o), 'decay'),\n physics,\n hold: (o) => startHold(ctx, o),\n holdRows: (o) => startHoldRows(ctx, o),\n cancel: (handle) => table.retire(handle.id),\n cancelKey: (key) => table.cancelByKey(key),\n cancelAll: () => {\n table.cancelAll(() => {\n clock.frameT = null;\n ctx.targets.show();\n });\n host.halt();\n },\n isActive: (key) => {\n if (key == null) return animations.size > 0;\n for (const _ of table.under(key)) return true;\n return false;\n },\n isTicking: host.ticking,\n pause: () => { clock.paused = true; },\n resume: () => { clock.paused = false; },\n isPaused: () => clock.paused,\n setTimeScale: (s) => {\n const scale = timeScaleOf(s);\n if ((scale < 0) === (clock.timeScale < 0)) clock.timeScale = scale;\n else table.turn(() => { clock.timeScale = scale; });\n },\n timeScale: () => clock.timeScale,\n pauseKey: (key) => eachUnder(table, key, (a) => [true, a.timeScale]),\n resumeKey: (key) => eachUnder(table, key, (a) => [false, a.timeScale]),\n setTimeScaleByKey: (key, s) => {\n const scale = timeScaleOf(s);\n eachUnder(table, key, (a) => [a.paused, scale]);\n },\n loop: (factory, loopOpts) => createLoop(createSupervisor, factory, loopOpts),\n tweenLoop: (tweenLoopOpts) => createTweenLoop(api, createSupervisor, tweenLoopOpts),\n stagger: ((items, delay, factory, staggerOpts) =>\n createStagger(\n api,\n createSupervisor,\n table.watchCompletion,\n items,\n delay,\n factory as never,\n staggerOpts,\n )) as Animator['stagger'],\n timeline: (o: TimelineOptions) => startTimeline(host, o),\n colorOverrides: host.colorOverrides,\n trimOverrides: host.trimOverrides,\n onTick: (cb) => host.subscribers.subscribe(cb),\n keepAlive: () => {\n const sup = createSupervisor({ kind: 'keepAlive' });\n return () => sup.cancel();\n },\n watch: (listener) => hub.add(listener),\n live: () => liveRows(table),\n };\n return api;\n}\n","import { kit, mix, sum, vec, type Mix } from '@msb235/blits';\n\nexport type Out = { v: number[] };\n\n/** One subject's value, kept current in place. Valid until the subject's last voice stops. */\nexport interface Reader {\n /** The array holding the subject's axes as the last `frame` read them, from `at` on. It is\n * shared with other subjects and valid until the next `frame`. */\n readonly cols: Float64Array;\n /** Where the subject's axes start in `cols`. */\n readonly at: number;\n /** How many voices reach it: 0 once the last has left, and it reads what it showed then. */\n readonly refs: number;\n}\n\n/** One subject of a lane: what `pull` reads for it, summed over every voice reaching it. */\nexport interface Slot extends Reader {\n cols: Float64Array;\n at: number;\n key: unknown;\n lane: Lane;\n /** How many voices reach it. */\n refs: number;\n /** Its place in the lane's `keys`; -1 while no frame has read it. */\n index: number;\n /** What `cols` points at while `index` is -1. */\n held: Float64Array;\n /** A number its owner gave it, kept beside it in the lane's `tags`; -1 where it gave none. */\n tag: number;\n}\n\n/** Where a subject's voices run, for one kept apart from the rest with as many axes. */\nexport interface LanePlace {\n /** Subjects naming one group share a lane no other subject is in. */\n group: object;\n /** Kept in the lane's `tags` at the subject's place. */\n tag: number;\n}\n\n/** A group's lane as the last frame read it: `count` subjects, subject `j`'s axes in `cols`\n * from `j * axes` and its tag at `tags[j]`. Valid until a subject joins or leaves. */\nexport interface LaneColumns {\n cols: Float64Array;\n tags: Int32Array;\n count: number;\n}\n\n/** One mix per axis count, since a kit's channel width is fixed, and one more per group. */\nexport interface Lane {\n /** What the lane is kept under: its group, or its axis count. */\n key: unknown;\n axes: number;\n mix: Mix<unknown, Out>;\n /** The subjects `pull` reads, by place. Joins wait in `pending` until the next `frame`. */\n keys: unknown[];\n /** Each place's slot, beside `keys`. */\n slots: Slot[];\n /** Each place's tag, beside `keys`. */\n tags: Int32Array;\n pending: Set<Slot>;\n dirty: boolean;\n /** Frames in a row it has had no subjects at; it retires at the second. */\n idle: number;\n cols: { v: Float64Array };\n}\n\nexport interface Lanes {\n /** The slot for `key`, made if absent and showing `held` until a frame reads it. Counts one\n * more voice reaching it. */\n join(axes: number, key: unknown, held: ArrayLike<number>): Slot;\n /** The lane of `group` as the last frame read it; null where it has none. */\n columns(group: object): LaneColumns | null;\n /** Counts one voice fewer reaching `slot`. At none it leaves its lane, and the mix forgets\n * the subject. */\n leave(slot: Slot): void;\n /** Syncs every lane to `time` and reads its subjects. */\n frame(time: number): void;\n}\n\n/** Takes `s` out of its lane's places, moving the last one into the gap. */\nfunction depart(s: Slot): void {\n const l = s.lane;\n l.dirty = true;\n if (s.index < 0) { l.pending.delete(s); return; }\n const lastKey = l.keys.pop()!;\n const moved = l.slots.pop()!;\n if (moved === s) return;\n const n = l.axes;\n const from = l.keys.length * n;\n l.cols.v.copyWithin(s.index * n, from, from + n);\n l.keys[s.index] = lastKey;\n l.slots[s.index] = moved;\n l.tags[s.index] = moved.tag;\n moved.index = s.index;\n moved.at = s.index * n;\n}\n\n/** Gives the lane's waiting subjects their places. */\nfunction rebuild(l: Lane): void {\n const keys = l.keys.slice();\n const had = keys.length;\n for (const s of l.pending) {\n s.index = keys.length;\n s.at = s.index * l.axes;\n s.cols = l.cols.v;\n keys.push(s.key);\n l.slots.push(s);\n }\n l.pending.clear();\n l.keys = keys;\n if (l.tags.length < keys.length) {\n const tags = new Int32Array(Math.max(keys.length, l.tags.length * 2));\n tags.set(l.tags);\n l.tags = tags;\n }\n for (let i = had; i < keys.length; i++) l.tags[i] = l.slots[i]!.tag;\n if (l.cols.v.length !== keys.length * l.axes) {\n l.cols = { v: new Float64Array(keys.length * l.axes) };\n for (const s of l.slots) s.cols = l.cols.v;\n }\n l.dirty = false;\n}\n\n/** `placeOf` answers the lane a subject is kept in, for one kept apart from the rest. */\nexport function createLanes(placeOf?: (key: object) => LanePlace | undefined): Lanes {\n const lanes = new Map<unknown, Lane>();\n const slots = new Map<unknown, Slot>();\n /** Slots whose last voice left since the last frame. */\n const gone: Slot[] = [];\n let now = 0;\n\n const laneOf = (axes: number, group: object | undefined): Lane => {\n const key = group ?? axes;\n let l = lanes.get(key);\n if (!l) {\n const m = mix<unknown, Out>(kit<Out>({ v: vec(axes, sum()) }));\n m.sync(now);\n l = {\n key, axes, mix: m, keys: [], slots: [], tags: new Int32Array(0), pending: new Set(),\n dirty: false, idle: 0, cols: { v: new Float64Array(0) },\n };\n lanes.set(key, l);\n }\n return l;\n };\n\n return {\n join(axes, key, held) {\n const had = slots.get(key);\n if (had) {\n if (had.lane.axes !== axes) {\n throw new Error(`codec: a subject on ${had.lane.axes} axes was given a voice on ${axes}`);\n }\n had.refs += 1;\n return had;\n }\n const place = typeof key === 'object' && key !== null ? placeOf?.(key) : undefined;\n const lane = laneOf(axes, place?.group);\n if (lane.axes !== axes) throw new Error(`codec: a group on ${lane.axes} axes was given a subject on ${axes}`);\n const own = Float64Array.from(held);\n const s: Slot = { key, lane, refs: 1, index: -1, held: own, cols: own, at: 0, tag: place?.tag ?? -1 };\n slots.set(key, s);\n lane.pending.add(s);\n lane.dirty = true;\n return s;\n },\n leave(s) {\n s.refs -= 1;\n if (s.refs > 0) return;\n // Whoever holds it reads what it showed as its last voice left, until the next frame.\n const n = s.lane.axes;\n s.held.set(s.cols.subarray(s.at, s.at + n));\n s.lane.mix.drop(s.key);\n depart(s);\n s.cols = s.held;\n s.at = 0;\n gone.push(s);\n slots.delete(s.key);\n },\n frame(time) {\n now = time;\n for (const s of gone) s.held.fill(0);\n gone.length = 0;\n for (const l of lanes.values()) {\n if (l.dirty) rebuild(l);\n if (l.keys.length === 0 && ++l.idle >= 2) {\n lanes.delete(l.key);\n continue;\n }\n l.mix.sync(time);\n if (l.keys.length === 0) continue;\n l.idle = 0;\n l.mix.pull(l.keys, l.cols);\n }\n },\n columns(group) {\n const l = lanes.get(group);\n return l ? { cols: l.cols.v, tags: l.tags, count: l.keys.length } : null;\n },\n };\n}\n","import type { Handle } from '@msb235/blits';\nimport type { Slot } from './lanes';\n\n/** What {@link createRewinds} reads of a codec voice. */\nexport interface Rewindable {\n slot: Slot;\n /** Absent while a tween waits to be cued. */\n handle?: Handle<unknown>;\n /** Its first frame. */\n from: number[];\n /** A spring's start, where a re-cue has moved its first frame since. */\n spring?: { from: number[] };\n}\n\n/**\n * The voices playing backward. blits takes one out of its mix once its clock is back at 0, and\n * its subject then reads as though it never ran; for an offset that is its destination. The\n * animator ends the animation there holding its start, so until it stops the voice, each frame\n * puts the voice's first frame back where its subject is read.\n */\nexport interface Rewinds<V extends Rewindable> {\n /** Says `v` plays at `rate` from here. */\n rate(v: V, rate: number): void;\n /** After a frame has read every subject: marks the voices back at their start, and adds what\n * each shows into its subject's axes. */\n frame(): void;\n /** Whether `v` has run back to its start. */\n has(v: V): boolean;\n /** Says `v` was cued again, from a start of its own. */\n recued(v: V): void;\n remove(v: V): void;\n}\n\nconst firstOf = (v: Rewindable): number[] => v.spring?.from ?? v.from;\n\nexport function createRewinds<V extends Rewindable>(): Rewinds<V> {\n const backward = new Set<V>();\n const back = new Set<V>();\n return {\n rate(v, rate) {\n // One back at its start has left blits' mix, and plays no further either way.\n if (rate < 0) backward.add(v);\n else backward.delete(v);\n },\n frame() {\n for (const v of backward) if (v.handle?.state === 'done') back.add(v);\n for (const v of back) {\n const { cols, at } = v.slot;\n const first = firstOf(v);\n for (let i = 0; i < first.length; i++) cols[at + i] = cols[at + i]! + first[i]!;\n }\n },\n has: (v) => back.has(v),\n recued: (v) => { back.delete(v); },\n remove(v) {\n backward.delete(v);\n back.delete(v);\n },\n };\n}\n","import {\n glide, patch as fnPatch, spring as springPatch, tween as tweenPatch,\n type Handle, type Motion, type Patch,\n} from '@msb235/blits';\nimport { createLanes, type LaneColumns, type LanePlace, type Out, type Reader, type Slot } from './lanes';\nimport { createRewinds } from './rewinds';\n\nexport type { Reader } from './lanes';\n\nexport interface TweenStart {\n id: number; ms: number; ease: (u: number) => number;\n /** Endpoints as axes. A tween whose caller blends its own values passes [0] and [1]. */\n from: number[]; to: number[];\n /** The subject the voice reaches, where several voices share one. Default: its own, `id`. */\n on?: unknown;\n /** Starts it at its end, to play backward. */\n atEnd?: boolean;\n}\nexport interface SpringStart {\n id: number; axes: number;\n from: number[]; to: number[] | null; velocity: number[];\n stiffness: number; damping: number; mass: number;\n /** As {@link TweenStart.on}. */\n on?: unknown;\n}\nexport interface PathStart {\n id: number; ms: number; axes: number;\n /** The voice's axes at linear progress `u`, 0 to 1. */\n at(u: number): number[];\n /** As {@link TweenStart.on}. */\n on?: unknown;\n /** As {@link TweenStart.atEnd}. */\n atEnd?: boolean;\n}\n/** A voice's own value and velocity, apart from any other voice on its subject. */\nexport interface Own { value: number[]; velocity: number[] }\nexport interface SpringReader extends Reader {\n /** Position and velocity at the last `frame`, for a voice alone on its subject. */\n motion(): Own;\n}\nexport interface Codec {\n /** Advances the codec's clock by `dtMs` of animator time, then reads every subject. */\n frame(dtMs: number): void;\n tween(s: TweenStart): Reader;\n spring(s: SpringStart): SpringReader;\n path(s: PathStart): Reader;\n retarget(id: number, to: number[] | null): void;\n /** Starts spring `id` over from `from` at `velocity`, toward `to` or coasting. */\n recue(id: number, from: number[], velocity: number[], to: number[] | null): void;\n push(id: number, velocity: number[]): void;\n /** Plays `id` at rate `rate` from where it is, without a jump. */\n rate(id: number, rate: number): void;\n /** Whether `id`, played backward, has got back to its start: its subject shows its first\n * frame from then until it stops. */\n rewound(id: number): boolean;\n stop(id: number): void;\n /** Whether `id` is one of the codec's voices. */\n has(id: number): boolean;\n /** Voice `id`'s own value and velocity as of the last `frame`. */\n own(id: number): Own | undefined;\n /** How many voices the codec is running; for tests and diagnostics. */\n voiceCount(): number;\n /** The lane of `group` as the last frame read it; null where it has none. */\n columns(group: object): LaneColumns | null;\n}\n\n/** What the codec calls on a motion patch: a tween has no `push`, a glide no `to`. */\ninterface Moves {\n to?(key: unknown, target: number[], at?: number): void;\n read(key: unknown, at?: number): Motion<number[]> | undefined;\n push?(key: unknown, velocity: number[], at?: number): void;\n}\n\ninterface Voice {\n kind: 'tween' | 'spring' | 'path';\n slot: Slot;\n /** `handle` and `patch` are absent while a tween is `queued`, and a path has\n * no `patch`. */\n handle: Handle<unknown>;\n patch: Moves;\n /** Where it started: what `own` answers until a frame has read it. */\n from: number[];\n /** The codec's own copy, kept at the voice's motion as of its last re-cue. */\n spring?: SpringStart;\n /** A tween's start, until the next `frame` cues its voice. */\n queued?: TweenStart;\n /** A rate asked for while queued. */\n queuedRate?: number;\n /** A path's axes as its patch last answered. */\n last?: number[];\n}\n\n// A voice cued now reads voice time 0 at codec time `time`. Each patch holds its subject at rest\n// at `from`, and the codec releases it with a `to` or `push` timed at 0.\nfunction springVoice(slot: Slot, sp: SpringStart): { handle: Handle<unknown>; patch: Moves } {\n // With no target the spring force is zero whatever the stiffness, leaving damping alone:\n // velocity falls as exp(-t * damping / mass), a glide whose time constant is mass / damping.\n const patch: Moves & Patch<unknown, Out, void> = sp.to == null\n ? glide<unknown, Out, number[]>('v', { from: sp.from, ms: (1000 * sp.mass) / sp.damping })\n : springPatch<unknown, Out, number[]>('v', {\n from: sp.from, to: sp.from, stiffness: sp.stiffness, damping: sp.damping, mass: sp.mass,\n });\n const handle = slot.lane.mix.cue({ patch, subjects: [slot.key] });\n if (sp.to) patch.to!(slot.key, sp.to, 0);\n patch.push!(slot.key, sp.velocity, 0);\n return { handle, patch };\n}\n\nconst zeros = (n: number): number[] => new Array<number>(n).fill(0);\n\n/** `placeOf` answers where a shared subject's voices run, for one kept in a lane of its own. */\nexport function createCodec(placeOf?: (on: object) => LanePlace | undefined): Codec {\n const lanes = createLanes(placeOf);\n const voices = new Map<number, Voice>();\n // Tweens are cued together at the next frame, not one by one as they start: a burst of starts then\n // keeps the caller's objects together rather than each a voice apart, which the frame loop reads.\n const queue: Voice[] = [];\n const rewinds = createRewinds<Voice>();\n let time = 0;\n\n const get = (id: number): Voice => {\n const v = voices.get(id);\n if (!v) throw new Error(`codec: no subject ${id}`);\n return v;\n };\n /** A spring voice's motion now: as its voice last read it, else where it was last placed. */\n const current = (v: Voice): Own =>\n v.patch.read(v.slot.key) ?? { value: v.spring!.from.slice(), velocity: v.spring!.velocity.slice() };\n\n const respring = (v: Voice, next: SpringStart): void => {\n const rate = v.handle.rate;\n v.handle.fade({ over: 0 });\n const { handle, patch } = springVoice(v.slot, next);\n handle.rate = rate;\n v.handle = handle;\n v.patch = patch;\n v.spring = next;\n rewinds.recued(v);\n };\n\n function stop(id: number): void {\n const v = voices.get(id);\n if (!v) return;\n if (v.queued) v.queued = undefined;\n else v.handle.fade({ over: 0 });\n rewinds.remove(v);\n lanes.leave(v.slot);\n voices.delete(id);\n }\n\n return {\n frame(dtMs) {\n for (const v of queue) {\n const q = v.queued;\n if (!q) continue;\n v.queued = undefined;\n const key = v.slot.key;\n const patch = tweenPatch<unknown, Out, number[]>('v', { from: q.from.slice(), to: q.from.slice(), ms: q.ms, ease: q.ease });\n v.handle = v.slot.lane.mix.cue({ patch, subjects: [key], seek: q.atEnd ? q.ms : 0 });\n v.patch = patch;\n patch.to(key, q.to.slice(), 0);\n if (v.queuedRate !== undefined) v.handle.rate = v.queuedRate;\n }\n queue.length = 0;\n time += dtMs;\n lanes.frame(time);\n rewinds.frame();\n },\n tween(s) {\n if (s.to.length !== s.from.length) {\n throw new Error(`codec: tween ${s.id} goes from ${s.from.length} axes to ${s.to.length}`);\n }\n const shared = s.on !== undefined;\n const slot = lanes.join(s.from.length, shared ? s.on : s.id, shared ? zeros(s.from.length) : s.atEnd ? s.to : s.from);\n const v = { kind: 'tween', slot, from: s.from, queued: s } as Voice;\n voices.set(s.id, v);\n queue.push(v);\n return slot;\n },\n spring(s) {\n const sp = { ...s, from: s.from.slice(), to: s.to && s.to.slice(), velocity: s.velocity.slice() };\n const shared = s.on !== undefined;\n const slot = lanes.join(sp.axes, shared ? s.on : s.id, shared ? new Array<number>(sp.axes).fill(0) : sp.from);\n const { handle, patch } = springVoice(slot, sp);\n const v: Voice = { kind: 'spring', slot, handle, patch, from: sp.from, spring: sp };\n voices.set(s.id, v);\n const reader = slot as Slot & SpringReader;\n if (!shared) reader.motion = () => current(v);\n return reader;\n },\n path(s) {\n const shared = s.on !== undefined;\n const from = s.at(0);\n const last = s.atEnd ? s.at(1) : undefined;\n const slot = lanes.join(s.axes, shared ? s.on : s.id, shared ? zeros(s.axes) : last ?? from);\n const v = { kind: 'path', slot, from, last } as Voice;\n const patch = fnPatch<unknown, Out>(s.ms, (phase) => {\n v.last = s.at(phase);\n return { v: v.last };\n }, { writes: ['v'] });\n // Held at its end until the animator stops it, so a frame between the two reads the end.\n v.handle = slot.lane.mix.cue({ patch, subjects: [slot.key], loop: false, freeze: 'after', seek: s.atEnd ? s.ms : 0 });\n voices.set(s.id, v);\n return slot;\n },\n retarget(id, to) {\n const v = get(id);\n if (v.kind !== 'spring') throw new Error(`codec: subject ${id} is a ${v.kind}; ${v.kind}s are not retargeted`);\n const sp = v.spring!;\n if ((to == null) === (sp.to == null)) {\n if (!to) return;\n sp.to = to.slice();\n v.patch.to!(v.slot.key, sp.to);\n return;\n }\n // Held and free run different patches, so the voice is re-cued from where it is.\n const now = current(v);\n respring(v, { ...sp, to: to && to.slice(), from: now.value, velocity: now.velocity });\n },\n recue(id, from, velocity, to) {\n const v = get(id);\n if (v.kind !== 'spring') throw new Error(`codec: subject ${id} is a ${v.kind}; only springs are re-cued`);\n respring(v, { ...v.spring!, from: from.slice(), velocity: velocity.slice(), to: to && to.slice() });\n },\n push(id, velocity) {\n const v = get(id);\n if (v.spring && !v.patch.read(v.slot.key)) v.spring.velocity = velocity.slice();\n v.patch.push?.(v.slot.key, velocity);\n },\n rate(id, rate) {\n const v = get(id);\n rewinds.rate(v, rate);\n if (v.queued) v.queuedRate = rate;\n else v.handle.rate = rate;\n },\n rewound: (id) => { const v = voices.get(id); return v !== undefined && rewinds.has(v); },\n stop,\n has: (id) => voices.has(id),\n own(id) {\n const v = voices.get(id);\n if (!v) return undefined;\n if (v.kind === 'spring') return current(v);\n if (v.kind === 'path') {\n return { value: v.last ?? v.from, velocity: new Array<number>(v.from.length).fill(0) };\n }\n return (!v.queued && v.patch.read(v.slot.key))\n || { value: v.queued?.atEnd ? v.queued.to : v.from, velocity: zeros(v.from.length) };\n },\n voiceCount: () => voices.size,\n columns: (group) => lanes.columns(group),\n };\n}\n","import type { AnimatorEventHub } from '../observe';\nimport type { Codec } from './codec';\nimport type { ActiveAnimation } from './context';\nimport type { TargetBook } from './offsets';\nimport type { Table } from './table';\nimport type { Emitter } from '@weasel-js/registry';\n\n/** The animator's clock: where its frames stand, and how fast they run. */\nexport interface AnimatorClock {\n /** The timestamp the codec last advanced to. Null after the page was hidden and while nothing\n * runs, so neither gap is charged to the codec; a tween starting then seeds it from `now()`. */\n frameT: number | null;\n /** The virtual ms its frames have advanced it by: each animation's own clock is read off it. */\n elapsed: number;\n timeScale: number;\n paused: boolean;\n /** -1 while an outside clock runs it backward, turning every animation as a negative time\n * scale does; otherwise 1. */\n drive: 1 | -1;\n}\n\n/** What {@link createFrame} needs of the animator around it. */\nexport interface FrameHost {\n clock: AnimatorClock;\n table: Pick<\n Table,\n 'animations' | 'retire' | 'reportEnd' | 'finish' | 'drop' | 'infoOf' | 'ticks' | 'clockOf' | 'awake' | 'waiting'\n >;\n codec: Pick<Codec, 'frame'>;\n targets: Pick<TargetBook, 'settle' | 'show'>;\n hub: AnimatorEventHub;\n /** Supervisor frame callbacks due this frame, run once its ticks are done. */\n afterTicks: (() => void)[];\n /** Told once a frame, after its ticks and its targets are shown. */\n subscribers: Pick<Emitter, 'emit'>;\n /** Folds again the holds of each target a tick touched. */\n refold(): void;\n requestFrame(): void;\n /** True once the host has unmounted; logs the first time. */\n tripwire(): boolean;\n}\n\nexport interface Frame {\n /** Runs one frame at timestamp `t`. */\n tick(t: number): void;\n /** Whether a frame is between reading the codec and showing its targets. */\n framing(): boolean;\n /** Whether an animation's own tick is running. */\n ticking(): boolean;\n}\n\nexport function createFrame(host: FrameHost): Frame {\n const { clock, table, hub } = host;\n const { animations } = table;\n let framing = false;\n // Counted around each animation's tick, so a re-entrant call (`decay.onTick` to\n // `adapter.setPose` to `animateOnSetPose`) can tell it is inside one and write through\n // rather than schedule a tween that would fight the caller.\n let tickDepth = 0;\n\n /** Ticks the animations with something to do this frame, as the table stood when the frame\n * began, and answers which finished. */\n const tickEach = (): ActiveAnimation[] => {\n const finished: ActiveAnimation[] = [];\n const threw: [ActiveAnimation, unknown][] = [];\n // One waiting for its `due` checks for nothing meanwhile, the host's unmount included:\n // once that has happened every animation is ticked, so each sees it and leaves.\n const all = table.waiting > 0 && host.tripwire();\n // A snapshot: an animation registered by this frame's ticks first ticks on the\n // next, or a zero-duration loop would chain inside one frame and never leave it.\n for (const anim of all ? [...animations.values()] : table.ticks()) {\n if (animations.get(anim.id) !== anim) continue;\n const scale = clock.paused ? 0 : clock.timeScale * clock.drive * (anim.paused ? 0 : anim.timeScale);\n tickDepth += 1;\n try {\n if (anim.tick(table.clockOf(anim), scale)) finished.push(anim);\n } catch (error) {\n threw.push([anim, error]);\n } finally {\n tickDepth -= 1;\n }\n }\n for (const [anim, error] of threw) {\n console.error('useAnimator: animation tick threw; retiring it', error);\n if (animations.get(anim.id) !== anim) continue;\n // One that ended before throwing (from `onDone`) is finished, not canceled.\n if (anim.ended) table.drop(anim);\n else table.retire(anim.id, undefined, true);\n if (hub.watched) hub.emit({ type: 'error', animation: table.infoOf(anim), error });\n }\n return finished;\n };\n\n return {\n tick(t) {\n // `t` comes from the frame clock, and `frameT` is seeded from `now()` while the animator\n // is idle. The two share a time origin in a browser, where the rAF timestamp and\n // `performance.now()` are both page-relative, but not everywhere: jsdom starts them\n // ~600ms apart. Time never runs against the way it is driven, so such a sample is never real.\n const frameDt = clock.frameT == null ? 0 : Math.max(0, (t - clock.frameT) * clock.drive);\n clock.frameT = t;\n framing = true;\n // Backward is each animation's own rate: the clock under them only goes forward.\n const dt = frameDt * (clock.paused ? 0 : Math.abs(clock.timeScale));\n clock.elapsed += dt;\n host.codec.frame(dt);\n host.targets.settle();\n for (const anim of tickEach()) {\n // Gone already if its own tick canceled it; replaced if something\n // revived it under the same id since.\n if (animations.get(anim.id) === anim) table.finish(anim.id);\n }\n for (const cb of host.afterTicks.splice(0)) {\n try { cb(); } catch (err) { console.error('useAnimator: a staggered start threw', err); }\n }\n host.refold();\n framing = false;\n host.targets.show();\n // After the tick batch, so each subscriber sees the latest color overrides and poses.\n host.subscribers.emit();\n if (table.awake) {\n host.requestFrame();\n return;\n }\n // As when the page was hidden: the time asleep is charged to nothing.\n clock.frameT = null;\n },\n framing: () => framing,\n ticking: () => tickDepth > 0,\n };\n}\n","import type { ColorOverrideRegistry } from '../colorRegistry';\nimport type { TrimOverrideRegistry } from '../trimRegistry';\nimport { AnimatorEventHub } from '../observe';\nimport type { Behind, TargetState } from '../target';\nimport type { Animator } from '../types';\nimport { createAnimatorApi } from './animatorApi';\nimport { createCodec } from './codec';\nimport type { ActiveAnimation, AnimationContext } from './context';\nimport { createFrame, type AnimatorClock } from './frame';\nimport { createTargetBook } from './offsets';\nimport { createTable } from './table';\nimport { createEmitter } from '@weasel-js/registry';\n\n/** What {@link createAnimatorCore} needs of whoever hosts it: a clock and a frame loop. */\nexport interface CoreHost {\n /** Now, on the clock the frame loop's timestamps are on. */\n now(): number;\n requestFrame(): void;\n cancelFrame(): void;\n /** True once the host has unmounted; logs the first time. */\n tripwire(): boolean;\n colorOverrides: ColorOverrideRegistry;\n trimOverrides: TrimOverrideRegistry;\n}\n\n/** An animator apart from React: its table, clock, and codec, driven by the host's frames. */\nexport interface AnimatorCore {\n api: Animator;\n /** Runs one frame at timestamp `t`. */\n tick(t: number): void;\n /** Runs one frame at time `t` of an outside clock, which may have gone back since the last:\n * the animations then play backward over the difference, as under a negative time scale.\n * `rate` is the clock's, which sets the direction when it has not moved. */\n follow(t: number, rate: number): void;\n /** Says the frame loop is back after time unseen, which is charged to no animation. */\n resumed(): void;\n}\n\nexport function createAnimatorCore(host: CoreHost): AnimatorCore {\n const clock: AnimatorClock = { frameT: null, elapsed: 0, timeScale: 1, paused: false, drive: 1 };\n const hub = new AnimatorEventHub();\n const codec = createCodec((on) => {\n // A move behind a row's holds runs in its table's lane for moves; the rest of a row's voices\n // run in its table's lane.\n if ('move' in on) return (on as Behind).move?.place;\n const { row } = on as TargetState;\n return row ? { group: row.table, tag: row.index } : undefined;\n });\n const afterTicks: (() => void)[] = [];\n const subscribers = createEmitter();\n let nextId = 1;\n let atEnd = false;\n const seedClock = (): void => { if (clock.frameT == null) clock.frameT = host.now(); };\n\n /** Targets whose holds a tick touched, folded again once the frame's ticks are done. */\n const touched = new Set<TargetState>();\n const refold = (s: TargetState): void => {\n if (s.holds) s.holds.store.refold(s.holds.row);\n // Between frames a table's `shown` is read apart for such a row; a frame's pass shows it.\n if (s.row && !frame.framing()) s.row.table.mark(s.row.index);\n };\n const refoldTouched = (): void => {\n for (const s of touched) refold(s);\n touched.clear();\n };\n const table = createTable({\n codec,\n hub,\n elapsed: () => clock.elapsed,\n direction: () => (clock.timeScale * clock.drive < 0 ? -1 : 1),\n seedClock,\n showNow: (target) => targets.showNow(target),\n resting: () => targets.resting,\n framing: () => frame.framing(),\n requestFrame: host.requestFrame,\n });\n const targets = createTargetBook({\n stop: (s) => {\n for (const a of [...table.on(s)]) table.retire(a.id);\n for (const part of [...s.parts]) part();\n },\n columns: (table) => codec.columns(table),\n });\n const frame = createFrame({\n clock, table, codec, targets, hub, afterTicks, subscribers, refold: refoldTouched,\n requestFrame: host.requestFrame, tripwire: host.tripwire,\n });\n\n const ctx: AnimationContext = {\n codec,\n targets,\n nextId: () => nextId++,\n atEnd: () => atEnd,\n starting: (end, start) => {\n const was = atEnd;\n atEnd = end;\n try { return start(); } finally { atEnd = was; }\n },\n seedClock,\n register: table.register,\n has: (id) => table.animations.has(id),\n defer: table.defer,\n reportEnd: table.reportEnd,\n finish: table.finish,\n touch: (target, at) => {\n if (frame.framing() && !at) { touched.add(target); return; }\n touched.delete(target);\n refold(target);\n if (!frame.framing()) host.requestFrame();\n },\n wake: () => { if (!frame.framing()) host.requestFrame(); },\n tripwire: host.tripwire,\n interrupt: (key, by) => table.cancelByKey(key, by as ActiveAnimation),\n velocityUnder: (key, target) => {\n let sum: number[] | null = null;\n for (const a of table.under(key)) {\n if (a.target !== target) continue;\n const v = a.velocity?.() ?? codec.own(a.id)?.velocity;\n if (v) sum = sum ? sum.map((x, i) => x + v[i]!) : v.slice();\n }\n return sum;\n },\n };\n\n const api = createAnimatorApi({\n ctx,\n table,\n clock,\n hub,\n ticking: frame.ticking,\n afterTicks: (cb) => { afterTicks.push(cb); },\n subscribers,\n colorOverrides: host.colorOverrides,\n trimOverrides: host.trimOverrides,\n halt: host.cancelFrame,\n });\n\n return {\n api,\n tick: frame.tick,\n follow(t, rate) {\n const moved = clock.frameT == null ? 0 : t - clock.frameT;\n const drive = moved < 0 || (moved === 0 && rate < 0) ? -1 : 1;\n if (drive !== clock.drive) table.turn(() => { clock.drive = drive; });\n frame.tick(t);\n },\n resumed() {\n // An hour spent hidden is not an hour the animation ran: dropping the last frame's\n // timestamp makes the resuming frame advance the clock by nothing.\n clock.frameT = null;\n },\n };\n}\n","import { useCallback, useEffect, useInsertionEffect, useMemo, useRef } from 'react';\nimport { isDev, useLatest, useVisibleRaf } from '@weasel-js/react';\nimport type { Clock } from '@weasel-js/clock';\nimport { ColorOverrideRegistry } from './colorRegistry';\nimport { TrimOverrideRegistry } from './trimRegistry';\nimport { createAnimatorCore, type AnimatorCore } from './engine/core';\nimport type { Animator } from './types';\nimport type { UseAnimatorOptions } from './useAnimatorOptions';\n\n/** Create the animator for a canvas. One rAF loop drives every animation it\n * owns, or the clock in `opts.clock` does, and everything still running is\n * canceled on unmount. */\nexport function useAnimator(opts: UseAnimatorOptions = {}): Animator {\n const optsRef = useLatest(opts);\n const colorOverrides = useRef<ColorOverrideRegistry>(new ColorOverrideRegistry());\n const trimOverrides = useRef<TrimOverrideRegistry>(new TrimOverrideRegistry());\n\n // The loop runs behind the visibility gate. The core is built in the memo\n // below, so the frame callback reaches it through a ref, published once the\n // memo's render commits. On a clock, the clock's frames advance it, and the\n // loop only shows a change made between them, at the time the clock stands.\n const coreRef = useRef<AnimatorCore | null>(null);\n const followingRef = useRef(false);\n const follow = useCallback((clock: Clock) => {\n followingRef.current = true;\n try { coreRef.current?.follow(clock.elapsed, clock.rate); } finally { followingRef.current = false; }\n }, []);\n const frameLoop = useVisibleRaf(\n useCallback((t: number) => {\n const handle = optsRef.current.clock;\n if (handle) follow(handle.clock);\n else coreRef.current?.tick(t);\n }, [follow, optsRef]),\n {\n requestFrame: opts.requestFrame,\n cancelFrame: opts.cancelFrame,\n onResume: () => { if (!optsRef.current.clock) coreRef.current?.resumed(); },\n },\n );\n const frameLoopRef = useLatest(frameLoop);\n\n // Tripwire: dev-only flag that every tween/spring/decay's tick reads to\n // detect \"animation fired after the host component unmounted.\" This is a\n // symptom of cleanup not running (regression) — typically because someone\n // refactored useAnimator and forgot to wire the unmount effect. The flag\n // flips false on cleanup; ticks see it and log a one-time error so the\n // bug is loud rather than just visually-doubled animation.\n const mountedRef = useRef(true);\n const trippedRef = useRef(false);\n\n const core = useMemo(() => {\n const tripwire = (): boolean => {\n if (mountedRef.current) return false;\n if (!trippedRef.current) {\n trippedRef.current = true;\n if (isDev()) {\n console.error(\n 'weasel useAnimator: animation tick fired after the host component unmounted. ' +\n 'This usually means cleanup logic was bypassed — check for refactors that ' +\n 'removed the unmount effect or replaced cancelAll with a custom path.',\n );\n }\n }\n return true;\n };\n // Default to performance.now() so the time origin matches the\n // requestAnimationFrame callback's DOMHighResTimeStamp argument.\n // Using Date.now() here would mix epoch-millis with page-relative-millis,\n // producing huge negative `elapsed` values that clamp tween `t` to 0\n // forever (never reaching completion).\n const now = (): number => {\n const handle = optsRef.current.clock;\n if (handle) return handle.clock.elapsed;\n return (optsRef.current.now ?? (typeof performance !== 'undefined' ? performance.now.bind(performance) : Date.now))();\n };\n return createAnimatorCore({\n now,\n // On a clock, a frame asked for from inside one comes with the clock's next move: one shown\n // at the same time would only ask again.\n requestFrame: () => { if (!followingRef.current) frameLoopRef.current.request(); },\n cancelFrame: () => frameLoopRef.current.cancel(),\n tripwire,\n colorOverrides: colorOverrides.current,\n trimOverrides: trimOverrides.current,\n });\n }, [frameLoopRef, optsRef]);\n\n useInsertionEffect(() => {\n coreRef.current = core;\n }, [core]);\n\n // StrictMode-safe cleanup: when the component unmounts (including the\n // dev-mode double-mount that StrictMode performs), cancel every running\n // animation and stop the RAF loop. Without this, the FIRST mount's\n // animator keeps ticking with stale callbacks pointing at the unmounted\n // adapter, while the SECOND mount creates its own animator on top —\n // visible to the user as every animation playing twice.\n const handle = opts.clock;\n useEffect(() => {\n if (!handle) return;\n // The last frame's time may stand on another clock's.\n core.resumed();\n return handle.onFrame(() => { if (core.api.isActive()) follow(handle.clock); });\n }, [core, handle, follow]);\n\n const { api } = core;\n useEffect(() => {\n const overrides = colorOverrides.current;\n const trims = trimOverrides.current;\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n api.cancelAll();\n overrides.clearAll();\n trims.clearAll();\n };\n }, [api]);\n\n return api;\n}\n"]}