@npo/player 1.24.7 → 1.26.0

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 (170) hide show
  1. package/README.md +1 -1
  2. package/lib/js/api/getstreamobject.d.ts +1 -1
  3. package/lib/js/api/getstreamobject.js +4 -4
  4. package/lib/js/api/getstreamobject.test.js +13 -13
  5. package/lib/js/playeractions/handlers/handleoffsets.js +9 -7
  6. package/lib/js/playeractions/handlers/handleoffsets.test.js +1 -1
  7. package/lib/js/playeractions/handlers/processplayerconfig.d.ts +1 -1
  8. package/lib/js/playeractions/handlers/processplayerconfig.js +18 -4
  9. package/lib/js/playeractions/handlers/processplayerconfig.test.js +116 -0
  10. package/lib/js/playeractions/handlers/processsourceconfig.d.ts +3 -1
  11. package/lib/js/playeractions/handlers/processsourceconfig.js +20 -10
  12. package/lib/js/playeractions/handlers/processsourceconfig.test.js +25 -0
  13. package/lib/js/settings/localization.d.ts +76 -1
  14. package/lib/js/settings/localization.js +2 -2
  15. package/lib/js/tracking/handlers/eventbinding.js +25 -17
  16. package/lib/js/tracking/handlers/eventlogging.js +3 -8
  17. package/lib/js/tracking/handlers/playertrackerinit.d.ts +2 -2
  18. package/lib/js/tracking/handlers/playertrackerinit.js +8 -6
  19. package/lib/js/tracking/handlers/playertrackerinit.test.d.ts +1 -0
  20. package/lib/js/tracking/handlers/playertrackerinit.test.js +74 -0
  21. package/lib/js/tracking/handlers/playertrackerstart.js +1 -1
  22. package/lib/js/utilities/utilities.element.d.ts +6 -0
  23. package/lib/js/utilities/utilities.element.js +10 -0
  24. package/lib/js/utilities/utilities.element.test.js +18 -5
  25. package/lib/lang/nl.json +1 -1
  26. package/lib/lang/subtitleLabels/nl.json +14 -0
  27. package/lib/npoplayer.d.ts +15 -6
  28. package/lib/npoplayer.js +57 -50
  29. package/lib/npoplayer.test.js +12 -4
  30. package/lib/package.json +3 -3
  31. package/lib/services/a11y/setup.js +2 -5
  32. package/lib/services/a11y/setup.test.js +2 -19
  33. package/lib/services/advertHandlers/discardAdBreak.js +4 -4
  34. package/lib/services/advertHandlers/discardAdBreak.test.js +25 -13
  35. package/lib/services/advertHandlers/handlePreRolls.js +19 -19
  36. package/lib/services/advertHandlers/handlePrerolls.test.js +4 -4
  37. package/lib/services/cdnProviders/cdnProviders.js +4 -2
  38. package/lib/services/drmHandlers/decideprofile.js +1 -1
  39. package/lib/services/drmHandlers/decideprofile.test.js +1 -1
  40. package/lib/services/drmHandlers/verifydrm.js +6 -6
  41. package/lib/services/drmHandlers/verifydrm.test.js +5 -5
  42. package/lib/services/eventListenerHandlers/removeEventListeners.js +2 -2
  43. package/lib/services/eventListenerHandlers/removeEventListeners.test.js +9 -9
  44. package/lib/services/keyboardHandlers/resolvekeypress.js +5 -5
  45. package/lib/services/keyboardHandlers/resolvekeypress.test.js +1 -1
  46. package/lib/services/liveStreamHandlers/handleLiveStreamControls.js +2 -2
  47. package/lib/services/liveStreamHandlers/handleLiveStreamControls.test.js +2 -2
  48. package/lib/services/localStorageHandlers/localStorageHandlers.js +2 -2
  49. package/lib/services/localStorageHandlers/localStorageHandlers.test.js +2 -5
  50. package/lib/services/nicamHandlers/nicamhandler.d.ts +5 -0
  51. package/lib/{ui/handlers → services/nicamHandlers}/nicamhandler.js +24 -15
  52. package/lib/services/nicamHandlers/nicamhandler.test.js +132 -0
  53. package/lib/services/npoPlayerAPI/npoPlayerAPI.d.ts +3 -2
  54. package/lib/services/npoPlayerAPI/npoPlayerAPI.js +19 -23
  55. package/lib/services/preferences/handlePreferences.d.ts +2 -0
  56. package/lib/services/preferences/handlePreferences.js +42 -0
  57. package/lib/services/preferences/handlePreferences.test.d.ts +1 -0
  58. package/lib/services/preferences/handlePreferences.test.js +102 -0
  59. package/lib/services/segmentHandlers/addSegmentEventListeners.js +2 -2
  60. package/lib/services/segmentHandlers/addSegmentEventListeners.test.js +1 -1
  61. package/lib/services/segmentHandlers/setSegmentMarkers.js +1 -1
  62. package/lib/services/services.d.ts +7 -0
  63. package/lib/services/services.js +26 -0
  64. package/lib/services/streamoptionsHandlers/streamOptionsHandler.d.ts +6 -0
  65. package/lib/services/streamoptionsHandlers/streamOptionsHandler.js +78 -0
  66. package/lib/services/streamoptionsHandlers/streamOptionsHandler.test.js +187 -0
  67. package/lib/services/uiHandlers/uiVisiblityHandler.d.ts +3 -0
  68. package/lib/services/uiHandlers/uiVisiblityHandler.js +26 -0
  69. package/lib/services/uiHandlers/uiVisiblityHandler.test.d.ts +1 -0
  70. package/lib/services/uiHandlers/uiVisiblityHandler.test.js +62 -0
  71. package/lib/src/js/api/getstreamobject.d.ts +1 -1
  72. package/lib/src/js/playeractions/handlers/processplayerconfig.d.ts +1 -1
  73. package/lib/src/js/playeractions/handlers/processplayerconfig.test.d.ts +1 -0
  74. package/lib/src/js/playeractions/handlers/processsourceconfig.d.ts +3 -1
  75. package/lib/src/js/playeractions/handlers/processsourceconfig.test.d.ts +1 -0
  76. package/lib/src/js/settings/localization.d.ts +76 -1
  77. package/lib/src/js/tracking/handlers/playertrackerinit.d.ts +2 -2
  78. package/lib/src/js/tracking/handlers/playertrackerinit.test.d.ts +1 -0
  79. package/lib/src/js/utilities/utilities.element.d.ts +6 -0
  80. package/lib/src/npoplayer.d.ts +15 -6
  81. package/lib/src/services/nicamHandlers/nicamhandler.d.ts +5 -0
  82. package/lib/src/services/nicamHandlers/nicamhandler.test.d.ts +1 -0
  83. package/lib/src/services/npoPlayerAPI/npoPlayerAPI.d.ts +3 -2
  84. package/lib/src/services/preferences/handlePreferences.d.ts +2 -0
  85. package/lib/src/services/preferences/handlePreferences.test.d.ts +1 -0
  86. package/lib/src/services/services.d.ts +7 -0
  87. package/lib/src/services/streamoptionsHandlers/streamOptionsHandler.d.ts +6 -0
  88. package/lib/src/services/streamoptionsHandlers/streamOptionsHandler.test.d.ts +1 -0
  89. package/lib/src/services/uiHandlers/uiVisiblityHandler.d.ts +3 -0
  90. package/lib/src/services/uiHandlers/uiVisiblityHandler.test.d.ts +1 -0
  91. package/lib/src/types/classes.d.ts +6 -0
  92. package/lib/src/types/interfaces.d.ts +25 -3
  93. package/lib/src/ui/components/adbutton.d.ts +1 -1
  94. package/lib/src/ui/components/adlabel.d.ts +1 -1
  95. package/lib/src/ui/components/buttons.d.ts +10 -17
  96. package/lib/src/ui/components/controlbar.d.ts +2 -2
  97. package/lib/src/ui/components/ctabar.d.ts +1 -1
  98. package/lib/src/ui/components/nativemobile/buttons.d.ts +8 -0
  99. package/lib/src/ui/components/playnext.d.ts +1 -3
  100. package/lib/src/ui/components/seekbar.d.ts +1 -1
  101. package/lib/src/ui/components/titlebar.d.ts +1 -1
  102. package/lib/src/ui/components/topbar.d.ts +2 -2
  103. package/lib/src/ui/components/verticalvideo/controlbar.d.ts +2 -2
  104. package/lib/src/ui/handlers/playnextscreen.test.d.ts +1 -0
  105. package/lib/src/ui/handlers/timecontrolhandlers.d.ts +3 -3
  106. package/lib/src/ui/uicontainer.d.ts +2 -3
  107. package/lib/src/ui/uicontainer.test.d.ts +1 -0
  108. package/lib/tests/mocks/mockLogEmitter.d.ts +2 -0
  109. package/lib/tests/mocks/mockLogEmitter.js +20 -0
  110. package/lib/tests/mocks/mockNpoplayer.js +4 -2
  111. package/lib/tests/mocks/playerContextMock.d.ts +5 -3
  112. package/lib/tests/mocks/playerContextMock.js +8 -5
  113. package/lib/types/classes.d.ts +6 -0
  114. package/lib/types/classes.js +12 -0
  115. package/lib/types/interfaces.d.ts +25 -3
  116. package/lib/types/interfaces.js +1 -0
  117. package/lib/ui/components/adbutton.d.ts +1 -1
  118. package/lib/ui/components/adbutton.js +3 -3
  119. package/lib/ui/components/adlabel.d.ts +1 -1
  120. package/lib/ui/components/adlabel.js +3 -3
  121. package/lib/ui/components/buttons.d.ts +10 -17
  122. package/lib/ui/components/buttons.js +44 -27
  123. package/lib/ui/components/controlbar.d.ts +2 -2
  124. package/lib/ui/components/controlbar.js +20 -32
  125. package/lib/ui/components/ctabar.d.ts +1 -1
  126. package/lib/ui/components/ctabar.js +4 -4
  127. package/lib/ui/components/nativemobile/buttons.d.ts +8 -0
  128. package/lib/ui/components/nativemobile/buttons.js +41 -1
  129. package/lib/ui/components/nativemobile/controlbar.js +1 -2
  130. package/lib/ui/components/nativemobile/topbar.js +2 -2
  131. package/lib/ui/components/playnext.d.ts +1 -3
  132. package/lib/ui/components/playnext.js +3 -3
  133. package/lib/ui/components/seekbar.d.ts +1 -1
  134. package/lib/ui/components/seekbar.js +5 -3
  135. package/lib/ui/components/settingspanel.js +9 -9
  136. package/lib/ui/components/titlebar.d.ts +1 -1
  137. package/lib/ui/components/titlebar.js +2 -2
  138. package/lib/ui/components/topbar.d.ts +2 -2
  139. package/lib/ui/components/topbar.js +8 -17
  140. package/lib/ui/components/verticalvideo/controlbar.d.ts +2 -2
  141. package/lib/ui/components/verticalvideo/controlbar.js +4 -4
  142. package/lib/ui/handlers/playnextscreen.test.d.ts +1 -0
  143. package/lib/ui/handlers/timecontrolhandlers.d.ts +3 -3
  144. package/lib/ui/nativemobileuifactory.js +20 -24
  145. package/lib/ui/nativemobileuifactory.test.js +2 -6
  146. package/lib/ui/uicontainer.d.ts +2 -3
  147. package/lib/ui/uicontainer.js +13 -30
  148. package/lib/ui/uicontainer.test.d.ts +1 -0
  149. package/lib/ui/uicontainer.test.js +80 -0
  150. package/package.json +3 -3
  151. package/src/style/components/_advert.scss +0 -9
  152. package/src/style/components/_icons.scss +5 -0
  153. package/src/style/components/_nicam.scss +5 -4
  154. package/src/style/components/_settingspanel.scss +48 -17
  155. package/src/style/components/vertical-video/_settingspanel.scss +1 -1
  156. package/src/style/npoplayer.css +26 -20
  157. package/src/style/variants/_player-base.scss +4 -0
  158. package/src/style/variants/_player-large.scss +5 -1
  159. package/src/style/variants/_player-small.scss +11 -8
  160. package/lib/src/ui/handlers/nicamhandler.d.ts +0 -6
  161. package/lib/src/ui/handlers/streamhandler.d.ts +0 -2
  162. package/lib/ui/handlers/nicamhandler.d.ts +0 -6
  163. package/lib/ui/handlers/nicamhandler.test.js +0 -36
  164. package/lib/ui/handlers/streamhandler.d.ts +0 -2
  165. package/lib/ui/handlers/streamhandler.js +0 -60
  166. /package/lib/{src/ui/handlers/playnextstreen.test.d.ts → js/playeractions/handlers/processplayerconfig.test.d.ts} +0 -0
  167. /package/lib/{ui/handlers/playnextstreen.test.d.ts → js/playeractions/handlers/processsourceconfig.test.d.ts} +0 -0
  168. /package/lib/{src/ui/handlers → services/nicamHandlers}/nicamhandler.test.d.ts +0 -0
  169. /package/lib/{ui/handlers/nicamhandler.test.d.ts → services/streamoptionsHandlers/streamOptionsHandler.test.d.ts} +0 -0
  170. /package/lib/ui/handlers/{playnextstreen.test.js → playnextscreen.test.js} +0 -0
@@ -1,42 +1,35 @@
1
1
  import { type PlayerAPI } from 'bitmovin-player';
2
- import { Button, ControlBar } from 'bitmovin-player-ui';
2
+ import { Button, ControlBar, CastToggleButton } from 'bitmovin-player-ui';
3
3
  import type NpoPlayer from '../../npoplayer';
4
- export declare function createMiddleButtons(player: PlayerAPI): ControlBar;
5
- export declare function createRewindButton(player: PlayerAPI | undefined): Button<{
4
+ import { PlayerContext } from '../../types/interfaces';
5
+ import { NpoPlayerAPI } from '../../services/npoPlayerAPI/npoPlayerAPI';
6
+ export declare function createMiddleButtons(playerContext: PlayerContext): ControlBar;
7
+ export declare function createRewindButton(playerContext: PlayerContext): Button<{
6
8
  cssClass: string;
7
9
  ariaLabel: string;
8
10
  }>;
9
- export declare function createForwardButton(player: PlayerAPI | undefined): Button<{
11
+ export declare function createForwardButton(playerContext: PlayerContext): Button<{
10
12
  cssClass: string;
11
13
  ariaLabel: string;
12
14
  }>;
13
- export declare function createPlayNextButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
15
+ export declare function createPlayNextButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
14
16
  cssClass: string;
15
- text: string;
16
17
  ariaLabel: string;
17
- hidden: false;
18
18
  }>;
19
- export declare function createCancelPlayNextButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
19
+ export declare function createCancelPlayNextButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
20
20
  cssClass: string;
21
- text: string;
22
21
  ariaLabel: string;
23
- hidden: false;
24
22
  }>;
25
23
  export declare function createskipIntroButton(player: PlayerAPI): Button<{
26
24
  cssClass: string;
27
- text: string;
28
25
  ariaLabel: string;
29
- hidden: true;
30
26
  }>;
31
27
  export declare function createGoBackLiveButton(player: PlayerAPI): Button<{
32
28
  cssClass: string;
33
- text: string;
34
29
  ariaLabel: string;
35
- hidden: true;
36
30
  }>;
37
- export declare function createWatchFromStartButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
31
+ export declare function createWatchFromStartButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
38
32
  cssClass: string;
39
- text: string;
40
33
  ariaLabel: string;
41
- hidden: true;
42
34
  }>;
35
+ export declare function createChromecastButton(player: NpoPlayerAPI, npoPlayer: NpoPlayer): CastToggleButton;
@@ -1,3 +1,3 @@
1
1
  import { ControlBar } from 'bitmovin-player-ui';
2
- import type NpoPlayer from '../../npoplayer';
3
- export declare function createControlBar(npoPlayer: NpoPlayer): ControlBar;
2
+ import { NpoPlayerUIVariants, PlayerContext } from '../../types/interfaces';
3
+ export declare function createControlBar(playerContext: PlayerContext, variant: NpoPlayerUIVariants): ControlBar;
@@ -4,7 +4,7 @@ import { type PlayerAPI } from 'bitmovin-player';
4
4
  import { ButtonConfig } from 'bitmovin-player-ui/dist/js/framework/components/button';
5
5
  import { LabelConfig } from 'bitmovin-player-ui/dist/js/framework/components/label';
6
6
  import { NpoPlayerUIVariants } from '../../types/interfaces';
7
- export declare function createCTABar(player: PlayerAPI, npoplayer: NpoPlayer, variant: NpoPlayerUIVariants): Container<{
7
+ export declare function createCTABar(player: PlayerAPI, npoPlayer: NpoPlayer, variant: NpoPlayerUIVariants): Container<{
8
8
  components: (Button<ButtonConfig> | Label<LabelConfig>)[];
9
9
  cssClasses: string[];
10
10
  }>;
@@ -1,5 +1,13 @@
1
1
  import { AirPlayToggleButton, Button, CastToggleButton, ControlBar, FullscreenToggleButton, PictureInPictureToggleButton, PlaybackToggleButton, SettingsPanel, SettingsToggleButton, VolumeToggleButton } from 'bitmovin-player-ui';
2
2
  import { PlayerAPI } from 'bitmovin-player';
3
+ export declare function createForwardButton(player: PlayerAPI | undefined): Button<{
4
+ cssClass: string;
5
+ ariaLabel: string;
6
+ }>;
7
+ export declare function createRewindButton(player: PlayerAPI | undefined): Button<{
8
+ cssClass: string;
9
+ ariaLabel: string;
10
+ }>;
3
11
  export declare function createMiddleButtons(player: PlayerAPI): ControlBar;
4
12
  export declare function createWatchFromStartButton(): Button<{
5
13
  cssClass: string;
@@ -1,12 +1,10 @@
1
1
  import { Container } from 'bitmovin-player-ui';
2
2
  import { type PlayerAPI } from 'bitmovin-player';
3
3
  import type NpoPlayer from '../../npoplayer';
4
- export declare function createPlayNextScreen(player: PlayerAPI, npoplayer: NpoPlayer): Container<{
4
+ export declare function createPlayNextScreen(player: PlayerAPI, npoPlayer: NpoPlayer): Container<{
5
5
  components: import("bitmovin-player-ui").Button<{
6
6
  cssClass: string;
7
- text: string;
8
7
  ariaLabel: string;
9
- hidden: false;
10
8
  }>[];
11
9
  cssClasses: string[];
12
10
  }>;
@@ -1,6 +1,6 @@
1
1
  import { Container, PlaybackTimeLabel, SeekBar } from 'bitmovin-player-ui';
2
2
  import type NpoPlayer from '../../npoplayer';
3
- export declare function createSeekBar(npoplayer: NpoPlayer): Container<{
3
+ export declare function createSeekBar(npoPlayer: NpoPlayer): Container<{
4
4
  components: (SeekBar | PlaybackTimeLabel)[];
5
5
  cssClasses: string[];
6
6
  }>;
@@ -1,3 +1,3 @@
1
1
  import { TitleBar } from 'bitmovin-player-ui';
2
2
  import type NpoPlayer from '../../npoplayer';
3
- export declare function createTitleBar(npoplayer: NpoPlayer): TitleBar;
3
+ export declare function createTitleBar(npoPlayer: NpoPlayer): TitleBar;
@@ -1,3 +1,3 @@
1
1
  import { TitleBar } from 'bitmovin-player-ui';
2
- import NpoPlayer from 'npoplayer';
3
- export declare function createTopBar(npoplayer: NpoPlayer): TitleBar;
2
+ import { PlayerContext } from '../../types/interfaces';
3
+ export declare function createTopBar(playerContext: PlayerContext): TitleBar;
@@ -1,3 +1,3 @@
1
1
  import { ControlBar } from 'bitmovin-player-ui';
2
- import type NpoPlayer from '../../../npoplayer';
3
- export declare function createVerticalVideoControlBar(npoPlayer: NpoPlayer): ControlBar;
2
+ import { PlayerContext } from 'types/interfaces';
3
+ export declare function createVerticalVideoControlBar(playerContext: PlayerContext): ControlBar;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,3 +1,3 @@
1
- import { type PlayerAPI } from 'bitmovin-player';
2
- export declare function rewind(player: PlayerAPI): void;
3
- export declare function forward(player: PlayerAPI): void;
1
+ import { NpoPlayerAPI } from '../../services/npoPlayerAPI/npoPlayerAPI';
2
+ export declare function rewind(player: NpoPlayerAPI): void;
3
+ export declare function forward(player: NpoPlayerAPI): void;
@@ -1,5 +1,4 @@
1
- import NpoPlayer from '../npoplayer';
2
1
  import { UIContainer } from 'bitmovin-player-ui';
3
2
  import { PlayerAPI } from 'bitmovin-player';
4
- import { NpoPlayerUIVariants } from '../types/interfaces';
5
- export declare function createUIContainer(npoPlayer: NpoPlayer, player: PlayerAPI, variant: NpoPlayerUIVariants, container: HTMLElement): UIContainer;
3
+ import { NpoPlayerUIVariants, PlayerContext } from '../types/interfaces';
4
+ export declare function createUIContainer(playerContext: PlayerContext, player: PlayerAPI, variant: NpoPlayerUIVariants): UIContainer;
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,2 @@
1
+ import { LogEmitter } from '../../src/types/classes';
2
+ export declare const createLogEmitterMock: () => jest.Mocked<LogEmitter>;
@@ -0,0 +1,20 @@
1
+ export const createLogEmitterMock = () => {
2
+ const logEmitterMock = {
3
+ emit: jest.fn(),
4
+ on: jest.fn(),
5
+ once: jest.fn(),
6
+ off: jest.fn(),
7
+ addListener: jest.fn(),
8
+ removeListener: jest.fn(),
9
+ removeAllListeners: jest.fn(),
10
+ listeners: jest.fn(),
11
+ listenerCount: jest.fn(),
12
+ rawListeners: jest.fn(),
13
+ eventNames: jest.fn(),
14
+ setMaxListeners: jest.fn(),
15
+ getMaxListeners: jest.fn(),
16
+ prependListener: jest.fn(),
17
+ prependOnceListener: jest.fn()
18
+ };
19
+ return logEmitterMock;
20
+ };
@@ -30,6 +30,9 @@ export const mockNpoPlayer = {
30
30
  uiManager: undefined,
31
31
  canceledPlayNextScreen: false,
32
32
  npoTag: undefined,
33
+ npoTagInitialisation: undefined,
34
+ npoTagInstance: undefined,
35
+ npoTagPageTracker: undefined,
33
36
  logEmitter: {},
34
37
  uiComponents: {
35
38
  settingsPanels: [settingsPanelMock, settingsPanelMock]
@@ -65,7 +68,6 @@ export const mockNpoPlayer = {
65
68
  variant: '',
66
69
  playerContext: {},
67
70
  isShowingPlayNextScreen: false,
68
- userPreferences: {},
69
71
  eventListeners: undefined,
70
72
  setVolume: function (volume) {
71
73
  jest.fn();
@@ -115,6 +117,6 @@ export const mockNpoPlayer = {
115
117
  updateMarkers: function () {
116
118
  jest.fn();
117
119
  },
118
- npoplayerServices: new NpoPlayerServices(),
120
+ npoPlayerServices: new NpoPlayerServices(),
119
121
  mockNpoPlayer: undefined
120
122
  };
@@ -15,7 +15,9 @@ export declare const createMockNpoPlayer: (overrides?: {}) => {
15
15
  };
16
16
  uiComponents: {};
17
17
  container: HTMLDivElement;
18
- streamOptions: {};
18
+ streamOptions: {
19
+ enableSubtitles: boolean;
20
+ };
19
21
  jwt: string;
20
22
  apiPayload: {
21
23
  baseURL: string;
@@ -32,8 +34,9 @@ export declare const createMockNpoPlayer: (overrides?: {}) => {
32
34
  isShowingPlayNextScreen: boolean;
33
35
  canceledPlayNextScreen: boolean;
34
36
  playerContext: undefined;
35
- npoplayerServices: {
37
+ npoPlayerServices: {
36
38
  getStoredUserPrefs: jest.Mock<any, any, any>;
39
+ setStoredUserPrefs: jest.Mock<any, any, any>;
37
40
  handleUserPrefs: jest.Mock<any, any, any>;
38
41
  setAccessibilityAttributes: jest.Mock<any, any, any>;
39
42
  keyboardHandler: jest.Mock<any, any, any>;
@@ -42,7 +45,6 @@ export declare const createMockNpoPlayer: (overrides?: {}) => {
42
45
  };
43
46
  eventListeners: undefined;
44
47
  mockNpoPlayer: undefined;
45
- userPreferences: {};
46
48
  initPlayer: jest.Mock<any, any, any>;
47
49
  loadStream: jest.Mock<any, any, any>;
48
50
  doError: jest.Mock<any, any, any>;
@@ -24,6 +24,7 @@ export const createMockNpoPlayerAPI = (overrides = {}) => ({
24
24
  setViewMode: jest.fn(),
25
25
  getViewMode: jest.fn(),
26
26
  areSubtitlesEnabled: jest.fn().mockReturnValue(false),
27
+ getCurrentSubtitle: jest.fn().mockReturnValue('nl'),
27
28
  enableSubtitles: jest.fn(),
28
29
  isPaused: jest.fn().mockReturnValue(false),
29
30
  isMuted: jest.fn().mockReturnValue(false),
@@ -32,6 +33,7 @@ export const createMockNpoPlayerAPI = (overrides = {}) => ({
32
33
  getSupportedTech: jest.fn().mockReturnValue([]),
33
34
  off: jest.fn(),
34
35
  on: jest.fn(),
36
+ isCastAvailable: jest.fn(),
35
37
  seek: jest.fn(),
36
38
  timeShift: jest.fn(),
37
39
  getContainer: jest.fn(),
@@ -44,7 +46,6 @@ export const createMockNpoPlayerAPI = (overrides = {}) => ({
44
46
  getTimeShift: jest.fn().mockReturnValue(0),
45
47
  scheduleAds: jest.fn().mockResolvedValue([]),
46
48
  getActiveAdBreak: jest.fn().mockReturnValue(undefined),
47
- discardAdBreak: jest.fn(),
48
49
  getConfig: jest.fn().mockReturnValue({}),
49
50
  createUIManager: jest.fn(),
50
51
  ...overrides
@@ -68,7 +69,9 @@ export const createMockNpoPlayer = (overrides = {}) => ({
68
69
  logEmitter: { emit: jest.fn() },
69
70
  uiComponents: {},
70
71
  container: document.createElement('div'),
71
- streamOptions: {},
72
+ streamOptions: {
73
+ enableSubtitles: false
74
+ },
72
75
  jwt: '',
73
76
  apiPayload: { baseURL: '', jwt: '', data: {} },
74
77
  adBreakActive: false,
@@ -78,8 +81,9 @@ export const createMockNpoPlayer = (overrides = {}) => ({
78
81
  isShowingPlayNextScreen: false,
79
82
  canceledPlayNextScreen: false,
80
83
  playerContext: undefined,
81
- npoplayerServices: {
84
+ npoPlayerServices: {
82
85
  getStoredUserPrefs: jest.fn(),
86
+ setStoredUserPrefs: jest.fn(),
83
87
  handleUserPrefs: jest.fn(),
84
88
  setAccessibilityAttributes: jest.fn(),
85
89
  keyboardHandler: jest.fn(),
@@ -88,7 +92,6 @@ export const createMockNpoPlayer = (overrides = {}) => ({
88
92
  },
89
93
  eventListeners: undefined,
90
94
  mockNpoPlayer: undefined,
91
- userPreferences: {},
92
95
  initPlayer: jest.fn(),
93
96
  loadStream: jest.fn(),
94
97
  doError: jest.fn(),
@@ -112,7 +115,7 @@ export const createMockNpoPlayer = (overrides = {}) => ({
112
115
  });
113
116
  export const createPlayerContextMock = (overrides = {}) => ({
114
117
  player: createMockNpoPlayerAPI(),
115
- npoplayer: createMockNpoPlayer(),
118
+ npoPlayer: createMockNpoPlayer(),
116
119
  ...overrides
117
120
  });
118
121
  export default createPlayerContextMock;
@@ -1,4 +1,10 @@
1
1
  /// <reference types="node" />
2
2
  import { EventEmitter } from 'events';
3
+ type AllowedEvents = 'logControlsVisibilityChange' | 'logError' | 'logEvent';
3
4
  export declare class LogEmitter extends EventEmitter {
5
+ emit(event: AllowedEvents, ...args: any[]): boolean;
6
+ on(event: AllowedEvents, listener: (...args: any[]) => void): this;
7
+ once(event: AllowedEvents, listener: (...args: any[]) => void): this;
8
+ off(event: AllowedEvents, listener: (...args: any[]) => void): this;
4
9
  }
10
+ export {};
@@ -1,3 +1,15 @@
1
1
  import { EventEmitter } from 'events';
2
2
  export class LogEmitter extends EventEmitter {
3
+ emit(event, ...args) {
4
+ return super.emit(event, ...args);
5
+ }
6
+ on(event, listener) {
7
+ return super.on(event, listener);
8
+ }
9
+ once(event, listener) {
10
+ return super.once(event, listener);
11
+ }
12
+ off(event, listener) {
13
+ return super.off(event, listener);
14
+ }
3
15
  }
@@ -4,7 +4,7 @@ import { ButtonConfig } from 'bitmovin-player-ui/dist/js/framework/components/bu
4
4
  import NpoPlayer from '../npoplayer';
5
5
  import { NpoPlayerAPI } from '../services/npoPlayerAPI/npoPlayerAPI';
6
6
  import { NpoPlayerEventCallback } from './events';
7
- import { SourceConfig } from 'bitmovin-player';
7
+ import { AnalyticsConfig, DRMConfig, GoogleCastRemoteControlConfig, ProgressiveSourceConfig, SourceConfigOptions, SourceLabelingStreamTypeConfig, SubtitleTrack, ThumbnailTrack, VRConfig } from 'bitmovin-player';
8
8
  export { Technology } from 'bitmovin-player';
9
9
  export interface Profile {
10
10
  profileName: string;
@@ -31,7 +31,7 @@ export interface StreamObject {
31
31
  }
32
32
  export interface PlayerContext {
33
33
  player: NpoPlayerAPI;
34
- npoplayer: NpoPlayer;
34
+ npoPlayer: NpoPlayer;
35
35
  }
36
36
  export interface ApiPayload {
37
37
  baseURL: string;
@@ -95,6 +95,26 @@ interface FragmentSection {
95
95
  export interface Fragment {
96
96
  sections: FragmentSection[];
97
97
  }
98
+ export interface SourceConfig {
99
+ dash?: string;
100
+ hls?: string;
101
+ progressive?: string | ProgressiveSourceConfig[];
102
+ smooth?: string;
103
+ whep?: string;
104
+ poster?: string;
105
+ drm?: DRMConfig;
106
+ options?: SourceConfigOptions;
107
+ subtitleTracks?: SubtitleTrack[];
108
+ thumbnailTrack?: ThumbnailTrack;
109
+ vr?: VRConfig;
110
+ title?: string;
111
+ description?: string;
112
+ labeling?: SourceLabelingStreamTypeConfig;
113
+ analytics?: AnalyticsConfig;
114
+ metadata?: {
115
+ [key: string]: string;
116
+ };
117
+ }
98
118
  export interface StreamOptions {
99
119
  sourceConfig?: SourceConfig;
100
120
  fragments?: Fragment;
@@ -197,6 +217,8 @@ export type TimeLineMarker = {
197
217
  export declare enum LocalStorageValues {
198
218
  IS_MUTED = "ismuted",
199
219
  VOLUME = "volume",
200
- SUBTITLES_ENABLED = "subtitles_enabled"
220
+ SUBTITLES_ENABLED = "subtitles_enabled",
221
+ SUBTITLES_LANGUAGE = "subtitles_language"
201
222
  }
202
223
  export type LocalStorageData = Partial<Record<LocalStorageValues, string | number>>;
224
+ export type NPOGoogleCastRemoteControlConfig = GoogleCastRemoteControlConfig;
@@ -43,4 +43,5 @@ export var LocalStorageValues;
43
43
  LocalStorageValues["IS_MUTED"] = "ismuted";
44
44
  LocalStorageValues["VOLUME"] = "volume";
45
45
  LocalStorageValues["SUBTITLES_ENABLED"] = "subtitles_enabled";
46
+ LocalStorageValues["SUBTITLES_LANGUAGE"] = "subtitles_language";
46
47
  })(LocalStorageValues || (LocalStorageValues = {}));
@@ -1,6 +1,6 @@
1
1
  import { Button } from 'bitmovin-player-ui';
2
2
  import type NpoPlayer from '../../npoplayer';
3
- export declare function createAdButton(npoplayer: NpoPlayer): Button<{
3
+ export declare function createAdButton(npoPlayer: NpoPlayer): Button<{
4
4
  cssClass: string;
5
5
  text: string;
6
6
  hidden: true;
@@ -1,11 +1,11 @@
1
1
  import { Button } from 'bitmovin-player-ui';
2
- export function createAdButton(npoplayer) {
3
- npoplayer.uiComponents.adbutton = undefined;
2
+ export function createAdButton(npoPlayer) {
3
+ npoPlayer.uiComponents.adbutton = undefined;
4
4
  const adButton = new Button({
5
5
  cssClass: 'ui-textbutton ui-sterbutton bmpui-ui-button',
6
6
  text: 'Ga naar website van adverteerder',
7
7
  hidden: true
8
8
  });
9
- npoplayer.uiComponents.adbutton = adButton;
9
+ npoPlayer.uiComponents.adbutton = adButton;
10
10
  return adButton;
11
11
  }
@@ -1,6 +1,6 @@
1
1
  import { Label } from 'bitmovin-player-ui';
2
2
  import type NpoPlayer from '../../npoplayer';
3
- export declare function createAdLabel(npoplayer: NpoPlayer): Label<{
3
+ export declare function createAdLabel(npoPlayer: NpoPlayer): Label<{
4
4
  text: string;
5
5
  cssClass: string;
6
6
  hidden: true;
@@ -1,7 +1,7 @@
1
1
  import { Label } from 'bitmovin-player-ui';
2
- export function createAdLabel(npoplayer) {
3
- npoplayer.uiComponents.adlabel = undefined;
2
+ export function createAdLabel(npoPlayer) {
3
+ npoPlayer.uiComponents.adlabel = undefined;
4
4
  const adLabel = new Label({ text: '', cssClass: 'adLabel', hidden: true });
5
- npoplayer.uiComponents.adlabel = adLabel;
5
+ npoPlayer.uiComponents.adlabel = adLabel;
6
6
  return adLabel;
7
7
  }
@@ -1,42 +1,35 @@
1
1
  import { type PlayerAPI } from 'bitmovin-player';
2
- import { Button, ControlBar } from 'bitmovin-player-ui';
2
+ import { Button, ControlBar, CastToggleButton } from 'bitmovin-player-ui';
3
3
  import type NpoPlayer from '../../npoplayer';
4
- export declare function createMiddleButtons(player: PlayerAPI): ControlBar;
5
- export declare function createRewindButton(player: PlayerAPI | undefined): Button<{
4
+ import { PlayerContext } from '../../types/interfaces';
5
+ import { NpoPlayerAPI } from '../../services/npoPlayerAPI/npoPlayerAPI';
6
+ export declare function createMiddleButtons(playerContext: PlayerContext): ControlBar;
7
+ export declare function createRewindButton(playerContext: PlayerContext): Button<{
6
8
  cssClass: string;
7
9
  ariaLabel: string;
8
10
  }>;
9
- export declare function createForwardButton(player: PlayerAPI | undefined): Button<{
11
+ export declare function createForwardButton(playerContext: PlayerContext): Button<{
10
12
  cssClass: string;
11
13
  ariaLabel: string;
12
14
  }>;
13
- export declare function createPlayNextButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
15
+ export declare function createPlayNextButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
14
16
  cssClass: string;
15
- text: string;
16
17
  ariaLabel: string;
17
- hidden: false;
18
18
  }>;
19
- export declare function createCancelPlayNextButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
19
+ export declare function createCancelPlayNextButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
20
20
  cssClass: string;
21
- text: string;
22
21
  ariaLabel: string;
23
- hidden: false;
24
22
  }>;
25
23
  export declare function createskipIntroButton(player: PlayerAPI): Button<{
26
24
  cssClass: string;
27
- text: string;
28
25
  ariaLabel: string;
29
- hidden: true;
30
26
  }>;
31
27
  export declare function createGoBackLiveButton(player: PlayerAPI): Button<{
32
28
  cssClass: string;
33
- text: string;
34
29
  ariaLabel: string;
35
- hidden: true;
36
30
  }>;
37
- export declare function createWatchFromStartButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
31
+ export declare function createWatchFromStartButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
38
32
  cssClass: string;
39
- text: string;
40
33
  ariaLabel: string;
41
- hidden: true;
42
34
  }>;
35
+ export declare function createChromecastButton(player: NpoPlayerAPI, npoPlayer: NpoPlayer): CastToggleButton;
@@ -1,64 +1,65 @@
1
- import { Button, PlaybackToggleButton, ControlBar } from 'bitmovin-player-ui';
1
+ import { Button, PlaybackToggleButton, ControlBar, CastToggleButton } from 'bitmovin-player-ui';
2
2
  import { rewind, forward } from '../handlers/timecontrolhandlers';
3
- export function createMiddleButtons(player) {
3
+ import { NpoPlayerEvent } from '../../types/events';
4
+ export function createMiddleButtons(playerContext) {
4
5
  const bigPlayToggleButton = new PlaybackToggleButton({
5
6
  cssClass: 'ui-playbacktogglebutton'
6
7
  });
7
- const bigRewindButton = createRewindButton(player);
8
- const bigForwardButton = createForwardButton(player);
8
+ const bigRewindButton = createRewindButton(playerContext);
9
+ const bigForwardButton = createForwardButton(playerContext);
9
10
  return new ControlBar({
10
11
  components: [bigRewindButton, bigPlayToggleButton, bigForwardButton],
11
12
  cssClasses: ['controlbar-middle']
12
13
  });
13
14
  }
14
- export function createRewindButton(player) {
15
+ export function createRewindButton(playerContext) {
16
+ const { player } = playerContext;
15
17
  const rewindButton = new Button({
16
18
  cssClass: 'ui-rewindbutton bmpui-ui-button',
17
19
  ariaLabel: 'Spoel 10 seconden terug'
18
20
  });
19
- if (player) {
20
- rewindButton.onClick.subscribe(() => {
21
- rewind(player);
22
- });
23
- }
21
+ rewindButton.onClick.subscribe(() => {
22
+ rewind(player);
23
+ });
24
24
  return rewindButton;
25
25
  }
26
- export function createForwardButton(player) {
26
+ export function createForwardButton(playerContext) {
27
+ const { player } = playerContext;
27
28
  const forwardButton = new Button({
28
29
  cssClass: 'ui-forwardbutton bmpui-ui-button',
29
30
  ariaLabel: 'Spoel 10 seconden vooruit'
30
31
  });
31
- if (player) {
32
- forwardButton.onClick.subscribe(() => {
33
- forward(player);
34
- });
35
- }
32
+ forwardButton.onClick.subscribe(() => {
33
+ forward(player);
34
+ });
36
35
  return forwardButton;
37
36
  }
38
- export function createPlayNextButton(player, npoplayer) {
37
+ export function createPlayNextButton(player, npoPlayer) {
39
38
  const playNextButton = new Button({
40
39
  cssClass: 'ui-textbutton ui-playNextButton bmpui-ui-button',
41
40
  text: '<span class="bmpui-ui-textbutton-icon bmpui-ui-textbutton-icon-play"></span> Volgende aflevering',
42
41
  ariaLabel: 'Volgende aflevering',
43
- hidden: false
42
+ hidden: false,
43
+ acceptsTouchWithUiHidden: true
44
44
  });
45
45
  playNextButton.onClick.subscribe(() => {
46
46
  if (player != undefined) {
47
- npoplayer.doPlayNext();
47
+ npoPlayer.doPlayNext();
48
48
  }
49
49
  });
50
50
  return playNextButton;
51
51
  }
52
- export function createCancelPlayNextButton(player, npoplayer) {
52
+ export function createCancelPlayNextButton(player, npoPlayer) {
53
53
  const cancelPlayNextButton = new Button({
54
54
  cssClass: 'ui-textbutton ui-cancelPlayNextButton bmpui-ui-button',
55
55
  text: 'Annuleer',
56
56
  ariaLabel: 'Annuleer',
57
- hidden: false
57
+ hidden: false,
58
+ acceptsTouchWithUiHidden: true
58
59
  });
59
60
  cancelPlayNextButton.onClick.subscribe(() => {
60
61
  if (player != undefined) {
61
- npoplayer.cancelPlayNextScreen();
62
+ npoPlayer.cancelPlayNextScreen();
62
63
  }
63
64
  });
64
65
  return cancelPlayNextButton;
@@ -91,7 +92,7 @@ export function createGoBackLiveButton(player) {
91
92
  });
92
93
  return goBackLiveButton;
93
94
  }
94
- export function createWatchFromStartButton(player, npoplayer) {
95
+ export function createWatchFromStartButton(player, npoPlayer) {
95
96
  const watchFromStartButton = new Button({
96
97
  cssClass: 'ui-textbutton ui-watchfromstartbutton bmpui-ui-button',
97
98
  text: 'Kijk vanaf het begin',
@@ -100,10 +101,26 @@ export function createWatchFromStartButton(player, npoplayer) {
100
101
  });
101
102
  watchFromStartButton.onClick.subscribe(() => {
102
103
  if (player.isLive() ?? false)
103
- npoplayer.watchFromStart();
104
- if (npoplayer.uiComponents.watchFromStartButton)
105
- npoplayer.uiComponents.watchFromStartButton.hide();
104
+ npoPlayer.watchFromStart();
105
+ if (npoPlayer.uiComponents.watchFromStartButton)
106
+ npoPlayer.uiComponents.watchFromStartButton.hide();
106
107
  });
107
- npoplayer.uiComponents.watchFromStartButton = watchFromStartButton;
108
+ npoPlayer.uiComponents.watchFromStartButton = watchFromStartButton;
108
109
  return watchFromStartButton;
109
110
  }
111
+ export function createChromecastButton(player, npoPlayer) {
112
+ const chromeCastButton = new CastToggleButton({
113
+ disabled: true
114
+ });
115
+ const handleCastAvailable = () => {
116
+ const remoteControlConfig = npoPlayer.playerConfig?.remotecontrol;
117
+ if (player?.isCastAvailable() && remoteControlConfig.customReceiverConfig?.enable !== 'false') {
118
+ chromeCastButton.enable();
119
+ }
120
+ else {
121
+ chromeCastButton.disable();
122
+ }
123
+ };
124
+ player?.on(NpoPlayerEvent.CastAvailable, handleCastAvailable);
125
+ return chromeCastButton;
126
+ }
@@ -1,3 +1,3 @@
1
1
  import { ControlBar } from 'bitmovin-player-ui';
2
- import type NpoPlayer from '../../npoplayer';
3
- export declare function createControlBar(npoPlayer: NpoPlayer): ControlBar;
2
+ import { NpoPlayerUIVariants, PlayerContext } from '../../types/interfaces';
3
+ export declare function createControlBar(playerContext: PlayerContext, variant: NpoPlayerUIVariants): ControlBar;