@vindral/web-sdk 4.1.9 → 4.1.10-10-gbe1df6a0

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/react.d.ts CHANGED
@@ -22,17 +22,6 @@ interface Channel {
22
22
  */
23
23
  timeshiftUrls?: string[];
24
24
  }
25
- interface ClientOverrides {
26
- maxVideoBitRate?: number;
27
- minBufferTime?: number;
28
- maxBufferTime?: number;
29
- burstEnabled?: boolean;
30
- sizeBasedResolutionCapEnabled?: boolean;
31
- separateVideoSocketEnabled?: boolean;
32
- videoCodecs?: string[];
33
- }
34
- type AudioCodec = "aac" | "opus" | "mp3";
35
- type VideoCodec = "h264" | "av1";
36
25
  interface MinMaxAverage {
37
26
  last: number;
38
27
  /**
@@ -105,44 +94,48 @@ type Tagged<BaseType, Tag extends PropertyKey> = BaseType & {
105
94
  [K in Tag]: void;
106
95
  };
107
96
  };
108
- type Namespace = Tagged<Array<string>, "Namespace">;
109
- interface TrackObject {
110
- namespace?: Namespace;
111
- name: string;
112
- format: string;
113
- label?: string;
114
- renderGroup?: number;
115
- altGroup?: number;
116
- initData?: string;
117
- initTrack?: string;
118
- depends?: Array<string>;
119
- temporalId?: number;
120
- spatialId?: number;
121
- codec?: string;
122
- mimeType?: string;
123
- framerate?: [
124
- number,
125
- number
126
- ];
127
- bitrate?: number;
128
- width?: number;
129
- height?: number;
130
- samplerate?: number;
131
- channelConfig?: string;
132
- displayWidth?: number;
133
- displayHeight?: number;
134
- language?: string;
135
- ["com.vindral.variant_uid"]?: string;
136
- ["com.vindral.drm"]?: string;
137
- }
138
- interface CatalogRoot {
139
- version: number;
140
- streamingFormat?: number;
141
- streamingFormatVersion?: string;
97
+ declare class UserAgentInformation {
98
+ private highEntropyValues?;
99
+ constructor();
100
+ getUserAgentInformation(): {
101
+ locationOrigin: string;
102
+ locationPath: string;
103
+ ancestorOrigins: string[] | undefined;
104
+ hardwareConcurrency: number;
105
+ deviceMemory: number | undefined;
106
+ userAgentLegacy: string;
107
+ ua: {
108
+ browser: {
109
+ brands: string[];
110
+ fullVersionBrands: string[];
111
+ majorVersions: string[];
112
+ };
113
+ device: string;
114
+ os: {
115
+ family: string;
116
+ version: string;
117
+ major_version: number;
118
+ };
119
+ };
120
+ } | {
121
+ locationOrigin: string;
122
+ locationPath: string;
123
+ ancestorOrigins: string[] | undefined;
124
+ hardwareConcurrency: number;
125
+ deviceMemory: number | undefined;
126
+ userAgent: string;
127
+ };
142
128
  }
143
- interface TracksCatalog extends CatalogRoot {
144
- namespace: Namespace;
145
- tracks: Array<TrackObject>;
129
+ type AudioCodec = "aac" | "opus" | "mp3";
130
+ type VideoCodec = "h264" | "av1";
131
+ interface ReconnectState {
132
+ /**
133
+ * The number or retry attempts so far.
134
+ * This gets reset on every successful connect, so it will start from zero every
135
+ * time the client instance gets disconnected and will increment until the
136
+ * client instance makes a connection attempt is successful.
137
+ */
138
+ reconnectRetries: number;
146
139
  }
147
140
  interface RenditionProps {
148
141
  id: number;
@@ -185,78 +178,6 @@ type VideoRendition = VideoRenditionProps & RenditionProps;
185
178
  type AudioRendition = AudioRenditionProps & RenditionProps;
186
179
  type TextRendition = TextRenditionProps & RenditionProps;
187
180
  type Rendition = VideoRendition | AudioRendition | TextRendition;
188
- interface Telemetry {
189
- url: string;
190
- probability?: number;
191
- includeErrors?: boolean;
192
- includeEvents?: boolean;
193
- includeStats?: boolean;
194
- maxRetries?: number;
195
- maxErrorReports?: number;
196
- interval?: number;
197
- }
198
- interface ChannelWithCatalog extends Channel {
199
- catalog: TracksCatalog;
200
- renditions: Rendition[];
201
- overrides?: ClientOverrides;
202
- }
203
- interface ChannelWithRenditions extends Channel {
204
- renditions: Rendition[];
205
- overrides?: ClientOverrides;
206
- }
207
- interface ServerCertificateHash {
208
- algorithm: string;
209
- value: string;
210
- }
211
- interface Edge {
212
- moqUrl?: string;
213
- moqWsUrl: string;
214
- serverCertificateHashes?: ServerCertificateHash[];
215
- }
216
- interface MoQConnectInfo {
217
- logsUrl?: string;
218
- statsUrl?: string;
219
- telemetry?: Telemetry;
220
- channels: ChannelWithCatalog[];
221
- edges: Edge[];
222
- timeshift: {
223
- urls: string[];
224
- duration: string;
225
- };
226
- }
227
- interface VindralConnectInfo {
228
- logsUrl?: string;
229
- statsUrl?: string;
230
- telemetry?: Telemetry;
231
- channels: ChannelWithRenditions[];
232
- edges: string[];
233
- }
234
- type ConnectInfo = VindralConnectInfo | MoQConnectInfo;
235
- interface Metadata {
236
- /**
237
- * The raw string content as it was ingested (if using JSON, it needs to be parsed on your end)
238
- */
239
- content: string;
240
- /**
241
- * Timestamp in ms
242
- */
243
- timestamp: number;
244
- }
245
- interface TimeRange {
246
- /** */
247
- start: number;
248
- /** */
249
- end: number;
250
- }
251
- interface ReconnectState {
252
- /**
253
- * The number or retry attempts so far.
254
- * This gets reset on every successful connect, so it will start from zero every
255
- * time the client instance gets disconnected and will increment until the
256
- * client instance makes a connection attempt is successful.
257
- */
258
- reconnectRetries: number;
259
- }
260
181
  interface Size {
261
182
  /** */
262
183
  width: number;
@@ -308,6 +229,7 @@ interface DrmOptions {
308
229
  };
309
230
  }
310
231
  type Media = "audio" | "video" | "audio+video";
232
+ type WebCodecsHardwareAccelerationPreference = "no-preference" | "prefer-hardware" | "prefer-software";
311
233
  interface Options {
312
234
  /**
313
235
  * URL to use when connecting to the stream
@@ -508,6 +430,38 @@ interface Options {
508
430
  * Enables iOS devices to use a media element for playback. This enables fullscreen and picture in picture support on iOS.
509
431
  */
510
432
  iosMediaElementEnabled?: boolean;
433
+ /**
434
+ * Enable WebCodecs API for hardware-accelerated decoding.
435
+ *
436
+ * When enabled, the browser's native VideoDecoder and AudioDecoder APIs will be used instead
437
+ * of WASM decoding on supported browsers (Chrome 94+, Edge 94+, Safari 16.4+). This provides:
438
+ * - Hardware-accelerated decoding (uses GPU for video)
439
+ * - Better performance at higher resolutions
440
+ * - Lower CPU usage and battery consumption
441
+ *
442
+ * Disabled by default to allow gradual rollout and testing.
443
+ *
444
+ * Note: Automatically falls back to WASM decoding if:
445
+ * - The browser doesn't support WebCodecs
446
+ * - WebCodecs initialization fails
447
+ * - This option is set to false or undefined
448
+ */
449
+ webcodecsEnabled?: boolean;
450
+ /**
451
+ * Hardware acceleration preference for WebCodecs video decoding.
452
+ *
453
+ * Defaults to `"no-preference"`.
454
+ */
455
+ webcodecsHardwareAcceleration?: WebCodecsHardwareAccelerationPreference;
456
+ /**
457
+ * Enable OffscreenCanvas rendering in worker thread (requires webcodecsEnabled: true).
458
+ *
459
+ * When enabled, video rendering happens in the worker thread using OffscreenCanvas.
460
+ * Disabled by default to allow gradual rollout and testing.
461
+ *
462
+ * Note: Requires browser support for OffscreenCanvas and webcodecsEnabled must be true, and iosMediaElementEnabled must be false.
463
+ */
464
+ offscreenCanvasEnabled?: boolean;
511
465
  /**
512
466
  * Advanced options to override default behaviour.
513
467
  */
@@ -519,6 +473,120 @@ interface Options {
519
473
  */
520
474
  drm?: DrmOptions;
521
475
  }
476
+ interface ClientOverrides {
477
+ maxVideoBitRate?: number;
478
+ minBufferTime?: number;
479
+ maxBufferTime?: number;
480
+ burstEnabled?: boolean;
481
+ sizeBasedResolutionCapEnabled?: boolean;
482
+ separateVideoSocketEnabled?: boolean;
483
+ webcodecsEnabled?: boolean;
484
+ webcodecsHardwareAcceleration?: WebCodecsHardwareAccelerationPreference;
485
+ offscreenCanvasEnabled?: boolean;
486
+ videoCodecs?: string[];
487
+ }
488
+ type Namespace = Tagged<Array<string>, "Namespace">;
489
+ interface TrackObject {
490
+ namespace?: Namespace;
491
+ name: string;
492
+ format: string;
493
+ label?: string;
494
+ renderGroup?: number;
495
+ altGroup?: number;
496
+ initData?: string;
497
+ initTrack?: string;
498
+ depends?: Array<string>;
499
+ temporalId?: number;
500
+ spatialId?: number;
501
+ codec?: string;
502
+ mimeType?: string;
503
+ framerate?: [
504
+ number,
505
+ number
506
+ ];
507
+ bitrate?: number;
508
+ width?: number;
509
+ height?: number;
510
+ samplerate?: number;
511
+ channelConfig?: string;
512
+ displayWidth?: number;
513
+ displayHeight?: number;
514
+ language?: string;
515
+ ["com.vindral.variant_uid"]?: string;
516
+ ["com.vindral.drm"]?: string;
517
+ }
518
+ interface CatalogRoot {
519
+ version: number;
520
+ streamingFormat?: number;
521
+ streamingFormatVersion?: string;
522
+ }
523
+ interface TracksCatalog extends CatalogRoot {
524
+ namespace: Namespace;
525
+ tracks: Array<TrackObject>;
526
+ }
527
+ interface Telemetry {
528
+ url: string;
529
+ probability?: number;
530
+ includeErrors?: boolean;
531
+ includeEvents?: boolean;
532
+ includeStats?: boolean;
533
+ maxRetries?: number;
534
+ maxErrorReports?: number;
535
+ interval?: number;
536
+ }
537
+ interface ChannelWithCatalog extends Channel {
538
+ catalog: TracksCatalog;
539
+ renditions: Rendition[];
540
+ overrides?: ClientOverrides;
541
+ }
542
+ interface ChannelWithRenditions extends Channel {
543
+ renditions: Rendition[];
544
+ overrides?: ClientOverrides;
545
+ }
546
+ interface ServerCertificateHash {
547
+ algorithm: string;
548
+ value: string;
549
+ }
550
+ interface Edge {
551
+ moqUrl?: string;
552
+ moqWsUrl: string;
553
+ serverCertificateHashes?: ServerCertificateHash[];
554
+ }
555
+ interface MoQConnectInfo {
556
+ logsUrl?: string;
557
+ statsUrl?: string;
558
+ telemetry?: Telemetry;
559
+ channels: ChannelWithCatalog[];
560
+ edges: Edge[];
561
+ timeshift: {
562
+ urls: string[];
563
+ duration: string;
564
+ };
565
+ }
566
+ interface VindralConnectInfo {
567
+ logsUrl?: string;
568
+ statsUrl?: string;
569
+ telemetry?: Telemetry;
570
+ channels: ChannelWithRenditions[];
571
+ edges: string[];
572
+ }
573
+ type ConnectInfo = VindralConnectInfo | MoQConnectInfo;
574
+ interface Metadata {
575
+ /**
576
+ * The raw string content as it was ingested (if using JSON, it needs to be parsed on your end)
577
+ */
578
+ content: string;
579
+ /**
580
+ * Timestamp in ms
581
+ */
582
+ timestamp: number;
583
+ }
584
+ interface TimeRange {
585
+ /** */
586
+ start: number;
587
+ /** */
588
+ end: number;
589
+ }
522
590
  interface RenditionLevel {
523
591
  /** */
524
592
  audio?: AudioRendition;
@@ -719,6 +787,7 @@ interface DecoderStatistics {
719
787
  videoDecodeTime: MinMaxAverage;
720
788
  audioDecodeTime: MinMaxAverage;
721
789
  videoTransportTime: MinMaxAverage;
790
+ videoKeyframeIntervalMs?: number;
722
791
  }
723
792
  interface DocumentStateModulesStatistics {
724
793
  isVisible: boolean;
@@ -768,6 +837,7 @@ interface MseModuleStatistics {
768
837
  droppedVideoFrames?: number;
769
838
  successfulVideoAppendCalls?: number;
770
839
  successfulAudioAppendsCalls?: number;
840
+ videoKeyframeIntervalMs?: number;
771
841
  }
772
842
  interface QualityOfServiceModuleStatistics {
773
843
  /**
@@ -851,38 +921,6 @@ interface VideoPlayerStatistics {
851
921
  contextLostCount: number;
852
922
  contextRestoredCount: number;
853
923
  }
854
- declare class UserAgentInformation {
855
- private highEntropyValues?;
856
- constructor();
857
- getUserAgentInformation(): {
858
- locationOrigin: string;
859
- locationPath: string;
860
- ancestorOrigins: string[] | undefined;
861
- hardwareConcurrency: number;
862
- deviceMemory: number | undefined;
863
- userAgentLegacy: string;
864
- ua: {
865
- browser: {
866
- brands: string[];
867
- fullVersionBrands: string[];
868
- majorVersions: string[];
869
- };
870
- device: string;
871
- os: {
872
- family: string;
873
- version: string;
874
- major_version: number;
875
- };
876
- };
877
- } | {
878
- locationOrigin: string;
879
- locationPath: string;
880
- ancestorOrigins: string[] | undefined;
881
- hardwareConcurrency: number;
882
- deviceMemory: number | undefined;
883
- userAgent: string;
884
- };
885
- }
886
924
  type ModuleStatistics = AdaptivityStatistics & BufferTimeStatistics & ConnectionStatistics & ConstraintCapStatistics & DecoderStatistics & DocumentStateModulesStatistics & IncomingDataModuleStatistics & JitterModuleStatistics & MseModuleStatistics & PlaybackModuleStatistics & QualityOfServiceModuleStatistics & RenditionsModuleStatistics & SyncModuleStatistics & TelemetryModuleStatistics & VideoPlayerStatistics;
887
925
  type Statistics = ModuleStatistics & ReturnType<UserAgentInformation["getUserAgentInformation"]> & {
888
926
  /**
@@ -1228,6 +1266,10 @@ declare class Vindral extends Emitter<PublicVindralEvents> {
1228
1266
  * The ranges are specified in milliseconds.
1229
1267
  */
1230
1268
  get audioBufferedRanges(): ReadonlyArray<TimeRange>;
1269
+ /**
1270
+ * The timestamps (in milliseconds) of video keyframes currently in the buffer.
1271
+ */
1272
+ get videoKeyframeTimestamps(): ReadonlyArray<number>;
1231
1273
  /**
1232
1274
  * The API client for calls to the public available endpoints of the Vindral Live CDN.
1233
1275
  */
@@ -1544,6 +1586,39 @@ declare class AirPlayButton extends VindralButton {
1544
1586
  get isAirPlaying(): boolean;
1545
1587
  protected handleClick(_: Event): void;
1546
1588
  }
1589
+ declare class VindralMenuButton extends VindralButton {
1590
+ #private;
1591
+ constructor();
1592
+ connectedCallback(): void;
1593
+ set button(button: HTMLElement);
1594
+ set listbox(listbox: HTMLElement);
1595
+ set listboxSlot(listboxSlot: HTMLElement);
1596
+ enable(): void;
1597
+ hide(): void;
1598
+ protected handleClick(e: Event): void;
1599
+ }
1600
+ type AdvancedRenditionMenuAttributes = (typeof AdvancedRenditionMenu.observedAttributes)[number];
1601
+ declare class AdvancedRenditionMenu extends VindralMenuButton {
1602
+ #private;
1603
+ static observedAttributes: string[];
1604
+ constructor();
1605
+ connectedCallback(): void;
1606
+ attributeChangedCallback(name: string, old: string, value: string): void;
1607
+ }
1608
+ type AdvancedRenditionMenuListAttributes = (typeof AdvancedRenditionMenuList.observedAttributes)[number];
1609
+ declare class AdvancedRenditionMenuList extends HTMLElement {
1610
+ #private;
1611
+ static observedAttributes: ("rendition-levels" | "rendition-level" | "max-video-bit-rate" | "abr-enabled" | "size-based-resolution-cap-enabled")[];
1612
+ constructor();
1613
+ connectedCallback(): void;
1614
+ disconnectedCallback(): void;
1615
+ attributeChangedCallback(name: string, old: string | null, value: string | null): void;
1616
+ private set list(value);
1617
+ private set maxVideoBitrate(value);
1618
+ get keysUsed(): string[];
1619
+ handleEvent: (event: Event) => void;
1620
+ focus(): void;
1621
+ }
1547
1622
  type BufferingIconAttributes = (typeof BufferingIcon.observedAttributes)[number];
1548
1623
  declare class BufferingIcon extends HTMLElement {
1549
1624
  #private;
@@ -1729,7 +1804,7 @@ type ControllerAttributes = (typeof Controller.observedAttributes)[number];
1729
1804
  declare class Controller extends HTMLElement {
1730
1805
  #private;
1731
1806
  static observedAttributes: readonly [
1732
- ...("language" | "channels" | "buffering" | "paused" | "volume" | "muted" | "duration" | "user-interacting" | "is-casting" | "cast-available" | "cast-receiver-name" | "ui-locked" | "hide-ui-on-pause" | "is-fullscreen" | "is-fullscreen-fallback" | "rendition-levels" | "rendition-level" | "max-video-bit-rate" | "max-initial-bit-rate" | "channel-id" | "channel-group-id" | "pip-available" | "is-pip" | "airplay-available" | "is-airplaying" | "media" | "languages" | "text-tracks" | "text-track" | "needs-user-input-video" | "needs-user-input-audio" | "authentication-token" | "volume-level" | "cast" | "airplay" | "pip" | "fullscreen" | "vu-meter" | "timeshift" | "timeshift-position" | "poster-src")[],
1807
+ ...("language" | "channels" | "buffering" | "paused" | "volume" | "muted" | "duration" | "user-interacting" | "is-casting" | "cast-available" | "cast-receiver-name" | "ui-locked" | "hide-ui-on-pause" | "is-fullscreen" | "is-fullscreen-fallback" | "rendition-levels" | "rendition-level" | "max-video-bit-rate" | "max-initial-bit-rate" | "abr-enabled" | "size-based-resolution-cap-enabled" | "channel-id" | "channel-group-id" | "pip-available" | "is-pip" | "airplay-available" | "is-airplaying" | "media" | "languages" | "text-tracks" | "text-track" | "needs-user-input-video" | "needs-user-input-audio" | "authentication-token" | "volume-level" | "cast" | "airplay" | "pip" | "fullscreen" | "vu-meter" | "timeshift" | "timeshift-position" | "poster-src")[],
1733
1808
  "url",
1734
1809
  "edge-url",
1735
1810
  "target-buffer-time",
@@ -1760,6 +1835,9 @@ declare class Controller extends HTMLElement {
1760
1835
  "drm-playready-video-robustness",
1761
1836
  "drm-playready-audio-robustness",
1762
1837
  "webtransport-enabled",
1838
+ "webcodecs-enabled",
1839
+ "webcodecs-hardware-acceleration",
1840
+ "offscreen-canvas-enabled",
1763
1841
  "reconnect-retries",
1764
1842
  "auto-instance-enabled",
1765
1843
  "language"
@@ -1788,17 +1866,6 @@ declare class FullscreenButton extends VindralButton {
1788
1866
  get isFullscreen(): boolean;
1789
1867
  protected handleClick(_: Event): void;
1790
1868
  }
1791
- declare class VindralMenuButton extends VindralButton {
1792
- #private;
1793
- constructor();
1794
- connectedCallback(): void;
1795
- set button(button: HTMLElement);
1796
- set listbox(listbox: HTMLElement);
1797
- set listboxSlot(listboxSlot: HTMLElement);
1798
- enable(): void;
1799
- hide(): void;
1800
- protected handleClick(e: Event): void;
1801
- }
1802
1869
  type LanguageMenuAttributes = (typeof LanguageMenu.observedAttributes)[number];
1803
1870
  declare class LanguageMenu extends VindralMenuButton {
1804
1871
  #private;
@@ -1859,7 +1926,7 @@ declare class PlayButton extends VindralButton {
1859
1926
  type PlayerAttributes = (typeof Player.observedAttributes)[number];
1860
1927
  declare class Player extends HTMLElement {
1861
1928
  #private;
1862
- static observedAttributes: readonly ("title" | "advanced" | "poster" | "language" | "channels" | "buffering" | "paused" | "volume" | "muted" | "duration" | "user-interacting" | "is-casting" | "cast-available" | "cast-receiver-name" | "ui-locked" | "hide-ui-on-pause" | "is-fullscreen" | "is-fullscreen-fallback" | "rendition-levels" | "rendition-level" | "max-video-bit-rate" | "max-initial-bit-rate" | "channel-id" | "channel-group-id" | "pip-available" | "is-pip" | "airplay-available" | "is-airplaying" | "media" | "languages" | "text-tracks" | "text-track" | "needs-user-input-video" | "needs-user-input-audio" | "authentication-token" | "volume-level" | "cast" | "airplay" | "pip" | "fullscreen" | "vu-meter" | "timeshift" | "timeshift-position" | "poster-src" | "url" | "offline" | "edge-url" | "target-buffer-time" | "cast-receiver-id" | "cast-background" | "log-level" | "max-size" | "min-buffer-time" | "max-buffer-time" | "max-audio-bit-rate" | "burst-enabled" | "mse-enabled" | "mse-opus-enabled" | "ios-background-play-enabled" | "ios-wake-lock-enabled" | "ios-media-element-enabled" | "abr-enabled" | "size-based-resolution-cap-enabled" | "telemetry-enabled" | "video-codecs" | "drm-headers" | "drm-queryparams" | "drm-widevine-video-robustness" | "drm-widevine-audio-robustness" | "drm-playready-video-robustness" | "drm-playready-audio-robustness" | "webtransport-enabled" | "reconnect-retries" | "auto-instance-enabled" | "refresh-poster-enabled" | "stream-poll-enabled")[];
1929
+ static observedAttributes: readonly ("title" | "offline" | "advanced" | "poster" | "language" | "channels" | "buffering" | "paused" | "volume" | "muted" | "duration" | "user-interacting" | "is-casting" | "cast-available" | "cast-receiver-name" | "ui-locked" | "hide-ui-on-pause" | "is-fullscreen" | "is-fullscreen-fallback" | "rendition-levels" | "rendition-level" | "max-video-bit-rate" | "max-initial-bit-rate" | "abr-enabled" | "size-based-resolution-cap-enabled" | "channel-id" | "channel-group-id" | "pip-available" | "is-pip" | "airplay-available" | "is-airplaying" | "media" | "languages" | "text-tracks" | "text-track" | "needs-user-input-video" | "needs-user-input-audio" | "authentication-token" | "volume-level" | "cast" | "airplay" | "pip" | "fullscreen" | "vu-meter" | "timeshift" | "timeshift-position" | "poster-src" | "url" | "edge-url" | "target-buffer-time" | "cast-receiver-id" | "cast-background" | "log-level" | "max-size" | "min-buffer-time" | "max-buffer-time" | "max-audio-bit-rate" | "burst-enabled" | "mse-enabled" | "mse-opus-enabled" | "ios-background-play-enabled" | "ios-wake-lock-enabled" | "ios-media-element-enabled" | "telemetry-enabled" | "video-codecs" | "drm-headers" | "drm-queryparams" | "drm-widevine-video-robustness" | "drm-widevine-audio-robustness" | "drm-playready-video-robustness" | "drm-playready-audio-robustness" | "webtransport-enabled" | "webcodecs-enabled" | "webcodecs-hardware-acceleration" | "offscreen-canvas-enabled" | "reconnect-retries" | "auto-instance-enabled" | "advanced-rendition-menu-enabled" | "refresh-poster-enabled" | "stream-poll-enabled")[];
1863
1930
  constructor();
1864
1931
  connectedCallback(): void;
1865
1932
  disconnectedCallback(): void;
@@ -1918,7 +1985,7 @@ declare class ScrollOverlay extends HTMLElement {
1918
1985
  constructor();
1919
1986
  connectedCallback(): void;
1920
1987
  disconnectedCallback(): void;
1921
- attributeChangedCallback(name: string, old: string, value: string): void;
1988
+ attributeChangedCallback(name: string, old: string | null, value: string | null): void;
1922
1989
  handleEvent: (event: Event) => void;
1923
1990
  set open(value: boolean);
1924
1991
  get open(): boolean;
@@ -1990,6 +2057,8 @@ type CustomElement<T, K extends string> = Partial<Omit<DetailedHTMLProps<HtmlHTM
1990
2057
  export declare interface VindralIntrinsicElements {
1991
2058
  "vindral-controller": CustomElement<Controller, ControllerAttributes>;
1992
2059
  "vindral-control-bar": CustomElement<ControlBar, never>;
2060
+ "vindral-advanced-rendition-menu": CustomElement<AdvancedRenditionMenu, AdvancedRenditionMenuAttributes>;
2061
+ "vindral-advanced-rendition-menu-list": CustomElement<AdvancedRenditionMenuList, AdvancedRenditionMenuListAttributes>;
1993
2062
  "vindral-play-button": CustomElement<PlayButton, PlayButtonAttributes>;
1994
2063
  "vindral-mute-button": CustomElement<MuteButton, MuteButtonAttributes>;
1995
2064
  "vindral-buffering-overlay": CustomElement<BufferingOverlay, BufferingOverlayAttributes>;
package/uEFjK_x4.js ADDED
@@ -0,0 +1,52 @@
1
+ var c = Object.defineProperty;
2
+ var d = (r, s, e) => s in r ? c(r, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[s] = e;
3
+ var o = (r, s, e) => d(r, typeof s != "symbol" ? s + "" : s, e);
4
+ class u {
5
+ constructor() {
6
+ o(this, "listeners", {});
7
+ }
8
+ emit(s, e) {
9
+ const i = this.listeners[s];
10
+ if (i) {
11
+ let l = !1;
12
+ for (let t = 0; t < i.length; t++)
13
+ if (i[t].once) {
14
+ l = !0;
15
+ break;
16
+ }
17
+ l && (this.listeners[s] = i.filter((t) => !t.once));
18
+ let n;
19
+ const h = i.length;
20
+ for (let t = 0; t < h; t++) {
21
+ const f = i[t].fn(e);
22
+ typeof f == "function" && (n || (n = []), n.push(f));
23
+ }
24
+ if (n)
25
+ for (let t = 0; t < n.length; t++)
26
+ n[t]();
27
+ }
28
+ }
29
+ off(s, e) {
30
+ const i = this.listeners[s];
31
+ i && (this.listeners[s] = i.filter((l) => l.fn !== e));
32
+ }
33
+ on(s, e) {
34
+ this.add(s, e, !1);
35
+ }
36
+ once(s, e) {
37
+ this.add(s, e, !0);
38
+ }
39
+ /**
40
+ * Reset the event emitter
41
+ */
42
+ reset() {
43
+ this.listeners = {};
44
+ }
45
+ add(s, e, i) {
46
+ const l = this.listeners[s], n = { fn: e, once: i };
47
+ l ? l.push(n) : this.listeners[s] = [n];
48
+ }
49
+ }
50
+ export {
51
+ u as E
52
+ };
package/Bx7s5QdT.js DELETED
@@ -1,35 +0,0 @@
1
- var f = Object.defineProperty;
2
- var o = (n, s, e) => s in n ? f(n, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[s] = e;
3
- var l = (n, s, e) => o(n, typeof s != "symbol" ? s + "" : s, e);
4
- class c {
5
- constructor() {
6
- l(this, "listeners", {});
7
- }
8
- emit(s, e) {
9
- const i = this.listeners[s];
10
- i && (this.listeners[s] = i.filter((t) => !t.once), i.map((t) => t.fn(e)).map((t) => typeof t == "function" && (t == null ? void 0 : t())));
11
- }
12
- off(s, e) {
13
- const i = this.listeners[s];
14
- i && (this.listeners[s] = i.filter((r) => r.fn !== e));
15
- }
16
- on(s, e) {
17
- this.add(s, e, !1);
18
- }
19
- once(s, e) {
20
- this.add(s, e, !0);
21
- }
22
- /**
23
- * Reset the event emitter
24
- */
25
- reset() {
26
- this.listeners = {};
27
- }
28
- add(s, e, i) {
29
- const r = this.listeners[s], t = { fn: e, once: i };
30
- r ? r.push(t) : this.listeners[s] = [t];
31
- }
32
- }
33
- export {
34
- c as E
35
- };