@flowplayer/player 3.16.0-rc → 3.16.0-rc.2

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 (58) hide show
  1. package/core/events.d.ts +2 -8
  2. package/core/events.js +1 -4
  3. package/core.js +1 -1
  4. package/default.js +1 -1
  5. package/embed.js +2 -2
  6. package/flowplayer.css +1 -1
  7. package/index.d.ts +29 -40
  8. package/package.json +1 -1
  9. package/plugins/ads.d.ts +29 -40
  10. package/plugins/ads.js +1 -1
  11. package/plugins/airplay.d.ts +29 -40
  12. package/plugins/analytics.d.ts +29 -40
  13. package/plugins/analytics.js +1 -1
  14. package/plugins/asel.d.ts +29 -40
  15. package/plugins/audio.d.ts +29 -40
  16. package/plugins/chapters.d.ts +29 -40
  17. package/plugins/chromecast.d.ts +29 -40
  18. package/plugins/comscore.d.ts +29 -40
  19. package/plugins/consent.d.ts +78 -41
  20. package/plugins/consent.js +1 -1
  21. package/plugins/context-menu.d.ts +29 -40
  22. package/plugins/cuepoints.d.ts +29 -40
  23. package/plugins/dash.d.ts +29 -40
  24. package/plugins/drm.d.ts +29 -40
  25. package/plugins/endscreen.d.ts +29 -40
  26. package/plugins/fas.d.ts +29 -40
  27. package/plugins/float-on-scroll.d.ts +29 -40
  28. package/plugins/ga4.d.ts +29 -40
  29. package/plugins/gemius.d.ts +29 -40
  30. package/plugins/google-analytics.d.ts +29 -40
  31. package/plugins/health.d.ts +37 -41
  32. package/plugins/health.js +1 -1
  33. package/plugins/hls.d.ts +29 -40
  34. package/plugins/hls.js +1 -1
  35. package/plugins/id3.d.ts +96 -41
  36. package/plugins/iframe.d.ts +29 -40
  37. package/plugins/keyboard.d.ts +29 -40
  38. package/plugins/media-session.d.ts +29 -40
  39. package/plugins/message.d.ts +29 -40
  40. package/plugins/ovp.d.ts +29 -40
  41. package/plugins/playlist.d.ts +29 -71
  42. package/plugins/playlist.js +1 -1
  43. package/plugins/preview.d.ts +29 -40
  44. package/plugins/qsel.d.ts +102 -38
  45. package/plugins/qsel.js +1 -1
  46. package/plugins/qul.d.ts +29 -40
  47. package/plugins/rts.d.ts +29 -40
  48. package/plugins/share.d.ts +29 -40
  49. package/plugins/speed.d.ts +29 -40
  50. package/plugins/ssai.d.ts +29 -40
  51. package/plugins/ssai.js +1 -1
  52. package/plugins/subtitles.d.ts +29 -40
  53. package/plugins/thumbnails.d.ts +29 -40
  54. package/plugins/tizen.d.ts +29 -40
  55. package/plugins/vtsel.d.ts +122 -33
  56. package/plugins/vtsel.js +1 -1
  57. package/plugins/webos.d.ts +29 -40
  58. package/util/loader.d.ts +27 -40
@@ -762,6 +762,8 @@ declare const NO_CONTROLS = "no-controls";
762
762
 
763
763
  declare const NO_DVR = "no-timeline";
764
764
 
765
+ declare type NoInfer_2<T> = [T][T extends any ? 0 : never];
766
+
765
767
  /* Excluded from this release type: NON_RECOVERABLE_ERROR */
766
768
 
767
769
  /* Excluded from this release type: NonRecoverableErrorEventDetail */
@@ -902,7 +904,6 @@ declare type Player = HTMLVideoElement & PlayerEventOverloads & {
902
904
  disabled: boolean;
903
905
  /* Excluded from this release type: started */
904
906
  /* Excluded from this release type: token */
905
- tracks?: VideoTrack[];
906
907
  /* Excluded from this release type: _customElements */
907
908
  /* Excluded from this release type: _storage */
908
909
  };
@@ -986,6 +987,7 @@ declare type PlayerCustomEventsOverloads = {
986
987
  */
987
988
  on(event: typeof QUALITIES, handler: (e: FPEvent<PlayerCustomEventsDetailMap[typeof QUALITIES]>) => void): Player;
988
989
  /* Excluded from this release type: on */
990
+ /* Excluded from this release type: on */
989
991
  /**
990
992
  * Listen to this event to create a recommendations grid using the data passed with the event.
991
993
  */
@@ -1004,6 +1006,11 @@ declare type PlayerCustomEventsOverloads = {
1004
1006
  /* Excluded from this release type: on */
1005
1007
  /* Excluded from this release type: on */
1006
1008
  /* Excluded from this release type: on */
1009
+ /* Excluded from this release type: on */
1010
+ /**
1011
+ * TODO: this is a workaround, since not all event overloads are typed. when all plugin work is finished, remove this
1012
+ * https://wowzamedia.jira.com/browse/PLAY-653
1013
+ */
1007
1014
  on<T>(event: string, handler: (e: FPEvent<T>) => void): Player;
1008
1015
  /* Excluded from this release type: on */
1009
1016
  /**
@@ -1028,9 +1035,12 @@ declare type PlayerCustomEventsOverloads = {
1028
1035
  */
1029
1036
  off<T>(event: string, handler: (e: FPEvent<T>) => void): Player;
1030
1037
  /* Excluded from this release type: poll */
1038
+ emit<T extends PlayerEmittableEventNames>(event: T, data?: PlayerCustomEventsDetailMap[T]): Player;
1039
+ emit(event: never, data?: never): Player;
1040
+ /* Excluded from this release type: emit */
1041
+ /* Excluded from this release type: emit */
1031
1042
  /* Excluded from this release type: emit */
1032
1043
  /* Excluded from this release type: emit */
1033
- emit<T extends PlayerEmittableEventNames>(event: T, data?: PlayerCustomEventsDetailMap[T]): Player;
1034
1044
  /* Excluded from this release type: emit */
1035
1045
  };
1036
1046
 
@@ -1144,6 +1154,17 @@ declare const /**
1144
1154
  */
1145
1155
  PROGRESS = "progress";
1146
1156
 
1157
+ /**
1158
+ * @public
1159
+ */
1160
+ declare type QselOption = {
1161
+ height: number;
1162
+ level: number;
1163
+ text: string;
1164
+ /* Excluded from this release type: videoCodec */
1165
+ width: number;
1166
+ };
1167
+
1147
1168
  /**
1148
1169
  * @public
1149
1170
  * emitted whenever a list of qualities has been made available
@@ -1162,27 +1183,11 @@ QUALITIES = "qualities";
1162
1183
  /**
1163
1184
  * @public
1164
1185
  */
1165
- declare type QualitiesEventDetail = QualityDetail[];
1186
+ declare type QualitiesEventDetail = QselOption[];
1166
1187
 
1167
- /**
1168
- * @public
1169
- */
1170
- declare type QualityDetail = {
1171
- level: number;
1172
- text: string;
1173
- width: number;
1174
- height: number;
1175
- videoCodec: string;
1176
- } | BitrateInfo | {
1177
- text: string | number;
1178
- encodingId: string;
1179
- spatialLayerId: number;
1180
- temporalLayerId: number;
1181
- maxSpatialLayerId: number;
1182
- maxTemporalLayerId: number;
1183
- height: number;
1184
- width: number;
1185
- };
1188
+ /* Excluded from this release type: _QualitiesEventDetail */
1189
+
1190
+ /* Excluded from this release type: _QualityDetail */
1186
1191
 
1187
1192
  declare enum QualityOpts {
1188
1193
  LOW = 1,
@@ -1354,20 +1359,14 @@ SEEKING_2 = "seeking";
1354
1359
 
1355
1360
  /**
1356
1361
  * @public
1357
- * allows plugins to listen for forced quality changes
1358
- * it should emit the index of the quality to set
1359
- * -1 is a special idx saying to use ABR if the plugin
1360
- * exposes an ABR implementation
1362
+ * @deprecated please use Qsel.events.SET_QUALITY
1361
1363
  */
1362
1364
  declare const /**
1363
1365
  @public
1364
1366
  * when a new player is inserted into the HTML
1365
1367
  */ /**
1366
1368
  * @public
1367
- * allows plugins to listen for forced quality changes
1368
- * it should emit the index of the quality to set
1369
- * -1 is a special idx saying to use ABR if the plugin
1370
- * exposes an ABR implementation
1369
+ * @deprecated please use Qsel.events.SET_QUALITY
1371
1370
  */
1372
1371
  SET_QUALITY = "quality:set";
1373
1372
 
@@ -1556,16 +1555,6 @@ declare const /**
1556
1555
  */
1557
1556
  VIDEO_TRACKS = "videoTracks";
1558
1557
 
1559
- /**
1560
- * @public
1561
- */
1562
- declare interface VideoTrack {
1563
- name: string;
1564
- /* Excluded from this release type: data */
1565
- default: boolean;
1566
- selected: boolean;
1567
- }
1568
-
1569
1558
  /**
1570
1559
  * @public
1571
1560
  * when a player enters the viewpoint
package/plugins/qsel.d.ts CHANGED
@@ -401,6 +401,13 @@ declare namespace events {
401
401
  }
402
402
  }
403
403
 
404
+ declare namespace events_2 {
405
+ export {
406
+ SET_QUALITY_2 as SET_QUALITY,
407
+ QUALITIES
408
+ }
409
+ }
410
+
404
411
  declare type ExtractPureAPI<T> = T extends PlayerWith<infer PureAPI> ? PureAPI : never;
405
412
 
406
413
  /**
@@ -762,6 +769,8 @@ declare const NO_CONTROLS = "no-controls";
762
769
 
763
770
  declare const NO_DVR = "no-timeline";
764
771
 
772
+ declare type NoInfer_2<T> = [T][T extends any ? 0 : never];
773
+
765
774
  /* Excluded from this release type: NON_RECOVERABLE_ERROR */
766
775
 
767
776
  /* Excluded from this release type: NonRecoverableErrorEventDetail */
@@ -902,7 +911,6 @@ declare type Player = HTMLVideoElement & PlayerEventOverloads & {
902
911
  disabled: boolean;
903
912
  /* Excluded from this release type: started */
904
913
  /* Excluded from this release type: token */
905
- tracks?: VideoTrack[];
906
914
  /* Excluded from this release type: _customElements */
907
915
  /* Excluded from this release type: _storage */
908
916
  };
@@ -986,6 +994,7 @@ declare type PlayerCustomEventsOverloads = {
986
994
  */
987
995
  on(event: typeof QUALITIES, handler: (e: FPEvent<PlayerCustomEventsDetailMap[typeof QUALITIES]>) => void): Player;
988
996
  /* Excluded from this release type: on */
997
+ /* Excluded from this release type: on */
989
998
  /**
990
999
  * Listen to this event to create a recommendations grid using the data passed with the event.
991
1000
  */
@@ -1004,6 +1013,11 @@ declare type PlayerCustomEventsOverloads = {
1004
1013
  /* Excluded from this release type: on */
1005
1014
  /* Excluded from this release type: on */
1006
1015
  /* Excluded from this release type: on */
1016
+ /* Excluded from this release type: on */
1017
+ /**
1018
+ * TODO: this is a workaround, since not all event overloads are typed. when all plugin work is finished, remove this
1019
+ * https://wowzamedia.jira.com/browse/PLAY-653
1020
+ */
1007
1021
  on<T>(event: string, handler: (e: FPEvent<T>) => void): Player;
1008
1022
  /* Excluded from this release type: on */
1009
1023
  /**
@@ -1028,9 +1042,12 @@ declare type PlayerCustomEventsOverloads = {
1028
1042
  */
1029
1043
  off<T>(event: string, handler: (e: FPEvent<T>) => void): Player;
1030
1044
  /* Excluded from this release type: poll */
1045
+ emit<T extends PlayerEmittableEventNames>(event: T, data?: PlayerCustomEventsDetailMap[T]): Player;
1046
+ emit(event: never, data?: never): Player;
1047
+ /* Excluded from this release type: emit */
1048
+ /* Excluded from this release type: emit */
1031
1049
  /* Excluded from this release type: emit */
1032
1050
  /* Excluded from this release type: emit */
1033
- emit<T extends PlayerEmittableEventNames>(event: T, data?: PlayerCustomEventsDetailMap[T]): Player;
1034
1051
  /* Excluded from this release type: emit */
1035
1052
  };
1036
1053
 
@@ -1140,10 +1157,64 @@ PROGRESS = "progress";
1140
1157
 
1141
1158
  /**
1142
1159
  * @public
1160
+ * This plugin implements a selection menu for the different quality levels of a multi-rendition stream. This plugin can be used with HLS, MPEG-DASH, and Real-Time Streaming (RTS).
1161
+ * See {@link https://developer.wowza.com/docs/wowza-flowplayer/plugins/quality-selection/ |Official Documentation}
1143
1162
  */
1144
- declare const Qsel: PluginCtor<Config, Player>;
1163
+ declare const Qsel: PluginCtor<QselConfig, QselPlayer> & QselAPI;
1145
1164
  export default Qsel;
1146
1165
 
1166
+ /**
1167
+ * @public
1168
+ */
1169
+ export declare type QselAPI = {
1170
+ events: QselEvents;
1171
+ };
1172
+
1173
+ /**
1174
+ * @public
1175
+ */
1176
+ export declare type QselConfig = ConfigWith<{
1177
+ /**
1178
+ * Configuration for Qsel plugin
1179
+ */
1180
+ qsel?: {
1181
+ /**
1182
+ * Specifies index-based label set.
1183
+ */
1184
+ labels: (null | false | string)[];
1185
+ };
1186
+ }>;
1187
+
1188
+ /**
1189
+ * @public
1190
+ */
1191
+ export declare type QselEvents = typeof events_2;
1192
+
1193
+ /**
1194
+ * @public
1195
+ */
1196
+ declare type QselOption = {
1197
+ height: number;
1198
+ level: number;
1199
+ text: string;
1200
+ /* Excluded from this release type: videoCodec */
1201
+ width: number;
1202
+ };
1203
+
1204
+ /**
1205
+ * @public
1206
+ */
1207
+ export declare type QselPlayer = PlayerWith<{
1208
+ /**
1209
+ * Emitted when the quality should be set to something different.
1210
+ */
1211
+ on(event: QselEvents["SET_QUALITY"], handler: (e: FPEvent<SetQualityEvent>) => void): Player;
1212
+ /**
1213
+ * Emit this event to preselect a quality. See {@link https://docs.flowplayer.com/demos/quality-selection-plugin| Qsel plugin demo}
1214
+ */
1215
+ emit(event: QselEvents["SET_QUALITY"], data?: SetQualityEventDetail): Player;
1216
+ }>;
1217
+
1147
1218
  /**
1148
1219
  * @public
1149
1220
  * emitted whenever a list of qualities has been made available
@@ -1162,27 +1233,11 @@ QUALITIES = "qualities";
1162
1233
  /**
1163
1234
  * @public
1164
1235
  */
1165
- declare type QualitiesEventDetail = QualityDetail[];
1236
+ declare type QualitiesEventDetail = QselOption[];
1166
1237
 
1167
- /**
1168
- * @public
1169
- */
1170
- declare type QualityDetail = {
1171
- level: number;
1172
- text: string;
1173
- width: number;
1174
- height: number;
1175
- videoCodec: string;
1176
- } | BitrateInfo | {
1177
- text: string | number;
1178
- encodingId: string;
1179
- spatialLayerId: number;
1180
- temporalLayerId: number;
1181
- maxSpatialLayerId: number;
1182
- maxTemporalLayerId: number;
1183
- height: number;
1184
- width: number;
1185
- };
1238
+ /* Excluded from this release type: _QualitiesEventDetail */
1239
+
1240
+ /* Excluded from this release type: _QualityDetail */
1186
1241
 
1187
1242
  declare enum QualityOpts {
1188
1243
  LOW = 1,
@@ -1354,22 +1409,37 @@ SEEKING_2 = "seeking";
1354
1409
 
1355
1410
  /**
1356
1411
  * @public
1357
- * allows plugins to listen for forced quality changes
1358
- * it should emit the index of the quality to set
1359
- * -1 is a special idx saying to use ABR if the plugin
1360
- * exposes an ABR implementation
1412
+ * @deprecated please use Qsel.events.SET_QUALITY
1361
1413
  */
1362
1414
  declare const /**
1363
1415
  @public
1364
1416
  * when a new player is inserted into the HTML
1365
1417
  */ /**
1418
+ * @public
1419
+ * @deprecated please use Qsel.events.SET_QUALITY
1420
+ */
1421
+ SET_QUALITY = "quality:set";
1422
+
1423
+ /**
1366
1424
  * @public
1367
1425
  * allows plugins to listen for forced quality changes
1368
1426
  * it should emit the index of the quality to set
1369
1427
  * -1 is a special idx saying to use ABR if the plugin
1370
1428
  * exposes an ABR implementation
1371
1429
  */
1372
- SET_QUALITY = "quality:set";
1430
+ declare const SET_QUALITY_2 = "quality:set";
1431
+
1432
+ /**
1433
+ * @public
1434
+ */
1435
+ export declare type SetQualityEvent = FPEvent<SetQualityEventDetail>;
1436
+
1437
+ /**
1438
+ * @public
1439
+ */
1440
+ export declare type SetQualityEventDetail = {
1441
+ level: number;
1442
+ };
1373
1443
 
1374
1444
  declare const SMALL = "is-small";
1375
1445
 
@@ -1460,6 +1530,8 @@ declare namespace states {
1460
1530
  }
1461
1531
  }
1462
1532
 
1533
+ /* Excluded from this release type: SWITCH */
1534
+
1463
1535
  /**
1464
1536
  * @public
1465
1537
  */
@@ -1523,6 +1595,8 @@ TOUCH_START = "touchstart";
1523
1595
 
1524
1596
  declare const TOUCHED = "is-touched";
1525
1597
 
1598
+ /* Excluded from this release type: TRACKS */
1599
+
1526
1600
  declare const TV = "is-tv";
1527
1601
 
1528
1602
  /**
@@ -1556,16 +1630,6 @@ declare const /**
1556
1630
  */
1557
1631
  VIDEO_TRACKS = "videoTracks";
1558
1632
 
1559
- /**
1560
- * @public
1561
- */
1562
- declare interface VideoTrack {
1563
- name: string;
1564
- /* Excluded from this release type: data */
1565
- default: boolean;
1566
- selected: boolean;
1567
- }
1568
-
1569
1633
  /**
1570
1634
  * @public
1571
1635
  * when a player enters the viewpoint
package/plugins/qsel.js CHANGED
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).flowplayer=e.flowplayer||{},e.flowplayer.qsel=t())}(this,(function(){"use strict";function e(e,t,n){const s=function(e){return Array.isArray(e)?e.slice(0):e.split(".")}(t);for(;s.length;){if(null==e)return n;const t=s.shift();if("string"!=typeof t)return n;e=e[t]}return null==e?n:e}const t=(e,t)=>new(((e,t)=>{const n=e.get(t);if(!n)throw new Error(`no flowplayer component with the name ${t} exists`);const s=window.customElements.get(t);if(!s)throw new Error(`no default flowplayer component with the name ${t} exists`);const i=window.customElements.get(n);return"function"!=typeof i?s:i})(e._customElements,t))(e);class FlowplayerComponent extends HTMLElement{constructor(e){super(),this.player=e}}const n="fp-on",s="fp-invis";class FlowplayerMenu extends FlowplayerComponent{constructor(e){super(e),this.player=e,this.menuContainer=document.createElement("details"),this.summaryEle=document.createElement("summary"),this.menuHeader=document.createElement("div"),this.menuTitle=document.createElement("h3"),this.olEle=document.createElement("ol"),this.olEle.id=o(),this.menu=document.createElement("div"),this.closeEle=document.createElement("span"),this.menuHeader.classList.add("fp-menu-header"),this.menuHeader.append(this.menuTitle,this.closeEle),this.menu.classList.add("fp-menu"),this.menu.append(this.menuHeader,this.olEle),this.closeEle.classList.add("fp-close"),this.closeEle.textContent="×",this.menuContainer.classList.add("fp-menu-container"),this.menuContainer.append(this.summaryEle,this.menu),this.menuContainer.addEventListener("click",t=>{if(t.defaultPrevented)return;t.preventDefault();const n=this.menuContainer.open;n||(i(),document.active_menu=this.menuContainer),this.menuContainer.open=!n,e.root.classList.toggle("has-menu-opened",!n),this.summaryEle.setAttribute("aria-expanded",n?"false":"true")}),this.addEventListener("focusin",e=>{const t=e.target;t instanceof HTMLLIElement&&t.setAttribute("aria-selected","true")}),this.addEventListener("focusout",e=>{const t=e.target;t instanceof HTMLLIElement&&t.setAttribute("aria-selected","false")}),this.append(this.menuContainer),this.olEle.setAttribute("aria-labelledby",this.summaryEle.id),this.olEle.setAttribute("role","menu"),this.summaryEle.setAttribute("aria-haspopup","true"),this.summaryEle.setAttribute("aria-controls",this.olEle.id),this.summaryEle.setAttribute("tabindex","0"),this.summaryEle.setAttribute("aria-expanded","false"),this.summaryEle.setAttribute("role","button")}get options(){return this.olEle.querySelectorAll("li")}setMenuAttrs(e){if(this.className=e.class,this.toggle_visibility(!0),this.summaryEle.id||(this.summaryEle.id=e.id||o()),this.summaryEle.setAttribute("aria-label",e.menuTitle||"Menu"),e.summaryTitle&&(this.summaryEle.textContent=e.summaryTitle),e.summaryIcon){const n=t(this.player,e.summaryIcon);n.setAttribute("tabindex",""),this.summaryEle.append(n)}e.menuTitle&&(this.menuTitle.textContent=e.menuTitle),this.menu.classList.toggle("fp-icons",!!e.icons),this.addEventListener(e.options_event,e=>{this.render(e.data)}),e.item_selected_event&&this.addEventListener(e.item_selected_event,e=>{void 0!==e.data&&this.select_item(e.data.selected_index)})}render(e){this.olEle&&(this.olEle.innerHTML="",e&&e.forEach(this.menuOption,this),this.toggle_visibility(!(null==e?void 0:e.length)))}menuOption(e,t){const n=document.createElement("li");n.setAttribute("role","menuitem"),n.setAttribute("aria-selected","false"),n.setAttribute("tabindex","0"),e.icon&&n.append(e.icon);const s=document.createElement("span");s.textContent=e.text,n.append(s),n.addEventListener("click",()=>{this.select_item(t),"function"==typeof e.onclick&&e.onclick()}),this.olEle.appendChild(n),e.selected&&this.select_item(t)}select_item(e){this.options.forEach((t,s)=>{t.classList.toggle(n,s===e)})}unselect_item(){this.options.forEach(e=>{e.classList.remove(n)})}toggle_visibility(e){this.classList.toggle(s,e),this.menu.style.setProperty("display",e?"none":"flex")}}function i(){Array.from(document.querySelectorAll(".fp-engine")).forEach(e=>{var t;const n=e.root.querySelector("details[open].fp-menu-container");n&&(n.open=!1,null===(t=n.querySelector("summary"))||void 0===t||t.removeAttribute("aria-expanded"),e.root.classList.toggle("has-menu-opened",!1))})}function o(){return Math.random().toString(36).replace(/[^a-z]+/g,"").substr(0,5)}function l(e,t,n){const s=function(e,t){const n=new CustomEvent(e,{detail:t,cancelable:!0});return t&&Object.defineProperty(n,"data",{get:()=>t}),n}(t,n);return e.dispatchEvent(s),e}document.addEventListener("click",(function(e){this.active_menu&&!e.composedPath().includes(this.active_menu)&&(i(),this.active_menu=void 0)})),function(){let e=!1;try{const t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("testPassive",null,t),window.removeEventListener("testPassive",null,t)}catch(e){}}();var r;const a=((r=class Qsel{constructor(e){((e,t,n)=>{window.customElements.get(t)||window.customElements.define(t,n),e.customElements.get(t)||e.customElements.set(t,t)})(e,"flowplayer-quality-menu",FlowplayerMenu)}init(n,s,i){if(!1===n.qsel)return;const o=t(i,"flowplayer-quality-menu");o instanceof FlowplayerMenu&&o.setMenuAttrs({summaryTitle:"HD",menuTitle:i.i18n("qsel.menu_title"),class:"fp-qsel",options_event:Qsel.events.TRACKS,item_selected_event:Qsel.events.SWITCH}),i.on("mount",(function(){var e;null===(e=function(e,t){const n=e._customElements.get(t);return n&&e.root.querySelector(n)||void 0}(i,i.hasState("is-tv")?"flowplayer-tv-menu":"flowplayer-control"))||void 0===e||e.append(o)})),i.on("qualities",t=>{if(!Array.isArray(t.detail))return;const s=t.detail,r=e(n,"qsel.labels",[]);l(o,Qsel.events.TRACKS,s.flatMap((e,t)=>{if("boolean"==typeof r[t]&&!r[t])return[];let n=e.height?e.height+"p":e.text;return"number"==typeof e.height&&e.height>719&&(n+=" HD"),{text:r[t]||n,onclick:u.bind(0,i,e)}})),o instanceof FlowplayerMenu&&o.toggle_visibility(s.length<2)})}}).events={TRACKS:"quality:tracks",SWITCH:"quality:update"},r);function u(e,t){e.emit("quality:set",t)}return function(e,t){if("object"==typeof exports&&"undefined"!=typeof module)return t;if(null===document.currentScript)return t;"flowplayer"in e||(e.flowplayer={extensions:[]});const n=e.flowplayer;return"function"==typeof n?(n(t),t):(Array.isArray(n.extensions)||(n.extensions=[]),~n.extensions.indexOf(t)||n.extensions.push(t),t)}(window,a)}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).flowplayer=e.flowplayer||{},e.flowplayer.qsel=t())}(this,(function(){"use strict";function e(e,t,n){const s=function(e){return Array.isArray(e)?e.slice(0):e.split(".")}(t);for(;s.length;){if(null==e)return n;const t=s.shift();if("string"!=typeof t)return n;e=e[t]}return null==e?n:e}const t=(e,t)=>new(((e,t)=>{const n=e.get(t);if(!n)throw new Error(`no flowplayer component with the name ${t} exists`);const s=window.customElements.get(t);if(!s)throw new Error(`no default flowplayer component with the name ${t} exists`);const i=window.customElements.get(n);return"function"!=typeof i?s:i})(e._customElements,t))(e);class FlowplayerComponent extends HTMLElement{constructor(e){super(),this.player=e}}const n="fp-on",s="fp-invis";class FlowplayerMenu extends FlowplayerComponent{constructor(e){super(e),this.player=e,this.menuContainer=document.createElement("details"),this.summaryEle=document.createElement("summary"),this.menuHeader=document.createElement("div"),this.menuTitle=document.createElement("h3"),this.olEle=document.createElement("ol"),this.olEle.id=o(),this.menu=document.createElement("div"),this.closeEle=document.createElement("span"),this.menuHeader.classList.add("fp-menu-header"),this.menuHeader.append(this.menuTitle,this.closeEle),this.menu.classList.add("fp-menu"),this.menu.append(this.menuHeader,this.olEle),this.closeEle.classList.add("fp-close"),this.closeEle.textContent="×",this.menuContainer.classList.add("fp-menu-container"),this.menuContainer.append(this.summaryEle,this.menu),this.menuContainer.addEventListener("click",t=>{if(t.defaultPrevented)return;t.preventDefault();const n=this.menuContainer.open;n||(i(),document.active_menu=this.menuContainer),this.menuContainer.open=!n,e.root.classList.toggle("has-menu-opened",!n),this.summaryEle.setAttribute("aria-expanded",n?"false":"true")}),this.addEventListener("focusin",e=>{const t=e.target;t instanceof HTMLLIElement&&t.setAttribute("aria-selected","true")}),this.addEventListener("focusout",e=>{const t=e.target;t instanceof HTMLLIElement&&t.setAttribute("aria-selected","false")}),this.append(this.menuContainer),this.olEle.setAttribute("aria-labelledby",this.summaryEle.id),this.olEle.setAttribute("role","menu"),this.summaryEle.setAttribute("aria-haspopup","true"),this.summaryEle.setAttribute("aria-controls",this.olEle.id),this.summaryEle.setAttribute("tabindex","0"),this.summaryEle.setAttribute("aria-expanded","false"),this.summaryEle.setAttribute("role","button")}get options(){return this.olEle.querySelectorAll("li")}setMenuAttrs(e){if(this.className=e.class,this.toggle_visibility(!0),this.summaryEle.id||(this.summaryEle.id=e.id||o()),this.summaryEle.setAttribute("aria-label",e.menuTitle||"Menu"),e.summaryTitle&&(this.summaryEle.textContent=e.summaryTitle),e.summaryIcon){const n=t(this.player,e.summaryIcon);n.setAttribute("tabindex",""),this.summaryEle.append(n)}e.menuTitle&&(this.menuTitle.textContent=e.menuTitle),this.menu.classList.toggle("fp-icons",!!e.icons),this.addEventListener(e.options_event,e=>{this.render(e.data)}),e.item_selected_event&&this.addEventListener(e.item_selected_event,e=>{void 0!==e.data&&this.select_item(e.data.selected_index)})}render(e){this.olEle&&(this.olEle.innerHTML="",e&&e.forEach(this.menuOption,this),this.toggle_visibility(!(null==e?void 0:e.length)))}menuOption(e,t){const n=document.createElement("li");n.setAttribute("role","menuitem"),n.setAttribute("aria-selected","false"),n.setAttribute("tabindex","0"),e.icon&&n.append(e.icon);const s=document.createElement("span");s.textContent=e.text,n.append(s),n.addEventListener("click",()=>{this.select_item(t),"function"==typeof e.onclick&&e.onclick()}),this.olEle.appendChild(n),e.selected&&this.select_item(t)}select_item(e){this.options.forEach((t,s)=>{t.classList.toggle(n,s===e)})}unselect_item(){this.options.forEach(e=>{e.classList.remove(n)})}toggle_visibility(e){this.classList.toggle(s,e),this.menu.style.setProperty("display",e?"none":"flex")}}function i(){Array.from(document.querySelectorAll(".fp-engine")).forEach(e=>{var t;const n=e.root.querySelector("details[open].fp-menu-container");n&&(n.open=!1,null===(t=n.querySelector("summary"))||void 0===t||t.removeAttribute("aria-expanded"),e.root.classList.toggle("has-menu-opened",!1))})}function o(){return Math.random().toString(36).replace(/[^a-z]+/g,"").substr(0,5)}function l(e,t,n){const s=function(e,t){const n=new CustomEvent(e,{detail:t,cancelable:!0});return t&&Object.defineProperty(n,"data",{get:()=>t}),n}(t,n);return e.dispatchEvent(s),e}document.addEventListener("click",(function(e){this.active_menu&&!e.composedPath().includes(this.active_menu)&&(i(),this.active_menu=void 0)})),function(){let e=!1;try{const t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("testPassive",null,t),window.removeEventListener("testPassive",null,t)}catch(e){}}();var r,a=Object.freeze({__proto__:null,SET_QUALITY:"quality:set",TRACKS:"quality:tracks",SWITCH:"quality:update",QUALITIES:"qualities"});const u=((r=class Qsel{constructor(e){((e,t,n)=>{window.customElements.get(t)||window.customElements.define(t,n),e.customElements.get(t)||e.customElements.set(t,t)})(e,"flowplayer-quality-menu",FlowplayerMenu)}init(n,s,i){if(!1===n.qsel)return;const o=t(i,"flowplayer-quality-menu");o instanceof FlowplayerMenu&&o.setMenuAttrs({summaryTitle:"HD",menuTitle:i.i18n("qsel.menu_title"),class:"fp-qsel",options_event:Qsel.events.TRACKS,item_selected_event:Qsel.events.SWITCH}),i.on("mount",(function(){var e;null===(e=function(e,t){const n=e._customElements.get(t);return n&&e.root.querySelector(n)||void 0}(i,i.hasState("is-tv")?"flowplayer-tv-menu":"flowplayer-control"))||void 0===e||e.append(o)})),i.on("qualities",t=>{if(!Array.isArray(t.detail))return;const s=t.detail,r=e(n,"qsel.labels",[]);l(o,Qsel.events.TRACKS,s.flatMap((e,t)=>{if("boolean"==typeof r[t]&&!r[t])return[];let n=e.height?e.height+"p":e.text;return"number"==typeof e.height&&e.height>719&&(n+=" HD"),{text:r[t]||n,onclick:c.bind(0,i,e)}})),o instanceof FlowplayerMenu&&o.toggle_visibility(s.length<2)})}}).events=a,r);function c(e,t){e.emit("quality:set",t)}return function(e,t){if("object"==typeof exports&&"undefined"!=typeof module)return t;if(null===document.currentScript)return t;"flowplayer"in e||(e.flowplayer={extensions:[]});const n=e.flowplayer;return"function"==typeof n?(n(t),t):(Array.isArray(n.extensions)||(n.extensions=[]),~n.extensions.indexOf(t)||n.extensions.push(t),t)}(window,u)}));
package/plugins/qul.d.ts CHANGED
@@ -762,6 +762,8 @@ declare const NO_CONTROLS = "no-controls";
762
762
 
763
763
  declare const NO_DVR = "no-timeline";
764
764
 
765
+ declare type NoInfer_2<T> = [T][T extends any ? 0 : never];
766
+
765
767
  /* Excluded from this release type: NON_RECOVERABLE_ERROR */
766
768
 
767
769
  /* Excluded from this release type: NonRecoverableErrorEventDetail */
@@ -902,7 +904,6 @@ declare type Player = HTMLVideoElement & PlayerEventOverloads & {
902
904
  disabled: boolean;
903
905
  /* Excluded from this release type: started */
904
906
  /* Excluded from this release type: token */
905
- tracks?: VideoTrack[];
906
907
  /* Excluded from this release type: _customElements */
907
908
  /* Excluded from this release type: _storage */
908
909
  };
@@ -986,6 +987,7 @@ declare type PlayerCustomEventsOverloads = {
986
987
  */
987
988
  on(event: typeof QUALITIES, handler: (e: FPEvent<PlayerCustomEventsDetailMap[typeof QUALITIES]>) => void): Player;
988
989
  /* Excluded from this release type: on */
990
+ /* Excluded from this release type: on */
989
991
  /**
990
992
  * Listen to this event to create a recommendations grid using the data passed with the event.
991
993
  */
@@ -1004,6 +1006,11 @@ declare type PlayerCustomEventsOverloads = {
1004
1006
  /* Excluded from this release type: on */
1005
1007
  /* Excluded from this release type: on */
1006
1008
  /* Excluded from this release type: on */
1009
+ /* Excluded from this release type: on */
1010
+ /**
1011
+ * TODO: this is a workaround, since not all event overloads are typed. when all plugin work is finished, remove this
1012
+ * https://wowzamedia.jira.com/browse/PLAY-653
1013
+ */
1007
1014
  on<T>(event: string, handler: (e: FPEvent<T>) => void): Player;
1008
1015
  /* Excluded from this release type: on */
1009
1016
  /**
@@ -1028,9 +1035,12 @@ declare type PlayerCustomEventsOverloads = {
1028
1035
  */
1029
1036
  off<T>(event: string, handler: (e: FPEvent<T>) => void): Player;
1030
1037
  /* Excluded from this release type: poll */
1038
+ emit<T extends PlayerEmittableEventNames>(event: T, data?: PlayerCustomEventsDetailMap[T]): Player;
1039
+ emit(event: never, data?: never): Player;
1040
+ /* Excluded from this release type: emit */
1041
+ /* Excluded from this release type: emit */
1031
1042
  /* Excluded from this release type: emit */
1032
1043
  /* Excluded from this release type: emit */
1033
- emit<T extends PlayerEmittableEventNames>(event: T, data?: PlayerCustomEventsDetailMap[T]): Player;
1034
1044
  /* Excluded from this release type: emit */
1035
1045
  };
1036
1046
 
@@ -1138,6 +1148,17 @@ declare const /**
1138
1148
  */
1139
1149
  PROGRESS = "progress";
1140
1150
 
1151
+ /**
1152
+ * @public
1153
+ */
1154
+ declare type QselOption = {
1155
+ height: number;
1156
+ level: number;
1157
+ text: string;
1158
+ /* Excluded from this release type: videoCodec */
1159
+ width: number;
1160
+ };
1161
+
1141
1162
  /**
1142
1163
  * @public
1143
1164
  * emitted whenever a list of qualities has been made available
@@ -1156,27 +1177,11 @@ QUALITIES = "qualities";
1156
1177
  /**
1157
1178
  * @public
1158
1179
  */
1159
- declare type QualitiesEventDetail = QualityDetail[];
1180
+ declare type QualitiesEventDetail = QselOption[];
1160
1181
 
1161
- /**
1162
- * @public
1163
- */
1164
- declare type QualityDetail = {
1165
- level: number;
1166
- text: string;
1167
- width: number;
1168
- height: number;
1169
- videoCodec: string;
1170
- } | BitrateInfo | {
1171
- text: string | number;
1172
- encodingId: string;
1173
- spatialLayerId: number;
1174
- temporalLayerId: number;
1175
- maxSpatialLayerId: number;
1176
- maxTemporalLayerId: number;
1177
- height: number;
1178
- width: number;
1179
- };
1182
+ /* Excluded from this release type: _QualitiesEventDetail */
1183
+
1184
+ /* Excluded from this release type: _QualityDetail */
1180
1185
 
1181
1186
  declare enum QualityOpts {
1182
1187
  LOW = 1,
@@ -1369,20 +1374,14 @@ SEEKING_2 = "seeking";
1369
1374
 
1370
1375
  /**
1371
1376
  * @public
1372
- * allows plugins to listen for forced quality changes
1373
- * it should emit the index of the quality to set
1374
- * -1 is a special idx saying to use ABR if the plugin
1375
- * exposes an ABR implementation
1377
+ * @deprecated please use Qsel.events.SET_QUALITY
1376
1378
  */
1377
1379
  declare const /**
1378
1380
  @public
1379
1381
  * when a new player is inserted into the HTML
1380
1382
  */ /**
1381
1383
  * @public
1382
- * allows plugins to listen for forced quality changes
1383
- * it should emit the index of the quality to set
1384
- * -1 is a special idx saying to use ABR if the plugin
1385
- * exposes an ABR implementation
1384
+ * @deprecated please use Qsel.events.SET_QUALITY
1386
1385
  */
1387
1386
  SET_QUALITY = "quality:set";
1388
1387
 
@@ -1571,16 +1570,6 @@ declare const /**
1571
1570
  */
1572
1571
  VIDEO_TRACKS = "videoTracks";
1573
1572
 
1574
- /**
1575
- * @public
1576
- */
1577
- declare interface VideoTrack {
1578
- name: string;
1579
- /* Excluded from this release type: data */
1580
- default: boolean;
1581
- selected: boolean;
1582
- }
1583
-
1584
1573
  /**
1585
1574
  * @public
1586
1575
  * when a player enters the viewpoint
package/plugins/rts.d.ts CHANGED
@@ -762,6 +762,8 @@ declare const NO_CONTROLS = "no-controls";
762
762
 
763
763
  declare const NO_DVR = "no-timeline";
764
764
 
765
+ declare type NoInfer_2<T> = [T][T extends any ? 0 : never];
766
+
765
767
  /* Excluded from this release type: NON_RECOVERABLE_ERROR */
766
768
 
767
769
  /* Excluded from this release type: NonRecoverableErrorEventDetail */
@@ -902,7 +904,6 @@ declare type Player = HTMLVideoElement & PlayerEventOverloads & {
902
904
  disabled: boolean;
903
905
  /* Excluded from this release type: started */
904
906
  /* Excluded from this release type: token */
905
- tracks?: VideoTrack[];
906
907
  /* Excluded from this release type: _customElements */
907
908
  /* Excluded from this release type: _storage */
908
909
  };
@@ -986,6 +987,7 @@ declare type PlayerCustomEventsOverloads = {
986
987
  */
987
988
  on(event: typeof QUALITIES, handler: (e: FPEvent<PlayerCustomEventsDetailMap[typeof QUALITIES]>) => void): Player;
988
989
  /* Excluded from this release type: on */
990
+ /* Excluded from this release type: on */
989
991
  /**
990
992
  * Listen to this event to create a recommendations grid using the data passed with the event.
991
993
  */
@@ -1004,6 +1006,11 @@ declare type PlayerCustomEventsOverloads = {
1004
1006
  /* Excluded from this release type: on */
1005
1007
  /* Excluded from this release type: on */
1006
1008
  /* Excluded from this release type: on */
1009
+ /* Excluded from this release type: on */
1010
+ /**
1011
+ * TODO: this is a workaround, since not all event overloads are typed. when all plugin work is finished, remove this
1012
+ * https://wowzamedia.jira.com/browse/PLAY-653
1013
+ */
1007
1014
  on<T>(event: string, handler: (e: FPEvent<T>) => void): Player;
1008
1015
  /* Excluded from this release type: on */
1009
1016
  /**
@@ -1028,9 +1035,12 @@ declare type PlayerCustomEventsOverloads = {
1028
1035
  */
1029
1036
  off<T>(event: string, handler: (e: FPEvent<T>) => void): Player;
1030
1037
  /* Excluded from this release type: poll */
1038
+ emit<T extends PlayerEmittableEventNames>(event: T, data?: PlayerCustomEventsDetailMap[T]): Player;
1039
+ emit(event: never, data?: never): Player;
1040
+ /* Excluded from this release type: emit */
1041
+ /* Excluded from this release type: emit */
1031
1042
  /* Excluded from this release type: emit */
1032
1043
  /* Excluded from this release type: emit */
1033
- emit<T extends PlayerEmittableEventNames>(event: T, data?: PlayerCustomEventsDetailMap[T]): Player;
1034
1044
  /* Excluded from this release type: emit */
1035
1045
  };
1036
1046
 
@@ -1138,6 +1148,17 @@ declare const /**
1138
1148
  */
1139
1149
  PROGRESS = "progress";
1140
1150
 
1151
+ /**
1152
+ * @public
1153
+ */
1154
+ declare type QselOption = {
1155
+ height: number;
1156
+ level: number;
1157
+ text: string;
1158
+ /* Excluded from this release type: videoCodec */
1159
+ width: number;
1160
+ };
1161
+
1141
1162
  /**
1142
1163
  * @public
1143
1164
  * emitted whenever a list of qualities has been made available
@@ -1156,27 +1177,11 @@ QUALITIES = "qualities";
1156
1177
  /**
1157
1178
  * @public
1158
1179
  */
1159
- declare type QualitiesEventDetail = QualityDetail[];
1180
+ declare type QualitiesEventDetail = QselOption[];
1160
1181
 
1161
- /**
1162
- * @public
1163
- */
1164
- declare type QualityDetail = {
1165
- level: number;
1166
- text: string;
1167
- width: number;
1168
- height: number;
1169
- videoCodec: string;
1170
- } | BitrateInfo | {
1171
- text: string | number;
1172
- encodingId: string;
1173
- spatialLayerId: number;
1174
- temporalLayerId: number;
1175
- maxSpatialLayerId: number;
1176
- maxTemporalLayerId: number;
1177
- height: number;
1178
- width: number;
1179
- };
1182
+ /* Excluded from this release type: _QualitiesEventDetail */
1183
+
1184
+ /* Excluded from this release type: _QualityDetail */
1180
1185
 
1181
1186
  declare enum QualityOpts {
1182
1187
  LOW = 1,
@@ -1354,20 +1359,14 @@ SEEKING_2 = "seeking";
1354
1359
 
1355
1360
  /**
1356
1361
  * @public
1357
- * allows plugins to listen for forced quality changes
1358
- * it should emit the index of the quality to set
1359
- * -1 is a special idx saying to use ABR if the plugin
1360
- * exposes an ABR implementation
1362
+ * @deprecated please use Qsel.events.SET_QUALITY
1361
1363
  */
1362
1364
  declare const /**
1363
1365
  @public
1364
1366
  * when a new player is inserted into the HTML
1365
1367
  */ /**
1366
1368
  * @public
1367
- * allows plugins to listen for forced quality changes
1368
- * it should emit the index of the quality to set
1369
- * -1 is a special idx saying to use ABR if the plugin
1370
- * exposes an ABR implementation
1369
+ * @deprecated please use Qsel.events.SET_QUALITY
1371
1370
  */
1372
1371
  SET_QUALITY = "quality:set";
1373
1372
 
@@ -1556,16 +1555,6 @@ declare const /**
1556
1555
  */
1557
1556
  VIDEO_TRACKS = "videoTracks";
1558
1557
 
1559
- /**
1560
- * @public
1561
- */
1562
- declare interface VideoTrack {
1563
- name: string;
1564
- /* Excluded from this release type: data */
1565
- default: boolean;
1566
- selected: boolean;
1567
- }
1568
-
1569
1558
  /**
1570
1559
  * @public
1571
1560
  * when a player enters the viewpoint