@linker-design-plus/timeline-track 1.0.7 → 1.0.9

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/README.md CHANGED
@@ -362,6 +362,7 @@ new TimelineManager(config?: Partial<TimelineConfig>)
362
362
  | `zoom_change` | 缩放比例变化 | `{ zoom: number }` |
363
363
  | `history_change` | 历史记录变更 | `{ canUndo: boolean, canRedo: boolean }` |
364
364
  | `track_duration_change` | 轨道总时长变化 | `{ duration: number }` |
365
+ | `buffering_state_change` | 视频缓冲状态变化 | `{ isBuffering: boolean }` |
365
366
 
366
367
  ### ClipConfig 接口
367
368
 
@@ -13,7 +13,6 @@ export declare class Timeline {
13
13
  private onZoomChange;
14
14
  private onScrollChange;
15
15
  private animationFrameId;
16
- private isZooming;
17
16
  private scrollbarHeight;
18
17
  private scrollbarY;
19
18
  private isScrollbarDragging;
@@ -19,3 +19,4 @@ export declare const TIME_SCALE: {
19
19
  MAX_HEIGHT: number;
20
20
  };
21
21
  export declare const TIMELINE_LEFT_PADDING = 15;
22
+ export declare const MIN_CLIP_LINE_WIDTH = 6;
@@ -1,4 +1,4 @@
1
- import { TimelineConfig, Clip, ClipConfig, TimeMs, PlayState, Action, TimelineEvent, EventListener, VideoPreviewConfig, TimelineExportData, ThumbnailProvider } from './types';
1
+ import { TimelineConfig, Clip, ClipConfig, TimeMs, PlayState, Action, TimelineEvent, EventListener as TimelineEventListener, VideoPreviewConfig, TimelineExportData, ThumbnailProvider } from './types';
2
2
  export declare class TimelineManager {
3
3
  private timeline;
4
4
  private tracks;
@@ -20,6 +20,11 @@ export declare class TimelineManager {
20
20
  private lastTrackDuration;
21
21
  private thumbnailProvider;
22
22
  private canPlay;
23
+ private isBuffering;
24
+ private sourceLoadingCount;
25
+ private playStateBeforeBuffering;
26
+ private isPausingForBuffering;
27
+ private videoBufferingListeners;
23
28
  constructor(config?: Partial<TimelineConfig>);
24
29
  init(container: HTMLElement): void;
25
30
  play(): void;
@@ -29,6 +34,11 @@ export declare class TimelineManager {
29
34
  setCurrentTime(time: TimeMs): void;
30
35
  getCurrentTime(): TimeMs;
31
36
  setZoom(zoom: number): void;
37
+ /**
38
+ * 以游标(playhead)为中心设置缩放,用于外置 slider 等非幕布上的缩放操作
39
+ * 调整 scrollLeft 使游标在屏幕上的位置保持不变
40
+ */
41
+ setZoomCenteredOnPlayhead(zoom: number): void;
32
42
  getZoom(): number;
33
43
  /**
34
44
  * 设置播放倍速
@@ -45,6 +55,17 @@ export declare class TimelineManager {
45
55
  * @returns 是否可以播放
46
56
  */
47
57
  getCanPlay(): boolean;
58
+ /**
59
+ * 当前是否存在视频源加载任务(例如 addClip 期间读取视频时长)
60
+ */
61
+ isSourceLoading(): boolean;
62
+ /**
63
+ * 获取视频源加载状态
64
+ */
65
+ getSourceLoadingState(): {
66
+ isLoading: boolean;
67
+ pending: number;
68
+ };
48
69
  /**
49
70
  * 设置缩略图提供器
50
71
  * @param provider 缩略图提供器
@@ -68,6 +89,11 @@ export declare class TimelineManager {
68
89
  */
69
90
  refreshAllClipThumbnails(): Promise<boolean[]>;
70
91
  addClip(clipConfig: ClipConfig): Promise<string>;
92
+ /**
93
+ * 批量添加片段。批量模式下仅维护一段连续的视频源加载状态。
94
+ */
95
+ addClips(clipConfigs: ClipConfig[]): Promise<string[]>;
96
+ private addClipInternal;
71
97
  removeClip(clipId: string): void;
72
98
  updateClip(clipId: string, updates: Partial<Clip>): void;
73
99
  splitClip(clipId: string, time: TimeMs): void;
@@ -109,9 +135,11 @@ export declare class TimelineManager {
109
135
  private handleClipSelect;
110
136
  private handleActionUndo;
111
137
  private handleActionRedo;
112
- on(event: TimelineEvent, listener: EventListener): void;
113
- off(event: TimelineEvent, listener: EventListener): void;
138
+ on(event: TimelineEvent, listener: TimelineEventListener): void;
139
+ off(event: TimelineEvent, listener: TimelineEventListener): void;
114
140
  private emitEvent;
141
+ private beginSourceLoading;
142
+ private endSourceLoading;
115
143
  getPlayState(): PlayState;
116
144
  setDuration(duration: TimeMs): void;
117
145
  getDuration(): TimeMs;
@@ -168,12 +196,17 @@ export declare class TimelineManager {
168
196
  /** 清除历史堆栈 */
169
197
  clearHistory(): void;
170
198
  private handleVideoTimeUpdate;
199
+ private getLastClipByEndTime;
171
200
  private handlePlayStateChange;
172
201
  private handleClipChange;
173
202
  private findClipAtTime;
174
203
  private loadClipToVideo;
204
+ private attachVideoBufferingListeners;
205
+ private detachVideoBufferingListeners;
206
+ private enterBuffering;
207
+ private exitBuffering;
175
208
  /**
176
- * 检查轨道总时长是否变化,如果变化则触发事件
209
+ * 检查轨道总时长是否变化,如果变化则触发事件并更新时间轴时长
177
210
  */
178
211
  private checkTrackDurationChange;
179
212
  }
@@ -123,7 +123,7 @@ export interface HistoryState {
123
123
  past: Action[];
124
124
  future: Action[];
125
125
  }
126
- export type TimelineEvent = 'time_change' | 'play_state_change' | 'clip_added' | 'clip_removed' | 'clip_updated' | 'zoom_change' | 'history_change' | 'track_duration_change' | 'clip_selected' | 'speed_change' | 'can_play_change';
126
+ export type TimelineEvent = 'time_change' | 'play_state_change' | 'clip_added' | 'clip_removed' | 'clip_updated' | 'zoom_change' | 'history_change' | 'track_duration_change' | 'clip_selected' | 'speed_change' | 'can_play_change' | 'buffering_state_change' | 'source_loading_change';
127
127
  export interface TimeChangeData {
128
128
  time: TimeMs;
129
129
  }
@@ -142,6 +142,13 @@ export interface ClipRemovedEventData {
142
142
  export interface CanPlayChangeData {
143
143
  canPlay: boolean;
144
144
  }
145
+ export interface BufferingStateChangeData {
146
+ isBuffering: boolean;
147
+ }
148
+ export interface SourceLoadingChangeData {
149
+ isLoading: boolean;
150
+ pending: number;
151
+ }
145
152
  export interface EventListener {
146
153
  (event: TimelineEvent, data?: any): void;
147
154
  }