From 3d47152093b9351fd9391f8bdde20d8b55e25d2b Mon Sep 17 00:00:00 2001 From: Pete Cook Date: Tue, 5 Sep 2023 21:11:05 +0100 Subject: [PATCH] 2.13.0 --- CHANGELOG.md | 18 ++++++++++++++++++ dist/ReactPlayer.js | 2 +- dist/ReactPlayer.js.map | 2 +- dist/ReactPlayer.standalone.es6.js | 10 +++++----- dist/ReactPlayer.standalone.js | 10 +++++----- dist/ReactPlayer.standalone.js.map | 2 +- package.json | 2 +- 7 files changed, 32 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dee31bfb..1e25b544 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,26 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v2.13.0](https://github.com/cookpete/react-player/compare/v2.12.0...v2.13.0) + +- Fix #1604 - FilePlayer does not work if I passed an array of urls [`#1612`](https://github.com/cookpete/react-player/pull/1612) +- fix: `src` sttribute become "undefinded" if `url` is an array [`#1648`](https://github.com/cookpete/react-player/pull/1648) +- Adding keepPlaying to other player types [`#1639`](https://github.com/cookpete/react-player/pull/1639) +- CI [`#1654`](https://github.com/cookpete/react-player/pull/1654) +- Swap out broken youtube URL [`#1659`](https://github.com/cookpete/react-player/pull/1659) +- Add keepPlaying to seekTo [`#1620`](https://github.com/cookpete/react-player/pull/1620) +- Added forceDisableHls option for FilePlayer [`#1625`](https://github.com/cookpete/react-player/pull/1625) +- added onPlaybackQualityChange prop [`#1636`](https://github.com/cookpete/react-player/pull/1636) +- Update the list of supported YouTube domains [`#1599`](https://github.com/cookpete/react-player/pull/1599) +- Fix #1604 - FilePlayer does not work if I passed an array of urls (#1612) [`#1604`](https://github.com/cookpete/react-player/issues/1604) +- Support Wisita URLs with query params [`#1591`](https://github.com/cookpete/react-player/issues/1591) +- Support vimeo manage links [`#1593`](https://github.com/cookpete/react-player/issues/1593) +- Update readme [`90237f5`](https://github.com/cookpete/react-player/commit/90237f51d43fc63870b0e6d0c86f4497f97ca586) + #### [v2.12.0](https://github.com/cookpete/react-player/compare/v2.11.2...v2.12.0) +> 7 March 2023 + - Added Vimeo Muteability [`#1588`](https://github.com/cookpete/react-player/pull/1588) - Add forceSafariHLS option for FilePlayer [`#1560`](https://github.com/cookpete/react-player/pull/1560) - fix: standalone has side effects [`#1586`](https://github.com/cookpete/react-player/pull/1586) diff --git a/dist/ReactPlayer.js b/dist/ReactPlayer.js index ef632eb5..d97af538 100644 --- a/dist/ReactPlayer.js +++ b/dist/ReactPlayer.js @@ -1,2 +1,2 @@ -var ReactPlayer=function(e){function t(t){for(var n,o,a=t[0],i=t[1],u=0,c=[];ue.length)&&(t=e.length);for(var n=0,r=new Array(t);n2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){return!0},a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:o.a,i=b(t);return i&&r(i)?Promise.resolve(i):new Promise((function(r,o){if(m[e])m[e].push({resolve:r,reject:o});else{m[e]=[{resolve:r,reject:o}];var i=function(t){m[e].forEach((function(e){return e.resolve(t)}))};if(n){var u=window[n];window[n]=function(){u&&u(),i(b(t))}}a(e,(function(r){r?(m[e].forEach((function(e){return e.reject(r)})),m[e]=null):n||i(b(t))}))}}))}function g(e){for(var t,n=arguments.length,r=new Array(n>1?n-1:0),o=1;o1?r-1:0),a=1;a0&&void 0!==arguments[0]?arguments[0]:document.createElement("video"),t=!1===/iPhone|iPod/.test(navigator.userAgent);return e.webkitSupportsPresentationMode&&"function"==typeof e.webkitSetPresentationMode&&t}},function(e,t,n){"use strict";n.d(t,"l",(function(){return i})),n.d(t,"g",(function(){return f})),n.d(t,"k",(function(){return p})),n.d(t,"i",(function(){return y})),n.d(t,"h",(function(){return d})),n.d(t,"e",(function(){return h})),n.d(t,"f",(function(){return b})),n.d(t,"j",(function(){return m})),n.d(t,"a",(function(){return g})),n.d(t,"d",(function(){return O})),n.d(t,"b",(function(){return w})),n.d(t,"c",(function(){return k})),n.d(t,"m",(function(){return j}));var r=n(1);function o(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,l=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return u=e.done,e},e:function(e){l=!0,i=e},f:function(){try{u||null==n.return||n.return()}finally{if(l)throw i}}}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:"player";return n.player?n.player.getInternalPlayer(e):null})),E(j(n),"seekTo",(function(e,t){if(!n.player)return null;n.player.seekTo(e,t)})),E(j(n),"handleReady",(function(){n.props.onReady(j(n))})),E(j(n),"getActivePlayer",Object(u.a)((function(n){for(var r=0,o=[].concat(I,m(e));r0&&e<1){var r=this.player.getDuration();return r?void this.player.seekTo(r*e):void console.warn("ReactPlayer: could not seek using fraction – duration not yet available")}this.player.seekTo(e)}else 0!==e&&(this.seekOnPlay=e,setTimeout((function(){n.seekOnPlay=null}),5e3))}},{key:"render",value:function(){var e=this.props.activePlayer;return e?o.a.createElement(e,s({},this.props,{onMount:this.handlePlayerMount,onReady:this.handleReady,onPlay:this.handlePlay,onPause:this.handlePause,onEnded:this.handleEnded,onLoaded:this.handleLoaded,onError:this.handleError})):null}}])&&p(t.prototype,n),r&&p(t,r),u}(r.Component);v(g,"displayName","Player"),v(g,"propTypes",u.b),v(g,"defaultProps",u.a)},function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"===("undefined"==typeof window?"undefined":n(window))&&(r=window)}e.exports=r},function(e,t,n){"use strict";var r=n(13);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return m}));var r=n(0),o=n.n(r);function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1,g=m&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||v)&&!window.MSStream,P=m&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent)&&!window.MSStream,O=/www\.dropbox\.com\/.+/,w=/https:\/\/watch\.cloudflarestream\.com\/([a-z0-9]+)/,k=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&f(e,t)}(y,e);var t,n,r,u=p(y);function y(){var e;c(this,y);for(var t=arguments.length,n=new Array(t),r=0;r0?n.end(n.length-1):t}},{key:"getCurrentTime",value:function(){return this.player?this.player.currentTime:null}},{key:"getSecondsLoaded",value:function(){if(!this.player)return null;var e=this.player.buffered;if(0===e.length)return 0;var t=e.end(e.length-1),n=this.getDuration();return t>n?n:t}},{key:"getSource",value:function(e){var t=this.shouldUseHLS(e),n=this.shouldUseDASH(e),r=this.shouldUseFLV(e);if(!(e instanceof Array||Object(a.d)(e)||t||n||r))return O.test(e)?e.replace("www.dropbox.com","dl.dropboxusercontent.com"):e}},{key:"render",value:function(){var e=this.props,t=e.url,n=e.playing,r=e.loop,a=e.controls,i=e.muted,u=e.config,c=e.width,s=e.height,f=this.shouldUseAudio(this.props)?"audio":"video",p={width:"auto"===c?c:"100%",height:"auto"===s?s:"100%"};return o.a.createElement(f,l({ref:this.ref,src:this.getSource(t),style:p,preload:"auto",autoPlay:n||void 0,controls:a,muted:i,loop:r},u.attributes),t instanceof Array&&t.map(this.renderSourceElement),u.tracks.map(this.renderTrack))}}])&&s(t.prototype,n),r&&s(t,r),y}(r.Component);b(k,"displayName","FilePlayer"),b(k,"canPlay",i.m.file)}]).default; +var ReactPlayer=function(e){function t(t){for(var n,o,a=t[0],i=t[1],u=0,c=[];ue.length)&&(t=e.length);for(var n=0,r=new Array(t);n2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){return!0},a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:o.a,i=b(t);return i&&r(i)?Promise.resolve(i):new Promise((function(r,o){if(v[e])v[e].push({resolve:r,reject:o});else{v[e]=[{resolve:r,reject:o}];var i=function(t){v[e].forEach((function(e){return e.resolve(t)}))};if(n){var u=window[n];window[n]=function(){u&&u(),i(b(t))}}a(e,(function(r){r?(v[e].forEach((function(e){return e.reject(r)})),v[e]=null):n||i(b(t))}))}}))}function g(e){for(var t,n=arguments.length,r=new Array(n>1?n-1:0),o=1;o1?r-1:0),a=1;a0&&void 0!==arguments[0]?arguments[0]:document.createElement("video"),t=!1===/iPhone|iPod/.test(navigator.userAgent);return e.webkitSupportsPresentationMode&&"function"==typeof e.webkitSetPresentationMode&&t}},function(e,t,n){"use strict";n.d(t,"l",(function(){return i})),n.d(t,"g",(function(){return f})),n.d(t,"k",(function(){return p})),n.d(t,"i",(function(){return y})),n.d(t,"h",(function(){return d})),n.d(t,"e",(function(){return h})),n.d(t,"f",(function(){return b})),n.d(t,"j",(function(){return v})),n.d(t,"a",(function(){return g})),n.d(t,"d",(function(){return O})),n.d(t,"b",(function(){return w})),n.d(t,"c",(function(){return k})),n.d(t,"m",(function(){return j}));var r=n(1);function o(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,l=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return u=e.done,e},e:function(e){l=!0,i=e},f:function(){try{u||null==n.return||n.return()}finally{if(l)throw i}}}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:"player";return n.player?n.player.getInternalPlayer(e):null})),E(j(n),"seekTo",(function(e,t,r){if(!n.player)return null;n.player.seekTo(e,t,r)})),E(j(n),"handleReady",(function(){n.props.onReady(j(n))})),E(j(n),"getActivePlayer",Object(u.a)((function(n){for(var r=0,o=[].concat(I,v(e));r0&&e<1){var o=this.player.getDuration();return o?void this.player.seekTo(o*e,n):void console.warn("ReactPlayer: could not seek using fraction – duration not yet available")}this.player.seekTo(e,n)}else 0!==e&&(this.seekOnPlay=e,setTimeout((function(){r.seekOnPlay=null}),5e3))}},{key:"render",value:function(){var e=this.props.activePlayer;return e?o.a.createElement(e,s({},this.props,{onMount:this.handlePlayerMount,onReady:this.handleReady,onPlay:this.handlePlay,onPause:this.handlePause,onEnded:this.handleEnded,onLoaded:this.handleLoaded,onError:this.handleError})):null}}])&&p(t.prototype,n),r&&p(t,r),u}(r.Component);m(g,"displayName","Player"),m(g,"propTypes",u.b),m(g,"defaultProps",u.a)},function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"===("undefined"==typeof window?"undefined":n(window))&&(r=window)}e.exports=r},function(e,t,n){"use strict";var r=n(13);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return v}));var r=n(0),o=n.n(r);function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]&&arguments[1];this.callPlayer("seekTo",e),t||this.props.playing||this.pause()}},{key:"setVolume",value:function(e){this.callPlayer("setVolume",100*e)}},{key:"setPlaybackRate",value:function(e){this.callPlayer("setPlaybackRate",e)}},{key:"setLoop",value:function(e){this.callPlayer("setLoop",e)}},{key:"getDuration",value:function(){return this.callPlayer("getDuration")}},{key:"getCurrentTime",value:function(){return this.callPlayer("getCurrentTime")}},{key:"getSecondsLoaded",value:function(){return this.callPlayer("getVideoLoadedFraction")*this.getDuration()}},{key:"render",value:function(){var e={width:"100%",height:"100%",display:this.props.display};return o.a.createElement("div",{style:e},o.a.createElement("div",{ref:this.ref}))}}])&&y(t.prototype,n),r&&y(t,r),l}(r.Component);g(k,"displayName","YouTube"),g(k,"canPlay",i.m.youtube)},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return m}));var r=n(0),o=n.n(r),a=n(1),i=n(2);function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t1&&void 0!==arguments[1])||arguments[1];this.callPlayer("seekTo",1e3*e),t||this.pause()}},{key:"setVolume",value:function(e){this.callPlayer("setVolume",100*e)}},{key:"getDuration",value:function(){return this.duration}},{key:"getCurrentTime",value:function(){return this.currentTime}},{key:"getSecondsLoaded",value:function(){return this.fractionLoaded*this.duration}},{key:"render",value:function(){var e={width:"100%",height:"100%",display:this.props.display};return o.a.createElement("iframe",{ref:this.ref,src:"https://w.soundcloud.com/player/?url=".concat(encodeURIComponent(this.props.url)),style:e,frameBorder:0,allow:"autoplay"})}}])&&f(t.prototype,n),r&&f(t,r),u}(r.Component);v(m,"displayName","SoundCloud"),v(m,"canPlay",i.m.soundcloud),v(m,"loopOnEnded",!0)},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return m}));var r=n(0),o=n.n(r),a=n(1),i=n(2);function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1];this.callPlayer("setCurrentTime",e),t||this.pause()}},{key:"setVolume",value:function(e){this.callPlayer("setVolume",e)}},{key:"setMuted",value:function(e){this.callPlayer("setMuted",e)}},{key:"setLoop",value:function(e){this.callPlayer("setLoop",e)}},{key:"setPlaybackRate",value:function(e){this.callPlayer("setPlaybackRate",e)}},{key:"getDuration",value:function(){return this.duration}},{key:"getCurrentTime",value:function(){return this.currentTime}},{key:"getSecondsLoaded",value:function(){return this.secondsLoaded}},{key:"render",value:function(){var e={width:"100%",height:"100%",overflow:"hidden",display:this.props.display};return o.a.createElement("div",{key:this.props.url,ref:this.ref,style:e})}}])&&s(t.prototype,n),r&&s(t,r),u}(r.Component);b(m,"displayName","Vimeo"),b(m,"canPlay",i.m.vimeo),b(m,"forceLoad",!0)},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return m}));var r=n(0),o=n.n(r),a=n(1),i=n(2);function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(){return(l=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1])||arguments[1];this.callPlayer("seek",e),t||this.pause()}},{key:"setVolume",value:function(e){this.callPlayer("setVolume",e)}},{key:"getDuration",value:function(){return this.callPlayer("getDuration")}},{key:"getCurrentTime",value:function(){return this.callPlayer("getCurrentPosition")}},{key:"getSecondsLoaded",value:function(){return null}},{key:"render",value:function(){var e=this.props.config.attributes;return o.a.createElement("div",l({style:{width:"100%",height:"100%"},id:this.playerID,className:"fb-video","data-href":this.props.url,"data-autoplay":this.props.playing?"true":"false","data-allowfullscreen":"true","data-controls":this.props.controls?"true":"false"},e))}}])&&s(t.prototype,n),r&&s(t,r),u}(r.Component);b(m,"displayName","Facebook"),b(m,"canPlay",i.m.facebook),b(m,"loopOnEnded",!0)},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return b}));var r=n(0),o=n.n(r),a=n(1),i=n(2);function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1];this.callPlayer("setCurrentTime",e),t||this.pause()}},{key:"setVolume",value:function(e){this.callPlayer("setVolume",100*e)}},{key:"setLoop",value:function(e){this.callPlayer("setLoop",e)}},{key:"getDuration",value:function(){return this.duration}},{key:"getCurrentTime",value:function(){return this.currentTime}},{key:"getSecondsLoaded",value:function(){return this.secondsLoaded}},{key:"render",value:function(){var e=this.props.url.match(i.g)[1];return o.a.createElement("iframe",{ref:this.ref,src:"https://streamable.com/o/".concat(e),frameBorder:"0",scrolling:"no",style:{width:"100%",height:"100%"},allow:"encrypted-media; autoplay; fullscreen;"})}}])&&c(t.prototype,n),r&&c(t,r),p}(r.Component);h(b,"displayName","Streamable"),h(b,"canPlay",i.m.streamable)},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return m}));var r=n(0),o=n.n(r),a=n(1),i=n(2);function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t1&&void 0!==arguments[1])||arguments[1];this.callPlayer("time",e),t||this.pause()}},{key:"setVolume",value:function(e){this.callPlayer("volume",e)}},{key:"setPlaybackRate",value:function(e){this.callPlayer("playbackRate",e)}},{key:"getDuration",value:function(){return this.callPlayer("duration")}},{key:"getCurrentTime",value:function(){return this.callPlayer("time")}},{key:"getSecondsLoaded",value:function(){return null}},{key:"render",value:function(){var e=this.props.url,t=e&&e.match(i.k)[1],n="wistia_embed wistia_async_".concat(t);return o.a.createElement("div",{id:this.playerID,key:t,className:n,style:{width:"100%",height:"100%"}})}}])&&f(t.prototype,n),r&&f(t,r),l}(r.Component);v(m,"displayName","Wistia"),v(m,"canPlay",i.m.wistia),v(m,"loopOnEnded",!0)},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return v}));var r=n(0),o=n.n(r),a=n(1),i=n(2);function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1];this.callPlayer("seek",e),t||this.pause()}},{key:"setVolume",value:function(e){this.callPlayer("setVolume",e)}},{key:"getDuration",value:function(){return this.callPlayer("getDuration")}},{key:"getCurrentTime",value:function(){return this.callPlayer("getCurrentTime")}},{key:"getSecondsLoaded",value:function(){return null}},{key:"render",value:function(){return o.a.createElement("div",{style:{width:"100%",height:"100%"},id:this.playerID})}}])&&s(t.prototype,n),r&&s(t,r),y}(r.Component);b(v,"displayName","Twitch"),b(v,"canPlay",i.m.twitch),b(v,"loopOnEnded",!0)},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return P}));var r=n(0),o=n.n(r),a=n(1),i=n(2);function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1])||arguments[1];this.callPlayer("seek",e),t||this.pause()}},{key:"setVolume",value:function(e){this.callPlayer("setVolume",e)}},{key:"getDuration",value:function(){return this.player.duration||null}},{key:"getCurrentTime",value:function(){return this.player.currentTime}},{key:"getSecondsLoaded",value:function(){return this.player.bufferedTime}},{key:"render",value:function(){var e={width:"100%",height:"100%",display:this.props.display};return o.a.createElement("div",{style:e},o.a.createElement("div",{ref:this.ref}))}}])&&y(t.prototype,n),r&&y(t,r),l}(r.Component);g(P,"displayName","DailyMotion"),g(P,"canPlay",i.m.dailymotion),g(P,"loopOnEnded",!0)},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return m}));var r=n(0),o=n.n(r),a=n(1),i=n(2);function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t1&&void 0!==arguments[1])||arguments[1];this.callPlayer("seek",e),t||this.pause()}},{key:"setVolume",value:function(e){}},{key:"getDuration",value:function(){return this.duration}},{key:"getCurrentTime",value:function(){return this.currentTime}},{key:"getSecondsLoaded",value:function(){return null}},{key:"render",value:function(){var e=this.props,t=e.url,n=e.config,r=t.match(i.f)[1],u=Object(a.h)(c(c({},n.options),{},{feed:"/".concat(r,"/")}));return o.a.createElement("iframe",{key:r,ref:this.ref,style:{width:"100%",height:"100%"},src:"https://www.mixcloud.com/widget/iframe/?".concat(u),frameBorder:"0",allow:"autoplay"})}}])&&f(t.prototype,n),r&&f(t,r),l}(r.Component);v(m,"displayName","Mixcloud"),v(m,"canPlay",i.m.mixcloud),v(m,"loopOnEnded",!0)},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return v}));var r=n(0),o=n.n(r),a=n(1),i=n(2);function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1];this.callPlayer("seek",e),t||this.pause()}},{key:"setVolume",value:function(e){this.callPlayer("setVolume",e)}},{key:"setPlaybackRate",value:function(e){this.callPlayer("setPlaybackSpeed",e)}},{key:"getDuration",value:function(){return this.duration}},{key:"getCurrentTime",value:function(){return this.callPlayer("currentTime")}},{key:"getSecondsLoaded",value:function(){return null}},{key:"render",value:function(){var e={width:"100%",height:"100%",display:this.props.display};return o.a.createElement("div",{style:e},o.a.createElement("div",{ref:this.ref}))}}])&&s(t.prototype,n),r&&s(t,r),y}(r.Component);b(v,"displayName","Vidyard"),b(v,"canPlay",i.m.vidyard)},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return b}));var r=n(0),o=n.n(r),a=n(1),i=n(2);function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1];this.callPlayer("setCurrentTime",e),t||this.pause()}},{key:"setVolume",value:function(e){this.callPlayer("setVolume",e)}},{key:"setLoop",value:function(e){this.callPlayer("setLoop",e)}},{key:"getDuration",value:function(){return this.duration}},{key:"getCurrentTime",value:function(){return this.currentTime}},{key:"getSecondsLoaded",value:function(){return this.secondsLoaded}},{key:"render",value:function(){return o.a.createElement("iframe",{ref:this.ref,src:this.props.url,frameBorder:"0",scrolling:"no",style:{width:"100%",height:"100%"},allow:"encrypted-media; autoplay; fullscreen;",referrerPolicy:"no-referrer-when-downgrade"})}}])&&c(t.prototype,n),r&&c(t,r),u}(r.Component);h(b,"displayName","Kaltura"),h(b,"canPlay",i.m.kaltura)},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return k}));var r=n(0),o=n.n(r),a=n(1),i=n(2);function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(){return(l=Object.assign||function(e){for(var t=1;t1,g=v&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||m)&&!window.MSStream,P=v&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent)&&!window.MSStream,O=/www\.dropbox\.com\/.+/,w=/https:\/\/watch\.cloudflarestream\.com\/([a-z0-9]+)/,k=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&f(e,t)}(y,e);var t,n,r,u=p(y);function y(){var e;c(this,y);for(var t=arguments.length,n=new Array(t),r=0;r1&&void 0!==arguments[1])||arguments[1];this.player.currentTime=e,t||this.pause()}},{key:"setVolume",value:function(e){this.player.volume=e}},{key:"enablePIP",value:function(){this.player.requestPictureInPicture&&document.pictureInPictureElement!==this.player?this.player.requestPictureInPicture():Object(a.j)(this.player)&&"picture-in-picture"!==this.player.webkitPresentationMode&&this.player.webkitSetPresentationMode("picture-in-picture")}},{key:"disablePIP",value:function(){document.exitPictureInPicture&&document.pictureInPictureElement===this.player?document.exitPictureInPicture():Object(a.j)(this.player)&&"inline"!==this.player.webkitPresentationMode&&this.player.webkitSetPresentationMode("inline")}},{key:"setPlaybackRate",value:function(e){try{this.player.playbackRate=e}catch(e){this.props.onError(e)}}},{key:"getDuration",value:function(){if(!this.player)return null;var e=this.player,t=e.duration,n=e.seekable;return t===1/0&&n.length>0?n.end(n.length-1):t}},{key:"getCurrentTime",value:function(){return this.player?this.player.currentTime:null}},{key:"getSecondsLoaded",value:function(){if(!this.player)return null;var e=this.player.buffered;if(0===e.length)return 0;var t=e.end(e.length-1),n=this.getDuration();return t>n?n:t}},{key:"getSource",value:function(e){var t=this.shouldUseHLS(e),n=this.shouldUseDASH(e),r=this.shouldUseFLV(e);if(!(e instanceof Array||Object(a.d)(e)||t||n||r))return O.test(e)?e.replace("www.dropbox.com","dl.dropboxusercontent.com"):e}},{key:"render",value:function(){var e=this.props,t=e.url,n=e.playing,r=e.loop,a=e.controls,i=e.muted,u=e.config,c=e.width,s=e.height,f=this.shouldUseAudio(this.props)?"audio":"video",p={width:"auto"===c?c:"100%",height:"auto"===s?s:"100%"};return o.a.createElement(f,l({ref:this.ref,src:this.getSource(t),style:p,preload:"auto",autoPlay:n||void 0,controls:a,muted:i,loop:r},u.attributes),t instanceof Array&&t.map(this.renderSourceElement),u.tracks.map(this.renderTrack))}}])&&s(t.prototype,n),r&&s(t,r),y}(r.Component);b(k,"displayName","FilePlayer"),b(k,"canPlay",i.m.file)}]).default; //# sourceMappingURL=ReactPlayer.js.map \ No newline at end of file diff --git a/dist/ReactPlayer.js.map b/dist/ReactPlayer.js.map index 8b151b8a..69682cdf 100644 --- a/dist/ReactPlayer.js.map +++ b/dist/ReactPlayer.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ReactPlayer/webpack/bootstrap","webpack://ReactPlayer/external \"React\"","webpack://ReactPlayer/./src/utils.js","webpack://ReactPlayer/./src/patterns.js","webpack://ReactPlayer/./node_modules/prop-types/index.js","webpack://ReactPlayer/./src/props.js","webpack://ReactPlayer/./node_modules/react-fast-compare/index.js","webpack://ReactPlayer/./node_modules/deepmerge/dist/cjs.js","webpack://ReactPlayer/./node_modules/memoize-one/dist/memoize-one.esm.js","webpack://ReactPlayer/./node_modules/load-script/index.js","webpack://ReactPlayer/./src/ReactPlayer.js","webpack://ReactPlayer/./src/Player.js","webpack://ReactPlayer/(webpack)/buildin/global.js","webpack://ReactPlayer/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://ReactPlayer/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://ReactPlayer/./src/Preview.js","webpack://ReactPlayer/./src/players/index.js","webpack://ReactPlayer/./src/index.js","webpack://ReactPlayer/./src/players/YouTube.js","webpack://ReactPlayer/./src/players/SoundCloud.js","webpack://ReactPlayer/./src/players/Vimeo.js","webpack://ReactPlayer/./src/players/Facebook.js","webpack://ReactPlayer/./src/players/Streamable.js","webpack://ReactPlayer/./src/players/Wistia.js","webpack://ReactPlayer/./src/players/Twitch.js","webpack://ReactPlayer/./src/players/DailyMotion.js","webpack://ReactPlayer/./src/players/Mixcloud.js","webpack://ReactPlayer/./src/players/Vidyard.js","webpack://ReactPlayer/./src/players/Kaltura.js","webpack://ReactPlayer/./src/players/FilePlayer.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","0","__webpack_require__","exports","module","l","e","Promise","resolve","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","oe","err","console","error","jsonpArray","window","oldJsonpFunction","slice","s","React","MATCH_START_QUERY","MATCH_END_QUERY","MATCH_START_STAMP","MATCH_NUMERIC","parseTimeParam","url","pattern","Array","match","stamp","seconds","array","exec","count","period","parseInt","parseTimeString","test","parseStartTime","parseEndTime","randomString","Math","random","toString","substr","queryString","keys","map","join","getGlobal","requests","getSDK","sdkGlobal","sdkReady","isLoaded","fetchScript","loadScript","existingGlobal","reject","onLoaded","sdk","forEach","request","previousOnReady","omit","arrays","omitKeys","concat","output","indexOf","callPlayer","method","this","player","message","constructor","displayName","warn","args","isMediaStream","MediaStream","isBlobUrl","supportsWebKitPresentationMode","video","document","createElement","notMobile","navigator","userAgent","webkitSupportsPresentationMode","webkitSetPresentationMode","MATCH_URL_YOUTUBE","MATCH_URL_SOUNDCLOUD","MATCH_URL_VIMEO","MATCH_URL_FACEBOOK","MATCH_URL_FACEBOOK_WATCH","MATCH_URL_STREAMABLE","MATCH_URL_WISTIA","MATCH_URL_TWITCH_VIDEO","MATCH_URL_TWITCH_CHANNEL","MATCH_URL_DAILYMOTION","MATCH_URL_MIXCLOUD","MATCH_URL_VIDYARD","MATCH_URL_KALTURA","AUDIO_EXTENSIONS","VIDEO_EXTENSIONS","HLS_EXTENSIONS","DASH_EXTENSIONS","FLV_EXTENSIONS","canPlay","youtube","every","item","soundcloud","vimeo","facebook","streamable","wistia","twitch","dailymotion","mixcloud","vidyard","kaltura","file","canPlayFile","src","require","string","PropTypes","bool","number","oneOfType","shape","func","node","propTypes","playing","loop","controls","volume","muted","playbackRate","width","height","style","progressInterval","playsinline","pip","stopOnUnmount","light","playIcon","previewTabIndex","fallback","oEmbedUrl","wrapper","render","isRequired","config","options","playerVars","embedOptions","onUnstarted","appId","version","playerId","attributes","params","playerOptions","title","tracks","forceVideo","forceAudio","forceHLS","forceSafariHLS","forceDASH","forceFLV","hlsOptions","hlsVersion","dashVersion","flvVersion","customControls","onReady","onStart","onPlay","onPause","onBuffer","onBufferEnd","onEnded","onError","onDuration","onSeek","onPlaybackRateChange","onProgress","onClickPreview","onEnablePIP","onDisablePIP","noop","defaultProps","visual","buying","liking","download","sharing","show_comments","show_playcount","showinfo","rel","iv_load_policy","modestbranding","api","autopause","byline","portrait","hide_cover","hasElementType","Element","hasMap","Map","hasSet","Set","hasArrayBuffer","ArrayBuffer","isView","a","b","equal","it","isArray","size","entries","next","done","has","RegExp","source","flags","valueOf","$$typeof","isMergeableObject","isNonNullObject","stringValue","REACT_ELEMENT_TYPE","isReactElement","isSpecial","cloneUnlessOtherwiseSpecified","clone","deepmerge","val","defaultArrayMerge","target","element","getKeys","getOwnPropertySymbols","filter","symbol","propertyIsEnumerable","getEnumerableOwnPropertySymbols","propertyIsOnObject","_","mergeObject","destination","propertyIsUnsafe","customMerge","getMergeFunction","arrayMerge","sourceIsArray","all","Error","reduce","prev","deepmerge_1","areInputsEqual","newInputs","lastInputs","memoizeOne","resultFn","isEqual","lastThis","lastResult","lastArgs","calledOnce","newArgs","_i","arguments","apply","stdOnEnd","script","cb","onload","onerror","ieOnEnd","onreadystatechange","readyState","opts","head","getElementsByTagName","type","charset","async","attrs","attr","setAttribute","setAttributes","text","appendChild","Preview","lazy","IS_BROWSER","IS_GLOBAL","global","SUPPORTED_PROPS","UniversalSuspense","Suspense","customPlayers","createReactPlayer","players","showPreview","props","setState","getDuration","getCurrentTime","getSecondsLoaded","getInternalPlayer","fraction","seekTo","memoize","merge","getActivePlayer","getConfig","ref","references","activePlayer","lazyPlayer","handleReady","nextProps","nextState","state","prevProps","onClick","handleClickPreview","Wrapper","getAttributes","wrapperRef","undefined","renderPreview","renderActivePlayer","Component","Player","canEnablePIP","load","progress","isReady","playedSeconds","loadedSeconds","duration","played","loaded","prevPlayed","prevLoaded","progressTimeout","setTimeout","progressFrequency","mounted","isLoading","setVolume","loadOnReady","play","handleDurationCheck","isPlaying","startOnPlay","setPlaybackRate","seekOnPlay","loopOnEnded","clearTimeout","durationCheckTimeout","onDurationCalled","stop","disablePIP","disableDeferredLoading","forceLoad","pause","enablePIP","mute","unmute","setLoop","amount","onMount","handlePlayerMount","handlePlay","handlePause","handleEnded","handleLoaded","handleError","g","Function","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","location","propFullName","secret","getShim","ReactPropTypes","any","arrayOf","elementType","instanceOf","objectOf","oneOf","exact","checkPropTypes","cache","image","fetchImage","isValidElement","fetch","replace","then","response","json","thumbnail_url","isElement","flexCenter","display","alignItems","justifyContent","styles","preview","backgroundImage","backgroundSize","backgroundPosition","cursor","shadow","background","borderRadius","position","borderStyle","borderWidth","borderColor","marginLeft","defaultPlayIcon","className","tabIndex","onKeyPress","handleKeyPress","pictureInPictureEnabled","MATCH_PLAYLIST","MATCH_USER_UPLOADS","MATCH_NOCOOKIE","YouTube","listType","playlist","getID","list","event","PlayerState","UNSTARTED","PLAYING","PAUSED","BUFFERING","ENDED","CUED","isPlaylist","start","container","id","loadPlaylist","parsePlaylist","cueVideoById","videoId","startSeconds","endSeconds","end","YT","autoplay","origin","events","onStateChange","host","body","contains","rate","SoundCloud","iframe","SC","Widget","Events","PLAY","PLAY_PROGRESS","PAUSE","FINISH","ERROR","currentTime","currentPosition","fractionLoaded","loadedProgress","callback","encodeURIComponent","frameBorder","allow","Vimeo","setMuted","ready","querySelector","on","refreshDuration","secondsLoaded","promise","overflow","SDK_URL","Facebook","FB","XFBML","parse","init","xfbml","Event","subscribe","msg","playerID","instance","getElementById","visibility","data-href","data-autoplay","data-allowfullscreen","data-controls","Streamable","playerjs","percent","scrolling","Wistia","control","defineControl","_wq","autoPlay","silentAutoPlay","controlsVisibleOnLoad","fullscreenButton","playbar","playbackRateControl","qualityControl","volumeControl","settingsControl","smallPlayButton","unbind","videoID","Twitch","isChannel","setChannel","setVideo","channel","time","READY","ONLINE","OFFLINE","SEEK","addEventListener","DailyMotion","DM","apiready","seeked","video_end","durationchange","onDurationChange","waiting","bufferedTime","Mixcloud","PlayerWidget","ended","query","feed","Vidyard","addReadyListener","renderPlayer","uuid","getPlayerMetadata","meta","length_in_seconds","VidyardV4","destroyPlayer","Kaltura","addListeners","referrerPolicy","HAS_NAVIGATOR","IS_IPAD_PRO","platform","maxTouchPoints","IS_IOS","MSStream","IS_SAFARI","MATCH_DROPBOX_URL","MATCH_CLOUDFLARE_STREAM","FilePlayer","webkitPresentationMode","index","track","prevPlayer","getSource","shouldUseAudio","removeListeners","srcObject","hls","destroy","onPlayBackRateChange","onPresentationModeChange","shouldUseHLS","removeEventListener","poster","dash","reset","Hls","MANIFEST_PARSED","loadSource","attachMedia","shouldUseDASH","dashjs","MediaPlayer","initialize","getDebug","setLogToBrowserConsole","updateSettings","debug","logLevel","Debug","LOG_LEVEL_NONE","shouldUseFLV","flvjs","flv","createPlayer","attachMediaElement","URL","createObjectURL","removeAttribute","requestPictureInPicture","pictureInPictureElement","exitPictureInPicture","seekable","Infinity","buffered","useHLS","useDASH","useFLV","preload","renderSourceElement","renderTrack"],"mappings":"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","file":"ReactPlayer.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + chunkId + \".ReactPlayer.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// The chunk loading function for additional chunks\n \t// Since all referenced chunks are already included\n \t// in this file, this function is empty here.\n \t__webpack_require__.e = function requireEnsure() {\n \t\treturn Promise.resolve();\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonpReactPlayer\"] = window[\"webpackJsonpReactPlayer\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 15);\n","module.exports = React;","import loadScript from 'load-script'\nimport merge from 'deepmerge'\n\nconst MATCH_START_QUERY = /[?&#](?:start|t)=([0-9hms]+)/\nconst MATCH_END_QUERY = /[?&#]end=([0-9hms]+)/\nconst MATCH_START_STAMP = /(\\d+)(h|m|s)/g\nconst MATCH_NUMERIC = /^\\d+$/\n\n// Parse YouTube URL for a start time param, ie ?t=1h14m30s\n// and return the start time in seconds\nfunction parseTimeParam (url, pattern) {\n if (url instanceof Array) {\n return undefined\n }\n const match = url.match(pattern)\n if (match) {\n const stamp = match[1]\n if (stamp.match(MATCH_START_STAMP)) {\n return parseTimeString(stamp)\n }\n if (MATCH_NUMERIC.test(stamp)) {\n return parseInt(stamp)\n }\n }\n return undefined\n}\n\nfunction parseTimeString (stamp) {\n let seconds = 0\n let array = MATCH_START_STAMP.exec(stamp)\n while (array !== null) {\n const [, count, period] = array\n if (period === 'h') seconds += parseInt(count, 10) * 60 * 60\n if (period === 'm') seconds += parseInt(count, 10) * 60\n if (period === 's') seconds += parseInt(count, 10)\n array = MATCH_START_STAMP.exec(stamp)\n }\n return seconds\n}\n\nexport function parseStartTime (url) {\n return parseTimeParam(url, MATCH_START_QUERY)\n}\n\nexport function parseEndTime (url) {\n return parseTimeParam(url, MATCH_END_QUERY)\n}\n\n// http://stackoverflow.com/a/38622545\nexport function randomString () {\n return Math.random().toString(36).substr(2, 5)\n}\n\nexport function queryString (object) {\n return Object\n .keys(object)\n .map(key => `${key}=${object[key]}`)\n .join('&')\n}\n\nfunction getGlobal (key) {\n if (window[key]) {\n return window[key]\n }\n if (window.exports && window.exports[key]) {\n return window.exports[key]\n }\n if (window.module && window.module.exports && window.module.exports[key]) {\n return window.module.exports[key]\n }\n return null\n}\n\n// Util function to load an external SDK\n// or return the SDK if it is already loaded\nconst requests = {}\nexport function getSDK (url, sdkGlobal, sdkReady = null, isLoaded = () => true, fetchScript = loadScript) {\n const existingGlobal = getGlobal(sdkGlobal)\n if (existingGlobal && isLoaded(existingGlobal)) {\n return Promise.resolve(existingGlobal)\n }\n return new Promise((resolve, reject) => {\n // If we are already loading the SDK, add the resolve and reject\n // functions to the existing array of requests\n if (requests[url]) {\n requests[url].push({ resolve, reject })\n return\n }\n requests[url] = [{ resolve, reject }]\n const onLoaded = sdk => {\n // When loaded, resolve all pending request promises\n requests[url].forEach(request => request.resolve(sdk))\n }\n if (sdkReady) {\n const previousOnReady = window[sdkReady]\n window[sdkReady] = function () {\n if (previousOnReady) previousOnReady()\n onLoaded(getGlobal(sdkGlobal))\n }\n }\n fetchScript(url, err => {\n if (err) {\n // Loading the SDK failed – reject all requests and\n // reset the array of requests for this SDK\n requests[url].forEach(request => request.reject(err))\n requests[url] = null\n } else if (!sdkReady) {\n onLoaded(getGlobal(sdkGlobal))\n }\n })\n })\n}\n\nexport function getConfig (props, defaultProps) {\n return merge(defaultProps.config, props.config)\n}\n\nexport function omit (object, ...arrays) {\n const omitKeys = [].concat(...arrays)\n const output = {}\n const keys = Object.keys(object)\n for (const key of keys) {\n if (omitKeys.indexOf(key) === -1) {\n output[key] = object[key]\n }\n }\n return output\n}\n\nexport function callPlayer (method, ...args) {\n // Util method for calling a method on this.player\n // but guard against errors and console.warn instead\n if (!this.player || !this.player[method]) {\n let message = `ReactPlayer: ${this.constructor.displayName} player could not call %c${method}%c – `\n if (!this.player) {\n message += 'The player was not available'\n } else if (!this.player[method]) {\n message += 'The method was not available'\n }\n console.warn(message, 'font-weight: bold', '')\n return null\n }\n return this.player[method](...args)\n}\n\nexport function isMediaStream (url) {\n return (\n typeof window !== 'undefined' &&\n typeof window.MediaStream !== 'undefined' &&\n url instanceof window.MediaStream\n )\n}\n\nexport function isBlobUrl (url) {\n return /^blob:/.test(url)\n}\n\nexport function supportsWebKitPresentationMode (video = document.createElement('video')) {\n // Check if Safari supports PiP, and is not on mobile (other than iPad)\n // iPhone safari appears to \"support\" PiP through the check, however PiP does not function\n const notMobile = /iPhone|iPod/.test(navigator.userAgent) === false\n return video.webkitSupportsPresentationMode && typeof video.webkitSetPresentationMode === 'function' && notMobile\n}\n","import { isMediaStream, isBlobUrl } from './utils'\n\nexport const MATCH_URL_YOUTUBE = /(?:youtu\\.be\\/|youtube(?:-nocookie)?\\.com\\/(?:embed\\/|v\\/|watch\\/|watch\\?v=|watch\\?.+&v=|shorts\\/|live\\/))((\\w|-){11})|youtube\\.com\\/playlist\\?list=|youtube\\.com\\/user\\//\nexport const MATCH_URL_SOUNDCLOUD = /(?:soundcloud\\.com|snd\\.sc)\\/[^.]+$/\nexport const MATCH_URL_VIMEO = /vimeo\\.com\\/(?!progressive_redirect).+/\nexport const MATCH_URL_FACEBOOK = /^https?:\\/\\/(www\\.)?facebook\\.com.*\\/(video(s)?|watch|story)(\\.php?|\\/).+$/\nexport const MATCH_URL_FACEBOOK_WATCH = /^https?:\\/\\/fb\\.watch\\/.+$/\nexport const MATCH_URL_STREAMABLE = /streamable\\.com\\/([a-z0-9]+)$/\nexport const MATCH_URL_WISTIA = /(?:wistia\\.(?:com|net)|wi\\.st)\\/(?:medias|embed)\\/(?:iframe\\/)?(.*)$/\nexport const MATCH_URL_TWITCH_VIDEO = /(?:www\\.|go\\.)?twitch\\.tv\\/videos\\/(\\d+)($|\\?)/\nexport const MATCH_URL_TWITCH_CHANNEL = /(?:www\\.|go\\.)?twitch\\.tv\\/([a-zA-Z0-9_]+)($|\\?)/\nexport const MATCH_URL_DAILYMOTION = /^(?:(?:https?):)?(?:\\/\\/)?(?:www\\.)?(?:(?:dailymotion\\.com(?:\\/embed)?\\/video)|dai\\.ly)\\/([a-zA-Z0-9]+)(?:_[\\w_-]+)?(?:[\\w.#_-]+)?/\nexport const MATCH_URL_MIXCLOUD = /mixcloud\\.com\\/([^/]+\\/[^/]+)/\nexport const MATCH_URL_VIDYARD = /vidyard.com\\/(?:watch\\/)?([a-zA-Z0-9-_]+)/\nexport const MATCH_URL_KALTURA = /^https?:\\/\\/[a-zA-Z]+\\.kaltura.(com|org)\\/p\\/([0-9]+)\\/sp\\/([0-9]+)00\\/embedIframeJs\\/uiconf_id\\/([0-9]+)\\/partner_id\\/([0-9]+)(.*)entry_id.([a-zA-Z0-9-_].*)$/\nexport const AUDIO_EXTENSIONS = /\\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\\?)/i\nexport const VIDEO_EXTENSIONS = /\\.(mp4|og[gv]|webm|mov|m4v)(#t=[,\\d+]+)?($|\\?)/i\nexport const HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i\nexport const DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i\nexport const FLV_EXTENSIONS = /\\.(flv)($|\\?)/i\n\nconst canPlayFile = url => {\n if (url instanceof Array) {\n for (const item of url) {\n if (typeof item === 'string' && canPlayFile(item)) {\n return true\n }\n if (canPlayFile(item.src)) {\n return true\n }\n }\n return false\n }\n if (isMediaStream(url) || isBlobUrl(url)) {\n return true\n }\n return (\n AUDIO_EXTENSIONS.test(url) ||\n VIDEO_EXTENSIONS.test(url) ||\n HLS_EXTENSIONS.test(url) ||\n DASH_EXTENSIONS.test(url) ||\n FLV_EXTENSIONS.test(url)\n )\n}\n\nexport const canPlay = {\n youtube: url => {\n if (url instanceof Array) {\n return url.every(item => MATCH_URL_YOUTUBE.test(item))\n }\n return MATCH_URL_YOUTUBE.test(url)\n },\n soundcloud: url => MATCH_URL_SOUNDCLOUD.test(url) && !AUDIO_EXTENSIONS.test(url),\n vimeo: url => MATCH_URL_VIMEO.test(url) && !VIDEO_EXTENSIONS.test(url) && !HLS_EXTENSIONS.test(url),\n facebook: url => MATCH_URL_FACEBOOK.test(url) || MATCH_URL_FACEBOOK_WATCH.test(url),\n streamable: url => MATCH_URL_STREAMABLE.test(url),\n wistia: url => MATCH_URL_WISTIA.test(url),\n twitch: url => MATCH_URL_TWITCH_VIDEO.test(url) || MATCH_URL_TWITCH_CHANNEL.test(url),\n dailymotion: url => MATCH_URL_DAILYMOTION.test(url),\n mixcloud: url => MATCH_URL_MIXCLOUD.test(url),\n vidyard: url => MATCH_URL_VIDYARD.test(url),\n kaltura: url => MATCH_URL_KALTURA.test(url),\n file: canPlayFile\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","import PropTypes from 'prop-types'\n\nconst { string, bool, number, array, oneOfType, shape, object, func, node } = PropTypes\n\nexport const propTypes = {\n url: oneOfType([string, array, object]),\n playing: bool,\n loop: bool,\n controls: bool,\n volume: number,\n muted: bool,\n playbackRate: number,\n width: oneOfType([string, number]),\n height: oneOfType([string, number]),\n style: object,\n progressInterval: number,\n playsinline: bool,\n pip: bool,\n stopOnUnmount: bool,\n light: oneOfType([bool, string, object]),\n playIcon: node,\n previewTabIndex: number,\n fallback: node,\n oEmbedUrl: string,\n wrapper: oneOfType([\n string,\n func,\n shape({ render: func.isRequired })\n ]),\n config: shape({\n soundcloud: shape({\n options: object\n }),\n youtube: shape({\n playerVars: object,\n embedOptions: object,\n onUnstarted: func\n }),\n facebook: shape({\n appId: string,\n version: string,\n playerId: string,\n attributes: object\n }),\n dailymotion: shape({\n params: object\n }),\n vimeo: shape({\n playerOptions: object,\n title: string\n }),\n file: shape({\n attributes: object,\n tracks: array,\n forceVideo: bool,\n forceAudio: bool,\n forceHLS: bool,\n forceSafariHLS: bool,\n forceDASH: bool,\n forceFLV: bool,\n hlsOptions: object,\n hlsVersion: string,\n dashVersion: string,\n flvVersion: string\n }),\n wistia: shape({\n options: object,\n playerId: string,\n customControls: array\n }),\n mixcloud: shape({\n options: object\n }),\n twitch: shape({\n options: object,\n playerId: string\n }),\n vidyard: shape({\n options: object\n })\n }),\n onReady: func,\n onStart: func,\n onPlay: func,\n onPause: func,\n onBuffer: func,\n onBufferEnd: func,\n onEnded: func,\n onError: func,\n onDuration: func,\n onSeek: func,\n onPlaybackRateChange: func,\n onProgress: func,\n onClickPreview: func,\n onEnablePIP: func,\n onDisablePIP: func\n}\n\nconst noop = () => {}\n\nexport const defaultProps = {\n playing: false,\n loop: false,\n controls: false,\n volume: null,\n muted: false,\n playbackRate: 1,\n width: '640px',\n height: '360px',\n style: {},\n progressInterval: 1000,\n playsinline: false,\n pip: false,\n stopOnUnmount: true,\n light: false,\n fallback: null,\n wrapper: 'div',\n previewTabIndex: 0,\n oEmbedUrl: 'https://noembed.com/embed?url={url}',\n config: {\n soundcloud: {\n options: {\n visual: true, // Undocumented, but makes player fill container and look better\n buying: false,\n liking: false,\n download: false,\n sharing: false,\n show_comments: false,\n show_playcount: false\n }\n },\n youtube: {\n playerVars: {\n playsinline: 1,\n showinfo: 0,\n rel: 0,\n iv_load_policy: 3,\n modestbranding: 1\n },\n embedOptions: {},\n onUnstarted: noop\n },\n facebook: {\n appId: '1309697205772819',\n version: 'v3.3',\n playerId: null,\n attributes: {}\n },\n dailymotion: {\n params: {\n api: 1,\n 'endscreen-enable': false\n }\n },\n vimeo: {\n playerOptions: {\n autopause: false,\n byline: false,\n portrait: false,\n title: false\n },\n title: null\n },\n file: {\n attributes: {},\n tracks: [],\n forceVideo: false,\n forceAudio: false,\n forceHLS: false,\n forceDASH: false,\n forceFLV: false,\n hlsOptions: {},\n hlsVersion: '1.1.4',\n dashVersion: '3.1.3',\n flvVersion: '1.5.0'\n },\n wistia: {\n options: {},\n playerId: null,\n customControls: null\n },\n mixcloud: {\n options: {\n hide_cover: 1\n }\n },\n twitch: {\n options: {},\n playerId: null\n },\n vidyard: {\n options: {}\n }\n },\n onReady: noop,\n onStart: noop,\n onPlay: noop,\n onPause: noop,\n onBuffer: noop,\n onBufferEnd: noop,\n onEnded: noop,\n onError: noop,\n onDuration: noop,\n onSeek: noop,\n onPlaybackRateChange: noop,\n onProgress: noop,\n onClickPreview: noop,\n onEnablePIP: noop,\n onDisablePIP: noop\n}\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.1\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","function areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (newInputs[i] !== lastInputs[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","\nmodule.exports = function load (src, opts, cb) {\n var head = document.head || document.getElementsByTagName('head')[0]\n var script = document.createElement('script')\n\n if (typeof opts === 'function') {\n cb = opts\n opts = {}\n }\n\n opts = opts || {}\n cb = cb || function() {}\n\n script.type = opts.type || 'text/javascript'\n script.charset = opts.charset || 'utf8';\n script.async = 'async' in opts ? !!opts.async : true\n script.src = src\n\n if (opts.attrs) {\n setAttributes(script, opts.attrs)\n }\n\n if (opts.text) {\n script.text = '' + opts.text\n }\n\n var onend = 'onload' in script ? stdOnEnd : ieOnEnd\n onend(script, cb)\n\n // some good legacy browsers (firefox) fail the 'in' detection above\n // so as a fallback we always set onload\n // old IE will ignore this and new IE will set onload\n if (!script.onload) {\n stdOnEnd(script, cb);\n }\n\n head.appendChild(script)\n}\n\nfunction setAttributes(script, attrs) {\n for (var attr in attrs) {\n script.setAttribute(attr, attrs[attr]);\n }\n}\n\nfunction stdOnEnd (script, cb) {\n script.onload = function () {\n this.onerror = this.onload = null\n cb(null, script)\n }\n script.onerror = function () {\n // this.onload = null here is necessary\n // because even IE9 works not like others\n this.onerror = this.onload = null\n cb(new Error('Failed to load ' + this.src), script)\n }\n}\n\nfunction ieOnEnd (script, cb) {\n script.onreadystatechange = function () {\n if (this.readyState != 'complete' && this.readyState != 'loaded') return\n this.onreadystatechange = null\n cb(null, script) // there is no way to catch loading errors in IE8\n }\n}\n","import React, { Component, Suspense, lazy } from 'react'\nimport merge from 'deepmerge'\nimport memoize from 'memoize-one'\nimport isEqual from 'react-fast-compare'\n\nimport { propTypes, defaultProps } from './props'\nimport { omit } from './utils'\nimport Player from './Player'\n\nconst Preview = lazy(() => import(/* webpackChunkName: 'reactPlayerPreview' */'./Preview'))\n\nconst IS_BROWSER = typeof window !== 'undefined' && window.document\nconst IS_GLOBAL = typeof global !== 'undefined' && global.window && global.window.document\nconst SUPPORTED_PROPS = Object.keys(propTypes)\n\n// Return null when rendering on the server\n// as Suspense is not supported yet\nconst UniversalSuspense = IS_BROWSER || IS_GLOBAL ? Suspense : () => null\n\nconst customPlayers = []\n\nexport const createReactPlayer = (players, fallback) => {\n return class ReactPlayer extends Component {\n static displayName = 'ReactPlayer'\n static propTypes = propTypes\n static defaultProps = defaultProps\n static addCustomPlayer = player => { customPlayers.push(player) }\n static removeCustomPlayers = () => { customPlayers.length = 0 }\n\n static canPlay = url => {\n for (const Player of [...customPlayers, ...players]) {\n if (Player.canPlay(url)) {\n return true\n }\n }\n return false\n }\n\n static canEnablePIP = url => {\n for (const Player of [...customPlayers, ...players]) {\n if (Player.canEnablePIP && Player.canEnablePIP(url)) {\n return true\n }\n }\n return false\n }\n\n state = {\n showPreview: !!this.props.light\n }\n\n // Use references, as refs is used by React\n references = {\n wrapper: wrapper => { this.wrapper = wrapper },\n player: player => { this.player = player }\n }\n\n shouldComponentUpdate (nextProps, nextState) {\n return !isEqual(this.props, nextProps) || !isEqual(this.state, nextState)\n }\n\n componentDidUpdate (prevProps) {\n const { light } = this.props\n if (!prevProps.light && light) {\n this.setState({ showPreview: true })\n }\n if (prevProps.light && !light) {\n this.setState({ showPreview: false })\n }\n }\n\n handleClickPreview = (e) => {\n this.setState({ showPreview: false })\n this.props.onClickPreview(e)\n }\n\n showPreview = () => {\n this.setState({ showPreview: true })\n }\n\n getDuration = () => {\n if (!this.player) return null\n return this.player.getDuration()\n }\n\n getCurrentTime = () => {\n if (!this.player) return null\n return this.player.getCurrentTime()\n }\n\n getSecondsLoaded = () => {\n if (!this.player) return null\n return this.player.getSecondsLoaded()\n }\n\n getInternalPlayer = (key = 'player') => {\n if (!this.player) return null\n return this.player.getInternalPlayer(key)\n }\n\n seekTo = (fraction, type) => {\n if (!this.player) return null\n this.player.seekTo(fraction, type)\n }\n\n handleReady = () => {\n this.props.onReady(this)\n }\n\n getActivePlayer = memoize(url => {\n for (const player of [...customPlayers, ...players]) {\n if (player.canPlay(url)) {\n return player\n }\n }\n if (fallback) {\n return fallback\n }\n return null\n })\n\n getConfig = memoize((url, key) => {\n const { config } = this.props\n return merge.all([\n defaultProps.config,\n defaultProps.config[key] || {},\n config,\n config[key] || {}\n ])\n })\n\n getAttributes = memoize(url => {\n return omit(this.props, SUPPORTED_PROPS)\n })\n\n renderPreview (url) {\n if (!url) return null\n const { light, playIcon, previewTabIndex, oEmbedUrl } = this.props\n return (\n \n )\n }\n\n renderActivePlayer = url => {\n if (!url) return null\n const player = this.getActivePlayer(url)\n if (!player) return null\n const config = this.getConfig(url, player.key)\n return (\n \n )\n }\n\n render () {\n const { url, style, width, height, fallback, wrapper: Wrapper } = this.props\n const { showPreview } = this.state\n const attributes = this.getAttributes(url)\n const wrapperRef = typeof Wrapper === 'string' ? this.references.wrapper : undefined\n return (\n \n \n {showPreview\n ? this.renderPreview(url)\n : this.renderActivePlayer(url)}\n \n \n )\n }\n }\n}\n","import React, { Component } from 'react'\nimport isEqual from 'react-fast-compare'\n\nimport { propTypes, defaultProps } from './props'\nimport { isMediaStream } from './utils'\n\nconst SEEK_ON_PLAY_EXPIRY = 5000\n\nexport default class Player extends Component {\n static displayName = 'Player'\n static propTypes = propTypes\n static defaultProps = defaultProps\n\n mounted = false\n isReady = false\n isPlaying = false // Track playing state internally to prevent bugs\n isLoading = true // Use isLoading to prevent onPause when switching URL\n loadOnReady = null\n startOnPlay = true\n seekOnPlay = null\n onDurationCalled = false\n\n componentDidMount () {\n this.mounted = true\n }\n\n componentWillUnmount () {\n clearTimeout(this.progressTimeout)\n clearTimeout(this.durationCheckTimeout)\n if (this.isReady && this.props.stopOnUnmount) {\n this.player.stop()\n\n if (this.player.disablePIP) {\n this.player.disablePIP()\n }\n }\n this.mounted = false\n }\n\n componentDidUpdate (prevProps) {\n // If there isn’t a player available, don’t do anything\n if (!this.player) {\n return\n }\n // Invoke player methods based on changed props\n const { url, playing, volume, muted, playbackRate, pip, loop, activePlayer, disableDeferredLoading } = this.props\n if (!isEqual(prevProps.url, url)) {\n if (this.isLoading && !activePlayer.forceLoad && !disableDeferredLoading && !isMediaStream(url)) {\n console.warn(`ReactPlayer: the attempt to load ${url} is being deferred until the player has loaded`)\n this.loadOnReady = url\n return\n }\n this.isLoading = true\n this.startOnPlay = true\n this.onDurationCalled = false\n this.player.load(url, this.isReady)\n }\n if (!prevProps.playing && playing && !this.isPlaying) {\n this.player.play()\n }\n if (prevProps.playing && !playing && this.isPlaying) {\n this.player.pause()\n }\n if (!prevProps.pip && pip && this.player.enablePIP) {\n this.player.enablePIP()\n }\n if (prevProps.pip && !pip && this.player.disablePIP) {\n this.player.disablePIP()\n }\n if (prevProps.volume !== volume && volume !== null) {\n this.player.setVolume(volume)\n }\n if (prevProps.muted !== muted) {\n if (muted) {\n this.player.mute()\n } else {\n this.player.unmute()\n if (volume !== null) {\n // Set volume next tick to fix a bug with DailyMotion\n setTimeout(() => this.player.setVolume(volume))\n }\n }\n }\n if (prevProps.playbackRate !== playbackRate && this.player.setPlaybackRate) {\n this.player.setPlaybackRate(playbackRate)\n }\n if (prevProps.loop !== loop && this.player.setLoop) {\n this.player.setLoop(loop)\n }\n }\n\n handlePlayerMount = player => {\n if (this.player) {\n this.progress() // Ensure onProgress is still called in strict mode\n return // Return here to prevent loading twice in strict mode\n }\n this.player = player\n this.player.load(this.props.url)\n this.progress()\n }\n\n getDuration () {\n if (!this.isReady) return null\n return this.player.getDuration()\n }\n\n getCurrentTime () {\n if (!this.isReady) return null\n return this.player.getCurrentTime()\n }\n\n getSecondsLoaded () {\n if (!this.isReady) return null\n return this.player.getSecondsLoaded()\n }\n\n getInternalPlayer = (key) => {\n if (!this.player) return null\n return this.player[key]\n }\n\n progress = () => {\n if (this.props.url && this.player && this.isReady) {\n const playedSeconds = this.getCurrentTime() || 0\n const loadedSeconds = this.getSecondsLoaded()\n const duration = this.getDuration()\n if (duration) {\n const progress = {\n playedSeconds,\n played: playedSeconds / duration\n }\n if (loadedSeconds !== null) {\n progress.loadedSeconds = loadedSeconds\n progress.loaded = loadedSeconds / duration\n }\n // Only call onProgress if values have changed\n if (progress.playedSeconds !== this.prevPlayed || progress.loadedSeconds !== this.prevLoaded) {\n this.props.onProgress(progress)\n }\n this.prevPlayed = progress.playedSeconds\n this.prevLoaded = progress.loadedSeconds\n }\n }\n this.progressTimeout = setTimeout(this.progress, this.props.progressFrequency || this.props.progressInterval)\n }\n\n seekTo (amount, type) {\n // When seeking before player is ready, store value and seek later\n if (!this.isReady) {\n if (amount !== 0) {\n this.seekOnPlay = amount\n setTimeout(() => { this.seekOnPlay = null }, SEEK_ON_PLAY_EXPIRY)\n }\n return\n }\n const isFraction = !type ? (amount > 0 && amount < 1) : type === 'fraction'\n if (isFraction) {\n // Convert fraction to seconds based on duration\n const duration = this.player.getDuration()\n if (!duration) {\n console.warn('ReactPlayer: could not seek using fraction – duration not yet available')\n return\n }\n this.player.seekTo(duration * amount)\n return\n }\n this.player.seekTo(amount)\n }\n\n handleReady = () => {\n if (!this.mounted) return\n this.isReady = true\n this.isLoading = false\n const { onReady, playing, volume, muted } = this.props\n onReady()\n if (!muted && volume !== null) {\n this.player.setVolume(volume)\n }\n if (this.loadOnReady) {\n this.player.load(this.loadOnReady, true)\n this.loadOnReady = null\n } else if (playing) {\n this.player.play()\n }\n this.handleDurationCheck()\n }\n\n handlePlay = () => {\n this.isPlaying = true\n this.isLoading = false\n const { onStart, onPlay, playbackRate } = this.props\n if (this.startOnPlay) {\n if (this.player.setPlaybackRate && playbackRate !== 1) {\n this.player.setPlaybackRate(playbackRate)\n }\n onStart()\n this.startOnPlay = false\n }\n onPlay()\n if (this.seekOnPlay) {\n this.seekTo(this.seekOnPlay)\n this.seekOnPlay = null\n }\n this.handleDurationCheck()\n }\n\n handlePause = (e) => {\n this.isPlaying = false\n if (!this.isLoading) {\n this.props.onPause(e)\n }\n }\n\n handleEnded = () => {\n const { activePlayer, loop, onEnded } = this.props\n if (activePlayer.loopOnEnded && loop) {\n this.seekTo(0)\n }\n if (!loop) {\n this.isPlaying = false\n onEnded()\n }\n }\n\n handleError = (...args) => {\n this.isLoading = false\n this.props.onError(...args)\n }\n\n handleDurationCheck = () => {\n clearTimeout(this.durationCheckTimeout)\n const duration = this.getDuration()\n if (duration) {\n if (!this.onDurationCalled) {\n this.props.onDuration(duration)\n this.onDurationCalled = true\n }\n } else {\n this.durationCheckTimeout = setTimeout(this.handleDurationCheck, 100)\n }\n }\n\n handleLoaded = () => {\n // Sometimes we know loading has stopped but onReady/onPlay are never called\n // so this provides a way for players to avoid getting stuck\n this.isLoading = false\n }\n\n render () {\n const Player = this.props.activePlayer\n if (!Player) {\n return null\n }\n return (\n \n )\n }\n}\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import React, { Component } from 'react'\n\nconst ICON_SIZE = '64px'\n\nconst cache = {}\n\nexport default class Preview extends Component {\n mounted = false\n state = {\n image: null\n }\n\n componentDidMount () {\n this.mounted = true\n this.fetchImage(this.props)\n }\n\n componentDidUpdate (prevProps) {\n const { url, light } = this.props\n if (prevProps.url !== url || prevProps.light !== light) {\n this.fetchImage(this.props)\n }\n }\n\n componentWillUnmount () {\n this.mounted = false\n }\n\n fetchImage ({ url, light, oEmbedUrl }) {\n if (React.isValidElement(light)) {\n return\n }\n if (typeof light === 'string') {\n this.setState({ image: light })\n return\n }\n if (cache[url]) {\n this.setState({ image: cache[url] })\n return\n }\n this.setState({ image: null })\n return window.fetch(oEmbedUrl.replace('{url}', url))\n .then(response => response.json())\n .then(data => {\n if (data.thumbnail_url && this.mounted) {\n const image = data.thumbnail_url.replace('height=100', 'height=480').replace('-d_295x166', '-d_640')\n this.setState({ image })\n cache[url] = image\n }\n })\n }\n\n handleKeyPress = e => {\n if (e.key === 'Enter' || e.key === ' ') {\n this.props.onClick()\n }\n }\n\n render () {\n const { light, onClick, playIcon, previewTabIndex } = this.props\n const { image } = this.state\n const isElement = React.isValidElement(light)\n const flexCenter = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }\n const styles = {\n preview: {\n width: '100%',\n height: '100%',\n backgroundImage: image && !isElement ? `url(${image})` : undefined,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n cursor: 'pointer',\n ...flexCenter\n },\n shadow: {\n background: 'radial-gradient(rgb(0, 0, 0, 0.3), rgba(0, 0, 0, 0) 60%)',\n borderRadius: ICON_SIZE,\n width: ICON_SIZE,\n height: ICON_SIZE,\n position: isElement ? 'absolute' : undefined,\n ...flexCenter\n },\n playIcon: {\n borderStyle: 'solid',\n borderWidth: '16px 0 16px 26px',\n borderColor: 'transparent transparent transparent white',\n marginLeft: '7px'\n }\n }\n const defaultPlayIcon = (\n
\n
\n
\n )\n return (\n \n {isElement ? light : null}\n {playIcon || defaultPlayIcon}\n
\n )\n }\n}\n","import { lazy } from 'react'\nimport { supportsWebKitPresentationMode } from '../utils'\nimport { canPlay, AUDIO_EXTENSIONS } from '../patterns'\n\nexport default [\n {\n key: 'youtube',\n name: 'YouTube',\n canPlay: canPlay.youtube,\n lazyPlayer: lazy(() => import(/* webpackChunkName: 'reactPlayerYouTube' */'./YouTube'))\n },\n {\n key: 'soundcloud',\n name: 'SoundCloud',\n canPlay: canPlay.soundcloud,\n lazyPlayer: lazy(() => import(/* webpackChunkName: 'reactPlayerSoundCloud' */'./SoundCloud'))\n },\n {\n key: 'vimeo',\n name: 'Vimeo',\n canPlay: canPlay.vimeo,\n lazyPlayer: lazy(() => import(/* webpackChunkName: 'reactPlayerVimeo' */'./Vimeo'))\n },\n {\n key: 'facebook',\n name: 'Facebook',\n canPlay: canPlay.facebook,\n lazyPlayer: lazy(() => import(/* webpackChunkName: 'reactPlayerFacebook' */'./Facebook'))\n },\n {\n key: 'streamable',\n name: 'Streamable',\n canPlay: canPlay.streamable,\n lazyPlayer: lazy(() => import(/* webpackChunkName: 'reactPlayerStreamable' */'./Streamable'))\n },\n {\n key: 'wistia',\n name: 'Wistia',\n canPlay: canPlay.wistia,\n lazyPlayer: lazy(() => import(/* webpackChunkName: 'reactPlayerWistia' */'./Wistia'))\n },\n {\n key: 'twitch',\n name: 'Twitch',\n canPlay: canPlay.twitch,\n lazyPlayer: lazy(() => import(/* webpackChunkName: 'reactPlayerTwitch' */'./Twitch'))\n },\n {\n key: 'dailymotion',\n name: 'DailyMotion',\n canPlay: canPlay.dailymotion,\n lazyPlayer: lazy(() => import(/* webpackChunkName: 'reactPlayerDailyMotion' */'./DailyMotion'))\n },\n {\n key: 'mixcloud',\n name: 'Mixcloud',\n canPlay: canPlay.mixcloud,\n lazyPlayer: lazy(() => import(/* webpackChunkName: 'reactPlayerMixcloud' */'./Mixcloud'))\n },\n {\n key: 'vidyard',\n name: 'Vidyard',\n canPlay: canPlay.vidyard,\n lazyPlayer: lazy(() => import(/* webpackChunkName: 'reactPlayerVidyard' */'./Vidyard'))\n },\n {\n key: 'kaltura',\n name: 'Kaltura',\n canPlay: canPlay.kaltura,\n lazyPlayer: lazy(() => import(/* webpackChunkName: 'reactPlayerKaltura' */'./Kaltura'))\n },\n {\n key: 'file',\n name: 'FilePlayer',\n canPlay: canPlay.file,\n canEnablePIP: url => {\n return canPlay.file(url) && (document.pictureInPictureEnabled || supportsWebKitPresentationMode()) && !AUDIO_EXTENSIONS.test(url)\n },\n lazyPlayer: lazy(() => import(/* webpackChunkName: 'reactPlayerFilePlayer' */'./FilePlayer'))\n }\n]\n","import players from './players'\nimport { createReactPlayer } from './ReactPlayer'\n\n// Fall back to FilePlayer if nothing else can play the URL\nconst fallback = players[players.length - 1]\n\nexport default createReactPlayer(players, fallback)\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK, parseStartTime, parseEndTime } from '../utils'\nimport { canPlay, MATCH_URL_YOUTUBE } from '../patterns'\n\nconst SDK_URL = 'https://www.youtube.com/iframe_api'\nconst SDK_GLOBAL = 'YT'\nconst SDK_GLOBAL_READY = 'onYouTubeIframeAPIReady'\nconst MATCH_PLAYLIST = /[?&](?:list|channel)=([a-zA-Z0-9_-]+)/\nconst MATCH_USER_UPLOADS = /user\\/([a-zA-Z0-9_-]+)\\/?/\nconst MATCH_NOCOOKIE = /youtube-nocookie\\.com/\nconst NOCOOKIE_HOST = 'https://www.youtube-nocookie.com'\n\nexport default class YouTube extends Component {\n static displayName = 'YouTube'\n static canPlay = canPlay.youtube\n callPlayer = callPlayer\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n getID (url) {\n if (!url || url instanceof Array || MATCH_PLAYLIST.test(url)) {\n return null\n }\n return url.match(MATCH_URL_YOUTUBE)[1]\n }\n\n load (url, isReady) {\n const { playing, muted, playsinline, controls, loop, config, onError } = this.props\n const { playerVars, embedOptions } = config\n const id = this.getID(url)\n if (isReady) {\n if (MATCH_PLAYLIST.test(url) || MATCH_USER_UPLOADS.test(url) || url instanceof Array) {\n this.player.loadPlaylist(this.parsePlaylist(url))\n return\n }\n this.player.cueVideoById({\n videoId: id,\n startSeconds: parseStartTime(url) || playerVars.start,\n endSeconds: parseEndTime(url) || playerVars.end\n })\n return\n }\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, YT => YT.loaded).then(YT => {\n if (!this.container) return\n this.player = new YT.Player(this.container, {\n width: '100%',\n height: '100%',\n videoId: id,\n playerVars: {\n autoplay: playing ? 1 : 0,\n mute: muted ? 1 : 0,\n controls: controls ? 1 : 0,\n start: parseStartTime(url),\n end: parseEndTime(url),\n origin: window.location.origin,\n playsinline: playsinline ? 1 : 0,\n ...this.parsePlaylist(url),\n ...playerVars\n },\n events: {\n onReady: () => {\n if (loop) {\n this.player.setLoop(true) // Enable playlist looping\n }\n this.props.onReady()\n },\n onPlaybackRateChange: event => this.props.onPlaybackRateChange(event.data),\n onStateChange: this.onStateChange,\n onError: event => onError(event.data)\n },\n host: MATCH_NOCOOKIE.test(url) ? NOCOOKIE_HOST : undefined,\n ...embedOptions\n })\n }, onError)\n if (embedOptions.events) {\n console.warn('Using `embedOptions.events` will likely break things. Use ReactPlayer’s callback props instead, eg onReady, onPlay, onPause')\n }\n }\n\n parsePlaylist = (url) => {\n if (url instanceof Array) {\n return {\n listType: 'playlist',\n playlist: url.map(this.getID).join(',')\n }\n }\n if (MATCH_PLAYLIST.test(url)) {\n const [, playlistId] = url.match(MATCH_PLAYLIST)\n return {\n listType: 'playlist',\n list: playlistId.replace(/^UC/, 'UU')\n }\n }\n if (MATCH_USER_UPLOADS.test(url)) {\n const [, username] = url.match(MATCH_USER_UPLOADS)\n return {\n listType: 'user_uploads',\n list: username\n }\n }\n return {}\n }\n\n onStateChange = (event) => {\n const { data } = event\n const { onPlay, onPause, onBuffer, onBufferEnd, onEnded, onReady, loop, config: { playerVars, onUnstarted } } = this.props\n const { UNSTARTED, PLAYING, PAUSED, BUFFERING, ENDED, CUED } = window[SDK_GLOBAL].PlayerState\n if (data === UNSTARTED) onUnstarted()\n if (data === PLAYING) {\n onPlay()\n onBufferEnd()\n }\n if (data === PAUSED) onPause()\n if (data === BUFFERING) onBuffer()\n if (data === ENDED) {\n const isPlaylist = !!this.callPlayer('getPlaylist')\n // Only loop manually if not playing a playlist\n if (loop && !isPlaylist) {\n if (playerVars.start) {\n this.seekTo(playerVars.start)\n } else {\n this.play()\n }\n }\n onEnded()\n }\n if (data === CUED) onReady()\n }\n\n play () {\n this.callPlayer('playVideo')\n }\n\n pause () {\n this.callPlayer('pauseVideo')\n }\n\n stop () {\n if (!document.body.contains(this.callPlayer('getIframe'))) return\n this.callPlayer('stopVideo')\n }\n\n seekTo (amount) {\n this.callPlayer('seekTo', amount)\n if (!this.props.playing) {\n this.pause()\n }\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction * 100)\n }\n\n mute = () => {\n this.callPlayer('mute')\n }\n\n unmute = () => {\n this.callPlayer('unMute')\n }\n\n setPlaybackRate (rate) {\n this.callPlayer('setPlaybackRate', rate)\n }\n\n setLoop (loop) {\n this.callPlayer('setLoop', loop)\n }\n\n getDuration () {\n return this.callPlayer('getDuration')\n }\n\n getCurrentTime () {\n return this.callPlayer('getCurrentTime')\n }\n\n getSecondsLoaded () {\n return this.callPlayer('getVideoLoadedFraction') * this.getDuration()\n }\n\n ref = container => {\n this.container = container\n }\n\n render () {\n const { display } = this.props\n const style = {\n width: '100%',\n height: '100%',\n display\n }\n return (\n
\n
\n
\n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK } from '../utils'\nimport { canPlay } from '../patterns'\n\nconst SDK_URL = 'https://w.soundcloud.com/player/api.js'\nconst SDK_GLOBAL = 'SC'\n\nexport default class SoundCloud extends Component {\n static displayName = 'SoundCloud'\n static canPlay = canPlay.soundcloud\n static loopOnEnded = true\n callPlayer = callPlayer\n duration = null\n currentTime = null\n fractionLoaded = null\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url, isReady) {\n getSDK(SDK_URL, SDK_GLOBAL).then(SC => {\n if (!this.iframe) return\n const { PLAY, PLAY_PROGRESS, PAUSE, FINISH, ERROR } = SC.Widget.Events\n if (!isReady) {\n this.player = SC.Widget(this.iframe)\n this.player.bind(PLAY, this.props.onPlay)\n this.player.bind(PAUSE, () => {\n const remaining = this.duration - this.currentTime\n if (remaining < 0.05) {\n // Prevent onPause firing right before onEnded\n return\n }\n this.props.onPause()\n })\n this.player.bind(PLAY_PROGRESS, e => {\n this.currentTime = e.currentPosition / 1000\n this.fractionLoaded = e.loadedProgress\n })\n this.player.bind(FINISH, () => this.props.onEnded())\n this.player.bind(ERROR, e => this.props.onError(e))\n }\n this.player.load(url, {\n ...this.props.config.options,\n callback: () => {\n this.player.getDuration(duration => {\n this.duration = duration / 1000\n this.props.onReady()\n })\n }\n })\n })\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n // Nothing to do\n }\n\n seekTo (seconds) {\n this.callPlayer('seekTo', seconds * 1000)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction * 100)\n }\n\n mute = () => {\n this.setVolume(0)\n }\n\n unmute = () => {\n if (this.props.volume !== null) {\n this.setVolume(this.props.volume)\n }\n }\n\n getDuration () {\n return this.duration\n }\n\n getCurrentTime () {\n return this.currentTime\n }\n\n getSecondsLoaded () {\n return this.fractionLoaded * this.duration\n }\n\n ref = iframe => {\n this.iframe = iframe\n }\n\n render () {\n const { display } = this.props\n const style = {\n width: '100%',\n height: '100%',\n display\n }\n return (\n \n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK } from '../utils'\nimport { canPlay } from '../patterns'\n\nconst SDK_URL = 'https://player.vimeo.com/api/player.js'\nconst SDK_GLOBAL = 'Vimeo'\n\nexport default class Vimeo extends Component {\n static displayName = 'Vimeo'\n static canPlay = canPlay.vimeo\n static forceLoad = true // Prevent checking isLoading when URL changes\n callPlayer = callPlayer\n duration = null\n currentTime = null\n secondsLoaded = null\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url) {\n this.duration = null\n getSDK(SDK_URL, SDK_GLOBAL).then(Vimeo => {\n if (!this.container) return\n const { playerOptions, title } = this.props.config\n this.player = new Vimeo.Player(this.container, {\n url,\n autoplay: this.props.playing,\n muted: this.props.muted,\n loop: this.props.loop,\n playsinline: this.props.playsinline,\n controls: this.props.controls,\n ...playerOptions\n })\n this.player.ready().then(() => {\n const iframe = this.container.querySelector('iframe')\n iframe.style.width = '100%'\n iframe.style.height = '100%'\n if (title) {\n iframe.title = title\n }\n }).catch(this.props.onError)\n this.player.on('loaded', () => {\n this.props.onReady()\n this.refreshDuration()\n })\n this.player.on('play', () => {\n this.props.onPlay()\n this.refreshDuration()\n })\n this.player.on('pause', this.props.onPause)\n this.player.on('seeked', e => this.props.onSeek(e.seconds))\n this.player.on('ended', this.props.onEnded)\n this.player.on('error', this.props.onError)\n this.player.on('timeupdate', ({ seconds }) => {\n this.currentTime = seconds\n })\n this.player.on('progress', ({ seconds }) => {\n this.secondsLoaded = seconds\n })\n this.player.on('bufferstart', this.props.onBuffer)\n this.player.on('bufferend', this.props.onBufferEnd)\n this.player.on('playbackratechange', e => this.props.onPlaybackRateChange(e.playbackRate))\n }, this.props.onError)\n }\n\n refreshDuration () {\n this.player.getDuration().then(duration => {\n this.duration = duration\n })\n }\n\n play () {\n const promise = this.callPlayer('play')\n if (promise) {\n promise.catch(this.props.onError)\n }\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n this.callPlayer('unload')\n }\n\n seekTo (seconds) {\n this.callPlayer('setCurrentTime', seconds)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction)\n }\n\n setMuted (muted) {\n this.callPlayer('setMuted', muted)\n }\n\n setLoop (loop) {\n this.callPlayer('setLoop', loop)\n }\n\n setPlaybackRate (rate) {\n this.callPlayer('setPlaybackRate', rate)\n }\n\n mute = () => {\n this.setMuted(true)\n }\n\n unmute = () => {\n this.setMuted(false)\n }\n\n getDuration () {\n return this.duration\n }\n\n getCurrentTime () {\n return this.currentTime\n }\n\n getSecondsLoaded () {\n return this.secondsLoaded\n }\n\n ref = container => {\n this.container = container\n }\n\n render () {\n const { display } = this.props\n const style = {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n display\n }\n return (\n \n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK, randomString } from '../utils'\nimport { canPlay } from '../patterns'\n\nconst SDK_URL = 'https://connect.facebook.net/en_US/sdk.js'\nconst SDK_GLOBAL = 'FB'\nconst SDK_GLOBAL_READY = 'fbAsyncInit'\nconst PLAYER_ID_PREFIX = 'facebook-player-'\n\nexport default class Facebook extends Component {\n static displayName = 'Facebook'\n static canPlay = canPlay.facebook\n static loopOnEnded = true\n callPlayer = callPlayer\n playerID = this.props.config.playerId || `${PLAYER_ID_PREFIX}${randomString()}`\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url, isReady) {\n if (isReady) {\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(FB => FB.XFBML.parse())\n return\n }\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(FB => {\n FB.init({\n appId: this.props.config.appId,\n xfbml: true,\n version: this.props.config.version\n })\n FB.Event.subscribe('xfbml.render', msg => {\n // Here we know the SDK has loaded, even if onReady/onPlay\n // is not called due to a video that cannot be embedded\n this.props.onLoaded()\n })\n FB.Event.subscribe('xfbml.ready', msg => {\n if (msg.type === 'video' && msg.id === this.playerID) {\n this.player = msg.instance\n this.player.subscribe('startedPlaying', this.props.onPlay)\n this.player.subscribe('paused', this.props.onPause)\n this.player.subscribe('finishedPlaying', this.props.onEnded)\n this.player.subscribe('startedBuffering', this.props.onBuffer)\n this.player.subscribe('finishedBuffering', this.props.onBufferEnd)\n this.player.subscribe('error', this.props.onError)\n if (this.props.muted) {\n this.callPlayer('mute')\n } else {\n this.callPlayer('unmute')\n }\n this.props.onReady()\n\n // For some reason Facebook have added `visibility: hidden`\n // to the iframe when autoplay fails, so here we set it back\n document.getElementById(this.playerID).querySelector('iframe').style.visibility = 'visible'\n }\n })\n })\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n // Nothing to do\n }\n\n seekTo (seconds) {\n this.callPlayer('seek', seconds)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction)\n }\n\n mute = () => {\n this.callPlayer('mute')\n }\n\n unmute = () => {\n this.callPlayer('unmute')\n }\n\n getDuration () {\n return this.callPlayer('getDuration')\n }\n\n getCurrentTime () {\n return this.callPlayer('getCurrentPosition')\n }\n\n getSecondsLoaded () {\n return null\n }\n\n render () {\n const { attributes } = this.props.config\n const style = {\n width: '100%',\n height: '100%'\n }\n return (\n \n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK } from '../utils'\nimport { canPlay, MATCH_URL_STREAMABLE } from '../patterns'\n\nconst SDK_URL = 'https://cdn.embed.ly/player-0.1.0.min.js'\nconst SDK_GLOBAL = 'playerjs'\n\nexport default class Streamable extends Component {\n static displayName = 'Streamable'\n static canPlay = canPlay.streamable\n callPlayer = callPlayer\n duration = null\n currentTime = null\n secondsLoaded = null\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url) {\n getSDK(SDK_URL, SDK_GLOBAL).then(playerjs => {\n if (!this.iframe) return\n this.player = new playerjs.Player(this.iframe)\n this.player.setLoop(this.props.loop)\n this.player.on('ready', this.props.onReady)\n this.player.on('play', this.props.onPlay)\n this.player.on('pause', this.props.onPause)\n this.player.on('seeked', this.props.onSeek)\n this.player.on('ended', this.props.onEnded)\n this.player.on('error', this.props.onError)\n this.player.on('timeupdate', ({ duration, seconds }) => {\n this.duration = duration\n this.currentTime = seconds\n })\n this.player.on('buffered', ({ percent }) => {\n if (this.duration) {\n this.secondsLoaded = this.duration * percent\n }\n })\n if (this.props.muted) {\n this.player.mute()\n }\n }, this.props.onError)\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n // Nothing to do\n }\n\n seekTo (seconds) {\n this.callPlayer('setCurrentTime', seconds)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction * 100)\n }\n\n setLoop (loop) {\n this.callPlayer('setLoop', loop)\n }\n\n mute = () => {\n this.callPlayer('mute')\n }\n\n unmute = () => {\n this.callPlayer('unmute')\n }\n\n getDuration () {\n return this.duration\n }\n\n getCurrentTime () {\n return this.currentTime\n }\n\n getSecondsLoaded () {\n return this.secondsLoaded\n }\n\n ref = iframe => {\n this.iframe = iframe\n }\n\n render () {\n const id = this.props.url.match(MATCH_URL_STREAMABLE)[1]\n const style = {\n width: '100%',\n height: '100%'\n }\n return (\n \n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK, randomString } from '../utils'\nimport { canPlay, MATCH_URL_WISTIA } from '../patterns'\n\nconst SDK_URL = 'https://fast.wistia.com/assets/external/E-v1.js'\nconst SDK_GLOBAL = 'Wistia'\nconst PLAYER_ID_PREFIX = 'wistia-player-'\n\nexport default class Wistia extends Component {\n static displayName = 'Wistia'\n static canPlay = canPlay.wistia\n static loopOnEnded = true\n callPlayer = callPlayer\n playerID = this.props.config.playerId || `${PLAYER_ID_PREFIX}${randomString()}`\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url) {\n const { playing, muted, controls, onReady, config, onError } = this.props\n getSDK(SDK_URL, SDK_GLOBAL).then(Wistia => {\n if (config.customControls) {\n config.customControls.forEach(control => Wistia.defineControl(control))\n }\n window._wq = window._wq || []\n window._wq.push({\n id: this.playerID,\n options: {\n autoPlay: playing,\n silentAutoPlay: 'allow',\n muted: muted,\n controlsVisibleOnLoad: controls,\n fullscreenButton: controls,\n playbar: controls,\n playbackRateControl: controls,\n qualityControl: controls,\n volumeControl: controls,\n settingsControl: controls,\n smallPlayButton: controls,\n ...config.options\n },\n onReady: player => {\n this.player = player\n this.unbind()\n this.player.bind('play', this.onPlay)\n this.player.bind('pause', this.onPause)\n this.player.bind('seek', this.onSeek)\n this.player.bind('end', this.onEnded)\n this.player.bind('playbackratechange', this.onPlaybackRateChange)\n onReady()\n }\n })\n }, onError)\n }\n\n unbind () {\n this.player.unbind('play', this.onPlay)\n this.player.unbind('pause', this.onPause)\n this.player.unbind('seek', this.onSeek)\n this.player.unbind('end', this.onEnded)\n this.player.unbind('playbackratechange', this.onPlaybackRateChange)\n }\n\n // Proxy methods to prevent listener leaks\n onPlay = (...args) => this.props.onPlay(...args)\n onPause = (...args) => this.props.onPause(...args)\n onSeek = (...args) => this.props.onSeek(...args)\n onEnded = (...args) => this.props.onEnded(...args)\n onPlaybackRateChange = (...args) => this.props.onPlaybackRateChange(...args)\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n this.unbind()\n this.callPlayer('remove')\n }\n\n seekTo (seconds) {\n this.callPlayer('time', seconds)\n }\n\n setVolume (fraction) {\n this.callPlayer('volume', fraction)\n }\n\n mute = () => {\n this.callPlayer('mute')\n }\n\n unmute = () => {\n this.callPlayer('unmute')\n }\n\n setPlaybackRate (rate) {\n this.callPlayer('playbackRate', rate)\n }\n\n getDuration () {\n return this.callPlayer('duration')\n }\n\n getCurrentTime () {\n return this.callPlayer('time')\n }\n\n getSecondsLoaded () {\n return null\n }\n\n render () {\n const { url } = this.props\n const videoID = url && url.match(MATCH_URL_WISTIA)[1]\n const className = `wistia_embed wistia_async_${videoID}`\n const style = {\n width: '100%',\n height: '100%'\n }\n return (\n
\n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK, parseStartTime, randomString } from '../utils'\nimport { canPlay, MATCH_URL_TWITCH_CHANNEL, MATCH_URL_TWITCH_VIDEO } from '../patterns'\n\nconst SDK_URL = 'https://player.twitch.tv/js/embed/v1.js'\nconst SDK_GLOBAL = 'Twitch'\nconst PLAYER_ID_PREFIX = 'twitch-player-'\n\nexport default class Twitch extends Component {\n static displayName = 'Twitch'\n static canPlay = canPlay.twitch\n static loopOnEnded = true\n callPlayer = callPlayer\n playerID = this.props.config.playerId || `${PLAYER_ID_PREFIX}${randomString()}`\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url, isReady) {\n const { playsinline, onError, config, controls } = this.props\n const isChannel = MATCH_URL_TWITCH_CHANNEL.test(url)\n const id = isChannel ? url.match(MATCH_URL_TWITCH_CHANNEL)[1] : url.match(MATCH_URL_TWITCH_VIDEO)[1]\n if (isReady) {\n if (isChannel) {\n this.player.setChannel(id)\n } else {\n this.player.setVideo('v' + id)\n }\n return\n }\n getSDK(SDK_URL, SDK_GLOBAL).then(Twitch => {\n this.player = new Twitch.Player(this.playerID, {\n video: isChannel ? '' : id,\n channel: isChannel ? id : '',\n height: '100%',\n width: '100%',\n playsinline: playsinline,\n autoplay: this.props.playing,\n muted: this.props.muted,\n // https://github.com/CookPete/react-player/issues/733#issuecomment-549085859\n controls: isChannel ? true : controls,\n time: parseStartTime(url),\n ...config.options\n })\n const { READY, PLAYING, PAUSE, ENDED, ONLINE, OFFLINE, SEEK } = Twitch.Player\n this.player.addEventListener(READY, this.props.onReady)\n this.player.addEventListener(PLAYING, this.props.onPlay)\n this.player.addEventListener(PAUSE, this.props.onPause)\n this.player.addEventListener(ENDED, this.props.onEnded)\n this.player.addEventListener(SEEK, this.props.onSeek)\n\n // Prevent weird isLoading behaviour when streams are offline\n this.player.addEventListener(ONLINE, this.props.onLoaded)\n this.player.addEventListener(OFFLINE, this.props.onLoaded)\n }, onError)\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n this.callPlayer('pause')\n }\n\n seekTo (seconds) {\n this.callPlayer('seek', seconds)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction)\n }\n\n mute = () => {\n this.callPlayer('setMuted', true)\n }\n\n unmute = () => {\n this.callPlayer('setMuted', false)\n }\n\n getDuration () {\n return this.callPlayer('getDuration')\n }\n\n getCurrentTime () {\n return this.callPlayer('getCurrentTime')\n }\n\n getSecondsLoaded () {\n return null\n }\n\n render () {\n const style = {\n width: '100%',\n height: '100%'\n }\n return (\n
\n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK, parseStartTime } from '../utils'\nimport { canPlay, MATCH_URL_DAILYMOTION } from '../patterns'\n\nconst SDK_URL = 'https://api.dmcdn.net/all.js'\nconst SDK_GLOBAL = 'DM'\nconst SDK_GLOBAL_READY = 'dmAsyncInit'\n\nexport default class DailyMotion extends Component {\n static displayName = 'DailyMotion'\n static canPlay = canPlay.dailymotion\n static loopOnEnded = true\n callPlayer = callPlayer\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url) {\n const { controls, config, onError, playing } = this.props\n const [, id] = url.match(MATCH_URL_DAILYMOTION)\n if (this.player) {\n this.player.load(id, {\n start: parseStartTime(url),\n autoplay: playing\n })\n return\n }\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, DM => DM.player).then(DM => {\n if (!this.container) return\n const Player = DM.player\n this.player = new Player(this.container, {\n width: '100%',\n height: '100%',\n video: id,\n params: {\n controls: controls,\n autoplay: this.props.playing,\n mute: this.props.muted,\n start: parseStartTime(url),\n origin: window.location.origin,\n ...config.params\n },\n events: {\n apiready: this.props.onReady,\n seeked: () => this.props.onSeek(this.player.currentTime),\n video_end: this.props.onEnded,\n durationchange: this.onDurationChange,\n pause: this.props.onPause,\n playing: this.props.onPlay,\n waiting: this.props.onBuffer,\n error: event => onError(event)\n }\n })\n }, onError)\n }\n\n onDurationChange = () => {\n const duration = this.getDuration()\n this.props.onDuration(duration)\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n // Nothing to do\n }\n\n seekTo (seconds) {\n this.callPlayer('seek', seconds)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction)\n }\n\n mute = () => {\n this.callPlayer('setMuted', true)\n }\n\n unmute = () => {\n this.callPlayer('setMuted', false)\n }\n\n getDuration () {\n return this.player.duration || null\n }\n\n getCurrentTime () {\n return this.player.currentTime\n }\n\n getSecondsLoaded () {\n return this.player.bufferedTime\n }\n\n ref = container => {\n this.container = container\n }\n\n render () {\n const { display } = this.props\n const style = {\n width: '100%',\n height: '100%',\n display\n }\n return (\n
\n
\n
\n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK, queryString } from '../utils'\nimport { canPlay, MATCH_URL_MIXCLOUD } from '../patterns'\n\nconst SDK_URL = 'https://widget.mixcloud.com/media/js/widgetApi.js'\nconst SDK_GLOBAL = 'Mixcloud'\n\nexport default class Mixcloud extends Component {\n static displayName = 'Mixcloud'\n static canPlay = canPlay.mixcloud\n static loopOnEnded = true\n callPlayer = callPlayer\n duration = null\n currentTime = null\n secondsLoaded = null\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url) {\n getSDK(SDK_URL, SDK_GLOBAL).then(Mixcloud => {\n this.player = Mixcloud.PlayerWidget(this.iframe)\n this.player.ready.then(() => {\n this.player.events.play.on(this.props.onPlay)\n this.player.events.pause.on(this.props.onPause)\n this.player.events.ended.on(this.props.onEnded)\n this.player.events.error.on(this.props.error)\n this.player.events.progress.on((seconds, duration) => {\n this.currentTime = seconds\n this.duration = duration\n })\n this.props.onReady()\n })\n }, this.props.onError)\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n // Nothing to do\n }\n\n seekTo (seconds) {\n this.callPlayer('seek', seconds)\n }\n\n setVolume (fraction) {\n // No volume support\n }\n\n mute = () => {\n // No volume support\n }\n\n unmute = () => {\n // No volume support\n }\n\n getDuration () {\n return this.duration\n }\n\n getCurrentTime () {\n return this.currentTime\n }\n\n getSecondsLoaded () {\n return null\n }\n\n ref = iframe => {\n this.iframe = iframe\n }\n\n render () {\n const { url, config } = this.props\n const id = url.match(MATCH_URL_MIXCLOUD)[1]\n const style = {\n width: '100%',\n height: '100%'\n }\n const query = queryString({\n ...config.options,\n feed: `/${id}/`\n })\n // We have to give the iframe a key here to prevent a\n // weird dialog appearing when loading a new track\n return (\n \n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK } from '../utils'\nimport { canPlay, MATCH_URL_VIDYARD } from '../patterns'\n\nconst SDK_URL = 'https://play.vidyard.com/embed/v4.js'\nconst SDK_GLOBAL = 'VidyardV4'\nconst SDK_GLOBAL_READY = 'onVidyardAPI'\n\nexport default class Vidyard extends Component {\n static displayName = 'Vidyard'\n static canPlay = canPlay.vidyard\n callPlayer = callPlayer\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url) {\n const { playing, config, onError, onDuration } = this.props\n const id = url && url.match(MATCH_URL_VIDYARD)[1]\n if (this.player) {\n this.stop()\n }\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(Vidyard => {\n if (!this.container) return\n Vidyard.api.addReadyListener((data, player) => {\n if (this.player) {\n return\n }\n this.player = player\n this.player.on('ready', this.props.onReady)\n this.player.on('play', this.props.onPlay)\n this.player.on('pause', this.props.onPause)\n this.player.on('seek', this.props.onSeek)\n this.player.on('playerComplete', this.props.onEnded)\n }, id)\n Vidyard.api.renderPlayer({\n uuid: id,\n container: this.container,\n autoplay: playing ? 1 : 0,\n ...config.options\n })\n Vidyard.api.getPlayerMetadata(id).then(meta => {\n this.duration = meta.length_in_seconds\n onDuration(meta.length_in_seconds)\n })\n }, onError)\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n window.VidyardV4.api.destroyPlayer(this.player)\n }\n\n seekTo (amount) {\n this.callPlayer('seek', amount)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction)\n }\n\n mute = () => {\n this.setVolume(0)\n }\n\n unmute = () => {\n if (this.props.volume !== null) {\n this.setVolume(this.props.volume)\n }\n }\n\n setPlaybackRate (rate) {\n this.callPlayer('setPlaybackSpeed', rate)\n }\n\n getDuration () {\n return this.duration\n }\n\n getCurrentTime () {\n return this.callPlayer('currentTime')\n }\n\n getSecondsLoaded () {\n return null\n }\n\n ref = container => {\n this.container = container\n }\n\n render () {\n const { display } = this.props\n const style = {\n width: '100%',\n height: '100%',\n display\n }\n return (\n
\n
\n
\n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK } from '../utils'\nimport { canPlay } from '../patterns'\n\nconst SDK_URL = 'https://cdn.embed.ly/player-0.1.0.min.js'\nconst SDK_GLOBAL = 'playerjs'\n\nexport default class Kaltura extends Component {\n static displayName = 'Kaltura'\n static canPlay = canPlay.kaltura\n callPlayer = callPlayer\n duration = null\n currentTime = null\n secondsLoaded = null\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url) {\n getSDK(SDK_URL, SDK_GLOBAL).then(playerjs => {\n if (!this.iframe) return\n this.player = new playerjs.Player(this.iframe)\n this.player.on('ready', () => {\n // An arbitrary timeout is required otherwise\n // the event listeners won’t work\n setTimeout(() => {\n this.player.isReady = true\n this.player.setLoop(this.props.loop)\n if (this.props.muted) {\n this.player.mute()\n }\n this.addListeners(this.player, this.props)\n this.props.onReady()\n }, 500)\n })\n }, this.props.onError)\n }\n\n addListeners (player, props) {\n player.on('play', props.onPlay)\n player.on('pause', props.onPause)\n player.on('ended', props.onEnded)\n player.on('error', props.onError)\n player.on('timeupdate', ({ duration, seconds }) => {\n this.duration = duration\n this.currentTime = seconds\n })\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n // Nothing to do\n }\n\n seekTo (seconds) {\n this.callPlayer('setCurrentTime', seconds)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction)\n }\n\n setLoop (loop) {\n this.callPlayer('setLoop', loop)\n }\n\n mute = () => {\n this.callPlayer('mute')\n }\n\n unmute = () => {\n this.callPlayer('unmute')\n }\n\n getDuration () {\n return this.duration\n }\n\n getCurrentTime () {\n return this.currentTime\n }\n\n getSecondsLoaded () {\n return this.secondsLoaded\n }\n\n ref = iframe => {\n this.iframe = iframe\n }\n\n render () {\n const style = {\n width: '100%',\n height: '100%'\n }\n return (\n \n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { getSDK, isMediaStream, supportsWebKitPresentationMode } from '../utils'\nimport { canPlay, AUDIO_EXTENSIONS, HLS_EXTENSIONS, DASH_EXTENSIONS, FLV_EXTENSIONS } from '../patterns'\n\nconst HAS_NAVIGATOR = typeof navigator !== 'undefined'\nconst IS_IPAD_PRO = HAS_NAVIGATOR && navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1\nconst IS_IOS = HAS_NAVIGATOR && (/iPad|iPhone|iPod/.test(navigator.userAgent) || IS_IPAD_PRO) && !window.MSStream\nconst IS_SAFARI = HAS_NAVIGATOR && (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) && !window.MSStream\nconst HLS_SDK_URL = 'https://cdn.jsdelivr.net/npm/hls.js@VERSION/dist/hls.min.js'\nconst HLS_GLOBAL = 'Hls'\nconst DASH_SDK_URL = 'https://cdnjs.cloudflare.com/ajax/libs/dashjs/VERSION/dash.all.min.js'\nconst DASH_GLOBAL = 'dashjs'\nconst FLV_SDK_URL = 'https://cdn.jsdelivr.net/npm/flv.js@VERSION/dist/flv.min.js'\nconst FLV_GLOBAL = 'flvjs'\nconst MATCH_DROPBOX_URL = /www\\.dropbox\\.com\\/.+/\nconst MATCH_CLOUDFLARE_STREAM = /https:\\/\\/watch\\.cloudflarestream\\.com\\/([a-z0-9]+)/\nconst REPLACE_CLOUDFLARE_STREAM = 'https://videodelivery.net/{id}/manifest/video.m3u8'\n\nexport default class FilePlayer extends Component {\n static displayName = 'FilePlayer'\n static canPlay = canPlay.file\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n this.addListeners(this.player)\n this.player.src = this.getSource(this.props.url) // Ensure src is set in strict mode\n if (IS_IOS) {\n this.player.load()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(prevProps)) {\n this.removeListeners(this.prevPlayer, prevProps.url)\n this.addListeners(this.player)\n }\n\n if (\n this.props.url !== prevProps.url &&\n !isMediaStream(this.props.url)\n ) {\n this.player.srcObject = null\n }\n }\n\n componentWillUnmount () {\n this.player.src = ''\n this.removeListeners(this.player)\n if (this.hls) {\n this.hls.destroy()\n }\n }\n\n addListeners (player) {\n const { url, playsinline } = this.props\n player.addEventListener('play', this.onPlay)\n player.addEventListener('waiting', this.onBuffer)\n player.addEventListener('playing', this.onBufferEnd)\n player.addEventListener('pause', this.onPause)\n player.addEventListener('seeked', this.onSeek)\n player.addEventListener('ended', this.onEnded)\n player.addEventListener('error', this.onError)\n player.addEventListener('ratechange', this.onPlayBackRateChange)\n player.addEventListener('enterpictureinpicture', this.onEnablePIP)\n player.addEventListener('leavepictureinpicture', this.onDisablePIP)\n player.addEventListener('webkitpresentationmodechanged', this.onPresentationModeChange)\n if (!this.shouldUseHLS(url)) { // onReady is handled by hls.js\n player.addEventListener('canplay', this.onReady)\n }\n if (playsinline) {\n player.setAttribute('playsinline', '')\n player.setAttribute('webkit-playsinline', '')\n player.setAttribute('x5-playsinline', '')\n }\n }\n\n removeListeners (player, url) {\n player.removeEventListener('canplay', this.onReady)\n player.removeEventListener('play', this.onPlay)\n player.removeEventListener('waiting', this.onBuffer)\n player.removeEventListener('playing', this.onBufferEnd)\n player.removeEventListener('pause', this.onPause)\n player.removeEventListener('seeked', this.onSeek)\n player.removeEventListener('ended', this.onEnded)\n player.removeEventListener('error', this.onError)\n player.removeEventListener('ratechange', this.onPlayBackRateChange)\n player.removeEventListener('enterpictureinpicture', this.onEnablePIP)\n player.removeEventListener('leavepictureinpicture', this.onDisablePIP)\n player.removeEventListener('webkitpresentationmodechanged', this.onPresentationModeChange)\n if (!this.shouldUseHLS(url)) { // onReady is handled by hls.js\n player.removeEventListener('canplay', this.onReady)\n }\n }\n\n // Proxy methods to prevent listener leaks\n onReady = (...args) => this.props.onReady(...args)\n onPlay = (...args) => this.props.onPlay(...args)\n onBuffer = (...args) => this.props.onBuffer(...args)\n onBufferEnd = (...args) => this.props.onBufferEnd(...args)\n onPause = (...args) => this.props.onPause(...args)\n onEnded = (...args) => this.props.onEnded(...args)\n onError = (...args) => this.props.onError(...args)\n onPlayBackRateChange = (event) => this.props.onPlaybackRateChange(event.target.playbackRate)\n onEnablePIP = (...args) => this.props.onEnablePIP(...args)\n\n onDisablePIP = e => {\n const { onDisablePIP, playing } = this.props\n onDisablePIP(e)\n if (playing) {\n this.play()\n }\n }\n\n onPresentationModeChange = e => {\n if (this.player && supportsWebKitPresentationMode(this.player)) {\n const { webkitPresentationMode } = this.player\n if (webkitPresentationMode === 'picture-in-picture') {\n this.onEnablePIP(e)\n } else if (webkitPresentationMode === 'inline') {\n this.onDisablePIP(e)\n }\n }\n }\n\n onSeek = e => {\n this.props.onSeek(e.target.currentTime)\n }\n\n shouldUseAudio (props) {\n if (props.config.forceVideo) {\n return false\n }\n if (props.config.attributes.poster) {\n return false // Use