@flighthq/timeline 0.3.0-next.906.07cea63 → 0.3.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/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { addTimelineFrameScript, createTimeline, createTimelineSource, disposeTimelineSignals, enableTimelineSignals, findTimelineLabel, getTimelineCurrentLabel, getTimelineFrameScript, gotoAndPlayTimeline, gotoAndStopTimeline, nextFrameTimeline, playTimeline, prevFrameTimeline, removeTimelineFrameScript, stopTimeline, updateTimeline, } from './contract';
1
+ export { addTimelineFrameScript, clearTimelineFrameScripts, createTimeline, createTimelineSource, disposeTimelineSignals, enableTimelineSignals, findTimelineLabel, getTimelineCurrentLabel, getTimelineFrameScript, getTimelineFrameScriptFrames, getTimelineLabels, gotoAndPlayTimeline, gotoAndStopTimeline, nextFrameTimeline, playTimeline, prevFrameTimeline, removeTimelineFrameScript, stopTimeline, updateTimeline, } from './contract';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { addTimelineFrameScript, createTimeline, createTimelineSource, disposeTimelineSignals, enableTimelineSignals, findTimelineLabel, getTimelineCurrentLabel, getTimelineFrameScript, gotoAndPlayTimeline, gotoAndStopTimeline, nextFrameTimeline, playTimeline, prevFrameTimeline, removeTimelineFrameScript, stopTimeline, updateTimeline, } from './contract';
1
+ export { addTimelineFrameScript, clearTimelineFrameScripts, createTimeline, createTimelineSource, disposeTimelineSignals, enableTimelineSignals, findTimelineLabel, getTimelineCurrentLabel, getTimelineFrameScript, getTimelineFrameScriptFrames, getTimelineLabels, gotoAndPlayTimeline, gotoAndStopTimeline, nextFrameTimeline, playTimeline, prevFrameTimeline, removeTimelineFrameScript, stopTimeline, updateTimeline, } from './contract';
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC"}
@@ -1,10 +1,12 @@
1
- import type { Node2D, FrameScript, Timeline, TimelineLabel, TimelineSignals, TimelineSource } from '@flighthq/types/contract';
1
+ import type { Node2D, FrameScript, Timeline, TimelineCue, TimelineLabel, TimelineSignals, TimelineSource } from '@flighthq/types/contract';
2
2
  export declare function addTimelineFrameScript(timeline: Timeline, frame: number | string, script: FrameScript): void;
3
+ export declare function clearTimelineFrameScripts(timeline: Timeline): void;
3
4
  export declare function createTimeline(obj?: Partial<Timeline>): Timeline;
4
5
  export declare function createTimelineSource(obj: {
5
6
  totalFrames?: number;
6
7
  frameRate?: number | null;
7
8
  labels?: readonly TimelineLabel[];
9
+ cues?: readonly TimelineCue[];
8
10
  constructFrame?: (target: Node2D, frame: number) => void;
9
11
  }): TimelineSource;
10
12
  export declare function disposeTimelineSignals(timeline: Timeline): void;
@@ -12,6 +14,8 @@ export declare function enableTimelineSignals(timeline: Timeline): TimelineSigna
12
14
  export declare function findTimelineLabel(timeline: Readonly<Timeline>, name: string): TimelineLabel | null;
13
15
  export declare function getTimelineCurrentLabel(timeline: Readonly<Timeline>): TimelineLabel | null;
14
16
  export declare function getTimelineFrameScript(timeline: Readonly<Timeline>, frame: number | string): FrameScript | null;
17
+ export declare function getTimelineFrameScriptFrames(timeline: Readonly<Timeline>): readonly number[];
18
+ export declare function getTimelineLabels(timeline: Readonly<Timeline>): readonly TimelineLabel[];
15
19
  export declare function gotoAndPlayTimeline(timeline: Timeline, frame: number | string): void;
16
20
  export declare function gotoAndStopTimeline(timeline: Timeline, frame: number | string): void;
17
21
  export declare function nextFrameTimeline(timeline: Timeline): void;
@@ -19,5 +23,5 @@ export declare function playTimeline(timeline: Timeline): void;
19
23
  export declare function prevFrameTimeline(timeline: Timeline): void;
20
24
  export declare function removeTimelineFrameScript(timeline: Timeline, frame: number | string): void;
21
25
  export declare function stopTimeline(timeline: Timeline): void;
22
- export declare function updateTimeline(timeline: Timeline, deltaTime: number): void;
26
+ export declare function updateTimeline(timeline: Timeline, deltaTime: number): boolean;
23
27
  //# sourceMappingURL=timeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,QAAQ,EAER,aAAa,EACb,eAAe,EACf,cAAc,EACf,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAG5G;AAED,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAYhE;AAMD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D,GAAG,cAAc,CAOjB;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAE/D;AAID,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAEzE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAElG;AAID,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,aAAa,GAAG,IAAI,CAU1F;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,CAI/G;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAG1D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAIrD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAG1D;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1F;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAErD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAS1E"}
1
+ {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,QAAQ,EACR,WAAW,EAEX,aAAa,EACb,eAAe,EACf,cAAc,EACf,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAG5G;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAElE;AAED,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAahE;AAMD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D,GAAG,cAAc,CAQjB;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAE/D;AAID,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAEzE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAElG;AAID,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,aAAa,GAAG,IAAI,CAU1F;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,CAI/G;AAID,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,MAAM,EAAE,CAE5F;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,aAAa,EAAE,CAExF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAG1D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAIrD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAG1D;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1F;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAErD;AAMD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAU7E"}
package/dist/timeline.js CHANGED
@@ -3,10 +3,14 @@ export function addTimelineFrameScript(timeline, frame, script) {
3
3
  const resolved = resolveFrame(timeline, frame);
4
4
  (timeline.frameScripts ??= new Map()).set(resolved, script);
5
5
  }
6
+ export function clearTimelineFrameScripts(timeline) {
7
+ timeline.frameScripts = null;
8
+ }
6
9
  export function createTimeline(obj) {
7
10
  return {
8
11
  source: obj?.source ?? null,
9
12
  target: obj?.target ?? null,
13
+ cueRegistry: obj?.cueRegistry ?? null,
10
14
  currentFrame: obj?.currentFrame ?? 1,
11
15
  frameScripts: obj?.frameScripts ?? null,
12
16
  isPlaying: obj?.isPlaying ?? false,
@@ -25,6 +29,7 @@ export function createTimelineSource(obj) {
25
29
  totalFrames: obj.totalFrames ?? 1,
26
30
  frameRate: obj.frameRate ?? null,
27
31
  labels: obj.labels ?? EMPTY_LABELS,
32
+ cues: obj.cues ?? EMPTY_CUES,
28
33
  constructFrame: obj.constructFrame ?? noopConstructFrame,
29
34
  };
30
35
  }
@@ -59,6 +64,14 @@ export function getTimelineFrameScript(timeline, frame) {
59
64
  const resolved = resolveFrame(timeline, frame);
60
65
  return timeline.frameScripts.get(resolved) ?? null;
61
66
  }
67
+ // Lists authored script frames in their insertion order. Returns a shared empty-array sentinel when
68
+ // none are attached; the returned non-empty array is a snapshot and cannot mutate the timeline's Map.
69
+ export function getTimelineFrameScriptFrames(timeline) {
70
+ return timeline.frameScripts === null ? EMPTY_FRAMES : [...timeline.frameScripts.keys()];
71
+ }
72
+ export function getTimelineLabels(timeline) {
73
+ return timeline.source?.labels ?? EMPTY_LABELS;
74
+ }
62
75
  export function gotoAndPlayTimeline(timeline, frame) {
63
76
  playTimeline(timeline);
64
77
  seekTimeline(timeline, resolveFrame(timeline, frame));
@@ -92,16 +105,23 @@ export function removeTimelineFrameScript(timeline, frame) {
92
105
  export function stopTimeline(timeline) {
93
106
  timeline.isPlaying = false;
94
107
  }
108
+ // Returns whether this call realized a new frame (constructFrame/scripts/signals), not merely whether
109
+ // the numeric playhead was advanced. Timed sources advance before realization, so currentFrame is the
110
+ // realized frame on return. A frameRate-null source realizes currentFrame first and then advances its
111
+ // playhead for the next call, so currentFrame reads one ahead of lastFrameUpdate between updates.
95
112
  export function updateTimeline(timeline, deltaTime) {
96
113
  const frameRate = getTimelineFrameRate(timeline);
97
114
  if (timeline.isPlaying && frameRate !== null) {
98
115
  timeline.currentFrame = advanceFrame(timeline, deltaTime);
99
116
  }
100
- fireConstructFrame(timeline);
117
+ const changed = fireConstructFrame(timeline);
101
118
  if (timeline.isPlaying && frameRate === null) {
102
119
  timeline.currentFrame = advanceFrame(timeline, deltaTime);
103
120
  }
121
+ return changed;
104
122
  }
123
+ const EMPTY_FRAMES = [];
124
+ const EMPTY_CUES = [];
105
125
  const EMPTY_LABELS = [];
106
126
  function noopConstructFrame() { }
107
127
  // Frame accounting matches Flash/OpenFL: when accumulated time spans multiple frames in one update,
@@ -167,7 +187,7 @@ function fireConstructFrame(timeline) {
167
187
  const previous = timeline.lastFrameUpdate;
168
188
  const current = timeline.currentFrame;
169
189
  if (current === previous)
170
- return;
190
+ return false;
171
191
  const signals = timeline.signals;
172
192
  const target = timeline.target;
173
193
  const frameEvent = { frame: current, previousFrame: previous };
@@ -185,13 +205,11 @@ function fireConstructFrame(timeline) {
185
205
  }
186
206
  if (signals !== null)
187
207
  emitSignal(signals.onFrameConstructed, frameEvent);
208
+ return true;
188
209
  }
189
210
  function getTimelineFrameRate(timeline) {
190
211
  return timeline.source?.frameRate ?? null;
191
212
  }
192
- function getTimelineLabels(timeline) {
193
- return timeline.source?.labels ?? EMPTY_LABELS;
194
- }
195
213
  function getTimelineTotalFrames(timeline) {
196
214
  return timeline.source?.totalFrames ?? 1;
197
215
  }
@@ -1 +1 @@
1
- {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "name": "@flighthq/timeline",
3
- "version": "0.3.0-next.906.07cea63",
3
+ "version": "0.3.0",
4
+ "author": "Joshua Granick and other contributors",
5
+ "license": "MIT",
4
6
  "repository": {
5
7
  "type": "git",
6
8
  "url": "https://github.com/flighthq/flight.git",
@@ -36,8 +38,8 @@
36
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
37
39
  },
38
40
  "dependencies": {
39
- "@flighthq/signals": "0.3.0-next.906.07cea63",
40
- "@flighthq/types": "0.3.0-next.906.07cea63"
41
+ "@flighthq/signals": "0.3.0",
42
+ "@flighthq/types": "0.3.0"
41
43
  },
42
44
  "devDependencies": {
43
45
  "typescript": "^5.3.0"
@@ -2,6 +2,7 @@ import type { Node2D, Timeline } from '@flighthq/types/contract';
2
2
 
3
3
  import {
4
4
  addTimelineFrameScript,
5
+ clearTimelineFrameScripts,
5
6
  createTimeline,
6
7
  createTimelineSource,
7
8
  disposeTimelineSignals,
@@ -9,6 +10,8 @@ import {
9
10
  findTimelineLabel,
10
11
  getTimelineCurrentLabel,
11
12
  getTimelineFrameScript,
13
+ getTimelineFrameScriptFrames,
14
+ getTimelineLabels,
12
15
  gotoAndPlayTimeline,
13
16
  gotoAndStopTimeline,
14
17
  nextFrameTimeline,
@@ -77,6 +80,25 @@ describe('addTimelineFrameScript', () => {
77
80
  });
78
81
  });
79
82
 
83
+ describe('clearTimelineFrameScripts', () => {
84
+ it('is an idempotent no-op when no scripts are attached', () => {
85
+ const t = make();
86
+ clearTimelineFrameScripts(t);
87
+ expect(t.frameScripts).toBeNull();
88
+ });
89
+
90
+ it('clears every attached script and restores the null storage sentinel', () => {
91
+ const t = make();
92
+ addTimelineFrameScript(t, 1, () => {});
93
+ addTimelineFrameScript(t, 3, () => {});
94
+ clearTimelineFrameScripts(t);
95
+ expect(t.frameScripts).toBeNull();
96
+ expect(getTimelineFrameScriptFrames(t)).toEqual([]);
97
+ expect(getTimelineFrameScript(t, 1)).toBeNull();
98
+ expect(getTimelineFrameScript(t, 3)).toBeNull();
99
+ });
100
+ });
101
+
80
102
  describe('createTimeline', () => {
81
103
  it('starts at frame 1, stopped, lastFrameUpdate -1', () => {
82
104
  const t = make();
@@ -300,6 +322,37 @@ describe('getTimelineFrameScript', () => {
300
322
  });
301
323
  });
302
324
 
325
+ describe('getTimelineFrameScriptFrames', () => {
326
+ it('returns an empty-array sentinel when no scripts are attached', () => {
327
+ expect(getTimelineFrameScriptFrames(make())).toEqual([]);
328
+ });
329
+
330
+ it('returns a snapshot of authored frames in insertion order', () => {
331
+ const t = make();
332
+ addTimelineFrameScript(t, 3, () => {});
333
+ addTimelineFrameScript(t, 1, () => {});
334
+ const frames = getTimelineFrameScriptFrames(t) as number[];
335
+ expect(frames).toEqual([3, 1]);
336
+ frames.push(2);
337
+ expect(getTimelineFrameScriptFrames(t)).toEqual([3, 1]);
338
+ });
339
+ });
340
+
341
+ describe('getTimelineLabels', () => {
342
+ it('returns an empty-array sentinel when the timeline has no labels', () => {
343
+ expect(getTimelineLabels(createTimeline())).toEqual([]);
344
+ });
345
+
346
+ it('returns the source label list as a read-only view', () => {
347
+ const labels = [
348
+ { name: 'idle', frame: 1 },
349
+ { name: 'run', frame: 3 },
350
+ ];
351
+ const t = make({ labels });
352
+ expect(getTimelineLabels(t)).toBe(labels);
353
+ });
354
+ });
355
+
303
356
  describe('gotoAndPlayTimeline', () => {
304
357
  it('seeks to frame and starts playing', () => {
305
358
  const t = make();
@@ -438,18 +491,39 @@ describe('updateTimeline', () => {
438
491
  it('fires constructFrame for frame 1 on first update even when stopped', () => {
439
492
  const frames: number[] = [];
440
493
  const t = make({ constructFrame: (f) => frames.push(f) });
441
- updateTimeline(t, 0);
494
+ expect(updateTimeline(t, 0)).toBe(true);
442
495
  expect(frames).toEqual([1]);
443
496
  });
444
497
 
445
498
  it('does not double-fire constructFrame on repeated stopped updates', () => {
446
499
  const frames: number[] = [];
447
500
  const t = make({ constructFrame: (f) => frames.push(f) });
448
- updateTimeline(t, 0);
449
- updateTimeline(t, 0);
501
+ expect(updateTimeline(t, 0)).toBe(true);
502
+ expect(updateTimeline(t, 0)).toBe(false);
450
503
  expect(frames).toEqual([1]);
451
504
  });
452
505
 
506
+ it('returns false when a timed update accumulates time without realizing another frame', () => {
507
+ const t = make({ frameRate: 10 }); // 100ms/frame
508
+ playTimeline(t);
509
+ expect(updateTimeline(t, 0)).toBe(true); // realizes the initial frame
510
+ expect(updateTimeline(t, 50)).toBe(false);
511
+ expect(updateTimeline(t, 50)).toBe(true);
512
+ });
513
+
514
+ it('reports the realized frame before frameRate-null advances its next-call playhead', () => {
515
+ const frames: number[] = [];
516
+ const t = make({ frameRate: null, constructFrame: (f) => frames.push(f) });
517
+ playTimeline(t);
518
+ expect(updateTimeline(t, 0)).toBe(true);
519
+ expect(t.lastFrameUpdate).toBe(1);
520
+ expect(t.currentFrame).toBe(2);
521
+ expect(updateTimeline(t, 0)).toBe(true);
522
+ expect(t.lastFrameUpdate).toBe(2);
523
+ expect(t.currentFrame).toBe(3);
524
+ expect(frames).toEqual([1, 2]);
525
+ });
526
+
453
527
  it('advances one frame per update when frameRate is null', () => {
454
528
  const frames: number[] = [];
455
529
  const t = make({ frameRate: null, constructFrame: (f) => frames.push(f) });