@gcorevideo/player 2.22.13 → 2.22.15

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 (39) hide show
  1. package/assets/bottom-gear/gear.scss +20 -13
  2. package/assets/clappr-nerd-stats/button.ejs +2 -2
  3. package/assets/clappr-nerd-stats/clappr-nerd-stats.scss +0 -43
  4. package/assets/context-menu/context_menu.ejs +14 -6
  5. package/assets/context-menu/context_menu.scss +18 -4
  6. package/assets/level-selector/button.ejs +3 -3
  7. package/assets/level-selector/style.scss +0 -5
  8. package/assets/playback-rate/button.ejs +2 -2
  9. package/dist/core.js +5 -2
  10. package/dist/index.css +815 -834
  11. package/dist/index.js +79 -78
  12. package/dist/plugins/index.css +669 -688
  13. package/dist/plugins/index.js +73 -99
  14. package/lib/Player.d.ts.map +1 -1
  15. package/lib/Player.js +4 -1
  16. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts.map +1 -1
  17. package/lib/plugins/click-to-pause/ClickToPause.js +1 -1
  18. package/lib/plugins/context-menu/ContextMenu.d.ts +33 -12
  19. package/lib/plugins/context-menu/ContextMenu.d.ts.map +1 -1
  20. package/lib/plugins/context-menu/ContextMenu.js +40 -37
  21. package/lib/plugins/media-control/MediaControl.d.ts +4 -1
  22. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
  23. package/lib/plugins/media-control/MediaControl.js +30 -14
  24. package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
  25. package/lib/plugins/playback-rate/PlaybackRate.js +1 -22
  26. package/package.json +1 -1
  27. package/src/Player.ts +4 -3
  28. package/src/plugins/clappr-nerd-stats/ClapprNerdStats.ts +0 -1
  29. package/src/plugins/click-to-pause/ClickToPause.ts +1 -1
  30. package/src/plugins/context-menu/ContextMenu.ts +72 -56
  31. package/src/plugins/level-selector/__tests__/__snapshots__/QualityLevels.test.ts.snap +3 -3
  32. package/src/plugins/media-control/MediaControl.ts +36 -15
  33. package/src/plugins/media-control/__tests__/MediaControl.test.ts +101 -32
  34. package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +20 -20
  35. package/src/plugins/playback-rate/PlaybackRate.ts +1 -24
  36. package/src/plugins/playback-rate/__tests__/PlaybackRate.test.ts +2 -1
  37. package/tsconfig.tsbuildinfo +1 -1
  38. package/assets/clappr-nerd-stats/options-list.ejs +0 -9
  39. package/assets/clappr-nerd-stats/settings.ejs +0 -12
@@ -12374,7 +12374,7 @@ function rankConnectionSpeed(dlSpeed) {
12374
12374
 
12375
12375
  const pluginHtml$4 = "<% general = metrics.general %>\n<% counters = metrics.counters %>\n<% timers = metrics.timers %>\n<% extra = metrics.extra %>\n<% custom = metrics.custom %>\n\n<div class=\"stats-box\">\n <div class=\"stats-box-top\">\n <a class=\"close-button gplayer-lite-btn\" data-close-button>\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>General</span></li>\n <li>\n Display resolution:\n <div><span><%= general.displayResolution %></span></div>\n </li>\n <li>\n Volume:\n <div><span><%= general.volume %></span></div>\n </li>\n <li>\n Connection speed:\n <div><span id=\"dlText\"><%= custom.connectionSpeed %></span> Mbps</div>\n </li>\n <li class=\"canvas-wrapper\">\n <canvas id=\"speedTestCanvas\" width=\"190\" height=\"20\"></canvas>\n </li>\n <li>\n Ping:\n <div><span id=\"pingText\"><%= custom.ping %></span> ms</div>\n </li>\n <li>\n Jitter:\n <div><span id=\"jitterText\"><%= custom.jitter %></span> ms</div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span>Counters</span></li>\n <li>\n Plays:\n <div><span><%= counters.play %></span></div>\n </li>\n <li>\n Pauses:\n <div><span><%= counters.pause %></span></div>\n </li>\n <li>\n Errors:\n <div><span><%= counters.error %></span></div>\n </li>\n <li>\n Bufferings:\n <div><span><%= counters.buffering %></span></div>\n </li>\n <li>\n Decoded frames:\n <div><span><%= counters.decodedFrames %></span></div>\n </li>\n <li>\n Dropped frames:\n <div><span><%= counters.droppedFrames %></span></div>\n </li>\n <li>\n Frames per second:\n <div><span><%= counters.fps %></span></div>\n </li>\n <li>\n Bitrate changes:\n <div><span><%= counters.changeLevel %></span></div>\n </li>\n <li>\n Seeks:\n <div><span><%= counters.seek %></span></div>\n </li>\n <li>\n Fullscreen:\n <div><span><%= counters.fullscreen %></span></div>\n </li>\n <li>\n DVR seeks:\n <div><span><%= counters.dvrUsage %></span></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span>Timers</span></li>\n <li>\n Startup time:\n <div><span><%= timers.startup %></span></div>\n </li>\n <li>\n Watching time:\n <div><span><%= timers.watch %></span></div>\n </li>\n <li>\n Pause time:\n <div><span><%= timers.pause %></span></div>\n </li>\n <li>\n Buffering time:\n <div><span><%= timers.buffering %></span></div>\n </li>\n <li>\n Session time:\n <div><span><%= timers.session %></span></div>\n </li>\n <!-- <li>-->\n <!-- Latency:-->\n <!-- <div><span><%= timers.latency %></span></div>-->\n <!-- </li>-->\n </ul>\n\n <ul>\n <li class=\"title\"><span>Extra</span></li>\n <li>\n Playback:\n <div><span><%= extra.playbackName %></span></div>\n </li>\n <li>\n Playback type:\n <div><span><%= extra.playbackType %></span></div>\n </li>\n <li>\n Buffer size:\n <div><span><%= extra.buffersize %></span></div>\n </li>\n <li>\n Video duration:\n <div><span><%= extra.duration %></span></div>\n </li>\n <li>\n Current time:\n <div><span><%= extra.currentTime %></span></div>\n </li>\n <li>\n Bitrate weighted mean:\n <div><span><%= extra.bitrateWeightedMean %></span></div>\n </li>\n <li>\n Bitrate most used:\n <div><span><%= extra.bitrateMostUsed %></span></div>\n </li>\n <li>\n % Watched:\n <div><span><%= extra.watchedPercentage %></span></div>\n </li>\n <li>\n % Buffering:\n <div><span><%= extra.bufferingPercentage %></span></div>\n </li>\n </ul>\n </div>\n <div class=\"speedtest-summary\">\n <div class=\"speedtest-summary-header\">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\">VOD: <%= custom.vodQuality %></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"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\">Live: <%= custom.liveQuality %></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"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\" data-refresh-button type=\"button\">\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 Refresh\n </button>\n </div>\n</div>\n";
12376
12376
 
12377
- const buttonHtml$3 = "<button class='nerd-button gplayer-lite-btn gcore-skin-text-color gear-option' id=\"nerd-stats-button\">\n <span class=\"stats-icon\"><%= icon %></span>\n <span><%= i18n.t('statistics') %></span>\n</button>\n";
12377
+ 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";
12378
12378
 
12379
12379
  const statsIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.16675 14.1667H10.8334V9.16666H9.16675V14.1667ZM10.0001 7.5C10.2362 7.5 10.4342 7.42 10.5942 7.26C10.7542 7.1 10.834 6.90222 10.8334 6.66666C10.8334 6.43055 10.7534 6.2325 10.5934 6.0725C10.4334 5.9125 10.2356 5.83278 10.0001 5.83333C9.76397 5.83333 9.56591 5.91333 9.40591 6.07333C9.24591 6.23333 9.16619 6.43111 9.16675 6.66666C9.16675 6.90278 9.24675 7.10083 9.40675 7.26083C9.56675 7.42083 9.76453 7.50055 10.0001 7.5ZM10.0001 18.3333C8.8473 18.3333 7.76397 18.1144 6.75008 17.6767C5.73619 17.2389 4.85425 16.6453 4.10425 15.8958C3.35425 15.1458 2.76064 14.2639 2.32341 13.25C1.88619 12.2361 1.6673 11.1528 1.66675 10C1.66675 8.84722 1.88564 7.76389 2.32341 6.75C2.76119 5.73611 3.3548 4.85416 4.10425 4.10416C4.85425 3.35416 5.73619 2.76055 6.75008 2.32333C7.76397 1.88611 8.8473 1.66722 10.0001 1.66666C11.1529 1.66666 12.2362 1.88555 13.2501 2.32333C14.264 2.76111 15.1459 3.35472 15.8959 4.10416C16.6459 4.85416 17.2398 5.73611 17.6776 6.75C18.1154 7.76389 18.334 8.84722 18.3334 10C18.3334 11.1528 18.1145 12.2361 17.6767 13.25C17.239 14.2639 16.6454 15.1458 15.8959 15.8958C15.1459 16.6458 14.264 17.2397 13.2501 17.6775C12.2362 18.1153 11.1529 18.3339 10.0001 18.3333ZM10.0001 16.6667C11.8612 16.6667 13.4376 16.0208 14.7292 14.7292C16.0209 13.4375 16.6667 11.8611 16.6667 10C16.6667 8.13889 16.0209 6.5625 14.7292 5.27083C13.4376 3.97916 11.8612 3.33333 10.0001 3.33333C8.13897 3.33333 6.56258 3.97916 5.27091 5.27083C3.97925 6.5625 3.33341 8.13889 3.33341 10C3.33341 11.8611 3.97925 13.4375 5.27091 14.7292C6.56258 16.0208 8.13897 16.6667 10.0001 16.6667Z\" fill=\"#FFFFFF\"/>\n</svg>\n";
12380
12380
 
@@ -13318,42 +13318,18 @@ class ClipsPlugin extends UICorePlugin {
13318
13318
  }
13319
13319
  }
13320
13320
 
13321
- const templateHtml$1 = "<ul class=\"context-menu-list\">\n <% if(options) { %>\n <% for (var i = 0; i < options.length; i++) { %>\n <li class=\"context-menu-list-item <%= options[i].class %>\"\n data-<%= options[i].name %>><%= options[i].label %></li>\n <% } %>\n <% } %>\n</ul>\n";
13322
-
13323
- var version$1 = "2.22.13";
13324
-
13325
- var packages = {
13326
- "node_modules/@clappr/core": {
13327
- version: "0.11.4"},
13328
- "node_modules/dashjs": {
13329
- version: "4.7.4"},
13330
- "node_modules/hls.js": {
13331
- version: "1.5.20"}};
13332
-
13333
- /**
13334
- * Version information about the gplayer and its main dependencies
13335
- * @returns Version information about the gplayer and its main dependencies
13336
- * @beta
13337
- */
13338
- function version() {
13339
- return {
13340
- gplayer: version$1,
13341
- clappr: packages['node_modules/@clappr/core'].version,
13342
- dashjs: packages['node_modules/dashjs'].version,
13343
- hlsjs: packages['node_modules/hls.js'].version,
13344
- };
13345
- }
13321
+ const templateHtml$1 = "<ul class=\"context-menu-list\" role=\"menu\" id=\"context-menu-options\">\n <% for (const item of options) { %>\n <li class=\"context-menu-list-item <%= item.class %>\">\n <button role=\"menuitem\" data-name=\"<%= item.name %>\">\n <% if (iconic) { %>\n <span class=\"context-menu-list-item_icon\"><%= item.icon || '' %></span>\n <% } %>\n <% if (item.labelKey) { %>\n <%= i18n.t(item.labelKey) %>\n <% } else { %>\n <%= item.label %>\n <% } %>\n </button>\n </li>\n <% } %>\n</ul>\n";
13346
13322
 
13347
13323
  /**
13348
13324
  * `PLUGIN` that displays a small context menu when clicked on the player container.
13349
13325
  * @beta
13350
13326
  * @remarks
13351
13327
  * Configuration options - {@link ContextMenuPluginSettings}
13328
+ *
13329
+ * Should not be used together with {@link ClickToPause} plugin
13352
13330
  */
13353
13331
  class ContextMenu extends UIContainerPlugin {
13354
- _label = '';
13355
- _url = '';
13356
- menuOptions = [];
13332
+ open = false;
13357
13333
  /**
13358
13334
  * @internal
13359
13335
  */
@@ -13373,34 +13349,16 @@ class ContextMenu extends UIContainerPlugin {
13373
13349
  return { class: 'context-menu' };
13374
13350
  }
13375
13351
  static template = tmpl(templateHtml$1);
13376
- get label() {
13377
- return this._label || 'Gcore player ver. ' + version().gplayer;
13378
- }
13379
- get url() {
13380
- return this._url || 'https://gcore.com/';
13381
- }
13382
- get exposeVersion() {
13383
- return {
13384
- label: this.label,
13385
- name: 'version',
13386
- };
13387
- }
13388
13352
  /**
13389
13353
  * @internal
13390
13354
  */
13391
13355
  get events() {
13392
13356
  return {
13393
- 'click [data-version]': 'onOpenMainPage',
13357
+ 'click [role="menuitem"]': 'runAction',
13394
13358
  };
13395
13359
  }
13396
13360
  constructor(container) {
13397
13361
  super(container);
13398
- if (this.options.contextMenu && this.options.contextMenu.label) {
13399
- this._label = this.options.contextMenu.label;
13400
- }
13401
- if (this.options.contextMenu && this.options.contextMenu.url) {
13402
- this._url = this.options.contextMenu.url;
13403
- }
13404
13362
  this.render();
13405
13363
  $('body').on('click', this.hideOnBodyClick);
13406
13364
  }
@@ -13408,8 +13366,8 @@ class ContextMenu extends UIContainerPlugin {
13408
13366
  * @internal
13409
13367
  */
13410
13368
  bindEvents() {
13411
- this.listenTo(this.container, Events.CONTAINER_CONTEXTMENU, this.toggleContextMenu);
13412
- this.listenTo(this.container, Events.CONTAINER_CLICK, this.hide);
13369
+ this.listenTo(this.container, Events.CONTAINER_CONTEXTMENU, this.onContextMenu);
13370
+ this.listenTo(this.container, Events.CONTAINER_CLICK, this.onContainerClick);
13413
13371
  }
13414
13372
  /**
13415
13373
  * @internal
@@ -13418,34 +13376,55 @@ class ContextMenu extends UIContainerPlugin {
13418
13376
  $('body').off('click', this.hideOnBodyClick);
13419
13377
  return super.destroy();
13420
13378
  }
13421
- toggleContextMenu(event) {
13379
+ onContainerClick() {
13380
+ this.hide();
13381
+ }
13382
+ onContextMenu(event) {
13383
+ if (!this.options.contextMenu?.options?.length) {
13384
+ return;
13385
+ }
13422
13386
  event.preventDefault();
13387
+ event.stopPropagation();
13423
13388
  const offset = this.container?.$el.offset();
13424
13389
  this.show(event.pageY - offset.top, event.pageX - offset.left);
13425
13390
  }
13426
13391
  show(top, left) {
13427
- this.hide();
13428
- if (this.options.contextMenu &&
13429
- this.options.contextMenu.preventShowContextMenu) {
13430
- return;
13431
- }
13392
+ this.open = true;
13432
13393
  this.$el.css({ top, left });
13433
13394
  this.$el.show();
13434
13395
  }
13435
13396
  hide() {
13397
+ this.open = false;
13436
13398
  this.$el.hide();
13437
13399
  }
13438
- onOpenMainPage() {
13439
- window.open(this.url, '_blank');
13400
+ runAction(event) {
13401
+ event.preventDefault();
13402
+ event.stopPropagation();
13403
+ const itemName = event.currentTarget.dataset.name;
13404
+ if (!itemName) {
13405
+ return;
13406
+ }
13407
+ const item = this.options.contextMenu?.options.find((option) => option.name === itemName);
13408
+ if (item?.handler) {
13409
+ item.handler();
13410
+ }
13411
+ this.hide();
13440
13412
  }
13441
13413
  /**
13442
13414
  * @internal
13443
13415
  */
13444
13416
  render() {
13445
- this.menuOptions = [this.exposeVersion];
13446
- this.$el.html(ContextMenu.template({ options: this.menuOptions }));
13417
+ if (!this.options.contextMenu?.options?.length) {
13418
+ return this;
13419
+ }
13420
+ const options = this.options.contextMenu.options;
13421
+ this.$el.html(ContextMenu.template({
13422
+ options,
13423
+ i18n: this.container.i18n,
13424
+ iconic: options.some((option) => option.icon),
13425
+ }));
13447
13426
  this.container.$el.append(this.$el); // TODO append to the container, turn into a container plugin
13448
- this.hide();
13427
+ this.$el.hide();
13449
13428
  return this;
13450
13429
  }
13451
13430
  hideOnBodyClick = () => {
@@ -14418,8 +14397,10 @@ class MediaControl extends UICorePlugin {
14418
14397
  kibo;
14419
14398
  lastMouseX = 0;
14420
14399
  lastMouseY = 0;
14421
- needsUpdate = false;
14400
+ metadataLoaded = false;
14401
+ hasUpdate = false;
14422
14402
  persistConfig;
14403
+ renderTimerId = null;
14423
14404
  rendered = false;
14424
14405
  settings = INITIAL_SETTINGS;
14425
14406
  userDisabled = false;
@@ -14605,8 +14586,10 @@ class MediaControl extends UICorePlugin {
14605
14586
  this.listenTo(this.core.activeContainer, Events.CONTAINER_ENDED, this.ended);
14606
14587
  this.listenTo(this.core.activeContainer, Events.CONTAINER_VOLUME, this.onVolumeChanged);
14607
14588
  this.listenTo(this.core.activeContainer, Events.CONTAINER_OPTIONS_CHANGE, this.setInitialVolume);
14608
- // wait until the metadata has loaded and then check if fullscreen on video tag is supported
14609
- this.listenToOnce(this.core.activeContainer, Events.CONTAINER_LOADEDMETADATA, this.onLoadedMetadata);
14589
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_LOADEDMETADATA, this.onLoadedMetadata);
14590
+ this.listenTo(this.core, Events.CONTAINER_DESTROYED, () => {
14591
+ this.cancelRenderTimer();
14592
+ });
14610
14593
  }
14611
14594
  /**
14612
14595
  * Hides the media control UI
@@ -14647,13 +14630,17 @@ class MediaControl extends UICorePlugin {
14647
14630
  // TODO sort out, use single utility function
14648
14631
  this.fullScreenOnVideoTagSupported = true;
14649
14632
  }
14650
- this.updateSettings();
14651
- if (this.core.activeContainer.getPlaybackType() === Playback.LIVE) {
14652
- this.$el.addClass('live');
14653
- }
14654
- else {
14655
- this.$el.removeClass('live');
14656
- }
14633
+ this.renderTimerId = setTimeout(() => {
14634
+ this.renderTimerId = null;
14635
+ this.metadataLoaded = true;
14636
+ this.render();
14637
+ if (this.core.activeContainer.getPlaybackType() === Playback.LIVE) {
14638
+ this.$el.addClass('live');
14639
+ }
14640
+ else {
14641
+ this.$el.removeClass('live');
14642
+ }
14643
+ }, 25);
14657
14644
  }
14658
14645
  updateVolumeUI() {
14659
14646
  // this will be called after a render
@@ -14876,6 +14863,7 @@ class MediaControl extends UICorePlugin {
14876
14863
  }
14877
14864
  onActiveContainerChanged() {
14878
14865
  this.fullScreenOnVideoTagSupported = false;
14866
+ this.metadataLoaded = false;
14879
14867
  // set the new container to match the volume of the last one
14880
14868
  this.setInitialVolume();
14881
14869
  this.changeTogglePlay();
@@ -15095,7 +15083,7 @@ class MediaControl extends UICorePlugin {
15095
15083
  const settingsChanged = serializeSettings(this.settings) !== serializeSettings(newSettings);
15096
15084
  if (settingsChanged) {
15097
15085
  this.settings = newSettings;
15098
- this.needsUpdate = true;
15086
+ this.hasUpdate = true;
15099
15087
  this.render();
15100
15088
  }
15101
15089
  }
@@ -15323,6 +15311,7 @@ class MediaControl extends UICorePlugin {
15323
15311
  * @internal
15324
15312
  */
15325
15313
  destroy() {
15314
+ this.cancelRenderTimer();
15326
15315
  $(document).unbind('mouseup', this.stopDrag);
15327
15316
  $(document).unbind('mousemove', this.updateDrag);
15328
15317
  $(document).unbind('touchend', this.stopDrag);
@@ -15330,6 +15319,12 @@ class MediaControl extends UICorePlugin {
15330
15319
  this.unbindKeyEvents();
15331
15320
  return super.destroy();
15332
15321
  }
15322
+ cancelRenderTimer() {
15323
+ if (this.renderTimerId) {
15324
+ clearTimeout(this.renderTimerId);
15325
+ this.renderTimerId = null;
15326
+ }
15327
+ }
15333
15328
  configure() {
15334
15329
  this.trigger(Events.MEDIACONTROL_OPTIONS_CHANGE);
15335
15330
  }
@@ -15337,8 +15332,8 @@ class MediaControl extends UICorePlugin {
15337
15332
  * @internal
15338
15333
  */
15339
15334
  render() {
15340
- trace(`${T$a} render`, { needsUpdate: this.needsUpdate });
15341
- if (!this.needsUpdate) {
15335
+ trace(`${T$a} render`, { needsUpdate: this.hasUpdate, metadataLoaded: this.metadataLoaded });
15336
+ if (!this.hasUpdate || !this.metadataLoaded) {
15342
15337
  return this;
15343
15338
  }
15344
15339
  const timeout = this.options.hideMediaControlDelay || 2000;
@@ -15388,7 +15383,7 @@ class MediaControl extends UICorePlugin {
15388
15383
  this.core.$el.append(this.el);
15389
15384
  this.rendered = true;
15390
15385
  this.updateVolumeUI();
15391
- this.needsUpdate = false;
15386
+ this.hasUpdate = false;
15392
15387
  // TODO setTimeout?
15393
15388
  this.trigger(Events.MEDIACONTROL_RENDERED);
15394
15389
  return this;
@@ -15949,7 +15944,7 @@ class PictureInPicture extends UICorePlugin {
15949
15944
  }
15950
15945
  }
15951
15946
 
15952
- const buttonHtml$1 = "<button class='gplayer-lite-btn gcore-skin-text-color gear-option' id=\"playback-rate-button\">\n <span class=\"gear-option_speed-icon\"><%= speedIcon %></span>\n <span class=\"gear-option_label\"><%= i18n.t('playback_rate') %></span>\n <span class=\"gear-option_arrow-right-icon\"><%= arrowRightIcon %></span>\n <span class='gear-option_value'><%= title %></span>\n</button>\n";
15947
+ const buttonHtml$1 = "<button class='gplayer-lite-btn gcore-skin-text-color gear-option' id=\"playback-rate-button\">\n <span class=\"gear-option_speed-icon gear-option_icon\"><%= speedIcon %></span>\n <span class=\"gear-option_label\"><%= i18n.t('playback_rate') %></span>\n <span class='gear-option_value'><%= title %></span>\n <span class=\"gear-option_arrow-right-icon\"><%= arrowRightIcon %></span>\n</button>\n";
15953
15948
 
15954
15949
  const listHtml$1 = "<button class=\"gplayer-lite-btn go-back gcore-skin-text-color\" id=\"playback-rate-back-button\">\n <span class=\"arrow-left-icon\"><%= arrowLeftIcon %></span>\n <%= i18n.t('playback_rate') %>\n</button>\n<ul class=\"gear-sub-menu\" id=\"playback-rate-menu\">\n <% for (const item of playbackRates) { %>\n <li<%= item.value === current ? ' class=\"current\"' : '' %>>\n <a href=\"#\" class=\"gear-sub-menu_btn gcore-skin-text-color<%= item.value === current ? ' gcore-skin-active' : '' %>\" data-rate=\"<%= item.value %>\">\n <span class=\"check-icon\"><%= checkIcon %></span>\n <%= item.label %>\n </a>\n </li>\n <% } %>\n</ul>";
15955
15950
 
@@ -16018,7 +16013,6 @@ class PlaybackRate extends UICorePlugin {
16018
16013
  // private prevSelectedRate: string | undefined
16019
16014
  selectedRate = DEFAULT_PLAYBACK_RATE;
16020
16015
  metadataLoaded = false;
16021
- // private playbackSettingsUpdateReceived = false
16022
16016
  mountTimerId = null;
16023
16017
  /**
16024
16018
  * @internal
@@ -16077,14 +16071,8 @@ class PlaybackRate extends UICorePlugin {
16077
16071
  }
16078
16072
  onActiveContainerChange() {
16079
16073
  this.metadataLoaded = false;
16080
- // this.playbackSettingsUpdateReceived = false
16081
16074
  this.listenTo(this.core.activePlayback, Events.PLAYBACK_STOP, this.onStop);
16082
16075
  this.listenTo(this.core.activePlayback, Events.PLAYBACK_PLAY, this.onPlay);
16083
- // this.listenTo(
16084
- // this.core.activePlayback,
16085
- // Events.PLAYBACK_SETTINGSUPDATE,
16086
- // this.onSettingsUpdate,
16087
- // )
16088
16076
  this.listenTo(this.core.activePlayback, PlaybackEvents.PLAYBACK_RATE_CHANGED, this.onPlaybackRateChange);
16089
16077
  this.listenTo(this.core.activeContainer, Events.CONTAINER_LOADEDMETADATA, this.onMetaDataLoaded);
16090
16078
  }
@@ -16111,27 +16099,13 @@ class PlaybackRate extends UICorePlugin {
16111
16099
  i18n: this.core.i18n,
16112
16100
  })));
16113
16101
  }
16114
- // private onSettingsUpdate() {
16115
- // trace(`${T} onSettingsUpdate`, {
16116
- // playbackType: this.core.activePlayback.getPlaybackType(),
16117
- // dvrEnabled: this.core.activePlayback.dvrEnabled,
16118
- // })
16119
- // this.playbackSettingsUpdateReceived = true
16120
- // if (this.metadataLoaded) {
16121
- // if (this.mountTimerId) {
16122
- // clearTimeout(this.mountTimerId)
16123
- // this.mountTimerId = null
16124
- // }
16125
- // this.mount()
16126
- // }
16127
- // }
16128
16102
  onMetaDataLoaded() {
16129
16103
  trace(`${T$7} onMetaDataLoaded`, {
16130
16104
  playbackType: this.core.activePlayback.getPlaybackType(),
16131
16105
  dvrEnabled: this.core.activePlayback.dvrEnabled,
16132
16106
  });
16133
- this.metadataLoaded = true;
16134
16107
  this.mountTimerId = setTimeout(() => {
16108
+ this.metadataLoaded = true;
16135
16109
  this.mountTimerId = null;
16136
16110
  this.mount();
16137
16111
  }, 25);
@@ -16548,7 +16522,7 @@ class Poster extends UIContainerPlugin {
16548
16522
  }
16549
16523
  }
16550
16524
 
16551
- const buttonHtml = "<button class='gplayer-lite-btn gcore-skin-text-color gear-option' aria-haspopup=\"menu\">\n <span class=\"gear-option_hd-icon<%= isHd ? '' : ' hidden' %>\"><%= hdIcon %></span>\n <span><%= i18n.t('quality') %></span>\n <span class=\"gear-option_arrow-right-icon\"><%= arrowRightIcon %></span>\n <span class='gear-option_value'><%= currentText %></span>\n</button>\n";
16525
+ const buttonHtml = "<button class='gplayer-lite-btn gcore-skin-text-color gear-option' aria-haspopup=\"menu\">\n <span class=\"gear-option_icon<%= isHd ? '' : ' hidden' %>\"><%= hdIcon %></span>\n <span class=\"gear-option_label\"><%= i18n.t('quality') %></span>\n <span class='gear-option_value'><%= currentText %></span>\n <span class=\"gear-option_arrow-right-icon\"><%= arrowRightIcon %></span>\n</button>\n";
16552
16526
 
16553
16527
  const listHtml = "<button class=\"gplayer-lite-btn go-back gcore-skin-text-color\" id=\"level-selector-back-button\">\n <span class=\"arrow-left-icon\"><%= arrowLeftIcon %></span>\n <%= i18n.t('quality') %>\n</button>\n<ul class=\"gear-sub-menu quality-levels\" id=\"level-selector-menu\" role=\"menu\">\n <% if (!removeAuto) { %>\n <li>\n <a href=\"#\" class='gear-sub-menu_btn gcore-skin-text-color' data-id=\"-1\" id=\"level_selector_auto\">\n <span class=\"check-icon\"><%= checkIcon %></span>\n <%= i18n.t('auto') %>\n </a>\n </li>\n <% } %>\n <% for (const item of levels.slice().reverse()) {\n var disabled = maxLevel >= 0 && item.level > maxLevel\n var checked = item.level === current\n %>\n <li class=\"<%= disabled ? ' disabled' : ''%><%=checked ? ' current' : ''%>\">\n <a href=\"#\"\n class=\"gear-sub-menu_btn gcore-skin-text-color<%= checked ? ' gcore-skin-active' : '' %>\"\n data-id=\"<%= item.level %>\"\n data-disabled=\"<%= disabled %>\"\n data-checked=\"<%= checked %>\"\n role=\"menuitemradio\"\n id=\"level_selector_<%= item.width > item.height ? item.height : item.width %>\"\n >\n <span class=\"check-icon\"><%= checkIcon %></span>\n <%= labels[item.level] %>\n </a>\n </li>\n <% } %>\n</ul>\n";
16554
16528
 
@@ -1 +1 @@
1
- {"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../src/Player.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../src/Player.ts"],"names":[],"mappings":"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"}
package/lib/Player.js CHANGED
@@ -93,6 +93,9 @@ export class Player {
93
93
  * ```
94
94
  */
95
95
  attachTo(playerElement) {
96
+ trace(`${T} attachTo`, {
97
+ player: !!this.player,
98
+ });
96
99
  assert.ok(!this.player, 'Player already initialized');
97
100
  assert.ok(playerElement, 'Player container element is required');
98
101
  if (this.config.debug === 'all' || this.config.debug === 'clappr') {
@@ -304,9 +307,9 @@ export class Player {
304
307
  trace(`${T} initPlayer`, {
305
308
  autoPlay: coreOptions.autoPlay,
306
309
  sources: coreOptions.sources,
310
+ player: !!this.player,
307
311
  // TODO selected options
308
312
  });
309
- assert.ok(!this.player, 'Player already initialized');
310
313
  const player = new PlayerClappr(coreOptions);
311
314
  this.player = player;
312
315
  this.bindCoreListeners();
@@ -1 +1 @@
1
- {"version":3,"file":"ClapprNerdStats.d.ts","sourceRoot":"","sources":["../../../src/plugins/clappr-nerd-stats/ClapprNerdStats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,IAAI,EAAa,MAAM,cAAc,CAAA;AAsB9E,OAAO,0DAA0D,CAAA;AAgGjE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,aAAa,CAIpB;IAED,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO,CAAC,QAAQ,CAAU;IAE1B,OAAO,CAAC,YAAY,CAAc;IAElC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAE7D;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED;;OAEG;IACH,IAAa,MAAM;;;;MAMlB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,sBAAsB,GAEjC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,YAAY,GAEvB;gBAEW,IAAI,EAAE,IAAI;IAgBtB;;OAEG;IACM,UAAU;IAInB,OAAO,CAAC,WAAW;IAiCnB,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,IAAI;IAeZ,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACM,MAAM;IASf,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,gBAAgB;CAWzB"}
1
+ {"version":3,"file":"ClapprNerdStats.d.ts","sourceRoot":"","sources":["../../../src/plugins/clappr-nerd-stats/ClapprNerdStats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,IAAI,EAAa,MAAM,cAAc,CAAA;AAsB9E,OAAO,0DAA0D,CAAA;AA+FjE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,aAAa,CAIpB;IAED,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO,CAAC,QAAQ,CAAU;IAE1B,OAAO,CAAC,YAAY,CAAc;IAElC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAE7D;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED;;OAEG;IACH,IAAa,MAAM;;;;MAMlB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,sBAAsB,GAEjC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,YAAY,GAEvB;gBAEW,IAAI,EAAE,IAAI;IAgBtB;;OAEG;IACM,UAAU;IAInB,OAAO,CAAC,WAAW;IAiCnB,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,IAAI;IAeZ,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACM,MAAM;IASf,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,gBAAgB;CAWzB"}
@@ -5,7 +5,7 @@
5
5
  import { ContainerPlugin, Events, Playback } from '@clappr/core';
6
6
  import { trace } from '@gcorevideo/utils';
7
7
  import { CLAPPR_VERSION } from '../../build.js';
8
- const T = 'plugins.click_to_pause_custom';
8
+ const T = 'plugins.click_to_pause';
9
9
  /**
10
10
  * A small `PLUGIN` that toggles the playback state on click over the video container
11
11
  * @beta
@@ -1,24 +1,47 @@
1
1
  import { Container, UIContainerPlugin } from '@clappr/core';
2
2
  import '../../../assets/context-menu/context_menu.scss';
3
+ /**
4
+ * @beta
5
+ */
6
+ export type MenuOption = {
7
+ /**
8
+ * Menu item label text. One of `label` or `labelKey` must be specified.
9
+ */
10
+ label?: string;
11
+ /**
12
+ * Menu item label localisation key, if specified, the `label` will be ignored
13
+ */
14
+ labelKey?: string;
15
+ /**
16
+ * Menu item name. Must be unique.
17
+ */
18
+ name: string;
19
+ /**
20
+ * Menu item handler function
21
+ */
22
+ handler?: () => void;
23
+ /**
24
+ * Menu item icon, plain HTML string
25
+ */
26
+ icon?: string;
27
+ };
3
28
  /**
4
29
  * Context menu plugin settings
5
30
  * @beta
6
31
  */
7
32
  export interface ContextMenuPluginSettings {
8
- label?: string;
9
- url?: string;
10
- preventShowContextMenu?: boolean;
33
+ options?: MenuOption[];
11
34
  }
12
35
  /**
13
36
  * `PLUGIN` that displays a small context menu when clicked on the player container.
14
37
  * @beta
15
38
  * @remarks
16
39
  * Configuration options - {@link ContextMenuPluginSettings}
40
+ *
41
+ * Should not be used together with {@link ClickToPause} plugin
17
42
  */
18
43
  export declare class ContextMenu extends UIContainerPlugin {
19
- private _label;
20
- private _url;
21
- private menuOptions;
44
+ private open;
22
45
  /**
23
46
  * @internal
24
47
  */
@@ -36,14 +59,11 @@ export declare class ContextMenu extends UIContainerPlugin {
36
59
  class: string;
37
60
  };
38
61
  private static readonly template;
39
- private get label();
40
- private get url();
41
- private get exposeVersion();
42
62
  /**
43
63
  * @internal
44
64
  */
45
65
  get events(): {
46
- 'click [data-version]': string;
66
+ 'click [role="menuitem"]': string;
47
67
  };
48
68
  constructor(container: Container);
49
69
  /**
@@ -54,10 +74,11 @@ export declare class ContextMenu extends UIContainerPlugin {
54
74
  * @internal
55
75
  */
56
76
  destroy(): import("@clappr/core").UIObject;
57
- private toggleContextMenu;
77
+ private onContainerClick;
78
+ private onContextMenu;
58
79
  private show;
59
80
  private hide;
60
- private onOpenMainPage;
81
+ private runAction;
61
82
  /**
62
83
  * @internal
63
84
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/plugins/context-menu/ContextMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,SAAS,EACT,iBAAiB,EAClB,MAAM,cAAc,CAAA;AAIrB,OAAO,gDAAgD,CAAA;AASvD;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC;AAED;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,iBAAiB;IAChD,OAAO,CAAC,MAAM,CAAa;IAE3B,OAAO,CAAC,IAAI,CAAa;IAEzB,OAAO,CAAC,WAAW,CAAmB;IAEtC;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,IAAa,UAAU;;MAEtB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAEzD,OAAO,KAAK,KAAK,GAEhB;IAED,OAAO,KAAK,GAAG,GAEd;IAED,OAAO,KAAK,aAAa,GAKxB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;gBAEW,SAAS,EAAE,SAAS;IAYhC;;OAEG;IACM,UAAU;IASnB;;OAEG;IACM,OAAO;IAKhB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,cAAc;IAItB;;OAEG;IACM,MAAM;IASf,OAAO,CAAC,eAAe,CAEtB;CACF"}
1
+ {"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/plugins/context-menu/ContextMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAIhF,OAAO,gDAAgD,CAAA;AAGvD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;CACvB;AAID;;;;;;;GAOG;AACH,qBAAa,WAAY,SAAQ,iBAAiB;IAChD,OAAO,CAAC,IAAI,CAAQ;IAEpB;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,IAAa,UAAU;;MAEtB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAEzD;;OAEG;IACH,IAAa,MAAM;;MAIlB;gBAEW,SAAS,EAAE,SAAS;IAMhC;;OAEG;IACM,UAAU;IASnB;;OAEG;IACM,OAAO;IAKhB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,SAAS;IAiBjB;;OAEG;IACM,MAAM;IAkBf,OAAO,CAAC,eAAe,CAEtB;CACF"}