@npo/player 1.23.2 → 1.24.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 (140) hide show
  1. package/README.md +1 -1
  2. package/lib/js/playeractions/handlers/error.js +2 -2
  3. package/lib/js/playeractions/handlers/error.test.js +2 -2
  4. package/lib/js/playeractions/handlers/handleoffsets.d.ts +4 -6
  5. package/lib/js/playeractions/handlers/handleoffsets.js +16 -17
  6. package/lib/js/playeractions/handlers/handleoffsets.test.js +73 -29
  7. package/lib/js/playeractions/handlers/mediasessionactions.js +24 -12
  8. package/lib/js/playeractions/handlers/processsourceconfig.js +16 -3
  9. package/lib/js/tracking/handlers/eventbinding.d.ts +1 -1
  10. package/lib/js/tracking/handlers/eventbinding.js +17 -23
  11. package/lib/js/tracking/handlers/eventlogging.d.ts +1 -1
  12. package/lib/js/tracking/handlers/eventlogging.js +18 -18
  13. package/lib/js/tracking/handlers/eventlogging.test.js +24 -24
  14. package/lib/js/tracking/handlers/playertrackerstart.js +4 -2
  15. package/lib/lang/nl.json +3 -1
  16. package/lib/npoplayer.d.ts +1 -2
  17. package/lib/npoplayer.js +25 -43
  18. package/lib/package.json +5 -5
  19. package/lib/services/a11y/setup.js +2 -2
  20. package/lib/services/a11y/setup.test.js +7 -8
  21. package/lib/services/advertHandlers/handlePreRolls.d.ts +2 -0
  22. package/lib/services/advertHandlers/handlePreRolls.js +132 -0
  23. package/lib/services/advertHandlers/handlePrerolls.test.js +52 -0
  24. package/lib/services/cdnProviders/cdnProviders.d.ts +4 -0
  25. package/lib/services/cdnProviders/cdnProviders.js +22 -0
  26. package/lib/services/cdnProviders/cndProviders.test.js +22 -0
  27. package/lib/services/eventListenerHandlers/removeEventListeners.d.ts +1 -1
  28. package/lib/services/eventListenerHandlers/removeEventListeners.js +4 -4
  29. package/lib/services/eventListenerHandlers/removeEventListeners.test.js +28 -13
  30. package/lib/services/liveStreamHandlers/handleLiveStreamControls.d.ts +1 -1
  31. package/lib/services/liveStreamHandlers/handleLiveStreamControls.js +3 -3
  32. package/lib/services/liveStreamHandlers/handleLiveStreamControls.test.d.ts +2 -0
  33. package/lib/services/liveStreamHandlers/handleLiveStreamControls.test.js +65 -0
  34. package/lib/services/localStorageHandlers/localStorageHandlers.d.ts +1 -1
  35. package/lib/services/localStorageHandlers/localStorageHandlers.test.js +0 -1
  36. package/lib/services/npoPlayerAPI/contants.d.ts +5 -0
  37. package/lib/services/npoPlayerAPI/contants.js +5 -0
  38. package/lib/services/npoPlayerAPI/npoPlayerAPI.d.ts +16 -4
  39. package/lib/services/npoPlayerAPI/npoPlayerAPI.js +65 -3
  40. package/lib/services/npoPlayerAPI/npoPlayerAPI.test.js +66 -1
  41. package/lib/services/segmentHandlers/addSegmentEventListeners.js +3 -3
  42. package/lib/services/segmentHandlers/addSegmentEventListeners.test.js +10 -9
  43. package/lib/services/segmentHandlers/convertFragmentToSegment.d.ts +1 -1
  44. package/lib/services/segmentHandlers/handleSegmentSeek.d.ts +1 -1
  45. package/lib/services/segmentHandlers/handleSegmentSeek.test.js +4 -4
  46. package/lib/services/segmentHandlers/handleSegmentTimeChanged.d.ts +1 -1
  47. package/lib/services/segmentHandlers/handleSegmentTimeChanged.test.js +33 -24
  48. package/lib/services/segmentHandlers/initSegment.d.ts +1 -1
  49. package/lib/services/segmentHandlers/initSegment.test.js +3 -1
  50. package/lib/services/segmentHandlers/setSegmentMarkers.d.ts +1 -1
  51. package/lib/services/services.d.ts +3 -1
  52. package/lib/services/services.js +8 -0
  53. package/lib/services/verticalVideoHandlers/handleVerticalVideoControls.d.ts +2 -0
  54. package/lib/services/verticalVideoHandlers/handleVerticalVideoControls.js +8 -0
  55. package/lib/services/verticalVideoHandlers/handleVerticalVideoControls.test.d.ts +1 -0
  56. package/lib/services/verticalVideoHandlers/handleVerticalVideoControls.test.js +36 -0
  57. package/lib/src/js/playeractions/handlers/handleoffsets.d.ts +4 -6
  58. package/lib/src/js/tracking/handlers/eventbinding.d.ts +1 -1
  59. package/lib/src/js/tracking/handlers/eventlogging.d.ts +1 -1
  60. package/lib/src/npoplayer.d.ts +1 -2
  61. package/lib/src/services/advertHandlers/handlePreRolls.d.ts +2 -0
  62. package/lib/src/services/advertHandlers/handlePrerolls.test.d.ts +1 -0
  63. package/lib/src/services/cdnProviders/cdnProviders.d.ts +4 -0
  64. package/lib/src/services/cdnProviders/cndProviders.test.d.ts +1 -0
  65. package/lib/src/services/eventListenerHandlers/removeEventListeners.d.ts +1 -1
  66. package/lib/src/services/liveStreamHandlers/handleLiveStreamControls.d.ts +1 -1
  67. package/lib/src/services/liveStreamHandlers/handleLiveStreamControls.test.d.ts +2 -0
  68. package/lib/src/services/localStorageHandlers/localStorageHandlers.d.ts +1 -1
  69. package/lib/src/services/npoPlayerAPI/contants.d.ts +5 -0
  70. package/lib/src/services/npoPlayerAPI/npoPlayerAPI.d.ts +16 -4
  71. package/lib/src/services/segmentHandlers/convertFragmentToSegment.d.ts +1 -1
  72. package/lib/src/services/segmentHandlers/handleSegmentSeek.d.ts +1 -1
  73. package/lib/src/services/segmentHandlers/handleSegmentTimeChanged.d.ts +1 -1
  74. package/lib/src/services/segmentHandlers/initSegment.d.ts +1 -1
  75. package/lib/src/services/segmentHandlers/setSegmentMarkers.d.ts +1 -1
  76. package/lib/src/services/services.d.ts +3 -1
  77. package/lib/src/services/verticalVideoHandlers/handleVerticalVideoControls.d.ts +2 -0
  78. package/lib/src/services/verticalVideoHandlers/handleVerticalVideoControls.test.d.ts +1 -0
  79. package/lib/src/types/events.d.ts +8 -1
  80. package/lib/src/types/interfaces.d.ts +8 -12
  81. package/lib/src/ui/components/audio/controlbar.d.ts +1 -1
  82. package/lib/src/ui/components/controlbar.d.ts +1 -1
  83. package/lib/src/ui/components/seekbar.d.ts +1 -1
  84. package/lib/src/ui/components/settingspanel.d.ts +1 -1
  85. package/lib/src/ui/components/verticalvideo/controlbar.d.ts +3 -0
  86. package/lib/src/ui/handlers/streamhandler.d.ts +2 -4
  87. package/lib/src/ui/uicontainer.d.ts +2 -2
  88. package/lib/tests/mocks/mockNpoplayer.js +0 -1
  89. package/lib/tests/mocks/playerContextMock.d.ts +67 -0
  90. package/lib/tests/mocks/playerContextMock.js +117 -0
  91. package/lib/types/events.d.ts +8 -1
  92. package/lib/types/events.js +184 -1
  93. package/lib/types/interfaces.d.ts +8 -12
  94. package/lib/types/interfaces.js +1 -0
  95. package/lib/ui/components/audio/controlbar.d.ts +1 -1
  96. package/lib/ui/components/audio/controlbar.js +6 -6
  97. package/lib/ui/components/controlbar.d.ts +1 -1
  98. package/lib/ui/components/controlbar.js +13 -11
  99. package/lib/ui/components/nativemobile/controlbar.js +0 -1
  100. package/lib/ui/components/seekbar.js +1 -1
  101. package/lib/ui/components/settingspanel.d.ts +1 -1
  102. package/lib/ui/components/settingspanel.js +68 -84
  103. package/lib/ui/components/topbar.js +6 -3
  104. package/lib/ui/components/verticalvideo/controlbar.d.ts +3 -0
  105. package/lib/ui/components/verticalvideo/controlbar.js +34 -0
  106. package/lib/ui/handlers/streamhandler.d.ts +2 -4
  107. package/lib/ui/handlers/streamhandler.js +16 -7
  108. package/lib/ui/nativemobileuifactory.js +2 -0
  109. package/lib/ui/uicontainer.d.ts +2 -2
  110. package/lib/ui/uicontainer.js +35 -29
  111. package/package.json +5 -5
  112. package/src/style/components/_settingspanel.scss +35 -3
  113. package/src/style/components/_subtitles.scss +29 -25
  114. package/src/style/components/_textbuttons.scss +2 -2
  115. package/src/style/components/_volumeslider.scss +1 -0
  116. package/src/style/components/vertical-video/_bottombar.scss +19 -0
  117. package/src/style/components/vertical-video/_buttons.scss +23 -0
  118. package/src/style/components/vertical-video/_hugeplaybacktogglebutton.scss +14 -0
  119. package/src/style/components/vertical-video/_seekbar.scss +19 -0
  120. package/src/style/components/vertical-video/_settingsbutton.scss +7 -0
  121. package/src/style/components/vertical-video/_settingspanel.scss +14 -0
  122. package/src/style/components/vertical-video/_shortvideo.scss +14 -0
  123. package/src/style/components/vertical-video/_subtitles.scss +3 -0
  124. package/src/style/components/vertical-video/_topbar.scss +17 -0
  125. package/src/style/components/vertical-video/_volumeslider.scss +9 -0
  126. package/src/style/npoplayer.css +74 -34
  127. package/src/style/npoplayer.scss +2 -1
  128. package/src/style/variants/_player-small.scss +18 -10
  129. package/src/style/variants/_player-vertical.scss +23 -0
  130. package/lib/js/ads/ster.d.ts +0 -4
  131. package/lib/js/ads/ster.js +0 -126
  132. package/lib/js/ads/ster.test.js +0 -63
  133. package/lib/js/cdnproviders.d.ts +0 -1
  134. package/lib/js/cdnproviders.js +0 -16
  135. package/lib/src/js/ads/ster.d.ts +0 -4
  136. package/lib/src/js/cdnproviders.d.ts +0 -1
  137. package/lib/tests/mocks/mockPlayerContext.d.ts +0 -2
  138. package/lib/tests/mocks/mockPlayerContext.js +0 -40
  139. /package/lib/{js/ads/ster.test.d.ts → services/advertHandlers/handlePrerolls.test.d.ts} +0 -0
  140. /package/lib/{src/js/ads/ster.test.d.ts → services/cdnProviders/cndProviders.test.d.ts} +0 -0
@@ -1,10 +1,12 @@
1
1
  import { processNicam } from './nicamhandler';
2
2
  import * as playerAction from '../../js/playeractions/playeractions';
3
- import { PlayerEvent } from 'bitmovin-player';
4
3
  import { initSegment } from '../../services/segmentHandlers/initSegment';
5
4
  import { handleLiveStreamControls } from '../../services/liveStreamHandlers/handleLiveStreamControls';
6
5
  import { removeEventListeners } from '../../services/eventListenerHandlers/removeEventListeners';
7
- export function processStream(streamObject, container, streamOptions, player, uiManager, sourceConfig, playerContext) {
6
+ import { NpoPlayerEvent } from '../../types/events';
7
+ export function processStream(playerContext) {
8
+ const { streamObject, container, streamOptions, uiManager } = playerContext.npoplayer;
9
+ const player = playerContext.player;
8
10
  if (!streamObject)
9
11
  return;
10
12
  if (uiManager == undefined)
@@ -16,7 +18,7 @@ export function processStream(streamObject, container, streamOptions, player, ui
16
18
  fragment: streamOptions?.fragments
17
19
  });
18
20
  if (streamOptions?.startOffset) {
19
- playerAction.handleStartOffset(player, streamOptions.startOffset);
21
+ playerAction.handleStartOffset(playerContext, streamOptions.startOffset);
20
22
  }
21
23
  const isLiveStream = streamObject.stream.isLiveStream;
22
24
  const isLiveStreamNoDvr = isLiveStream && streamObject.stream.hasDvrWindow === false;
@@ -42,10 +44,17 @@ export function processStream(streamObject, container, streamOptions, player, ui
42
44
  playerContainer?.classList.remove(audioOnlyClass);
43
45
  poster?.classList.remove(audioOnlyClass);
44
46
  }
45
- const isAutoplayEnabled = player.getConfig()?.playback?.autoplay ?? false;
46
- if (isAutoplayEnabled && (sourceConfig?.progressive || streamObject?.stream?.streamProfile === 'progressive')) {
47
- player.on(PlayerEvent.SourceLoaded, () => {
48
- player?.play();
47
+ const isAutoplayEnabled = streamOptions?.autoplay ?? player.getConfig()?.playback?.autoplay ?? false;
48
+ const doAutoPlay = async () => {
49
+ player.off(NpoPlayerEvent.SourceLoaded, handleAutoPlay);
50
+ await player.play();
51
+ };
52
+ const handleAutoPlay = () => {
53
+ doAutoPlay().catch((error) => {
54
+ console.error('Error attempting to autoplay:', error);
49
55
  });
56
+ };
57
+ if (isAutoplayEnabled) {
58
+ player.on(NpoPlayerEvent.SourceLoaded, handleAutoPlay);
50
59
  }
51
60
  }
@@ -43,6 +43,7 @@ export function nativeMobileUiFactory(player, config = {}) {
43
43
  if (_webData.assets.preroll) {
44
44
  adBreakActive = true;
45
45
  player.on(PlayerEvent.AdBreakFinished, setAdBreakActiveToFalse);
46
+ player.on(PlayerEvent.AdError, setAdBreakActiveToFalse);
46
47
  }
47
48
  if (_webData.metadata?.ageRating)
48
49
  processNicam(_webData, nicamElement, undefined);
@@ -53,6 +54,7 @@ export function nativeMobileUiFactory(player, config = {}) {
53
54
  const setAdBreakActiveToFalse = () => {
54
55
  adBreakActive = false;
55
56
  player.off(PlayerEvent.AdBreakFinished, setAdBreakActiveToFalse);
57
+ player.off(PlayerEvent.AdError, setAdBreakActiveToFalse);
56
58
  };
57
59
  if (window.bitmovin?.customMessageHandler) {
58
60
  const handleData = (data) => {
@@ -1,5 +1,5 @@
1
- import type NpoPlayer from '../npoplayer';
1
+ import NpoPlayer from '../npoplayer';
2
2
  import { UIContainer } from 'bitmovin-player-ui';
3
3
  import { PlayerAPI } from 'bitmovin-player';
4
4
  import { NpoPlayerUIVariants } from '../types/interfaces';
5
- export declare function createUIContainer(npoplayer: NpoPlayer, player: PlayerAPI, variant: NpoPlayerUIVariants, container: HTMLElement): UIContainer;
5
+ export declare function createUIContainer(npoPlayer: NpoPlayer, player: PlayerAPI, variant: NpoPlayerUIVariants, container: HTMLElement): UIContainer;
@@ -10,64 +10,70 @@ import { createTitleBar } from './components/titlebar';
10
10
  import { localizeKey } from '../js/utilities/utilities.locale';
11
11
  import { localizationConfig } from '../js/settings/localization';
12
12
  import { NpoPlayerUIVariants } from '../types/interfaces';
13
- export function createUIContainer(npoplayer, player, variant, container) {
13
+ import { createVerticalVideoControlBar } from './components/verticalvideo/controlbar';
14
+ import { DEFAULT_UI_DELAY, PREVENT_UI_DELAY } from '../services/npoPlayerAPI/contants';
15
+ export function createUIContainer(npoPlayer, player, variant, container) {
14
16
  const cssClassArray = ['npo-player'];
15
- let uiDelay = 3000;
16
- container.dataset.npoPlayerVersion = npoplayer.version;
17
+ let uiDelay = DEFAULT_UI_DELAY;
18
+ container.dataset.npoPlayerVersion = npoPlayer.version;
17
19
  container.classList.remove('bitmovinplayer-audio-container');
18
20
  switch (variant) {
19
21
  case NpoPlayerUIVariants.DEFAULT: {
20
- uiDelay = 3000;
22
+ uiDelay = DEFAULT_UI_DELAY;
21
23
  break;
22
24
  }
23
25
  case NpoPlayerUIVariants.AD: {
24
- uiDelay = -1;
26
+ uiDelay = PREVENT_UI_DELAY;
25
27
  cssClassArray.push('ster-ad');
26
28
  break;
27
29
  }
28
30
  case NpoPlayerUIVariants.AUDIO: {
29
- uiDelay = -1;
31
+ uiDelay = PREVENT_UI_DELAY;
30
32
  container.classList.add('bitmovinplayer-audio-container');
31
33
  cssClassArray.push('audio');
32
34
  break;
33
35
  }
36
+ case NpoPlayerUIVariants.VERTICAL: {
37
+ uiDelay = DEFAULT_UI_DELAY;
38
+ cssClassArray.push('vertical-video');
39
+ npoPlayer.player?.setAspectRatio('9:16');
40
+ break;
41
+ }
34
42
  }
35
43
  const middleButtons = createMiddleButtons(player);
36
- const playNextScreen = createPlayNextScreen(player, npoplayer);
37
- const settingsPanel = createSettingsPanel(npoplayer);
38
- const ctaBar = createCTABar(player, npoplayer, variant);
39
- const topBar = createTopBar(npoplayer);
40
- const controlBar = createControlBar(npoplayer);
41
- const titleBar = createTitleBar(npoplayer);
44
+ const playNextScreen = createPlayNextScreen(player, npoPlayer);
45
+ const settingsPanel = createSettingsPanel(npoPlayer);
46
+ const ctaBar = createCTABar(player, npoPlayer, variant);
47
+ const topBar = createTopBar(npoPlayer);
48
+ const controlBar = createControlBar(npoPlayer);
49
+ const titleBar = createTitleBar(npoPlayer);
42
50
  const playbackToggleOverlay = new PlaybackToggleOverlay();
43
- const audioControlbar = createAudioControlBar(npoplayer);
51
+ const audioControlbar = createAudioControlBar(npoPlayer);
44
52
  const bufferingOverlay = new BufferingOverlay();
53
+ const verticalVideoControlBar = createVerticalVideoControlBar(npoPlayer);
45
54
  const errorMessageOverlay = new ErrorMessageOverlay();
46
- npoplayer.uiComponents.errorMessageOverlay = errorMessageOverlay;
47
- const baseComponentsBefore = [
48
- settingsPanel,
49
- new SubtitleOverlay(),
50
- bufferingOverlay,
51
- playbackToggleOverlay,
52
- new CastStatusOverlay(),
53
- middleButtons
54
- ];
55
- const baseComponentsAfter = [errorMessageOverlay];
56
- const conditionalComponents = [];
55
+ const castStatusOverlay = new CastStatusOverlay();
56
+ npoPlayer.uiComponents.errorMessageOverlay = errorMessageOverlay;
57
+ const defaultVideoComponents = [settingsPanel, new SubtitleOverlay(), bufferingOverlay, playbackToggleOverlay];
58
+ const components = [];
57
59
  if (variant === NpoPlayerUIVariants.DEFAULT) {
58
- conditionalComponents.push(...baseComponentsBefore, playNextScreen, controlBar, ctaBar, titleBar, topBar);
60
+ components.push(...defaultVideoComponents, castStatusOverlay, middleButtons, playNextScreen, controlBar, ctaBar, titleBar, topBar);
61
+ }
62
+ if (variant === NpoPlayerUIVariants.VERTICAL) {
63
+ components.push(...defaultVideoComponents, verticalVideoControlBar, titleBar);
59
64
  }
60
65
  if (variant === NpoPlayerUIVariants.AUDIO) {
61
- conditionalComponents.push(new PlaybackToggleButton(), audioControlbar, titleBar);
66
+ components.push(new PlaybackToggleButton(), audioControlbar, titleBar);
62
67
  }
63
68
  if (variant === NpoPlayerUIVariants.AD) {
64
- conditionalComponents.push(...baseComponentsBefore, controlBar, ctaBar);
69
+ components.push(...defaultVideoComponents, castStatusOverlay, middleButtons, controlBar, ctaBar);
65
70
  }
66
71
  UIManager.setLocalizationConfig(localizationConfig);
72
+ const ariaLabelKey = variant === NpoPlayerUIVariants.AUDIO ? 'audioPlayer' : 'videoPlayer';
67
73
  return new UIContainer({
68
- components: [...conditionalComponents, ...baseComponentsAfter],
74
+ components: [...components, errorMessageOverlay],
69
75
  cssClasses: cssClassArray,
70
- ariaLabel: localizeKey('player'),
76
+ ariaLabel: localizeKey(ariaLabelKey),
71
77
  hideDelay: uiDelay,
72
78
  hidePlayerStateExceptions: [PlayerUtils.PlayerState.Paused]
73
79
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@npo/player",
3
- "version": "1.23.2",
3
+ "version": "1.24.0",
4
4
  "description": "NPO Player",
5
5
  "author": "Publieke Omroep <player@npo.nl>",
6
6
  "contributors": [
@@ -16,7 +16,7 @@
16
16
  "types": "./lib/npoplayer.d.ts",
17
17
  "scripts": {
18
18
  "build": "webpack --hot",
19
- "build:scss": "npm run build:web-styles && npm run build:mobile-styles && mkdir -p dist && cp src/style/*.css dist && mkdir src/scss && cp src/style/*.css.map dist && cp src/style/*.css src/scss && cp src/style/*.css.map src/scss",
19
+ "build:scss": "npm run build:web-styles && npm run build:mobile-styles && mkdir -p dist && cp src/style/*.css dist && cp src/style/*.css.map dist && mkdir -p src/scss && cp src/style/*.css src/scss && cp src/style/*.css.map src/scss",
20
20
  "build:web-styles": "sass src/style/npoplayer.scss:src/style/npoplayer.css --style=compressed && postcss src/style/npoplayer.css --use autoprefixer postcss-import -o src/style/npoplayer.css",
21
21
  "build:mobile-styles": "sass src/style/npoplayer-mobile.scss:src/style/npoplayer-mobile.css --style=compressed && postcss src/style/npoplayer-mobile.css --use autoprefixer postcss-import -o src/style/npoplayer-mobile.css",
22
22
  "build:cdn": "npm run build && bash build-cdn.sh",
@@ -89,9 +89,9 @@
89
89
  "webpack-dev-server": "^4.11.1"
90
90
  },
91
91
  "dependencies": {
92
- "@npotag/tag": "3.1.2",
93
- "bitmovin-player": "8.166.0",
94
- "bitmovin-player-ui": "3.64.0"
92
+ "@npotag/tag": "3.2.1",
93
+ "bitmovin-player": "8.173.0",
94
+ "bitmovin-player-ui": "3.67.0"
95
95
  },
96
96
  "browserslist": [
97
97
  "defaults",
@@ -3,7 +3,7 @@ $settings-panel-line-height: 19px;
3
3
 
4
4
  .bmpui-ui-settings-panel {
5
5
  display: block;
6
- padding: 24px;
6
+ padding: 40px 24px 24px;
7
7
  height: auto;
8
8
  min-width: 290px; //Hotfix for select capping of text with only 'Snelheid'
9
9
  z-index: 100;
@@ -65,13 +65,11 @@ $settings-panel-line-height: 19px;
65
65
  max-height: unset;
66
66
  padding: unset;
67
67
  vertical-align: unset;
68
- width: 45%;
69
68
  margin-left: 0;
70
69
  font-family: var(--fontRegular);
71
70
  font-size: $settings-panel-font-size;
72
71
  line-height: $settings-panel-line-height;
73
72
  text-align: right;
74
- padding-right: 15px;
75
73
 
76
74
  span {
77
75
  display: inline-block;
@@ -102,6 +100,7 @@ $settings-panel-line-height: 19px;
102
100
  align-items: center;
103
101
  padding: 0px;
104
102
  gap: 8px;
103
+ justify-content: space-between;
105
104
  }
106
105
  }
107
106
  }
@@ -215,6 +214,39 @@ $settings-panel-line-height: 19px;
215
214
  }
216
215
  }
217
216
  }
217
+
218
+ .bmpui-ui-settingstogglebutton {
219
+ position: absolute;
220
+ top: 12px;
221
+ right: 20px;
222
+ width: 32px;
223
+ height: 32px;
224
+ padding: 0;
225
+
226
+ span {
227
+ display: none;
228
+ }
229
+
230
+ &::before,
231
+ &::after {
232
+ content: '';
233
+ top: 8px;
234
+ left: 16px;
235
+ width: 2px;
236
+ height: 15px;
237
+ position: absolute;
238
+ background-color: var(--npo-player-iconcolor);
239
+ transform-origin: 50% 50%;
240
+ }
241
+
242
+ &::before {
243
+ transform: rotate(-45deg);
244
+ }
245
+
246
+ &::after {
247
+ transform: rotate(45deg);
248
+ }
249
+ }
218
250
  }
219
251
 
220
252
  &.bmpui-settings-panel-shown {
@@ -1,18 +1,3 @@
1
- $breakpoints: (
2
- 600px: 1.593em,
3
- 700px: 1.867em,
4
- 1200px: 3.2em,
5
- 1440px: 3.84em
6
- );
7
-
8
- @mixin responsive-font($size, $span-size) {
9
- font-size: $size !important;
10
-
11
- span {
12
- font-size: $span-size !important;
13
- }
14
- }
15
-
16
1
  .bmpui-ui-subtitle-overlay {
17
2
  p {
18
3
  display: inline-block;
@@ -25,7 +10,6 @@ $breakpoints: (
25
10
  }
26
11
 
27
12
  .bmpui-subtitle-region-container {
28
- font-size: 15.22px !important;
29
13
  position: static !important;
30
14
  display: block;
31
15
  width: 100%;
@@ -37,28 +21,48 @@ $breakpoints: (
37
21
  overflow-wrap: break-word;
38
22
  overflow: hidden;
39
23
  writing-mode: horizontal-tb;
24
+ text-align: center !important;
40
25
  width: 100% !important;
41
26
  inset: none !important;
42
27
  display: block !important;
43
- bottom: 18px !important;
28
+ bottom: 16px !important;
44
29
  left: 0 !important;
45
30
  right: 0!important;
46
31
  top: auto !important;
47
- font-weight: 400 !important;
48
- padding: 0 18px;
32
+ font-weight: 400;
33
+ padding: 0 16px;
49
34
  line-height: 1.2;
50
- @include responsive-font(1em, 1em);
35
+ font-size: 12px;
36
+
37
+ @container (min-width: 400px) {
38
+ font-size: 16px;
39
+ }
40
+
41
+ @container (min-width: 600px) {
42
+ font-size: 20px;
43
+ }
51
44
 
52
- @each $bp, $size in $breakpoints {
53
- @container (min-width: $bp) {
54
- @include responsive-font($size, $size);
55
- }
45
+ @container (min-width: 800px) {
46
+ font-size: 26px;
47
+ }
48
+
49
+ @container (min-width: 1200px) {
50
+ font-size: 32px;
51
+ bottom: 32px !important;
52
+ }
53
+
54
+ span {
55
+ background-color: rgba(0, 0, 0, 0.6);
56
56
  }
57
57
  }
58
58
  }
59
59
 
60
+ [style="color: green"] {
61
+ color: lime !important;
62
+ }
63
+
60
64
  .green {
61
- color: green;
65
+ color: lime;
62
66
  }
63
67
 
64
68
  .cyan {
@@ -19,14 +19,14 @@
19
19
  border-radius: 6px;
20
20
  height: 32px;
21
21
  box-sizing: border-box;
22
- font-weight: 700;
22
+ font-weight: 400;
23
23
  filter: drop-shadow(0px 4px 16px rgba(0, 0, 0, 0.45));
24
24
 
25
25
  .bmpui-label {
26
26
  position: relative;
27
27
  display: block;
28
28
  font-family: var(--fontBold);
29
- font-weight: 700;
29
+ font-weight: 400;
30
30
  font-size: 12px;
31
31
  color: #ffffff;
32
32
  }
@@ -35,6 +35,7 @@
35
35
 
36
36
  // vertical slider in topbar
37
37
  &.bmpui-audio,
38
+ &.bmpui-vertical-video,
38
39
  .bmpui-controlbar-small {
39
40
  .bmpui-ui-volumeslider.bmpui-vertical {
40
41
  position: absolute;
@@ -0,0 +1,19 @@
1
+ .bmpui-ui-controlbar-bottom {
2
+ padding: 16px 8px !important;
3
+ display: flex;
4
+ width: 100%;
5
+ height: 100%;
6
+ align-items: flex-end;
7
+ pointer-events: none;
8
+
9
+ .bmpui-container-wrapper {
10
+ width: 100%;
11
+ pointer-events: all;
12
+ }
13
+ }
14
+
15
+ &.bmpui-controls-shown {
16
+ .bmpui-ui-controlbar-bottom {
17
+ background: var(--npo-player-vertical-video-overlay-color);
18
+ }
19
+ }
@@ -0,0 +1,23 @@
1
+ .bmpui-vertical-video-controlbar-buttons .bmpui-container-wrapper {
2
+ display: flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ }
6
+
7
+ .bmpui-ui-settingstogglebutton,
8
+ .bmpui-ui-volumetogglebutton,
9
+ .bmpui-ui-rewindbutton,
10
+ .bmpui-ui-playbacktogglebutton,
11
+ .bmpui-ui-forwardbutton,
12
+ .bmpui-ui-fullscreentogglebutton {
13
+ width: 48px;
14
+ height: 48px;
15
+ padding: 0;
16
+ margin: 0 8px;
17
+
18
+ .bmpui-label {
19
+ width: 32px;
20
+ height: 32px;
21
+ margin: 8px;
22
+ }
23
+ }
@@ -0,0 +1,14 @@
1
+ &,
2
+ &.bmpui-layout-max-width-400,
3
+ &.bmpui-layout-max-width-600 {
4
+ .bmpui-ui-playbacktoggle-overlay {
5
+ display: block;
6
+ }
7
+ }
8
+
9
+ .bmpui-ui-hugeplaybacktogglebutton .bmpui-image {
10
+ &::after,
11
+ &:before {
12
+ z-index: 10;
13
+ }
14
+ }
@@ -0,0 +1,19 @@
1
+ .bmpui-controlbar-seekbar {
2
+ .bmpui-container-wrapper {
3
+ margin: 8px 0;
4
+
5
+ .bmpui-ui-playbacktimelabel {
6
+ font-family: var(--fontRegular);
7
+
8
+ &.bmpui-total-time {
9
+ opacity: 0.65;
10
+ font-weight: 400;
11
+ }
12
+ }
13
+ }
14
+
15
+ // hide scrubbing thumbnail
16
+ .bmpui-ui-seekbar-label {
17
+ display: none;
18
+ }
19
+ }
@@ -0,0 +1,7 @@
1
+ .bmpui-vertical-video-controlbar-settings {
2
+ > .bmpui-container-wrapper {
3
+ margin: 8px 0;
4
+ display: flex;
5
+ justify-content: flex-end;
6
+ }
7
+ }
@@ -0,0 +1,14 @@
1
+ .bmpui-ui-settings-panel {
2
+ position: fixed;
3
+ bottom: 0;
4
+ left: 0;
5
+ width: 100%;
6
+ border-bottom-left-radius: 0;
7
+ border-bottom-right-radius: 0;
8
+
9
+ .bmpui-ui-settingstogglebutton {
10
+ width: 32px;
11
+ height: 32px;
12
+ margin: 0;
13
+ }
14
+ }
@@ -0,0 +1,14 @@
1
+ &.vertical-short-video {
2
+ .bmpui-ui-rewindbutton,
3
+ .bmpui-ui-forwardbutton {
4
+ display: none;
5
+ }
6
+
7
+ .bmpui-ui-playbacktimelabel {
8
+ display: none;
9
+ }
10
+
11
+ .bmpui-seekbar-playbackposition-marker {
12
+ display: none;
13
+ }
14
+ }
@@ -0,0 +1,3 @@
1
+ &.bmpui-controls-shown .bmpui-ui-subtitle-overlay .bmpui-subtitle-region-container .bmpui-ui-subtitle-label {
2
+ bottom: 76px !important;
3
+ }
@@ -0,0 +1,17 @@
1
+ .bmpui-ui-titlebar {
2
+ background: none;
3
+
4
+ .bmpui-container-wrapper {
5
+ padding: 16px;
6
+
7
+ .bmpui-ui-label {
8
+ display: none;
9
+ }
10
+ }
11
+
12
+ .bmpui-nicam .nicam-icon {
13
+ width: 32px;
14
+ height: 32px;
15
+ margin-top: 0;
16
+ }
17
+ }
@@ -0,0 +1,9 @@
1
+ .bmpui-ui-volumeslider.bmpui-vertical {
2
+ bottom: 48px;
3
+ top: auto;
4
+ right: auto;
5
+
6
+ &::before {
7
+ opacity: 1;
8
+ }
9
+ }