@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,18 +1,19 @@
1
1
  import { Container } from 'bitmovin-player-ui';
2
- import { createGoBackLiveButton, createWatchFromStartButton } from './buttons';
2
+ import { createGoBackLiveButton, createWatchFromStartButton, createSkipChapterButton } from './buttons';
3
3
  import { createAdButton } from './adbutton';
4
4
  import { createAdLabel } from './adlabel';
5
5
  import { NpoPlayerUIVariants } from '../../types/interfaces';
6
- export function createCTABar(player, npoPlayer, variant) {
6
+ export function createCTABar(playerContext, variant) {
7
7
  const barComponents = [];
8
8
  if (variant === NpoPlayerUIVariants.DEFAULT) {
9
- const goBackLiveButton = createGoBackLiveButton(player);
10
- const watchFromStartButton = createWatchFromStartButton(player, npoPlayer);
11
- barComponents.push(watchFromStartButton, goBackLiveButton);
9
+ const goBackLiveButton = createGoBackLiveButton(playerContext);
10
+ const watchFromStartButton = createWatchFromStartButton(playerContext);
11
+ const skipChapterButton = createSkipChapterButton(playerContext);
12
+ barComponents.push(watchFromStartButton, goBackLiveButton, skipChapterButton);
12
13
  }
13
14
  if (variant === NpoPlayerUIVariants.AD) {
14
- const adLabel = createAdLabel(npoPlayer);
15
- const adButton = createAdButton(npoPlayer);
15
+ const adLabel = createAdLabel(playerContext);
16
+ const adButton = createAdButton(playerContext);
16
17
  barComponents.push(adLabel, adButton);
17
18
  adLabel.hide();
18
19
  }
@@ -0,0 +1,3 @@
1
+ import { Container, ContainerConfig } from 'bitmovin-player-ui';
2
+ import { PlayerContext } from '../../../types/interfaces';
3
+ export declare function createInfoPanel(playerContext: PlayerContext): Container<ContainerConfig>;
@@ -0,0 +1,40 @@
1
+ import { Container, Button } from 'bitmovin-player-ui';
2
+ export function createInfoPanel(playerContext) {
3
+ const { npoPlayer } = playerContext;
4
+ const infoPanel = new Container({
5
+ hidden: true,
6
+ cssClass: 'info-panel'
7
+ });
8
+ const infoToggleButtons = npoPlayer.uiComponents.infoPanelToggleButtons ?? [];
9
+ const settingsPanels = npoPlayer.uiComponents.settingsPanels ?? [];
10
+ infoPanel.onHide.subscribe(() => {
11
+ for (const button of infoToggleButtons) {
12
+ button.off();
13
+ }
14
+ });
15
+ infoPanel.onShow.subscribe(() => {
16
+ for (const panel of settingsPanels) {
17
+ panel.hide();
18
+ }
19
+ for (const button of infoToggleButtons) {
20
+ button.on();
21
+ }
22
+ });
23
+ const closeButton = new Button({
24
+ cssClass: 'info-panel-close-button'
25
+ });
26
+ closeButton.onClick.subscribe(() => {
27
+ infoPanel.hide();
28
+ });
29
+ infoPanel.addComponent(closeButton);
30
+ const contentContainer = new Container({
31
+ cssClass: 'info-panel-content'
32
+ });
33
+ infoPanel.addComponent(contentContainer);
34
+ const uiComponents = npoPlayer.uiComponents;
35
+ uiComponents.infoPanel = infoPanel;
36
+ infoPanel.setHtmlContent = (html) => {
37
+ contentContainer.getDomElement().html(html);
38
+ };
39
+ return infoPanel;
40
+ }
@@ -0,0 +1,3 @@
1
+ import { ToggleButton, ToggleButtonConfig } from 'bitmovin-player-ui';
2
+ import { PlayerContext } from 'types/interfaces';
3
+ export declare function createInfoPanelToggleButton(playerContext: PlayerContext): ToggleButton<ToggleButtonConfig>;
@@ -0,0 +1,18 @@
1
+ import { ToggleButton } from 'bitmovin-player-ui';
2
+ export function createInfoPanelToggleButton(playerContext) {
3
+ const { npoPlayer } = playerContext;
4
+ const uiComponents = npoPlayer.uiComponents;
5
+ const toggleButton = new ToggleButton({
6
+ cssClass: 'info-panel-toggle-button',
7
+ hidden: true
8
+ });
9
+ toggleButton.onClick.subscribe(() => {
10
+ const infoPanel = uiComponents.infoPanel;
11
+ infoPanel?.toggleHidden();
12
+ });
13
+ toggleButton.getDomElement().attr('aria-haspopup', 'true');
14
+ uiComponents.infoPanelToggleButtons = uiComponents.infoPanelToggleButtons
15
+ ? [...uiComponents.infoPanelToggleButtons, toggleButton]
16
+ : [toggleButton];
17
+ return toggleButton;
18
+ }
@@ -1,10 +1,4 @@
1
1
  import { Container } from 'bitmovin-player-ui';
2
- import { type PlayerAPI } from 'bitmovin-player';
3
- import type NpoPlayer from '../../npoplayer';
4
- export declare function createPlayNextScreen(player: PlayerAPI, npoPlayer: NpoPlayer): Container<{
5
- components: import("bitmovin-player-ui").Button<{
6
- cssClass: string;
7
- ariaLabel: string;
8
- }>[];
9
- cssClasses: string[];
10
- }>;
2
+ import { ContainerConfig } from 'bitmovin-player-ui/dist/js/framework/components/container';
3
+ import { PlayerContext } from '../../types/interfaces';
4
+ export declare function createPlayNextScreen(playerContext: PlayerContext): Container<ContainerConfig>;
@@ -1,8 +1,8 @@
1
1
  import { Container } from 'bitmovin-player-ui';
2
2
  import { createPlayNextButton, createCancelPlayNextButton } from './buttons';
3
- export function createPlayNextScreen(player, npoPlayer) {
4
- const playNextButton = createPlayNextButton(player, npoPlayer);
5
- const cancelButton = createCancelPlayNextButton(player, npoPlayer);
3
+ export function createPlayNextScreen(playerContext) {
4
+ const playNextButton = createPlayNextButton(playerContext);
5
+ const cancelButton = createCancelPlayNextButton(playerContext);
6
6
  return new Container({
7
7
  components: [cancelButton, playNextButton],
8
8
  cssClasses: ['overlay-playnext']
@@ -1,7 +1,6 @@
1
1
  import { Container, PlaybackTimeLabel, SeekBar } from 'bitmovin-player-ui';
2
- import type NpoPlayer from '../../npoplayer';
3
- import { NpoPlayerUIVariants } from '../../npoplayer';
4
- export declare function createSeekBar(npoPlayer: NpoPlayer, variant: NpoPlayerUIVariants): Container<{
2
+ import { NpoPlayerUIVariants, PlayerContext } from '../../types/interfaces';
3
+ export declare function createSeekBar(playerContext: PlayerContext, variant: NpoPlayerUIVariants): Container<{
5
4
  components: (SeekBar | PlaybackTimeLabel)[];
6
5
  cssClasses: string[];
7
6
  }>;
@@ -1,7 +1,11 @@
1
1
  import { Container, PlaybackTimeLabel, PlaybackTimeLabelMode, SeekBar, SeekBarLabel } from 'bitmovin-player-ui';
2
- import { NpoPlayerUIVariants } from '../../npoplayer';
3
- export function createSeekBar(npoPlayer, variant) {
4
- const seekBar = new SeekBar({ label: new SeekBarLabel() });
2
+ import { NpoPlayerUIVariants } from '../../types/interfaces';
3
+ export function createSeekBar(playerContext, variant) {
4
+ const { npoPlayer } = playerContext;
5
+ const seekBar = new SeekBar({
6
+ label: new SeekBarLabel(),
7
+ addCurrentTimeToAriaLabel: true
8
+ });
5
9
  npoPlayer.uiComponents.seekBar = seekBar;
6
10
  const isAdUi = variant === NpoPlayerUIVariants.AD;
7
11
  return new Container({
@@ -1,4 +1,3 @@
1
1
  import { SettingsPanel } from 'bitmovin-player-ui';
2
- import type NpoPlayer from '../../npoplayer';
3
- import { PlayerAPI } from 'bitmovin-player';
4
- export declare function createSettingsPanel(npoPlayer: NpoPlayer | PlayerAPI): SettingsPanel;
2
+ import { PlayerContext } from '../../types/interfaces';
3
+ export declare function createSettingsPanel(playerContext: PlayerContext): SettingsPanel;
@@ -1,23 +1,23 @@
1
1
  import { SubtitleListBox, ListBox, SettingsPanel, SettingsPanelPage, SettingsPanelPageOpenButton, SettingsPanelPageBackButton, SettingsToggleButton, Button, Label, SettingsPanelItem, AudioQualitySelectBox, AudioTrackSelectBox } from 'bitmovin-player-ui';
2
2
  import { localizeKey } from '../../js/utilities/utilities.locale';
3
3
  import { handleSubtitleListBoxItemSelected, handleSpeedListBoxItemSelected, handleQualityListBoxItemSelected } from '../handlers/listboxhandlers';
4
- import { PlayerEvent } from 'bitmovin-player';
4
+ import { NpoPlayerEvent } from '../../types/events';
5
5
  const createListBox = (items) => new ListBox({ items });
6
- const createPanelPage = (components, cssClasses) => new SettingsPanelPage({ components, cssClasses });
7
- const createSettingsPanelPageBackButton = (targetPage, container, text, cssClasses) => new SettingsPanelPageBackButton({
6
+ const createPanelPage = (components, cssClasses) => new SettingsPanelPage({ components, cssClasses, role: 'group' });
7
+ const createSettingsPanelPageBackButton = ({ targetPage, container, text, cssClasses }) => new SettingsPanelPageBackButton({
8
8
  targetPage,
9
9
  container,
10
10
  text,
11
11
  cssClasses
12
12
  });
13
- const createSettingsOpenButton = (targetPage, container, text, cssClasses) => new SettingsPanelPageOpenButton({
13
+ const createSettingsOpenButton = ({ targetPage, container, text, cssClasses }) => new SettingsPanelPageOpenButton({
14
14
  targetPage,
15
15
  container,
16
16
  text,
17
17
  cssClasses
18
18
  });
19
- export function createSettingsPanel(npoPlayer) {
20
- const player = 'player' in npoPlayer ? npoPlayer.player : npoPlayer;
19
+ export function createSettingsPanel(playerContext) {
20
+ const { npoPlayer, player } = playerContext;
21
21
  const subtitleListBox = new SubtitleListBox();
22
22
  const speedListBox = createListBox([
23
23
  { key: '0.25', label: '0.25x' },
@@ -39,15 +39,19 @@ export function createSettingsPanel(npoPlayer) {
39
39
  const settingsBackButtonClass = 'settings-back-button';
40
40
  const listboxPanelClass = 'listbox-panel';
41
41
  const listboxPagerButtonClass = 'listbox-pager-button';
42
- const subtitlePanelPage = createPanelPage([new Button({ cssClass: settingTriggerClass }), new SettingsPanelItem('', subtitleListBox)], [listboxPanelClass]);
43
- const speedPanelPage = createPanelPage([new Button({ cssClass: settingTriggerClass }), new SettingsPanelItem('', speedListBox)], [listboxPanelClass]);
44
- const qualityPanelPage = createPanelPage([new Button({ cssClass: settingTriggerClass }), new SettingsPanelItem('', qualityListBox)], [listboxPanelClass]);
42
+ const settingsPanelItemConfig = { role: 'group' };
43
+ const subtitlePanelPage = createPanelPage([
44
+ new Button({ cssClass: settingTriggerClass }),
45
+ new SettingsPanelItem('', subtitleListBox, settingsPanelItemConfig)
46
+ ], [listboxPanelClass]);
47
+ const speedPanelPage = createPanelPage([new Button({ cssClass: settingTriggerClass }), new SettingsPanelItem('', speedListBox, settingsPanelItemConfig)], [listboxPanelClass]);
48
+ const qualityPanelPage = createPanelPage([new Button({ cssClass: settingTriggerClass }), new SettingsPanelItem('', qualityListBox, settingsPanelItemConfig)], [listboxPanelClass]);
45
49
  const settingsTriggerButton = new Button({ cssClass: settingTriggerClass });
46
50
  const mainSettingsPage = createPanelPage([
47
51
  settingsTriggerButton,
48
52
  new Label({ text: settingsLabel, cssClass: 'setting-header' }),
49
- new SettingsPanelItem(audioqualityLabel, new AudioQualitySelectBox()),
50
- new SettingsPanelItem(audiotrackLabel, new AudioTrackSelectBox())
53
+ new SettingsPanelItem(audioqualityLabel, new AudioQualitySelectBox(), settingsPanelItemConfig),
54
+ new SettingsPanelItem(audiotrackLabel, new AudioTrackSelectBox(), settingsPanelItemConfig)
51
55
  ], ['main-panel']);
52
56
  const settingsPanel = new SettingsPanel({
53
57
  components: [mainSettingsPage, subtitlePanelPage, speedPanelPage, qualityPanelPage],
@@ -55,79 +59,101 @@ export function createSettingsPanel(npoPlayer) {
55
59
  pageTransitionAnimation: false,
56
60
  hideDelay: -1
57
61
  });
58
- const subtitleSettingsOpenButton = createSettingsOpenButton(subtitlePanelPage, settingsPanel, offLabel, [
59
- listboxPagerButtonClass
60
- ]);
61
- const speedSettingsOpenButton = createSettingsOpenButton(speedPanelPage, settingsPanel, '1x', [
62
- listboxPagerButtonClass
63
- ]);
64
- const qualitySettingsOpenButton = createSettingsOpenButton(qualityPanelPage, settingsPanel, autoLabel, [
65
- listboxPagerButtonClass
66
- ]);
67
- const subtitlesPanelItem = new SettingsPanelItem(subtitlesLabel, subtitleSettingsOpenButton, { hidden: false });
68
- const speedPanelItem = new SettingsPanelItem(speedLabel, speedSettingsOpenButton);
69
- const qualityPanelItem = new SettingsPanelItem(videoqualityLabel, qualitySettingsOpenButton, { hidden: false });
70
- for (const item of [
71
- subtitlesPanelItem,
72
- speedPanelItem,
73
- qualityPanelItem,
74
- new SettingsToggleButton({ settingsPanel })
75
- ])
62
+ const subtitleSettingsOpenButton = createSettingsOpenButton({
63
+ targetPage: subtitlePanelPage,
64
+ container: settingsPanel,
65
+ text: offLabel,
66
+ cssClasses: [listboxPagerButtonClass]
67
+ });
68
+ const speedSettingsOpenButton = createSettingsOpenButton({
69
+ targetPage: speedPanelPage,
70
+ container: settingsPanel,
71
+ text: '1x',
72
+ cssClasses: [listboxPagerButtonClass]
73
+ });
74
+ const qualitySettingsOpenButton = createSettingsOpenButton({
75
+ targetPage: qualityPanelPage,
76
+ container: settingsPanel,
77
+ text: autoLabel,
78
+ cssClasses: [listboxPagerButtonClass]
79
+ });
80
+ const subtitlesPanelItem = new SettingsPanelItem(subtitlesLabel, subtitleSettingsOpenButton, {
81
+ ...settingsPanelItemConfig,
82
+ hidden: false
83
+ });
84
+ const speedPanelItem = new SettingsPanelItem(speedLabel, speedSettingsOpenButton, {
85
+ ...settingsPanelItemConfig,
86
+ hidden: false
87
+ });
88
+ const qualityPanelItem = new SettingsPanelItem(videoqualityLabel, qualitySettingsOpenButton, {
89
+ ...settingsPanelItemConfig,
90
+ hidden: false
91
+ });
92
+ const settingsToggleButton = new SettingsToggleButton({ settingsPanel, role: 'button' });
93
+ settingsToggleButton.getDomElement().attr('aria-haspopup', 'true');
94
+ for (const item of [subtitlesPanelItem, speedPanelItem, qualityPanelItem, settingsToggleButton])
76
95
  mainSettingsPage.addComponent(item);
77
96
  for (const [index, panelPage] of [subtitlePanelPage, speedPanelPage, qualityPanelPage].entries()) {
78
97
  const labels = [subtitlesLabel, speedLabel, videoqualityLabel];
79
- panelPage.addComponent(createSettingsPanelPageBackButton(mainSettingsPage, settingsPanel, labels[index], [
80
- settingsBackButtonClass
81
- ]));
98
+ panelPage.addComponent(createSettingsPanelPageBackButton({
99
+ targetPage: mainSettingsPage,
100
+ container: settingsPanel,
101
+ text: labels[index],
102
+ cssClasses: [settingsBackButtonClass]
103
+ }));
82
104
  }
83
- if ('uiComponents' in npoPlayer) {
84
- npoPlayer.uiComponents.subtitlesButton = subtitlesPanelItem;
85
- npoPlayer.uiComponents.qualityButton = qualityPanelItem;
86
- }
87
- subtitleListBox.onItemSelected.subscribe(handleSubtitleListBoxItemSelected(subtitleSettingsOpenButton, settingsPanel, mainSettingsPage));
105
+ npoPlayer.uiComponents.subtitlesButton = subtitlesPanelItem;
106
+ npoPlayer.uiComponents.qualityButton = qualityPanelItem;
107
+ subtitleListBox.onItemSelected.subscribe(handleSubtitleListBoxItemSelected({ subtitleSettingsOpenButton, settingsPanel, mainSettingsPage }));
88
108
  if (player) {
89
109
  speedListBox.selectItem('1');
90
- speedListBox.onItemSelected.subscribe(handleSpeedListBoxItemSelected(player, speedSettingsOpenButton, settingsPanel, mainSettingsPage));
110
+ speedListBox.onItemSelected.subscribe(handleSpeedListBoxItemSelected({ playerContext, speedSettingsOpenButton, settingsPanel, mainSettingsPage }));
91
111
  qualityListBox.selectItem('auto');
92
- qualityListBox.onItemSelected.subscribe(handleQualityListBoxItemSelected(player, qualitySettingsOpenButton, settingsPanel, mainSettingsPage));
93
- }
94
- if (npoPlayer.uiComponents) {
95
- const uiComponents = npoPlayer.uiComponents;
96
- uiComponents.settingsPanels = uiComponents.settingsPanels
97
- ? [...uiComponents.settingsPanels, settingsPanel]
98
- : [settingsPanel];
112
+ qualityListBox.onItemSelected.subscribe(handleQualityListBoxItemSelected({ playerContext, qualitySettingsOpenButton, settingsPanel, mainSettingsPage }));
99
113
  }
114
+ const uiComponents = npoPlayer.uiComponents;
115
+ uiComponents.settingsPanels = uiComponents.settingsPanels
116
+ ? [...uiComponents.settingsPanels, settingsPanel]
117
+ : [settingsPanel];
100
118
  const checkSubtitles = () => {
101
- const subtitles = player?.subtitles?.list();
119
+ const subtitles = player.listSubtitles();
102
120
  subtitlesPanelItem.hide();
103
121
  if (subtitles?.length) {
104
122
  subtitlesPanelItem.show();
105
123
  }
106
124
  };
107
125
  const checkQualities = () => {
108
- const availableVideoQualities = player?.getAvailableVideoQualities() || [];
126
+ const availableVideoQualities = player.getAvailableVideoQualities() || [];
109
127
  qualityListBox.clearItems();
110
128
  qualityPanelItem.hide();
111
129
  if (availableVideoQualities?.length) {
112
- for (const quality of availableVideoQualities)
113
- qualityListBox.addItem(quality.id, quality.label ?? 'test');
130
+ for (const quality of availableVideoQualities) {
131
+ const label = quality.label === 'unknown' ? `${quality.height}p` : quality.label;
132
+ qualityListBox.addItem(quality.id, label ?? 'unknown');
133
+ }
114
134
  qualityListBox.addItem('auto', autoLabel);
115
135
  qualityListBox.selectItem('auto');
116
136
  qualityPanelItem.show();
117
137
  }
118
138
  };
119
139
  settingsPanel.onHide.subscribe(() => {
120
- player?.getContainer().querySelector('.bmpui-npo-player')?.classList.remove('bmpui-settings-panel-shown');
140
+ player.removeClassFromNpoPlayerElement('bmpui-settings-panel-shown');
121
141
  });
122
142
  settingsPanel.onShow.subscribe(() => {
123
- player?.getContainer().querySelector('.bmpui-npo-player')?.classList.add('bmpui-settings-panel-shown');
143
+ player.addClassToNpoPlayerElement('bmpui-settings-panel-shown');
144
+ const infoPanel = npoPlayer.uiComponents.infoPanel;
145
+ const infoToggleButtons = npoPlayer.uiComponents.infoPanelToggleButtons ?? [];
146
+ infoPanel?.hide();
147
+ for (const button of infoToggleButtons) {
148
+ button.off();
149
+ }
124
150
  });
125
151
  const checkQualitiesAndSubtitles = () => {
126
152
  checkQualities();
127
153
  checkSubtitles();
128
154
  };
129
- player?.off(PlayerEvent.SourceLoaded, checkQualitiesAndSubtitles);
130
- player?.on(PlayerEvent.SourceLoaded, checkQualitiesAndSubtitles);
155
+ player?.off(NpoPlayerEvent.SourceLoaded, checkQualitiesAndSubtitles);
156
+ player?.on(NpoPlayerEvent.SourceLoaded, checkQualitiesAndSubtitles);
131
157
  checkQualitiesAndSubtitles();
132
158
  return settingsPanel;
133
159
  }
@@ -1,3 +1,3 @@
1
1
  import { TitleBar } from 'bitmovin-player-ui';
2
- import type NpoPlayer from '../../npoplayer';
3
- export declare function createTitleBar(npoPlayer: NpoPlayer): TitleBar;
2
+ import { PlayerContext } from '../../types/interfaces';
3
+ export declare function createTitleBar(playerContext: PlayerContext): TitleBar;
@@ -1,5 +1,6 @@
1
1
  import { Label, TitleBar } from 'bitmovin-player-ui';
2
- export function createTitleBar(npoPlayer) {
2
+ export function createTitleBar(playerContext) {
3
+ const { npoPlayer } = playerContext;
3
4
  const nicam = new Label({ text: '', cssClass: 'nicam' });
4
5
  const titleBar = new TitleBar({ cssClasses: ['metadata'] });
5
6
  titleBar.addComponent(nicam);
@@ -1,10 +1,12 @@
1
1
  import { Container, TitleBar, PictureInPictureToggleButton, AirPlayToggleButton, SettingsToggleButton, FullscreenToggleButton, VolumeControlButton } from 'bitmovin-player-ui';
2
2
  import { createSettingsPanel } from './settingspanel';
3
3
  import { createChromecastButton } from './buttons';
4
+ import { createInfoPanelToggleButton } from './infopanel/togglebutton';
4
5
  export function createTopBar(playerContext) {
5
- const { npoPlayer, player } = playerContext;
6
- const settingsPanel = createSettingsPanel(npoPlayer);
7
- const chromeCastButton = createChromecastButton(player, npoPlayer);
6
+ const settingsPanel = createSettingsPanel(playerContext);
7
+ const chromeCastButton = createChromecastButton(playerContext);
8
+ const settingsToggleButton = new SettingsToggleButton({ settingsPanel, role: 'button' });
9
+ settingsToggleButton.getDomElement().attr('aria-haspopup', 'true');
8
10
  return new TitleBar({
9
11
  components: [
10
12
  new Container({
@@ -12,12 +14,13 @@ export function createTopBar(playerContext) {
12
14
  new PictureInPictureToggleButton(),
13
15
  new AirPlayToggleButton(),
14
16
  chromeCastButton,
15
- new SettingsToggleButton({ settingsPanel }),
17
+ settingsToggleButton,
16
18
  settingsPanel,
17
19
  new VolumeControlButton({
18
20
  vertical: true
19
21
  }),
20
- new FullscreenToggleButton()
22
+ new FullscreenToggleButton(),
23
+ createInfoPanelToggleButton(playerContext)
21
24
  ],
22
25
  cssClasses: ['controlbar-top', 'controlbar-small']
23
26
  })
@@ -6,7 +6,10 @@ export function createVerticalVideoControlBar(playerContext, settingsPanel) {
6
6
  const { npoPlayer } = playerContext;
7
7
  const rewindButton = createRewindButton(playerContext);
8
8
  const forwardButton = createForwardButton(playerContext);
9
- const seekBar = new SeekBar({ label: new SeekBarLabel() });
9
+ const seekBar = new SeekBar({
10
+ label: new SeekBarLabel(),
11
+ addCurrentTimeToAriaLabel: true
12
+ });
10
13
  npoPlayer.uiComponents.seekBar = seekBar;
11
14
  const settingsToggleButton = new SettingsToggleButton({
12
15
  settingsPanel: settingsPanel,
@@ -26,7 +29,7 @@ export function createVerticalVideoControlBar(playerContext, settingsPanel) {
26
29
  const controlBar = new ControlBar({
27
30
  components: [
28
31
  settingsToggleButton,
29
- createSeekBar(npoPlayer, NpoPlayerUIVariants.VERTICAL),
32
+ createSeekBar(playerContext, NpoPlayerUIVariants.VERTICAL),
30
33
  controlBarButtonsContainer
31
34
  ],
32
35
  cssClasses: ['ui-controlbar-bottom']
@@ -5,7 +5,8 @@ export function createVerticalVideoSettingsPanel() {
5
5
  });
6
6
  const mainSettingsPage = new SettingsPanelPage({
7
7
  components: [subtitleListBox],
8
- cssClasses: ['main-panel']
8
+ cssClasses: ['main-panel'],
9
+ role: 'group'
9
10
  });
10
11
  const settingsPanel = new SettingsPanel({
11
12
  components: [mainSettingsPage],
@@ -13,9 +14,12 @@ export function createVerticalVideoSettingsPanel() {
13
14
  pageTransitionAnimation: false,
14
15
  hideDelay: -1
15
16
  });
16
- mainSettingsPage.addComponent(new SettingsToggleButton({
17
- settingsPanel: settingsPanel,
18
- autoHideWhenNoActiveSettings: false
19
- }));
17
+ const settingsToggleButton = new SettingsToggleButton({
18
+ settingsPanel,
19
+ autoHideWhenNoActiveSettings: false,
20
+ role: 'button'
21
+ });
22
+ settingsToggleButton.getDomElement().attr('aria-haspopup', 'true');
23
+ mainSettingsPage.addComponent(settingsToggleButton);
20
24
  return settingsPanel;
21
25
  }
@@ -1,33 +1,22 @@
1
- export function addAccessibilityAttributes(container, metadata) {
2
- const label = 'aria-label';
1
+ const ariaLabel = 'aria-label';
2
+ function setVideoAriaLabels(container, title) {
3
3
  const videoEl = container.querySelector('video');
4
4
  const hugePlayBackToggleButton = container.querySelector('.bmpui-ui-hugeplaybacktogglebutton');
5
- videoEl?.setAttribute(label, metadata.title);
6
- hugePlayBackToggleButton?.setAttribute(label, metadata.title);
5
+ videoEl?.setAttribute(ariaLabel, title);
6
+ hugePlayBackToggleButton?.setAttribute(ariaLabel, title);
7
7
  const description = container.querySelector('.bmpui-label-metadata-description');
8
8
  if (description) {
9
9
  videoEl?.setAttribute('aria-describedby', description.id);
10
10
  hugePlayBackToggleButton?.setAttribute('aria-describedby', description.id);
11
11
  }
12
+ }
13
+ function setImageAriaLabels(container, title) {
12
14
  const imgRoles = container.querySelectorAll('[role="img"]');
13
15
  for (const imgRole of imgRoles) {
14
- imgRole.setAttribute(label, metadata.title);
15
- }
16
- const popupButtons = container.querySelectorAll('[role="pop-up button"]');
17
- for (const popupButton of popupButtons) {
18
- popupButton.setAttribute('role', 'button');
19
- popupButton.setAttribute('aria-haspopup', 'menu');
20
- }
21
- const menuItems = container.querySelectorAll('[role="menuitem"][aria-pressed]');
22
- for (const menuitem of menuItems) {
23
- menuitem.removeAttribute('aria-pressed');
24
- }
25
- const panelItems = container.querySelectorAll('.bmpui-ui-settings-panel-item[role="menuitem"]');
26
- for (const panelItem of panelItems) {
27
- panelItem.setAttribute('role', 'group');
28
- }
29
- const panelPages = container.querySelectorAll('.bmpui-ui-settings-panel-page.bmpui-listbox-panel[role="menu"]');
30
- for (const panelPage of panelPages) {
31
- panelPage.setAttribute('role', 'group');
16
+ imgRole.setAttribute(ariaLabel, title);
32
17
  }
33
18
  }
19
+ export function addAccessibilityAttributes(container, metadata) {
20
+ setVideoAriaLabels(container, metadata.title);
21
+ setImageAriaLabels(container, metadata.title);
22
+ }
@@ -3,7 +3,6 @@ import { JSDOM } from 'jsdom';
3
3
  describe('addAccessibilityAttributes', () => {
4
4
  let container;
5
5
  const mockMetadata = { title: 'Mocked Video Title', description: 'Mocked Description' };
6
- const label = 'aria-label';
7
6
  beforeEach(() => {
8
7
  const { window } = new JSDOM(`
9
8
  <div>
@@ -11,53 +10,45 @@ describe('addAccessibilityAttributes', () => {
11
10
  <div class="bmpui-ui-hugeplaybacktogglebutton"></div>
12
11
  <div class="bmpui-label-metadata-description" id="desc">Description</div>
13
12
  <div role="img"></div>
14
- <div role="pop-up button"></div>
15
- <div role="menuitem" aria-pressed="true"></div>
16
- <div class="bmpui-ui-settings-panel-item" role="menuitem"></div>
17
- <div class="bmpui-ui-settings-panel-page bmpui-listbox-panel" role="menu"></div>
18
13
  </div>
19
14
  `);
20
15
  container = window.document.body.firstChild;
21
16
  });
22
- function expectAttribute(selector, attribute, expectedValue) {
17
+ function expectAttributes({ selector, attributes }) {
23
18
  const element = container?.querySelector(selector);
24
- expect(element?.getAttribute(attribute)).toBe(expectedValue);
19
+ for (const [attribute, expectedValue] of Object.entries(attributes)) {
20
+ expect(element?.getAttribute(attribute)).toBe(expectedValue);
21
+ }
25
22
  }
26
23
  it('adds correct aria-labels', () => {
27
24
  if (!container)
28
25
  return;
29
26
  addAccessibilityAttributes(container, mockMetadata);
30
- expectAttribute('video', label, mockMetadata.title);
31
- expectAttribute('.bmpui-ui-hugeplaybacktogglebutton', label, mockMetadata.title);
32
- expectAttribute('[role="img"]', label, mockMetadata.title);
27
+ expectAttributes({
28
+ selector: 'video',
29
+ attributes: { 'aria-label': mockMetadata.title }
30
+ });
31
+ expectAttributes({
32
+ selector: '.bmpui-ui-hugeplaybacktogglebutton',
33
+ attributes: { 'aria-label': mockMetadata.title }
34
+ });
35
+ expectAttributes({
36
+ selector: '[role="img"]',
37
+ attributes: { 'aria-label': mockMetadata.title }
38
+ });
33
39
  });
34
40
  it('handles aria-describedby correctly', () => {
35
41
  if (!container)
36
42
  return;
37
43
  addAccessibilityAttributes(container, mockMetadata);
38
- const descriptionId = container.querySelector('.bmpui-label-metadata-description')?.id;
39
- expectAttribute('video', 'aria-describedby', descriptionId ? descriptionId : '');
40
- expectAttribute('.bmpui-ui-hugeplaybacktogglebutton', 'aria-describedby', descriptionId ? descriptionId : '');
41
- });
42
- it('correctly adjusts role and aria-haspopup attributes', () => {
43
- if (!container)
44
- return;
45
- addAccessibilityAttributes(container, mockMetadata);
46
- const popupButton = container.querySelector('[role="button"]');
47
- expect(popupButton).toBeTruthy();
48
- expect(popupButton?.getAttribute('aria-haspopup')).toBe('menu');
49
- });
50
- it('removes aria-pressed from menuitems', () => {
51
- if (!container)
52
- return;
53
- addAccessibilityAttributes(container, mockMetadata);
54
- expect(container.querySelector('[role="menuitem"][aria-pressed]')).toBeFalsy();
55
- });
56
- it('changes the role of menuitems and menus correctly', () => {
57
- if (!container)
58
- return;
59
- addAccessibilityAttributes(container, mockMetadata);
60
- expectAttribute('.bmpui-ui-settings-panel-item', 'role', 'group');
61
- expectAttribute('.bmpui-ui-settings-panel-page', 'role', 'group');
44
+ const descriptionId = container.querySelector('.bmpui-label-metadata-description')?.id || '';
45
+ expectAttributes({
46
+ selector: 'video',
47
+ attributes: { 'aria-describedby': descriptionId ?? '' }
48
+ });
49
+ expectAttributes({
50
+ selector: '.bmpui-ui-hugeplaybacktogglebutton',
51
+ attributes: { 'aria-describedby': descriptionId ?? '' }
52
+ });
62
53
  });
63
54
  });
@@ -1,3 +1,3 @@
1
- import { StreamObject } from 'types/interfaces';
2
- import { PlayerAPI } from 'bitmovin-player';
1
+ import { StreamObject } from '../../types/interfaces';
2
+ import { PlayerAPI } from 'bitmovin-player/modules/bitmovinplayer-core';
3
3
  export declare function handleLiveStreamNoDvr(player: PlayerAPI, streamObject: StreamObject): void;
@@ -1,5 +1,19 @@
1
- import { type PlayerAPI } from 'bitmovin-player';
2
1
  import { type SettingsPanel, type SettingsPanelPage, type SettingsPanelPageOpenButton } from 'bitmovin-player-ui';
3
- export declare function handleSubtitleListBoxItemSelected(subtitleSettingsOpenButton: SettingsPanelPageOpenButton, settingsPanel: SettingsPanel, mainSettingsPage: SettingsPanelPage): (e: any) => void;
4
- export declare function handleSpeedListBoxItemSelected(player: PlayerAPI, speedSettingsOpenButton: SettingsPanelPageOpenButton, settingsPanel: SettingsPanel, mainSettingsPage: SettingsPanelPage): (source: any, args: any) => void;
5
- export declare function handleQualityListBoxItemSelected(player: PlayerAPI, qualitySettingsOpenButton: SettingsPanelPageOpenButton, settingsPanel: SettingsPanel, mainSettingsPage: SettingsPanelPage): (source: any, args: any) => void;
2
+ import { PlayerContext } from 'types/interfaces';
3
+ export declare function handleSubtitleListBoxItemSelected({ subtitleSettingsOpenButton, settingsPanel, mainSettingsPage }: {
4
+ subtitleSettingsOpenButton: SettingsPanelPageOpenButton;
5
+ settingsPanel: SettingsPanel;
6
+ mainSettingsPage: SettingsPanelPage;
7
+ }): (e: any) => void;
8
+ export declare function handleSpeedListBoxItemSelected({ playerContext, speedSettingsOpenButton, settingsPanel, mainSettingsPage }: {
9
+ playerContext: PlayerContext;
10
+ speedSettingsOpenButton: SettingsPanelPageOpenButton;
11
+ settingsPanel: SettingsPanel;
12
+ mainSettingsPage: SettingsPanelPage;
13
+ }): (source: any, args: any) => void;
14
+ export declare function handleQualityListBoxItemSelected({ playerContext, qualitySettingsOpenButton, settingsPanel, mainSettingsPage }: {
15
+ playerContext: PlayerContext;
16
+ qualitySettingsOpenButton: SettingsPanelPageOpenButton;
17
+ settingsPanel: SettingsPanel;
18
+ mainSettingsPage: SettingsPanelPage;
19
+ }): (source: any, args: any) => void;