@gcorevideo/player 2.20.22 → 2.21.3

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 (89) hide show
  1. package/assets/audio-selector/style.scss +48 -82
  2. package/assets/audio-selector/track-selector.ejs +3 -3
  3. package/assets/bottom-gear/bottomgear.ejs +10 -12
  4. package/assets/bottom-gear/gear-sub-menu.scss +0 -15
  5. package/assets/bottom-gear/gear.scss +3 -32
  6. package/assets/media-control/media-control.ejs +5 -25
  7. package/assets/media-control/media-control.scss +114 -34
  8. package/assets/media-control/width370.scss +35 -109
  9. package/assets/picture-in-picture/button.ejs +1 -1
  10. package/assets/picture-in-picture/button.scss +5 -4
  11. package/assets/subtitles/combobox.ejs +7 -9
  12. package/assets/subtitles/style.scss +8 -15
  13. package/dist/core.js +151 -23
  14. package/dist/index.css +897 -1000
  15. package/dist/index.js +416 -438
  16. package/dist/player.d.ts +19 -16
  17. package/dist/plugins/index.css +1454 -1557
  18. package/dist/plugins/index.js +826 -23550
  19. package/docs/api/player.audioselector.md +4 -59
  20. package/docs/api/player.md +1 -1
  21. package/docs/api/player.mediacontrol.getelement.md +5 -0
  22. package/docs/api/player.mediacontrol.md +14 -0
  23. package/docs/api/{player.audioselector.updatecurrenttrack.md → player.mediacontrol.putelement.md} +7 -7
  24. package/docs/api/player.mediacontrolelement.md +1 -1
  25. package/docs/api/{player.audioselector.starttrackswitch.md → player.pictureinpicture.attributes.md} +5 -7
  26. package/docs/api/player.pictureinpicture.md +45 -0
  27. package/lib/playback/BasePlayback.d.ts +1 -1
  28. package/lib/playback/BasePlayback.d.ts.map +1 -1
  29. package/lib/playback/BasePlayback.js +3 -1
  30. package/lib/playback/HTML5Video.d.ts +4 -0
  31. package/lib/playback/HTML5Video.d.ts.map +1 -1
  32. package/lib/playback/HTML5Video.js +53 -4
  33. package/lib/playback/dash-playback/DashPlayback.d.ts +5 -0
  34. package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
  35. package/lib/playback/dash-playback/DashPlayback.js +48 -4
  36. package/lib/playback/hls-playback/HlsPlayback.d.ts +31 -25
  37. package/lib/playback/hls-playback/HlsPlayback.d.ts.map +1 -1
  38. package/lib/playback/hls-playback/HlsPlayback.js +47 -14
  39. package/lib/playback.types.d.ts +5 -0
  40. package/lib/playback.types.d.ts.map +1 -1
  41. package/lib/plugins/audio-selector/AudioSelector.d.ts +12 -11
  42. package/lib/plugins/audio-selector/AudioSelector.d.ts.map +1 -1
  43. package/lib/plugins/audio-selector/AudioSelector.js +65 -185
  44. package/lib/plugins/bottom-gear/BottomGear.d.ts +2 -2
  45. package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
  46. package/lib/plugins/bottom-gear/BottomGear.js +12 -10
  47. package/lib/plugins/level-selector/LevelSelector.js +1 -1
  48. package/lib/plugins/media-control/MediaControl.d.ts +3 -4
  49. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
  50. package/lib/plugins/media-control/MediaControl.js +23 -13
  51. package/lib/plugins/picture-in-picture/PictureInPicture.d.ts +3 -0
  52. package/lib/plugins/picture-in-picture/PictureInPicture.d.ts.map +1 -1
  53. package/lib/plugins/picture-in-picture/PictureInPicture.js +6 -1
  54. package/lib/plugins/playback-rate/PlaybackRate.d.ts +1 -0
  55. package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
  56. package/lib/plugins/playback-rate/PlaybackRate.js +1 -0
  57. package/lib/plugins/source-controller/SourceController.d.ts.map +1 -1
  58. package/lib/plugins/source-controller/SourceController.js +0 -1
  59. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts +0 -2
  60. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts.map +1 -1
  61. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.js +1 -18
  62. package/lib/plugins/subtitles/Subtitles.d.ts +21 -19
  63. package/lib/plugins/subtitles/Subtitles.d.ts.map +1 -1
  64. package/lib/plugins/subtitles/Subtitles.js +121 -151
  65. package/lib/testUtils.d.ts.map +1 -1
  66. package/lib/testUtils.js +2 -0
  67. package/package.json +1 -1
  68. package/src/playback/BasePlayback.ts +4 -1
  69. package/src/playback/HTML5Video.ts +57 -4
  70. package/src/playback/dash-playback/DashPlayback.ts +64 -6
  71. package/src/playback/hls-playback/HlsPlayback.ts +82 -40
  72. package/src/playback.types.ts +6 -0
  73. package/src/plugins/audio-selector/AudioSelector.ts +84 -278
  74. package/src/plugins/bottom-gear/BottomGear.ts +14 -11
  75. package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +1 -3
  76. package/src/plugins/bottom-gear/__tests__/__snapshots__/BottomGear.test.ts.snap +14 -37
  77. package/src/plugins/level-selector/LevelSelector.ts +1 -1
  78. package/src/plugins/media-control/MediaControl.ts +54 -32
  79. package/src/plugins/picture-in-picture/PictureInPicture.ts +7 -1
  80. package/src/plugins/playback-rate/PlaybackRate.ts +1 -0
  81. package/src/plugins/source-controller/SourceController.ts +0 -1
  82. package/src/plugins/spinner-three-bounce/SpinnerThreeBounce.ts +1 -20
  83. package/src/plugins/subtitles/Subtitles.ts +144 -179
  84. package/src/testUtils.ts +2 -0
  85. package/src/typings/globals.d.ts +19 -0
  86. package/temp/player.api.json +102 -143
  87. package/tsconfig.tsbuildinfo +1 -1
  88. package/assets/media-control/plugins.scss +0 -94
  89. package/docs/api/player.audioselector.highlightcurrenttrack.md +0 -18
@@ -1,21 +1,22 @@
1
- *, :focus, :visited {
2
- outline: none!important;
1
+ *,
2
+ :focus,
3
+ :visited {
4
+ outline: none !important;
3
5
  }
4
6
 
5
- .audio_selector[data-track-selector] {
6
- float: right;
7
- margin-top: 4px;
7
+ .media-control-audio-tracks {
8
8
  position: relative;
9
- width: 50px;
10
- font-family: Roboto, "Open Sans", Arial, sans-serif;
11
9
 
12
10
  button {
13
11
  background-color: transparent;
14
12
  color: #fff;
15
13
  -webkit-font-smoothing: antialiased;
16
14
  border: none;
17
- font-size: 14px;
18
15
  cursor: pointer;
16
+ display: flex;
17
+ align-items: center;
18
+
19
+ padding: 0;
19
20
 
20
21
  .audio-text {
21
22
  text-overflow: ellipsis;
@@ -25,13 +26,11 @@
25
26
  background-color: transparent;
26
27
  -webkit-font-smoothing: antialiased;
27
28
  border: none;
28
- font-size: 14px;
29
29
  cursor: pointer;
30
- padding-top: 5px;
31
30
  }
32
31
 
33
32
  &:hover {
34
- color: #c9c9c9;
33
+ color: white;
35
34
  }
36
35
 
37
36
  &.changing {
@@ -41,23 +40,28 @@
41
40
  span.audio-arrow {
42
41
  width: 9px;
43
42
  height: 6px;
44
- margin-top: 11px;
45
43
  margin-left: 5px;
46
44
  }
47
45
  }
48
46
 
49
- &> ul {
47
+ &>ul {
50
48
  max-width: 114px;
51
49
  list-style-type: none;
52
50
  position: absolute;
53
- bottom: 25px;
54
- border: 1px solid black;
55
51
  display: none;
56
- background-color: #e6e6e6;
52
+ background-color: rgb(74 74 74 / 60%);
53
+ border: none;
54
+ min-width: 60px;
55
+ border-radius: 4px;
56
+ bottom: 40px;
57
+ right: -2px;
57
58
  }
58
59
 
59
60
  li {
60
- font-size: 10px;
61
+ font-size: var(--font-size-media-controls-dropdown);
62
+
63
+ text-align: right;
64
+ height: 30px;
61
65
 
62
66
  &[data-title] {
63
67
  background-color: #c3c2c2;
@@ -65,92 +69,54 @@
65
69
  }
66
70
 
67
71
  a {
68
- color: #444;
69
- padding: 2px 10px;
70
72
  display: block;
71
73
  text-decoration: none;
72
74
  text-overflow: ellipsis;
73
75
  overflow: hidden;
74
76
  white-space: nowrap;
75
77
 
78
+ height: 30px;
79
+ padding: 5px 10px;
80
+ color: #fffffe;
81
+
76
82
  &:hover {
77
- background-color: #555;
83
+ text-decoration: none;
84
+ background-color: rgb(0 0 0 / 40%);
78
85
  color: white;
79
-
80
- a {
81
- color: white;
82
- text-decoration: none;
83
- }
84
86
  }
87
+
85
88
  }
86
89
 
87
90
  &.current a {
88
91
  color: #f00;
89
92
  }
90
93
 
91
- }
92
- }
93
-
94
- .audio_selector[data-track-selector] {
95
- width: auto;
96
- margin-top: 7px;
97
- margin-right: 20px;
98
-
99
- button[data-level-selector-button],
100
- button[data-track-selector-button] {
101
- display: flex;
102
- justify-content: center;
103
- padding: 0;
104
-
105
- &:hover {
106
- color: white;
107
- }
108
- }
109
-
110
- ul {
111
- background-color: rgb(74 74 74 / 60%);
112
- border: none;
113
- min-width: 60px;
114
- transform: rotate(180deg);
115
- border-radius: 4px;
116
- bottom: 40px;
117
- right: -2px;
118
-
119
- li {
120
- transform: rotate(-180deg);
121
- font-size: 16px;
122
- text-align: right;
123
- height: 30px;
124
-
94
+ &:first-child {
125
95
  a {
126
- height: 30px;
127
- padding: 5px 10px;
128
- color: #fffffe;
129
-
130
- &:hover {
131
- background-color: rgb(0 0 0 / 40%);
132
- }
133
- }
134
-
135
- &:first-child {
136
- a {
137
- border-bottom-left-radius: 4px;
138
- border-bottom-right-radius: 4px;
139
- }
96
+ border-bottom-left-radius: 4px;
97
+ border-bottom-right-radius: 4px;
140
98
  }
99
+ }
141
100
 
142
- &:last-child {
143
- a {
144
- border-top-left-radius: 4px;
145
- border-top-right-radius: 4px;
146
- }
101
+ &:last-child {
102
+ a {
103
+ border-top-left-radius: 4px;
104
+ border-top-right-radius: 4px;
147
105
  }
148
106
  }
149
107
  }
150
108
  }
151
109
 
152
110
  @keyframes pulse {
153
- 0% {color: #fff;}
154
- 50% {color: #ff0101}
155
- 100% {color: #B80000;}
156
- }
111
+ 0% {
112
+ color: #fff;
113
+ }
114
+
115
+ 50% {
116
+ color: #ff0101
117
+ }
118
+
119
+ 100% {
120
+ color: #B80000;
121
+ }
122
+ }
@@ -2,10 +2,10 @@
2
2
  <span class='audio-text'><%= title %></span> <span class="audio-arrow"></span>
3
3
  </button>
4
4
  <ul class='gcore-skin-bg-color'>
5
- <% for (var i = 0; i < tracks.length; i++) { %>
5
+ <% for (const track of tracks) { %>
6
6
  <li>
7
- <a href="#" class='gcore-skin-text-color' data-track-selector-select="<%= tracks[i].id %>">
8
- <%= tracks[i].label || tracks[i].name %>
7
+ <a href="#" class='gcore-skin-text-color' data-track-selector-select="<%= track.id %>">
8
+ <%= track.label %>
9
9
  </a>
10
10
  </li>
11
11
  <% }; %>
@@ -1,12 +1,10 @@
1
- <div class="media-control-gear" data-<%= name %>>
2
- <button type="button" class="button-gear gplayer-lite-btn gcore-skin-button-color" data-gear-button="-1">
3
- <span class="gear-icon"><%= icon %></span>
4
- </button>
5
- <div class="gear-wrapper gcore-skin-bg-color">
6
- <ul class="gear-options-list">
7
- <% items.forEach(function (gear) { %>
8
- <li data-<%= gear %>></li>
9
- <% }); %>
10
- </ul>
11
- </div>
12
- </div>
1
+ <button type="button" class="button-gear media-control-button gplayer-lite-btn gcore-skin-button-color gear-icon" data-gear-button="-1">
2
+ <%= icon %>
3
+ </button>
4
+ <div class="gear-wrapper gcore-skin-bg-color">
5
+ <ul class="gear-options-list">
6
+ <% for (const item of items) { %>
7
+ <li data-<%= item %>></li>
8
+ <% } %>
9
+ </ul>
10
+ </div>
@@ -77,19 +77,4 @@
77
77
  }
78
78
  }
79
79
  }
80
-
81
- svg {
82
- height: 20px;
83
- }
84
80
  }
85
-
86
-
87
- // &.changing {
88
- // animation: pulse 0.5s infinite alternate;
89
- // }
90
-
91
- // @keyframes pulse {
92
- // 0% {color: #fff;}
93
- // 50% {color: #ff0101}
94
- // 100% {color: #B80000;}
95
- // }
@@ -1,17 +1,7 @@
1
1
  .media-control-skin-1[data-media-control-skin-1] {
2
2
  .media-control-gear {
3
- float: right;
4
- font-family: Roboto, "Open Sans", Arial, sans-serif;
5
-
6
- .button-gear {
7
- height: 40px;
8
- width: 40px;
9
- padding-right: 20px;
10
-
11
- svg {
12
- height: 20px;
13
- }
14
- }
3
+ order: 99;
4
+ height: 20px;
15
5
 
16
6
  .gear-wrapper {
17
7
  position: absolute;
@@ -19,10 +9,6 @@
19
9
  bottom: 52px;
20
10
  display: none;
21
11
 
22
- // background: var(--primary-background-color);
23
- // background-color: rgb(200 0 0 / 50%);
24
-
25
- //background-color: rgb(0 0 0 / 70%);
26
12
  width: 250px;
27
13
  min-height: 48px;
28
14
  z-index: 9999;
@@ -37,7 +23,6 @@
37
23
  }
38
24
 
39
25
  .gear-option {
40
- //color: var(--primary-text-color);
41
26
  margin: 0;
42
27
  text-align: left;
43
28
  line-height: 22px;
@@ -45,16 +30,6 @@
45
30
  width: 250px;
46
31
  font-size: 12px;
47
32
 
48
- // &:hover {
49
- // color: var(--hover-text-color);
50
-
51
- // svg {
52
- // path {
53
- // fill: var(--hover-text-color);
54
- // }
55
- // }
56
- // }
57
-
58
33
  .gear-option_arrow-right-icon {
59
34
  float: right;
60
35
  margin-right: -14px;
@@ -67,13 +42,9 @@
67
42
 
68
43
  svg {
69
44
  height: 20px;
70
-
71
- // path {
72
- // fill: var(--primary-text-color);
73
- // }
74
45
  }
75
46
  }
76
47
  }
77
48
  }
78
49
  }
79
- }
50
+ }
@@ -36,24 +36,12 @@
36
36
  <% var renderIndicator = function(name) { %>
37
37
  <div class="media-control-indicator gcore-skin-text-color" data-<%= name %>></div>
38
38
  <% }; %>
39
- <% var renderBottomGear = function(name) { %>
40
- <div class="media-control-bottomgear" data-<%= name %>></div>
41
- <% }; %>
42
- <% var renderPIP = function(name) { %>
43
- <div class="media-control-pip" data-<%= name %>></div>
44
- <% }; %>
45
39
  <% var renderQuality = function(name) { %>
46
40
  <div class="media-control-quality" data-<%= name %>></div>
47
41
  <% }; %>
48
42
  <% var renderNerd = function(name) { %>
49
43
  <div class="media-control-nerd" data-<%= name %>></div>
50
44
  <% }; %>
51
- <% var renderAudioTracks = function(name) { %>
52
- <div class="media-control-audio-tracks" data-<%= name %>></div>
53
- <% }; %>
54
- <% var renderSubtitles = function(name) { %>
55
- <div class="media-control-subtitles" data-<%= name %>></div>
56
- <% }; %>
57
45
  <% var renderMultiCamera = function(name) { %>
58
46
  <div class="media-control-multicamera" data-<%= name %>></div>
59
47
  <% }; %>
@@ -92,39 +80,31 @@
92
80
  renderIndicator(setting);
93
81
  } else if (setting === "quality") {
94
82
  renderQuality(setting)
95
- } else if (setting === "bottomgear") {
96
- renderBottomGear(setting)
97
- } else if (setting === "pip") {
98
- renderPIP(setting)
99
83
  } else if (setting === "nerd") {
100
84
  renderNerd(setting)
101
85
  } else if (setting === "multicamera") {
102
86
  renderMultiCamera(setting)
103
- } else if (setting === "subtitles") {
104
- renderSubtitles(setting)
105
87
  } else if (setting === "playbackrate") {
106
88
  renderPlaybackRate(setting)
107
89
  } else if (setting === "vr") {
108
90
  renderVR(setting)
109
91
  } else if (setting === "clipsText") {
110
92
  renderClipsText(setting)
111
- } else if (setting === "audiotracks") {
112
- renderAudioTracks(setting)
113
93
  } else {
114
94
  renderButton(setting);
115
95
  }
116
96
  });
117
97
  }; %>
118
- <% if (settings.default && settings.default.length) { %>
119
- <div class="media-control-center-panel" data-media-control>
120
- <% render(settings.default); %>
121
- </div>
122
- <% } %>
123
98
  <% if (settings.left && settings.left.length) { %>
124
99
  <div class="media-control-left-panel" data-media-control>
125
100
  <% render(settings.left); %>
126
101
  </div>
127
102
  <% } %>
103
+ <% if (settings.default && settings.default.length) { %>
104
+ <div class="media-control-center-panel" data-media-control>
105
+ <% render(settings.default); %>
106
+ </div>
107
+ <% } %>
128
108
  <% if (settings.right && settings.right.length) { %>
129
109
  <div class="media-control-right-panel" data-media-control>
130
110
  <% render(settings.right); %>
@@ -2,7 +2,11 @@
2
2
  @use "container";
3
3
  @use "width270";
4
4
  @use "width370";
5
- // @import "https://fonts.googleapis.com/css?family=Roboto";
5
+
6
+ :root {
7
+ --font-size-media-controls: 14px;
8
+ --font-size-media-controls-dropdown: 16px;
9
+ }
6
10
 
7
11
  .media-control-skin-1[data-media-control-skin-1] {
8
12
  position: absolute;
@@ -11,6 +15,7 @@
11
15
  z-index: 9999;
12
16
  pointer-events: none;
13
17
  font-family: Roboto, "Open Sans", Arial, sans-serif;
18
+ font-size: var(--font-size-media-controls);
14
19
 
15
20
  &.dragging {
16
21
  pointer-events: auto;
@@ -55,30 +60,32 @@
55
60
  position: absolute;
56
61
  bottom: 0;
57
62
  width: 100%;
63
+ padding: 0 12px 0 8px;
58
64
  height: var(--bottom-panel);
59
- font-size: 0;
60
65
  vertical-align: middle;
61
66
  pointer-events: auto;
62
67
  transition: bottom 0.4s ease-out;
63
-
64
- .media-control-left-panel[data-media-control-skin-1] {
65
- position: absolute;
66
- top: 0;
67
- left: 4px;
68
- height: 100%;
68
+ display: flex;
69
+ justify-content: space-between;
70
+
71
+ .media-control-left-panel {
72
+ display: flex;
73
+ align-items: center;
74
+ gap: 0.5rem;
75
+ justify-content: flex-start;
69
76
  }
70
77
 
71
- .media-control-center-panel[data-media-control-skin-1] {
78
+ .media-control-center-panel {
72
79
  height: 100%;
73
80
  text-align: center;
74
81
  line-height: var(--bottom-panel);
75
82
  }
76
83
 
77
- .media-control-right-panel[data-media-control-skin-1] {
78
- position: absolute;
79
- top: 0;
80
- right: 4px;
81
- height: 100%;
84
+ .media-control-right-panel {
85
+ display: flex;
86
+ align-items: center;
87
+ gap: 1rem;
88
+ justify-content: flex-end;
82
89
  }
83
90
 
84
91
  button.media-control-button {
@@ -87,8 +94,8 @@
87
94
  padding: 0;
88
95
  cursor: pointer;
89
96
  display: inline-block;
90
- height: 40px;
91
- width: 20px;
97
+ height: 20px;
98
+ width: 24px;
92
99
 
93
100
  svg {
94
101
  height: 20px;
@@ -119,9 +126,9 @@
119
126
 
120
127
  &[data-fullscreen] {
121
128
  float: right;
129
+ order: 100;
122
130
  background-color: transparent;
123
131
  border: 0;
124
- margin-right: 12px;
125
132
  height: 40px;
126
133
  }
127
134
 
@@ -133,20 +140,13 @@
133
140
  float: right;
134
141
  height: 100%;
135
142
  }
136
-
137
- &[data-playpause], &[data-playstop] {
138
- float: left;
139
- margin-left: 8px;
140
- margin-right: 14px;
141
- }
142
143
  }
143
144
 
144
145
  .media-control-indicator {
146
+
145
147
  &[data-position],
146
148
  &[data-duration] {
147
- display: inline-block;
148
- float: left;
149
- font-size: 14px;
149
+ display: flex;
150
150
  color: white;
151
151
  cursor: default;
152
152
  line-height: var(--bottom-panel);
@@ -154,7 +154,7 @@
154
154
  }
155
155
 
156
156
  &[data-position] {
157
- margin: 1px 6px 0 7px;
157
+ margin: 1px 0 0 7px;
158
158
  }
159
159
 
160
160
  &[data-duration] {
@@ -180,7 +180,6 @@
180
180
  overflow: hidden;
181
181
  display: inline-block;
182
182
  float: left;
183
- font-size: 14px;
184
183
  color: white;
185
184
  cursor: default;
186
185
  line-height: var(--bottom-panel);
@@ -240,7 +239,7 @@
240
239
  }
241
240
  }
242
241
 
243
- .bar-container[data-seekbar].seek-disabled + .bar-scrubber[data-seekbar] {
242
+ .bar-container[data-seekbar].seek-disabled+.bar-scrubber[data-seekbar] {
244
243
  cursor: default;
245
244
  display: none;
246
245
  }
@@ -267,15 +266,13 @@
267
266
  }
268
267
 
269
268
  .drawer-container[data-volume] {
270
- float: left;
271
- display: inline-block;
269
+ display: flex;
270
+ justify-content: flex-start;
272
271
  height: var(--bottom-panel);
273
272
  cursor: pointer;
274
273
  box-sizing: border-box;
275
- margin-right: 20px;
276
274
 
277
275
  .drawer-icon-container[data-volume] {
278
- float: left;
279
276
  bottom: 0;
280
277
 
281
278
  .drawer-icon[data-volume] {
@@ -303,7 +300,6 @@
303
300
  }
304
301
 
305
302
  .bar-container[data-volume] {
306
- float: left;
307
303
  position: relative;
308
304
  margin-left: 10px;
309
305
  top: 8px;
@@ -388,3 +384,87 @@
388
384
  }
389
385
  }
390
386
  }
387
+
388
+ /* TODO distribute between plugins' styles */
389
+ .media-control-skin-1[data-media-control-skin-1] {
390
+ .media-control-subtitles {
391
+
392
+ button[data-subtitles-button] {
393
+ display: flex;
394
+ justify-content: center;
395
+ padding: 0;
396
+ align-items: center;
397
+
398
+ &:hover {
399
+ color: white;
400
+ }
401
+ }
402
+
403
+ ul { // TODO extract common styles
404
+ background-color: rgb(74 74 74 / 60%);
405
+ border: none;
406
+ width: auto;
407
+ border-radius: 4px;
408
+ bottom: 52px;
409
+ margin-left: -28px;
410
+
411
+ li {
412
+ font-size: 16px;
413
+ text-align: center;
414
+ white-space: nowrap;
415
+ height: 30px;
416
+
417
+ a {
418
+ height: 30px;
419
+ padding: 5px 10px;
420
+ color: #fffffe;
421
+
422
+ &:hover {
423
+ background-color: rgb(0 0 0 / 40%);
424
+ }
425
+ }
426
+
427
+ &.current a {
428
+ background-color: rgb(0 0 0 / 40%);
429
+ }
430
+
431
+ &:first-child {
432
+ a {
433
+ border-bottom-left-radius: 4px;
434
+ border-bottom-right-radius: 4px;
435
+ }
436
+ }
437
+
438
+ &:last-child {
439
+ a {
440
+ border-top-left-radius: 4px;
441
+ border-top-right-radius: 4px;
442
+ }
443
+ }
444
+ }
445
+ }
446
+ }
447
+
448
+ .seek-time[data-seek-time] {
449
+ height: 26px;
450
+ line-height: 26px;
451
+ bottom: 52px;
452
+ border-radius: 3px;
453
+ background-color: rgb(74 74 74 / 70%);
454
+
455
+ span {
456
+ letter-spacing: 0.8px;
457
+ font-size: 14px;
458
+ font-family: Roboto, "Open Sans", Arial, sans-serif;
459
+ }
460
+
461
+ span[data-seek-time] {
462
+ padding-left: 8px;
463
+ padding-right: 8px;
464
+ }
465
+
466
+ span[data-duration] {
467
+ display: none !important;
468
+ }
469
+ }
470
+ }