@gcorevideo/player 2.21.1 → 2.21.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.
Files changed (35) hide show
  1. package/assets/media-control/media-control.ejs +0 -5
  2. package/assets/media-control/media-control.scss +44 -54
  3. package/assets/media-control/width370.scss +3 -5
  4. package/assets/subtitles/combobox.ejs +7 -9
  5. package/assets/subtitles/style.scss +8 -15
  6. package/dist/core.js +4 -1
  7. package/dist/index.css +733 -750
  8. package/dist/index.js +135 -159
  9. package/dist/plugins/index.css +1401 -1418
  10. package/dist/plugins/index.js +124 -155
  11. package/lib/playback/BasePlayback.d.ts +1 -0
  12. package/lib/playback/BasePlayback.d.ts.map +1 -1
  13. package/lib/playback/BasePlayback.js +3 -0
  14. package/lib/playback.types.d.ts +5 -0
  15. package/lib/playback.types.d.ts.map +1 -1
  16. package/lib/plugins/bottom-gear/BottomGear.d.ts +1 -1
  17. package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
  18. package/lib/plugins/bottom-gear/BottomGear.js +2 -1
  19. package/lib/plugins/media-control/MediaControl.d.ts +0 -1
  20. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
  21. package/lib/plugins/media-control/MediaControl.js +7 -5
  22. package/lib/plugins/playback-rate/PlaybackRate.d.ts +1 -0
  23. package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
  24. package/lib/plugins/playback-rate/PlaybackRate.js +1 -0
  25. package/lib/plugins/subtitles/Subtitles.d.ts +21 -19
  26. package/lib/plugins/subtitles/Subtitles.d.ts.map +1 -1
  27. package/lib/plugins/subtitles/Subtitles.js +121 -151
  28. package/package.json +1 -1
  29. package/src/playback/BasePlayback.ts +4 -0
  30. package/src/playback.types.ts +6 -0
  31. package/src/plugins/bottom-gear/BottomGear.ts +3 -1
  32. package/src/plugins/media-control/MediaControl.ts +37 -20
  33. package/src/plugins/playback-rate/PlaybackRate.ts +1 -0
  34. package/src/plugins/subtitles/Subtitles.ts +144 -179
  35. package/tsconfig.tsbuildinfo +1 -1
@@ -10356,7 +10356,7 @@ function getPageX(event) {
10356
10356
  return 0;
10357
10357
  }
10358
10358
 
10359
- const mediaControlHTML = "<div class=\"media-control-background\" data-background></div>\n\n<div class=\"media-control-layer gcore-skin-bg-color\" data-controls>\n <% var renderBar = function(name) { %>\n <div class=\"bar-container\" data-<%= name %>>\n <div class=\"bar-background\" data-<%= name %>>\n <div class=\"bar-fill-1\" data-<%= name %>></div>\n <div class=\"bar-fill-2 gcore-skin-main-color\" data-<%= name %>></div>\n <div class=\"bar-hover\" data-<%= name %>></div>\n </div>\n </div>\n <div class=\"bar-scrubber\" data-<%= name %>>\n <div class=\"bar-scrubber-icon gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n <% }; %>\n <% var renderSegmentedBar = function(name, segments) {\n segments = segments || 10; %>\n <div class=\"bar-container\" data-<%= name %>>\n <div class=\"bar-background\" data-<%= name %>>\n <div class=\"bar-fill-1 gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n <div class=\"bar-scrubber\" data-<%= name %>>\n <div class=\"bar-scrubber-icon gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n </div>\n <% }; %>\n <% var renderDrawer = function(name, renderContent) { %>\n <div class=\"drawer-container\" data-<%= name %>>\n <div class=\"drawer-icon-container\" data-<%= name %>>\n <div class=\"drawer-icon media-control-icon gcore-skin-button-color\" data-<%= name %>></div>\n <span class=\"drawer-text\" data-<%= name %>></span>\n </div>\n <% renderContent(name); %>\n </div>\n <% }; %>\n <% var renderIndicator = function(name) { %>\n <div class=\"media-control-indicator gcore-skin-text-color\" data-<%= name %>></div>\n <% }; %>\n <% var renderQuality = function(name) { %>\n <div class=\"media-control-quality\" data-<%= name %>></div>\n <% }; %>\n <% var renderNerd = function(name) { %>\n <div class=\"media-control-nerd\" data-<%= name %>></div>\n <% }; %>\n <% var renderSubtitles = function(name) { %>\n <div class=\"media-control-subtitles\" data-<%= name %>></div>\n <% }; %>\n <% var renderMultiCamera = function(name) { %>\n <div class=\"media-control-multicamera\" data-<%= name %>></div>\n <% }; %>\n <% var renderClipsText = function(name) { %>\n\n <div class=\"media-clip-container gcore-skin-text-color\" data-<%= name %>>\n <div class=\"media-clip-point gcore-skin-text-color\" data-<%= name %>>•</div>\n <div class=\"media-clip-text gcore-skin-text-color\" data-<%= name %>></div>\n </div>\n <% }; %>\n <% var renderPlaybackRate = function(name) { %>\n <div class=\"media-control-playbackrate\" data-<%= name %>></div>\n <% }; %>\n <% var renderVR = function(name) { %>\n <div class=\"media-control-vr\" data-<%= name %>></div>\n <% }; %>\n <% var renderButton = function(name) { %>\n <button type=\"button\" class=\"media-control-button media-control-icon gcore-skin-button-color\" data-<%= name %>\n aria-label=\"<%= name %>\"></button>\n <% }; %>\n\n <% var templates = {\n bar: renderBar,\n segmentedBar: renderSegmentedBar,\n };\n var render = function (settingsList) {\n settingsList.forEach(function (setting) {\n\n if (setting === \"seekbar\") {\n renderBar(setting);\n } else if (setting === \"volume\") {\n renderDrawer(setting, settings.volumeBarTemplate ? templates[settings.volumeBarTemplate] : function (name) {\n return renderSegmentedBar(name);\n });\n } else if (setting === \"duration\" || setting === \"position\") {\n renderIndicator(setting);\n } else if (setting === \"quality\") {\n renderQuality(setting)\n } else if (setting === \"nerd\") {\n renderNerd(setting)\n } else if (setting === \"multicamera\") {\n renderMultiCamera(setting)\n } else if (setting === \"subtitles\") {\n renderSubtitles(setting)\n } else if (setting === \"playbackrate\") {\n renderPlaybackRate(setting)\n } else if (setting === \"vr\") {\n renderVR(setting)\n } else if (setting === \"clipsText\") {\n renderClipsText(setting)\n } else {\n renderButton(setting);\n }\n });\n }; %>\n <% if (settings.left && settings.left.length) { %>\n <div class=\"media-control-left-panel\" data-media-control>\n <% render(settings.left); %>\n </div>\n <% } %>\n <% if (settings.default && settings.default.length) { %>\n <div class=\"media-control-center-panel\" data-media-control>\n <% render(settings.default); %>\n </div>\n <% } %>\n <% if (settings.right && settings.right.length) { %>\n <div class=\"media-control-right-panel\" data-media-control>\n <% render(settings.right); %>\n </div>\n <% } %>\n</div>\n";
10359
+ const mediaControlHTML = "<div class=\"media-control-background\" data-background></div>\n\n<div class=\"media-control-layer gcore-skin-bg-color\" data-controls>\n <% var renderBar = function(name) { %>\n <div class=\"bar-container\" data-<%= name %>>\n <div class=\"bar-background\" data-<%= name %>>\n <div class=\"bar-fill-1\" data-<%= name %>></div>\n <div class=\"bar-fill-2 gcore-skin-main-color\" data-<%= name %>></div>\n <div class=\"bar-hover\" data-<%= name %>></div>\n </div>\n </div>\n <div class=\"bar-scrubber\" data-<%= name %>>\n <div class=\"bar-scrubber-icon gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n <% }; %>\n <% var renderSegmentedBar = function(name, segments) {\n segments = segments || 10; %>\n <div class=\"bar-container\" data-<%= name %>>\n <div class=\"bar-background\" data-<%= name %>>\n <div class=\"bar-fill-1 gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n <div class=\"bar-scrubber\" data-<%= name %>>\n <div class=\"bar-scrubber-icon gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n </div>\n <% }; %>\n <% var renderDrawer = function(name, renderContent) { %>\n <div class=\"drawer-container\" data-<%= name %>>\n <div class=\"drawer-icon-container\" data-<%= name %>>\n <div class=\"drawer-icon media-control-icon gcore-skin-button-color\" data-<%= name %>></div>\n <span class=\"drawer-text\" data-<%= name %>></span>\n </div>\n <% renderContent(name); %>\n </div>\n <% }; %>\n <% var renderIndicator = function(name) { %>\n <div class=\"media-control-indicator gcore-skin-text-color\" data-<%= name %>></div>\n <% }; %>\n <% var renderQuality = function(name) { %>\n <div class=\"media-control-quality\" data-<%= name %>></div>\n <% }; %>\n <% var renderNerd = function(name) { %>\n <div class=\"media-control-nerd\" data-<%= name %>></div>\n <% }; %>\n <% var renderMultiCamera = function(name) { %>\n <div class=\"media-control-multicamera\" data-<%= name %>></div>\n <% }; %>\n <% var renderClipsText = function(name) { %>\n\n <div class=\"media-clip-container gcore-skin-text-color\" data-<%= name %>>\n <div class=\"media-clip-point gcore-skin-text-color\" data-<%= name %>>•</div>\n <div class=\"media-clip-text gcore-skin-text-color\" data-<%= name %>></div>\n </div>\n <% }; %>\n <% var renderPlaybackRate = function(name) { %>\n <div class=\"media-control-playbackrate\" data-<%= name %>></div>\n <% }; %>\n <% var renderVR = function(name) { %>\n <div class=\"media-control-vr\" data-<%= name %>></div>\n <% }; %>\n <% var renderButton = function(name) { %>\n <button type=\"button\" class=\"media-control-button media-control-icon gcore-skin-button-color\" data-<%= name %>\n aria-label=\"<%= name %>\"></button>\n <% }; %>\n\n <% var templates = {\n bar: renderBar,\n segmentedBar: renderSegmentedBar,\n };\n var render = function (settingsList) {\n settingsList.forEach(function (setting) {\n\n if (setting === \"seekbar\") {\n renderBar(setting);\n } else if (setting === \"volume\") {\n renderDrawer(setting, settings.volumeBarTemplate ? templates[settings.volumeBarTemplate] : function (name) {\n return renderSegmentedBar(name);\n });\n } else if (setting === \"duration\" || setting === \"position\") {\n renderIndicator(setting);\n } else if (setting === \"quality\") {\n renderQuality(setting)\n } else if (setting === \"nerd\") {\n renderNerd(setting)\n } else if (setting === \"multicamera\") {\n renderMultiCamera(setting)\n } else if (setting === \"playbackrate\") {\n renderPlaybackRate(setting)\n } else if (setting === \"vr\") {\n renderVR(setting)\n } else if (setting === \"clipsText\") {\n renderClipsText(setting)\n } else {\n renderButton(setting);\n }\n });\n }; %>\n <% if (settings.left && settings.left.length) { %>\n <div class=\"media-control-left-panel\" data-media-control>\n <% render(settings.left); %>\n </div>\n <% } %>\n <% if (settings.default && settings.default.length) { %>\n <div class=\"media-control-center-panel\" data-media-control>\n <% render(settings.default); %>\n </div>\n <% } %>\n <% if (settings.right && settings.right.length) { %>\n <div class=\"media-control-right-panel\" data-media-control>\n <% render(settings.right); %>\n </div>\n <% } %>\n</div>\n";
10360
10360
 
10361
10361
  const playIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_28_1564)\">\n <path d=\"M6 3V20L19.3571 11.5L6 3Z\" fill=\"#C9C9C9\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_28_1564\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n</svg>\n";
10362
10362
 
@@ -10450,7 +10450,6 @@ class MediaControl extends UICorePlugin {
10450
10450
  $seekBarLoaded = null;
10451
10451
  $seekBarPosition = null;
10452
10452
  $seekBarScrubber = null;
10453
- $subtitlesSelector = null;
10454
10453
  $volumeBarContainer = null;
10455
10454
  $volumeBarBackground = null;
10456
10455
  $volumeBarFill = null;
@@ -10471,7 +10470,8 @@ class MediaControl extends UICorePlugin {
10471
10470
  return { min: CLAPPR_VERSION };
10472
10471
  }
10473
10472
  get disabled() {
10474
- const playbackIsNOOP = this.core.activeContainer && this.core.activeContainer.getPlaybackType() === Playback.NO_OP;
10473
+ const playbackIsNOOP = this.core.activeContainer &&
10474
+ this.core.activeContainer.getPlaybackType() === Playback.NO_OP;
10475
10475
  return this.userDisabled || playbackIsNOOP;
10476
10476
  }
10477
10477
  /**
@@ -11128,7 +11128,6 @@ class MediaControl extends UICorePlugin {
11128
11128
  this.$volumeBarBackground = this.$el.find('.bar-background[data-volume]');
11129
11129
  this.$volumeBarFill = this.$el.find('.bar-fill-1[data-volume]');
11130
11130
  this.$volumeBarScrubber = this.$el.find('.bar-scrubber[data-volume]');
11131
- this.$subtitlesSelector = this.$el.find('.media-control-subtitles[data-subtitles]');
11132
11131
  this.$playbackRate = this.$el.find('.media-control-playbackrate[data-playbackrate]');
11133
11132
  this.$multiCameraSelector = this.$el.find('.media-control-multicamera[data-multicamera]');
11134
11133
  this.$clipText = this.$el.find('.media-clip-text[data-clipstext]');
@@ -11170,7 +11169,7 @@ class MediaControl extends UICorePlugin {
11170
11169
  case 'seekBarContainer':
11171
11170
  return this.$seekBarContainer;
11172
11171
  case 'subtitlesSelector':
11173
- return this.$subtitlesSelector;
11172
+ return null;
11174
11173
  }
11175
11174
  }
11176
11175
  putElement(name, element) {
@@ -11178,10 +11177,13 @@ class MediaControl extends UICorePlugin {
11178
11177
  case 'audioTracksSelector':
11179
11178
  this.getRightPanel().append(element);
11180
11179
  break;
11180
+ case 'gear':
11181
+ this.getRightPanel().append(element);
11182
+ break;
11181
11183
  case 'pip':
11182
11184
  this.getRightPanel().append(element);
11183
11185
  break;
11184
- case 'gear':
11186
+ case 'subtitlesSelector':
11185
11187
  this.getRightPanel().append(element);
11186
11188
  break;
11187
11189
  }
@@ -11476,6 +11478,7 @@ MediaControl.extend = function (properties) {
11476
11478
  };
11477
11479
 
11478
11480
  const VERSION$5 = '2.19.12';
11481
+ // TODO disabled if no items added
11479
11482
  /**
11480
11483
  * `PLUGIN` that adds the gear button with an extra options menu on the right side of the {@link MediaControl | media control} UI
11481
11484
  * @beta
@@ -11484,7 +11487,7 @@ const VERSION$5 = '2.19.12';
11484
11487
  *
11485
11488
  * Depends on:
11486
11489
  *
11487
- * - {@link MediaControl | media_control}
11490
+ * - {@link MediaControl}
11488
11491
  */
11489
11492
  class BottomGear extends UICorePlugin {
11490
11493
  isHd = false;
@@ -14567,7 +14570,7 @@ class ClipsPlugin extends UICorePlugin {
14567
14570
 
14568
14571
  const templateHtml$1 = "<ul class=\"context-menu-list\">\n <% if(options) { %>\n <% for (var i = 0; i < options.length; i++) { %>\n <li class=\"context-menu-list-item <%= options[i].class %>\"\n data-<%= options[i].name %>><%= options[i].label %></li>\n <% } %>\n <% } %>\n</ul>\n";
14569
14572
 
14570
- var version$1 = "2.21.1";
14573
+ var version$1 = "2.21.3";
14571
14574
 
14572
14575
  var packages = {
14573
14576
  "node_modules/@clappr/core": {
@@ -16148,6 +16151,7 @@ const T$6 = 'plugins.playback_rate';
16148
16151
  * - {@link BottomGear | bottom_gear}
16149
16152
  *
16150
16153
  * It renders a button in the gear menu, which opens a dropdown with the options to change the playback rate.
16154
+ * Note that the playback rate change is supported only for VOD or DVR enabled live streams.
16151
16155
  */
16152
16156
  class PlaybackRate extends UICorePlugin {
16153
16157
  playbackRates = DEFAULT_PLAYBACK_RATES;
@@ -17356,14 +17360,13 @@ const subtitlesOffIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"
17356
17360
 
17357
17361
  const subtitlesOnIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M16.238 16.1C13.979 16.1 12.578 14.538 12.578 11.997C12.578 9.462 13.973 7.9 16.238 7.9C18.087 7.9 19.5029 9.127 19.6219 10.824H18.032C17.876 9.927 17.168 9.338 16.238 9.338C15.011 9.338 14.249 10.354 14.249 11.997C14.249 13.641 15.011 14.662 16.243 14.662C17.178 14.662 17.881 14.111 18.038 13.251H19.627C19.492 14.938 18.119 16.1 16.238 16.1ZM8.03198 16.1C5.77298 16.1 4.37299 14.538 4.37299 11.997C4.37299 9.462 5.76798 7.9 8.03198 7.9C9.88098 7.9 11.298 9.127 11.416 10.824H9.82697C9.67097 9.927 8.96198 9.338 8.03198 9.338C6.80598 9.338 6.04297 10.354 6.04297 11.997C6.04297 13.641 6.80596 14.662 8.03796 14.662C8.97296 14.662 9.67601 14.111 9.83301 13.251H11.422C11.287 14.938 9.91398 16.1 8.03198 16.1ZM22.5 3H1.5C0.672 3 0 3.671 0 4.5V19.5C0 20.329 0.672 21 1.5 21H22.5C23.329 21 24 20.329 24 19.5V4.5C24 3.671 23.329 3 22.5 3Z\"\n fill=\"#C9C9C9\"/>\n <rect y=\"22\" width=\"24\" height=\"2\" rx=\"1\" fill=\"#F6413B\"/>\n</svg>\n";
17358
17362
 
17359
- const comboboxHTML = "<button data-subtitles-button class='media-control-button media-control-icon gcore-skin-button-color'>\n <span class='subtitle-text'></span>\n</button>\n\n<ul class='gcore-skin-bg-color'>\n <li><a href=\"#\" class='gcore-skin-text-color' data-subtitles-select=\"off\">off</a></li>\n <% for (const track of tracks) { %>\n <% if (track.kind === 'subtitles' || track.kind === 'captions') { %>\n <li>\n <a href=\"#\" class='gcore-skin-text-color' data-subtitles-select=\"<%= track.language %>\">\n <%= track.label %>\n </a>\n </li>\n <% } %>\n <% } %>\n</ul>\n";
17363
+ const comboboxHTML = "<button data-subtitles-button class='media-control-button media-control-icon gcore-skin-button-color'>\n <span class='subtitle-text'></span>\n</button>\n\n<ul class='gcore-skin-bg-color'>\n <% for (const t of tracks) { %>\n <li>\n <a href=\"#\" class='gcore-skin-text-color' data-subtitles-select=\"<%= t.id %>\">\n <%= t.name %>\n </a>\n </li>\n <% } %>\n <li><a href=\"#\" class='gcore-skin-text-color' data-subtitles-select=\"-1\">Off</a></li>\n</ul>\n";
17360
17364
 
17361
17365
  const stringHTML = "<div class=\"subtitle-string\">\n <p></p>\n</div>\n";
17362
17366
 
17363
17367
  const VERSION = '2.19.14';
17364
17368
  const LOCAL_STORAGE_SUBTITLES_ID = 'gplayer.plugins.subtitles.selected';
17365
17369
  const T$2 = 'plugins.subtitles';
17366
- const NO_TRACK = { language: 'off' };
17367
17370
  /**
17368
17371
  * `PLUGIN` that provides a UI to select the subtitles when available.
17369
17372
  * @beta
@@ -17373,10 +17376,7 @@ const NO_TRACK = { language: 'off' };
17373
17376
  *
17374
17377
  * - {@link MediaControl}
17375
17378
  *
17376
- * Configuration options:
17377
- *
17378
- * - subtitles.language - The language of the subtitles to select by default.
17379
- *
17379
+ * Configuration options - {@link SubtitlesPluginSettings}
17380
17380
  * @example
17381
17381
  * ```ts
17382
17382
  * import { Subtitles } from '@gcorevideo/player'
@@ -17392,11 +17392,10 @@ const NO_TRACK = { language: 'off' };
17392
17392
  * ```
17393
17393
  */
17394
17394
  class Subtitles extends UICorePlugin {
17395
- currentLevel = null;
17396
17395
  isPreselectedApplied = false;
17397
17396
  isShowing = false;
17398
- track = { ...NO_TRACK };
17399
- tracks = null;
17397
+ track = null;
17398
+ tracks = [];
17400
17399
  $string = null;
17401
17400
  /**
17402
17401
  * @internal
@@ -17423,7 +17422,7 @@ class Subtitles extends UICorePlugin {
17423
17422
  */
17424
17423
  get attributes() {
17425
17424
  return {
17426
- class: this.name,
17425
+ class: 'media-control-subtitles',
17427
17426
  'data-subtitles': '',
17428
17427
  };
17429
17428
  }
@@ -17432,28 +17431,32 @@ class Subtitles extends UICorePlugin {
17432
17431
  */
17433
17432
  get events() {
17434
17433
  return {
17435
- 'click [data-subtitles-select]': 'onLevelSelect',
17436
- 'click [data-subtitles-button]': 'onShowLevelSelectMenu',
17434
+ 'click [data-subtitles-select]': 'onItemSelect',
17435
+ 'click [data-subtitles-button]': 'toggleMenu',
17437
17436
  };
17438
17437
  }
17439
17438
  get preselectedLanguage() {
17440
- return this.core.options.subtitles?.language ?? 'off';
17439
+ return this.core.options.subtitles?.language ?? '';
17441
17440
  }
17442
17441
  /**
17443
17442
  * @internal
17444
17443
  */
17445
17444
  bindEvents() {
17445
+ this.listenTo(this.core, Events.CORE_READY, this.onCoreReady);
17446
+ this.listenTo(this.core, Events.CORE_RESIZE, this.playerResize);
17447
+ this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onContainerChanged);
17448
+ }
17449
+ onCoreReady() {
17446
17450
  const mediaControl = this.core.getPlugin('media_control');
17447
17451
  assert(mediaControl, 'media_control plugin is required');
17448
- this.listenTo(this.core, Events.CORE_RESIZE, this.playerResize);
17449
- this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.bindPlaybackEvents);
17450
17452
  this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
17451
- this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideSelectLevelMenu);
17453
+ this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideMenu);
17452
17454
  }
17453
- bindPlaybackEvents() {
17455
+ onContainerChanged() {
17454
17456
  this.listenTo(this.core.activeContainer, Events.CONTAINER_FULLSCREEN, this.playerResize);
17455
- this.listenToOnce(this.core.activePlayback, Events.PLAYBACK_PLAY, this.getTracks);
17456
17457
  this.listenTo(this.core.activeContainer, 'container:advertisement:start', this.onStartAd);
17458
+ this.listenTo(this.core.activePlayback, Events.PLAYBACK_SUBTITLE_AVAILABLE, this.onSubtitleAvailable);
17459
+ this.listenTo(this.core.activePlayback, Events.PLAYBACK_SUBTITLE_CHANGED, this.onSubtitleChanged);
17457
17460
  // fix for iOS
17458
17461
  const video = this.core.activePlayback.el;
17459
17462
  assert(video, 'video element is required');
@@ -17468,19 +17471,46 @@ class Subtitles extends UICorePlugin {
17468
17471
  }
17469
17472
  });
17470
17473
  }
17471
- getTracks() {
17472
- if (this.core.activePlayback) {
17473
- try {
17474
- const tracks = this.core.activePlayback.el
17475
- .textTracks;
17476
- if (tracks.length > 0) {
17477
- this.setTracks(tracks);
17478
- }
17474
+ onSubtitleAvailable() {
17475
+ this.applyTracks();
17476
+ }
17477
+ onSubtitleChanged({ id }) {
17478
+ if (id === -1) {
17479
+ this.clearSubtitleText();
17480
+ }
17481
+ for (const track of this.tracks) {
17482
+ if (track.id === id) {
17483
+ track.track.mode = 'showing';
17484
+ this.setSubtitleText(this.getSubtitleText(track.track));
17485
+ track.track.oncuechange = (e) => {
17486
+ try {
17487
+ if (track.track.activeCues?.length) {
17488
+ const html = track.track.activeCues[0].getCueAsHTML();
17489
+ this.setSubtitleText(html);
17490
+ }
17491
+ else {
17492
+ this.clearSubtitleText();
17493
+ }
17494
+ }
17495
+ catch (error) {
17496
+ }
17497
+ };
17479
17498
  }
17480
- catch (error) {
17499
+ else {
17500
+ track.track.oncuechange = null;
17501
+ track.track.mode = 'hidden';
17481
17502
  }
17482
17503
  }
17483
17504
  }
17505
+ applyTracks() {
17506
+ try {
17507
+ this.tracks = this.core.activePlayback.closedCaptionsTracks;
17508
+ this.applyPreselectedSubtitles();
17509
+ this.render();
17510
+ }
17511
+ catch (error) {
17512
+ }
17513
+ }
17484
17514
  onStartAd() {
17485
17515
  if (this.isShowing && this.core.activeContainer) {
17486
17516
  this.hide();
@@ -17494,8 +17524,8 @@ class Subtitles extends UICorePlugin {
17494
17524
  playerResize() {
17495
17525
  const shouldShow = this.core.activeContainer &&
17496
17526
  isFullscreen(this.core.activeContainer.el) &&
17497
- this.currentLevel &&
17498
- this.currentLevel.mode &&
17527
+ this.track &&
17528
+ this.track.track.mode &&
17499
17529
  Browser.isiOS &&
17500
17530
  this.isShowing;
17501
17531
  if (shouldShow) {
@@ -17516,7 +17546,7 @@ class Subtitles extends UICorePlugin {
17516
17546
  this.$string.hide();
17517
17547
  if (this.tracks) {
17518
17548
  for (const t of this.tracks) {
17519
- t.mode = 'hidden';
17549
+ t.track.mode = 'hidden';
17520
17550
  }
17521
17551
  }
17522
17552
  }
@@ -17528,23 +17558,20 @@ class Subtitles extends UICorePlugin {
17528
17558
  this.renderIcon();
17529
17559
  if (this.core.activeContainer &&
17530
17560
  isFullscreen(this.core.activeContainer.el) &&
17531
- this.currentLevel &&
17532
- this.currentLevel.mode &&
17561
+ this.track &&
17562
+ this.track.track.mode &&
17533
17563
  Browser.isiOS) {
17534
17564
  this.$string.hide();
17535
- this.currentLevel.mode = 'showing';
17565
+ this.track.track.mode = 'showing';
17536
17566
  }
17537
17567
  else {
17538
17568
  this.$string.show();
17539
17569
  }
17540
17570
  }
17541
17571
  shouldRender() {
17542
- return !!(this.tracks && this.tracks.length > 0);
17572
+ return this.tracks.length > 0;
17543
17573
  }
17544
17574
  resizeFont() {
17545
- if (!this.core.activeContainer) {
17546
- return;
17547
- }
17548
17575
  if (!this.$string) {
17549
17576
  return;
17550
17577
  }
@@ -17561,129 +17588,71 @@ class Subtitles extends UICorePlugin {
17561
17588
  if (!this.shouldRender()) {
17562
17589
  return this;
17563
17590
  }
17564
- trace(`${T$2} render`, {
17565
- tracks: this.tracks?.length,
17566
- track: this.track?.language,
17567
- });
17568
17591
  const mediaControl = this.core.getPlugin('media_control');
17569
- assert(mediaControl, 'media_control plugin is required');
17570
17592
  this.$el.html(Subtitles.template({ tracks: this.tracks }));
17571
17593
  this.core.activeContainer.$el.find('.subtitle-string').remove();
17572
17594
  this.$string = $(Subtitles.templateString());
17573
17595
  this.resizeFont();
17574
- this.core.activeContainer.$el.append(this.$string[0]);
17575
- const ss = mediaControl.getElement('subtitlesSelector');
17576
- if (ss && ss.length > 0) {
17577
- ss.append(this.el);
17578
- }
17579
- else {
17580
- mediaControl.getRightPanel().append(this.el);
17581
- }
17582
- this.updateCurrentLevel(this.track);
17583
- this.highlightCurrentSubtitles();
17584
- this.applyPreselectedSubtitles();
17596
+ this.core.activeContainer.$el.append(this.$string);
17597
+ mediaControl.putElement('subtitlesSelector', this.$el);
17598
+ this.updateSelection();
17585
17599
  this.renderIcon();
17586
17600
  return this;
17587
17601
  }
17588
- setTracks(tracks) {
17589
- this.tracks = tracks;
17590
- this.render();
17591
- }
17592
- findLevelBy(id) {
17593
- if (this.tracks) {
17594
- for (const track of this.tracks) {
17595
- if (track.language === id) {
17596
- return track; // TODO TrackInfo?
17597
- }
17598
- }
17599
- }
17602
+ findById(id) {
17603
+ return this.tracks.find((track) => track.id === id) ?? null;
17600
17604
  }
17601
- selectLevel(id) {
17605
+ selectItem(item) {
17602
17606
  this.clearSubtitleText();
17603
- this.track = this.findLevelBy(id) || { ...NO_TRACK };
17604
- this.hideSelectLevelMenu();
17605
- if (!this.track) {
17606
- this.track = { language: 'off' };
17607
- }
17608
- this.updateCurrentLevel(this.track);
17609
- }
17610
- onLevelSelect(event) {
17611
- const id = event.target.dataset.subtitlesSelect;
17612
- if (id) {
17613
- localStorage.setItem(LOCAL_STORAGE_SUBTITLES_ID, id);
17614
- this.selectLevel(id);
17615
- }
17607
+ this.track = item;
17608
+ this.hideMenu();
17609
+ this.updateSelection();
17610
+ }
17611
+ onItemSelect(event) {
17612
+ const id = event.target.dataset.subtitlesSelect ?? '-1';
17613
+ localStorage.setItem(LOCAL_STORAGE_SUBTITLES_ID, id);
17614
+ this.selectItem(this.findById(Number(id)));
17616
17615
  return false;
17617
17616
  }
17618
17617
  applyPreselectedSubtitles() {
17619
17618
  if (!this.isPreselectedApplied) {
17620
17619
  this.isPreselectedApplied = true;
17620
+ if (!this.preselectedLanguage) {
17621
+ return;
17622
+ }
17621
17623
  setTimeout(() => {
17622
- this.selectLevel(this.preselectedLanguage);
17623
- }, 300);
17624
+ this.selectItem(this.tracks.find((t) => t.track.language === this.preselectedLanguage) ?? null);
17625
+ }, 300); // TODO why delay?
17624
17626
  }
17625
17627
  }
17626
- onShowLevelSelectMenu() {
17627
- this.toggleContextMenu();
17628
- }
17629
- hideSelectLevelMenu() {
17628
+ hideMenu() {
17630
17629
  this.$('[data-subtitles] ul').hide();
17631
17630
  }
17632
- toggleContextMenu() {
17631
+ toggleMenu() {
17633
17632
  this.$('[data-subtitles] ul').toggle();
17634
17633
  }
17635
- buttonElement() {
17636
- return this.$('[data-subtitles] button');
17634
+ itemElement(id) {
17635
+ return this.$(`ul li a[data-subtitles-select="${id}"]`).parent();
17637
17636
  }
17638
- levelElement(id) {
17639
- return this.$('[data-subtitles] ul a' + (id ? '[data-subtitles-select="' + id + '"]' : '')).parent();
17640
- }
17641
- startLevelSwitch() {
17642
- this.buttonElement().addClass('changing');
17643
- }
17644
- stopLevelSwitch() {
17645
- this.buttonElement().removeClass('changing');
17637
+ allItemElements() {
17638
+ return this.$('[data-subtitles] li');
17646
17639
  }
17647
17640
  selectSubtitles() {
17648
- if (!this.currentLevel) {
17649
- return;
17650
- }
17651
- if (this.tracks) {
17652
- for (let i = 0; i < this.tracks.length; i++) {
17653
- const track = this.tracks[i];
17654
- if (track.language === this.currentLevel.language) {
17655
- track.mode = 'showing';
17656
- const currentTime = this.core.activePlayback?.getCurrentTime() ?? 0;
17657
- const cues = track.cues;
17658
- let subtitleText = '';
17659
- if (cues && cues.length) {
17660
- for (const cue of cues) {
17661
- if (currentTime >= cue.startTime && currentTime <= cue.endTime) {
17662
- subtitleText +=
17663
- cue.getCueAsHTML().textContent + '\n';
17664
- }
17665
- }
17666
- }
17667
- this.setSubtitleText(subtitleText);
17668
- track.oncuechange = (e) => {
17669
- try {
17670
- if (track.activeCues?.length) {
17671
- const html = track.activeCues[0].getCueAsHTML();
17672
- this.setSubtitleText(html);
17673
- }
17674
- else {
17675
- this.clearSubtitleText();
17676
- }
17677
- }
17678
- catch (error) {
17679
- }
17680
- };
17681
- continue;
17641
+ const trackId = this.track ? this.track.id : -1;
17642
+ this.core.activePlayback.closedCaptionsTrackId = trackId;
17643
+ }
17644
+ getSubtitleText(track) {
17645
+ const currentTime = this.core.activePlayback?.getCurrentTime() ?? 0;
17646
+ const cues = track.cues;
17647
+ const lines = [];
17648
+ if (cues && cues.length) {
17649
+ for (const cue of cues) {
17650
+ if (currentTime >= cue.startTime && currentTime <= cue.endTime) {
17651
+ lines.push(cue.getCueAsHTML().textContent);
17682
17652
  }
17683
- this.tracks[i].oncuechange = null;
17684
- this.tracks[i].mode = 'hidden';
17685
17653
  }
17686
17654
  }
17655
+ return lines.join('\n');
17687
17656
  }
17688
17657
  setSubtitleText(text) {
17689
17658
  this.$string.find('p').html(text);
@@ -17691,9 +17660,8 @@ class Subtitles extends UICorePlugin {
17691
17660
  clearSubtitleText() {
17692
17661
  this.setSubtitleText('');
17693
17662
  }
17694
- updateCurrentLevel(track) {
17695
- this.currentLevel = track;
17696
- if (track.language === 'off') {
17663
+ updateSelection() {
17664
+ if (!this.track) {
17697
17665
  this.hide();
17698
17666
  }
17699
17667
  else {
@@ -17703,21 +17671,22 @@ class Subtitles extends UICorePlugin {
17703
17671
  this.highlightCurrentSubtitles();
17704
17672
  }
17705
17673
  highlightCurrentSubtitles() {
17706
- this.levelElement().removeClass('current');
17707
- this.levelElement().find('a').removeClass('gcore-skin-active');
17708
- if (this.currentLevel) {
17709
- const currentLevelElement = this.levelElement(this.currentLevel.language);
17710
- currentLevelElement.addClass('current');
17711
- currentLevelElement.find('a').addClass('gcore-skin-active');
17712
- }
17674
+ this.allItemElements()
17675
+ .removeClass('current')
17676
+ .find('a')
17677
+ .removeClass('gcore-skin-active');
17678
+ trace(`${T$2} highlightCurrentSubtitles`, {
17679
+ track: this.track?.id,
17680
+ });
17681
+ const currentLevelElement = this.itemElement(this.track ? this.track.id : -1);
17682
+ currentLevelElement
17683
+ .addClass('current')
17684
+ .find('a')
17685
+ .addClass('gcore-skin-active');
17713
17686
  }
17714
17687
  renderIcon() {
17715
17688
  const icon = this.isShowing ? subtitlesOnIcon : subtitlesOffIcon;
17716
- this.core
17717
- .getPlugin('media_control')
17718
- .getElement('subtitlesSelector')
17719
- ?.find('span.subtitle-text')
17720
- .html(icon);
17689
+ this.$el.find('span.subtitle-text').html(icon);
17721
17690
  }
17722
17691
  }
17723
17692
 
@@ -4,6 +4,7 @@ import { ErrorOptions, HTML5Video } from '@clappr/core';
4
4
  * @internal
5
5
  */
6
6
  export declare class BasePlayback extends HTML5Video {
7
+ get isHTML5Video(): boolean;
7
8
  createError(errorData: any, options?: ErrorOptions): Error;
8
9
  /**
9
10
  * Sets the playback rate.
@@ -1 +1 @@
1
- {"version":3,"file":"BasePlayback.d.ts","sourceRoot":"","sources":["../../src/playback/BasePlayback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAU,UAAU,EAAe,MAAM,cAAc,CAAA;AAI5E;;;GAGG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY;IA0BlD;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM;IAInB,UAAU;CAIpB"}
1
+ {"version":3,"file":"BasePlayback.d.ts","sourceRoot":"","sources":["../../src/playback/BasePlayback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAU,UAAU,EAAe,MAAM,cAAc,CAAA;AAI5E;;;GAGG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,IAAI,YAAY,YAEf;IAED,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY;IA0BlD;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM;IAInB,UAAU;CAIpB"}
@@ -5,6 +5,9 @@ import { PlaybackErrorCode } from '../playback.types.js';
5
5
  * @internal
6
6
  */
7
7
  export class BasePlayback extends HTML5Video {
8
+ get isHTML5Video() {
9
+ return true;
10
+ }
8
11
  createError(errorData, options) {
9
12
  const i18n = this.i18n ||
10
13
  // @ts-ignore
@@ -123,4 +123,9 @@ export interface PlaybackError {
123
123
  icon?: string;
124
124
  };
125
125
  }
126
+ export interface TextTrackItem {
127
+ id: number;
128
+ name: string;
129
+ track: TextTrack;
130
+ }
126
131
  //# sourceMappingURL=playback.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"playback.types.d.ts","sourceRoot":"","sources":["../src/playback.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,OAAO,EAAE,SAAS,CAAA;IAClB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3D;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,oBAAY,iBAAiB;IAC3B;;OAEG;IACH,OAAO,kBAAkB;IACzB;;OAEG;IACH,sBAAsB,6BAA6B;IACnD;;OAEG;IACH,uBAAuB,+BAA+B;CACvD;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAElD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAA;AAEnE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,EAAE,iBAAiB,CAAA;IACvB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,KAAK,EAAE,UAAU,CAAA;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,KAAK,EAAE,mBAAmB,CAAA;IAE1B;;OAEG;IACH,EAAE,CAAC,EAAE;QACH,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF"}
1
+ {"version":3,"file":"playback.types.d.ts","sourceRoot":"","sources":["../src/playback.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,OAAO,EAAE,SAAS,CAAA;IAClB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3D;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,oBAAY,iBAAiB;IAC3B;;OAEG;IACH,OAAO,kBAAkB;IACzB;;OAEG;IACH,sBAAsB,6BAA6B;IACnD;;OAEG;IACH,uBAAuB,+BAA+B;CACvD;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAElD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAA;AAEnE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,EAAE,iBAAiB,CAAA;IACvB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,KAAK,EAAE,UAAU,CAAA;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,KAAK,EAAE,mBAAmB,CAAA;IAE1B;;OAEG;IACH,EAAE,CAAC,EAAE;QACH,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,CAAA;CACjB"}
@@ -15,7 +15,7 @@ export type GearItemElement = 'quality' | 'rate' | 'nerd';
15
15
  *
16
16
  * Depends on:
17
17
  *
18
- * - {@link MediaControl | media_control}
18
+ * - {@link MediaControl}
19
19
  */
20
20
  export declare class BottomGear extends UICorePlugin {
21
21
  private isHd;
@@ -1 +1 @@
1
- {"version":3,"file":"BottomGear.d.ts","sourceRoot":"","sources":["../../../src/plugins/bottom-gear/BottomGear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoC,MAAM,cAAc,CAAC;AAO9E,OAAO,uCAAuC,CAAC;AAC/C,OAAO,gDAAgD,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAO7C;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1D;;;;;;;;;GASG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,IAAI,CAAS;IAErB;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACM,UAAU;IAKnB;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI;IAIrD;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,WAAW;IAI/B,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACM,MAAM;IAiBf;;;;OAIG;IACH,OAAO;IAKP,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,WAAW;CAMpB"}
1
+ {"version":3,"file":"BottomGear.d.ts","sourceRoot":"","sources":["../../../src/plugins/bottom-gear/BottomGear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoC,MAAM,cAAc,CAAC;AAO9E,OAAO,uCAAuC,CAAC;AAC/C,OAAO,gDAAgD,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAO7C;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAI1D;;;;;;;;;GASG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,IAAI,CAAS;IAErB;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACM,UAAU;IAKnB;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI;IAIrD;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,WAAW;IAI/B,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACM,MAAM;IAiBf;;;;OAIG;IACH,OAAO;IAKP,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,WAAW;CAMpB"}
@@ -10,6 +10,7 @@ import gearHdIcon from '../../../assets/icons/new/gear-hd.svg';
10
10
  import { MediaControlEvents } from '../media-control/MediaControl';
11
11
  const VERSION = '2.19.12';
12
12
  const T = 'plugins.bottom_gear';
13
+ // TODO disabled if no items added
13
14
  /**
14
15
  * `PLUGIN` that adds the gear button with an extra options menu on the right side of the {@link MediaControl | media control} UI
15
16
  * @beta
@@ -18,7 +19,7 @@ const T = 'plugins.bottom_gear';
18
19
  *
19
20
  * Depends on:
20
21
  *
21
- * - {@link MediaControl | media_control}
22
+ * - {@link MediaControl}
22
23
  */
23
24
  export class BottomGear extends UICorePlugin {
24
25
  isHd = false;
@@ -65,7 +65,6 @@ export declare class MediaControl extends UICorePlugin {
65
65
  private $seekBarLoaded;
66
66
  private $seekBarPosition;
67
67
  private $seekBarScrubber;
68
- private $subtitlesSelector;
69
68
  private $volumeBarContainer;
70
69
  private $volumeBarBackground;
71
70
  private $volumeBarFill;
@@ -1 +1 @@
1
- {"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,YAAY,EAMZ,IAAI,EACL,MAAM,cAAc,CAAA;AASrB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG5C,OAAO,kDAAkD,CAAA;AAWzD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,qBAAqB,GACrB,UAAU,GACV,MAAM,GACN,KAAK,GACL,cAAc,GACd,kBAAkB,GAClB,mBAAmB,CAAA;AAEvB;;;GAGG;AACH,oBAAY,kBAAkB;IAC5B;;OAEG;IACH,0BAA0B,+BAA+B;CAC1D;AA6BD;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,oBAAoB,CAAQ;IAEpC,OAAO,CAAC,YAAY,CAAsB;IAE1C,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,wBAAwB,CAAI;IAEpC,OAAO,CAAC,qBAAqB,CAA0B;IACvD,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,0BAA0B,CAAsB;IAExD,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,iBAAiB,CAAQ;IAEjC,OAAO,CAAC,6BAA6B,CAAuB;IAE5D,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,YAAY,CAA6C;IAEjE,OAAO,CAAC,cAAc,CAAM;IAE5B,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,WAAW,CAAQ;IAE3B,OAAO,CAAC,IAAI,CAAM;IAElB,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,UAAU,CAAI;IAEtB,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,QAAQ,CAAQ;IAExB,OAAO,CAAC,QAAQ,CAA8B;IAE9C,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,eAAe,CAAQ;IAE/B,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,oBAAoB,CAA2B;IAEvD,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,kBAAkB,CAA2B;IAErD,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,iBAAiB,CAA2B;IAEpD,OAAO,CAAC,oBAAoB,CAA2B;IAEvD,OAAO,CAAC,IAAI,CAA2B;IAEvC,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,eAAe,CAA2B;IAElD,OAAO,CAAC,aAAa,CAA2B;IAEhD,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,iBAAiB,CAA2B;IAEpD,OAAO,CAAC,aAAa,CAA2B;IAEhD,OAAO,CAAC,cAAc,CAA2B;IAEjD,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,kBAAkB,CAA2B;IAErD,OAAO,CAAC,mBAAmB,CAA2B;IAEtD,OAAO,CAAC,oBAAoB,CAA2B;IAEvD,OAAO,CAAC,cAAc,CAA2B;IAEjD,OAAO,CAAC,kBAAkB,CAA2B;IAErD,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,WAAW,CAA2B;IAE9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAE7D;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,KAAK,QAAQ,GAKnB;IAED;;;OAGG;IACH,IAAI,SAAS,QAEZ;IAED;;;OAGG;IACH,IAAI,QAAQ,QAEX;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED;;OAEG;IACH,IAAa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;MA4BlB;IAED,IAAI,cAAc,WAEjB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAInB;IAED;;OAEG;IACH,IAAI,KAAK,YAER;gBAEW,IAAI,EAAE,IAAI;IAsBtB;;OAEG;IACM,oBAAoB;2BAoYZ,MAAM;;;IA7XvB;;OAEG;IACM,UAAU;IAyCnB,OAAO,CAAC,mBAAmB;IA6D3B;;OAEG;IACM,OAAO;IAQhB;;OAEG;IACM,MAAM;IAUf;;OAEG;IACH,gBAAgB;IAOhB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,cAAc;IA0DtB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,QAAQ,CAQf;IAED,OAAO,CAAC,UAAU,CAgBjB;IAED,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,UAAU;IAIlB;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,UAAQ;IA0BhD,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,wBAAwB;IAuChC,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,IAAI;IAkBZ,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,IAAI;IAgCZ,OAAO,CAAC,IAAI;IAmCZ,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,cAAc;IAkDtB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,oBAAoB;IA2C5B;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU,CAAC,IAAI,EAAE,mBAAmB,GAAG,WAAW,GAAG,IAAI;IAmBzD,UAAU,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,WAAW;IAc1D;;;OAGG;IACH,aAAa;IAIb;;;OAGG;IACH,YAAY;IAIZ,cAAc;IAId,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,aAAa;IA8CrB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,WAAW;IAiCnB,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACM,OAAO;IAShB,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACM,MAAM;IAoEf,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,MAAM,CAAC,QAAQ;IAIvB,OAAO,CAAC,MAAM,CAAC,QAAQ;IAcvB;;OAEG;IACH,mBAAmB;IAMnB;;OAEG;IACH,qBAAqB;IAMrB,OAAO,CAAC,6BAA6B;CAOtC"}
1
+ {"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}