@gcorevideo/player 2.21.3 → 2.21.6

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 (98) hide show
  1. package/assets/audio-selector/style.scss +1 -1
  2. package/assets/audio-selector/track-selector.ejs +3 -3
  3. package/assets/bottom-gear/bottomgear.ejs +2 -2
  4. package/assets/dvr-controls/dvr_controls.scss +7 -25
  5. package/assets/dvr-controls/index.ejs +2 -2
  6. package/assets/media-control/container.scss +1 -1
  7. package/assets/media-control/media-control.ejs +1 -6
  8. package/assets/media-control/media-control.scss +14 -7
  9. package/assets/media-control/width270.scss +1 -1
  10. package/assets/media-control/width370.scss +5 -5
  11. package/assets/playback-rate/button.ejs +2 -2
  12. package/assets/playback-rate/list.ejs +4 -4
  13. package/assets/style/theme.scss +1 -1
  14. package/assets/subtitles/combobox.ejs +5 -5
  15. package/assets/subtitles/string.ejs +1 -1
  16. package/assets/subtitles/style.scss +2 -2
  17. package/dist/core.js +2 -1
  18. package/dist/index.css +993 -993
  19. package/dist/index.js +199 -178
  20. package/dist/player.d.ts +141 -119
  21. package/dist/plugins/index.css +1118 -1118
  22. package/dist/plugins/index.js +191 -173
  23. package/docs/api/player.bottomgear.getelement.md +2 -2
  24. package/docs/api/player.bottomgear.md +1 -1
  25. package/docs/api/{player.subtitles.hide.md → player.closedcaptions.hide.md} +2 -2
  26. package/docs/api/{player.subtitles.md → player.closedcaptions.md} +11 -11
  27. package/docs/api/{player.subtitles.show.md → player.closedcaptions.show.md} +2 -2
  28. package/docs/api/player.closedcaptionspluginsettings.md +13 -0
  29. package/docs/api/player.gearitemelement.md +6 -4
  30. package/docs/api/player.gearoptionsitem.md +16 -0
  31. package/docs/api/player.md +48 -12
  32. package/docs/api/player.mediacontrol.putelement.md +2 -2
  33. package/docs/api/player.mediacontrolelement.md +1 -1
  34. package/docs/api/player.playbackrate.md +1 -1
  35. package/docs/api/player.subtitlespluginsettings.md +18 -0
  36. package/docs/api/player.texttrackitem.id.md +11 -0
  37. package/docs/api/player.texttrackitem.md +87 -0
  38. package/docs/api/player.texttrackitem.name.md +11 -0
  39. package/docs/api/player.texttrackitem.track.md +11 -0
  40. package/lib/index.d.ts +1 -1
  41. package/lib/index.js +1 -1
  42. package/lib/index.plugins.d.ts +2 -1
  43. package/lib/index.plugins.d.ts.map +1 -1
  44. package/lib/index.plugins.js +2 -1
  45. package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
  46. package/lib/playback/dash-playback/DashPlayback.js +1 -0
  47. package/lib/plugins/audio-selector/AudioSelector.d.ts +2 -3
  48. package/lib/plugins/audio-selector/AudioSelector.d.ts.map +1 -1
  49. package/lib/plugins/audio-selector/AudioSelector.js +6 -7
  50. package/lib/plugins/bottom-gear/BottomGear.d.ts +6 -2
  51. package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
  52. package/lib/plugins/bottom-gear/BottomGear.js +2 -1
  53. package/lib/plugins/dvr-controls/DvrControls.d.ts +0 -3
  54. package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
  55. package/lib/plugins/dvr-controls/DvrControls.js +13 -38
  56. package/lib/plugins/media-control/MediaControl.d.ts +14 -18
  57. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
  58. package/lib/plugins/media-control/MediaControl.js +105 -72
  59. package/lib/plugins/picture-in-picture/PictureInPicture.d.ts +1 -0
  60. package/lib/plugins/picture-in-picture/PictureInPicture.d.ts.map +1 -1
  61. package/lib/plugins/picture-in-picture/PictureInPicture.js +4 -4
  62. package/lib/plugins/playback-rate/PlaybackRate.d.ts +0 -1
  63. package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
  64. package/lib/plugins/playback-rate/PlaybackRate.js +23 -14
  65. package/lib/plugins/subtitles/ClosedCaptions.d.ts +118 -0
  66. package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -0
  67. package/lib/plugins/subtitles/ClosedCaptions.js +348 -0
  68. package/lib/plugins/subtitles/Subtitles.d.ts +12 -9
  69. package/lib/plugins/subtitles/Subtitles.d.ts.map +1 -1
  70. package/lib/plugins/subtitles/Subtitles.js +31 -32
  71. package/lib/testUtils.d.ts +26 -19
  72. package/lib/testUtils.d.ts.map +1 -1
  73. package/lib/testUtils.js +30 -45
  74. package/package.json +1 -1
  75. package/src/index.plugins.ts +2 -1
  76. package/src/index.ts +1 -1
  77. package/src/playback/dash-playback/DashPlayback.ts +1 -0
  78. package/src/plugins/audio-selector/AudioSelector.ts +9 -8
  79. package/src/plugins/bottom-gear/BottomGear.ts +11 -4
  80. package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +1 -1
  81. package/src/plugins/bottom-gear/__tests__/__snapshots__/BottomGear.test.ts.snap +2 -2
  82. package/src/plugins/dvr-controls/DvrControls.ts +16 -44
  83. package/src/plugins/dvr-controls/__tests__/DvrControls.test.ts +18 -22
  84. package/src/plugins/dvr-controls/__tests__/__snapshots__/DvrControls.test.ts.snap +6 -30
  85. package/src/plugins/media-control/MediaControl.ts +130 -85
  86. package/src/plugins/media-control/__tests__/MediaControl.test.ts +132 -0
  87. package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +299 -0
  88. package/src/plugins/picture-in-picture/PictureInPicture.ts +5 -5
  89. package/src/plugins/playback-rate/PlaybackRate.ts +142 -100
  90. package/src/plugins/playback-rate/__tests__/PlaybackRate.test.ts +65 -0
  91. package/src/plugins/playback-rate/__tests__/__snapshots__/PlaybackRate.test.ts.snap +11 -0
  92. package/src/plugins/subtitles/{Subtitles.ts → ClosedCaptions.ts} +42 -34
  93. package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +58 -0
  94. package/src/plugins/subtitles/__tests__/__snapshots__/ClosedCaptions.test.ts.snap +25 -0
  95. package/src/testUtils.ts +30 -45
  96. package/temp/player.api.json +269 -89
  97. package/tsconfig.tsbuildinfo +1 -1
  98. package/src/plugins/index.ts +0 -39
@@ -4,7 +4,7 @@
4
4
  outline: none !important;
5
5
  }
6
6
 
7
- .media-control-audio-tracks {
7
+ .media-control-audiotracks {
8
8
  position: relative;
9
9
 
10
10
  button {
@@ -1,10 +1,10 @@
1
- <button data-track-selector-button class='gcore-skin-button-color'>
1
+ <button data-audiotracks-button class='gcore-skin-button-color' id="audiotracks-button">
2
2
  <span class='audio-text'><%= title %></span> <span class="audio-arrow"></span>
3
3
  </button>
4
- <ul class='gcore-skin-bg-color'>
4
+ <ul class='gcore-skin-bg-color' id="audiotracks-select">
5
5
  <% for (const track of tracks) { %>
6
6
  <li>
7
- <a href="#" class='gcore-skin-text-color' data-track-selector-select="<%= track.id %>">
7
+ <a href="#" class='gcore-skin-text-color' data-audiotracks-select="<%= track.id %>">
8
8
  <%= track.label %>
9
9
  </a>
10
10
  </li>
@@ -1,8 +1,8 @@
1
- <button type="button" class="button-gear media-control-button gplayer-lite-btn gcore-skin-button-color gear-icon" data-gear-button="-1">
1
+ <button type="button" class="button-gear media-control-button gplayer-lite-btn gcore-skin-button-color gear-icon" data-gear-button="-1" id="gear-button">
2
2
  <%= icon %>
3
3
  </button>
4
4
  <div class="gear-wrapper gcore-skin-bg-color">
5
- <ul class="gear-options-list">
5
+ <ul class="gear-options-list" id="gear-options">
6
6
  <% for (const item of items) { %>
7
7
  <li data-<%= item %>></li>
8
8
  <% } %>
@@ -1,15 +1,11 @@
1
- $live-color: #ff0101;
2
- $dvr-color: #fff;
3
- $vod-color: #005aff;
4
1
  $disabled-opacity: 0.3;
5
2
  $control-height: 32px;
6
3
  $circle-radius: 3.5px;
7
4
  $bottom-panel: 40px;
8
5
 
9
- .dvr-controls[data-dvr-controls] {
6
+ .dvr-controls[data-dvr] {
10
7
  display: inline-block;
11
- float: left;
12
- color: $dvr-color;
8
+ color: var(--player-dvr-color);
13
9
  line-height: 32px;
14
10
  font-size: 10px;
15
11
  font-weight: bold;
@@ -17,7 +13,6 @@ $bottom-panel: 40px;
17
13
 
18
14
  .live-info {
19
15
  cursor: default;
20
- font-family: "Roboto", "Open Sans", Arial, sans-serif;
21
16
  text-transform: uppercase;
22
17
 
23
18
  &:before {
@@ -28,14 +23,14 @@ $bottom-panel: 40px;
28
23
  height: $circle-radius*2;
29
24
  border-radius: $circle-radius;
30
25
  margin-right: $circle-radius;
31
- background-color: $live-color;
26
+ background-color: var(--player-live-color);
32
27
  }
33
28
 
34
29
  &.disabled {
35
30
  opacity: $disabled-opacity;
36
31
 
37
32
  &:before {
38
- background-color: $dvr-color;
33
+ background-color: var(--player-dvr-color);
39
34
  }
40
35
  }
41
36
  }
@@ -45,12 +40,11 @@ $bottom-panel: 40px;
45
40
  outline: none;
46
41
  display: none;
47
42
  border: 0;
48
- color: $dvr-color;
43
+ color: var(--player-dvr-color);
49
44
  background-color: transparent;
50
45
  height: 32px;
51
46
  padding: 0;
52
47
  opacity: 0.7;
53
- font-family: "Roboto", "Open Sans", Arial, sans-serif;
54
48
  text-transform: uppercase;
55
49
  transition: all 0.1s ease;
56
50
 
@@ -62,7 +56,7 @@ $bottom-panel: 40px;
62
56
  height: $circle-radius*2;
63
57
  border-radius: $circle-radius;
64
58
  margin-right: $circle-radius;
65
- background-color: $dvr-color;
59
+ background-color: var(--player-dvr-color);
66
60
  }
67
61
 
68
62
  &:hover {
@@ -110,7 +104,7 @@ $bottom-panel: 40px;
110
104
  }
111
105
 
112
106
  .dvr {
113
- .dvr-controls[data-dvr-controls] {
107
+ .dvr-controls[data-dvr] {
114
108
  .live-info {
115
109
  display: none;
116
110
  }
@@ -119,16 +113,4 @@ $bottom-panel: 40px;
119
113
  display: block;
120
114
  }
121
115
  }
122
-
123
- &.media-control.live[data-media-control] {
124
- .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-2[data-seekbar] {
125
- background-color: $vod-color;
126
- }
127
- }
128
- }
129
-
130
- .media-control.live[data-media-control] {
131
- .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-2[data-seekbar] {
132
- background-color: $live-color;
133
- }
134
116
  }
@@ -1,2 +1,2 @@
1
- <div class="live-info"><%= live %></div>
2
- <button type="button" class="live-button" aria-label="<%= backToLive %>"><%= backToLive %></button>
1
+ <div class="live-info" id="media-control-live"><%= i18n.t('live') %></div>
2
+ <button type="button" class="live-button" aria-label="<%= i18n.t('back_to_live') %>" id="media-control-back-to-live"><%= i18n.t('back_to_live') %></button>
@@ -16,7 +16,7 @@
16
16
  }
17
17
  }
18
18
 
19
- .subtitle-string {
19
+ .cc-line {
20
20
  position: absolute;
21
21
  bottom: calc(var(--bottom-panel) + 5px);
22
22
  width: 100%;
@@ -52,9 +52,6 @@
52
52
  <div class="media-clip-text gcore-skin-text-color" data-<%= name %>></div>
53
53
  </div>
54
54
  <% }; %>
55
- <% var renderPlaybackRate = function(name) { %>
56
- <div class="media-control-playbackrate" data-<%= name %>></div>
57
- <% }; %>
58
55
  <% var renderVR = function(name) { %>
59
56
  <div class="media-control-vr" data-<%= name %>></div>
60
57
  <% }; %>
@@ -84,13 +81,11 @@
84
81
  renderNerd(setting)
85
82
  } else if (setting === "multicamera") {
86
83
  renderMultiCamera(setting)
87
- } else if (setting === "playbackrate") {
88
- renderPlaybackRate(setting)
89
84
  } else if (setting === "vr") {
90
85
  renderVR(setting)
91
86
  } else if (setting === "clipsText") {
92
87
  renderClipsText(setting)
93
- } else {
88
+ } else if (setting === "fullscreen") {
94
89
  renderButton(setting);
95
90
  }
96
91
  });
@@ -6,6 +6,11 @@
6
6
  :root {
7
7
  --font-size-media-controls: 14px;
8
8
  --font-size-media-controls-dropdown: 16px;
9
+ --player-vod-color: #005aff;
10
+ --player-dvr-color: #fff;
11
+ --player-live-color: #ff0101;
12
+ --player-seekbar-current-color: #ff5700;
13
+ --player-seekbar-buffer-color: #fff;
9
14
  }
10
15
 
11
16
  .media-control-skin-1[data-media-control-skin-1] {
@@ -86,6 +91,10 @@
86
91
  align-items: center;
87
92
  gap: 1rem;
88
93
  justify-content: flex-end;
94
+ @media (max-width: 420px) {
95
+ gap: 0.5rem;
96
+ overflow: hidden;
97
+ }
89
98
  }
90
99
 
91
100
  button.media-control-button {
@@ -125,7 +134,6 @@
125
134
  }
126
135
 
127
136
  &[data-fullscreen] {
128
- float: right;
129
137
  order: 100;
130
138
  background-color: transparent;
131
139
  border: 0;
@@ -218,7 +226,7 @@
218
226
  left: 0;
219
227
  width: 0;
220
228
  height: 100%;
221
- background-color: white;
229
+ background-color: var(--player-seekbar-buffer-color);
222
230
  transition: all 0.1s ease-out;
223
231
  }
224
232
 
@@ -228,7 +236,7 @@
228
236
  left: 0;
229
237
  width: 0;
230
238
  height: 100%;
231
- background-color: #ff5700;
239
+ background-color: var(--player-seekbar-current-color);
232
240
  transition: all 0.1s ease-out;
233
241
  }
234
242
  }
@@ -332,7 +340,7 @@
332
340
  left: 0;
333
341
  width: 0;
334
342
  height: 100%;
335
- background-color: #005aff;
343
+ background-color: var(--player-vod-color);
336
344
  transition: all 0.1s ease-out;
337
345
  }
338
346
  }
@@ -387,9 +395,8 @@
387
395
 
388
396
  /* TODO distribute between plugins' styles */
389
397
  .media-control-skin-1[data-media-control-skin-1] {
390
- .media-control-subtitles {
391
-
392
- button[data-subtitles-button] {
398
+ .media-control-cc {
399
+ button[data-cc-button] {
393
400
  display: flex;
394
401
  justify-content: center;
395
402
  padding: 0;
@@ -1,6 +1,6 @@
1
1
  .media-control-skin-1[data-media-control-skin-1].w270 {
2
2
  .media-control-quality,
3
- .media-control-audio-tracks {
3
+ .media-control-audiotracks {
4
4
  display: none;
5
5
  }
6
6
 
@@ -1,5 +1,5 @@
1
1
  .media-control-skin-1[data-media-control-skin-1].w370 {
2
- .media-control-subtitles {
2
+ .media-control-cc {
3
3
  width: 28px;
4
4
 
5
5
  svg {
@@ -27,12 +27,12 @@
27
27
  }
28
28
 
29
29
  .media-control-quality,
30
- .media-control-audio-tracks {
30
+ .media-control-audiotracks {
31
31
  display: block;
32
32
  }
33
33
 
34
34
  .level-selector[data-level-selector],
35
- .media-control-audio-tracks[data-track-selector] {
35
+ .media-control-audiotracks[data-audiotracks] {
36
36
  margin-top: 3px;
37
37
  margin-right: 10px;
38
38
 
@@ -52,7 +52,7 @@
52
52
  }
53
53
 
54
54
  button[data-level-selector-button],
55
- button[data-track-selector-button] {
55
+ button[data-audiotracks-button] {
56
56
 
57
57
  .quality-text,
58
58
  .audio-text {
@@ -99,7 +99,7 @@
99
99
  }
100
100
  }
101
101
 
102
- .dvr-controls[data-dvr-controls] {
102
+ .dvr-controls[data-dvr] {
103
103
  height: 32px;
104
104
 
105
105
  .live-button {
@@ -1,6 +1,6 @@
1
- <button class='gplayer-lite-btn gcore-skin-text-color gear-option'>
1
+ <button class='gplayer-lite-btn gcore-skin-text-color gear-option' id="playback-rate-button">
2
2
  <span class="gear-option_speed-icon"><%= speedIcon %></span>
3
- <span>Playback speed</span>
3
+ <span class="gear-option_label"><%= i18n.t('playback_rate') %></span>
4
4
  <span class="gear-option_arrow-right-icon"><%= arrowRightIcon %></span>
5
5
  <span class='gear-option_value'><%= title %></span>
6
6
  </button>
@@ -1,13 +1,13 @@
1
1
  <button class="gplayer-lite-btn go-back gcore-skin-text-color">
2
2
  <span class="arrow-left-icon"><%= arrowLeftIcon %></span>
3
- Playback speed
3
+ <%= i18n.t('playback_rate') %>
4
4
  </button>
5
5
  <ul class="gear-sub-menu">
6
- <% for (var i = playbackRates.length - 1; i >= 0; i--) { %>
6
+ <% for (const item of playbackRates) { %>
7
7
  <li>
8
- <a href="#" class='gear-sub-menu_btn gcore-skin-text-color' data-rate="<%= playbackRates[i].value %>">
8
+ <a href="#" class='gear-sub-menu_btn gcore-skin-text-color' data-rate="<%= item.value %>">
9
9
  <span class="check-icon"><%= checkIcon %></span>
10
- <%= playbackRates[i].label %>
10
+ <%= item.label %>
11
11
  </a>
12
12
  </li>
13
13
  <% } %>
@@ -29,7 +29,7 @@
29
29
  }
30
30
  }
31
31
 
32
- .gcore-skin-main-color { background-color: var(--theme-foreground-color) !important; }
32
+ .gcore-skin-main-color { background-color: var(--theme-foreground-color) }
33
33
  .gcore-skin-border-color { border-color: var(--theme-foreground-color) !important; }
34
34
 
35
35
  .gcore-skin-button-color:hover { color: var(--theme-hover-color) !important; }
@@ -1,14 +1,14 @@
1
- <button data-subtitles-button class='media-control-button media-control-icon gcore-skin-button-color'>
2
- <span class='subtitle-text'></span>
1
+ <button data-cc-button class='media-control-button media-control-icon gcore-skin-button-color' id="cc-button">
2
+ <span class='cc-text'></span>
3
3
  </button>
4
4
 
5
- <ul class='gcore-skin-bg-color'>
5
+ <ul class='gcore-skin-bg-color' id="cc-select">
6
6
  <% for (const t of tracks) { %>
7
7
  <li>
8
- <a href="#" class='gcore-skin-text-color' data-subtitles-select="<%= t.id %>">
8
+ <a href="#" class='gcore-skin-text-color' data-cc-select="<%= t.id %>">
9
9
  <%= t.name %>
10
10
  </a>
11
11
  </li>
12
12
  <% } %>
13
- <li><a href="#" class='gcore-skin-text-color' data-subtitles-select="-1">Off</a></li>
13
+ <li><a href="#" class='gcore-skin-text-color' data-cc-select="-1">Off</a></li>
14
14
  </ul>
@@ -1,3 +1,3 @@
1
- <div class="subtitle-string">
1
+ <div class="cc-line" id="cc-line">
2
2
  <p></p>
3
3
  </div>
@@ -4,7 +4,7 @@
4
4
  outline: none !important;
5
5
  }
6
6
 
7
- .media-control-subtitles[data-subtitles] {
7
+ .media-control-cc[data-cc] {
8
8
  position: relative;
9
9
  order: 85;
10
10
 
@@ -15,7 +15,7 @@
15
15
  border: none;
16
16
  cursor: pointer;
17
17
 
18
- .subtitle-text {
18
+ .cc-text {
19
19
  svg {
20
20
  fill: white;
21
21
  }
package/dist/core.js CHANGED
@@ -12850,6 +12850,7 @@ class DashPlayback extends BasePlayback {
12850
12850
  this.trigger(Events$1.PLAYBACK_DVR, status);
12851
12851
  this.trigger(Events$1.PLAYBACK_STATS_ADD, { dvr: status });
12852
12852
  }
12853
+ // TODO move to the base class
12853
12854
  _updateSettings() {
12854
12855
  if (this._playbackType === Playback.VOD) {
12855
12856
  // @ts-expect-error
@@ -43213,7 +43214,7 @@ class Player {
43213
43214
  }
43214
43215
  }
43215
43216
 
43216
- var version$1 = "2.21.3";
43217
+ var version$1 = "2.21.6";
43217
43218
 
43218
43219
  var packages = {
43219
43220
  "node_modules/@clappr/core": {