@npo/player 1.27.7 → 1.28.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 (214) hide show
  1. package/README.md +4 -7
  2. package/lib/js/markers/updateLiveMarkers.d.ts +7 -2
  3. package/lib/js/markers/updateLiveMarkers.js +11 -4
  4. package/lib/js/markers/updateLiveMarkers.test.js +13 -3
  5. package/lib/js/playeractions/handlers/handleoffsets.test.js +1 -1
  6. package/lib/js/playeractions/handlers/mediasessionactions.d.ts +7 -2
  7. package/lib/js/playeractions/handlers/mediasessionactions.js +7 -7
  8. package/lib/js/playeractions/handlers/processplayerconfig.d.ts +1 -1
  9. package/lib/js/playeractions/handlers/processplayerconfig.js +1 -1
  10. package/lib/js/playeractions/handlers/processplayerconfig.test.js +1 -1
  11. package/lib/js/playeractions/handlers/processsourceconfig.d.ts +11 -2
  12. package/lib/js/playeractions/handlers/processsourceconfig.js +35 -18
  13. package/lib/js/playeractions/handlers/removereplayclass.d.ts +1 -1
  14. package/lib/js/playeractions/handlers/removereplayclass.js +1 -1
  15. package/lib/js/playeractions/handlers/removereplayclass.test.js +1 -1
  16. package/lib/js/settings/localization.d.ts +1 -0
  17. package/lib/js/utilities/utilities.jwt.d.ts +2 -0
  18. package/lib/js/utilities/utilities.jwt.js +22 -0
  19. package/lib/js/utilities/utilities.stream.js +11 -2
  20. package/lib/js/utilities/utilities.url.js +2 -2
  21. package/lib/js/utilities/utilities.version.js +1 -1
  22. package/lib/js/utilities/utilities.version.test.js +1 -1
  23. package/lib/lang/nl.json +2 -1
  24. package/lib/npoplayer.d.ts +6 -5
  25. package/lib/npoplayer.js +81 -28
  26. package/lib/package.json +7 -9
  27. package/lib/services/a11y/setup.test.js +2 -4
  28. package/lib/services/advertHandlers/handlePreRolls.js +3 -4
  29. package/lib/services/advertHandlers/handlePrerolls.test.js +2 -3
  30. package/lib/services/chapterHandlers/chapterHandler.d.ts +35 -0
  31. package/lib/services/chapterHandlers/chapterHandler.js +230 -0
  32. package/lib/services/errors/errorBackground.test.js +1 -1
  33. package/lib/services/errors/errorHandler.d.ts +4 -2
  34. package/lib/services/errors/errorHandler.js +27 -14
  35. package/lib/services/errors/errorHandler.test.js +148 -0
  36. package/lib/services/errors/errorRetryHandler.d.ts +2 -0
  37. package/lib/services/errors/errorRetryHandler.js +14 -0
  38. package/lib/services/errors/errorRetryHandler.test.d.ts +1 -0
  39. package/lib/services/errors/errorRetryHandler.test.js +62 -0
  40. package/lib/services/errors/errorText.js +8 -5
  41. package/lib/services/errors/errorText.test.js +3 -3
  42. package/lib/services/infoPanel/infoPanel.d.ts +3 -0
  43. package/lib/services/infoPanel/infoPanel.js +35 -0
  44. package/lib/services/infoPanel/infoPanel.test.d.ts +1 -0
  45. package/lib/services/infoPanel/infoPanel.test.js +70 -0
  46. package/lib/services/keyboardHandlers/resolvekeypress.js +11 -1
  47. package/lib/services/keyboardHandlers/resolvekeypress.test.js +6 -2
  48. package/lib/services/nicamHandlers/nicamhandler.d.ts +1 -0
  49. package/lib/services/nicamHandlers/nicamhandler.js +2 -1
  50. package/lib/services/nicamHandlers/nicamhandler.test.js +2 -2
  51. package/lib/services/npoPlayerAPI/npoPlayerAPI.d.ts +8 -2
  52. package/lib/services/npoPlayerAPI/npoPlayerAPI.js +25 -12
  53. package/lib/services/npoPlayerAPI/playerModules.d.ts +1 -0
  54. package/lib/services/npoPlayerAPI/playerModules.js +46 -0
  55. package/lib/services/preferences/handlePreferences.js +9 -4
  56. package/lib/services/preferences/handlePreferences.test.js +53 -17
  57. package/lib/services/segmentHandlers/addSegmentEventListeners.test.js +1 -1
  58. package/lib/services/segmentHandlers/isSegmentInBounds.d.ts +2 -0
  59. package/lib/services/segmentHandlers/isSegmentInBounds.js +5 -0
  60. package/lib/services/segmentHandlers/isSegmentInBounds.test.d.ts +1 -0
  61. package/lib/services/segmentHandlers/isSegmentInBounds.test.js +27 -0
  62. package/lib/services/services.d.ts +5 -2
  63. package/lib/services/services.js +15 -2
  64. package/lib/services/streamFetchHandler/fetchStream.js +5 -4
  65. package/lib/services/streamFetchHandler/fetchstream.test.js +25 -3
  66. package/lib/services/streamoptionsHandlers/streamOptionsHandler.js +11 -9
  67. package/lib/services/streamoptionsHandlers/streamOptionsHandler.test.js +14 -2
  68. package/lib/services/trackingHandlers/eventBinding.js +48 -33
  69. package/lib/services/trackingHandlers/eventBinding.test.js +57 -1
  70. package/lib/services/trackingHandlers/playerTrackerStart.js +1 -1
  71. package/lib/services/uiHandlers/uiVisiblityHandler.js +6 -0
  72. package/lib/services/verticalVideoHandlers/handleVerticalVideoSettings.test.js +0 -9
  73. package/lib/src/js/markers/updateLiveMarkers.d.ts +7 -2
  74. package/lib/src/js/playeractions/handlers/mediasessionactions.d.ts +7 -2
  75. package/lib/src/js/playeractions/handlers/processplayerconfig.d.ts +1 -1
  76. package/lib/src/js/playeractions/handlers/processsourceconfig.d.ts +11 -2
  77. package/lib/src/js/playeractions/handlers/removereplayclass.d.ts +1 -1
  78. package/lib/src/js/settings/localization.d.ts +1 -0
  79. package/lib/src/js/utilities/utilities.jwt.d.ts +2 -0
  80. package/lib/src/npoplayer.d.ts +6 -5
  81. package/lib/src/services/chapterHandlers/chapterHandler.d.ts +35 -0
  82. package/lib/src/services/errors/errorHandler.d.ts +4 -2
  83. package/lib/src/services/errors/errorRetryHandler.d.ts +2 -0
  84. package/lib/src/services/errors/errorRetryHandler.test.d.ts +1 -0
  85. package/lib/src/services/infoPanel/infoPanel.d.ts +3 -0
  86. package/lib/src/services/infoPanel/infoPanel.test.d.ts +1 -0
  87. package/lib/src/services/nicamHandlers/nicamhandler.d.ts +1 -0
  88. package/lib/src/services/npoPlayerAPI/npoPlayerAPI.d.ts +8 -2
  89. package/lib/src/services/npoPlayerAPI/playerModules.d.ts +1 -0
  90. package/lib/src/services/segmentHandlers/isSegmentInBounds.d.ts +2 -0
  91. package/lib/src/services/segmentHandlers/isSegmentInBounds.test.d.ts +1 -0
  92. package/lib/src/services/services.d.ts +5 -2
  93. package/lib/src/types/events.d.ts +1 -1
  94. package/lib/src/types/interfaces.d.ts +39 -43
  95. package/lib/src/ui/components/adbutton.d.ts +3 -6
  96. package/lib/src/ui/components/adlabel.d.ts +3 -6
  97. package/lib/src/ui/components/audio/controlbar.d.ts +2 -2
  98. package/lib/src/ui/components/buttons.d.ts +18 -11
  99. package/lib/src/ui/components/ctabar.d.ts +4 -10
  100. package/lib/src/ui/components/infopanel/infopanel.d.ts +3 -0
  101. package/lib/src/ui/components/infopanel/togglebutton.d.ts +3 -0
  102. package/lib/src/ui/components/playnext.d.ts +3 -9
  103. package/lib/src/ui/components/seekbar.d.ts +2 -3
  104. package/lib/src/ui/components/settingspanel.d.ts +2 -3
  105. package/lib/src/ui/components/titlebar.d.ts +2 -2
  106. package/lib/src/ui/handlers/domhandlers.d.ts +2 -2
  107. package/lib/src/ui/handlers/listboxhandlers.d.ts +18 -4
  108. package/lib/src/ui/handlers/playnextscreen.d.ts +6 -2
  109. package/lib/src/ui/uicontainer.d.ts +1 -2
  110. package/lib/tests/jest.setup-files-after-env.d.ts +0 -0
  111. package/lib/tests/jest.setup-files-after-env.js +6 -0
  112. package/lib/tests/jest.setup-tests.d.ts +1 -0
  113. package/lib/tests/jest.setup-tests.js +2 -0
  114. package/lib/tests/mocks/mockNpoplayer.js +27 -44
  115. package/lib/tests/mocks/mockPlayerAPI.d.ts +1 -1
  116. package/lib/tests/mocks/mockPlayerAPI.js +15 -1
  117. package/lib/tests/mocks/mockPlayerUi.d.ts +64 -0
  118. package/lib/tests/mocks/mockPlayerUi.js +251 -0
  119. package/lib/tests/mocks/playerContextMock.d.ts +3 -66
  120. package/lib/tests/mocks/playerContextMock.js +34 -7
  121. package/lib/types/events.d.ts +1 -1
  122. package/lib/types/events.js +1 -1
  123. package/lib/types/interfaces.d.ts +39 -43
  124. package/lib/types/interfaces.js +0 -27
  125. package/lib/ui/components/adbutton.d.ts +3 -6
  126. package/lib/ui/components/adbutton.js +2 -1
  127. package/lib/ui/components/adlabel.d.ts +3 -6
  128. package/lib/ui/components/adlabel.js +2 -1
  129. package/lib/ui/components/audio/controlbar.d.ts +2 -2
  130. package/lib/ui/components/audio/controlbar.js +6 -6
  131. package/lib/ui/components/buttons.d.ts +18 -11
  132. package/lib/ui/components/buttons.js +44 -26
  133. package/lib/ui/components/controlbar.js +13 -9
  134. package/lib/ui/components/ctabar.d.ts +4 -10
  135. package/lib/ui/components/ctabar.js +8 -7
  136. package/lib/ui/components/infopanel/infopanel.d.ts +3 -0
  137. package/lib/ui/components/infopanel/infopanel.js +40 -0
  138. package/lib/ui/components/infopanel/togglebutton.d.ts +3 -0
  139. package/lib/ui/components/infopanel/togglebutton.js +18 -0
  140. package/lib/ui/components/playnext.d.ts +3 -9
  141. package/lib/ui/components/playnext.js +3 -3
  142. package/lib/ui/components/seekbar.d.ts +2 -3
  143. package/lib/ui/components/seekbar.js +7 -3
  144. package/lib/ui/components/settingspanel.d.ts +2 -3
  145. package/lib/ui/components/settingspanel.js +79 -53
  146. package/lib/ui/components/titlebar.d.ts +2 -2
  147. package/lib/ui/components/titlebar.js +2 -1
  148. package/lib/ui/components/topbar.js +8 -5
  149. package/lib/ui/components/verticalvideo/controlbar.js +5 -2
  150. package/lib/ui/components/verticalvideo/settingspanel.js +9 -5
  151. package/lib/ui/handlers/accessibilityhandler.js +11 -22
  152. package/lib/ui/handlers/accessibilityhandler.test.js +25 -34
  153. package/lib/ui/handlers/domhandlers.d.ts +2 -2
  154. package/lib/ui/handlers/listboxhandlers.d.ts +18 -4
  155. package/lib/ui/handlers/listboxhandlers.js +5 -3
  156. package/lib/ui/handlers/playnextscreen.d.ts +6 -2
  157. package/lib/ui/handlers/playnextscreen.js +4 -4
  158. package/lib/ui/handlers/playnextscreen.test.js +15 -3
  159. package/lib/ui/uicontainer.d.ts +1 -2
  160. package/lib/ui/uicontainer.js +24 -8
  161. package/lib/ui/uicontainer.test.js +6 -5
  162. package/package.json +7 -9
  163. package/src/style/components/_advert.scss +0 -4
  164. package/src/style/components/_buffering.scss +18 -22
  165. package/src/style/components/_controlbars.scss +0 -4
  166. package/src/style/components/_icons.scss +18 -4
  167. package/src/style/components/_infopanel.scss +99 -0
  168. package/src/style/components/_nicam.scss +6 -2
  169. package/src/style/components/_seekbarthumbnail.scss +5 -0
  170. package/src/style/components/_settingspanel.scss +1 -1
  171. package/src/style/components/_subtitles.scss +0 -1
  172. package/src/style/components/_textbuttons.scss +30 -1
  173. package/src/style/components/_volumeslider.scss +0 -1
  174. package/src/style/components/audio/_bottombar.scss +6 -0
  175. package/src/style/components/audio/_metadata.scss +25 -9
  176. package/src/style/components/audio/_topbar.scss +6 -1
  177. package/src/style/npoplayer.css +166 -83
  178. package/src/style/npoplayer.scss +10 -2
  179. package/src/style/variants/_player-audio-only.scss +32 -0
  180. package/src/style/variants/_player-base.scss +5 -1
  181. package/src/style/variants/_player-large.scss +3 -3
  182. package/src/style/variants/_player-medium.scss +5 -1
  183. package/src/style/variants/_player-small.scss +6 -1
  184. package/src/style/vars/_colors.scss +1 -1
  185. package/src/style/vars/_icons.scss +5 -4
  186. package/src/style/vars/_z-index.scss +1 -1
  187. package/lib/npoplayer-bridge.test.js +0 -24
  188. package/lib/src/ui/components/nativemobile/buttons.d.ts +0 -30
  189. package/lib/src/ui/components/nativemobile/controlbar.d.ts +0 -3
  190. package/lib/src/ui/components/nativemobile/ctabar.d.ts +0 -11
  191. package/lib/src/ui/components/nativemobile/titlebar.d.ts +0 -2
  192. package/lib/src/ui/components/nativemobile/topbar.d.ts +0 -3
  193. package/lib/src/ui/nativemobileuicontainer.d.ts +0 -5
  194. package/lib/src/ui/nativemobileuifactory.d.ts +0 -3
  195. package/lib/src/ui/nativemobileuifactory.test.d.ts +0 -1
  196. package/lib/ui/components/nativemobile/buttons.d.ts +0 -30
  197. package/lib/ui/components/nativemobile/buttons.js +0 -233
  198. package/lib/ui/components/nativemobile/controlbar.d.ts +0 -3
  199. package/lib/ui/components/nativemobile/controlbar.js +0 -43
  200. package/lib/ui/components/nativemobile/ctabar.d.ts +0 -11
  201. package/lib/ui/components/nativemobile/ctabar.js +0 -10
  202. package/lib/ui/components/nativemobile/titlebar.d.ts +0 -2
  203. package/lib/ui/components/nativemobile/titlebar.js +0 -7
  204. package/lib/ui/components/nativemobile/topbar.d.ts +0 -3
  205. package/lib/ui/components/nativemobile/topbar.js +0 -23
  206. package/lib/ui/nativemobileuicontainer.d.ts +0 -5
  207. package/lib/ui/nativemobileuicontainer.js +0 -42
  208. package/lib/ui/nativemobileuifactory.d.ts +0 -3
  209. package/lib/ui/nativemobileuifactory.js +0 -112
  210. package/lib/ui/nativemobileuifactory.test.d.ts +0 -1
  211. package/lib/ui/nativemobileuifactory.test.js +0 -64
  212. package/src/style/variants/_player-native-mobile.scss +0 -13
  213. /package/lib/{npoplayer-bridge.test.d.ts → services/errors/errorHandler.test.d.ts} +0 -0
  214. /package/lib/src/{npoplayer-bridge.test.d.ts → services/errors/errorHandler.test.d.ts} +0 -0
@@ -1,70 +1,7 @@
1
- /// <reference types="jest" />
2
1
  import { NpoPlayerAPI } from '../../src/services/npoPlayerAPI/npoPlayerAPI';
3
- import { PlayerContext, StreamObject } from '../../src/types/interfaces';
2
+ import { PlayerContext } from '../../src/types/interfaces';
3
+ import NpoPlayer from 'npoplayer';
4
4
  export declare const createMockNpoPlayerAPI: (overrides?: {}) => jest.Mocked<NpoPlayerAPI>;
5
- export declare const createMockNpoPlayer: (overrides?: {}) => {
6
- playerConfig: {};
7
- sourceConfig: {};
8
- streamObject: StreamObject;
9
- player: jest.Mocked<NpoPlayerAPI>;
10
- uiManager: undefined;
11
- npoTag: undefined;
12
- streamTracker: undefined;
13
- logEmitter: {
14
- emit: jest.Mock<any, any, any>;
15
- };
16
- uiComponents: {};
17
- container: HTMLDivElement;
18
- streamOptions: {
19
- enableSubtitles: boolean;
20
- };
21
- jwt: string;
22
- apiPayload: {
23
- baseURL: string;
24
- jwt: string;
25
- data: {};
26
- };
27
- adBreakActive: boolean;
28
- version: string;
29
- drmProfile: {
30
- profileName: string;
31
- drm: string;
32
- };
33
- variant: string;
34
- isShowingPlayNextScreen: boolean;
35
- canceledPlayNextScreen: boolean;
36
- playerContext: undefined;
37
- npoPlayerServices: {
38
- getStoredUserPrefs: jest.Mock<any, any, any>;
39
- setStoredUserPrefs: jest.Mock<any, any, any>;
40
- handleUserPrefs: jest.Mock<any, any, any>;
41
- setAccessibilityAttributes: jest.Mock<any, any, any>;
42
- keyboardHandler: jest.Mock<any, any, any>;
43
- decideProfile: jest.Mock<any, any, any>;
44
- verifyDRM: jest.Mock<any, any, any>;
45
- handleError: jest.Mock<any, any, any>;
46
- };
47
- eventListeners: undefined;
48
- mockNpoPlayer: undefined;
49
- initPlayer: jest.Mock<any, any, any>;
50
- loadStream: jest.Mock<any, any, any>;
51
- doError: jest.Mock<any, any, any>;
52
- play: jest.Mock<any, any, any>;
53
- pause: jest.Mock<any, any, any>;
54
- setVolume: jest.Mock<any, any, any>;
55
- increaseVolume: jest.Mock<any, any, any>;
56
- decreaseVolume: jest.Mock<any, any, any>;
57
- goForward: jest.Mock<any, any, any>;
58
- goBackwards: jest.Mock<any, any, any>;
59
- watchFromStart: jest.Mock<any, any, any>;
60
- showPlayNextScreen: jest.Mock<any, any, any>;
61
- updateMarkers: jest.Mock<any, any, any>;
62
- cancelPlayNextScreen: jest.Mock<any, any, any>;
63
- hidePlayNextScreen: jest.Mock<any, any, any>;
64
- doPlayNext: jest.Mock<any, any, any>;
65
- destroy: jest.Mock<any, any, any>;
66
- unload: jest.Mock<any, any, any>;
67
- printVersion: jest.Mock<any, any, any>;
68
- };
5
+ export declare const createMockNpoPlayer: (overrides?: {}) => jest.Mocked<Partial<NpoPlayer>>;
69
6
  export declare const createPlayerContextMock: (overrides?: {}) => PlayerContext;
70
7
  export default createPlayerContextMock;
@@ -1,5 +1,7 @@
1
1
  import { VOLUME_MAX, VOLUME_MIN, VOLUME_STEP } from '../../src/services/npoPlayerAPI/contants';
2
2
  import { mockPlayerAPI } from './mockPlayerAPI';
3
+ import { NpoPlayerUIVariants } from '../../src/types/interfaces';
4
+ import { createLogEmitterMock } from './mockLogEmitter';
3
5
  let volume = 50;
4
6
  const setVolume = jest.fn((level) => {
5
7
  volume = Math.max(VOLUME_MIN, Math.min(VOLUME_MAX, level));
@@ -51,10 +53,16 @@ export const createMockNpoPlayerAPI = (overrides = {}) => ({
51
53
  getConfig: jest.fn().mockReturnValue({}),
52
54
  createUIManager: jest.fn(),
53
55
  handleErrorRetry: jest.fn(),
56
+ getAvailableVideoQualities: jest.fn(),
57
+ listSubtitles: jest.fn(),
58
+ setPlaybackSpeed: jest.fn(),
59
+ setVideoQuality: jest.fn(),
54
60
  ...overrides
55
61
  });
56
62
  export const createMockNpoPlayer = (overrides = {}) => ({
57
- playerConfig: {},
63
+ playerConfig: {
64
+ key: 'dummy-key'
65
+ },
58
66
  sourceConfig: {},
59
67
  streamObject: {
60
68
  stream: { drmToken: undefined },
@@ -65,11 +73,11 @@ export const createMockNpoPlayer = (overrides = {}) => ({
65
73
  assets: {},
66
74
  user: 'dummy'
67
75
  },
68
- player: createMockNpoPlayerAPI(),
76
+ player: mockPlayerAPI,
69
77
  uiManager: undefined,
70
78
  npoTag: undefined,
71
79
  streamTracker: undefined,
72
- logEmitter: { emit: jest.fn() },
80
+ logEmitter: createLogEmitterMock(),
73
81
  uiComponents: {},
74
82
  container: document.createElement('div'),
75
83
  streamOptions: {
@@ -80,7 +88,7 @@ export const createMockNpoPlayer = (overrides = {}) => ({
80
88
  adBreakActive: false,
81
89
  version: '1.0.0',
82
90
  drmProfile: { profileName: '', drm: '' },
83
- variant: 'DEFAULT',
91
+ variant: NpoPlayerUIVariants.DEFAULT,
84
92
  isShowingPlayNextScreen: false,
85
93
  canceledPlayNextScreen: false,
86
94
  playerContext: undefined,
@@ -92,13 +100,32 @@ export const createMockNpoPlayer = (overrides = {}) => ({
92
100
  keyboardHandler: jest.fn(),
93
101
  decideProfile: jest.fn(),
94
102
  verifyDRM: jest.fn(),
95
- handleError: jest.fn()
103
+ handleError: jest.fn(),
104
+ getAVType: jest.fn(),
105
+ convertFragmentToSegment: jest.fn(),
106
+ segmentMarkersHandler: jest.fn(),
107
+ schedulePreRolls: jest.fn(),
108
+ discardAdBreak: jest.fn(),
109
+ handleVerticalVideoControls: jest.fn(),
110
+ handleVerticalVideoSettings: jest.fn(),
111
+ showNicamAfterUiDelay: jest.fn(),
112
+ setupNicamKijkwijzerIcons: jest.fn(),
113
+ handlePreferences: jest.fn(),
114
+ addUivisiblityHandlers: jest.fn(),
115
+ removeEventListeners: jest.fn(),
116
+ removeUivisiblityHandlers: jest.fn(),
117
+ handleStreamOptions: jest.fn(),
118
+ fetchStream: jest.fn(),
119
+ startPlayerTracker: jest.fn(),
120
+ initPlayerTracker: jest.fn(),
121
+ logEvent: jest.fn(),
122
+ isSegmentInBounds: jest.fn(),
123
+ addDataInInfoPanel: jest.fn(),
124
+ clearInfoPanel: jest.fn()
96
125
  },
97
126
  eventListeners: undefined,
98
- mockNpoPlayer: undefined,
99
127
  initPlayer: jest.fn(),
100
128
  loadStream: jest.fn(),
101
- doError: jest.fn(),
102
129
  play: jest.fn(),
103
130
  pause: jest.fn(),
104
131
  setVolume: jest.fn(),
@@ -1,4 +1,4 @@
1
- import { PlayerEvent } from 'bitmovin-player';
1
+ import { PlayerEvent } from 'bitmovin-player/modules/bitmovinplayer-core';
2
2
  type PlayerEventMap = {
3
3
  [key in NpoPlayerEvent]: PlayerEvent;
4
4
  };
@@ -1,4 +1,4 @@
1
- import { PlayerEvent } from 'bitmovin-player';
1
+ import { PlayerEvent } from 'bitmovin-player/modules/bitmovinplayer-core';
2
2
  export var NpoPlayerEvent;
3
3
  (function (NpoPlayerEvent) {
4
4
  NpoPlayerEvent["Ready"] = "ready";
@@ -1,11 +1,15 @@
1
- import { type ErrorMessageOverlay, type Label, ControlBar, SettingsPanelItem, Button, SeekBar, CastToggleButton, SettingsPanel, SettingsToggleButton } from 'bitmovin-player-ui';
1
+ import { type ErrorMessageOverlay, type Label, ControlBar, SettingsPanelItem, Button, SeekBar, CastToggleButton, SettingsPanel, SettingsToggleButton, Container, ContainerConfig, ToggleButton, ToggleButtonConfig } from 'bitmovin-player-ui';
2
2
  import { type NPOTag, type PageTracker } from '@npotag/tag';
3
3
  import { ButtonConfig } from 'bitmovin-player-ui/dist/js/framework/components/button';
4
4
  import NpoPlayer from '../npoplayer';
5
5
  import { NpoPlayerAPI } from '../services/npoPlayerAPI/npoPlayerAPI';
6
6
  import { NpoPlayerEventCallback } from './events';
7
- import { AnalyticsConfig, DRMConfig, GoogleCastRemoteControlConfig, ProgressiveSourceConfig, SourceConfigOptions, SourceLabelingStreamTypeConfig, SubtitleTrack, ThumbnailTrack, VRConfig } from 'bitmovin-player';
8
- export { Technology } from 'bitmovin-player';
7
+ import { ProgressiveSourceConfig, SourceConfigOptions, SourceLabelingStreamTypeConfig, ThumbnailTrack } from 'bitmovin-player/modules/bitmovinplayer-core';
8
+ import type { AnalyticsConfig } from 'bitmovin-player/types/analytics/ConfigAPI';
9
+ import type { GoogleCastRemoteControlConfig } from 'bitmovin-player/types/remotecontrol/ConfigAPI';
10
+ import DRMConfig from 'bitmovin-player/modules/bitmovinplayer-drm';
11
+ import { SubtitleTrack } from 'bitmovin-player/modules/bitmovinplayer-subtitles';
12
+ export { Technology } from 'bitmovin-player/modules/bitmovinplayer-core';
9
13
  export interface Profile {
10
14
  profileName: string;
11
15
  drm: string | undefined;
@@ -82,6 +86,7 @@ interface StreamObject_Assets {
82
86
  preroll?: string;
83
87
  }
84
88
  export interface StreamObject_Metadata {
89
+ chapters?: Chapter[];
85
90
  broadcaster?: string;
86
91
  description: string;
87
92
  duration?: string;
@@ -108,11 +113,10 @@ export interface SourceConfig {
108
113
  smooth?: string;
109
114
  whep?: string;
110
115
  poster?: string;
111
- drm?: DRMConfig;
116
+ drm?: typeof DRMConfig;
112
117
  options?: SourceConfigOptions;
113
118
  subtitleTracks?: SubtitleTrack[];
114
119
  thumbnailTrack?: ThumbnailTrack;
115
- vr?: VRConfig;
116
120
  title?: string;
117
121
  description?: string;
118
122
  labeling?: SourceLabelingStreamTypeConfig;
@@ -138,8 +142,10 @@ export interface StreamOptions {
138
142
  customFallbackPoster?: string;
139
143
  autoFillTimeLineMarkerDuration?: boolean;
140
144
  autoplay?: boolean;
145
+ skippableChapters?: string[];
141
146
  npoTagPageTracker?: PageTracker;
142
147
  retryCallback?: () => void;
148
+ infoPanelHTML?: string;
143
149
  }
144
150
  export interface UIComponents {
145
151
  errorMessageOverlay?: ErrorMessageOverlay;
@@ -150,6 +156,7 @@ export interface UIComponents {
150
156
  subtitlesButton?: SettingsPanelItem | undefined;
151
157
  qualityButton?: SettingsPanelItem | undefined;
152
158
  watchFromStartButton?: Button<ButtonConfig> | undefined;
159
+ skipChapterButton?: Button<ButtonConfig> | undefined;
153
160
  controlBar?: ControlBar | undefined;
154
161
  adbutton?: Button<ButtonConfig> | undefined;
155
162
  adlabel?: Label<{
@@ -161,44 +168,8 @@ export interface UIComponents {
161
168
  settingsPanels?: SettingsPanel[] | undefined;
162
169
  settingsPanel?: SettingsPanel | undefined;
163
170
  settingsToggleButton?: SettingsToggleButton | undefined;
164
- }
165
- export interface CustomMessageHandlerInterface {
166
- defaultActionRequired?: boolean;
167
- isChecked?: boolean;
168
- playNext?: {
169
- remainingCountDownDuration: number;
170
- };
171
- error?: ErrorEvent;
172
- errorMessage?: {
173
- input: string;
174
- status: number;
175
- };
176
- }
177
- export declare enum CustomMessages {
178
- CLICK_CAST = "castButtonClick",
179
- CLICK_GO_BACK_TO_LIVE = "clickGoBackToLive",
180
- CLICK_WATCH_FROM_START = "clickWatchFromStart",
181
- DO_ERROR = "doError",
182
- ERROR_TRIGGERED = "errorTriggerd",
183
- JAVASCRIPT_READY = "javascriptReady",
184
- PLAY_NEXT_CANCEL_CLICK = "playNextCancelClick",
185
- PLAY_NEXT_COUNTDOWN_CANCELED = "playNextCountdownCanceled",
186
- PLAY_NEXT_COUNTDOWN_FINISHED = "playNextCountdownFinished",
187
- PLAY_NEXT_COUNTDOWN_PROGRESS = "playNextCountdownProgress",
188
- PLAY_NEXT_OVERLAY_HIDDEN = "playNextOverlayHidden",
189
- PLAY_NEXT_OVERLAY_HIDE = "playNextOverlayHide",
190
- PLAY_NEXT_OVERLAY_SHOW = "playNextOverlayShow",
191
- PLAY_NEXT_OVERLAY_SHOWN = "playNextOverlayShown",
192
- PLAY_NEXT_PROCEED_CLICK = "playNextProceedClick",
193
- SET_STREAM_LINK = "setStreamLink",
194
- SET_WEB_DATA = "setWebData",
195
- TOGGLE_AIRPLAY = "toggleAirplay",
196
- TOGGLE_FULLSCREEN = "toggleFullScreen",
197
- TOGGLE_FULLSCREEN_UI = "toggleFullscreenUI",
198
- TOGGLE_MUTE = "toggleMute",
199
- TOGGLE_PIP = "togglePiP",
200
- TOGGLE_PLAY_PAUSE = "togglePlayPause",
201
- TOGGLE_SETTINGS_PANEL = "toggleSettingsPanel"
171
+ infoPanel?: Container<ContainerConfig>;
172
+ infoPanelToggleButtons?: ToggleButton<ToggleButtonConfig>[];
202
173
  }
203
174
  export declare enum NpoPlayerUIVariants {
204
175
  DEFAULT = "default",
@@ -242,3 +213,28 @@ export interface LogEventParams {
242
213
  event: string;
243
214
  data?: any;
244
215
  }
216
+ export interface LogErrorContext {
217
+ programAvailableFrom?: string;
218
+ programAvailableUntil?: string;
219
+ }
220
+ export interface LogErrorParams {
221
+ playerContext: PlayerContext;
222
+ status: number;
223
+ body?: string;
224
+ context?: LogErrorContext;
225
+ }
226
+ export interface CreateButtonConfig {
227
+ text: string;
228
+ onClick: () => void;
229
+ ariaLabel?: string;
230
+ cssClass?: string;
231
+ hidden?: boolean;
232
+ acceptsTouchWithUiHidden?: boolean;
233
+ }
234
+ export interface Chapter {
235
+ description: string;
236
+ from: number;
237
+ until: number;
238
+ title: string;
239
+ type: string;
240
+ }
@@ -1,30 +1,3 @@
1
- export var CustomMessages;
2
- (function (CustomMessages) {
3
- CustomMessages["CLICK_CAST"] = "castButtonClick";
4
- CustomMessages["CLICK_GO_BACK_TO_LIVE"] = "clickGoBackToLive";
5
- CustomMessages["CLICK_WATCH_FROM_START"] = "clickWatchFromStart";
6
- CustomMessages["DO_ERROR"] = "doError";
7
- CustomMessages["ERROR_TRIGGERED"] = "errorTriggerd";
8
- CustomMessages["JAVASCRIPT_READY"] = "javascriptReady";
9
- CustomMessages["PLAY_NEXT_CANCEL_CLICK"] = "playNextCancelClick";
10
- CustomMessages["PLAY_NEXT_COUNTDOWN_CANCELED"] = "playNextCountdownCanceled";
11
- CustomMessages["PLAY_NEXT_COUNTDOWN_FINISHED"] = "playNextCountdownFinished";
12
- CustomMessages["PLAY_NEXT_COUNTDOWN_PROGRESS"] = "playNextCountdownProgress";
13
- CustomMessages["PLAY_NEXT_OVERLAY_HIDDEN"] = "playNextOverlayHidden";
14
- CustomMessages["PLAY_NEXT_OVERLAY_HIDE"] = "playNextOverlayHide";
15
- CustomMessages["PLAY_NEXT_OVERLAY_SHOW"] = "playNextOverlayShow";
16
- CustomMessages["PLAY_NEXT_OVERLAY_SHOWN"] = "playNextOverlayShown";
17
- CustomMessages["PLAY_NEXT_PROCEED_CLICK"] = "playNextProceedClick";
18
- CustomMessages["SET_STREAM_LINK"] = "setStreamLink";
19
- CustomMessages["SET_WEB_DATA"] = "setWebData";
20
- CustomMessages["TOGGLE_AIRPLAY"] = "toggleAirplay";
21
- CustomMessages["TOGGLE_FULLSCREEN"] = "toggleFullScreen";
22
- CustomMessages["TOGGLE_FULLSCREEN_UI"] = "toggleFullscreenUI";
23
- CustomMessages["TOGGLE_MUTE"] = "toggleMute";
24
- CustomMessages["TOGGLE_PIP"] = "togglePiP";
25
- CustomMessages["TOGGLE_PLAY_PAUSE"] = "togglePlayPause";
26
- CustomMessages["TOGGLE_SETTINGS_PANEL"] = "toggleSettingsPanel";
27
- })(CustomMessages || (CustomMessages = {}));
28
1
  export var NpoPlayerUIVariants;
29
2
  (function (NpoPlayerUIVariants) {
30
3
  NpoPlayerUIVariants["DEFAULT"] = "default";
@@ -1,7 +1,4 @@
1
1
  import { Button } from 'bitmovin-player-ui';
2
- import type NpoPlayer from '../../npoplayer';
3
- export declare function createAdButton(npoPlayer: NpoPlayer): Button<{
4
- cssClass: string;
5
- text: string;
6
- hidden: true;
7
- }>;
2
+ import { ButtonConfig } from 'bitmovin-player-ui/dist/js/framework/components/button';
3
+ import { PlayerContext } from '../../types/interfaces';
4
+ export declare function createAdButton(playerContext: PlayerContext): Button<ButtonConfig>;
@@ -1,5 +1,6 @@
1
1
  import { Button } from 'bitmovin-player-ui';
2
- export function createAdButton(npoPlayer) {
2
+ export function createAdButton(playerContext) {
3
+ const { npoPlayer } = playerContext;
3
4
  npoPlayer.uiComponents.adbutton = undefined;
4
5
  const adButton = new Button({
5
6
  cssClass: 'ui-textbutton ui-sterbutton bmpui-ui-button',
@@ -1,7 +1,4 @@
1
1
  import { Label } from 'bitmovin-player-ui';
2
- import type NpoPlayer from '../../npoplayer';
3
- export declare function createAdLabel(npoPlayer: NpoPlayer): Label<{
4
- text: string;
5
- cssClass: string;
6
- hidden: true;
7
- }>;
2
+ import { LabelConfig } from 'bitmovin-player-ui/dist/js/framework/components/label';
3
+ import { PlayerContext } from '../../types/interfaces';
4
+ export declare function createAdLabel(playerContext: PlayerContext): Label<LabelConfig>;
@@ -1,5 +1,6 @@
1
1
  import { Label } from 'bitmovin-player-ui';
2
- export function createAdLabel(npoPlayer) {
2
+ export function createAdLabel(playerContext) {
3
+ const { npoPlayer } = playerContext;
3
4
  npoPlayer.uiComponents.adlabel = undefined;
4
5
  const adLabel = new Label({ text: '', cssClass: 'adLabel', hidden: true });
5
6
  npoPlayer.uiComponents.adlabel = adLabel;
@@ -1,3 +1,3 @@
1
1
  import { ControlBar } from 'bitmovin-player-ui';
2
- import type NpoPlayer from '../../../npoplayer';
3
- export declare function createAudioControlBar(npoPlayer: NpoPlayer): ControlBar;
2
+ import { PlayerContext } from '../../../types/interfaces';
3
+ export declare function createAudioControlBar(playerContext: PlayerContext): ControlBar;
@@ -1,12 +1,12 @@
1
- import { ControlBar, Container, SeekBar, SeekBarLabel, VolumeControlButton } from 'bitmovin-player-ui';
1
+ import { ControlBar, Container, VolumeControlButton } from 'bitmovin-player-ui';
2
2
  import { createSeekBar } from '../seekbar';
3
- import { NpoPlayerUIVariants } from '../../../npoplayer';
4
- export function createAudioControlBar(npoPlayer) {
5
- const seekBar = new SeekBar({ label: new SeekBarLabel() });
6
- npoPlayer.uiComponents.seekBar = seekBar;
3
+ import { NpoPlayerUIVariants } from '../../../types/interfaces';
4
+ export function createAudioControlBar(playerContext) {
5
+ const { npoPlayer } = playerContext;
6
+ const seekBar = createSeekBar(playerContext, NpoPlayerUIVariants.AUDIO);
7
7
  const controlBar = new ControlBar({
8
8
  components: [
9
- createSeekBar(npoPlayer, NpoPlayerUIVariants.AUDIO),
9
+ seekBar,
10
10
  new Container({
11
11
  components: [
12
12
  new VolumeControlButton({
@@ -1,8 +1,10 @@
1
- import { type PlayerAPI } from 'bitmovin-player';
2
- import { Button, ControlBar, CastToggleButton } from 'bitmovin-player-ui';
3
- import type NpoPlayer from '../../npoplayer';
4
- import { PlayerContext } from '../../types/interfaces';
5
- import { NpoPlayerAPI } from '../../services/npoPlayerAPI/npoPlayerAPI';
1
+ import { Button, ControlBar, CastToggleButton, Container } from 'bitmovin-player-ui';
2
+ import { ContainerConfig } from 'bitmovin-player-ui/dist/js/framework/components/container';
3
+ import { PlayerContext, CreateButtonConfig } from '../../types/interfaces';
4
+ export declare function createButton(playerContext: PlayerContext, config: CreateButtonConfig): Button<{
5
+ cssClass: string;
6
+ ariaLabel: string;
7
+ }>;
6
8
  export declare function createMiddleButtons(playerContext: PlayerContext): ControlBar;
7
9
  export declare function createRewindButton(playerContext: PlayerContext): Button<{
8
10
  cssClass: string;
@@ -12,24 +14,29 @@ export declare function createForwardButton(playerContext: PlayerContext): Butto
12
14
  cssClass: string;
13
15
  ariaLabel: string;
14
16
  }>;
15
- export declare function createPlayNextButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
17
+ export declare function createPlayNextButton(playerContext: PlayerContext): Button<{
16
18
  cssClass: string;
17
19
  ariaLabel: string;
18
20
  }>;
19
- export declare function createCancelPlayNextButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
21
+ export declare function createCancelPlayNextButton(playerContext: PlayerContext): Button<{
20
22
  cssClass: string;
21
23
  ariaLabel: string;
22
24
  }>;
23
- export declare function createskipIntroButton(player: PlayerAPI): Button<{
25
+ export declare function createGoBackLiveButton(playerContext: PlayerContext): Button<{
24
26
  cssClass: string;
25
27
  ariaLabel: string;
26
28
  }>;
27
- export declare function createGoBackLiveButton(player: PlayerAPI): Button<{
29
+ export declare function createWatchFromStartButton(playerContext: PlayerContext): Button<{
28
30
  cssClass: string;
29
31
  ariaLabel: string;
30
32
  }>;
31
- export declare function createWatchFromStartButton(player: PlayerAPI, npoPlayer: NpoPlayer): Button<{
33
+ export declare function createSkipChapterButton(playerContext: PlayerContext): Button<{
32
34
  cssClass: string;
33
35
  ariaLabel: string;
34
36
  }>;
35
- export declare function createChromecastButton(player: NpoPlayerAPI, npoPlayer: NpoPlayer): CastToggleButton;
37
+ export declare function createChromecastButton(playerContext: PlayerContext): CastToggleButton;
38
+ export interface ButtonOverlayConfig {
39
+ buttons: CreateButtonConfig[];
40
+ cssClasses?: string[];
41
+ }
42
+ export declare function createButtonOverlay(playerContext: PlayerContext, config: ButtonOverlayConfig): Container<ContainerConfig>;
@@ -1,6 +1,19 @@
1
- import { Button, PlaybackToggleButton, ControlBar, CastToggleButton } from 'bitmovin-player-ui';
1
+ import { Button, PlaybackToggleButton, ControlBar, CastToggleButton, Container } from 'bitmovin-player-ui';
2
2
  import { rewind, forward } from '../handlers/timecontrolhandlers';
3
3
  import { NpoPlayerEvent } from '../../types/events';
4
+ export function createButton(playerContext, config) {
5
+ const button = new Button({
6
+ cssClass: config.cssClass || 'ui-textbutton bmpui-ui-button',
7
+ text: config.text,
8
+ ariaLabel: config.ariaLabel || config.text,
9
+ hidden: config.hidden ?? false,
10
+ acceptsTouchWithUiHidden: config.acceptsTouchWithUiHidden ?? true
11
+ });
12
+ button.onClick.subscribe(() => {
13
+ config.onClick();
14
+ });
15
+ return button;
16
+ }
4
17
  export function createMiddleButtons(playerContext) {
5
18
  const bigPlayToggleButton = new PlaybackToggleButton({
6
19
  cssClass: 'ui-playbacktogglebutton'
@@ -34,7 +47,8 @@ export function createForwardButton(playerContext) {
34
47
  });
35
48
  return forwardButton;
36
49
  }
37
- export function createPlayNextButton(player, npoPlayer) {
50
+ export function createPlayNextButton(playerContext) {
51
+ const { npoPlayer } = playerContext;
38
52
  const playNextButton = new Button({
39
53
  cssClass: 'ui-textbutton ui-playNextButton bmpui-ui-button',
40
54
  text: '<span class="bmpui-ui-textbutton-icon bmpui-ui-textbutton-icon-play"></span> Volgende aflevering',
@@ -43,13 +57,12 @@ export function createPlayNextButton(player, npoPlayer) {
43
57
  acceptsTouchWithUiHidden: true
44
58
  });
45
59
  playNextButton.onClick.subscribe(() => {
46
- if (player != undefined) {
47
- npoPlayer.doPlayNext();
48
- }
60
+ npoPlayer.doPlayNext();
49
61
  });
50
62
  return playNextButton;
51
63
  }
52
- export function createCancelPlayNextButton(player, npoPlayer) {
64
+ export function createCancelPlayNextButton(playerContext) {
65
+ const { npoPlayer } = playerContext;
53
66
  const cancelPlayNextButton = new Button({
54
67
  cssClass: 'ui-textbutton ui-cancelPlayNextButton bmpui-ui-button',
55
68
  text: 'Annuleer',
@@ -58,27 +71,12 @@ export function createCancelPlayNextButton(player, npoPlayer) {
58
71
  acceptsTouchWithUiHidden: true
59
72
  });
60
73
  cancelPlayNextButton.onClick.subscribe(() => {
61
- if (player != undefined) {
62
- npoPlayer.cancelPlayNextScreen();
63
- }
74
+ npoPlayer.cancelPlayNextScreen();
64
75
  });
65
76
  return cancelPlayNextButton;
66
77
  }
67
- export function createskipIntroButton(player) {
68
- const skipIntroButton = new Button({
69
- cssClass: 'ui-textbutton ui-skipintrobutton bmpui-ui-button bmpui-hidden',
70
- text: 'Intro overslaan',
71
- ariaLabel: 'Intro overslaan',
72
- hidden: true
73
- });
74
- skipIntroButton.onClick.subscribe(() => {
75
- if (player != undefined) {
76
- player.seek(96);
77
- }
78
- });
79
- return skipIntroButton;
80
- }
81
- export function createGoBackLiveButton(player) {
78
+ export function createGoBackLiveButton(playerContext) {
79
+ const { player } = playerContext;
82
80
  const goBackLiveButton = new Button({
83
81
  cssClass: 'ui-textbutton ui-backtolivebutton bmpui-ui-button',
84
82
  text: 'Terug naar live',
@@ -92,13 +90,14 @@ export function createGoBackLiveButton(player) {
92
90
  });
93
91
  return goBackLiveButton;
94
92
  }
95
- export function createWatchFromStartButton(player, npoPlayer) {
93
+ export function createWatchFromStartButton(playerContext) {
96
94
  const watchFromStartButton = new Button({
97
95
  cssClass: 'ui-textbutton ui-watchfromstartbutton bmpui-ui-button',
98
96
  text: 'Kijk vanaf het begin',
99
97
  ariaLabel: 'Kijk vanaf het begin',
100
98
  hidden: true
101
99
  });
100
+ const { player, npoPlayer } = playerContext;
102
101
  watchFromStartButton.onClick.subscribe(() => {
103
102
  if (player.isLive() ?? false)
104
103
  npoPlayer.watchFromStart();
@@ -108,7 +107,19 @@ export function createWatchFromStartButton(player, npoPlayer) {
108
107
  npoPlayer.uiComponents.watchFromStartButton = watchFromStartButton;
109
108
  return watchFromStartButton;
110
109
  }
111
- export function createChromecastButton(player, npoPlayer) {
110
+ export function createSkipChapterButton(playerContext) {
111
+ const skipChapterButton = new Button({
112
+ cssClass: 'ui-textbutton ui-skipchapterbutton bmpui-ui-button',
113
+ text: '',
114
+ ariaLabel: 'Overslaan',
115
+ hidden: true
116
+ });
117
+ const { npoPlayer } = playerContext;
118
+ npoPlayer.uiComponents.skipChapterButton = skipChapterButton;
119
+ return skipChapterButton;
120
+ }
121
+ export function createChromecastButton(playerContext) {
122
+ const { player, npoPlayer } = playerContext;
112
123
  const chromeCastButton = new CastToggleButton({
113
124
  disabled: true
114
125
  });
@@ -124,3 +135,10 @@ export function createChromecastButton(player, npoPlayer) {
124
135
  player?.on(NpoPlayerEvent.CastAvailable, handleCastAvailable);
125
136
  return chromeCastButton;
126
137
  }
138
+ export function createButtonOverlay(playerContext, config) {
139
+ const buttons = config.buttons.map((buttonConfig) => createButton(playerContext, buttonConfig));
140
+ return new Container({
141
+ components: buttons,
142
+ cssClasses: config.cssClasses || ['overlay-generic']
143
+ });
144
+ }
@@ -1,12 +1,12 @@
1
- import { ControlBar, Container, SeekBar, SeekBarLabel, PlaybackToggleButton, VolumeToggleButton, VolumeSlider, Spacer, PictureInPictureToggleButton, AirPlayToggleButton, SettingsToggleButton, FullscreenToggleButton } from 'bitmovin-player-ui';
1
+ import { ControlBar, Container, PlaybackToggleButton, VolumeToggleButton, VolumeSlider, Spacer, PictureInPictureToggleButton, AirPlayToggleButton, SettingsToggleButton, FullscreenToggleButton } from 'bitmovin-player-ui';
2
2
  import { createChromecastButton, createForwardButton, createRewindButton } from './buttons';
3
3
  import { createSeekBar } from './seekbar';
4
4
  import { createSettingsPanel } from './settingspanel';
5
5
  import { NpoPlayerUIVariants } from '../../types/interfaces';
6
+ import { localizeKey } from '../../js/utilities/utilities.locale';
7
+ import { createInfoPanelToggleButton } from './infopanel/togglebutton';
6
8
  export function createControlBar(playerContext, variant) {
7
- const { npoPlayer, player } = playerContext;
8
- const seekBar = new SeekBar({ label: new SeekBarLabel() });
9
- npoPlayer.uiComponents.seekBar = seekBar;
9
+ const { npoPlayer } = playerContext;
10
10
  const controlComponents = [];
11
11
  controlComponents.push(new PlaybackToggleButton(), new VolumeToggleButton(), new VolumeSlider());
12
12
  if (variant === NpoPlayerUIVariants.DEFAULT) {
@@ -14,22 +14,26 @@ export function createControlBar(playerContext, variant) {
14
14
  const forwardButton = createForwardButton(playerContext);
15
15
  controlComponents.push(rewindButton, forwardButton);
16
16
  }
17
- const chromeCastButton = createChromecastButton(player, npoPlayer);
17
+ const chromeCastButton = createChromecastButton(playerContext);
18
18
  controlComponents.push(new Spacer(), new PictureInPictureToggleButton(), new AirPlayToggleButton(), chromeCastButton);
19
19
  if (variant === NpoPlayerUIVariants.DEFAULT) {
20
- const settingsPanel = createSettingsPanel(npoPlayer);
21
- controlComponents.push(new SettingsToggleButton({ settingsPanel }), settingsPanel);
20
+ const infoPanelToggleButton = createInfoPanelToggleButton(playerContext);
21
+ const settingsPanel = createSettingsPanel(playerContext);
22
+ const settingsToggleButton = new SettingsToggleButton({ settingsPanel, role: 'button' });
23
+ settingsToggleButton.getDomElement().attr('aria-haspopup', 'true');
24
+ controlComponents.push(infoPanelToggleButton, settingsToggleButton, settingsPanel);
22
25
  }
23
26
  controlComponents.push(new FullscreenToggleButton());
24
27
  const controlBar = new ControlBar({
25
28
  components: [
26
- createSeekBar(npoPlayer, variant),
29
+ createSeekBar(playerContext, variant),
27
30
  new Container({
28
31
  components: [...controlComponents],
29
32
  cssClasses: ['controlbar-bottom']
30
33
  })
31
34
  ],
32
- cssClasses: ['ui-controlbar-bottom']
35
+ cssClasses: ['ui-controlbar-bottom'],
36
+ ariaLabel: localizeKey('controlBar.bottom')
33
37
  });
34
38
  npoPlayer.uiComponents.controlBar = controlBar;
35
39
  return controlBar;
@@ -1,10 +1,4 @@
1
- import { Button, Container, Label } from 'bitmovin-player-ui';
2
- import type NpoPlayer from '../../npoplayer';
3
- import { type PlayerAPI } from 'bitmovin-player';
4
- import { ButtonConfig } from 'bitmovin-player-ui/dist/js/framework/components/button';
5
- import { LabelConfig } from 'bitmovin-player-ui/dist/js/framework/components/label';
6
- import { NpoPlayerUIVariants } from '../../types/interfaces';
7
- export declare function createCTABar(player: PlayerAPI, npoPlayer: NpoPlayer, variant: NpoPlayerUIVariants): Container<{
8
- components: (Button<ButtonConfig> | Label<LabelConfig>)[];
9
- cssClasses: string[];
10
- }>;
1
+ import { Container } from 'bitmovin-player-ui';
2
+ import { ContainerConfig } from 'bitmovin-player-ui/dist/js/framework/components/container';
3
+ import { NpoPlayerUIVariants, PlayerContext } from '../../types/interfaces';
4
+ export declare function createCTABar(playerContext: PlayerContext, variant: NpoPlayerUIVariants): Container<ContainerConfig>;