@gcorevideo/player 2.20.6 → 2.20.8

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 (65) hide show
  1. package/dist/core.js +37 -13
  2. package/dist/index.css +1163 -1163
  3. package/dist/index.js +2557 -2513
  4. package/dist/plugins/index.css +470 -470
  5. package/dist/plugins/index.js +5230 -5217
  6. package/lib/playback/BasePlayback.d.ts +5 -0
  7. package/lib/playback/BasePlayback.d.ts.map +1 -1
  8. package/lib/playback/BasePlayback.js +8 -0
  9. package/lib/playback/HTML5Video.d.ts +4 -0
  10. package/lib/playback/HTML5Video.d.ts.map +1 -0
  11. package/lib/playback/HTML5Video.js +3 -0
  12. package/lib/playback/dash-playback/DashPlayback.d.ts +1 -0
  13. package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
  14. package/lib/playback/dash-playback/DashPlayback.js +6 -2
  15. package/lib/playback/index.d.ts.map +1 -1
  16. package/lib/playback/index.js +2 -0
  17. package/lib/playback/types.d.ts +9 -0
  18. package/lib/playback/types.d.ts.map +1 -0
  19. package/lib/playback/types.js +9 -0
  20. package/lib/plugins/bottom-gear/BottomGear.d.ts +6 -11
  21. package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
  22. package/lib/plugins/bottom-gear/BottomGear.js +9 -21
  23. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.js +2 -2
  24. package/lib/plugins/dvr-controls/DvrControls.d.ts +1 -1
  25. package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
  26. package/lib/plugins/dvr-controls/DvrControls.js +27 -16
  27. package/lib/plugins/level-selector/LevelSelector.d.ts +17 -5
  28. package/lib/plugins/level-selector/LevelSelector.d.ts.map +1 -1
  29. package/lib/plugins/level-selector/LevelSelector.js +35 -24
  30. package/lib/plugins/media-control/MediaControl.d.ts +11 -0
  31. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
  32. package/lib/plugins/media-control/MediaControl.js +16 -3
  33. package/lib/plugins/playback-rate/PlaybackRate.d.ts +11 -10
  34. package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
  35. package/lib/plugins/playback-rate/PlaybackRate.js +83 -91
  36. package/lib/plugins/source-controller/SourceController.d.ts +1 -0
  37. package/lib/plugins/source-controller/SourceController.d.ts.map +1 -1
  38. package/lib/plugins/source-controller/SourceController.js +8 -4
  39. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts +7 -3
  40. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts.map +1 -1
  41. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.js +35 -27
  42. package/lib/testUtils.d.ts +5 -8
  43. package/lib/testUtils.d.ts.map +1 -1
  44. package/lib/testUtils.js +15 -9
  45. package/package.json +1 -1
  46. package/src/playback/BasePlayback.ts +12 -4
  47. package/src/playback/HTML5Video.ts +3 -0
  48. package/src/playback/dash-playback/DashPlayback.ts +15 -11
  49. package/src/playback/index.ts +2 -1
  50. package/src/playback/types.ts +9 -0
  51. package/src/plugins/bottom-gear/BottomGear.ts +10 -21
  52. package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +36 -0
  53. package/src/plugins/bottom-gear/__tests__/__snapshots__/BottomGear.test.ts.snap +41 -0
  54. package/src/plugins/clappr-nerd-stats/ClapprNerdStats.ts +3 -3
  55. package/src/plugins/dvr-controls/DvrControls.ts +87 -54
  56. package/src/plugins/level-selector/LevelSelector.ts +64 -31
  57. package/src/plugins/level-selector/__tests__/LevelSelector.test.ts +15 -16
  58. package/src/plugins/media-control/MediaControl.ts +20 -6
  59. package/src/plugins/playback-rate/PlaybackRate.ts +89 -105
  60. package/src/plugins/source-controller/SourceController.ts +9 -4
  61. package/src/plugins/source-controller/__tests__/SourceController.test.ts +35 -1
  62. package/src/plugins/spinner-three-bounce/SpinnerThreeBounce.ts +80 -57
  63. package/src/testUtils.ts +16 -9
  64. package/tsconfig.tsbuildinfo +1 -1
  65. package/assets/playback-rate/playback-rate-selector.ejs +0 -9
@@ -6,6 +6,11 @@ import { ErrorOptions, HTML5Video } from '@clappr/core';
6
6
  */
7
7
  export declare class BasePlayback extends HTML5Video {
8
8
  createError(errorData: any, options?: ErrorOptions): Error;
9
+ /**
10
+ * Sets the playback rate.
11
+ * @param rate - The playback rate to set.
12
+ */
13
+ setPlaybackRate(rate: number): void;
9
14
  _onPlaying(): void;
10
15
  }
11
16
  //# sourceMappingURL=BasePlayback.d.ts.map
@@ -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;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY;IA0BzC,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;;;;GAIG;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"}
@@ -26,6 +26,14 @@ export class BasePlayback extends HTML5Video {
26
26
  }
27
27
  return super.createError(errorData, options);
28
28
  }
29
+ /**
30
+ * Sets the playback rate.
31
+ * @param rate - The playback rate to set.
32
+ */
33
+ setPlaybackRate(rate) {
34
+ ;
35
+ this.el.playbackRate = rate;
36
+ }
29
37
  _onPlaying() {
30
38
  super._onPlaying();
31
39
  this.trigger(Events.PLAYBACK_MEDIACONTROL_ENABLE);
@@ -0,0 +1,4 @@
1
+ import { BasePlayback } from './BasePlayback.js';
2
+ export default class HTML5Video extends BasePlayback {
3
+ }
4
+ //# sourceMappingURL=HTML5Video.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HTML5Video.d.ts","sourceRoot":"","sources":["../../src/playback/HTML5Video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;CAAG"}
@@ -0,0 +1,3 @@
1
+ import { BasePlayback } from './BasePlayback.js';
2
+ export default class HTML5Video extends BasePlayback {
3
+ }
@@ -71,6 +71,7 @@ export default class DashPlayback extends BasePlayback {
71
71
  getPlaybackType(): string;
72
72
  isSeekEnabled(): boolean;
73
73
  private getLevel;
74
+ setPlaybackRate(rate: number): void;
74
75
  }
75
76
  export {};
76
77
  //# sourceMappingURL=DashPlayback.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DashPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/dash-playback/DashPlayback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DashPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/dash-playback/DashPlayback.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,QAAQ,EAAyB,MAAM,cAAc,CAAA;AAG3E,OAAO,MAAM,EAAE,EAIb,KAAK,WAAW,IAAI,eAAe,EAEnC,aAAa,EACd,MAAM,QAAQ,CAAA;AAEf,OAAO,EAGL,YAAY,EACZ,YAAY,EAEZ,SAAS,EACV,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAOjD,KAAK,YAAY,GACb,OAAO,QAAQ,CAAC,GAAG,GACnB,OAAO,QAAQ,CAAC,IAAI,GACpB,OAAO,QAAQ,CAAC,GAAG,GACnB,OAAO,QAAQ,CAAC,KAAK,CAAA;AAEzB,KAAK,YAAY,GAAG,MAAM,CAAA;AAE1B,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAKD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,YAAY;IACpD,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CAAO;IAErC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAO;IAKnC,mCAAmC,EAAE,OAAO,CAAQ;IAEpD,aAAa,EAAE,OAAO,CAAQ;IAI9B,uBAAuB,EAAE,MAAM,CAAI;IASnC,wBAAwB,EAAE,MAAM,CAAI;IAEpC,aAAa,EAAE,YAAY,CAAe;IAG1C,aAAa,EAAE,YAAY,GAAG,IAAI,CAAO;IAGzC,gBAAgB,EAAE,SAAS,CAAI;IAE/B,KAAK,EAAE,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAO;IAE5C,2BAA2B,EAAE,MAAM,CAAI;IAEvC,aAAa,EAAE,SAAS,GAAG,IAAI,CAAO;IAEtC,eAAe,EAAE,YAAY,CAA2B;IAIxD,0BAA0B,EAAE,oBAAoB,GAAG,IAAI,CAAO;IAI9D,wBAAwB,EAAE,oBAAoB,GAAG,IAAI,CAAO;IAE5D,kBAAkB,UAAQ;IAE1B,YAAY,EAAE,aAAa,GAAG,IAAI,CAAO;IAEzC,gBAAgB,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI,CAAO;IAE9D,IAAI,IAAI,WAEP;IAED,IAAI,MAAM,IAAI,YAAY,EAAE,CAE3B;IAED,IAAI,YAAY,IAAI,MAAM,CAMzB;IAED,IAAI,OAAO,YAEV;IAED,IAAI,YAAY,CAAC,EAAE,EAAE,MAAM,EAoC1B;IAED,IAAI,UAAU,WASb;IAED,IAAI,IAAI,WAEP;IAID,IAAI,sBAAsB,WAczB;IAID,IAAI,oBAAoB,WAgBvB;IAED,IAAI,SAAS,WAKZ;gBAEW,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG;IAOzD,MAAM;IA+EN,MAAM;IAMN,MAAM;YAMW,SAAS;IAI1B,qBAAqB;IAQrB,oBAAoB;IAMpB,kBAAkB;IAOlB,WAAW,IAAI,SAAS;IAQxB,cAAc,IAAI,SAAS;IAO3B,kBAAkB,IAAI,SAAS;IAItB,cAAc,CAAC,UAAU,EAAE,MAAM;IAejC,IAAI,CAAC,IAAI,EAAE,SAAS;IAgB7B,eAAe;IAIf,UAAU,CAAC,MAAM,EAAE,OAAO;IAKjB,eAAe;IAgBxB,OAAO,CAAC,gBAAgB,CAGvB;IAED,OAAO,CAAC,eAAe,CAmCtB;IAED,OAAO,CAAC,YAAY;IAmBX,aAAa;IAqBb,iBAAiB;IAW1B,IAAI,UAAU,YASb;IAEQ,WAAW;IAmBX,IAAI;IAUJ,KAAK;IAUL,IAAI;IASJ,OAAO;IAkBhB,mBAAmB;IAYnB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE;IAarC,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,gBAAgB;IAQxB,eAAe;IAIf,aAAa;IAIb,OAAO,CAAC,QAAQ;IAMhB,eAAe,CAAC,IAAI,EAAE,MAAM;CAG7B"}
@@ -8,6 +8,7 @@ import DASHJS from 'dashjs';
8
8
  import { PlaybackErrorCode, } from '../../playback.types.js';
9
9
  import { isDashSource } from '../../utils/mediaSources.js';
10
10
  import { BasePlayback } from '../BasePlayback.js';
11
+ import { PlaybackEvents } from '../types.js';
11
12
  const AUTO = -1;
12
13
  const { now } = Utils;
13
14
  const T = 'playback.dash';
@@ -188,8 +189,8 @@ export default class DashPlayback extends BasePlayback {
188
189
  }
189
190
  }
190
191
  });
191
- this._dash.on(DASHJS.MediaPlayer.events.PLAYBACK_RATE_CHANGED, () => {
192
- this.trigger('dash:playback-rate-changed');
192
+ this._dash.on(DASHJS.MediaPlayer.events.PLAYBACK_RATE_CHANGED, (e) => {
193
+ this.trigger(PlaybackEvents.PLAYBACK_RATE_CHANGED, e.playbackRate);
193
194
  });
194
195
  }
195
196
  render() {
@@ -455,6 +456,9 @@ export default class DashPlayback extends BasePlayback {
455
456
  assert.ok(ret, 'Invalid quality level');
456
457
  return ret;
457
458
  }
459
+ setPlaybackRate(rate) {
460
+ this._dash?.setPlaybackRate(rate);
461
+ }
458
462
  }
459
463
  DashPlayback.canPlay = function (resource, mimeType) {
460
464
  if (!isDashSource(resource, mimeType)) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/playback/index.ts"],"names":[],"mappings":"AAMA,wBAAgB,iBAAiB,SAGhC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,WAE5D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,WAE3D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/playback/index.ts"],"names":[],"mappings":"AAMA,wBAAgB,iBAAiB,SAIhC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,WAE5D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,WAE3D"}
@@ -1,8 +1,10 @@
1
1
  import { Loader } from '@clappr/core';
2
2
  import DashPlayback from './dash-playback/DashPlayback.js';
3
3
  import HlsPlayback from './hls-playback/HlsPlayback.js';
4
+ import HTML5Video from './HTML5Video.js';
4
5
  // TODO consider allowing the variation of the order of playback modules
5
6
  export function registerPlaybacks() {
7
+ Loader.registerPlayback(HTML5Video); // TODO check it overrides the default HTML5Video
6
8
  Loader.registerPlayback(HlsPlayback);
7
9
  Loader.registerPlayback(DashPlayback);
8
10
  }
@@ -0,0 +1,9 @@
1
+ export declare enum PlaybackEvents {
2
+ /**
3
+ * Emitted when the playback rate changes.
4
+ * Payload:
5
+ * - playbackRate number
6
+ */
7
+ PLAYBACK_RATE_CHANGED = "playback:rate-changed"
8
+ }
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/playback/types.ts"],"names":[],"mappings":"AACA,oBAAY,cAAc;IACxB;;;;OAIG;IACH,qBAAqB,0BAA0B;CAChD"}
@@ -0,0 +1,9 @@
1
+ export var PlaybackEvents;
2
+ (function (PlaybackEvents) {
3
+ /**
4
+ * Emitted when the playback rate changes.
5
+ * Payload:
6
+ * - playbackRate number
7
+ */
8
+ PlaybackEvents["PLAYBACK_RATE_CHANGED"] = "playback:rate-changed";
9
+ })(PlaybackEvents || (PlaybackEvents = {}));
@@ -2,16 +2,6 @@ import { UICorePlugin } from '@clappr/core';
2
2
  import '../../../assets/bottom-gear/gear.scss';
3
3
  import '../../../assets/bottom-gear/gear-sub-menu.scss';
4
4
  import { ZeptoResult } from '../../utils/types.js';
5
- /**
6
- * Custom events emitted by the plugin
7
- * @beta
8
- */
9
- export declare enum GearEvents {
10
- /**
11
- * Emitted when the gear menu is rendered
12
- */
13
- MEDIACONTROL_GEAR_RENDERED = "mediacontrol:gear:rendered"
14
- }
15
5
  /**
16
6
  * An element inside the gear menu
17
7
  * @beta
@@ -78,7 +68,12 @@ export declare class BottomGear extends UICorePlugin {
78
68
  * @internal
79
69
  */
80
70
  render(): this;
81
- private refresh;
71
+ /**
72
+ * Re-renders the gear menu.
73
+ * It fires the {@link MediaControlEvents.MEDIACONTROL_GEAR_RENDERED | MEDIACONTROL_GEAR_RENDERED} event,
74
+ * which the plugins that attach to the gear menu can listen to to re-render themselves.
75
+ */
76
+ refresh(): void;
82
77
  private toggleGearMenu;
83
78
  private hide;
84
79
  }
@@ -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,sBAAsB,CAAC;AAMnD;;;GAGG;AACH,oBAAY,UAAU;IACpB;;OAEG;IACH,0BAA0B,+BAA+B;CAC1D;AAED;;;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;;;MAKtB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACM,UAAU;IAUnB;;;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;IAU5B;;OAEG;IACM,MAAM;IAmBf,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,IAAI;CAGb"}
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,sBAAsB,CAAC;AAOnD;;;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;;;MAKtB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACM,UAAU;IASnB;;;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;IAkBf;;;;OAIG;IACH,OAAO;IAKP,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,IAAI;CAGb"}
@@ -7,19 +7,9 @@ import '../../../assets/bottom-gear/gear.scss';
7
7
  import '../../../assets/bottom-gear/gear-sub-menu.scss';
8
8
  import gearIcon from '../../../assets/icons/new/gear.svg';
9
9
  import gearHdIcon from '../../../assets/icons/new/gear-hd.svg';
10
+ import { MediaControlEvents } from '../media-control/MediaControl';
10
11
  const VERSION = '2.19.12';
11
12
  const T = 'plugins.bottom_gear';
12
- /**
13
- * Custom events emitted by the plugin
14
- * @beta
15
- */
16
- export var GearEvents;
17
- (function (GearEvents) {
18
- /**
19
- * Emitted when the gear menu is rendered
20
- */
21
- GearEvents["MEDIACONTROL_GEAR_RENDERED"] = "mediacontrol:gear:rendered";
22
- })(GearEvents || (GearEvents = {}));
23
13
  /**
24
14
  * Adds the gear button that triggers extra options menu on the right side of the {@link MediaControl | media control} UI
25
15
  * @beta
@@ -75,7 +65,6 @@ export class BottomGear extends UICorePlugin {
75
65
  const mediaControl = this.core.getPlugin('media_control');
76
66
  assert(mediaControl, 'media_control plugin is required');
77
67
  this.listenTo(this.core, ClapprEvents.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
78
- this.listenTo(this.core, 'gear:refresh', this.refresh); // TODO use direct plugin method call
79
68
  this.listenTo(mediaControl, ClapprEvents.MEDIACONTROL_RENDERED, this.render);
80
69
  this.listenTo(mediaControl, ClapprEvents.MEDIACONTROL_HIDE, this.hide); // TODO mediacontrol show as well
81
70
  }
@@ -102,14 +91,9 @@ export class BottomGear extends UICorePlugin {
102
91
  this.listenTo(this.core.activeContainer, ClapprEvents.CONTAINER_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);
103
92
  }
104
93
  highDefinitionUpdate(isHd) {
105
- trace(`${this.name} highDefinitionUpdate`, { isHd });
94
+ trace(`${T} highDefinitionUpdate`, { isHd });
106
95
  this.isHd = isHd;
107
- if (isHd) {
108
- this.$el.find('.gear-icon').html(gearHdIcon);
109
- }
110
- else {
111
- this.$el.find('.gear-icon').html(gearIcon);
112
- }
96
+ this.$el.find('.gear-icon').html(isHd ? gearHdIcon : gearIcon);
113
97
  }
114
98
  /**
115
99
  * @internal
@@ -126,10 +110,14 @@ export class BottomGear extends UICorePlugin {
126
110
  const icon = this.isHd ? gearHdIcon : gearIcon;
127
111
  this.$el.html(BottomGear.template({ icon, items }));
128
112
  mediaControl.getElement('gear')?.html(this.el);
129
- this.core.trigger('gear:rendered'); // @deprecated
130
- mediaControl.trigger(GearEvents.MEDIACONTROL_GEAR_RENDERED);
113
+ mediaControl.trigger(MediaControlEvents.MEDIACONTROL_GEAR_RENDERED);
131
114
  return this;
132
115
  }
116
+ /**
117
+ * Re-renders the gear menu.
118
+ * It fires the {@link MediaControlEvents.MEDIACONTROL_GEAR_RENDERED | MEDIACONTROL_GEAR_RENDERED} event,
119
+ * which the plugins that attach to the gear menu can listen to to re-render themselves.
120
+ */
133
121
  refresh() {
134
122
  this.render();
135
123
  this.$el.find('.gear-wrapper').show();
@@ -10,7 +10,7 @@ import '../../../assets/clappr-nerd-stats/clappr-nerd-stats.scss';
10
10
  import pluginHtml from '../../../assets/clappr-nerd-stats/clappr-nerd-stats.ejs';
11
11
  import buttonHtml from '../../../assets/clappr-nerd-stats/button.ejs';
12
12
  import statsIcon from '../../../assets/icons/new/stats.svg';
13
- import { GearEvents } from '../bottom-gear/BottomGear.js';
13
+ import { MediaControlEvents } from '../media-control/MediaControl.js';
14
14
  import assert from 'assert';
15
15
  const qualityClasses = [
16
16
  'speedtest-quality-value-1',
@@ -175,7 +175,7 @@ export class ClapprNerdStats extends UICorePlugin {
175
175
  const mediaControl = this.core.getPlugin('media_control');
176
176
  assert(mediaControl, 'media_control plugin is required');
177
177
  this.listenToOnce(this.core, Events.CORE_READY, this.init);
178
- this.listenTo(mediaControl, GearEvents.MEDIACONTROL_GEAR_RENDERED, this.addToBottomGear);
178
+ this.listenTo(mediaControl, MediaControlEvents.MEDIACONTROL_GEAR_RENDERED, this.addToBottomGear);
179
179
  }
180
180
  init() {
181
181
  this.container = this.core.activeContainer;
@@ -42,7 +42,7 @@ export declare class DvrControls extends UICorePlugin {
42
42
  */
43
43
  bindEvents(): void;
44
44
  private bindContainerEvents;
45
- private dvrChanged;
45
+ private onDvrChanged;
46
46
  private click;
47
47
  private settingsUpdate;
48
48
  private shouldRender;
@@ -1 +1 @@
1
- {"version":3,"file":"DvrControls.d.ts","sourceRoot":"","sources":["../../../src/plugins/dvr-controls/DvrControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAoB,YAAY,EAAY,MAAM,cAAc,CAAC;AAM9E,OAAO,gDAAgD,CAAC;AAExD;;;;;;;;;;GAUG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAErD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;gBAEW,IAAI,EAAE,IAAI;IAKtB;;OAEG;IACM,UAAU;IAQnB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,KAAK;IAab,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACM,MAAM;CAehB"}
1
+ {"version":3,"file":"DvrControls.d.ts","sourceRoot":"","sources":["../../../src/plugins/dvr-controls/DvrControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAoB,YAAY,EAAY,MAAM,cAAc,CAAA;AAM7E,OAAO,gDAAgD,CAAA;AAKvD;;;;;;;;;;GAUG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAEpD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;gBAEW,IAAI,EAAE,IAAI;IAKtB;;OAEG;IACM,UAAU;IAgBnB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,KAAK;IAab,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACM,MAAM;CAuBhB"}
@@ -3,6 +3,8 @@ import assert from 'assert';
3
3
  import { CLAPPR_VERSION } from '../../build.js';
4
4
  import dvrHTML from '../../../assets/dvr-controls/index.ejs';
5
5
  import '../../../assets/dvr-controls/dvr_controls.scss';
6
+ import { trace } from '@gcorevideo/utils';
7
+ const T = 'plugins.dvr_controls';
6
8
  /**
7
9
  * Adds the DVR controls to the media control UI
8
10
  * @beta
@@ -33,7 +35,7 @@ export class DvrControls extends UICorePlugin {
33
35
  */
34
36
  get events() {
35
37
  return {
36
- 'click .live-button': 'click'
38
+ 'click .live-button': 'click',
37
39
  };
38
40
  }
39
41
  /**
@@ -41,8 +43,8 @@ export class DvrControls extends UICorePlugin {
41
43
  */
42
44
  get attributes() {
43
45
  return {
44
- 'class': 'dvr-controls',
45
- 'data-dvr-controls': ''
46
+ class: 'dvr-controls',
47
+ 'data-dvr-controls': '',
46
48
  };
47
49
  }
48
50
  constructor(core) {
@@ -61,23 +63,25 @@ export class DvrControls extends UICorePlugin {
61
63
  }
62
64
  bindContainerEvents() {
63
65
  this.listenToOnce(this.core.activeContainer, Events.CONTAINER_TIMEUPDATE, this.render);
64
- this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.dvrChanged);
66
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.onDvrChanged);
65
67
  }
66
- dvrChanged(dvrEnabled) {
68
+ onDvrChanged(dvrEnabled) {
69
+ trace(`${T} onDvrChanged`, {
70
+ dvrEnabled,
71
+ });
67
72
  if (this.core.getPlaybackType() !== Playback.LIVE) {
68
73
  return;
69
74
  }
70
75
  this.settingsUpdate();
71
76
  this.core.mediaControl.$el.addClass('live');
72
77
  if (dvrEnabled) {
73
- this.core.mediaControl.$playbackRate.removeClass('playbackrate-enable');
78
+ // TODO
74
79
  this.core.mediaControl.$el
75
80
  .addClass('dvr')
76
81
  .find('.media-control-indicator[data-position], .media-control-indicator[data-duration]')
77
82
  .hide();
78
83
  }
79
84
  else {
80
- this.core.mediaControl.$playbackRate.addClass('playbackrate-enable');
81
85
  this.core.mediaControl.$el.removeClass('dvr');
82
86
  }
83
87
  }
@@ -102,24 +106,31 @@ export class DvrControls extends UICorePlugin {
102
106
  this.bindEvents();
103
107
  }
104
108
  shouldRender() {
105
- const useDvrControls = this.core.options.useDvrControls === undefined || !!this.core.options.useDvrControls;
109
+ const useDvrControls = this.core.options.useDvrControls === undefined ||
110
+ !!this.core.options.useDvrControls;
106
111
  return useDvrControls && this.core.getPlaybackType() === Playback.LIVE;
107
112
  }
108
113
  /**
109
114
  * @internal
110
115
  */
111
116
  render() {
117
+ trace(`${T} render`, {
118
+ dvrEnabled: this.core.activePlayback?.dvrEnabled,
119
+ });
120
+ if (!this.shouldRender()) {
121
+ return this;
122
+ }
112
123
  this.$el.html(DvrControls.template({
113
124
  live: this.core.i18n.t('live'),
114
- backToLive: this.core.i18n.t('back_to_live')
125
+ backToLive: this.core.i18n.t('back_to_live'),
115
126
  }));
116
- if (this.shouldRender()) {
117
- const mediaControl = this.core.getPlugin('media_control');
118
- assert(mediaControl, 'media_control plugin is required');
119
- // TODO don't tap into the $el directly
120
- mediaControl.$el.addClass('live');
121
- mediaControl.$('.media-control-left-panel[data-media-control]').append(this.$el);
122
- }
127
+ const mediaControl = this.core.getPlugin('media_control');
128
+ assert(mediaControl, 'media_control plugin is required');
129
+ // TODO don't tap into the $el directly
130
+ mediaControl.$el.addClass('live');
131
+ mediaControl
132
+ .$('.media-control-left-panel[data-media-control]')
133
+ .append(this.$el);
123
134
  return this;
124
135
  }
125
136
  }
@@ -1,5 +1,19 @@
1
1
  import { UICorePlugin } from '@clappr/core';
2
2
  import '../../../assets/level-selector/style.scss';
3
+ export interface LevelSelectorPluginSettings {
4
+ /**
5
+ * The maximum resolution to allow in the level selector.
6
+ */
7
+ restrictResolution?: number;
8
+ /**
9
+ * The labels to show in the level selector.
10
+ * @example
11
+ * ```ts
12
+ * { 360: 'SD', 720: 'HD' }
13
+ * ```
14
+ */
15
+ labels?: Record<number, string>;
16
+ }
3
17
  /**
4
18
  * A {@link MediaControl | media control} plugin that provides a UI to control the quality level of the playback.
5
19
  * @beta
@@ -15,11 +29,7 @@ import '../../../assets/level-selector/style.scss';
15
29
  *
16
30
  * When clicked, it shows a list of quality levels to choose from.
17
31
  *
18
- * Configuration options:
19
- *
20
- * - `labels`: The labels to show in the level selector. [video resolution]: string
21
- *
22
- * - `restrictResolution`: The maximum resolution to allow in the level selector.
32
+ * Configuration options - {@link LevelSelectorPluginSettings}
23
33
  *
24
34
  * @example
25
35
  * ```ts
@@ -71,6 +81,8 @@ export declare class LevelSelector extends UICorePlugin {
71
81
  * @internal
72
82
  */
73
83
  bindEvents(): void;
84
+ private onCoreReady;
85
+ private onGearRendered;
74
86
  private bindPlaybackEvents;
75
87
  private onStop;
76
88
  private shouldRender;
@@ -1 +1 @@
1
- {"version":3,"file":"LevelSelector.d.ts","sourceRoot":"","sources":["../../../src/plugins/level-selector/LevelSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,cAAc,CAAA;AAe7D,OAAO,2CAA2C,CAAA;AAOlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAqB;IAEnC,OAAO,CAAC,WAAW,CAAe;IAElC,OAAO,CAAC,UAAU,CAAQ;IAE1B,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAyC;IAE/E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAuC;IAE3E;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,eAAe,CAAK;IAE5B,IAAa,MAAM;;;;MAMlB;IAED;;OAEG;IACM,UAAU;IAKnB,OAAO,CAAC,kBAAkB;IAsC1B,OAAO,CAAC,MAAM;IAcd,OAAO,CAAC,YAAY;IAmBpB;;OAEG;IACM,MAAM;IAYf,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,cAAc;IActB,OAAO,KAAK,QAAQ,GAQnB;IAED,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,WAAW,CAAmC;CACvD"}
1
+ {"version":3,"file":"LevelSelector.d.ts","sourceRoot":"","sources":["../../../src/plugins/level-selector/LevelSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,cAAc,CAAA;AAgB7D,OAAO,2CAA2C,CAAA;AAMlD,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAqB;IAEnC,OAAO,CAAC,WAAW,CAAe;IAElC,OAAO,CAAC,UAAU,CAAQ;IAE1B,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAChB;IAEtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAuC;IAE3E;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,eAAe,CAAK;IAE5B,IAAa,MAAM;;;;MAMlB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,kBAAkB;IAwC1B,OAAO,CAAC,MAAM;IAcd,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACM,MAAM;IAUf,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,cAAc;IAetB,OAAO,KAAK,QAAQ,GASnB;IAED,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,WAAW,CAAmC;CACvD"}
@@ -1,5 +1,6 @@
1
1
  import { Events, template, UICorePlugin } from '@clappr/core';
2
2
  import { reportError, trace } from '@gcorevideo/utils';
3
+ import assert from 'assert';
3
4
  import { CLAPPR_VERSION } from '../../build.js';
4
5
  import buttonHtml from '../../../assets/level-selector/button.ejs';
5
6
  import listHtml from '../../../assets/level-selector/list.ejs';
@@ -8,7 +9,7 @@ import arrowRightIcon from '../../../assets/icons/new/arrow-right.svg';
8
9
  import arrowLeftIcon from '../../../assets/icons/new/arrow-left.svg';
9
10
  import checkIcon from '../../../assets/icons/new/check.svg';
10
11
  import '../../../assets/level-selector/style.scss';
11
- import assert from 'assert';
12
+ import { MediaControlEvents } from '../media-control/MediaControl.js';
12
13
  const T = 'plugins.level_selector';
13
14
  const VERSION = '2.19.4';
14
15
  /**
@@ -26,11 +27,7 @@ const VERSION = '2.19.4';
26
27
  *
27
28
  * When clicked, it shows a list of quality levels to choose from.
28
29
  *
29
- * Configuration options:
30
- *
31
- * - `labels`: The labels to show in the level selector. [video resolution]: string
32
- *
33
- * - `restrictResolution`: The maximum resolution to allow in the level selector.
30
+ * Configuration options - {@link LevelSelectorPluginSettings}
34
31
  *
35
32
  * @example
36
33
  * ```ts
@@ -90,14 +87,24 @@ export class LevelSelector extends UICorePlugin {
90
87
  * @internal
91
88
  */
92
89
  bindEvents() {
93
- this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, () => this.bindPlaybackEvents());
94
- this.listenTo(this.core, 'gear:rendered', this.render);
90
+ this.listenTo(this.core, Events.CORE_READY, this.onCoreReady);
91
+ this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.bindPlaybackEvents);
92
+ }
93
+ onCoreReady() {
94
+ trace(`${T} onCoreReady`);
95
+ const mediaControl = this.core.getPlugin('media_control');
96
+ assert(mediaControl, 'media_control plugin is required');
97
+ this.listenTo(mediaControl, MediaControlEvents.MEDIACONTROL_GEAR_RENDERED, this.onGearRendered);
98
+ }
99
+ onGearRendered() {
100
+ trace(`${T} onGearRendered`);
101
+ this.deferRender();
95
102
  }
96
103
  bindPlaybackEvents() {
97
104
  this.removeAuto = false;
98
105
  this.isHd = false;
99
106
  const activePlayback = this.core.activePlayback;
100
- this.listenTo(activePlayback, Events.PLAYBACK_LEVELS_AVAILABLE, (levels) => this.fillLevels(levels));
107
+ this.listenTo(activePlayback, Events.PLAYBACK_LEVELS_AVAILABLE, this.fillLevels);
101
108
  this.listenTo(activePlayback, Events.PLAYBACK_LEVEL_SWITCH_START, this.onLevelSwitchStart);
102
109
  this.listenTo(activePlayback, Events.PLAYBACK_LEVEL_SWITCH_END, this.onLevelSwitchEnd);
103
110
  this.listenTo(activePlayback, Events.PLAYBACK_BITRATE, this.updateCurrentLevel);
@@ -106,26 +113,24 @@ export class LevelSelector extends UICorePlugin {
106
113
  this.isHd = isHd;
107
114
  this.deferRender();
108
115
  });
109
- if (activePlayback?.levels?.length > 0) {
116
+ if (activePlayback.levels?.length > 0) {
110
117
  this.fillLevels(activePlayback.levels);
111
118
  }
112
119
  }
113
120
  onStop() {
114
121
  trace(`${T} onStop`);
115
- const currentPlayback = this.core.activePlayback;
116
- this.listenToOnce(currentPlayback, Events.PLAYBACK_PLAY, () => {
117
- trace(`${T} on PLAYBACK_PLAY after stop`, { selectedLevelId: this.selectedLevelId });
118
- if (currentPlayback.getPlaybackType() === 'live') {
122
+ this.listenToOnce(this.core.activePlayback, Events.PLAYBACK_PLAY, () => {
123
+ trace(`${T} on PLAYBACK_PLAY after stop`, {
124
+ selectedLevelId: this.selectedLevelId,
125
+ });
126
+ if (this.core.activePlayback.getPlaybackType() === 'live') {
119
127
  if (this.selectedLevelId !== -1) {
120
- currentPlayback.currentLevel = this.selectedLevelId;
128
+ this.core.activePlayback.currentLevel = this.selectedLevelId;
121
129
  }
122
130
  }
123
131
  });
124
132
  }
125
133
  shouldRender() {
126
- if (!this.core.activeContainer) {
127
- return false;
128
- }
129
134
  const activePlayback = this.core.activePlayback;
130
135
  if (!activePlayback) {
131
136
  return false;
@@ -141,7 +146,6 @@ export class LevelSelector extends UICorePlugin {
141
146
  * @internal
142
147
  */
143
148
  render() {
144
- assert(this.core.getPlugin('bottom_gear'), 'bottom_gear plugin is required');
145
149
  if (!this.shouldRender()) {
146
150
  return this;
147
151
  }
@@ -158,7 +162,10 @@ export class LevelSelector extends UICorePlugin {
158
162
  });
159
163
  this.$el.html(html);
160
164
  const gear = this.core.getPlugin('bottom_gear');
161
- gear.getElement('quality')?.html(this.el);
165
+ if (!gear) {
166
+ trace(`${T} renderButton: bottom_gear plugin not found`);
167
+ }
168
+ gear?.getElement('quality')?.html(this.el);
162
169
  }
163
170
  }
164
171
  renderDropdown() {
@@ -172,12 +179,14 @@ export class LevelSelector extends UICorePlugin {
172
179
  });
173
180
  this.$el.html(html);
174
181
  const gear = this.core.getPlugin('bottom_gear');
182
+ trace(`${T} renderDropdown: bottom_gear plugin not found`);
175
183
  gear?.setContent(this.el);
176
184
  }
177
185
  get maxLevel() {
178
186
  const maxRes = this.core.options.levelSelector?.restrictResolution;
179
187
  return maxRes
180
- ? this.levels.findIndex((level) => (level.height > level.width ? level.width : level.height) === maxRes)
188
+ ? this.levels.findIndex((level) => (level.height > level.width ? level.width : level.height) ===
189
+ maxRes)
181
190
  : -1;
182
191
  }
183
192
  fillLevels(levels) {
@@ -187,7 +196,8 @@ export class LevelSelector extends UICorePlugin {
187
196
  if (maxResolution) {
188
197
  this.removeAuto = true;
189
198
  const initialLevel = levels
190
- .filter((level) => (level.width > level.height ? level.height : level.width) <= maxResolution)
199
+ .filter((level) => (level.width > level.height ? level.height : level.width) <=
200
+ maxResolution)
191
201
  .pop();
192
202
  this.setLevel(initialLevel?.level ?? 0);
193
203
  }
@@ -212,8 +222,9 @@ export class LevelSelector extends UICorePlugin {
212
222
  goBack() {
213
223
  trace(`${T} goBack`);
214
224
  this.isOpen = false;
215
- this.core.trigger('gear:refresh');
216
- this.deferRender();
225
+ setTimeout(() => {
226
+ this.core.getPlugin('bottom_gear').refresh();
227
+ }, 0);
217
228
  }
218
229
  setLevel(index) {
219
230
  trace(`${T} setIndexLevel`, { index });
@@ -7,6 +7,16 @@ import '../../../assets/media-control/plugins.scss';
7
7
  * @beta
8
8
  */
9
9
  export type MediaControlElement = 'audioTracksSelector' | 'bottomGear' | 'clipText' | 'gear' | 'pip' | 'playbackRate' | 'seekBarContainer' | 'subtitlesSelector';
10
+ /**
11
+ * Custom events emitted by the plugins to communicate with one another
12
+ * @beta
13
+ */
14
+ export declare enum MediaControlEvents {
15
+ /**
16
+ * Emitted when the gear menu is rendered
17
+ */
18
+ MEDIACONTROL_GEAR_RENDERED = "mediacontrol:gear:rendered"
19
+ }
10
20
  /**
11
21
  * The MediaControl provides a foundation for developing custom media controls UI.
12
22
  * @beta
@@ -130,6 +140,7 @@ export declare class MediaControl extends UICorePlugin {
130
140
  'mouseenter .media-control-layer[data-controls]': string;
131
141
  'mouseleave .media-control-layer[data-controls]': string;
132
142
  };
143
+ get currentSeekPos(): number;
133
144
  /**
134
145
  * Current volume [0..100]
135
146
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,YAAY,EAMZ,IAAI,EACL,MAAM,cAAc,CAAA;AAQrB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGlD,OAAO,kDAAkD,CAAA;AACzD,OAAO,4CAA4C,CAAA;AAWnD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,qBAAqB,GACrB,YAAY,GACZ,UAAU,GACV,MAAM,GACN,KAAK,GACL,cAAc,GACd,kBAAkB,GAClB,mBAAmB,CAAA;AA6BvB;;;;;;;;;;;;GAYG;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,CAAsB;IAEtD,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,WAAW,CAA2B;IAE9C,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;;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;IAwChC,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;IAgD5B;;;;;;;;;;;;;;;;;OAiBG;IACH,UAAU,CAAC,IAAI,EAAE,mBAAmB,GAAG,WAAW,GAAG,IAAI;IAoBzD;;;OAGG;IACH,aAAa;IAIb,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;IAKjB;;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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"}