@gcorevideo/player 2.22.2 → 2.22.4

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.
Files changed (35) hide show
  1. package/assets/audio-selector/style.scss +4 -2
  2. package/assets/audio-selector/track-selector.ejs +2 -2
  3. package/assets/media-control/container.scss +1 -1
  4. package/assets/spinner-three-bounce/spinner.scss +1 -1
  5. package/dist/core.js +1 -1
  6. package/dist/index.css +1374 -1372
  7. package/dist/index.js +76 -95
  8. package/dist/player.d.ts +6 -3
  9. package/dist/plugins/index.css +571 -569
  10. package/dist/plugins/index.js +47 -59
  11. package/docs/api/player.md +1 -1
  12. package/docs/api/player.sourcecontroller.md +1 -1
  13. package/docs/api/player.spinnerthreebounce.md +1 -1
  14. package/lib/index.plugins.d.ts +2 -0
  15. package/lib/index.plugins.d.ts.map +1 -1
  16. package/lib/index.plugins.js +2 -0
  17. package/lib/plugins/audio-selector/AudioSelector.d.ts +3 -9
  18. package/lib/plugins/audio-selector/AudioSelector.d.ts.map +1 -1
  19. package/lib/plugins/audio-selector/AudioSelector.js +34 -57
  20. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts +1 -0
  21. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts.map +1 -1
  22. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.js +1 -0
  23. package/lib/testUtils.d.ts +2 -0
  24. package/lib/testUtils.d.ts.map +1 -1
  25. package/lib/testUtils.js +2 -0
  26. package/package.json +1 -1
  27. package/src/index.plugins.ts +2 -0
  28. package/src/plugins/audio-selector/AudioSelector.ts +36 -72
  29. package/src/plugins/audio-selector/__tests__/AudioSelector.test.ts +176 -0
  30. package/src/plugins/audio-selector/__tests__/__snapshots__/AudioSelector.test.ts.snap +67 -0
  31. package/src/plugins/spinner-three-bounce/SpinnerThreeBounce.ts +1 -0
  32. package/src/testUtils.ts +2 -0
  33. package/temp/player.api.json +2 -2
  34. package/tsconfig.tsbuildinfo +1 -1
  35. package/assets/bottom-gear/bottomgear copy.ejs +0 -10
package/dist/index.js CHANGED
@@ -12680,7 +12680,7 @@ var PlaybackEvents;
12680
12680
  // https://github.com/clappr/clappr/blob/8752995ea439321ac7ca3cd35e8c64de7a3c3d17/LICENSE
12681
12681
  const AUTO$1 = -1;
12682
12682
  const { now: now$2 } = Utils;
12683
- const T$l = 'playback.dash';
12683
+ const T$k = 'playback.dash';
12684
12684
  class DashPlayback extends BasePlayback {
12685
12685
  _levels = null;
12686
12686
  _currentLevel = null;
@@ -12956,10 +12956,10 @@ class DashPlayback extends BasePlayback {
12956
12956
  }
12957
12957
  _onPlaybackError = (event) => {
12958
12958
  // TODO
12959
- trace(`${T$l} _onPlaybackError`, { event });
12959
+ trace(`${T$k} _onPlaybackError`, { event });
12960
12960
  };
12961
12961
  _onDASHJSSError = (event) => {
12962
- trace(`${T$l} _onDASHJSSError`, { event });
12962
+ trace(`${T$k} _onDASHJSSError`, { event });
12963
12963
  this._stopTimeUpdateTimer();
12964
12964
  // Note that the other error types are deprecated
12965
12965
  const e = event.error;
@@ -12994,7 +12994,7 @@ class DashPlayback extends BasePlayback {
12994
12994
  }
12995
12995
  };
12996
12996
  triggerError(error) {
12997
- trace(`${T$l} triggerError`, { error });
12997
+ trace(`${T$k} triggerError`, { error });
12998
12998
  // this triggers Events.ERROR to be handled by the UI
12999
12999
  this.trigger(Events$1.PLAYBACK_ERROR, this.createError(error, {
13000
13000
  useCodePrefix: false,
@@ -13033,7 +13033,7 @@ class DashPlayback extends BasePlayback {
13033
13033
  }
13034
13034
  get dvrEnabled() {
13035
13035
  if (!this._dash) {
13036
- trace(`${T$l} dvrEnable no dash player instance`);
13036
+ trace(`${T$k} dvrEnable no dash player instance`);
13037
13037
  return false;
13038
13038
  }
13039
13039
  return (this._dash?.getDVRWindowSize() >= this._minDvrSize &&
@@ -13055,7 +13055,7 @@ class DashPlayback extends BasePlayback {
13055
13055
  this.trigger(Events$1.PLAYBACK_PROGRESS, progress, {});
13056
13056
  }
13057
13057
  play() {
13058
- trace(`${T$l} play`, { dash: !!this._dash });
13058
+ trace(`${T$k} play`, { dash: !!this._dash });
13059
13059
  if (!this._dash) {
13060
13060
  this._setup();
13061
13061
  }
@@ -13141,7 +13141,7 @@ class DashPlayback extends BasePlayback {
13141
13141
  }
13142
13142
  // @ts-expect-error
13143
13143
  get currentAudioTrack() {
13144
- trace(`${T$l} get currentAudioTrack`);
13144
+ trace(`${T$k} get currentAudioTrack`);
13145
13145
  assert.ok(this._dash, 'DASH.js MediaPlayer is not initialized');
13146
13146
  const t = this._dash.getCurrentTrackFor('audio');
13147
13147
  if (!t) {
@@ -41842,7 +41842,7 @@ const AUTO = -1;
41842
41842
  const DEFAULT_RECOVER_ATTEMPTS = 16;
41843
41843
  Events$1.register('PLAYBACK_FRAGMENT_CHANGED');
41844
41844
  Events$1.register('PLAYBACK_FRAGMENT_PARSING_METADATA');
41845
- const T$k = 'playback.hls';
41845
+ const T$j = 'playback.hls';
41846
41846
  class HlsPlayback extends BasePlayback {
41847
41847
  _ccIsSetup = false;
41848
41848
  _ccTracksUpdated = false;
@@ -42071,7 +42071,7 @@ class HlsPlayback extends BasePlayback {
42071
42071
  maxBufferLength: 2,
42072
42072
  maxMaxBufferLength: 4,
42073
42073
  }, this.options.playback.hlsjsConfig);
42074
- trace(`${T$k} _createHLSInstance`, { config });
42074
+ trace(`${T$j} _createHLSInstance`, { config });
42075
42075
  this._hls = new Hls(config);
42076
42076
  }
42077
42077
  _attachHLSMedia() {
@@ -42162,7 +42162,7 @@ class HlsPlayback extends BasePlayback {
42162
42162
  }
42163
42163
  else {
42164
42164
  Log.error('hlsjs: failed to recover', { evt, data });
42165
- trace(`${T$k} _recover failed to recover`, {
42165
+ trace(`${T$j} _recover failed to recover`, {
42166
42166
  type: data.type,
42167
42167
  details: data.details,
42168
42168
  });
@@ -42248,7 +42248,7 @@ class HlsPlayback extends BasePlayback {
42248
42248
  this.trigger(Events$1.PLAYBACK_SETTINGSUPDATE);
42249
42249
  }
42250
42250
  _onHLSJSError(evt, data) {
42251
- trace(`${T$k} _onHLSJSError`, {
42251
+ trace(`${T$j} _onHLSJSError`, {
42252
42252
  fatal: data.fatal,
42253
42253
  type: data.type,
42254
42254
  details: data.details,
@@ -42296,7 +42296,7 @@ class HlsPlayback extends BasePlayback {
42296
42296
  evt,
42297
42297
  data,
42298
42298
  });
42299
- trace(`${T$k} _onHLSJSError trying to recover from network error`, {
42299
+ trace(`${T$j} _onHLSJSError trying to recover from network error`, {
42300
42300
  details: data.details,
42301
42301
  });
42302
42302
  error.level = PlayerError.Levels.WARN;
@@ -42309,7 +42309,7 @@ class HlsPlayback extends BasePlayback {
42309
42309
  evt,
42310
42310
  data,
42311
42311
  });
42312
- trace(`${T$k} _onHLSJSError trying to recover from media error`, {
42312
+ trace(`${T$j} _onHLSJSError trying to recover from media error`, {
42313
42313
  details: data.details,
42314
42314
  });
42315
42315
  error.level = PlayerError.Levels.WARN;
@@ -42339,7 +42339,7 @@ class HlsPlayback extends BasePlayback {
42339
42339
  return;
42340
42340
  }
42341
42341
  Log.warn('hlsjs: non-fatal error occurred', { evt, data });
42342
- trace(`${T$k} _onHLSJSError non-fatal error occurred`, {
42342
+ trace(`${T$j} _onHLSJSError non-fatal error occurred`, {
42343
42343
  type: data.type,
42344
42344
  details: data.details,
42345
42345
  });
@@ -42674,11 +42674,11 @@ class HlsPlayback extends BasePlayback {
42674
42674
  this._hls.audioTrack = Number(id); // TODO or find index by .id == id?
42675
42675
  }
42676
42676
  _onAudioTracksUpdated(_, data) {
42677
- trace(`${T$k} onAudioTracksUpdated`);
42677
+ trace(`${T$j} onAudioTracksUpdated`);
42678
42678
  this.trigger(Events$1.PLAYBACK_AUDIO_AVAILABLE, data.audioTracks.map(toClapprTrack));
42679
42679
  }
42680
42680
  _onAudioTrackSwitched(_, data) {
42681
- trace(`${T$k} onAudioTrackSwitched`);
42681
+ trace(`${T$j} onAudioTrackSwitched`);
42682
42682
  // @ts-ignore
42683
42683
  const track = this._hls.audioTracks[data.id];
42684
42684
  this.trigger(Events$1.PLAYBACK_AUDIO_CHANGED, toClapprTrack(track));
@@ -42699,7 +42699,7 @@ function toClapprTrack(t) {
42699
42699
  };
42700
42700
  }
42701
42701
 
42702
- const T$j = 'playback.html5_video';
42702
+ const T$i = 'playback.html5_video';
42703
42703
  const STALL_TIMEOUT = 15000;
42704
42704
  class HTML5Video extends BasePlayback {
42705
42705
  stallTimerId = null;
@@ -42707,7 +42707,7 @@ class HTML5Video extends BasePlayback {
42707
42707
  * @internal
42708
42708
  */
42709
42709
  createError(errorData, options) {
42710
- trace(`${T$j} createError`, {
42710
+ trace(`${T$i} createError`, {
42711
42711
  errorData: { ...errorData },
42712
42712
  });
42713
42713
  const i18n = this.i18n ||
@@ -42723,11 +42723,11 @@ class HTML5Video extends BasePlayback {
42723
42723
  return super.createError(errorData, { ...options, useCodePrefix: false });
42724
42724
  }
42725
42725
  _onWaiting() {
42726
- trace(`${T$j} _onWaiting`);
42726
+ trace(`${T$i} _onWaiting`);
42727
42727
  super._onWaiting();
42728
42728
  }
42729
42729
  _onEnded() {
42730
- trace(`${T$j} _onEnded`);
42730
+ trace(`${T$i} _onEnded`);
42731
42731
  if (this.stallTimerId) {
42732
42732
  clearTimeout(this.stallTimerId);
42733
42733
  this.stallTimerId = null;
@@ -42735,12 +42735,12 @@ class HTML5Video extends BasePlayback {
42735
42735
  super._onEnded();
42736
42736
  }
42737
42737
  _handleBufferingEvents() {
42738
- trace(`${T$j} _handleBufferingEvents`, {
42738
+ trace(`${T$i} _handleBufferingEvents`, {
42739
42739
  networkState: this.el.networkState,
42740
42740
  });
42741
42741
  if (!this.stallTimerId) {
42742
42742
  this.stallTimerId = setTimeout(() => {
42743
- trace(`${T$j} _handleBufferingEvents stall timeout`, {
42743
+ trace(`${T$i} _handleBufferingEvents stall timeout`, {
42744
42744
  buffering: this.buffering,
42745
42745
  ended: this.ended,
42746
42746
  });
@@ -42758,7 +42758,7 @@ class HTML5Video extends BasePlayback {
42758
42758
  super._handleBufferingEvents();
42759
42759
  }
42760
42760
  _onPlaying() {
42761
- trace(`${T$j} _onPlaying`);
42761
+ trace(`${T$i} _onPlaying`);
42762
42762
  if (this.stallTimerId) {
42763
42763
  clearTimeout(this.stallTimerId);
42764
42764
  this.stallTimerId = null;
@@ -42766,7 +42766,7 @@ class HTML5Video extends BasePlayback {
42766
42766
  super._onPlaying();
42767
42767
  }
42768
42768
  _onPause() {
42769
- trace(`${T$j} _onPause`);
42769
+ trace(`${T$i} _onPause`);
42770
42770
  super._onPause();
42771
42771
  if (this.stallTimerId) {
42772
42772
  clearTimeout(this.stallTimerId);
@@ -42776,7 +42776,7 @@ class HTML5Video extends BasePlayback {
42776
42776
  get audioTracks() {
42777
42777
  const tracks = this.el.audioTracks;
42778
42778
  const supported = !!tracks;
42779
- trace(`${T$j} get audioTracks`, { supported });
42779
+ trace(`${T$i} get audioTracks`, { supported });
42780
42780
  const retval = [];
42781
42781
  if (supported) {
42782
42782
  for (let i = 0; i < tracks.length; i++) {
@@ -42795,7 +42795,7 @@ class HTML5Video extends BasePlayback {
42795
42795
  get currentAudioTrack() {
42796
42796
  const tracks = this.el.audioTracks;
42797
42797
  const supported = !!tracks;
42798
- trace(`${T$j} get currentAudioTrack`, {
42798
+ trace(`${T$i} get currentAudioTrack`, {
42799
42799
  supported,
42800
42800
  });
42801
42801
  if (supported) {
@@ -42816,7 +42816,7 @@ class HTML5Video extends BasePlayback {
42816
42816
  switchAudioTrack(id) {
42817
42817
  const tracks = this.el.audioTracks;
42818
42818
  const supported = !!tracks;
42819
- trace(`${T$j} switchAudioTrack`, {
42819
+ trace(`${T$i} switchAudioTrack`, {
42820
42820
  supported,
42821
42821
  });
42822
42822
  if (supported) {
@@ -42835,7 +42835,7 @@ function registerPlaybacks() {
42835
42835
  Loader.registerPlayback(DashPlayback);
42836
42836
  }
42837
42837
 
42838
- const T$i = 'GPlayer';
42838
+ const T$h = 'GPlayer';
42839
42839
  const DEFAULT_OPTIONS = {
42840
42840
  autoPlay: false,
42841
42841
  debug: 'none',
@@ -42930,7 +42930,7 @@ class Player {
42930
42930
  }
42931
42931
  const coreOpts = this.buildCoreOptions(playerElement);
42932
42932
  const { core, container } = Player.getRegisteredPlugins();
42933
- trace(`${T$i} init`, {
42933
+ trace(`${T$h} init`, {
42934
42934
  registeredPlaybacks: Loader.registeredPlaybacks.map((p) => p.prototype.name),
42935
42935
  });
42936
42936
  coreOpts.plugins = {
@@ -42944,7 +42944,7 @@ class Player {
42944
42944
  * Destroys the player, releasing all resources and unmounting its UI from the DOM.
42945
42945
  */
42946
42946
  destroy() {
42947
- trace(`${T$i} destroy`, {
42947
+ trace(`${T$h} destroy`, {
42948
42948
  player: !!this.player,
42949
42949
  });
42950
42950
  if (this.player) {
@@ -43131,7 +43131,7 @@ class Player {
43131
43131
  this.config = $.extend(true, this.config, config);
43132
43132
  }
43133
43133
  initPlayer(coreOptions) {
43134
- trace(`${T$i} initPlayer`, {
43134
+ trace(`${T$h} initPlayer`, {
43135
43135
  autoPlay: coreOptions.autoPlay,
43136
43136
  sources: coreOptions.sources,
43137
43137
  // TODO selected options
@@ -43156,7 +43156,7 @@ class Player {
43156
43156
  }
43157
43157
  }
43158
43158
  triggerAutoPlay() {
43159
- trace(`${T$i} triggerAutoPlay`);
43159
+ trace(`${T$h} triggerAutoPlay`);
43160
43160
  setTimeout(() => {
43161
43161
  this.player?.play({
43162
43162
  autoPlay: true,
@@ -43174,7 +43174,7 @@ class Player {
43174
43174
  // TODO test
43175
43175
  events = {
43176
43176
  onReady: () => {
43177
- trace(`${T$i} onReady`, {
43177
+ trace(`${T$h} onReady`, {
43178
43178
  ready: this.ready,
43179
43179
  });
43180
43180
  if (this.ready) {
@@ -43208,7 +43208,7 @@ class Player {
43208
43208
  buildCoreOptions(rootNode) {
43209
43209
  const sources = this.buildMediaSourcesList();
43210
43210
  const source = sources[0];
43211
- trace(`${T$i} buildCoreOptions`, {
43211
+ trace(`${T$h} buildCoreOptions`, {
43212
43212
  source,
43213
43213
  sources,
43214
43214
  });
@@ -43269,7 +43269,7 @@ class Player {
43269
43269
  assert.ok(this.player, 'Player is not initialized');
43270
43270
  const core = this.player.core;
43271
43271
  core.on(Events$1.CORE_SCREEN_ORIENTATION_CHANGED, ({ orientation }) => {
43272
- trace(`${T$i} on CORE_SCREEN_ORIENTATION_CHANGED`, {
43272
+ trace(`${T$h} on CORE_SCREEN_ORIENTATION_CHANGED`, {
43273
43273
  orientation,
43274
43274
  rootNode: {
43275
43275
  width: this.rootNode?.clientWidth,
@@ -43284,14 +43284,14 @@ class Player {
43284
43284
  }
43285
43285
  }, null);
43286
43286
  core.on(Events$1.CORE_RESIZE, ({ width, height }) => {
43287
- trace(`${T$i} on CORE_RESIZE`, {
43287
+ trace(`${T$h} on CORE_RESIZE`, {
43288
43288
  width,
43289
43289
  height,
43290
43290
  });
43291
43291
  this.safeTriggerEvent(PlayerEvent.Resize, { width, height });
43292
43292
  }, null);
43293
43293
  core.on(Events$1.CORE_FULLSCREEN, (isFullscreen) => {
43294
- trace(`${T$i} CORE_FULLSCREEN`, {
43294
+ trace(`${T$h} CORE_FULLSCREEN`, {
43295
43295
  isFullscreen,
43296
43296
  });
43297
43297
  this.safeTriggerEvent(PlayerEvent.Fullscreen, isFullscreen);
@@ -43299,7 +43299,7 @@ class Player {
43299
43299
  }
43300
43300
  }
43301
43301
 
43302
- var version$1 = "2.22.2";
43302
+ var version$1 = "2.22.4";
43303
43303
 
43304
43304
  var packages = {
43305
43305
  "node_modules/@clappr/core": {
@@ -43323,12 +43323,12 @@ function version() {
43323
43323
  };
43324
43324
  }
43325
43325
 
43326
- const pluginHtml$7 = "<button data-audiotracks-button class='gcore-skin-button-color' id=\"audiotracks-button\">\n <span class='audio-text'><%= title %></span> <span class=\"audio-arrow\"></span>\n</button>\n<ul class='gcore-skin-bg-color' id=\"audiotracks-select\">\n <% for (const track of tracks) { %>\n <li>\n <a href=\"#\" class='gcore-skin-text-color' data-audiotracks-select=\"<%= track.id %>\">\n <%= track.label %>\n </a>\n </li>\n <% }; %>\n</ul>\n";
43326
+ const pluginHtml$7 = "<button data-audiotracks-button class='gcore-skin-button-color' id=\"audiotracks-button\">\n <span class='audio-text'><%= title %></span> <span class=\"audio-arrow\"><%= icon %></span>\n</button>\n<ul class='gcore-skin-bg-color menu hidden' id=\"audiotracks-select\">\n <% for (const track of tracks) { %>\n <li>\n <a href=\"#\" class='gcore-skin-text-color' data-audiotracks-select=\"<%= track.id %>\">\n <%= track.label %>\n </a>\n </li>\n <% }; %>\n</ul>\n";
43327
43327
 
43328
43328
  const audioArrow = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"9px\" height=\"6px\" viewBox=\"0 0 9 6\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <!-- Generator: Sketch 49 (51002) - http://www.bohemiancoding.com/sketch -->\n <title>quality-arrow</title>\n <desc>Created with Sketch.</desc>\n <defs></defs>\n <g id=\"quality-arrow\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path\n d=\"M5.07079194,5.78553848 C4.91457318,5.94277844 4.70551573,6.00941824 4.50028717,5.99893557 C4.2950586,6.00941824 4.08676693,5.94277844 3.92978239,5.78553848 L0.221118462,1.2997069 C-0.0737061539,1.00469478 -0.0737061539,0.526236029 0.221118462,0.231972666 C0.515177299,-0.0630394586 1.23500883,0.00734414472 1.64852907,0.00734414472 L7.77475484,0.00734414472 C8.21201421,0.00734414472 8.48539703,-0.0630394586 8.77945587,0.231972666 C9.07351471,0.526236029 9.07351471,1.00469478 8.77945587,1.2997069 L5.07079194,5.78553848 Z\"\n fill=\"#FFFFFE\"></path>\n </g>\n</svg>\n";
43329
43329
 
43330
- const VERSION$6 = '0.0.1';
43331
- const T$h = 'plugins.audio_selector';
43330
+ const VERSION$6 = '2.22.4';
43331
+ // const T = 'plugins.audiotracks'
43332
43332
  /**
43333
43333
  * `PLUGIN` that makes possible to switch audio tracks via the media control UI.
43334
43334
  * @beta
@@ -43339,14 +43339,14 @@ const T$h = 'plugins.audio_selector';
43339
43339
  *
43340
43340
  * - {@link MediaControl}
43341
43341
  */
43342
- class AudioSelector extends UICorePlugin {
43342
+ class AudioTracks extends UICorePlugin {
43343
43343
  currentTrack = null;
43344
43344
  tracks = [];
43345
43345
  /**
43346
43346
  * @internal
43347
43347
  */
43348
43348
  get name() {
43349
- return 'audio_selector';
43349
+ return 'audio_selector'; // TODO rename to audiotracks
43350
43350
  }
43351
43351
  /**
43352
43352
  * @internal
@@ -43375,58 +43375,43 @@ class AudioSelector extends UICorePlugin {
43375
43375
  get events() {
43376
43376
  return {
43377
43377
  'click [data-audiotracks-select]': 'onTrackSelect',
43378
- 'click [data-audiotracks-button]': 'onShowLevelSelectMenu',
43378
+ 'click #audiotracks-button': 'toggleContextMenu',
43379
43379
  };
43380
43380
  }
43381
43381
  /**
43382
43382
  * @internal
43383
43383
  */
43384
43384
  bindEvents() {
43385
- this.listenTo(this.core, Events$1.CORE_READY, this.onCoreReady);
43385
+ this.listenToOnce(this.core, Events$1.CORE_READY, this.onCoreReady);
43386
43386
  this.listenTo(this.core, Events$1.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
43387
43387
  }
43388
43388
  onCoreReady() {
43389
- trace(`${T$h} onCoreReady`);
43390
43389
  const mediaControl = this.core.getPlugin('media_control');
43391
43390
  assert(mediaControl, 'media_control plugin is required');
43392
- this.listenTo(mediaControl, Events$1.MEDIACONTROL_RENDERED, this.render);
43393
- this.listenTo(mediaControl, Events$1.MEDIACONTROL_HIDE, this.hideSelectTrackMenu);
43391
+ this.listenTo(mediaControl, Events$1.MEDIACONTROL_RENDERED, () => {
43392
+ mediaControl.putElement('audiotracks', this.$el);
43393
+ });
43394
+ this.listenTo(mediaControl, Events$1.MEDIACONTROL_HIDE, this.hideMenu);
43394
43395
  }
43395
- bindPlaybackEvents() {
43396
- trace(`${T$h} bindPlaybackEvents`);
43396
+ onActiveContainerChanged() {
43397
43397
  this.currentTrack = null;
43398
- this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_STOP, this.onStop);
43399
- this.setupAudioTrackListeners();
43400
- }
43401
- setupAudioTrackListeners() {
43402
- this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_AUDIO_AVAILABLE, (tracks) => {
43403
- trace(`${T$h} on PLAYBACK_AUDIO_AVAILABLE`, { audioTracks: tracks });
43398
+ this.listenTo(this.core.activeContainer, Events$1.CONTAINER_AUDIO_AVAILABLE, (tracks) => {
43404
43399
  this.currentTrack =
43405
- tracks.find((track) => track.kind === 'main') ?? null;
43406
- this.fillTracks(tracks);
43400
+ tracks.find((track) => track.kind === 'main') ?? null; // TODO test
43401
+ this.tracks = tracks;
43402
+ this.render();
43407
43403
  });
43408
- this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_AUDIO_CHANGED, (track) => {
43409
- trace(`${T$h} PLAYBACK_AUDIO_CHANGED`, { audioTrack: track });
43404
+ this.listenTo(this.core.activeContainer, Events$1.CONTAINER_AUDIO_CHANGED, (track) => {
43410
43405
  this.currentTrack = track;
43411
43406
  this.highlightCurrentTrack();
43412
43407
  this.buttonElement().removeClass('changing');
43413
43408
  this.updateText();
43414
43409
  });
43415
43410
  }
43416
- onStop() {
43417
- trace(`${T$h} onStop`);
43418
- }
43419
- onActiveContainerChanged() {
43420
- trace(`${T$h} onActiveContainerChanged`);
43421
- this.bindPlaybackEvents();
43422
- }
43423
43411
  shouldRender() {
43424
- if (!this.core.activePlayback) {
43425
- return false;
43426
- }
43427
- this.tracks = this.core.activePlayback.audioTracks;
43412
+ // Render is called from the parent class constructor so tracks aren't available
43428
43413
  // Only care if we have at least 2 to choose from
43429
- return this.tracks && this.tracks.length > 1;
43414
+ return this.tracks?.length > 1;
43430
43415
  }
43431
43416
  /**
43432
43417
  * @internal
@@ -43435,43 +43420,35 @@ class AudioSelector extends UICorePlugin {
43435
43420
  if (!this.shouldRender()) {
43436
43421
  return this;
43437
43422
  }
43438
- const mediaControl = this.core.getPlugin('media_control');
43439
- this.$el.html(AudioSelector.template({ tracks: this.tracks, title: this.getTitle() }));
43440
- this.$('.audio-arrow').append(audioArrow);
43441
- mediaControl.putElement('audiotracks', this.el);
43423
+ this.core.getPlugin('media_control');
43424
+ this.$el.html(AudioTracks.template({
43425
+ tracks: this.tracks,
43426
+ title: this.getTitle(),
43427
+ icon: audioArrow,
43428
+ }));
43442
43429
  this.updateText();
43443
43430
  this.highlightCurrentTrack();
43444
43431
  return this;
43445
43432
  }
43446
- fillTracks(tracks) {
43447
- this.tracks = tracks;
43448
- this.render();
43449
- }
43450
- findTrackBy(id) {
43451
- return this.tracks.find((track) => track.id === id);
43452
- }
43453
43433
  onTrackSelect(event) {
43454
43434
  const id = event.target?.dataset?.audiotracksSelect;
43455
43435
  if (id) {
43456
43436
  this.selectAudioTrack(id);
43457
43437
  }
43458
- this.toggleContextMenu();
43438
+ this.hideMenu();
43459
43439
  event.stopPropagation();
43460
43440
  return false;
43461
43441
  }
43462
43442
  selectAudioTrack(id) {
43463
43443
  this.startTrackSwitch();
43464
- this.core.activePlayback.switchAudioTrack(id);
43444
+ this.core.activeContainer.switchAudioTrack(id);
43465
43445
  this.updateText();
43466
43446
  }
43467
- onShowLevelSelectMenu() {
43468
- this.toggleContextMenu();
43469
- }
43470
- hideSelectTrackMenu() {
43471
- this.$('ul').hide();
43447
+ hideMenu() {
43448
+ this.$el.find('#audiotracks-select').addClass('hidden');
43472
43449
  }
43473
43450
  toggleContextMenu() {
43474
- this.$('ul').toggle();
43451
+ this.$el.find('#audiotracks-select').toggleClass('hidden');
43475
43452
  }
43476
43453
  buttonElement() {
43477
43454
  return this.$('button');
@@ -43480,11 +43457,14 @@ class AudioSelector extends UICorePlugin {
43480
43457
  return this.$('button .audio-text');
43481
43458
  }
43482
43459
  trackElement(id) {
43483
- return this.$('ul a' +
43484
- (id !== undefined ? '[data-audiotracks-select="' + id + '"]' : '')).parent();
43460
+ return this.$('#audiotracks-select a' +
43461
+ (id !== undefined ? `[data-audiotracks-select="${id}"]` : '')).parent();
43485
43462
  }
43486
43463
  getTitle() {
43487
- return this.currentTrack?.label || '';
43464
+ if (!this.currentTrack) {
43465
+ return '';
43466
+ }
43467
+ return this.currentTrack.label || this.currentTrack.language;
43488
43468
  }
43489
43469
  startTrackSwitch() {
43490
43470
  this.buttonElement().addClass('changing');
@@ -50744,6 +50724,7 @@ var SpinnerEvents;
50744
50724
  * `PLUGIN` that shows a pending operation indicator when playback is buffering or in a similar state.
50745
50725
  * @public
50746
50726
  * @remarks
50727
+ * It is aliased as `Spinner` for convenience.
50747
50728
  * Events emitted - {@link SpinnerEvents}
50748
50729
  * Other plugins can use {@link SpinnerThreeBounce.show | show} and {@link SpinnerThreeBounce.hide | hide} methods to
50749
50730
  * implement custom pending/progress indication scenarios.
@@ -52311,4 +52292,4 @@ class VolumeFade extends UICorePlugin {
52311
52292
  }
52312
52293
  }
52313
52294
 
52314
- export { AudioSelector, BigMuteButton, BottomGear, ClapprNerdStats, ClapprStats, ClickToPause, ClipsPlugin, ClosedCaptions, ContextMenu, DvrControls, ErrorScreen, Favicon, GearEvents, GoogleAnalytics, LevelSelector, LogTracer, Logger, Logo, MediaControl, MultiCamera, PictureInPicture, PlaybackErrorCode, PlaybackRate, Player, PlayerEvent, Poster, SeekTime, SentryTracer, Share, SkipTime, SourceController, SpinnerEvents, SpinnerThreeBounce, ClosedCaptions as Subtitles, Telemetry, TelemetryEvent, Thumbnails, VolumeFade, VolumeFadeEvents, reportError, setTracer, trace, version };
52295
+ export { AudioTracks as AudioSelector, AudioTracks, BigMuteButton, BottomGear, ClapprNerdStats, ClapprStats, ClickToPause, ClipsPlugin, ClosedCaptions, ContextMenu, DvrControls, ErrorScreen, Favicon, GearEvents, GoogleAnalytics, LevelSelector, LogTracer, Logger, Logo, MediaControl, MultiCamera, PictureInPicture, PlaybackErrorCode, PlaybackRate, Player, PlayerEvent, Poster, SeekTime, SentryTracer, Share, SkipTime, SourceController, SpinnerThreeBounce as Spinner, SpinnerEvents, SpinnerThreeBounce, ClosedCaptions as Subtitles, Telemetry, TelemetryEvent, Thumbnails, VolumeFade, VolumeFadeEvents, reportError, setTracer, trace, version };
package/dist/player.d.ts CHANGED
@@ -2422,7 +2422,7 @@ export declare class SkipTime extends UICorePlugin {
2422
2422
  }
2423
2423
 
2424
2424
  /**
2425
- * `PLUGIN` that is responsible for managing the automatic failover between media sources.
2425
+ * `PLUGIN` that is managing the automatic failover between media sources.
2426
2426
  * @public
2427
2427
  * @remarks
2428
2428
  * Have a look at the {@link https://miro.com/app/board/uXjVLiN15tY=/?share_link_id=390327585787 | source failover diagram} for the details
@@ -2527,11 +2527,12 @@ export declare enum SpinnerEvents {
2527
2527
  * `PLUGIN` that shows a pending operation indicator when playback is buffering or in a similar state.
2528
2528
  * @public
2529
2529
  * @remarks
2530
- * Events emitted- {@link SpinnerEvents}
2530
+ * It is aliased as `Spinner` for convenience.
2531
+ * Events emitted - {@link SpinnerEvents}
2531
2532
  * Other plugins can use {@link SpinnerThreeBounce.show | show} and {@link SpinnerThreeBounce.hide | hide} methods to
2532
2533
  * implement custom pending/progress indication scenarios.
2533
2534
  */
2534
- export declare class SpinnerThreeBounce extends UIContainerPlugin {
2535
+ declare class SpinnerThreeBounce extends UIContainerPlugin {
2535
2536
  private userShown;
2536
2537
  /**
2537
2538
  * @internal
@@ -2579,6 +2580,8 @@ export declare class SpinnerThreeBounce extends UIContainerPlugin {
2579
2580
  */
2580
2581
  render(): this;
2581
2582
  }
2583
+ export { SpinnerThreeBounce as Spinner }
2584
+ export { SpinnerThreeBounce }
2582
2585
 
2583
2586
  /**
2584
2587
  * Playback stall event data