@npo/player 1.20.3 → 1.21.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 (84) hide show
  1. package/README.md +5 -0
  2. package/lib/js/api/getstreamobject.test.js +2 -2
  3. package/lib/js/markers/updateLiveMarkers.d.ts +4 -0
  4. package/lib/js/markers/updateLiveMarkers.js +21 -0
  5. package/lib/js/markers/updateLiveMarkers.test.d.ts +1 -0
  6. package/lib/js/markers/updateLiveMarkers.test.js +53 -0
  7. package/lib/js/playeractions/handlers/error.d.ts +2 -2
  8. package/lib/js/playeractions/handlers/processsourceconfig.d.ts +1 -1
  9. package/lib/js/playeractions/handlers/processsourceconfig.js +12 -10
  10. package/lib/js/ui/components/adbutton.js +1 -1
  11. package/lib/js/ui/components/buttons.js +2 -2
  12. package/lib/js/ui/components/nativemobile/buttons.d.ts +7 -1
  13. package/lib/js/ui/components/nativemobile/buttons.js +27 -4
  14. package/lib/js/ui/components/nativemobile/controlbar.js +1 -2
  15. package/lib/js/ui/components/nativemobile/playnext.d.ts +2 -1
  16. package/lib/js/ui/components/nativemobile/playnext.js +5 -4
  17. package/lib/js/ui/components/settingspanel.js +30 -23
  18. package/lib/js/ui/components/shared/playnextscreen.d.ts +2 -2
  19. package/lib/js/ui/components/shared/playnextscreen.js +14 -2
  20. package/lib/js/ui/components/shared/playnextstreen.test.d.ts +6 -0
  21. package/lib/js/ui/components/shared/playnextstreen.test.js +56 -0
  22. package/lib/js/ui/handlers/accessibilityhandler.js +26 -2
  23. package/lib/js/ui/handlers/accessibilityhandler.test.d.ts +1 -0
  24. package/lib/js/ui/handlers/accessibilityhandler.test.js +63 -0
  25. package/lib/js/ui/handlers/domhandlers.d.ts +3 -0
  26. package/lib/js/ui/handlers/domhandlers.js +7 -0
  27. package/lib/js/ui/handlers/domhandlers.test.d.ts +1 -0
  28. package/lib/js/ui/handlers/domhandlers.test.js +49 -0
  29. package/lib/js/ui/handlers/nicamhandler.js +1 -1
  30. package/lib/js/ui/handlers/streamhandler.js +4 -4
  31. package/lib/js/ui/nativemobileuicontainer.js +5 -5
  32. package/lib/js/ui/nativemobileuifactory.js +82 -42
  33. package/lib/js/ui/nativemobileuifactory.test.d.ts +1 -0
  34. package/lib/js/ui/nativemobileuifactory.test.js +66 -0
  35. package/lib/js/ui/uicontainer.js +4 -3
  36. package/lib/js/utilities/utilities.d.ts +3 -0
  37. package/lib/js/utilities/utilities.js +9 -0
  38. package/lib/lang/nl.json +1 -1
  39. package/lib/npoplayer-bridge.test.d.ts +1 -0
  40. package/lib/npoplayer-bridge.test.js +23 -0
  41. package/lib/npoplayer.d.ts +2 -1
  42. package/lib/npoplayer.js +13 -4
  43. package/lib/npoplayer.test.js +4 -4
  44. package/lib/package.json +3 -2
  45. package/lib/src/js/markers/updateLiveMarkers.d.ts +4 -0
  46. package/lib/src/js/markers/updateLiveMarkers.test.d.ts +1 -0
  47. package/lib/src/js/playeractions/handlers/error.d.ts +2 -2
  48. package/lib/src/js/playeractions/handlers/processsourceconfig.d.ts +1 -1
  49. package/lib/src/js/ui/components/nativemobile/buttons.d.ts +7 -1
  50. package/lib/src/js/ui/components/nativemobile/playnext.d.ts +2 -1
  51. package/lib/src/js/ui/components/shared/playnextscreen.d.ts +2 -2
  52. package/lib/src/js/ui/components/shared/playnextstreen.test.d.ts +6 -0
  53. package/lib/src/js/ui/handlers/accessibilityhandler.test.d.ts +1 -0
  54. package/lib/src/js/ui/handlers/domhandlers.d.ts +3 -0
  55. package/lib/src/js/ui/handlers/domhandlers.test.d.ts +1 -0
  56. package/lib/src/js/ui/nativemobileuifactory.test.d.ts +1 -0
  57. package/lib/src/js/utilities/utilities.d.ts +3 -0
  58. package/lib/src/npoplayer-bridge.test.d.ts +1 -0
  59. package/lib/src/npoplayer.d.ts +2 -1
  60. package/lib/src/types/interfaces.d.ts +26 -2
  61. package/lib/tests/mocks/mockNpoplayer.js +4 -1
  62. package/lib/types/interfaces.d.ts +26 -2
  63. package/lib/types/interfaces.js +12 -2
  64. package/package.json +3 -2
  65. package/src/scss/components/_advert.scss +34 -68
  66. package/src/scss/components/_hugeplaybacktogglebutton.scss +11 -0
  67. package/src/scss/components/_icons.scss +50 -40
  68. package/src/scss/components/_nicam.scss +9 -2
  69. package/src/scss/components/_playnext.scss +5 -1
  70. package/src/scss/components/_replay.scss +1 -1
  71. package/src/scss/components/_seekbar.scss +13 -0
  72. package/src/scss/components/_settingspanel.scss +37 -12
  73. package/src/scss/components/_textbuttons.scss +12 -11
  74. package/src/scss/components/_volumeslider.scss +5 -0
  75. package/src/scss/components/audio/_playbutton.scss +6 -0
  76. package/src/scss/components/audio/_volumeslider.scss +6 -1
  77. package/src/scss/npoplayer.css +80 -56
  78. package/src/scss/npoplayer.scss +3 -0
  79. package/src/scss/variants/_player-base.scss +1 -9
  80. package/src/scss/variants/_player-large.scss +20 -0
  81. package/src/scss/variants/_player-medium.scss +31 -1
  82. package/src/scss/variants/_player-native-mobile.scss +4 -0
  83. package/src/scss/variants/_player-small.scss +11 -8
  84. package/src/scss/vars/_colors.scss +1 -0
@@ -0,0 +1,3 @@
1
+ import { StreamObject } from "types/interfaces";
2
+ import { PlayerAPI } from "bitmovin-player";
3
+ export declare function handleLiveStreamNoDvr(player: PlayerAPI, streamObject: StreamObject, container: HTMLElement): void;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,3 +1,4 @@
1
+ import { PlayerAPI } from 'bitmovin-player';
1
2
  import { type LocalizableText } from 'bitmovin-player-ui/dist/js/framework/localization/i18n';
2
3
  export declare const jwtToBase64: (jwt: string) => string;
3
4
  export declare const base64ToObject: (base64: string) => Record<string, any>;
@@ -11,3 +12,5 @@ export declare function getModuleExport(module: unknown): unknown;
11
12
  export declare function isUrl(url: string): boolean;
12
13
  export declare function isMediaUrl(url: string): Promise<boolean>;
13
14
  export declare function replaceSpecialChars(text: string): string;
15
+ export declare function getPlayerElement(player: PlayerAPI, query: string): Element | null;
16
+ export declare function removePlayerElementClass(player: PlayerAPI, query: string, className: string): void;
@@ -0,0 +1 @@
1
+ export {};
@@ -3,7 +3,7 @@ import { type InitialisationProps } from '@npotag/tag/dist/types/src/npoTag';
3
3
  import { type PlayerAPI, type PlayerConfig, type SourceConfig } from 'bitmovin-player';
4
4
  import { UIManager } from 'bitmovin-player-ui';
5
5
  import { LogEmitter } from './types/classes';
6
- import { type DRMProfile, type ApiPayload, type NPOTagObject, type Section, type StreamObject, type StreamOptions, type UIComponents, NpoPlayerUIVariants } from './types/interfaces';
6
+ import { type DRMProfile, type ApiPayload, type NPOTagObject, type Section, type StreamObject, type StreamOptions, type UIComponents, type TimeLineMarker, NpoPlayerUIVariants } from './types/interfaces';
7
7
  export { type PlayerConfig, type InitialisationProps, type NPOTagObject, type StreamOptions, NpoPlayerUIVariants, };
8
8
  export default class NpoPlayer {
9
9
  playerConfig: PlayerConfig;
@@ -41,6 +41,7 @@ export default class NpoPlayer {
41
41
  goBackwards(seconds: number): void;
42
42
  watchFromStart(): void;
43
43
  showPlayNextScreen(): void;
44
+ updateMarkers(timeLineMarkers: TimeLineMarker[]): void;
44
45
  cancelPlayNextScreen(): void;
45
46
  hidePlayNextScreen(): void;
46
47
  doPlayNext(): void;
@@ -95,6 +95,8 @@ export interface StreamOptions {
95
95
  nicam?: string[] | null;
96
96
  playNext?: PlayNext;
97
97
  ster?: SterData;
98
+ enableSubtitles?: boolean;
99
+ useWidevineServerCertificate?: boolean;
98
100
  }
99
101
  export interface UIComponents {
100
102
  errorMessageOverlay?: ErrorMessageOverlay;
@@ -118,15 +120,33 @@ export interface UIComponents {
118
120
  export interface CustomMessageHandlerInterface {
119
121
  defaultActionRequired?: boolean;
120
122
  isChecked?: boolean;
123
+ playNext?: {
124
+ remainingCountDownDuration: number;
125
+ };
126
+ error?: ErrorEvent;
127
+ errorMessage?: {
128
+ input: string;
129
+ status: number;
130
+ };
121
131
  }
122
132
  export declare enum CustomMessages {
123
133
  CLICK_CAST = "castButtonClick",
124
134
  CLICK_GO_BACK_TO_LIVE = "clickGoBackToLive",
125
- CLICK_PLAY_NEXT = "clickPlayNext",
126
135
  CLICK_WATCH_FROM_START = "clickWatchFromStart",
127
- DO_PLAY_NEXT = "doPlayNext",
136
+ DO_ERROR = "doError",
137
+ ERROR_TRIGGERED = "errorTriggerd",
128
138
  JAVASCRIPT_READY = "javascriptReady",
139
+ PLAY_NEXT_CANCEL_CLICK = "playNextCancelClick",
140
+ PLAY_NEXT_COUNTDOWN_CANCELED = "playNextCountdownCanceled",
141
+ PLAY_NEXT_COUNTDOWN_FINISHED = "playNextCountdownFinished",
142
+ PLAY_NEXT_COUNTDOWN_PROGRESS = "playNextCountdownProgress",
143
+ PLAY_NEXT_OVERLAY_HIDDEN = "playNextOverlayHidden",
144
+ PLAY_NEXT_OVERLAY_HIDE = "playNextOverlayHide",
145
+ PLAY_NEXT_OVERLAY_SHOW = "playNextOverlayShow",
146
+ PLAY_NEXT_OVERLAY_SHOWN = "playNextOverlayShown",
147
+ PLAY_NEXT_PROCEED_CLICK = "playNextProceedClick",
129
148
  SET_STREAM_LINK = "setStreamLink",
149
+ SET_WEB_DATA = "setWebData",
130
150
  TOGGLE_AIRPLAY = "toggleAirplay",
131
151
  TOGGLE_FULLSCREEN = "toggleFullScreen",
132
152
  TOGGLE_FULLSCREEN_UI = "toggleFullscreenUI",
@@ -147,4 +167,8 @@ export interface PlayNext {
147
167
  proceedCallback?: () => void;
148
168
  cancelCallback?: () => void;
149
169
  }
170
+ export type TimeLineMarker = {
171
+ time: number;
172
+ title: string;
173
+ };
150
174
  export {};
@@ -111,5 +111,8 @@ export const mockNpoPlayer = {
111
111
  },
112
112
  pause: function () {
113
113
  throw new Error('Function not implemented.');
114
- }
114
+ },
115
+ updateMarkers: function () {
116
+ jest.fn();
117
+ },
115
118
  };
@@ -95,6 +95,8 @@ export interface StreamOptions {
95
95
  nicam?: string[] | null;
96
96
  playNext?: PlayNext;
97
97
  ster?: SterData;
98
+ enableSubtitles?: boolean;
99
+ useWidevineServerCertificate?: boolean;
98
100
  }
99
101
  export interface UIComponents {
100
102
  errorMessageOverlay?: ErrorMessageOverlay;
@@ -118,15 +120,33 @@ export interface UIComponents {
118
120
  export interface CustomMessageHandlerInterface {
119
121
  defaultActionRequired?: boolean;
120
122
  isChecked?: boolean;
123
+ playNext?: {
124
+ remainingCountDownDuration: number;
125
+ };
126
+ error?: ErrorEvent;
127
+ errorMessage?: {
128
+ input: string;
129
+ status: number;
130
+ };
121
131
  }
122
132
  export declare enum CustomMessages {
123
133
  CLICK_CAST = "castButtonClick",
124
134
  CLICK_GO_BACK_TO_LIVE = "clickGoBackToLive",
125
- CLICK_PLAY_NEXT = "clickPlayNext",
126
135
  CLICK_WATCH_FROM_START = "clickWatchFromStart",
127
- DO_PLAY_NEXT = "doPlayNext",
136
+ DO_ERROR = "doError",
137
+ ERROR_TRIGGERED = "errorTriggerd",
128
138
  JAVASCRIPT_READY = "javascriptReady",
139
+ PLAY_NEXT_CANCEL_CLICK = "playNextCancelClick",
140
+ PLAY_NEXT_COUNTDOWN_CANCELED = "playNextCountdownCanceled",
141
+ PLAY_NEXT_COUNTDOWN_FINISHED = "playNextCountdownFinished",
142
+ PLAY_NEXT_COUNTDOWN_PROGRESS = "playNextCountdownProgress",
143
+ PLAY_NEXT_OVERLAY_HIDDEN = "playNextOverlayHidden",
144
+ PLAY_NEXT_OVERLAY_HIDE = "playNextOverlayHide",
145
+ PLAY_NEXT_OVERLAY_SHOW = "playNextOverlayShow",
146
+ PLAY_NEXT_OVERLAY_SHOWN = "playNextOverlayShown",
147
+ PLAY_NEXT_PROCEED_CLICK = "playNextProceedClick",
129
148
  SET_STREAM_LINK = "setStreamLink",
149
+ SET_WEB_DATA = "setWebData",
130
150
  TOGGLE_AIRPLAY = "toggleAirplay",
131
151
  TOGGLE_FULLSCREEN = "toggleFullScreen",
132
152
  TOGGLE_FULLSCREEN_UI = "toggleFullscreenUI",
@@ -147,4 +167,8 @@ export interface PlayNext {
147
167
  proceedCallback?: () => void;
148
168
  cancelCallback?: () => void;
149
169
  }
170
+ export type TimeLineMarker = {
171
+ time: number;
172
+ title: string;
173
+ };
150
174
  export {};
@@ -2,11 +2,21 @@ export var CustomMessages;
2
2
  (function (CustomMessages) {
3
3
  CustomMessages["CLICK_CAST"] = "castButtonClick";
4
4
  CustomMessages["CLICK_GO_BACK_TO_LIVE"] = "clickGoBackToLive";
5
- CustomMessages["CLICK_PLAY_NEXT"] = "clickPlayNext";
6
5
  CustomMessages["CLICK_WATCH_FROM_START"] = "clickWatchFromStart";
7
- CustomMessages["DO_PLAY_NEXT"] = "doPlayNext";
6
+ CustomMessages["DO_ERROR"] = "doError";
7
+ CustomMessages["ERROR_TRIGGERED"] = "errorTriggerd";
8
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";
9
18
  CustomMessages["SET_STREAM_LINK"] = "setStreamLink";
19
+ CustomMessages["SET_WEB_DATA"] = "setWebData";
10
20
  CustomMessages["TOGGLE_AIRPLAY"] = "toggleAirplay";
11
21
  CustomMessages["TOGGLE_FULLSCREEN"] = "toggleFullScreen";
12
22
  CustomMessages["TOGGLE_FULLSCREEN_UI"] = "toggleFullscreenUI";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@npo/player",
3
- "version": "1.20.3",
3
+ "version": "1.21.0",
4
4
  "description": "NPO Player",
5
5
  "author": "Publieke Omroep <player@npo.nl>",
6
6
  "contributors": [
@@ -25,7 +25,8 @@
25
25
  "build:ts": "bash build-lib.sh",
26
26
  "test": "jest",
27
27
  "test:ci": "jest --collectCoverage --testResultsProcessor=jest-sonar-reporter",
28
- "version:dev": "npm version prerelease --preid=dev --no-git-tag-version"
28
+ "version:dev": "npm version prerelease --preid=dev --no-git-tag-version",
29
+ "prepublishOnly": "aws codeartifact login --tool npm --namespace @npo-player --repository npo-player --domain npoplayer $([ -z \"$TF_BUILD\" ] && echo \" --profile codeartifact\")"
29
30
  },
30
31
  "files": [
31
32
  "LICENSE",
@@ -36,21 +36,26 @@
36
36
  }
37
37
  }
38
38
 
39
+ .bmpui-current-time {
40
+ display: none;
41
+ }
42
+
39
43
  .bmpui-adLabel {
40
44
  position: absolute;
41
45
  display: flex;
42
46
  align-items: center;
43
- top: 24px;
44
- left: 24px;
45
- font-family: 'NPOSansBold', sans-serif;
46
- font-weight: 700;
47
+ top: 12px;
48
+ left: 12px;
49
+ font-size: 14px;
50
+ font-family: 'NPOSans', sans-serif;
47
51
 
48
52
  &::before {
49
53
  content: '';
50
54
  display: inline-block;
51
- height: 44px;
52
- width: 59px;
55
+ height: 57px;
56
+ width: 48px;
53
57
  margin-right: 8px;
58
+ background-size: 100% 100%;
54
59
  background-image: url("data:image/svg+xml,%3Csvg width='59' height='44' viewBox='0 0 39 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0 15.0338L19.4156 0.414307L38.8238 15.0338L19.4156 29.5855L0 15.0338ZM19.4223 27.5128L36.0603 15.0303L19.4223 2.48968L2.76764 15.0301L19.4223 27.5128Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M13.2215 13.9887C12.4213 13.3085 11.7303 12.721 11.7303 11.9329C11.7303 11.2697 12.064 10.8895 12.6461 10.8895C12.8494 10.8895 13.5139 10.9733 13.6141 12.0211L15.2164 11.8445C15.0406 10.3315 14.1464 9.42878 12.8164 9.42878C11.1077 9.42878 10.1279 10.3468 10.1279 11.9472C10.1279 13.5345 11.202 14.4297 12.1495 15.2195C12.9488 15.8859 13.704 16.5152 13.704 17.4532C13.704 18.0625 13.3087 18.4261 12.6463 18.4261C12.0333 18.4261 11.6413 17.8635 11.5647 16.8842C11.4962 16.894 10.0231 17.1058 9.96039 17.1152C10.0361 18.5001 10.8656 19.8866 12.5614 19.8866C14.2547 19.8866 15.3066 18.8944 15.3066 17.297C15.3062 15.7618 14.1987 14.8196 13.2215 13.9887ZM15.7374 13.4513V12.1456H16.6171V10.0881H18.2065V12.1456H19.2708V13.4513H18.2067V17.8506C18.2067 18.2478 18.377 18.4748 18.746 18.4748H19.271V19.837C19.0583 19.8936 18.8736 19.922 18.4762 19.922C17.2843 19.922 16.6173 19.3688 16.6173 18.2048V13.4513H15.7374ZM26.2467 19.7803V12.1458H27.7649V13.0398H27.7933C28.1768 12.3871 28.8435 12.0041 29.5958 12.0041H29.922V13.6642C29.6383 13.5932 29.3688 13.5081 28.9002 13.5081C28.3611 13.5081 27.8358 13.8485 27.8358 14.5297V19.7803H26.2467ZM23.4859 17.5288C23.4599 18.3273 23.1512 18.6659 22.6083 18.6659C22.0409 18.6659 21.7284 18.2968 21.7284 17.4167V16.3098H25.0775V14.8908C25.0775 13.2164 24.4249 12.0528 22.6085 12.0528C20.7921 12.0528 20.1395 13.2164 20.1395 14.8908V17.133C20.1395 18.8073 20.7921 19.9714 22.6085 19.9714C24.2771 19.9714 24.9661 18.9917 25.0655 17.5288H23.4859ZM21.7284 14.6073C21.7284 13.7275 22.0409 13.3583 22.6083 13.3583C23.1761 13.3583 23.4882 13.7275 23.4882 14.6073V15.0049H21.7284V14.6073Z' fill='white'/%3E%3C/svg%3E%0A");
55
60
  }
56
61
  }
@@ -62,31 +67,36 @@
62
67
  left: 0;
63
68
  top: 0;
64
69
 
65
- &::before {
70
+ &::before,
71
+ &::after {
66
72
  content: '';
67
73
  position: absolute;
68
- background: var(--npo-player-topcolor);
69
- height: 161px;
74
+ left: 0;
70
75
  width: 100%;
76
+ z-index: 0;
77
+ }
78
+
79
+ &::before {
71
80
  top: 0;
72
- left: 0;
81
+ background: var(--npo-player-topcolor);
82
+ height: 56px;
73
83
  }
74
84
 
75
- .bmpui-ui-textbutton.ui-sterbutton {
76
- padding: 14px 10px;
77
- border: none;
78
- border-radius: 6px;
79
- height: fit-content;
80
- width: fit-content;
81
-
82
- .bmpui-label {
83
- font-family: 'NPOSansRegular', sans-serif;
84
- font-weight: normal;
85
- font-size: 12px;
86
- line-height: 0;
87
- text-align: left;
88
- }
85
+ &::after {
86
+ bottom: 0;
87
+ background: var(--npo-player-bottomcolor);
88
+ height: 112px;
89
89
  }
90
+
91
+ .bmpui-container-wrapper {
92
+ z-index: 1;
93
+ }
94
+ }
95
+
96
+ .bmpui-ui-controlbar,
97
+ .bmpui-ui-controlbar-bottom {
98
+ background: none;
99
+ z-index: 2;
90
100
  }
91
101
 
92
102
  .bmpui-ui-playbacktoggle-overlay {
@@ -100,48 +110,4 @@
100
110
  opacity: 0;
101
111
  }
102
112
  }
103
-
104
- &.bmpui-layout-max-width-400,
105
- &.bmpui-layout-max-width-600 {
106
- .bmpui-controlbar-textbuttons {
107
- display: flex;
108
- width: 100%;
109
- justify-content: center;
110
- padding-right: 0;
111
- }
112
-
113
- .bmpui-adLabel {
114
- left: 10px;
115
- top: 10px;
116
- }
117
- }
118
-
119
- .bmpui-layout-max-width-400 {
120
- .bmpui-adLabel {
121
- top: 10px;
122
- left: 10px;
123
- font-size: 14px;
124
- }
125
- }
126
-
127
- &.bmpui-layout-max-width-800 {
128
- .bmpui-controlbar-textbuttons {
129
- position: absolute;
130
- padding: 24px;
131
- align-items: flex-start;
132
- justify-content: flex-start;
133
-
134
- > .bmpui-container-wrapper {
135
- display: flex;
136
- align-items: center;
137
- }
138
- }
139
-
140
- .bmpui-adLabel {
141
- position: relative;
142
- top: 0;
143
- left: 0;
144
- margin-right: 16px;
145
- }
146
- }
147
113
  }
@@ -8,10 +8,21 @@
8
8
  .bmpui-image {
9
9
  animation: none;
10
10
  }
11
+
12
+ &:focus-visible {
13
+ .bmpui-image {
14
+ @include focusStyle(-2px);
15
+ z-index: 1;
16
+ }
17
+ }
11
18
  }
12
19
  }
13
20
  }
14
21
 
22
+ &.bmpui-controls-shown .bmpui-ui-hugeplaybacktogglebutton:focus {
23
+ box-shadow: none !important;
24
+ }
25
+
15
26
  &.bmpui-player-state-playing {
16
27
  .bmpui-ui-playbacktoggle-overlay {
17
28
  display: unset;
@@ -7,134 +7,144 @@
7
7
  .bmpui-ui-casttogglebutton,
8
8
  .bmpui-ui-airplaytogglebutton,
9
9
  .bmpui-ui-piptogglebutton {
10
- width: 40px;
10
+ background-image: none;
11
+ width: 21px;
11
12
  height: 40px;
12
- padding: 0;
13
+ padding: 0 5px;
13
14
  margin: 0;
14
- background-size: contain;
15
- background-color: var(--npo-player-iconcolor);
16
- background-image: none !important;
17
- mask-size: contain;
18
- mask-position: 50% 50%;
19
- mask-repeat: no-repeat;
15
+
16
+ &:focus-visible {
17
+ @include focusStyle();
18
+ border-radius: 2px;
19
+ }
20
+
21
+ .bmpui-label {
22
+ width: 21px;
23
+ height: 40px;
24
+ padding: 0;
25
+ margin: 0;
26
+ background-size: contain;
27
+ background-color: var(--npo-player-iconcolor);
28
+ background-image: none !important;
29
+ mask-size: contain;
30
+ mask-position: 50% 50%;
31
+ mask-repeat: no-repeat;
32
+ display: block;
33
+ color: transparent;
34
+ }
20
35
  }
21
36
 
22
37
  .bmpui-ui-settingstogglebutton,
23
38
  .bmpui-ui-casttogglebutton,
24
39
  .bmpui-ui-airplaytogglebutton,
25
40
  .bmpui-ui-piptogglebutton {
26
- &.bmpui-on {
41
+ &.bmpui-on .bmpui-label {
27
42
  background-color: var(--npo-player-iconcolor-active);
28
43
  }
29
44
  }
30
45
 
31
46
  .bmpui-controlbar-bottom {
32
47
  .bmpui-container-wrapper {
33
- gap: 20px;
48
+ gap: 10px;
34
49
  }
35
50
  }
36
51
 
37
52
  /* Icon rewind 10 sec */
38
- .bmpui-ui-rewindbutton {
53
+ .bmpui-ui-rewindbutton .bmpui-label {
39
54
  mask-image: var(--npo-player-icon-backward);
40
55
  }
41
56
 
42
57
  /* Icon forward 10 sec */
43
- .bmpui-ui-forwardbutton {
58
+ .bmpui-ui-forwardbutton .bmpui-label {
44
59
  mask-image: var(--npo-player-icon-forward);
45
60
  }
46
61
 
47
- .bmpui-ui-rewindbutton:hover,
48
- .bmpui-ui-forwardbutton:hover {
49
- filter: drop-shadow(0 0 1px var(--npo-player-iconcolor));
50
- }
51
-
52
62
  /* Icon Small Play/Pause Toggle */
53
63
  .bmpui-ui-playbacktogglebutton {
54
- &.bmpui-off {
64
+ &.bmpui-off .bmpui-label {
55
65
  mask-image: var(--npo-player-icon-play);
56
66
  }
57
67
 
58
- &.bmpui-on {
68
+ &.bmpui-on .bmpui-label {
59
69
  mask-image: var(--npo-player-icon-pause);
60
70
  }
61
71
  }
62
72
 
63
73
  /* Icon Full Screen */
64
74
  .bmpui-ui-fullscreentogglebutton {
65
- &.bmpui-off {
75
+ &.bmpui-off .bmpui-label {
66
76
  mask-image: var(--npo-player-icon-fullscreen);
67
77
  }
68
78
 
69
- &.bmpui-on {
79
+ &.bmpui-on .bmpui-label {
70
80
  mask-image: var(--npo-player-icon-fullscreen-active);
71
81
  }
72
82
  }
73
83
 
74
84
  /* Icon Settings */
75
85
  .bmpui-ui-settingstogglebutton {
76
- &.bmpui-off {
86
+ &.bmpui-off .bmpui-label {
77
87
  mask-image: var(--npo-player-icon-settings);
78
88
  }
79
89
 
80
- &.bmpui-on {
90
+ &.bmpui-on .bmpui-label {
81
91
  mask-image: var(--npo-player-icon-settings-active);
82
92
  }
83
93
  }
84
94
 
85
95
  /* Icon Cast */
86
96
  .bmpui-ui-casttogglebutton {
87
- &.bmpui-off {
97
+ &.bmpui-off .bmpui-label {
88
98
  mask-image: var(--npo-player-icon-cast);
89
99
  }
90
100
 
91
- &.bmpui-on {
101
+ &.bmpui-on .bmpui-label {
92
102
  mask-image: var(--npo-player-icon-cast-active);
93
103
  }
94
104
  }
95
105
 
96
106
  /* Icon Airplay */
97
107
  .bmpui-ui-airplaytogglebutton {
98
- &.bmpui-off {
108
+ &.bmpui-off .bmpui-label {
99
109
  mask-image: var(--npo-player-icon-airplay);
100
110
  }
101
111
 
102
- &.bmpui-on {
112
+ &.bmpui-on .bmpui-label {
103
113
  mask-image: var(--npo-player-icon-airplay-active);
104
114
  }
105
115
  }
106
116
 
107
117
  /* Icon PIP */
108
118
  .bmpui-ui-piptogglebutton {
109
- &.bmpui-off {
119
+ &.bmpui-off .bmpui-label {
110
120
  mask-image: var(--npo-player-icon-pip);
111
121
  }
112
122
 
113
- &.bmpui-on {
123
+ &.bmpui-on .bmpui-label {
114
124
  mask-image: var(--npo-player-icon-pip-active);
115
125
  }
116
126
  }
117
127
 
118
128
  /* Icon Volume */
119
- .bmpui-ui-volumetogglebutton.bmpui-muted {
129
+ .bmpui-ui-volumetogglebutton.bmpui-muted .bmpui-label {
120
130
  mask-image: var(--npo-player-icon-volume-muted);
121
131
  }
122
132
 
123
- .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='1'],
124
- .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='2'],
125
- .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='3'],
126
- .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='4'] {
133
+ .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='1'] .bmpui-label,
134
+ .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='2'] .bmpui-label,
135
+ .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='3'] .bmpui-label,
136
+ .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='4'] .bmpui-label {
127
137
  mask-image: var(--npo-player-icon-volume-1);
128
138
  }
129
139
 
130
- .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='5'],
131
- .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='6'],
132
- .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='7'] {
140
+ .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='5'] .bmpui-label,
141
+ .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='6'] .bmpui-label,
142
+ .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='7'] .bmpui-label {
133
143
  mask-image: var(--npo-player-icon-volume-2);
134
144
  }
135
145
 
136
- .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='8'],
137
- .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='9'],
138
- .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='10'] {
146
+ .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='8'] .bmpui-label,
147
+ .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='9'] .bmpui-label,
148
+ .bmpui-ui-volumetogglebutton.bmpui-unmuted[data-bmpui-volume-level-tens='10'] .bmpui-label {
139
149
  mask-image: var(--npo-player-icon-volume-3);
140
150
  }
@@ -83,8 +83,8 @@
83
83
  &.bmpui-player-state-prepared,
84
84
  &.bmpui-player-state-prepared.bmpui-layout-max-width-400,
85
85
  &.bmpui-player-state-prepared.bmpui-layout-max-width-600,
86
- &.show-nicam:not(.bmpui-player-state-paused).bmpui-layout-max-width-400,
87
- &.show-nicam:not(.bmpui-player-state-paused).bmpui-layout-max-width-600 {
86
+ &.bmpui-show-nicam:not(.bmpui-player-state-paused).bmpui-layout-max-width-400,
87
+ &.bmpui-show-nicam:not(.bmpui-player-state-paused).bmpui-layout-max-width-600 {
88
88
  .bmpui-metadata,
89
89
  .bmpui-metadata.bmpui-title-bar {
90
90
  display: block;
@@ -97,4 +97,11 @@
97
97
  display: none;
98
98
  }
99
99
  }
100
+
101
+ &.bmpui-settings-panel-shown.bmpui-layout-max-width-400,
102
+ &.bmpui-settings-panel-shown.bmpui-layout-max-width-600 {
103
+ .bmpui-metadata {
104
+ padding-top: 40px;
105
+ }
106
+ }
100
107
  }
@@ -29,12 +29,16 @@
29
29
 
30
30
  .ui-playNextButton {
31
31
  background-color: var(--npo-player-textcolor);
32
- width: 200px;
33
32
  white-space: nowrap;
34
33
 
35
34
  .bmpui-label {
36
35
  color: var(--npo-player-graycolor-dark);
37
36
  }
37
+
38
+ &:focus-visible {
39
+ @include focusStyle();
40
+ outline-color: var(--npo-player-primarycolor);
41
+ }
38
42
  }
39
43
  }
40
44
  }
@@ -24,7 +24,7 @@
24
24
  }
25
25
  }
26
26
 
27
- .bmpui-ui-playbacktogglebutton.bmpui-off {
27
+ .bmpui-ui-playbacktogglebutton.bmpui-off .bmpui-label {
28
28
  mask-image: var(--npo-player-icon-replay);
29
29
  }
30
30
  }
@@ -5,6 +5,11 @@ $seekbar-border-radius: 2px;
5
5
  position: relative;
6
6
  cursor: default;
7
7
 
8
+ &:focus-visible {
9
+ @include focusStyle(2px);
10
+ border-radius: 2px;
11
+ }
12
+
8
13
  .bmpui-seekbar {
9
14
  cursor: pointer;
10
15
  height: $seekbar-height;
@@ -28,6 +33,14 @@ $seekbar-border-radius: 2px;
28
33
  background-color: var(--npo-player-seekbar-background);
29
34
  opacity: 0.75;
30
35
  }
36
+
37
+
38
+ .bmpui-npo-livestream-marker{
39
+ background-color: var(--npo-player-seekbar-playbackposition-background);
40
+ border-right: var(--npo-player-secondarycolor) 3px solid;
41
+ pointer-events: none;
42
+ }
43
+
31
44
 
32
45
  .bmpui-seekbar-playbackposition {
33
46
  background: var(--npo-player-seekbar-playbackposition-background);