@helios-project/player 0.48.3

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.
@@ -0,0 +1,40 @@
1
+ export type TextTrackMode = 'disabled' | 'hidden' | 'showing';
2
+ export interface TrackHost {
3
+ handleTrackModeChange(track: HeliosTextTrack): void;
4
+ }
5
+ export declare class HeliosCue {
6
+ startTime: number;
7
+ endTime: number;
8
+ text: string;
9
+ constructor(startTime: number, endTime: number, text: string);
10
+ }
11
+ export declare const CueClass: any;
12
+ export declare class HeliosTextTrack extends EventTarget {
13
+ private _mode;
14
+ private _cues;
15
+ private _kind;
16
+ private _label;
17
+ private _language;
18
+ private _id;
19
+ private _host;
20
+ constructor(kind: string, label: string, language: string, host: TrackHost);
21
+ get kind(): string;
22
+ get label(): string;
23
+ get language(): string;
24
+ get id(): string;
25
+ get cues(): any[];
26
+ get mode(): TextTrackMode;
27
+ set mode(value: TextTrackMode);
28
+ addCue(cue: any): void;
29
+ removeCue(cue: any): void;
30
+ }
31
+ export declare class HeliosTextTrackList extends EventTarget implements Iterable<HeliosTextTrack> {
32
+ private tracks;
33
+ get length(): number;
34
+ [index: number]: HeliosTextTrack;
35
+ [Symbol.iterator](): Iterator<HeliosTextTrack>;
36
+ addTrack(track: HeliosTextTrack): void;
37
+ getTrackById(id: string): HeliosTextTrack | null;
38
+ removeTrack(track: HeliosTextTrack): void;
39
+ set onaddtrack(handler: ((event: any) => void) | null);
40
+ }
@@ -0,0 +1,99 @@
1
+ // Shim for VTTCue if not present (e.g. JSDOM, older browsers)
2
+ const GlobalVTTCue = (typeof window !== 'undefined' && window.VTTCue) || null;
3
+ export class HeliosCue {
4
+ startTime;
5
+ endTime;
6
+ text;
7
+ constructor(startTime, endTime, text) {
8
+ this.startTime = startTime;
9
+ this.endTime = endTime;
10
+ this.text = text;
11
+ }
12
+ }
13
+ export const CueClass = GlobalVTTCue || HeliosCue;
14
+ export class HeliosTextTrack extends EventTarget {
15
+ _mode = 'disabled';
16
+ _cues = [];
17
+ _kind;
18
+ _label;
19
+ _language;
20
+ _id;
21
+ _host;
22
+ constructor(kind, label, language, host) {
23
+ super();
24
+ this._kind = kind;
25
+ this._label = label;
26
+ this._language = language;
27
+ this._id = Math.random().toString(36).substring(2) + Date.now().toString(36);
28
+ this._host = host;
29
+ }
30
+ get kind() { return this._kind; }
31
+ get label() { return this._label; }
32
+ get language() { return this._language; }
33
+ get id() { return this._id; }
34
+ get cues() { return this._cues; }
35
+ get mode() {
36
+ return this._mode;
37
+ }
38
+ set mode(value) {
39
+ if (this._mode !== value) {
40
+ this._mode = value;
41
+ this._host.handleTrackModeChange(this);
42
+ }
43
+ }
44
+ addCue(cue) {
45
+ this._cues.push(cue);
46
+ this._cues.sort((a, b) => a.startTime - b.startTime);
47
+ // If we are showing, we need to update the host (controller) immediately with new cues
48
+ if (this._mode === 'showing') {
49
+ this._host.handleTrackModeChange(this);
50
+ }
51
+ }
52
+ removeCue(cue) {
53
+ const idx = this._cues.indexOf(cue);
54
+ if (idx !== -1) {
55
+ this._cues.splice(idx, 1);
56
+ if (this._mode === 'showing') {
57
+ this._host.handleTrackModeChange(this);
58
+ }
59
+ }
60
+ }
61
+ }
62
+ export class HeliosTextTrackList extends EventTarget {
63
+ tracks = [];
64
+ get length() { return this.tracks.length; }
65
+ [Symbol.iterator]() {
66
+ return this.tracks[Symbol.iterator]();
67
+ }
68
+ addTrack(track) {
69
+ this.tracks.push(track);
70
+ // Enable array-like access
71
+ this[this.tracks.length - 1] = track;
72
+ const event = new Event('addtrack');
73
+ event.track = track;
74
+ this.dispatchEvent(event);
75
+ }
76
+ getTrackById(id) {
77
+ return this.tracks.find(t => t.id === id) || null;
78
+ }
79
+ removeTrack(track) {
80
+ const index = this.tracks.indexOf(track);
81
+ if (index !== -1) {
82
+ this.tracks.splice(index, 1);
83
+ // Re-index properties
84
+ for (let i = index; i < this.tracks.length; i++) {
85
+ this[i] = this.tracks[i];
86
+ }
87
+ delete this[this.tracks.length];
88
+ const event = new Event('removetrack');
89
+ event.track = track;
90
+ this.dispatchEvent(event);
91
+ }
92
+ }
93
+ // Stub for standard event handler property
94
+ set onaddtrack(handler) {
95
+ if (handler) {
96
+ this.addEventListener('addtrack', handler);
97
+ }
98
+ }
99
+ }