@gcorevideo/player 2.22.21 → 2.22.22

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 (38) hide show
  1. package/assets/clappr-nerd-stats/clappr-nerd-stats.ejs +30 -30
  2. package/assets/clappr-nerd-stats/clappr-nerd-stats.scss +21 -14
  3. package/dist/core.js +1 -1
  4. package/dist/index.css +686 -678
  5. package/dist/index.js +49 -31
  6. package/dist/player.d.ts +32 -10
  7. package/dist/plugins/index.css +612 -604
  8. package/dist/plugins/index.js +48 -30
  9. package/docs/api/player.extendedevents.md +45 -0
  10. package/docs/api/player.md +21 -1
  11. package/docs/api/player.volumefade._constructor_.md +50 -0
  12. package/docs/api/player.volumefade.md +40 -1
  13. package/docs/api/player.volumefadesettings.md +18 -0
  14. package/lib/plugins/clappr-nerd-stats/NerdStats.d.ts +1 -0
  15. package/lib/plugins/clappr-nerd-stats/NerdStats.d.ts.map +1 -1
  16. package/lib/plugins/clappr-nerd-stats/NerdStats.js +13 -3
  17. package/lib/plugins/clappr-nerd-stats/speedtest/Speedtest.d.ts.map +1 -1
  18. package/lib/plugins/clappr-nerd-stats/speedtest/Speedtest.js +1 -0
  19. package/lib/plugins/clappr-nerd-stats/speedtest/index.js +1 -1
  20. package/lib/plugins/clappr-nerd-stats/utils.d.ts.map +1 -1
  21. package/lib/plugins/clappr-nerd-stats/utils.js +17 -15
  22. package/lib/plugins/clappr-stats/ClapprStats.d.ts +1 -0
  23. package/lib/plugins/clappr-stats/ClapprStats.d.ts.map +1 -1
  24. package/lib/plugins/clappr-stats/ClapprStats.js +3 -0
  25. package/lib/plugins/click-to-pause/ClickToPause.js +6 -7
  26. package/lib/plugins/volume-fade/VolumeFade.d.ts +3 -1
  27. package/lib/plugins/volume-fade/VolumeFade.d.ts.map +1 -1
  28. package/lib/plugins/volume-fade/VolumeFade.js +6 -3
  29. package/package.json +1 -1
  30. package/src/plugins/clappr-nerd-stats/NerdStats.ts +21 -8
  31. package/src/plugins/clappr-nerd-stats/speedtest/Speedtest.ts +1 -0
  32. package/src/plugins/clappr-nerd-stats/speedtest/index.ts +1 -1
  33. package/src/plugins/clappr-nerd-stats/utils.ts +23 -13
  34. package/src/plugins/clappr-stats/ClapprStats.ts +4 -0
  35. package/src/plugins/click-to-pause/ClickToPause.ts +6 -6
  36. package/src/plugins/volume-fade/VolumeFade.ts +6 -3
  37. package/temp/player.api.json +100 -2
  38. package/tsconfig.tsbuildinfo +1 -1
package/dist/index.js CHANGED
@@ -43303,7 +43303,7 @@ class Player {
43303
43303
  }
43304
43304
  }
43305
43305
 
43306
- var version$1 = "2.22.21";
43306
+ var version$1 = "2.22.22";
43307
43307
 
43308
43308
  var packages = {
43309
43309
  "node_modules/@clappr/core": {
@@ -44067,6 +44067,9 @@ class ClapprStats extends ContainerPlugin {
44067
44067
  exportMetrics() {
44068
44068
  return structuredClone(this.metrics);
44069
44069
  }
44070
+ clearMetrics() {
44071
+ this.metrics = newMetrics$1();
44072
+ }
44070
44073
  onBitrate(newBitrate) {
44071
44074
  const bitrate = newBitrate.bitrate;
44072
44075
  const now = this.now();
@@ -45840,6 +45843,7 @@ class Speedtest {
45840
45843
  }
45841
45844
  addTestPoint(server) {
45842
45845
  this._checkServerDefinition(server);
45846
+ console.log('Speedtest addTestPoint %o', server);
45843
45847
  if (this._state === 0) {
45844
45848
  this._state = 1;
45845
45849
  }
@@ -46144,7 +46148,7 @@ const getColor = (speedValue) => {
46144
46148
  }
46145
46149
  };
46146
46150
  function drawSpeedTestResults() {
46147
- const canvas = document.getElementById('speedTestCanvas');
46151
+ const canvas = document.getElementById('nerd-stats-speed-test-canvas');
46148
46152
  if (!canvas) {
46149
46153
  return;
46150
46154
  }
@@ -46267,7 +46271,7 @@ function rankConnectionSpeed(dlSpeed) {
46267
46271
  return 0;
46268
46272
  }
46269
46273
 
46270
- const pluginHtml$4 = "<% general = metrics.general %>\n<% counters = metrics.counters %>\n<% timers = metrics.chrono %>\n<% extra = metrics.extra %>\n<% custom = metrics.custom %>\n\n<div class=\"stats-box\" id=\"nerd-stats-box\">\n <div class=\"stats-box-top\">\n <a class=\"close-button gplayer-lite-btn\" id=\"nerd-stats-close\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <g clip-path=\"url(#clip0_184_1489)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M7.41376 6.00013L13.7068 -0.292872C14.0978 -0.683872 14.0978 -1.31587 13.7068 -1.70687C13.3158 -2.09787 12.6838 -2.09787 12.2928 -1.70687L5.99976 4.58613L-0.293238 -1.70687C-0.684238 -2.09787 -1.31624 -2.09787 -1.70724 -1.70687C-2.09824 -1.31587 -2.09824 -0.683872 -1.70724 -0.292872L4.58576 6.00013L-1.70724 12.2931C-2.09824 12.6841 -2.09824 13.3161 -1.70724 13.7071C-1.51224 13.9021 -1.25624 14.0001 -1.00024 14.0001C-0.744238 14.0001 -0.488238 13.9021 -0.293238 13.7071L5.99976 7.41413L12.2928 13.7071C12.4878 13.9021 12.7438 14.0001 12.9998 14.0001C13.2558 14.0001 13.5118 13.9021 13.7068 13.7071C14.0978 13.3161 14.0978 12.6841 13.7068 12.2931L7.41376 6.00013Z\"\n fill=\"white\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_184_1489\">\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n </a>\n </div>\n <div class=\"stats-box-main\">\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.general') %></span></li>\n <li>\n <%= i18n.t('stats.display_resolution') %>\n <div><span><span id=\"nerd-stats-resolution-width\"><%= general.resolution.width %></span>&times;<span id=\"nerd-stats-resolution-height\"><%= general.resolution.height %></span></span></div>\n </li>\n <li>\n <%= i18n.t('stats.volume') %>\n <div id=\"nerd-stats-volume\"><span><%= general.volume %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.connection_speed') %>\n <div><span id=\"dlText\"><%= custom.connectionSpeed %></span> <%= i18n.t('mbps') %></div>\n </li>\n <li class=\"canvas-wrapper\">\n <canvas id=\"speedTestCanvas\" width=\"190\" height=\"20\"></canvas>\n </li>\n <li>\n <%= i18n.t('stats.ping') %>\n <div><span id=\"pingText\"><%= custom.ping %></span> <%= i18n.t('ms') %></div>\n </li>\n <li>\n <%= i18n.t('stats.jitter') %>\n <div><span id=\"jitterText\"><%= custom.jitter %></span> <%= i18n.t('ms') %></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.counters') %></span></li>\n <li>\n <%= i18n.t('stats.plays') %>\n <div><span id=\"nerd-stats-plays\"><%= counters.play %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.pauses') %>\n <div><span id=\"nerd-stats-pauses\"><%= counters.pause %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.errors') %>\n <div><span id=\"nerd-stats-errors\"><%= counters.error %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bufferings') %>\n <div><span id=\"nerd-stats-bufferings\"><%= counters.buffering %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.decoded_frames') %>\n <div><span id=\"nerd-stats-decoded-frames\"><%= counters.decodedFrames %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.dropped_frames') %>\n <div><span id=\"nerd-stats-dropped-frames\"><%= counters.droppedFrames %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.fps') %>\n <div><span id=\"nerd-stats-fps\"><%= counters.fps %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bitrate_changes') %>\n <div><span id=\"nerd-stats-bitrate-changes\"><%= counters.changeLevel %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.seeks') %>\n <div><span id=\"nerd-stats-seeks\"><%= counters.seek %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.fullscreen') %>\n <div><span id=\"nerd-stats-fullscreen\"><%= counters.fullscreen %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.dvr_seeks') %>\n <div><span id=\"nerd-stats-dvr-usage\"><%= counters.dvrUsage %></span></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.duration') %></span></li>\n <li>\n <%= i18n.t('stats.startup') %>\n <div><span id=\"nerd-stats-startup-time\"><%= timers.startup %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.watching') %>\n <div><span id=\"nerd-stats-watch-time\"><%= timers.watch %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.paused') %>\n <div><span id=\"nerd-stats-pause-time\"><%= timers.pause %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.buffering') %>\n <div><span id=\"nerd-stats-buffering-time\"><%= timers.buffering %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.session') %>\n <div><span id=\"nerd-stats-session-time\"><%= timers.session %></span></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.extra') %></span></li>\n <li>\n <%= i18n.t('stats.playback') %>\n <div><span id=\"nerd-stats-playback-name\"><%= extra.playbackName %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.playback_type') %>\n <div><span id=\"nerd-stats-playback-type\"><%= extra.playbackType %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.buffer_size') %>\n <div><span id=\"nerd-stats-buffer-size\"><%= extra.buffersize %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.video_duration') %>\n <div><span id=\"nerd-stats-video-duration\"><%= extra.duration %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.current_time') %>\n <div><span id=\"nerd-stats-current-time\"><%= extra.currentTime %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bitrate_weighted_mean') %>\n <div><span id=\"nerd-stats-bitrate-weighted-mean\"><%= extra.bitrateWeightedMean %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bitrate_most_used') %>\n <div><span id=\"nerd-stats-bitrate-most-used\"><%= extra.bitrateMostUsed %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.watched_percentage') %>\n <div><span id=\"nerd-stats-watched-percentage\"><%= extra.watchedPercentage %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.buffering_percentage') %>\n <div><span id=\"nerd-stats-buffering-percentage\"><%= extra.bufferingPercentage %></span></div>\n </li>\n </ul>\n </div>\n <div class=\"speedtest-summary\">\n <div class=\"speedtest-summary-header\"><%= i18n.t('stats.your_internet_quality_summary') %>:</div>\n <div class=\"speedtest-summary-block\">\n <div class=\"speedtest-summary-subblock\">\n <div class=\"speedtest-summary-subblock-content\">\n <div class=\"speedtest-quality\">\n <div class=\"speedtest-quality-header\"><%= i18n.t('vod') %>: \n <span id=\"nerd-stats-quality-vod-text\"><%= custom.vodQuality %></span></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"vod\" id=\"nerd-stats-quality-vod\">\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"speedtest-summary-subblock\">\n <div class=\"speedtest-summary-subblock-content\">\n <div class=\"speedtest-quality\">\n <div class=\"speedtest-quality-header\"><%= i18n.t('live') %>: \n <span id=\"nerd-stats-quality-live-text\"><%= custom.liveQuality %></span></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"live\" id=\"nerd-stats-quality-live\">\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"speedtest-footer\">\n <!-- <a class=\"speedtest-footer-about-link\" href=\"\" target=\"_blank\">I am not a nerd, what's this all about?</a>-->\n <button class=\"gplayer-lite-btn speedtest-btn speedtest-footer-refresh\" type=\"button\" id=\"nerd-stats-refresh\">\n <svg width=\"12\" height=\"10\" viewBox=\"0 0 12 10\" fill=\"none\">\n <path\n d=\"M6.03968 0.124998C3.64268 0.124998 1.67268 1.9565 1.48068 4.2915H1.00018C0.925833 4.29146 0.853156 4.31353 0.791378 4.35489C0.729601 4.39625 0.681511 4.45503 0.653218 4.52378C0.624925 4.59253 0.617705 4.66814 0.632476 4.74101C0.647248 4.81387 0.683343 4.88069 0.736177 4.933L1.57618 5.766C1.64641 5.83561 1.74129 5.87467 1.84018 5.87467C1.93906 5.87467 2.03395 5.83561 2.10418 5.766L2.94418 4.933C2.99701 4.88069 3.03311 4.81387 3.04788 4.74101C3.06265 4.66814 3.05543 4.59253 3.02714 4.52378C2.99884 4.45503 2.95075 4.39625 2.88898 4.35489C2.8272 4.31353 2.75452 4.29146 2.68018 4.2915H2.23368C2.42368 2.376 4.05268 0.874998 6.03968 0.874998C6.6948 0.873639 7.33932 1.04039 7.91158 1.35931C8.48384 1.67822 8.9647 2.13863 9.30818 2.6965C9.33331 2.73978 9.36686 2.7776 9.40684 2.80771C9.44682 2.83783 9.49243 2.85963 9.54097 2.87184C9.58951 2.88405 9.64001 2.88643 9.68948 2.87881C9.73895 2.8712 9.7864 2.85377 9.82902 2.82753C9.87165 2.80129 9.90859 2.76679 9.93767 2.72605C9.96675 2.68531 9.98739 2.63916 9.99835 2.59032C10.0093 2.54148 10.0104 2.49095 10.0015 2.44168C9.99264 2.39242 9.974 2.34544 9.94668 2.3035C9.53615 1.63664 8.96146 1.08621 8.27752 0.704805C7.59359 0.323402 6.82277 0.123774 6.03968 0.124998ZM10.4207 4.2335C10.3505 4.16419 10.2558 4.12532 10.1572 4.12532C10.0585 4.12532 9.96386 4.16419 9.89368 4.2335L9.05018 5.0665C8.9972 5.11874 8.96096 5.18557 8.94608 5.25847C8.93119 5.33137 8.93833 5.40705 8.96658 5.47588C8.99483 5.54472 9.04292 5.60359 9.10473 5.64501C9.16654 5.68644 9.23927 5.70853 9.31368 5.7085H9.76318C9.57218 7.6235 7.93768 9.125 5.94118 9.125C5.28399 9.12683 4.63729 8.96035 4.06269 8.64141C3.48808 8.32247 3.00473 7.86169 2.65868 7.303C2.63281 7.26107 2.59893 7.22465 2.55899 7.19582C2.51904 7.16699 2.47381 7.14631 2.42587 7.13495C2.37793 7.1236 2.32823 7.1218 2.27959 7.12966C2.23096 7.13752 2.18435 7.15488 2.14243 7.18075C2.05776 7.233 1.99731 7.31674 1.97438 7.41355C1.95146 7.51037 1.96793 7.61233 2.02018 7.697C2.43345 8.36457 3.01076 8.91521 3.69713 9.29647C4.38349 9.67772 5.15604 9.87689 5.94118 9.875C8.34518 9.875 10.3237 8.045 10.5162 5.7085H11.0002C11.0746 5.70853 11.1473 5.68644 11.2091 5.64501C11.2709 5.60359 11.319 5.54472 11.3473 5.47588C11.3755 5.40705 11.3827 5.33137 11.3678 5.25847C11.3529 5.18557 11.3167 5.11874 11.2637 5.0665L10.4207 4.2335Z\"\n fill=\"white\"/>\n </svg>\n <%= i18n.t('stats.refresh') %>\n </button>\n </div>\n</div>\n";
46274
+ const pluginHtml$4 = "<% general = metrics.general %>\n<% counters = metrics.counters %>\n<% timers = metrics.chrono %>\n<% extra = metrics.extra %>\n<% custom = metrics.custom %>\n\n<div class=\"stats-box\" id=\"nerd-stats-box\">\n <div class=\"stats-box-top\">\n <a class=\"close-button gplayer-lite-btn\" id=\"nerd-stats-close\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <g clip-path=\"url(#clip0_184_1489)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M7.41376 6.00013L13.7068 -0.292872C14.0978 -0.683872 14.0978 -1.31587 13.7068 -1.70687C13.3158 -2.09787 12.6838 -2.09787 12.2928 -1.70687L5.99976 4.58613L-0.293238 -1.70687C-0.684238 -2.09787 -1.31624 -2.09787 -1.70724 -1.70687C-2.09824 -1.31587 -2.09824 -0.683872 -1.70724 -0.292872L4.58576 6.00013L-1.70724 12.2931C-2.09824 12.6841 -2.09824 13.3161 -1.70724 13.7071C-1.51224 13.9021 -1.25624 14.0001 -1.00024 14.0001C-0.744238 14.0001 -0.488238 13.9021 -0.293238 13.7071L5.99976 7.41413L12.2928 13.7071C12.4878 13.9021 12.7438 14.0001 12.9998 14.0001C13.2558 14.0001 13.5118 13.9021 13.7068 13.7071C14.0978 13.3161 14.0978 12.6841 13.7068 12.2931L7.41376 6.00013Z\"\n fill=\"white\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_184_1489\">\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n </a>\n </div>\n <div class=\"stats-box-main\">\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.general') %></span></li>\n <li>\n <%= i18n.t('stats.display_resolution') %>\n <div><span><span id=\"nerd-stats-resolution-width\"><%= general.resolution.width %></span>&times;<span id=\"nerd-stats-resolution-height\"><%= general.resolution.height %></span></span></div>\n </li>\n <li>\n <%= i18n.t('stats.volume') %>\n <div id=\"nerd-stats-volume\"><span><%= general.volume %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.connection_speed') %>\n <div><span id=\"nerd-stats-dl-text\"><%= custom.connectionSpeed %></span> <%= i18n.t('mbps') %></div>\n </li>\n <li class=\"canvas-wrapper\">\n <canvas id=\"nerd-stats-speed-test-canvas\" width=\"190\" height=\"20\"></canvas>\n </li>\n <li>\n <%= i18n.t('stats.ping') %>\n <div><span id=\"nerd-stats-ping-text\"><%= custom.ping %></span> <%= i18n.t('ms') %></div>\n </li>\n <li>\n <%= i18n.t('stats.jitter') %>\n <div><span id=\"nerd-stats-jitter-text\"><%= custom.jitter %></span> <%= i18n.t('ms') %></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.duration') %></span></li>\n <li>\n <%= i18n.t('stats.startup') %>\n <div><span id=\"nerd-stats-startup-time\"><%= timers.startup %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.watching') %>\n <div><span id=\"nerd-stats-watch-time\"><%= timers.watch %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.paused') %>\n <div><span id=\"nerd-stats-pause-time\"><%= timers.pause %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.buffering') %>\n <div><span id=\"nerd-stats-buffering-time\"><%= timers.buffering %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.session') %>\n <div><span id=\"nerd-stats-session-time\"><%= timers.session %></span></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.counters') %></span></li>\n <li>\n <%= i18n.t('stats.plays') %>\n <div><span id=\"nerd-stats-plays\"><%= counters.play %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.pauses') %>\n <div><span id=\"nerd-stats-pauses\"><%= counters.pause %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.errors') %>\n <div><span id=\"nerd-stats-errors\"><%= counters.error %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bufferings') %>\n <div><span id=\"nerd-stats-bufferings\"><%= counters.buffering %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.decoded_frames') %>\n <div><span id=\"nerd-stats-decoded-frames\"><%= counters.decodedFrames %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.dropped_frames') %>\n <div><span id=\"nerd-stats-dropped-frames\"><%= counters.droppedFrames %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.fps') %>\n <div><span id=\"nerd-stats-fps\"><%= counters.fps %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bitrate_changes') %>\n <div><span id=\"nerd-stats-bitrate-changes\"><%= counters.changeLevel %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.seeks') %>\n <div><span id=\"nerd-stats-seeks\"><%= counters.seek %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.fullscreen') %>\n <div><span id=\"nerd-stats-fullscreen\"><%= counters.fullscreen %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.dvr_seeks') %>\n <div><span id=\"nerd-stats-dvr-usage\"><%= counters.dvrUsage %></span></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.extra') %></span></li>\n <li>\n <%= i18n.t('stats.playback') %>\n <div><span id=\"nerd-stats-playback-name\"><%= extra.playbackName %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.playback_type') %>\n <div><span id=\"nerd-stats-playback-type\"><%= extra.playbackType %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.buffer_size') %>\n <div><span id=\"nerd-stats-buffer-size\"><%= extra.buffersize %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.video_duration') %>\n <div><span id=\"nerd-stats-video-duration\"><%= extra.duration %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.current_time') %>\n <div><span id=\"nerd-stats-current-time\"><%= extra.currentTime %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bitrate_weighted_mean') %>\n <div><span id=\"nerd-stats-bitrate-weighted-mean\"><%= extra.bitrateWeightedMean %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bitrate_most_used') %>\n <div><span id=\"nerd-stats-bitrate-most-used\"><%= extra.bitrateMostUsed %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.watched_percentage') %>\n <div><span id=\"nerd-stats-watched-percentage\"><%= extra.watchedPercentage %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.buffering_percentage') %>\n <div><span id=\"nerd-stats-buffering-percentage\"><%= extra.bufferingPercentage %></span></div>\n </li>\n </ul>\n </div>\n <div class=\"speedtest-summary\">\n <div class=\"speedtest-summary-header\"><%= i18n.t('stats.your_internet_quality_summary') %>:</div>\n <div class=\"speedtest-summary-block\">\n <div class=\"speedtest-summary-subblock\">\n <div class=\"speedtest-summary-subblock-content\">\n <div class=\"speedtest-quality\">\n <div class=\"speedtest-quality-header\"><%= i18n.t('vod') %>: \n <span id=\"nerd-stats-quality-vod-text\"><%= custom.vodQuality %></span></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"vod\" id=\"nerd-stats-quality-vod\">\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"speedtest-summary-subblock\">\n <div class=\"speedtest-summary-subblock-content\">\n <div class=\"speedtest-quality\">\n <div class=\"speedtest-quality-header\"><%= i18n.t('live') %>: \n <span id=\"nerd-stats-quality-live-text\"><%= custom.liveQuality %></span></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"live\" id=\"nerd-stats-quality-live\">\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"speedtest-footer\">\n <!-- <a class=\"speedtest-footer-about-link\" href=\"\" target=\"_blank\">I am not a nerd, what's this all about?</a>-->\n <button class=\"gplayer-lite-btn speedtest-btn speedtest-footer-refresh\" type=\"button\" id=\"nerd-stats-refresh\">\n <svg width=\"12\" height=\"10\" viewBox=\"0 0 12 10\" fill=\"none\">\n <path\n d=\"M6.03968 0.124998C3.64268 0.124998 1.67268 1.9565 1.48068 4.2915H1.00018C0.925833 4.29146 0.853156 4.31353 0.791378 4.35489C0.729601 4.39625 0.681511 4.45503 0.653218 4.52378C0.624925 4.59253 0.617705 4.66814 0.632476 4.74101C0.647248 4.81387 0.683343 4.88069 0.736177 4.933L1.57618 5.766C1.64641 5.83561 1.74129 5.87467 1.84018 5.87467C1.93906 5.87467 2.03395 5.83561 2.10418 5.766L2.94418 4.933C2.99701 4.88069 3.03311 4.81387 3.04788 4.74101C3.06265 4.66814 3.05543 4.59253 3.02714 4.52378C2.99884 4.45503 2.95075 4.39625 2.88898 4.35489C2.8272 4.31353 2.75452 4.29146 2.68018 4.2915H2.23368C2.42368 2.376 4.05268 0.874998 6.03968 0.874998C6.6948 0.873639 7.33932 1.04039 7.91158 1.35931C8.48384 1.67822 8.9647 2.13863 9.30818 2.6965C9.33331 2.73978 9.36686 2.7776 9.40684 2.80771C9.44682 2.83783 9.49243 2.85963 9.54097 2.87184C9.58951 2.88405 9.64001 2.88643 9.68948 2.87881C9.73895 2.8712 9.7864 2.85377 9.82902 2.82753C9.87165 2.80129 9.90859 2.76679 9.93767 2.72605C9.96675 2.68531 9.98739 2.63916 9.99835 2.59032C10.0093 2.54148 10.0104 2.49095 10.0015 2.44168C9.99264 2.39242 9.974 2.34544 9.94668 2.3035C9.53615 1.63664 8.96146 1.08621 8.27752 0.704805C7.59359 0.323402 6.82277 0.123774 6.03968 0.124998ZM10.4207 4.2335C10.3505 4.16419 10.2558 4.12532 10.1572 4.12532C10.0585 4.12532 9.96386 4.16419 9.89368 4.2335L9.05018 5.0665C8.9972 5.11874 8.96096 5.18557 8.94608 5.25847C8.93119 5.33137 8.93833 5.40705 8.96658 5.47588C8.99483 5.54472 9.04292 5.60359 9.10473 5.64501C9.16654 5.68644 9.23927 5.70853 9.31368 5.7085H9.76318C9.57218 7.6235 7.93768 9.125 5.94118 9.125C5.28399 9.12683 4.63729 8.96035 4.06269 8.64141C3.48808 8.32247 3.00473 7.86169 2.65868 7.303C2.63281 7.26107 2.59893 7.22465 2.55899 7.19582C2.51904 7.16699 2.47381 7.14631 2.42587 7.13495C2.37793 7.1236 2.32823 7.1218 2.27959 7.12966C2.23096 7.13752 2.18435 7.15488 2.14243 7.18075C2.05776 7.233 1.99731 7.31674 1.97438 7.41355C1.95146 7.51037 1.96793 7.61233 2.02018 7.697C2.43345 8.36457 3.01076 8.91521 3.69713 9.29647C4.38349 9.67772 5.15604 9.87689 5.94118 9.875C8.34518 9.875 10.3237 8.045 10.5162 5.7085H11.0002C11.0746 5.70853 11.1473 5.68644 11.2091 5.64501C11.2709 5.60359 11.319 5.54472 11.3473 5.47588C11.3755 5.40705 11.3827 5.33137 11.3678 5.25847C11.3529 5.18557 11.3167 5.11874 11.2637 5.0665L10.4207 4.2335Z\"\n fill=\"white\"/>\n </svg>\n <%= i18n.t('stats.refresh') %>\n </button>\n </div>\n</div>\n";
46271
46275
 
46272
46276
  const buttonHtml$3 = "<button class='nerd-button gplayer-lite-btn gcore-skin-text-color gear-option' id=\"nerd-stats-button\">\n <span class=\"gear-option_icon\"><%= icon %></span>\n <span class=\"gear-option_label\"><%= i18n.t('statistics') %></span>\n</button>\n";
46273
46277
 
@@ -46281,38 +46285,40 @@ const qualityClasses = [
46281
46285
  'speedtest-quality-value-5',
46282
46286
  ];
46283
46287
  const getDownloadQuality = (speedValue) => {
46288
+ if (!speedValue) {
46289
+ return 0;
46290
+ }
46284
46291
  if (speedValue < 3) {
46285
46292
  return 1;
46286
46293
  }
46287
- else if (speedValue < 7) {
46294
+ if (speedValue < 7) {
46288
46295
  return 2;
46289
46296
  }
46290
- else if (speedValue < 13) {
46297
+ if (speedValue < 13) {
46291
46298
  return 3;
46292
46299
  }
46293
- else if (speedValue < 25) {
46300
+ if (speedValue < 25) {
46294
46301
  return 4;
46295
46302
  }
46296
- else {
46297
- return 5;
46298
- }
46303
+ return 5;
46299
46304
  };
46300
46305
  const getPingQuality = (pingValue) => {
46306
+ if (!pingValue) {
46307
+ return 0;
46308
+ }
46301
46309
  if (pingValue < 20) {
46302
46310
  return 5;
46303
46311
  }
46304
- else if (pingValue < 50) {
46312
+ if (pingValue < 50) {
46305
46313
  return 4;
46306
46314
  }
46307
- else if (pingValue < 100) {
46315
+ if (pingValue < 100) {
46308
46316
  return 3;
46309
46317
  }
46310
- else if (pingValue < 150) {
46318
+ if (pingValue < 150) {
46311
46319
  return 2;
46312
46320
  }
46313
- else {
46314
- return 1;
46315
- }
46321
+ return 1;
46316
46322
  };
46317
46323
  const generateQualityHtml = (quality) => {
46318
46324
  const html = [];
@@ -46329,9 +46335,9 @@ const generateQualityHtml = (quality) => {
46329
46335
  };
46330
46336
  const drawSummary = (customMetrics, vodContainer, liveContainer) => {
46331
46337
  const { connectionSpeed, ping } = customMetrics;
46332
- if (!connectionSpeed || !ping) {
46333
- return;
46334
- }
46338
+ // if (!connectionSpeed || !ping) {
46339
+ // return
46340
+ // }
46335
46341
  const downloadQuality = getDownloadQuality(connectionSpeed);
46336
46342
  const pingQuality = getPingQuality(ping);
46337
46343
  const liveQuality = Math.min(downloadQuality, pingQuality);
@@ -46552,8 +46558,11 @@ class NerdStats extends UICorePlugin {
46552
46558
  }
46553
46559
  updateMetrics(metrics) {
46554
46560
  trace(`${T$f} updateMetrics`, { custom: this.speedtestMetrics });
46555
- Object.assign(this.metrics, metrics);
46556
- this.updateEstimatedQuality();
46561
+ Object.assign(this.metrics, metrics); // TODO no Object.assign
46562
+ this.metrics.custom = {
46563
+ ...this.speedtestMetrics,
46564
+ };
46565
+ this.updateCustomMetrics();
46557
46566
  this.$el
46558
46567
  .find('#nerd-stats-current-time')
46559
46568
  .text(Formatter.formatTime(this.metrics.extra.currentTime));
@@ -46615,11 +46624,16 @@ class NerdStats extends UICorePlugin {
46615
46624
  .text(Formatter.formatFps(this.metrics.counters.fps));
46616
46625
  this.setStatsBoxSize();
46617
46626
  drawSpeedTestResults();
46618
- drawSummary(this.speedtestMetrics, this.$el.find('#nerd-stats-quality-vod'), this.$el.find('#nerd-stats-quality-live'));
46627
+ this.updateEstimatedQuality();
46619
46628
  if (!this.open) {
46620
46629
  this.hide();
46621
46630
  }
46622
46631
  }
46632
+ updateCustomMetrics() {
46633
+ this.$el.find('#nerd-stats-dl-text').text(this.metrics.custom.connectionSpeed.toFixed(2));
46634
+ this.$el.find('#nerd-stats-ping-text').text(this.metrics.custom.ping.toFixed(2));
46635
+ this.$el.find('#nerd-stats-jitter-text').text(this.metrics.custom.jitter.toFixed(2));
46636
+ }
46623
46637
  updateEstimatedQuality() {
46624
46638
  this.estimateQuality();
46625
46639
  this.$el
@@ -46628,6 +46642,7 @@ class NerdStats extends UICorePlugin {
46628
46642
  this.$el
46629
46643
  .find('#nerd-stats-quality-live-text')
46630
46644
  .html(this.metrics.custom.liveQuality);
46645
+ drawSummary(this.speedtestMetrics, this.$el.find('#nerd-stats-quality-vod'), this.$el.find('#nerd-stats-quality-live'));
46631
46646
  }
46632
46647
  setStatsBoxSize() {
46633
46648
  if (this.playerWidth >= this.statsBoxWidthThreshold) {
@@ -46672,6 +46687,7 @@ class NerdStats extends UICorePlugin {
46672
46687
  this.speedtestMetrics.ping = 0;
46673
46688
  this.speedtestMetrics.jitter = 0;
46674
46689
  if (clapprStats) {
46690
+ clapprStats.clearMetrics();
46675
46691
  this.updateMetrics(clapprStats.exportMetrics());
46676
46692
  }
46677
46693
  }
@@ -46756,14 +46772,13 @@ class ClickToPause extends ContainerPlugin {
46756
46772
  });
46757
46773
  if (isLivePlayback && !isDvrEnabled) {
46758
46774
  this.togglePlay(true);
46775
+ return;
46759
46776
  }
46760
- else if (!isLivePlayback || isDvrEnabled) {
46761
- this.clearTimer();
46762
- this.timer = setTimeout(() => {
46763
- this.timer = null;
46764
- this.togglePlay(false);
46765
- }, 300);
46766
- }
46777
+ this.clearTimer();
46778
+ this.timer = setTimeout(() => {
46779
+ this.timer = null;
46780
+ this.togglePlay(false);
46781
+ }, 300);
46767
46782
  }
46768
46783
  settingsUpdate() {
46769
46784
  const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE;
@@ -52401,11 +52416,14 @@ var VolumeFadeEvents;
52401
52416
  })(VolumeFadeEvents || (VolumeFadeEvents = {}));
52402
52417
  const T = 'plugins.volume_fade';
52403
52418
  const DEFAULT_DURATION = 600;
52419
+ const DEFAULT_VOLUME_LEVEL = 80;
52404
52420
  /**
52405
- * `PLUGIN` that applies fade effect to the player's volume change.
52421
+ * `PLUGIN` that mutes the sound and fades it in when the mouse is over the player.
52406
52422
  * @beta
52407
52423
  *
52408
52424
  * @remarks
52425
+ * When the user moves the mouse over and away from the player, the sound is unmuted and unmuted with a fade effect.
52426
+ *
52409
52427
  * Depends on {@link MediaControl} plugin.
52410
52428
  * Configuration options - {@link VolumeFadeSettings}
52411
52429
  */
@@ -52447,10 +52465,10 @@ class VolumeFade extends UICorePlugin {
52447
52465
  this.core.activeContainer?.volume &&
52448
52466
  !isNaN(this.core.activeContainer.volume)
52449
52467
  ? this.core.activeContainer.volume
52450
- : 80;
52468
+ : DEFAULT_VOLUME_LEVEL;
52451
52469
  }
52452
52470
  this.duration = this.options.volumeFade?.duration || DEFAULT_DURATION;
52453
- // TODO check if mute must be respected
52471
+ // TODO check if `mute` must be respected
52454
52472
  this.core.activeContainer?.setVolume(this.activeVolume);
52455
52473
  this.core.activePlayback.volume(0);
52456
52474
  }
package/dist/player.d.ts CHANGED
@@ -931,6 +931,10 @@ export declare type ErrorScreenSettings = {
931
931
  noReload?: boolean;
932
932
  };
933
933
 
934
+ export declare enum ExtendedEvents {
935
+ MEDIACONTROL_VOLUME = "mediacontrol:volume"
936
+ }
937
+
934
938
  /**
935
939
  * `PLUGIN` that changes the favicon according to the player's state.
936
940
  * @beta
@@ -3051,30 +3055,34 @@ export declare function version(): {
3051
3055
  };
3052
3056
 
3053
3057
  /**
3054
- * `PLUGIN` that applies fade effect to the player's volume change.
3058
+ * `PLUGIN` that mutes the sound and fades it in when the mouse is over the player.
3055
3059
  * @beta
3060
+ *
3061
+ * @remarks
3062
+ * When the user moves the mouse over and away from the player, the sound is unmuted and unmuted with a fade effect.
3063
+ *
3064
+ * Depends on {@link MediaControl} plugin.
3065
+ * Configuration options - {@link VolumeFadeSettings}
3056
3066
  */
3057
3067
  export declare class VolumeFade extends UICorePlugin {
3058
- private _aboveBorderVolume;
3059
- private container;
3060
- private delay;
3061
- private interval;
3068
+ private activeVolume;
3069
+ private duration;
3070
+ private timerId;
3062
3071
  /**
3063
3072
  * @internal
3064
3073
  */
3065
3074
  get name(): string;
3075
+ constructor(core: Core);
3066
3076
  /**
3067
3077
  * @internal
3068
3078
  */
3069
3079
  bindEvents(): void;
3070
- private unBindEvents;
3071
- private _onUserChangeVolume;
3072
- private _onVolumeConfig;
3073
3080
  private onCoreReady;
3081
+ private onVolumeChange;
3074
3082
  private onEnter;
3075
- private numberTo;
3076
- private clearCurrentInterval;
3077
3083
  private onLeave;
3084
+ private fade;
3085
+ private stopFade;
3078
3086
  }
3079
3087
 
3080
3088
  /**
@@ -3085,6 +3093,20 @@ export declare enum VolumeFadeEvents {
3085
3093
  FADE = "core:volume:fade"
3086
3094
  }
3087
3095
 
3096
+ /**
3097
+ * @beta
3098
+ */
3099
+ export declare type VolumeFadeSettings = {
3100
+ /**
3101
+ * Initial active volume level, effective until volume is changed via media control
3102
+ */
3103
+ level?: number;
3104
+ /**
3105
+ * Fade duration, ms
3106
+ */
3107
+ duration?: number;
3108
+ };
3109
+
3088
3110
  /**
3089
3111
  * Telemetry watch event data
3090
3112
  * @beta