@npo/player 1.25.0 → 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 (127) 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 +12 -12
  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 +4 -4
  9. package/lib/js/playeractions/handlers/processsourceconfig.d.ts +1 -0
  10. package/lib/js/playeractions/handlers/processsourceconfig.js +4 -5
  11. package/lib/js/playeractions/handlers/processsourceconfig.test.js +25 -0
  12. package/lib/js/tracking/handlers/playertrackerstart.js +1 -1
  13. package/lib/lang/nl.json +1 -1
  14. package/lib/lang/subtitleLabels/nl.json +14 -0
  15. package/lib/npoplayer.d.ts +2 -3
  16. package/lib/npoplayer.js +24 -32
  17. package/lib/npoplayer.test.js +1 -1
  18. package/lib/package.json +2 -2
  19. package/lib/services/a11y/setup.js +2 -5
  20. package/lib/services/a11y/setup.test.js +2 -19
  21. package/lib/services/advertHandlers/discardAdBreak.js +4 -4
  22. package/lib/services/advertHandlers/discardAdBreak.test.js +25 -13
  23. package/lib/services/advertHandlers/handlePreRolls.js +19 -19
  24. package/lib/services/advertHandlers/handlePrerolls.test.js +4 -4
  25. package/lib/services/drmHandlers/decideprofile.js +1 -1
  26. package/lib/services/drmHandlers/decideprofile.test.js +1 -1
  27. package/lib/services/drmHandlers/verifydrm.js +6 -6
  28. package/lib/services/drmHandlers/verifydrm.test.js +5 -5
  29. package/lib/services/eventListenerHandlers/removeEventListeners.js +2 -2
  30. package/lib/services/eventListenerHandlers/removeEventListeners.test.js +9 -9
  31. package/lib/services/keyboardHandlers/resolvekeypress.js +5 -5
  32. package/lib/services/keyboardHandlers/resolvekeypress.test.js +1 -1
  33. package/lib/services/liveStreamHandlers/handleLiveStreamControls.js +2 -2
  34. package/lib/services/liveStreamHandlers/handleLiveStreamControls.test.js +2 -2
  35. package/lib/services/localStorageHandlers/localStorageHandlers.js +2 -2
  36. package/lib/services/localStorageHandlers/localStorageHandlers.test.js +2 -5
  37. package/lib/services/nicamHandlers/nicamhandler.d.ts +1 -2
  38. package/lib/services/nicamHandlers/nicamhandler.js +17 -16
  39. package/lib/services/nicamHandlers/nicamhandler.test.js +72 -9
  40. package/lib/services/npoPlayerAPI/npoPlayerAPI.d.ts +2 -2
  41. package/lib/services/npoPlayerAPI/npoPlayerAPI.js +16 -23
  42. package/lib/services/preferences/handlePreferences.d.ts +2 -0
  43. package/lib/services/preferences/handlePreferences.js +42 -0
  44. package/lib/services/preferences/handlePreferences.test.js +102 -0
  45. package/lib/services/segmentHandlers/addSegmentEventListeners.js +2 -2
  46. package/lib/services/segmentHandlers/addSegmentEventListeners.test.js +1 -1
  47. package/lib/services/services.d.ts +6 -2
  48. package/lib/services/services.js +21 -2
  49. package/lib/services/streamoptionsHandlers/{steamOptionsHandler.js → streamOptionsHandler.js} +11 -11
  50. package/lib/services/streamoptionsHandlers/streamOptionsHandler.test.js +20 -20
  51. package/lib/services/uiHandlers/uiVisiblityHandler.d.ts +3 -0
  52. package/lib/services/uiHandlers/uiVisiblityHandler.js +26 -0
  53. package/lib/services/uiHandlers/uiVisiblityHandler.test.d.ts +1 -0
  54. package/lib/services/uiHandlers/uiVisiblityHandler.test.js +62 -0
  55. package/lib/src/js/api/getstreamobject.d.ts +1 -1
  56. package/lib/src/js/playeractions/handlers/processplayerconfig.d.ts +1 -1
  57. package/lib/src/js/playeractions/handlers/processsourceconfig.d.ts +1 -0
  58. package/lib/src/js/playeractions/handlers/processsourceconfig.test.d.ts +1 -0
  59. package/lib/src/npoplayer.d.ts +2 -3
  60. package/lib/src/services/nicamHandlers/nicamhandler.d.ts +1 -2
  61. package/lib/src/services/npoPlayerAPI/npoPlayerAPI.d.ts +2 -2
  62. package/lib/src/services/preferences/handlePreferences.d.ts +2 -0
  63. package/lib/src/services/preferences/handlePreferences.test.d.ts +1 -0
  64. package/lib/src/services/services.d.ts +6 -2
  65. package/lib/src/services/uiHandlers/uiVisiblityHandler.d.ts +3 -0
  66. package/lib/src/services/uiHandlers/uiVisiblityHandler.test.d.ts +1 -0
  67. package/lib/src/types/classes.d.ts +6 -0
  68. package/lib/src/types/interfaces.d.ts +24 -3
  69. package/lib/src/ui/components/adbutton.d.ts +1 -1
  70. package/lib/src/ui/components/adlabel.d.ts +1 -1
  71. package/lib/src/ui/components/buttons.d.ts +6 -16
  72. package/lib/src/ui/components/controlbar.d.ts +2 -2
  73. package/lib/src/ui/components/ctabar.d.ts +1 -1
  74. package/lib/src/ui/components/playnext.d.ts +1 -4
  75. package/lib/src/ui/components/seekbar.d.ts +1 -1
  76. package/lib/src/ui/components/titlebar.d.ts +1 -1
  77. package/lib/src/ui/handlers/playnextscreen.test.d.ts +1 -0
  78. package/lib/src/ui/uicontainer.test.d.ts +1 -0
  79. package/lib/tests/mocks/mockLogEmitter.d.ts +2 -0
  80. package/lib/tests/mocks/mockLogEmitter.js +20 -0
  81. package/lib/tests/mocks/mockNpoplayer.js +1 -2
  82. package/lib/tests/mocks/playerContextMock.d.ts +5 -3
  83. package/lib/tests/mocks/playerContextMock.js +7 -5
  84. package/lib/types/classes.d.ts +6 -0
  85. package/lib/types/classes.js +12 -0
  86. package/lib/types/interfaces.d.ts +24 -3
  87. package/lib/types/interfaces.js +1 -0
  88. package/lib/ui/components/adbutton.d.ts +1 -1
  89. package/lib/ui/components/adbutton.js +3 -3
  90. package/lib/ui/components/adlabel.d.ts +1 -1
  91. package/lib/ui/components/adlabel.js +3 -3
  92. package/lib/ui/components/buttons.d.ts +6 -16
  93. package/lib/ui/components/buttons.js +27 -10
  94. package/lib/ui/components/controlbar.d.ts +2 -2
  95. package/lib/ui/components/controlbar.js +20 -37
  96. package/lib/ui/components/ctabar.d.ts +1 -1
  97. package/lib/ui/components/ctabar.js +4 -4
  98. package/lib/ui/components/nativemobile/topbar.js +2 -2
  99. package/lib/ui/components/playnext.d.ts +1 -4
  100. package/lib/ui/components/playnext.js +3 -3
  101. package/lib/ui/components/seekbar.d.ts +1 -1
  102. package/lib/ui/components/seekbar.js +5 -3
  103. package/lib/ui/components/settingspanel.js +9 -9
  104. package/lib/ui/components/titlebar.d.ts +1 -1
  105. package/lib/ui/components/titlebar.js +2 -2
  106. package/lib/ui/components/topbar.js +6 -20
  107. package/lib/ui/components/verticalvideo/controlbar.js +1 -1
  108. package/lib/ui/handlers/playnextscreen.test.d.ts +1 -0
  109. package/lib/ui/nativemobileuifactory.js +1 -1
  110. package/lib/ui/nativemobileuifactory.test.js +2 -1
  111. package/lib/ui/uicontainer.js +11 -30
  112. package/lib/ui/uicontainer.test.d.ts +1 -0
  113. package/lib/ui/uicontainer.test.js +80 -0
  114. package/package.json +2 -2
  115. package/src/style/components/_advert.scss +0 -9
  116. package/src/style/components/_nicam.scss +5 -4
  117. package/src/style/components/_settingspanel.scss +48 -17
  118. package/src/style/components/vertical-video/_settingspanel.scss +1 -1
  119. package/src/style/npoplayer.css +25 -20
  120. package/src/style/variants/_player-base.scss +4 -0
  121. package/src/style/variants/_player-large.scss +5 -1
  122. package/src/style/variants/_player-small.scss +11 -8
  123. /package/lib/{src/ui/handlers/playnextstreen.test.d.ts → js/playeractions/handlers/processsourceconfig.test.d.ts} +0 -0
  124. /package/lib/{ui/handlers/playnextstreen.test.d.ts → services/preferences/handlePreferences.test.d.ts} +0 -0
  125. /package/lib/services/streamoptionsHandlers/{steamOptionsHandler.d.ts → streamOptionsHandler.d.ts} +0 -0
  126. /package/lib/src/services/streamoptionsHandlers/{steamOptionsHandler.d.ts → streamOptionsHandler.d.ts} +0 -0
  127. /package/lib/ui/handlers/{playnextstreen.test.js → playnextscreen.test.js} +0 -0
@@ -4,7 +4,7 @@ import { type InitialisationProps } from '@npotag/tag/dist/types/src/npoTag';
4
4
  import { type PlayerAPI, type PlayerConfig, type SourceConfig } from 'bitmovin-player';
5
5
  import { UIManager } from 'bitmovin-player-ui';
6
6
  import { LogEmitter } from './types/classes';
7
- import { type DRMProfile, type ApiPayload, type NPOTagObject, type StreamObject, type StreamOptions, type UIComponents, type TimeLineMarker, type LocalStorageData, type PlayerContext, type EventListeners, NpoPlayerUIVariants } from './types/interfaces';
7
+ import { type DRMProfile, type ApiPayload, type NPOTagObject, type StreamObject, type StreamOptions, type UIComponents, type TimeLineMarker, type PlayerContext, type EventListeners, NpoPlayerUIVariants } from './types/interfaces';
8
8
  export { type PlayerConfig, type InitialisationProps, type NPOTagObject, type StreamOptions, NpoPlayerUIVariants };
9
9
  export default class NpoPlayer {
10
10
  playerConfig: PlayerConfig | undefined;
@@ -30,10 +30,9 @@ export default class NpoPlayer {
30
30
  isShowingPlayNextScreen: boolean;
31
31
  canceledPlayNextScreen: boolean;
32
32
  playerContext: PlayerContext | undefined;
33
- npoplayerServices: NpoPlayerServices;
33
+ npoPlayerServices: NpoPlayerServices;
34
34
  eventListeners: EventListeners | undefined;
35
35
  mockNpoPlayer: any;
36
- userPreferences: LocalStorageData;
37
36
  constructor(container: HTMLElement | {
38
37
  container: HTMLElement;
39
38
  playerConfig: PlayerConfig;
@@ -1,6 +1,5 @@
1
- import { UIManager } from 'bitmovin-player-ui';
2
1
  import { PlayerContext } from '../../types/interfaces';
3
2
  export declare function processNicam(playerContext: PlayerContext, nicamElement: HTMLElement | undefined): void;
4
3
  export declare function addNicamIcon(character: string, nicamElement: Element): void;
5
- export declare function showNicamAfterUiDelay(playerContext: PlayerContext, uiManager: UIManager | undefined): void;
4
+ export declare function showNicamAfterUiDelay(playerContext: PlayerContext): void;
6
5
  export declare function setupNicamKijkwijzerIcons(playerContext: PlayerContext): void;
@@ -17,7 +17,8 @@ export declare class NpoPlayerAPI {
17
17
  setViewMode(viewMode: ViewMode): void;
18
18
  getViewMode(): ViewMode;
19
19
  areSubtitlesEnabled(): boolean;
20
- enableSubtitles(): void;
20
+ getCurrentSubtitle(): string | undefined;
21
+ enableSubtitles(selectedLang?: string): void;
21
22
  isPaused(): boolean;
22
23
  isMuted(): boolean;
23
24
  isLive(): boolean;
@@ -38,7 +39,6 @@ export declare class NpoPlayerAPI {
38
39
  getTimeShift(): number;
39
40
  scheduleAds(adConfig: AdConfig): Promise<AdBreak[]>;
40
41
  getActiveAdBreak(): AdBreak | null;
41
- discardAdBreak(adBreakId: string): void;
42
42
  getConfig(mergedConfig?: boolean): PlayerConfig;
43
43
  createUIManager(playerContext: PlayerContext, variant: NpoPlayerUIVariants): Promise<void | UIManager>;
44
44
  }
@@ -0,0 +1,2 @@
1
+ import { PlayerContext } from '../../types/interfaces';
2
+ export declare function handlePreferences(playerContext: PlayerContext): void;
@@ -1,6 +1,5 @@
1
1
  import { ApiPayload, Fragment, PlayerContext, Profile, Segment, TimeLineMarker, LocalStorageData, LocalStorageValues, NpoPlayerUIVariants } from '../types/interfaces';
2
2
  import { AVType } from '@npotag/tag/dist/types/src/streamTracker';
3
- import { UIManager } from 'bitmovin-player-ui';
4
3
  export declare class NpoPlayerServices {
5
4
  getAVType(avType: string): AVType;
6
5
  keyboardHandler(playerContext: PlayerContext, e: KeyboardEvent): void;
@@ -13,7 +12,12 @@ export declare class NpoPlayerServices {
13
12
  handleUserPrefs(playerContext: PlayerContext): void;
14
13
  setAccessibilityAttributes(playerContext: PlayerContext): void;
15
14
  schedulePreRolls(playerContext: PlayerContext): Promise<void>;
15
+ discardAdBreak(playerContext: PlayerContext): void;
16
16
  handleVerticalVideoControls(playerContext: PlayerContext, variant: NpoPlayerUIVariants): void;
17
- showNicamAfterUiDelay(playerContext: PlayerContext | undefined, uiManager: UIManager | undefined): void;
17
+ showNicamAfterUiDelay(playerContext: PlayerContext | undefined): void;
18
18
  setupNicamKijkwijzerIcons(playerContext: PlayerContext): void;
19
+ handlePreferences(playerContext: PlayerContext): void;
20
+ addUivisiblityHandlers(playerContext: PlayerContext): void;
21
+ removeUivisiblityHandlers(playerContext: PlayerContext): void;
22
+ handleStreamOptions(playerContext: PlayerContext): void;
19
23
  }
@@ -0,0 +1,3 @@
1
+ import { PlayerContext } from '../../types/interfaces';
2
+ export declare function addUivisiblityHandlers(playerContext: PlayerContext): void;
3
+ export declare function removeUivisiblityHandlers(playerContext: PlayerContext): void;
@@ -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 {};
@@ -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 { GoogleCastRemoteControlConfig, 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,7 +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>>;
203
224
  export type NPOGoogleCastRemoteControlConfig = GoogleCastRemoteControlConfig;
@@ -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,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,8 @@
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
4
  import { PlayerContext } from '../../types/interfaces';
5
+ import { NpoPlayerAPI } from '../../services/npoPlayerAPI/npoPlayerAPI';
5
6
  export declare function createMiddleButtons(playerContext: PlayerContext): ControlBar;
6
7
  export declare function createRewindButton(playerContext: PlayerContext): Button<{
7
8
  cssClass: string;
@@ -11,35 +12,24 @@ export declare function createForwardButton(playerContext: PlayerContext): Butto
11
12
  cssClass: string;
12
13
  ariaLabel: string;
13
14
  }>;
14
- export declare function createPlayNextButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
15
+ export declare function createPlayNextButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
15
16
  cssClass: string;
16
- text: string;
17
17
  ariaLabel: string;
18
- hidden: false;
19
- acceptsTouchWithUiHidden: true;
20
18
  }>;
21
- export declare function createCancelPlayNextButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
19
+ export declare function createCancelPlayNextButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
22
20
  cssClass: string;
23
- text: string;
24
21
  ariaLabel: string;
25
- hidden: false;
26
- acceptsTouchWithUiHidden: true;
27
22
  }>;
28
23
  export declare function createskipIntroButton(player: PlayerAPI): Button<{
29
24
  cssClass: string;
30
- text: string;
31
25
  ariaLabel: string;
32
- hidden: true;
33
26
  }>;
34
27
  export declare function createGoBackLiveButton(player: PlayerAPI): Button<{
35
28
  cssClass: string;
36
- text: string;
37
29
  ariaLabel: string;
38
- hidden: true;
39
30
  }>;
40
- export declare function createWatchFromStartButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
31
+ export declare function createWatchFromStartButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
41
32
  cssClass: string;
42
- text: string;
43
33
  ariaLabel: string;
44
- hidden: true;
45
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 { PlayerContext } from '../../types/interfaces';
3
- export declare function createControlBar(playerContext: PlayerContext): 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,13 +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
- acceptsTouchWithUiHidden: true;
11
8
  }>[];
12
9
  cssClasses: string[];
13
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;
@@ -0,0 +1 @@
1
+ export {};
@@ -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
+ };
@@ -68,7 +68,6 @@ export const mockNpoPlayer = {
68
68
  variant: '',
69
69
  playerContext: {},
70
70
  isShowingPlayNextScreen: false,
71
- userPreferences: {},
72
71
  eventListeners: undefined,
73
72
  setVolume: function (volume) {
74
73
  jest.fn();
@@ -118,6 +117,6 @@ export const mockNpoPlayer = {
118
117
  updateMarkers: function () {
119
118
  jest.fn();
120
119
  },
121
- npoplayerServices: new NpoPlayerServices(),
120
+ npoPlayerServices: new NpoPlayerServices(),
122
121
  mockNpoPlayer: undefined
123
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),
@@ -45,7 +46,6 @@ export const createMockNpoPlayerAPI = (overrides = {}) => ({
45
46
  getTimeShift: jest.fn().mockReturnValue(0),
46
47
  scheduleAds: jest.fn().mockResolvedValue([]),
47
48
  getActiveAdBreak: jest.fn().mockReturnValue(undefined),
48
- discardAdBreak: jest.fn(),
49
49
  getConfig: jest.fn().mockReturnValue({}),
50
50
  createUIManager: jest.fn(),
51
51
  ...overrides
@@ -69,7 +69,9 @@ export const createMockNpoPlayer = (overrides = {}) => ({
69
69
  logEmitter: { emit: jest.fn() },
70
70
  uiComponents: {},
71
71
  container: document.createElement('div'),
72
- streamOptions: {},
72
+ streamOptions: {
73
+ enableSubtitles: false
74
+ },
73
75
  jwt: '',
74
76
  apiPayload: { baseURL: '', jwt: '', data: {} },
75
77
  adBreakActive: false,
@@ -79,8 +81,9 @@ export const createMockNpoPlayer = (overrides = {}) => ({
79
81
  isShowingPlayNextScreen: false,
80
82
  canceledPlayNextScreen: false,
81
83
  playerContext: undefined,
82
- npoplayerServices: {
84
+ npoPlayerServices: {
83
85
  getStoredUserPrefs: jest.fn(),
86
+ setStoredUserPrefs: jest.fn(),
84
87
  handleUserPrefs: jest.fn(),
85
88
  setAccessibilityAttributes: jest.fn(),
86
89
  keyboardHandler: jest.fn(),
@@ -89,7 +92,6 @@ export const createMockNpoPlayer = (overrides = {}) => ({
89
92
  },
90
93
  eventListeners: undefined,
91
94
  mockNpoPlayer: undefined,
92
- userPreferences: {},
93
95
  initPlayer: jest.fn(),
94
96
  loadStream: jest.fn(),
95
97
  doError: jest.fn(),
@@ -113,7 +115,7 @@ export const createMockNpoPlayer = (overrides = {}) => ({
113
115
  });
114
116
  export const createPlayerContextMock = (overrides = {}) => ({
115
117
  player: createMockNpoPlayerAPI(),
116
- npoplayer: createMockNpoPlayer(),
118
+ npoPlayer: createMockNpoPlayer(),
117
119
  ...overrides
118
120
  });
119
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 { GoogleCastRemoteControlConfig, 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,7 +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>>;
203
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,7 +1,8 @@
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
4
  import { PlayerContext } from '../../types/interfaces';
5
+ import { NpoPlayerAPI } from '../../services/npoPlayerAPI/npoPlayerAPI';
5
6
  export declare function createMiddleButtons(playerContext: PlayerContext): ControlBar;
6
7
  export declare function createRewindButton(playerContext: PlayerContext): Button<{
7
8
  cssClass: string;
@@ -11,35 +12,24 @@ export declare function createForwardButton(playerContext: PlayerContext): Butto
11
12
  cssClass: string;
12
13
  ariaLabel: string;
13
14
  }>;
14
- export declare function createPlayNextButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
15
+ export declare function createPlayNextButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
15
16
  cssClass: string;
16
- text: string;
17
17
  ariaLabel: string;
18
- hidden: false;
19
- acceptsTouchWithUiHidden: true;
20
18
  }>;
21
- export declare function createCancelPlayNextButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
19
+ export declare function createCancelPlayNextButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
22
20
  cssClass: string;
23
- text: string;
24
21
  ariaLabel: string;
25
- hidden: false;
26
- acceptsTouchWithUiHidden: true;
27
22
  }>;
28
23
  export declare function createskipIntroButton(player: PlayerAPI): Button<{
29
24
  cssClass: string;
30
- text: string;
31
25
  ariaLabel: string;
32
- hidden: true;
33
26
  }>;
34
27
  export declare function createGoBackLiveButton(player: PlayerAPI): Button<{
35
28
  cssClass: string;
36
- text: string;
37
29
  ariaLabel: string;
38
- hidden: true;
39
30
  }>;
40
- export declare function createWatchFromStartButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
31
+ export declare function createWatchFromStartButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
41
32
  cssClass: string;
42
- text: string;
43
33
  ariaLabel: string;
44
- hidden: true;
45
34
  }>;
35
+ export declare function createChromecastButton(player: NpoPlayerAPI, npoPlayer: NpoPlayer): CastToggleButton;