@gcorevideo/player 2.20.3 → 2.20.5

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 (108) hide show
  1. package/assets/error-screen/error_screen.ejs +3 -1
  2. package/dist/core.js +436 -210
  3. package/dist/index.css +1223 -1223
  4. package/dist/index.js +580 -392
  5. package/dist/player.d.ts +10 -0
  6. package/dist/plugins/index.css +754 -754
  7. package/dist/plugins/index.js +122 -163
  8. package/docs/api/player.contextmenupluginsettings.label.md +3 -0
  9. package/docs/api/player.contextmenupluginsettings.md +8 -3
  10. package/docs/api/player.contextmenupluginsettings.preventshowcontextmenu.md +3 -0
  11. package/docs/api/player.contextmenupluginsettings.url.md +3 -0
  12. package/docs/api/player.md +6 -2
  13. package/docs/api/player.multicamera._constructor_.md +3 -0
  14. package/docs/api/player.multicamera.activebyid.md +3 -0
  15. package/docs/api/player.multicamera.attributes.md +3 -0
  16. package/docs/api/player.multicamera.bindevents.md +3 -0
  17. package/docs/api/player.multicamera.events.md +3 -0
  18. package/docs/api/player.multicamera.getcameraslist.md +3 -0
  19. package/docs/api/player.multicamera.getcurrentcamera.md +3 -0
  20. package/docs/api/player.multicamera.md +28 -1
  21. package/docs/api/player.multicamera.name.md +3 -0
  22. package/docs/api/player.multicamera.render.md +3 -0
  23. package/docs/api/player.multicamera.supportedversion.md +3 -0
  24. package/docs/api/player.multicamera.template.md +3 -0
  25. package/docs/api/player.multicamera.unbindevents.md +3 -0
  26. package/docs/api/player.multicamera.version.md +3 -0
  27. package/docs/api/player.volumefadeevents.md +7 -0
  28. package/docs/api/player.zeptoresult.md +1 -0
  29. package/lib/Player.d.ts +5 -3
  30. package/lib/Player.d.ts.map +1 -1
  31. package/lib/Player.js +32 -8
  32. package/lib/internal.types.d.ts +7 -7
  33. package/lib/internal.types.d.ts.map +1 -1
  34. package/lib/playback/BasePlayback.d.ts +11 -0
  35. package/lib/playback/BasePlayback.d.ts.map +1 -0
  36. package/lib/playback/BasePlayback.js +33 -0
  37. package/lib/playback/dash-playback/DashPlayback.d.ts +3 -2
  38. package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
  39. package/lib/playback/dash-playback/DashPlayback.js +7 -7
  40. package/lib/playback/hls-playback/HlsPlayback.d.ts +2 -2
  41. package/lib/playback/hls-playback/HlsPlayback.d.ts.map +1 -1
  42. package/lib/playback/hls-playback/HlsPlayback.js +8 -5
  43. package/lib/playback/utils.d.ts +2 -0
  44. package/lib/playback/utils.d.ts.map +1 -0
  45. package/lib/playback/utils.js +1 -0
  46. package/lib/playback.types.d.ts +10 -3
  47. package/lib/playback.types.d.ts.map +1 -1
  48. package/lib/playback.types.js +3 -3
  49. package/lib/plugins/context-menu/ContextMenu.d.ts +4 -0
  50. package/lib/plugins/context-menu/ContextMenu.d.ts.map +1 -1
  51. package/lib/plugins/context-menu/ContextMenu.js +1 -2
  52. package/lib/plugins/error-screen/ErrorScreen.d.ts +39 -24
  53. package/lib/plugins/error-screen/ErrorScreen.d.ts.map +1 -1
  54. package/lib/plugins/error-screen/ErrorScreen.js +70 -136
  55. package/lib/plugins/media-control/MediaControl.d.ts +1 -1
  56. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
  57. package/lib/plugins/media-control/MediaControl.js +7 -5
  58. package/lib/plugins/multi-camera/MultiCamera.d.ts +1 -0
  59. package/lib/plugins/multi-camera/MultiCamera.d.ts.map +1 -1
  60. package/lib/plugins/multi-camera/MultiCamera.js +5 -5
  61. package/lib/plugins/poster/Poster.js +1 -1
  62. package/lib/plugins/seek-time/SeekTime.js +1 -1
  63. package/lib/plugins/share/Share.js +1 -1
  64. package/lib/plugins/source-controller/SourceController.d.ts +2 -1
  65. package/lib/plugins/source-controller/SourceController.d.ts.map +1 -1
  66. package/lib/plugins/source-controller/SourceController.js +12 -6
  67. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts +2 -1
  68. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts.map +1 -1
  69. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.js +19 -3
  70. package/lib/plugins/volume-fade/VolumeFade.d.ts +4 -0
  71. package/lib/plugins/volume-fade/VolumeFade.d.ts.map +1 -1
  72. package/lib/plugins/volume-fade/VolumeFade.js +4 -0
  73. package/lib/testUtils.d.ts +66 -2
  74. package/lib/testUtils.d.ts.map +1 -1
  75. package/lib/testUtils.js +95 -2
  76. package/lib/types.d.ts +9 -1
  77. package/lib/types.d.ts.map +1 -1
  78. package/lib/utils/types.d.ts +1 -0
  79. package/lib/utils/types.d.ts.map +1 -1
  80. package/package.json +2 -2
  81. package/release_notes +297 -0
  82. package/src/Player.ts +103 -48
  83. package/src/__tests__/Player.test.ts +25 -4
  84. package/src/internal.types.ts +86 -79
  85. package/src/playback/BasePlayback.ts +41 -0
  86. package/src/playback/dash-playback/DashPlayback.ts +11 -15
  87. package/src/playback/hls-playback/HlsPlayback.ts +7 -5
  88. package/src/playback/utils.ts +2 -0
  89. package/src/playback.types.ts +11 -3
  90. package/src/plugins/context-menu/ContextMenu.ts +5 -2
  91. package/src/plugins/error-screen/ErrorScreen.ts +121 -195
  92. package/src/plugins/error-screen/__tests__/ErrorScreen.test.ts +113 -0
  93. package/src/plugins/error-screen/__tests__/__snapshots__/ErrorScreen.test.ts.snap +20 -0
  94. package/src/plugins/level-selector/__tests__/LevelSelector.test.ts +32 -57
  95. package/src/plugins/media-control/MediaControl.ts +8 -5
  96. package/src/plugins/multi-camera/MultiCamera.ts +5 -5
  97. package/src/plugins/poster/Poster.ts +1 -1
  98. package/src/plugins/seek-time/SeekTime.ts +1 -1
  99. package/src/plugins/share/Share.ts +1 -1
  100. package/src/plugins/source-controller/SourceController.ts +20 -14
  101. package/src/plugins/source-controller/__tests__/SourceController.test.ts +29 -46
  102. package/src/plugins/spinner-three-bounce/SpinnerThreeBounce.ts +20 -3
  103. package/src/plugins/volume-fade/VolumeFade.ts +4 -0
  104. package/src/testUtils.ts +100 -3
  105. package/src/types.ts +11 -1
  106. package/src/utils/types.ts +1 -0
  107. package/temp/player.api.json +24 -24
  108. package/tsconfig.tsbuildinfo +1 -1
@@ -1,5 +1,5 @@
1
1
  import { Events as ClapprEvents, CorePlugin, } from '@clappr/core';
2
- import { PlaybackErrorCode, } from '../../playback.types.js';
2
+ import { PlaybackErrorCode } from '../../playback.types.js';
3
3
  import { trace } from '@gcorevideo/utils';
4
4
  import { SpinnerEvents } from '../spinner-three-bounce/SpinnerThreeBounce.js';
5
5
  import { CLAPPR_VERSION } from '../../build.js';
@@ -100,10 +100,15 @@ export class SourceController extends CorePlugin {
100
100
  */
101
101
  bindEvents() {
102
102
  super.bindEvents();
103
- this.listenTo(this.core, ClapprEvents.CORE_ACTIVE_CONTAINER_CHANGED, () => this.onReady());
103
+ this.listenTo(this.core, ClapprEvents.CORE_READY, this.onCoreReady);
104
+ this.listenTo(this.core, ClapprEvents.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
104
105
  }
105
- onReady() {
106
- trace(`${T} onReady`, {
106
+ onCoreReady() {
107
+ trace(`${T} onCoreReady`);
108
+ this.core.getPlugin('error_screen')?.disable(); // TODO test
109
+ }
110
+ onActiveContainerChanged() {
111
+ trace(`${T} onActiveContainerChanged`, {
107
112
  retrying: this.active,
108
113
  currentSource: this.sourcesList[this.currentSourceIndex],
109
114
  });
@@ -119,7 +124,7 @@ export class SourceController extends CorePlugin {
119
124
  this.bindContainerEventListeners();
120
125
  if (this.active) {
121
126
  this.core.activeContainer?.getPlugin('poster_custom')?.disable();
122
- spinner?.show();
127
+ spinner?.show(0);
123
128
  }
124
129
  }
125
130
  bindContainerEventListeners() {
@@ -136,7 +141,7 @@ export class SourceController extends CorePlugin {
136
141
  switch (error.code) {
137
142
  case PlaybackErrorCode.MediaSourceUnavailable:
138
143
  this.core.activeContainer?.getPlugin('poster_custom')?.disable();
139
- this.retryPlayback();
144
+ setTimeout(() => this.retryPlayback(), 0);
140
145
  break;
141
146
  // TODO handle other errors
142
147
  default:
@@ -166,6 +171,7 @@ export class SourceController extends CorePlugin {
166
171
  currentSource: this.sourcesList[this.currentSourceIndex],
167
172
  });
168
173
  this.active = true;
174
+ this.core.activeContainer?.getPlugin('spinner')?.show(0);
169
175
  this.getNextMediaSource().then((nextSource) => {
170
176
  trace(`${T} retryPlayback syncing...`, {
171
177
  nextSource,
@@ -34,6 +34,7 @@ export declare class SpinnerThreeBounce extends UIContainerPlugin {
34
34
  'data-spinner': string;
35
35
  class: string;
36
36
  };
37
+ private hideTimeout;
37
38
  private showTimeout;
38
39
  private template;
39
40
  private hasFatalError;
@@ -47,7 +48,7 @@ export declare class SpinnerThreeBounce extends UIContainerPlugin {
47
48
  /**
48
49
  * Shows the spinner
49
50
  */
50
- show(): void;
51
+ show(delay?: number): void;
51
52
  /**
52
53
  * Hides the spinner
53
54
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SpinnerThreeBounce.d.ts","sourceRoot":"","sources":["../../../src/plugins/spinner-three-bounce/SpinnerThreeBounce.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAA0B,iBAAiB,EAAY,MAAM,cAAc,CAAC;AAK9F,OAAO,mDAAmD,CAAC;AAM3D;;GAEG;AACH,oBAAY,aAAa;IACvB;;;OAGG;IACH,IAAI,yBAAyB;CAC9B;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,iBAAiB;IACvD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED,OAAO,CAAC,WAAW,CAAwB;IAE3C,OAAO,CAAC,QAAQ,CAAyB;IAEzC,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,CAAC,YAAY,CAAQ;gBAEhB,SAAS,EAAE,SAAS;IAWhC,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,OAAO;IAef;;OAEG;IACH,IAAI;IAIJ;;OAEG;IACH,IAAI;IAQJ;;OAEG;IACM,MAAM;CAmBhB"}
1
+ {"version":3,"file":"SpinnerThreeBounce.d.ts","sourceRoot":"","sources":["../../../src/plugins/spinner-three-bounce/SpinnerThreeBounce.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAA0B,iBAAiB,EAAY,MAAM,cAAc,CAAC;AAK9F,OAAO,mDAAmD,CAAC;AAM3D;;GAEG;AACH,oBAAY,aAAa;IACvB;;;OAGG;IACH,IAAI,yBAAyB;CAC9B;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,iBAAiB;IACvD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED,OAAO,CAAC,WAAW,CAAwB;IAE3C,OAAO,CAAC,WAAW,CAAwB;IAE3C,OAAO,CAAC,QAAQ,CAAyB;IAEzC,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,CAAC,YAAY,CAAQ;gBAEhB,SAAS,EAAE,SAAS;IAWhC,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,OAAO;IAef;;OAEG;IACH,IAAI,CAAC,KAAK,SAAM;IAchB;;OAEG;IACH,IAAI;IAaJ;;OAEG;IACM,MAAM;CAmBhB"}
@@ -47,6 +47,7 @@ export class SpinnerThreeBounce extends UIContainerPlugin {
47
47
  'class': 'spinner-three-bounce'
48
48
  };
49
49
  }
50
+ hideTimeout = null;
50
51
  showTimeout = null;
51
52
  template = template(spinnerHTML);
52
53
  hasFatalError = false;
@@ -102,8 +103,18 @@ export class SpinnerThreeBounce extends UIContainerPlugin {
102
103
  /**
103
104
  * Shows the spinner
104
105
  */
105
- show() {
106
- this.showTimeout = setTimeout(() => this.$el.show(), 300);
106
+ show(delay = 300) {
107
+ trace(`${T} show`);
108
+ if (this.showTimeout === null) {
109
+ if (this.hideTimeout !== null) {
110
+ clearTimeout(this.hideTimeout);
111
+ this.hideTimeout = null;
112
+ }
113
+ this.showTimeout = setTimeout(() => {
114
+ this.showTimeout = null;
115
+ this.$el.show();
116
+ }, delay);
117
+ }
107
118
  }
108
119
  /**
109
120
  * Hides the spinner
@@ -113,7 +124,12 @@ export class SpinnerThreeBounce extends UIContainerPlugin {
113
124
  clearTimeout(this.showTimeout);
114
125
  this.showTimeout = null;
115
126
  }
116
- this.$el.hide();
127
+ this.hideTimeout = setTimeout(() => {
128
+ this.hideTimeout = null;
129
+ if (this.showTimeout === null) {
130
+ this.$el.hide();
131
+ }
132
+ }, 0);
117
133
  }
118
134
  /**
119
135
  * @internal
@@ -1,4 +1,8 @@
1
1
  import { UICorePlugin } from '@clappr/core';
2
+ /**
3
+ * Events emitted by the VolumeFade plugin.
4
+ * @beta
5
+ */
2
6
  export declare enum VolumeFadeEvents {
3
7
  FADE = "core:volume:fade"
4
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"VolumeFade.d.ts","sourceRoot":"","sources":["../../../src/plugins/volume-fade/VolumeFade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAiC,MAAM,cAAc,CAAC;AAK3E,oBAAY,gBAAgB;IAC1B,IAAI,qBAAqB;CAC1B;AAED;;;GAGG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,kBAAkB,CAAK;IAE/B,OAAO,CAAC,SAAS,CAA0B;IAE3C,OAAO,CAAC,KAAK,CAAK;IAElB,OAAO,CAAC,QAAQ,CAAwB;IAExC;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,QAAQ;IA0BhB,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,OAAO;CAGhB"}
1
+ {"version":3,"file":"VolumeFade.d.ts","sourceRoot":"","sources":["../../../src/plugins/volume-fade/VolumeFade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAiC,MAAM,cAAc,CAAC;AAK3E;;;GAGG;AACH,oBAAY,gBAAgB;IAC1B,IAAI,qBAAqB;CAC1B;AAED;;;GAGG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,kBAAkB,CAAK;IAE/B,OAAO,CAAC,SAAS,CAA0B;IAE3C,OAAO,CAAC,KAAK,CAAK;IAElB,OAAO,CAAC,QAAQ,CAAwB;IAExC;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,QAAQ;IA0BhB,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,OAAO;CAGhB"}
@@ -1,5 +1,9 @@
1
1
  import { UICorePlugin, Events, Browser, $ } from '@clappr/core';
2
2
  import { reportError } from '@gcorevideo/utils';
3
+ /**
4
+ * Events emitted by the VolumeFade plugin.
5
+ * @beta
6
+ */
3
7
  export var VolumeFadeEvents;
4
8
  (function (VolumeFadeEvents) {
5
9
  VolumeFadeEvents["FADE"] = "core:volume:fade";
@@ -1,8 +1,10 @@
1
- import EventLite from 'event-lite';
1
+ import Events from 'eventemitter3';
2
2
  /**
3
3
  * @internal
4
+ * @deprecated
5
+ * TODO use createMockPlayback() instead
4
6
  */
5
- export declare class _MockPlayback extends EventLite {
7
+ export declare class _MockPlayback extends Events {
6
8
  protected options: any;
7
9
  readonly i18n: any;
8
10
  protected playerError?: any | undefined;
@@ -31,4 +33,66 @@ export declare class _MockPlayback extends EventLite {
31
33
  onResize(): boolean;
32
34
  trigger(event: string, ...args: any[]): void;
33
35
  }
36
+ export declare function createMockCore(options?: Record<string, unknown>, container?: any): Events<string | symbol, any> & {
37
+ el: HTMLDivElement;
38
+ $el: {
39
+ 0: HTMLDivElement;
40
+ append: import("vitest").Mock<(...args: any[]) => any>;
41
+ };
42
+ activePlayback: any;
43
+ activeContainer: any;
44
+ options: {
45
+ [x: string]: unknown;
46
+ };
47
+ configure: import("vitest").Mock<(...args: any[]) => any>;
48
+ getPlugin: import("vitest").Mock<(...args: any[]) => any>;
49
+ load: import("vitest").Mock<(...args: any[]) => any>;
50
+ };
51
+ export declare function createMockPlugin(): Events<string | symbol, any> & {
52
+ enable: import("vitest").Mock<(...args: any[]) => any>;
53
+ disable: import("vitest").Mock<(...args: any[]) => any>;
54
+ };
55
+ export declare function createSpinnerPlugin(): Events<string | symbol, any> & {
56
+ enable: import("vitest").Mock<(...args: any[]) => any>;
57
+ disable: import("vitest").Mock<(...args: any[]) => any>;
58
+ } & {
59
+ show: import("vitest").Mock<(...args: any[]) => any>;
60
+ hide: import("vitest").Mock<(...args: any[]) => any>;
61
+ };
62
+ export declare function createMockPlayback(name?: string): Events<string | symbol, any> & {
63
+ name: string;
64
+ currentLevel: number;
65
+ levels: never[];
66
+ consent(): void;
67
+ play(): void;
68
+ pause(): void;
69
+ stop(): void;
70
+ destroy(): void;
71
+ seek(): void;
72
+ seekPercentage(): void;
73
+ getDuration(): 100;
74
+ enterPiP(): void;
75
+ exitPiP(): void;
76
+ getPlaybackType(): "live";
77
+ getStartTimeOffset(): 0;
78
+ getCurrentTime(): 0;
79
+ isHighDefinitionInUse(): false;
80
+ mute(): void;
81
+ unmute(): void;
82
+ volume(): void;
83
+ configure(): void;
84
+ attemptAutoPlay(): true;
85
+ canAutoPlay(): true;
86
+ onResize(): true;
87
+ trigger(event: string, ...args: any[]): void;
88
+ };
89
+ export declare function createMockContainer(playback?: any): Events<string | symbol, any> & {
90
+ $el: {
91
+ html: import("vitest").Mock<(...args: any[]) => any>;
92
+ 0: HTMLDivElement;
93
+ };
94
+ el: HTMLDivElement;
95
+ getPlugin: import("vitest").Mock<(...args: any[]) => any>;
96
+ playback: any;
97
+ };
34
98
  //# sourceMappingURL=testUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAA;AAElC;;GAEG;AACH,qBAAa,aAAc,SAAQ,SAAS;IAExC,SAAS,CAAC,OAAO,EAAE,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,GAAG;IAClB,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG;gBAFjB,OAAO,EAAE,GAAG,EACb,IAAI,EAAE,GAAG,EACR,WAAW,CAAC,EAAE,GAAG,YAAA;IAK7B,IAAI,IAAI,WAEP;IAED,OAAO;IAEP,IAAI;IAEJ,KAAK;IAEL,IAAI;IAEJ,OAAO;IAEP,IAAI;IAEJ,cAAc;IAEd,WAAW;IAIX,QAAQ;IAER,OAAO;IAEP,eAAe;IAIf,kBAAkB;IAIlB,cAAc;IAId,qBAAqB;IAIrB,IAAI;IAEJ,MAAM;IAEN,MAAM;IAEN,SAAS;IAET,eAAe;IAIf,WAAW;IAIX,QAAQ;IAIR,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;CAGtC"}
1
+ {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,eAAe,CAAA;AAElC;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,MAAM;IAErC,SAAS,CAAC,OAAO,EAAE,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,GAAG;IAClB,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG;gBAFjB,OAAO,EAAE,GAAG,EACb,IAAI,EAAE,GAAG,EACR,WAAW,CAAC,EAAE,GAAG,YAAA;IAK7B,IAAI,IAAI,WAEP;IAED,OAAO;IAEP,IAAI;IAEJ,KAAK;IAEL,IAAI;IAEJ,OAAO;IAEP,IAAI;IAEJ,cAAc;IAEd,WAAW;IAIX,QAAQ;IAER,OAAO;IAEP,eAAe;IAIf,kBAAkB;IAIlB,cAAc;IAId,qBAAqB;IAIrB,IAAI;IAEJ,MAAM;IAEN,MAAM;IAEN,SAAS;IAET,eAAe;IAIf,WAAW;IAIX,QAAQ;IAIR,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;CAGtC;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,SAAS,GAAE,GAA2B;;;;;;;;;;;;;;EAiB3G;AAED,wBAAgB,gBAAgB;;;EAK/B;AAED,wBAAgB,mBAAmB;;;;;;EAKlC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;mBA2C7B,MAAM,WAAW,GAAG,EAAE;EAIxC;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,GAA0B;;;;;;;;EAWvE"}
package/lib/testUtils.js CHANGED
@@ -1,8 +1,11 @@
1
- import EventLite from 'event-lite';
1
+ import Events from 'eventemitter3';
2
+ import { vi } from 'vitest';
2
3
  /**
3
4
  * @internal
5
+ * @deprecated
6
+ * TODO use createMockPlayback() instead
4
7
  */
5
- export class _MockPlayback extends EventLite {
8
+ export class _MockPlayback extends Events {
6
9
  options;
7
10
  i18n;
8
11
  playerError;
@@ -56,3 +59,93 @@ export class _MockPlayback extends EventLite {
56
59
  this.emit(event, ...args);
57
60
  }
58
61
  }
62
+ export function createMockCore(options = {}, container = createMockContainer()) {
63
+ const el = document.createElement('div');
64
+ return Object.assign(new Events(), {
65
+ el,
66
+ $el: {
67
+ [0]: el,
68
+ append: vi.fn(),
69
+ },
70
+ activePlayback: container.playback,
71
+ activeContainer: container,
72
+ options: {
73
+ ...options,
74
+ },
75
+ configure: vi.fn(),
76
+ getPlugin: vi.fn(),
77
+ load: vi.fn(),
78
+ });
79
+ }
80
+ export function createMockPlugin() {
81
+ return Object.assign(new Events(), {
82
+ enable: vi.fn(),
83
+ disable: vi.fn(),
84
+ });
85
+ }
86
+ export function createSpinnerPlugin() {
87
+ return Object.assign(createMockPlugin(), {
88
+ show: vi.fn(),
89
+ hide: vi.fn(),
90
+ });
91
+ }
92
+ export function createMockPlayback(name = 'mock') {
93
+ const emitter = new Events();
94
+ return Object.assign(emitter, {
95
+ name,
96
+ currentLevel: -1,
97
+ levels: [],
98
+ consent() { },
99
+ play() { },
100
+ pause() { },
101
+ stop() { },
102
+ destroy() { },
103
+ seek() { },
104
+ seekPercentage() { },
105
+ getDuration() {
106
+ return 100;
107
+ },
108
+ enterPiP() { },
109
+ exitPiP() { },
110
+ getPlaybackType() {
111
+ return 'live';
112
+ },
113
+ getStartTimeOffset() {
114
+ return 0;
115
+ },
116
+ getCurrentTime() {
117
+ return 0;
118
+ },
119
+ isHighDefinitionInUse() {
120
+ return false;
121
+ },
122
+ mute() { },
123
+ unmute() { },
124
+ volume() { },
125
+ configure() { },
126
+ attemptAutoPlay() {
127
+ return true;
128
+ },
129
+ canAutoPlay() {
130
+ return true;
131
+ },
132
+ onResize() {
133
+ return true;
134
+ },
135
+ trigger(event, ...args) {
136
+ emitter.emit(event, ...args);
137
+ },
138
+ });
139
+ }
140
+ export function createMockContainer(playback = createMockPlayback()) {
141
+ const el = document.createElement('div');
142
+ return Object.assign(new Events(), {
143
+ $el: {
144
+ html: vi.fn(),
145
+ [0]: el,
146
+ },
147
+ el,
148
+ getPlugin: vi.fn(),
149
+ playback,
150
+ });
151
+ }
package/lib/types.d.ts CHANGED
@@ -49,12 +49,20 @@ export type MediaTransport = 'dash' | 'hls';
49
49
  export type TransportPreference = MediaTransport;
50
50
  /**
51
51
  * @beta
52
- * @see {@link https://clappr.github.io/classes/UIContainerPlugin.html}, {@link https://clappr.github.io/classes/ContainerPlugin.html}
52
+ * @see {@link https://clappr.github.io/classes/UIContainerPlugin.html},
53
+ * {@link https://clappr.github.io/classes/ContainerPlugin.html}
53
54
  */
54
55
  export type PlayerPlugin = {
55
56
  new (...args: any[]): unknown;
56
57
  name: string;
57
58
  };
59
+ export type PlayerPluginConstructor = CorePluginConstructor | ContainerPluginConstructor;
60
+ export type CorePluginConstructor = ((core: unknown) => PlayerPlugin) & {
61
+ type: 'core';
62
+ };
63
+ export type ContainerPluginConstructor = ((container: unknown) => PlayerPlugin) & {
64
+ type: 'container';
65
+ };
58
66
  /**
59
67
  * Configuration options for the player
60
68
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,qBAAqB,CAAA;AAE9D;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;AAEvE;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,OAAO,CAAA;AAE1D;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,CAAA;AAEzC;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAA;AAE3C;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAEhD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;;OAIG;IACH,IAAI,CAAC,EAAE,YAAY,CAAA;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,mBAAmB,CAAA;IAE3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAE3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,mBAAmB,CAAA;IAEvC;;OAEG;IACH,OAAO,EAAE,iBAAiB,EAAE,CAAA;IAE5B;;OAEG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAC9B;AAED;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAE5B;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAA;AAEnC;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAElD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAChD,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;GAGG;AACH,oBAAY,WAAW;IACrB;;OAEG;IACH,KAAK,UAAU;IACf;;;OAGG;IACH,KAAK,UAAU;IACf;;;OAGG;IACH,UAAU,eAAe;IACzB;;OAEG;IACH,KAAK,UAAU;IACf;;OAEG;IACH,IAAI,SAAS;IACb;;OAEG;IACH,KAAK,UAAU;IACf;;;OAGG;IACH,MAAM,WAAW;IACjB;;OAEG;IACH,IAAI,SAAS;IACb;;OAEG;IACH,IAAI,SAAS;IACb;;;OAGG;IACH,UAAU,eAAe;IACzB;;;OAGG;IACH,YAAY,iBAAiB;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { $ } from "@clappr/core";
2
2
  /**
3
+ * {@link https://zeptojs.com/#$() | Zepto query result}
3
4
  * @beta
4
5
  */
5
6
  export type ZeptoResult = ReturnType<typeof $>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAEjC;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAEjC;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gcorevideo/player",
3
- "version": "2.20.3",
3
+ "version": "2.20.5",
4
4
  "description": "Gcore JavaScript video player",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -42,6 +42,7 @@
42
42
  "@types/node": "^22.10.1",
43
43
  "@types/sinonjs__fake-timers": "^8.1.5",
44
44
  "assert": "^2.1.0",
45
+ "eventemitter3": "^5.0.1",
45
46
  "jsdom": "^26.0.0",
46
47
  "nodemon": "^3.1.9",
47
48
  "rollup": "^4.27.4",
@@ -57,7 +58,6 @@
57
58
  "@gcorevideo/utils": "^0.0.1",
58
59
  "@sentry/types": "^8.47.0",
59
60
  "dashjs": "^4.7.4",
60
- "event-lite": "^1.0.0",
61
61
  "hls.js": "^1.5.17",
62
62
  "human-format": "^1.2.1",
63
63
  "mousetrap": "^1.6.5",