@micromag/viewer-build 0.2.349 → 0.2.352

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/build/asset-manifest.json +44 -46
  2. package/build/index.html +1 -1
  3. package/build/static/css/main.84dd7324.chunk.css +2 -0
  4. package/build/static/css/main.84dd7324.chunk.css.map +1 -0
  5. package/build/static/js/{0.f79b9ef3.chunk.js → 0.e9d808b4.chunk.js} +2 -2
  6. package/build/static/js/{0.f79b9ef3.chunk.js.map → 0.e9d808b4.chunk.js.map} +1 -1
  7. package/build/static/js/{1.dc8210ea.chunk.js → 1.10b11229.chunk.js} +2 -2
  8. package/build/static/js/{1.dc8210ea.chunk.js.map → 1.10b11229.chunk.js.map} +1 -1
  9. package/build/static/js/{12.6fa9cc23.chunk.js → 10.5043cd3c.chunk.js} +2 -2
  10. package/build/static/js/{12.6fa9cc23.chunk.js.map → 10.5043cd3c.chunk.js.map} +1 -1
  11. package/build/static/js/{13.f18a2ee1.chunk.js → 11.505258e4.chunk.js} +2 -2
  12. package/build/static/js/{13.f18a2ee1.chunk.js.map → 11.505258e4.chunk.js.map} +1 -1
  13. package/build/static/js/{14.06caff0d.chunk.js → 12.db5d747d.chunk.js} +2 -2
  14. package/build/static/js/{14.06caff0d.chunk.js.map → 12.db5d747d.chunk.js.map} +1 -1
  15. package/build/static/js/{15.c10bab99.chunk.js → 13.eee02164.chunk.js} +2 -2
  16. package/build/static/js/{15.c10bab99.chunk.js.map → 13.eee02164.chunk.js.map} +1 -1
  17. package/build/static/js/{16.362ba203.chunk.js → 14.545de4b8.chunk.js} +2 -2
  18. package/build/static/js/{16.362ba203.chunk.js.map → 14.545de4b8.chunk.js.map} +1 -1
  19. package/build/static/js/15.bac0802a.chunk.js +2 -0
  20. package/build/static/js/15.bac0802a.chunk.js.map +1 -0
  21. package/build/static/js/{17.a3771ccd.chunk.js → 16.04903139.chunk.js} +2 -2
  22. package/build/static/js/{17.a3771ccd.chunk.js.map → 16.04903139.chunk.js.map} +1 -1
  23. package/build/static/js/17.ce3338f7.chunk.js +2 -0
  24. package/build/static/js/{18.d3cd761e.chunk.js.map → 17.ce3338f7.chunk.js.map} +1 -1
  25. package/build/static/js/{2.0b2dbffa.chunk.js → 2.1c01c038.chunk.js} +2 -2
  26. package/build/static/js/{2.0b2dbffa.chunk.js.map → 2.1c01c038.chunk.js.map} +1 -1
  27. package/build/static/js/5.b1de04f7.chunk.js +3 -0
  28. package/build/static/js/{5.35e5a74b.chunk.js.LICENSE.txt → 5.b1de04f7.chunk.js.LICENSE.txt} +0 -7
  29. package/build/static/js/5.b1de04f7.chunk.js.map +1 -0
  30. package/build/static/js/{6.07a76264.chunk.js → 6.cd3776b3.chunk.js} +3 -3
  31. package/build/static/js/{6.07a76264.chunk.js.LICENSE.txt → 6.cd3776b3.chunk.js.LICENSE.txt} +0 -0
  32. package/build/static/js/{6.07a76264.chunk.js.map → 6.cd3776b3.chunk.js.map} +1 -1
  33. package/build/static/js/{9.a413d252.chunk.js → 7.fbca3b10.chunk.js} +2 -2
  34. package/build/static/js/{9.a413d252.chunk.js.map → 7.fbca3b10.chunk.js.map} +1 -1
  35. package/build/static/js/8.33d32e6f.chunk.js +2 -0
  36. package/build/static/js/8.33d32e6f.chunk.js.map +1 -0
  37. package/build/static/js/9.294af4b0.chunk.js +2 -0
  38. package/build/static/js/9.294af4b0.chunk.js.map +1 -0
  39. package/build/static/js/main.ac6010b6.chunk.js +2 -0
  40. package/build/static/js/main.ac6010b6.chunk.js.map +1 -0
  41. package/build/static/js/runtime-main.7e86a7b4.js +2 -0
  42. package/build/static/js/runtime-main.7e86a7b4.js.map +1 -0
  43. package/package.json +7 -7
  44. package/build/static/css/main.143562a2.chunk.css +0 -2
  45. package/build/static/css/main.143562a2.chunk.css.map +0 -1
  46. package/build/static/js/10.ab3fb08c.chunk.js +0 -2
  47. package/build/static/js/10.ab3fb08c.chunk.js.map +0 -1
  48. package/build/static/js/11.bb0e7bef.chunk.js +0 -2
  49. package/build/static/js/11.bb0e7bef.chunk.js.map +0 -1
  50. package/build/static/js/18.d3cd761e.chunk.js +0 -2
  51. package/build/static/js/5.35e5a74b.chunk.js +0 -3
  52. package/build/static/js/5.35e5a74b.chunk.js.map +0 -1
  53. package/build/static/js/7.57910475.chunk.js +0 -2
  54. package/build/static/js/7.57910475.chunk.js.map +0 -1
  55. package/build/static/js/8.f6bad856.chunk.js +0 -2
  56. package/build/static/js/8.f6bad856.chunk.js.map +0 -1
  57. package/build/static/js/main.1947d720.chunk.js +0 -2
  58. package/build/static/js/main.1947d720.chunk.js.map +0 -1
  59. package/build/static/js/runtime-main.e1c8234d.js +0 -2
  60. package/build/static/js/runtime-main.e1c8234d.js.map +0 -1
@@ -1,2 +1,2 @@
1
- (this["webpackJsonp@micromag/viewer-build"]=this["webpackJsonp@micromag/viewer-build"]||[]).push([[9],{579:function(e,t,i){var o=i(37).h;e.exports=function(e){return o("svg",{"aria-hidden":"true",focusable:"false",fill:"#0097DC",width:"66",height:"55",viewBox:"0 0 66 55"},o("path",{d:"M57.3 8.433c4.59 0 8.1 3.51 8.1 8.1v29.7c0 4.59-3.51 8.1-8.1 8.1H8.7c-4.59 0-8.1-3.51-8.1-8.1v-29.7c0-4.59 3.51-8.1 8.1-8.1h9.45l4.59-7.02c.54-.54 1.35-1.08 2.16-1.08h16.2c.81 0 1.62.54 2.16 1.08l4.59 7.02h9.45zM33 14.64c-8.62 0-15.393 6.773-15.393 15.393 0 8.62 6.773 15.393 15.393 15.393 8.62 0 15.393-6.773 15.393-15.393 0-8.62-6.773-15.393-15.393-15.393zM33 40c-5.648 0-9.966-4.319-9.966-9.967 0-5.647 4.318-9.966 9.966-9.966s9.966 4.319 9.966 9.966C42.966 35.681 38.648 40 33 40z",fillRule:"evenodd"}))}},630:function(e,t){var i={"audio/mp3":"mp3","audio/mp4":"mp4","audio/ogg":"ogg","audio/webm":"webm","image/gif":"gif","image/heic":"heic","image/heif":"heif","image/jpeg":"jpg","image/png":"png","image/svg+xml":"svg","video/mp4":"mp4","video/ogg":"ogv","video/quicktime":"mov","video/webm":"webm","video/x-matroska":"mkv","video/x-msvideo":"avi"};e.exports=function(e){return e=e.replace(/;.*$/,""),i[e]||null}},631:function(e,t,i){var o=i(290);e.exports=function(e,t,i){return e.toBlob?new Promise((function(o){e.toBlob(o,t,i)})):Promise.resolve().then((function(){return o(e.toDataURL(t,i),{})}))}},632:function(e,t){e.exports=function(){return"function"===typeof MediaRecorder&&!!MediaRecorder.prototype&&"function"===typeof MediaRecorder.prototype.start}},633:function(e,t,i){function o(){return o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(e[o]=i[o])}return e},o.apply(this,arguments)}function r(e,t){return r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},r(e,t)}var n=i(37),s=n.h,a=n.Component,c=i(634),d=i(635),u=i(636),p=i(638),l=i(639),h=i(640);function g(e,t){return-1!==e.indexOf(t)}var m=function(e){var t,i;function n(){return e.apply(this,arguments)||this}i=e,(t=n).prototype=Object.create(i.prototype),t.prototype.constructor=t,r(t,i);var a=n.prototype;return a.componentDidMount=function(){(0,this.props.onFocus)()},a.componentWillUnmount=function(){(0,this.props.onStop)()},a.render=function(){var e=this,t=this.props,i=t.src,r=t.recordedVideo,n=t.recording,a=t.modes,m=t.supportsRecording,f=t.videoSources,v=t.showVideoSourceDropdown,y=t.showRecordingLength,b=t.onSubmit,S=t.i18n,w=t.mirror,R=t.onSnapshot,C=t.onStartRecording,P=t.onStopRecording,M=t.onDiscardRecordedVideo,k=t.recordingLengthSeconds,x=!!r,I=!x&&m&&(g(a,"video-only")||g(a,"audio-only")||g(a,"video-audio")),D=!x&&g(a,"picture"),V=m&&y,T=v&&f&&f.length>1,L={playsinline:!0};return r?(L.muted=!1,L.controls=!0,L.src=r,this.videoElement&&(this.videoElement.srcObject=void 0)):(L.muted=!0,L.autoplay=!0,L.srcObject=i),s("div",{className:"uppy uppy-Webcam-container"},s("div",{className:"uppy-Webcam-videoContainer"},s("video",o({ref:function(t){return e.videoElement=t},className:"uppy-Webcam-video "+(w?"uppy-Webcam-video--mirrored":"")},L))),s("div",{className:"uppy-Webcam-footer"},s("div",{className:"uppy-Webcam-videoSourceContainer"},T?p(this.props):null),s("div",{className:"uppy-Webcam-buttonContainer"},D&&s(c,{onSnapshot:R,i18n:S}),I&&s(d,{recording:n,onStartRecording:C,onStopRecording:P,i18n:S}),x&&s(l,{onSubmit:b,i18n:S}),x&&s(h,{onDiscard:M,i18n:S})),V&&s("div",{className:"uppy-Webcam-recordingLength"},s(u,{recordingLengthSeconds:k,i18n:S}))))},n}(a);e.exports=m},634:function(e,t,i){var o=i(37).h,r=i(579);e.exports=function(e){var t=e.onSnapshot,i=e.i18n;return o("button",{className:"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--picture",type:"button",title:i("takePicture"),"aria-label":i("takePicture"),onClick:t,"data-uppy-super-focusable":!0},r())}},635:function(e,t,i){var o=i(37).h;e.exports=function(e){var t=e.recording,i=e.onStartRecording,r=e.onStopRecording,n=e.i18n;return t?o("button",{className:"uppy-u-reset uppy-c-btn uppy-Webcam-button",type:"button",title:n("stopRecording"),"aria-label":n("stopRecording"),onClick:r,"data-uppy-super-focusable":!0},o("svg",{"aria-hidden":"true",focusable:"false",className:"uppy-c-icon",width:"100",height:"100",viewBox:"0 0 100 100"},o("rect",{x:"15",y:"15",width:"70",height:"70"}))):o("button",{className:"uppy-u-reset uppy-c-btn uppy-Webcam-button",type:"button",title:n("startRecording"),"aria-label":n("startRecording"),onClick:i,"data-uppy-super-focusable":!0},o("svg",{"aria-hidden":"true",focusable:"false",className:"uppy-c-icon",width:"100",height:"100",viewBox:"0 0 100 100"},o("circle",{cx:"50",cy:"50",r:"40"})))}},636:function(e,t,i){var o=i(37).h,r=i(637);e.exports=function(e){var t=e.recordingLengthSeconds,i=e.i18n,n=r(t);return o("span",{"aria-label":i("recordingLength",{recording_length:n})},n)}},637:function(e,t){e.exports=function(e){return Math.floor(e/60)+":"+String(e%60).padStart(2,0)}},638:function(e,t,i){var o=i(37).h;e.exports=function(e){var t=e.currentDeviceId,i=e.videoSources,r=e.onChangeVideoSource;return o("div",{className:"uppy-Webcam-videoSource"},o("select",{className:"uppy-u-reset uppy-Webcam-videoSource-select",onChange:function(e){r(e.target.value)}},i.map((function(e){return o("option",{key:e.deviceId,value:e.deviceId,selected:e.deviceId===t},e.label)}))))}},639:function(e,t,i){var o=i(37).h;e.exports=function(e){var t=e.onSubmit,i=e.i18n;return o("button",{className:"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--submit",type:"button",title:i("submitRecordedFile"),"aria-label":i("submitRecordedFile"),onClick:t,"data-uppy-super-focusable":!0},o("svg",{width:"12",height:"9",viewBox:"0 0 12 9",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",className:"uppy-c-icon"},o("path",{fill:"#fff",fillRule:"nonzero",d:"M10.66 0L12 1.31 4.136 9 0 4.956l1.34-1.31L4.136 6.38z"})))}},640:function(e,t,i){var o=i(37).h;e.exports=function(e){var t=e.onDiscard,i=e.i18n;return o("button",{className:"uppy-u-reset uppy-c-btn uppy-Webcam-button",type:"button",title:i("discardRecordedFile"),"aria-label":i("discardRecordedFile"),onClick:t,"data-uppy-super-focusable":!0},o("svg",{width:"13",height:"13",viewBox:"0 0 13 13",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",className:"uppy-c-icon"},o("g",{fill:"#FFF",fillRule:"evenodd"},o("path",{d:"M.496 11.367L11.103.76l1.414 1.414L1.911 12.781z"}),o("path",{d:"M11.104 12.782L.497 2.175 1.911.76l10.607 10.606z"}))))}},641:function(e,t,i){var o=i(37).h;e.exports=function(e){return o("div",{className:"uppy-Webcam-permissons"},o("div",{className:"uppy-Webcam-permissonsIcon"},e.icon()),o("h1",{className:"uppy-Webcam-title"},e.hasCamera?e.i18n("allowAccessTitle"):e.i18n("noCameraTitle")),o("p",null,e.hasCamera?e.i18n("allowAccessDescription"):e.i18n("noCameraDescription")))}},667:function(e,t,i){var o,r;function n(){return n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(e[o]=i[o])}return e},n.apply(this,arguments)}function s(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}var c=i(37).h,d=i(75).Plugin,u=i(93),p=i(630),l=i(289),h=i(631),g=i(632),m=i(579),f=i(633),v=i(641);function y(e){return"."===e[0]?l[e.slice(1)]:e}function b(e){return/^video\/[^*]+$/.test(e)}function S(e){return/^image\/[^*]+$/.test(e)}e.exports=(r=o=function(e){var t,i;function o(t,i){var o;(o=e.call(this,t,i)||this).mediaDevices=function(){if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia)return navigator.mediaDevices;var e=navigator.mozGetUserMedia||navigator.webkitGetUserMedia;return e?{getUserMedia:function(t){return new Promise((function(i,o){e.call(navigator,t,i,o)}))}}:null}(),o.supportsUserMedia=!!o.mediaDevices,o.protocol=location.protocol.match(/https/i)?"https":"http",o.id=o.opts.id||"Webcam",o.title=o.opts.title||"Camera",o.type="acquirer",o.capturedMediaFile=null,o.icon=function(){return c("svg",{"aria-hidden":"true",focusable:"false",width:"32",height:"32",viewBox:"0 0 32 32"},c("g",{fill:"none",fillRule:"evenodd"},c("rect",{className:"uppy-ProviderIconBg",fill:"#03BFEF",width:"32",height:"32",rx:"16"}),c("path",{d:"M22 11c1.133 0 2 .867 2 2v7.333c0 1.134-.867 2-2 2H10c-1.133 0-2-.866-2-2V13c0-1.133.867-2 2-2h2.333l1.134-1.733C13.6 9.133 13.8 9 14 9h4c.2 0 .4.133.533.267L19.667 11H22zm-6 1.533a3.764 3.764 0 0 0-3.8 3.8c0 2.129 1.672 3.801 3.8 3.801s3.8-1.672 3.8-3.8c0-2.13-1.672-3.801-3.8-3.801zm0 6.261c-1.395 0-2.46-1.066-2.46-2.46 0-1.395 1.065-2.461 2.46-2.461s2.46 1.066 2.46 2.46c0 1.395-1.065 2.461-2.46 2.461z",fill:"#FFF",fillRule:"nonzero"})))},o.defaultLocale={strings:{smile:"Smile!",takePicture:"Take a picture",startRecording:"Begin video recording",stopRecording:"Stop video recording",allowAccessTitle:"Please allow access to your camera",allowAccessDescription:"In order to take pictures or record video with your camera, please allow camera access for this site.",noCameraTitle:"Camera Not Available",noCameraDescription:"In order to take pictures or record video, please connect a camera device",recordingStoppedMaxSize:"Recording stopped because the file size is about to exceed the limit",recordingLength:"Recording length %{recording_length}",submitRecordedFile:"Submit recorded file",discardRecordedFile:"Discard recorded file"}};var r={onBeforeSnapshot:function(){return Promise.resolve()},countdown:!1,modes:["video-audio","video-only","audio-only","picture"],mirror:!0,showVideoSourceDropdown:!1,facingMode:"user",preferredImageMimeType:null,preferredVideoMimeType:null,showRecordingLength:!1};return o.opts=n({},r,i),o.i18nInit(),o.install=o.install.bind(s(o)),o.setPluginState=o.setPluginState.bind(s(o)),o.render=o.render.bind(s(o)),o.start=o.start.bind(s(o)),o.stop=o.stop.bind(s(o)),o.takeSnapshot=o.takeSnapshot.bind(s(o)),o.startRecording=o.startRecording.bind(s(o)),o.stopRecording=o.stopRecording.bind(s(o)),o.discardRecordedVideo=o.discardRecordedVideo.bind(s(o)),o.submit=o.submit.bind(s(o)),o.oneTwoThreeSmile=o.oneTwoThreeSmile.bind(s(o)),o.focus=o.focus.bind(s(o)),o.changeVideoSource=o.changeVideoSource.bind(s(o)),o.webcamActive=!1,o.opts.countdown&&(o.opts.onBeforeSnapshot=o.oneTwoThreeSmile),o.setPluginState({hasCamera:!1,cameraReady:!1,cameraError:null,recordingLengthSeconds:0,videoSources:[],currentDeviceId:null}),o}i=e,(t=o).prototype=Object.create(i.prototype),t.prototype.constructor=t,a(t,i);var r=o.prototype;return r.setOptions=function(t){e.prototype.setOptions.call(this,n({},t,{videoConstraints:n({},this.opts.videoConstraints,null==t?void 0:t.videoConstraints)})),this.i18nInit()},r.i18nInit=function(){this.translator=new u([this.defaultLocale,this.uppy.locale,this.opts.locale]),this.i18n=this.translator.translate.bind(this.translator),this.i18nArray=this.translator.translateArray.bind(this.translator),this.setPluginState()},r.hasCameraCheck=function(){return this.mediaDevices?this.mediaDevices.enumerateDevices().then((function(e){return e.some((function(e){return"videoinput"===e.kind}))})):Promise.resolve(!1)},r.isAudioOnly=function(){return 1===this.opts.modes.length&&"audio-only"===this.opts.modes[0]},r.getConstraints=function(e){var t;void 0===e&&(e=null);var i=-1!==this.opts.modes.indexOf("video-audio")||-1!==this.opts.modes.indexOf("audio-only"),o=!this.isAudioOnly()&&(-1!==this.opts.modes.indexOf("video-audio")||-1!==this.opts.modes.indexOf("video-only")||-1!==this.opts.modes.indexOf("picture")),r=n({},null!=(t=this.opts.videoConstraints)?t:{facingMode:this.opts.facingMode},e?{deviceId:e,facingMode:null}:{});return{audio:i,video:!!o&&r}},r.start=function(e){var t=this;if(void 0===e&&(e=null),!this.supportsUserMedia)return Promise.reject(new Error("Webcam access not supported"));this.webcamActive=!0,this.opts.mirror=!0;var i=this.getConstraints(e&&e.deviceId?e.deviceId:null);this.hasCameraCheck().then((function(o){return t.setPluginState({hasCamera:o}),t.mediaDevices.getUserMedia(i).then((function(i){t.stream=i;var o=null,r=t.isAudioOnly()?i.getAudioTracks():i.getVideoTracks();e&&e.deviceId?r.forEach((function(t){t.getSettings().deviceId===e.deviceId&&(o=t.getSettings().deviceId)})):o=r[0].getSettings().deviceId,t.updateVideoSources(),t.setPluginState({currentDeviceId:o,cameraReady:!0})})).catch((function(e){t.setPluginState({cameraReady:!1,cameraError:e}),t.uppy.info(e.message,"error")}))}))},r.getMediaRecorderOptions=function(){var e={};if(MediaRecorder.isTypeSupported){var t=this.uppy.opts.restrictions,i=[];this.opts.preferredVideoMimeType?i=[this.opts.preferredVideoMimeType]:t.allowedFileTypes&&(i=t.allowedFileTypes.map(y).filter(b));var o=i.filter((function(e){return MediaRecorder.isTypeSupported(e)&&p(e)}));o.length>0&&(e.mimeType=o[0])}return e},r.startRecording=function(){var e=this;this.recorder=new MediaRecorder(this.stream,this.getMediaRecorderOptions()),this.recordingChunks=[];var t=!1;this.recorder.addEventListener("dataavailable",(function(i){e.recordingChunks.push(i.data);var o=e.uppy.opts.restrictions;if(e.recordingChunks.length>1&&null!=o.maxFileSize&&!t){var r=e.recordingChunks.reduce((function(e,t){return e+t.size}),0),n=3*((r-e.recordingChunks[0].size)/(e.recordingChunks.length-1));r>Math.max(0,o.maxFileSize-n)&&(t=!0,e.uppy.info(e.i18n("recordingStoppedMaxSize"),"warning",4e3),e.stopRecording())}})),this.recorder.start(500),this.opts.showRecordingLength&&(this.recordingLengthTimer=setInterval((function(){var t=e.getPluginState().recordingLengthSeconds;e.setPluginState({recordingLengthSeconds:t+1})}),1e3)),this.setPluginState({isRecording:!0})},r.stopRecording=function(){var e=this;return new Promise((function(t){e.recorder.addEventListener("stop",(function(){t()})),e.recorder.stop(),e.opts.showRecordingLength&&(clearInterval(e.recordingLengthTimer),e.setPluginState({recordingLengthSeconds:0}))})).then((function(){return e.setPluginState({isRecording:!1}),e.getVideo()})).then((function(t){try{e.capturedMediaFile=t,e.setPluginState({recordedVideo:URL.createObjectURL(t.data)}),e.opts.mirror=!1}catch(i){i.isRestriction||e.uppy.log(i)}})).then((function(){e.recordingChunks=null,e.recorder=null}),(function(t){throw e.recordingChunks=null,e.recorder=null,t}))},r.discardRecordedVideo=function(){this.setPluginState({recordedVideo:null}),this.opts.mirror=!0,this.capturedMediaFile=null},r.submit=function(){try{this.capturedMediaFile&&this.uppy.addFile(this.capturedMediaFile)}catch(e){e.isRestriction||this.uppy.log(e,"error")}},r.stop=function(){this.stream&&(this.stream.getAudioTracks().forEach((function(e){e.stop()})),this.stream.getVideoTracks().forEach((function(e){e.stop()}))),this.webcamActive=!1,this.stream=null,this.setPluginState({recordedVideo:null})},r.getVideoElement=function(){return this.el.querySelector(".uppy-Webcam-video")},r.oneTwoThreeSmile=function(){var e=this;return new Promise((function(t,i){var o=e.opts.countdown,r=setInterval((function(){if(!e.webcamActive)return clearInterval(r),e.captureInProgress=!1,i(new Error("Webcam is not active"));o>0?(e.uppy.info(o+"...","warning",800),o--):(clearInterval(r),e.uppy.info(e.i18n("smile"),"success",1500),setTimeout((function(){return t()}),1500))}),1e3)}))},r.takeSnapshot=function(){var e=this;this.captureInProgress||(this.captureInProgress=!0,this.opts.onBeforeSnapshot().catch((function(t){var i="object"===typeof t?t.message:t;return e.uppy.info(i,"error",5e3),Promise.reject(new Error("onBeforeSnapshot: "+i))})).then((function(){return e.getImage()})).then((function(t){e.captureInProgress=!1;try{e.uppy.addFile(t)}catch(i){i.isRestriction||e.uppy.log(i)}}),(function(t){throw e.captureInProgress=!1,t})))},r.getImage=function(){var e=this,t=this.getVideoElement();if(!t)return Promise.reject(new Error("No video element found, likely due to the Webcam tab being closed."));var i=t.videoWidth,o=t.videoHeight,r=document.createElement("canvas");r.width=i,r.height=o,r.getContext("2d").drawImage(t,0,0);var n=this.uppy.opts.restrictions,s=[];this.opts.preferredImageMimeType?s=[this.opts.preferredImageMimeType]:n.allowedFileTypes&&(s=n.allowedFileTypes.map(y).filter(S));var a=s[0]||"image/jpeg",c=p(a)||"jpg",d="cam-"+Date.now()+"."+c;return h(r,a).then((function(t){return{source:e.id,name:d,data:new Blob([t],{type:a}),type:a}}))},r.getVideo=function(){var e=this.recordingChunks.find((function(e){var t;return(null==(t=e.type)?void 0:t.length)>0})).type,t=p(e);if(!t)return Promise.reject(new Error('Could not retrieve recording: Unsupported media type "'+e+'"'));var i="webcam-"+Date.now()+"."+t,o=new Blob(this.recordingChunks,{type:e}),r={source:this.id,name:i,data:new Blob([o],{type:e}),type:e};return Promise.resolve(r)},r.focus=function(){var e=this;this.opts.countdown&&setTimeout((function(){e.uppy.info(e.i18n("smile"),"success",1500)}),1e3)},r.changeVideoSource=function(e){this.stop(),this.start({deviceId:e})},r.updateVideoSources=function(){var e=this;this.mediaDevices.enumerateDevices().then((function(t){e.setPluginState({videoSources:t.filter((function(e){return"videoinput"===e.kind}))})}))},r.render=function(){this.webcamActive||this.start();var e=this.getPluginState();return e.cameraReady&&e.hasCamera?c(f,n({},e,{onChangeVideoSource:this.changeVideoSource,onSnapshot:this.takeSnapshot,onStartRecording:this.startRecording,onStopRecording:this.stopRecording,onDiscardRecordedVideo:this.discardRecordedVideo,onSubmit:this.submit,onFocus:this.focus,onStop:this.stop,i18n:this.i18n,modes:this.opts.modes,showRecordingLength:this.opts.showRecordingLength,showVideoSourceDropdown:this.opts.showVideoSourceDropdown,supportsRecording:g(),recording:e.isRecording,mirror:this.opts.mirror,src:this.stream})):c(v,{icon:m,i18n:this.i18n,hasCamera:e.hasCamera})},r.install=function(){var e=this;this.setPluginState({cameraReady:!1,recordingLengthSeconds:0});var t=this.opts.target;t&&this.mount(t,this),this.mediaDevices&&(this.updateVideoSources(),this.mediaDevices.ondevicechange=function(){if(e.updateVideoSources(),e.stream){var t=!0,i=e.getPluginState(),o=i.videoSources,r=i.currentDeviceId;o.forEach((function(e){r===e.deviceId&&(t=!1)})),t&&(e.stop(),e.start())}})},r.uninstall=function(){this.stream&&this.stop(),this.unmount()},o}(d),o.VERSION="1.8.13",r)}}]);
2
- //# sourceMappingURL=9.a413d252.chunk.js.map
1
+ (this["webpackJsonp@micromag/viewer-build"]=this["webpackJsonp@micromag/viewer-build"]||[]).push([[7],{467:function(e,t,i){var o=i(21).h;e.exports=function(e){return o("svg",{"aria-hidden":"true",focusable:"false",fill:"#0097DC",width:"66",height:"55",viewBox:"0 0 66 55"},o("path",{d:"M57.3 8.433c4.59 0 8.1 3.51 8.1 8.1v29.7c0 4.59-3.51 8.1-8.1 8.1H8.7c-4.59 0-8.1-3.51-8.1-8.1v-29.7c0-4.59 3.51-8.1 8.1-8.1h9.45l4.59-7.02c.54-.54 1.35-1.08 2.16-1.08h16.2c.81 0 1.62.54 2.16 1.08l4.59 7.02h9.45zM33 14.64c-8.62 0-15.393 6.773-15.393 15.393 0 8.62 6.773 15.393 15.393 15.393 8.62 0 15.393-6.773 15.393-15.393 0-8.62-6.773-15.393-15.393-15.393zM33 40c-5.648 0-9.966-4.319-9.966-9.967 0-5.647 4.318-9.966 9.966-9.966s9.966 4.319 9.966 9.966C42.966 35.681 38.648 40 33 40z",fillRule:"evenodd"}))}},517:function(e,t){var i={"audio/mp3":"mp3","audio/mp4":"mp4","audio/ogg":"ogg","audio/webm":"webm","image/gif":"gif","image/heic":"heic","image/heif":"heif","image/jpeg":"jpg","image/png":"png","image/svg+xml":"svg","video/mp4":"mp4","video/ogg":"ogv","video/quicktime":"mov","video/webm":"webm","video/x-matroska":"mkv","video/x-msvideo":"avi"};e.exports=function(e){return e=e.replace(/;.*$/,""),i[e]||null}},518:function(e,t,i){var o=i(222);e.exports=function(e,t,i){return e.toBlob?new Promise((function(o){e.toBlob(o,t,i)})):Promise.resolve().then((function(){return o(e.toDataURL(t,i),{})}))}},519:function(e,t){e.exports=function(){return"function"===typeof MediaRecorder&&!!MediaRecorder.prototype&&"function"===typeof MediaRecorder.prototype.start}},520:function(e,t,i){function o(){return o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(e[o]=i[o])}return e},o.apply(this,arguments)}function r(e,t){return r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},r(e,t)}var n=i(21),s=n.h,a=n.Component,c=i(521),d=i(522),u=i(523),p=i(525),l=i(526),h=i(527);function g(e,t){return-1!==e.indexOf(t)}var m=function(e){var t,i;function n(){return e.apply(this,arguments)||this}i=e,(t=n).prototype=Object.create(i.prototype),t.prototype.constructor=t,r(t,i);var a=n.prototype;return a.componentDidMount=function(){(0,this.props.onFocus)()},a.componentWillUnmount=function(){(0,this.props.onStop)()},a.render=function(){var e=this,t=this.props,i=t.src,r=t.recordedVideo,n=t.recording,a=t.modes,m=t.supportsRecording,f=t.videoSources,v=t.showVideoSourceDropdown,y=t.showRecordingLength,b=t.onSubmit,S=t.i18n,w=t.mirror,R=t.onSnapshot,C=t.onStartRecording,P=t.onStopRecording,M=t.onDiscardRecordedVideo,k=t.recordingLengthSeconds,x=!!r,I=!x&&m&&(g(a,"video-only")||g(a,"audio-only")||g(a,"video-audio")),D=!x&&g(a,"picture"),V=m&&y,T=v&&f&&f.length>1,L={playsinline:!0};return r?(L.muted=!1,L.controls=!0,L.src=r,this.videoElement&&(this.videoElement.srcObject=void 0)):(L.muted=!0,L.autoplay=!0,L.srcObject=i),s("div",{className:"uppy uppy-Webcam-container"},s("div",{className:"uppy-Webcam-videoContainer"},s("video",o({ref:function(t){return e.videoElement=t},className:"uppy-Webcam-video "+(w?"uppy-Webcam-video--mirrored":"")},L))),s("div",{className:"uppy-Webcam-footer"},s("div",{className:"uppy-Webcam-videoSourceContainer"},T?p(this.props):null),s("div",{className:"uppy-Webcam-buttonContainer"},D&&s(c,{onSnapshot:R,i18n:S}),I&&s(d,{recording:n,onStartRecording:C,onStopRecording:P,i18n:S}),x&&s(l,{onSubmit:b,i18n:S}),x&&s(h,{onDiscard:M,i18n:S})),V&&s("div",{className:"uppy-Webcam-recordingLength"},s(u,{recordingLengthSeconds:k,i18n:S}))))},n}(a);e.exports=m},521:function(e,t,i){var o=i(21).h,r=i(467);e.exports=function(e){var t=e.onSnapshot,i=e.i18n;return o("button",{className:"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--picture",type:"button",title:i("takePicture"),"aria-label":i("takePicture"),onClick:t,"data-uppy-super-focusable":!0},r())}},522:function(e,t,i){var o=i(21).h;e.exports=function(e){var t=e.recording,i=e.onStartRecording,r=e.onStopRecording,n=e.i18n;return t?o("button",{className:"uppy-u-reset uppy-c-btn uppy-Webcam-button",type:"button",title:n("stopRecording"),"aria-label":n("stopRecording"),onClick:r,"data-uppy-super-focusable":!0},o("svg",{"aria-hidden":"true",focusable:"false",className:"uppy-c-icon",width:"100",height:"100",viewBox:"0 0 100 100"},o("rect",{x:"15",y:"15",width:"70",height:"70"}))):o("button",{className:"uppy-u-reset uppy-c-btn uppy-Webcam-button",type:"button",title:n("startRecording"),"aria-label":n("startRecording"),onClick:i,"data-uppy-super-focusable":!0},o("svg",{"aria-hidden":"true",focusable:"false",className:"uppy-c-icon",width:"100",height:"100",viewBox:"0 0 100 100"},o("circle",{cx:"50",cy:"50",r:"40"})))}},523:function(e,t,i){var o=i(21).h,r=i(524);e.exports=function(e){var t=e.recordingLengthSeconds,i=e.i18n,n=r(t);return o("span",{"aria-label":i("recordingLength",{recording_length:n})},n)}},524:function(e,t){e.exports=function(e){return Math.floor(e/60)+":"+String(e%60).padStart(2,0)}},525:function(e,t,i){var o=i(21).h;e.exports=function(e){var t=e.currentDeviceId,i=e.videoSources,r=e.onChangeVideoSource;return o("div",{className:"uppy-Webcam-videoSource"},o("select",{className:"uppy-u-reset uppy-Webcam-videoSource-select",onChange:function(e){r(e.target.value)}},i.map((function(e){return o("option",{key:e.deviceId,value:e.deviceId,selected:e.deviceId===t},e.label)}))))}},526:function(e,t,i){var o=i(21).h;e.exports=function(e){var t=e.onSubmit,i=e.i18n;return o("button",{className:"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--submit",type:"button",title:i("submitRecordedFile"),"aria-label":i("submitRecordedFile"),onClick:t,"data-uppy-super-focusable":!0},o("svg",{width:"12",height:"9",viewBox:"0 0 12 9",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",className:"uppy-c-icon"},o("path",{fill:"#fff",fillRule:"nonzero",d:"M10.66 0L12 1.31 4.136 9 0 4.956l1.34-1.31L4.136 6.38z"})))}},527:function(e,t,i){var o=i(21).h;e.exports=function(e){var t=e.onDiscard,i=e.i18n;return o("button",{className:"uppy-u-reset uppy-c-btn uppy-Webcam-button",type:"button",title:i("discardRecordedFile"),"aria-label":i("discardRecordedFile"),onClick:t,"data-uppy-super-focusable":!0},o("svg",{width:"13",height:"13",viewBox:"0 0 13 13",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",className:"uppy-c-icon"},o("g",{fill:"#FFF",fillRule:"evenodd"},o("path",{d:"M.496 11.367L11.103.76l1.414 1.414L1.911 12.781z"}),o("path",{d:"M11.104 12.782L.497 2.175 1.911.76l10.607 10.606z"}))))}},528:function(e,t,i){var o=i(21).h;e.exports=function(e){return o("div",{className:"uppy-Webcam-permissons"},o("div",{className:"uppy-Webcam-permissonsIcon"},e.icon()),o("h1",{className:"uppy-Webcam-title"},e.hasCamera?e.i18n("allowAccessTitle"):e.i18n("noCameraTitle")),o("p",null,e.hasCamera?e.i18n("allowAccessDescription"):e.i18n("noCameraDescription")))}},551:function(e,t,i){var o,r;function n(){return n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(e[o]=i[o])}return e},n.apply(this,arguments)}function s(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}var c=i(21).h,d=i(50).Plugin,u=i(64),p=i(517),l=i(221),h=i(518),g=i(519),m=i(467),f=i(520),v=i(528);function y(e){return"."===e[0]?l[e.slice(1)]:e}function b(e){return/^video\/[^*]+$/.test(e)}function S(e){return/^image\/[^*]+$/.test(e)}e.exports=(r=o=function(e){var t,i;function o(t,i){var o;(o=e.call(this,t,i)||this).mediaDevices=function(){if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia)return navigator.mediaDevices;var e=navigator.mozGetUserMedia||navigator.webkitGetUserMedia;return e?{getUserMedia:function(t){return new Promise((function(i,o){e.call(navigator,t,i,o)}))}}:null}(),o.supportsUserMedia=!!o.mediaDevices,o.protocol=location.protocol.match(/https/i)?"https":"http",o.id=o.opts.id||"Webcam",o.title=o.opts.title||"Camera",o.type="acquirer",o.capturedMediaFile=null,o.icon=function(){return c("svg",{"aria-hidden":"true",focusable:"false",width:"32",height:"32",viewBox:"0 0 32 32"},c("g",{fill:"none",fillRule:"evenodd"},c("rect",{className:"uppy-ProviderIconBg",fill:"#03BFEF",width:"32",height:"32",rx:"16"}),c("path",{d:"M22 11c1.133 0 2 .867 2 2v7.333c0 1.134-.867 2-2 2H10c-1.133 0-2-.866-2-2V13c0-1.133.867-2 2-2h2.333l1.134-1.733C13.6 9.133 13.8 9 14 9h4c.2 0 .4.133.533.267L19.667 11H22zm-6 1.533a3.764 3.764 0 0 0-3.8 3.8c0 2.129 1.672 3.801 3.8 3.801s3.8-1.672 3.8-3.8c0-2.13-1.672-3.801-3.8-3.801zm0 6.261c-1.395 0-2.46-1.066-2.46-2.46 0-1.395 1.065-2.461 2.46-2.461s2.46 1.066 2.46 2.46c0 1.395-1.065 2.461-2.46 2.461z",fill:"#FFF",fillRule:"nonzero"})))},o.defaultLocale={strings:{smile:"Smile!",takePicture:"Take a picture",startRecording:"Begin video recording",stopRecording:"Stop video recording",allowAccessTitle:"Please allow access to your camera",allowAccessDescription:"In order to take pictures or record video with your camera, please allow camera access for this site.",noCameraTitle:"Camera Not Available",noCameraDescription:"In order to take pictures or record video, please connect a camera device",recordingStoppedMaxSize:"Recording stopped because the file size is about to exceed the limit",recordingLength:"Recording length %{recording_length}",submitRecordedFile:"Submit recorded file",discardRecordedFile:"Discard recorded file"}};var r={onBeforeSnapshot:function(){return Promise.resolve()},countdown:!1,modes:["video-audio","video-only","audio-only","picture"],mirror:!0,showVideoSourceDropdown:!1,facingMode:"user",preferredImageMimeType:null,preferredVideoMimeType:null,showRecordingLength:!1};return o.opts=n({},r,i),o.i18nInit(),o.install=o.install.bind(s(o)),o.setPluginState=o.setPluginState.bind(s(o)),o.render=o.render.bind(s(o)),o.start=o.start.bind(s(o)),o.stop=o.stop.bind(s(o)),o.takeSnapshot=o.takeSnapshot.bind(s(o)),o.startRecording=o.startRecording.bind(s(o)),o.stopRecording=o.stopRecording.bind(s(o)),o.discardRecordedVideo=o.discardRecordedVideo.bind(s(o)),o.submit=o.submit.bind(s(o)),o.oneTwoThreeSmile=o.oneTwoThreeSmile.bind(s(o)),o.focus=o.focus.bind(s(o)),o.changeVideoSource=o.changeVideoSource.bind(s(o)),o.webcamActive=!1,o.opts.countdown&&(o.opts.onBeforeSnapshot=o.oneTwoThreeSmile),o.setPluginState({hasCamera:!1,cameraReady:!1,cameraError:null,recordingLengthSeconds:0,videoSources:[],currentDeviceId:null}),o}i=e,(t=o).prototype=Object.create(i.prototype),t.prototype.constructor=t,a(t,i);var r=o.prototype;return r.setOptions=function(t){e.prototype.setOptions.call(this,n({},t,{videoConstraints:n({},this.opts.videoConstraints,null==t?void 0:t.videoConstraints)})),this.i18nInit()},r.i18nInit=function(){this.translator=new u([this.defaultLocale,this.uppy.locale,this.opts.locale]),this.i18n=this.translator.translate.bind(this.translator),this.i18nArray=this.translator.translateArray.bind(this.translator),this.setPluginState()},r.hasCameraCheck=function(){return this.mediaDevices?this.mediaDevices.enumerateDevices().then((function(e){return e.some((function(e){return"videoinput"===e.kind}))})):Promise.resolve(!1)},r.isAudioOnly=function(){return 1===this.opts.modes.length&&"audio-only"===this.opts.modes[0]},r.getConstraints=function(e){var t;void 0===e&&(e=null);var i=-1!==this.opts.modes.indexOf("video-audio")||-1!==this.opts.modes.indexOf("audio-only"),o=!this.isAudioOnly()&&(-1!==this.opts.modes.indexOf("video-audio")||-1!==this.opts.modes.indexOf("video-only")||-1!==this.opts.modes.indexOf("picture")),r=n({},null!=(t=this.opts.videoConstraints)?t:{facingMode:this.opts.facingMode},e?{deviceId:e,facingMode:null}:{});return{audio:i,video:!!o&&r}},r.start=function(e){var t=this;if(void 0===e&&(e=null),!this.supportsUserMedia)return Promise.reject(new Error("Webcam access not supported"));this.webcamActive=!0,this.opts.mirror=!0;var i=this.getConstraints(e&&e.deviceId?e.deviceId:null);this.hasCameraCheck().then((function(o){return t.setPluginState({hasCamera:o}),t.mediaDevices.getUserMedia(i).then((function(i){t.stream=i;var o=null,r=t.isAudioOnly()?i.getAudioTracks():i.getVideoTracks();e&&e.deviceId?r.forEach((function(t){t.getSettings().deviceId===e.deviceId&&(o=t.getSettings().deviceId)})):o=r[0].getSettings().deviceId,t.updateVideoSources(),t.setPluginState({currentDeviceId:o,cameraReady:!0})})).catch((function(e){t.setPluginState({cameraReady:!1,cameraError:e}),t.uppy.info(e.message,"error")}))}))},r.getMediaRecorderOptions=function(){var e={};if(MediaRecorder.isTypeSupported){var t=this.uppy.opts.restrictions,i=[];this.opts.preferredVideoMimeType?i=[this.opts.preferredVideoMimeType]:t.allowedFileTypes&&(i=t.allowedFileTypes.map(y).filter(b));var o=i.filter((function(e){return MediaRecorder.isTypeSupported(e)&&p(e)}));o.length>0&&(e.mimeType=o[0])}return e},r.startRecording=function(){var e=this;this.recorder=new MediaRecorder(this.stream,this.getMediaRecorderOptions()),this.recordingChunks=[];var t=!1;this.recorder.addEventListener("dataavailable",(function(i){e.recordingChunks.push(i.data);var o=e.uppy.opts.restrictions;if(e.recordingChunks.length>1&&null!=o.maxFileSize&&!t){var r=e.recordingChunks.reduce((function(e,t){return e+t.size}),0),n=3*((r-e.recordingChunks[0].size)/(e.recordingChunks.length-1));r>Math.max(0,o.maxFileSize-n)&&(t=!0,e.uppy.info(e.i18n("recordingStoppedMaxSize"),"warning",4e3),e.stopRecording())}})),this.recorder.start(500),this.opts.showRecordingLength&&(this.recordingLengthTimer=setInterval((function(){var t=e.getPluginState().recordingLengthSeconds;e.setPluginState({recordingLengthSeconds:t+1})}),1e3)),this.setPluginState({isRecording:!0})},r.stopRecording=function(){var e=this;return new Promise((function(t){e.recorder.addEventListener("stop",(function(){t()})),e.recorder.stop(),e.opts.showRecordingLength&&(clearInterval(e.recordingLengthTimer),e.setPluginState({recordingLengthSeconds:0}))})).then((function(){return e.setPluginState({isRecording:!1}),e.getVideo()})).then((function(t){try{e.capturedMediaFile=t,e.setPluginState({recordedVideo:URL.createObjectURL(t.data)}),e.opts.mirror=!1}catch(i){i.isRestriction||e.uppy.log(i)}})).then((function(){e.recordingChunks=null,e.recorder=null}),(function(t){throw e.recordingChunks=null,e.recorder=null,t}))},r.discardRecordedVideo=function(){this.setPluginState({recordedVideo:null}),this.opts.mirror=!0,this.capturedMediaFile=null},r.submit=function(){try{this.capturedMediaFile&&this.uppy.addFile(this.capturedMediaFile)}catch(e){e.isRestriction||this.uppy.log(e,"error")}},r.stop=function(){this.stream&&(this.stream.getAudioTracks().forEach((function(e){e.stop()})),this.stream.getVideoTracks().forEach((function(e){e.stop()}))),this.webcamActive=!1,this.stream=null,this.setPluginState({recordedVideo:null})},r.getVideoElement=function(){return this.el.querySelector(".uppy-Webcam-video")},r.oneTwoThreeSmile=function(){var e=this;return new Promise((function(t,i){var o=e.opts.countdown,r=setInterval((function(){if(!e.webcamActive)return clearInterval(r),e.captureInProgress=!1,i(new Error("Webcam is not active"));o>0?(e.uppy.info(o+"...","warning",800),o--):(clearInterval(r),e.uppy.info(e.i18n("smile"),"success",1500),setTimeout((function(){return t()}),1500))}),1e3)}))},r.takeSnapshot=function(){var e=this;this.captureInProgress||(this.captureInProgress=!0,this.opts.onBeforeSnapshot().catch((function(t){var i="object"===typeof t?t.message:t;return e.uppy.info(i,"error",5e3),Promise.reject(new Error("onBeforeSnapshot: "+i))})).then((function(){return e.getImage()})).then((function(t){e.captureInProgress=!1;try{e.uppy.addFile(t)}catch(i){i.isRestriction||e.uppy.log(i)}}),(function(t){throw e.captureInProgress=!1,t})))},r.getImage=function(){var e=this,t=this.getVideoElement();if(!t)return Promise.reject(new Error("No video element found, likely due to the Webcam tab being closed."));var i=t.videoWidth,o=t.videoHeight,r=document.createElement("canvas");r.width=i,r.height=o,r.getContext("2d").drawImage(t,0,0);var n=this.uppy.opts.restrictions,s=[];this.opts.preferredImageMimeType?s=[this.opts.preferredImageMimeType]:n.allowedFileTypes&&(s=n.allowedFileTypes.map(y).filter(S));var a=s[0]||"image/jpeg",c=p(a)||"jpg",d="cam-"+Date.now()+"."+c;return h(r,a).then((function(t){return{source:e.id,name:d,data:new Blob([t],{type:a}),type:a}}))},r.getVideo=function(){var e=this.recordingChunks.find((function(e){var t;return(null==(t=e.type)?void 0:t.length)>0})).type,t=p(e);if(!t)return Promise.reject(new Error('Could not retrieve recording: Unsupported media type "'+e+'"'));var i="webcam-"+Date.now()+"."+t,o=new Blob(this.recordingChunks,{type:e}),r={source:this.id,name:i,data:new Blob([o],{type:e}),type:e};return Promise.resolve(r)},r.focus=function(){var e=this;this.opts.countdown&&setTimeout((function(){e.uppy.info(e.i18n("smile"),"success",1500)}),1e3)},r.changeVideoSource=function(e){this.stop(),this.start({deviceId:e})},r.updateVideoSources=function(){var e=this;this.mediaDevices.enumerateDevices().then((function(t){e.setPluginState({videoSources:t.filter((function(e){return"videoinput"===e.kind}))})}))},r.render=function(){this.webcamActive||this.start();var e=this.getPluginState();return e.cameraReady&&e.hasCamera?c(f,n({},e,{onChangeVideoSource:this.changeVideoSource,onSnapshot:this.takeSnapshot,onStartRecording:this.startRecording,onStopRecording:this.stopRecording,onDiscardRecordedVideo:this.discardRecordedVideo,onSubmit:this.submit,onFocus:this.focus,onStop:this.stop,i18n:this.i18n,modes:this.opts.modes,showRecordingLength:this.opts.showRecordingLength,showVideoSourceDropdown:this.opts.showVideoSourceDropdown,supportsRecording:g(),recording:e.isRecording,mirror:this.opts.mirror,src:this.stream})):c(v,{icon:m,i18n:this.i18n,hasCamera:e.hasCamera})},r.install=function(){var e=this;this.setPluginState({cameraReady:!1,recordingLengthSeconds:0});var t=this.opts.target;t&&this.mount(t,this),this.mediaDevices&&(this.updateVideoSources(),this.mediaDevices.ondevicechange=function(){if(e.updateVideoSources(),e.stream){var t=!0,i=e.getPluginState(),o=i.videoSources,r=i.currentDeviceId;o.forEach((function(e){r===e.deviceId&&(t=!1)})),t&&(e.stop(),e.start())}})},r.uninstall=function(){this.stream&&this.stop(),this.unmount()},o}(d),o.VERSION="1.8.13",r)}}]);
2
+ //# sourceMappingURL=7.fbca3b10.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/@uppy/webcam/lib/CameraIcon.js","../../../node_modules/@uppy/utils/lib/getFileTypeExtension.js","../../../node_modules/@uppy/utils/lib/canvasToBlob.js","../../../node_modules/@uppy/webcam/lib/supportsMediaRecorder.js","../../../node_modules/@uppy/webcam/lib/CameraScreen.js","../../../node_modules/@uppy/webcam/lib/SnapshotButton.js","../../../node_modules/@uppy/webcam/lib/RecordButton.js","../../../node_modules/@uppy/webcam/lib/RecordingLength.js","../../../node_modules/@uppy/webcam/lib/formatSeconds.js","../../../node_modules/@uppy/webcam/lib/VideoSourceSelect.js","../../../node_modules/@uppy/webcam/lib/SubmitButton.js","../../../node_modules/@uppy/webcam/lib/DiscardButton.js","../../../node_modules/@uppy/webcam/lib/PermissionsScreen.js","../../../node_modules/@uppy/webcam/lib/index.js"],"names":["h","require","module","exports","props","focusable","fill","width","height","viewBox","d","fillRule","mimeToExtensions","mimeType","replace","dataURItoBlob","canvas","type","quality","toBlob","Promise","resolve","then","toDataURL","MediaRecorder","prototype","start","_extends","Object","assign","target","i","arguments","length","source","key","hasOwnProperty","call","apply","this","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_require","Component","SnapshotButton","RecordButton","RecordingLength","VideoSourceSelect","SubmitButton","DiscardButton","isModeAvailable","modes","mode","indexOf","CameraScreen","_Component","subClass","superClass","create","constructor","_proto","componentDidMount","onFocus","componentWillUnmount","onStop","render","_this","_this$props","src","recordedVideo","recording","supportsRecording","videoSources","showVideoSourceDropdown","showRecordingLength","onSubmit","i18n","mirror","onSnapshot","onStartRecording","onStopRecording","onDiscardRecordedVideo","recordingLengthSeconds","hasRecordedVideo","shouldShowRecordButton","shouldShowSnapshotButton","shouldShowRecordingLength","shouldShowVideoSourceDropdown","videoProps","playsinline","muted","controls","videoElement","srcObject","undefined","autoplay","className","ref","onDiscard","CameraIcon","_ref","title","onClick","x","y","cx","cy","r","formatSeconds","formattedRecordingLengthSeconds","recording_length","seconds","Math","floor","String","padStart","currentDeviceId","onChangeVideoSource","onChange","event","value","map","videoSource","deviceId","selected","label","xmlns","icon","hasCamera","_class","_temp","_assertThisInitialized","self","ReferenceError","Plugin","Translator","getFileTypeExtension","mimeTypes","canvasToBlob","supportsMediaRecorder","PermissionsScreen","toMimeType","fileType","slice","isVideoMimeType","test","isImageMimeType","_Plugin","Webcam","uppy","opts","mediaDevices","navigator","getUserMedia","_getUserMedia","mozGetUserMedia","webkitGetUserMedia","reject","getMediaDevices","supportsUserMedia","protocol","location","match","id","capturedMediaFile","rx","defaultLocale","strings","smile","takePicture","startRecording","stopRecording","allowAccessTitle","allowAccessDescription","noCameraTitle","noCameraDescription","recordingStoppedMaxSize","recordingLength","submitRecordedFile","discardRecordedFile","defaultOptions","onBeforeSnapshot","countdown","facingMode","preferredImageMimeType","preferredVideoMimeType","i18nInit","install","bind","setPluginState","stop","takeSnapshot","discardRecordedVideo","submit","oneTwoThreeSmile","focus","changeVideoSource","webcamActive","cameraReady","cameraError","setOptions","newOpts","videoConstraints","translator","locale","translate","i18nArray","translateArray","hasCameraCheck","enumerateDevices","devices","some","device","kind","isAudioOnly","getConstraints","_this$opts$videoConst","acceptsAudio","acceptsVideo","audio","video","options","_this2","Error","constraints","stream","tracks","getAudioTracks","getVideoTracks","forEach","track","getSettings","updateVideoSources","err","info","message","getMediaRecorderOptions","isTypeSupported","restrictions","preferredVideoMimeTypes","allowedFileTypes","filter","acceptableMimeTypes","candidateType","_this3","recorder","recordingChunks","stoppingBecauseOfMaxSize","addEventListener","push","data","maxFileSize","totalSize","reduce","acc","chunk","size","expectedEndChunkSize","max","recordingLengthTimer","setInterval","currentRecordingLength","getPluginState","isRecording","_this4","clearInterval","getVideo","file","URL","createObjectURL","isRestriction","log","error","addFile","getVideoElement","el","querySelector","_this5","count","countDown","captureInProgress","setTimeout","_this6","getImage","tagFile","_this7","videoWidth","videoHeight","document","createElement","getContext","drawImage","preferredImageMimeTypes","ext","name","Date","now","blob","Blob","find","_blob$type","fileExtension","_this8","_this9","webcamState","_this10","mount","ondevicechange","restartStream","_this10$getPluginStat","uninstall","unmount","VERSION"],"mappings":"2HAAA,IACIA,EADWC,EAAQ,IACND,EAEjBE,EAAOC,QAAU,SAAUC,GACzB,OAAOJ,EAAE,MAAO,CACd,cAAe,OACfK,UAAW,QACXC,KAAM,UACNC,MAAO,KACPC,OAAQ,KACRC,QAAS,aACRT,EAAE,OAAQ,CACXU,EAAG,ueACHC,SAAU,e,kBCTd,IAAIC,EAAmB,CACrB,YAAa,MACb,YAAa,MACb,YAAa,MACb,aAAc,OACd,YAAa,MACb,aAAc,OACd,aAAc,OACd,aAAc,MACd,YAAa,MACb,gBAAiB,MACjB,YAAa,MACb,YAAa,MACb,kBAAmB,MACnB,aAAc,OACd,mBAAoB,MACpB,kBAAmB,OAGrBV,EAAOC,QAAU,SAA8BU,GAG7C,OADAA,EAAWA,EAASC,QAAQ,OAAQ,IAC7BF,EAAiBC,IAAa,O,oBC1BvC,IAAIE,EAAgBd,EAAQ,KAS5BC,EAAOC,QAAU,SAAsBa,EAAQC,EAAMC,GACnD,OAAIF,EAAOG,OACF,IAAIC,SAAQ,SAAUC,GAC3BL,EAAOG,OAAOE,EAASJ,EAAMC,MAI1BE,QAAQC,UAAUC,MAAK,WAC5B,OAAOP,EAAcC,EAAOO,UAAUN,EAAMC,GAAU,S,kBCjB1DhB,EAAOC,QAAU,WAEf,MAAgC,oBAAlBqB,iBAAkCA,cAAcC,WAAsD,oBAAlCD,cAAcC,UAAUC,Q,oBCF5G,SAASC,IAA2Q,OAA9PA,EAAWC,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOH,UAAUW,eAAeC,KAAKH,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkBH,EAASW,MAAMC,KAAMP,WAIhT,SAASQ,EAAgBC,EAAGC,GAA+G,OAA1GF,EAAkBZ,OAAOe,gBAAkB,SAAyBF,EAAGC,GAAsB,OAAjBD,EAAEG,UAAYF,EAAUD,GAAaD,EAAgBC,EAAGC,GAGrK,IAAIG,EAAW5C,EAAQ,IACnBD,EAAI6C,EAAS7C,EACb8C,EAAYD,EAASC,UAErBC,EAAiB9C,EAAQ,KAEzB+C,EAAe/C,EAAQ,KAEvBgD,EAAkBhD,EAAQ,KAE1BiD,EAAoBjD,EAAQ,KAE5BkD,EAAelD,EAAQ,KAEvBmD,EAAgBnD,EAAQ,KAE5B,SAASoD,EAAgBC,EAAOC,GAC9B,OAAgC,IAAzBD,EAAME,QAAQD,GAGvB,IAAIE,EAA4B,SAAUC,GAzB1C,IAAwBC,EAAUC,EA4BhC,SAASH,IACP,OAAOC,EAAWpB,MAAMC,KAAMP,YAAcO,KA7BdqB,EA0BHF,GA1BPC,EA0BPF,GA1BwChC,UAAYG,OAAOiC,OAAOD,EAAWnC,WAAYkC,EAASlC,UAAUqC,YAAcH,EAAUnB,EAAgBmB,EAAUC,GAgC7K,IAAIG,EAASN,EAAahC,UA+F1B,OA7FAsC,EAAOC,kBAAoB,YAEzBC,EADc1B,KAAKnC,MAAM6D,YAI3BF,EAAOG,qBAAuB,YAE5BC,EADa5B,KAAKnC,MAAM+D,WAI1BJ,EAAOK,OAAS,WACd,IAAIC,EAAQ9B,KAER+B,EAAc/B,KAAKnC,MACnBmE,EAAMD,EAAYC,IAClBC,EAAgBF,EAAYE,cAC5BC,EAAYH,EAAYG,UACxBnB,EAAQgB,EAAYhB,MACpBoB,EAAoBJ,EAAYI,kBAChCC,EAAeL,EAAYK,aAC3BC,EAA0BN,EAAYM,wBACtCC,EAAsBP,EAAYO,oBAClCC,EAAWR,EAAYQ,SACvBC,EAAOT,EAAYS,KACnBC,EAASV,EAAYU,OACrBC,EAAaX,EAAYW,WACzBC,EAAmBZ,EAAYY,iBAC/BC,EAAkBb,EAAYa,gBAC9BC,EAAyBd,EAAYc,uBACrCC,EAAyBf,EAAYe,uBACrCC,IAAqBd,EACrBe,GAA0BD,GAAoBZ,IAAsBrB,EAAgBC,EAAO,eAAiBD,EAAgBC,EAAO,eAAiBD,EAAgBC,EAAO,gBAC3KkC,GAA4BF,GAAoBjC,EAAgBC,EAAO,WACvEmC,EAA4Bf,GAAqBG,EACjDa,EAAgCd,GAA2BD,GAAgBA,EAAa1C,OAAS,EACjG0D,EAAa,CACfC,aAAa,GAiBf,OAdIpB,GACFmB,EAAWE,OAAQ,EACnBF,EAAWG,UAAW,EACtBH,EAAWpB,IAAMC,EAEbjC,KAAKwD,eACPxD,KAAKwD,aAAaC,eAAYC,KAGhCN,EAAWE,OAAQ,EACnBF,EAAWO,UAAW,EACtBP,EAAWK,UAAYzB,GAGlBvE,EAAE,MAAO,CACdmG,UAAW,8BACVnG,EAAE,MAAO,CACVmG,UAAW,8BACVnG,EAAE,QAAS2B,EAAS,CAErByE,IAAK,SAAaL,GAChB,OAAO1B,EAAM0B,aAAeA,GAE9BI,UAAW,uBAAyBnB,EAAS,8BAAgC,KAG5EW,KAAe3F,EAAE,MAAO,CACzBmG,UAAW,sBACVnG,EAAE,MAAO,CACVmG,UAAW,oCACVT,EAAgCxC,EAAkBX,KAAKnC,OAAS,MAAOJ,EAAE,MAAO,CACjFmG,UAAW,+BACVX,GAA4BxF,EAAE+C,EAAgB,CAC/CkC,WAAYA,EACZF,KAAMA,IACJQ,GAA0BvF,EAAEgD,EAAc,CAC5CyB,UAAWA,EACXS,iBAAkBA,EAClBC,gBAAiBA,EACjBJ,KAAMA,IACJO,GAAoBtF,EAAEmD,EAAc,CACtC2B,SAAUA,EACVC,KAAMA,IACJO,GAAoBtF,EAAEoD,EAAe,CACvCiD,UAAWjB,EACXL,KAAMA,KACHU,GAA6BzF,EAAE,MAAO,CACzCmG,UAAW,+BACVnG,EAAEiD,EAAiB,CACpBoC,uBAAwBA,EACxBN,KAAMA,QAIHtB,EAtGuB,CAuG9BX,GAEF5C,EAAOC,QAAUsD,G,oBCpIjB,IACIzD,EADWC,EAAQ,IACND,EAEbsG,EAAarG,EAAQ,KAEzBC,EAAOC,QAAU,SAAUoG,GACzB,IAAItB,EAAasB,EAAKtB,WAClBF,EAAOwB,EAAKxB,KAChB,OAAO/E,EAAE,SAAU,CACjBmG,UAAW,yEACXlF,KAAM,SACNuF,MAAOzB,EAAK,eACZ,aAAcA,EAAK,eACnB0B,QAASxB,EACT,6BAA6B,GAC5BqB,O,oBCfL,IACItG,EADWC,EAAQ,IACND,EAEjBE,EAAOC,QAAU,SAAsBoG,GACrC,IAAI9B,EAAY8B,EAAK9B,UACjBS,EAAmBqB,EAAKrB,iBACxBC,EAAkBoB,EAAKpB,gBACvBJ,EAAOwB,EAAKxB,KAEhB,OAAIN,EACKzE,EAAE,SAAU,CACjBmG,UAAW,6CACXlF,KAAM,SACNuF,MAAOzB,EAAK,iBACZ,aAAcA,EAAK,iBACnB0B,QAAStB,EACT,6BAA6B,GAC5BnF,EAAE,MAAO,CACV,cAAe,OACfK,UAAW,QACX8F,UAAW,cACX5F,MAAO,MACPC,OAAQ,MACRC,QAAS,eACRT,EAAE,OAAQ,CACX0G,EAAG,KACHC,EAAG,KACHpG,MAAO,KACPC,OAAQ,SAILR,EAAE,SAAU,CACjBmG,UAAW,6CACXlF,KAAM,SACNuF,MAAOzB,EAAK,kBACZ,aAAcA,EAAK,kBACnB0B,QAASvB,EACT,6BAA6B,GAC5BlF,EAAE,MAAO,CACV,cAAe,OACfK,UAAW,QACX8F,UAAW,cACX5F,MAAO,MACPC,OAAQ,MACRC,QAAS,eACRT,EAAE,SAAU,CACb4G,GAAI,KACJC,GAAI,KACJC,EAAG,W,oBCjDP,IACI9G,EADWC,EAAQ,IACND,EAEb+G,EAAgB9G,EAAQ,KAE5BC,EAAOC,QAAU,SAAyBoG,GACxC,IAAIlB,EAAyBkB,EAAKlB,uBAC9BN,EAAOwB,EAAKxB,KACZiC,EAAkCD,EAAc1B,GACpD,OAAOrF,EAAE,OAAQ,CACf,aAAc+E,EAAK,kBAAmB,CACpCkC,iBAAkBD,KAEnBA,K,kBCNL9G,EAAOC,QAAU,SAAuB+G,GACtC,OAAOC,KAAKC,MAAMF,EAAU,IAAM,IAAMG,OAAOH,EAAU,IAAII,SAAS,EAAG,K,oBCR3E,IACItH,EADWC,EAAQ,IACND,EAEjBE,EAAOC,QAAU,SAAUoG,GACzB,IAAIgB,EAAkBhB,EAAKgB,gBACvB5C,EAAe4B,EAAK5B,aACpB6C,EAAsBjB,EAAKiB,oBAC/B,OAAOxH,EAAE,MAAO,CACdmG,UAAW,2BACVnG,EAAE,SAAU,CACbmG,UAAW,8CACXsB,SAAU,SAAkBC,GAC1BF,EAAoBE,EAAM5F,OAAO6F,SAElChD,EAAaiD,KAAI,SAAUC,GAC5B,OAAO7H,EAAE,SAAU,CACjBmC,IAAK0F,EAAYC,SACjBH,MAAOE,EAAYC,SACnBC,SAAUF,EAAYC,WAAaP,GAClCM,EAAYG,c,oBCnBnB,IACIhI,EADWC,EAAQ,IACND,EA2BjBE,EAAOC,QAzBP,SAAsBoG,GACpB,IAAIzB,EAAWyB,EAAKzB,SAChBC,EAAOwB,EAAKxB,KAChB,OAAO/E,EAAE,SAAU,CACjBmG,UAAW,wEACXlF,KAAM,SACNuF,MAAOzB,EAAK,sBACZ,aAAcA,EAAK,sBACnB0B,QAAS3B,EACT,6BAA6B,GAC5B9E,EAAE,MAAO,CACVO,MAAO,KACPC,OAAQ,IACRC,QAAS,WACTwH,MAAO,6BACP,cAAe,OACf5H,UAAW,QACX8F,UAAW,eACVnG,EAAE,OAAQ,CACXM,KAAM,OACNK,SAAU,UACVD,EAAG,+D,oBCxBP,IACIV,EADWC,EAAQ,IACND,EA8BjBE,EAAOC,QA5BP,SAAuBoG,GACrB,IAAIF,EAAYE,EAAKF,UACjBtB,EAAOwB,EAAKxB,KAChB,OAAO/E,EAAE,SAAU,CACjBmG,UAAW,6CACXlF,KAAM,SACNuF,MAAOzB,EAAK,uBACZ,aAAcA,EAAK,uBACnB0B,QAASJ,EACT,6BAA6B,GAC5BrG,EAAE,MAAO,CACVO,MAAO,KACPC,OAAQ,KACRC,QAAS,YACTwH,MAAO,6BACP,cAAe,OACf5H,UAAW,QACX8F,UAAW,eACVnG,EAAE,IAAK,CACRM,KAAM,OACNK,SAAU,WACTX,EAAE,OAAQ,CACXU,EAAG,qDACDV,EAAE,OAAQ,CACZU,EAAG,2D,oBC3BP,IACIV,EADWC,EAAQ,IACND,EAEjBE,EAAOC,QAAU,SAAUC,GACzB,OAAOJ,EAAE,MAAO,CACdmG,UAAW,0BACVnG,EAAE,MAAO,CACVmG,UAAW,8BACV/F,EAAM8H,QAASlI,EAAE,KAAM,CACxBmG,UAAW,qBACV/F,EAAM+H,UAAY/H,EAAM2E,KAAK,oBAAsB3E,EAAM2E,KAAK,kBAAmB/E,EAAE,IAAK,KAAMI,EAAM+H,UAAY/H,EAAM2E,KAAK,0BAA4B3E,EAAM2E,KAAK,2B,oBCVvK,IAAIqD,EAAQC,EAEZ,SAAS1G,IAA2Q,OAA9PA,EAAWC,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOH,UAAUW,eAAeC,KAAKH,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkBH,EAASW,MAAMC,KAAMP,WAEhT,SAASsG,EAAuBC,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIC,eAAe,6DAAgE,OAAOD,EAI/J,SAAS/F,EAAgBC,EAAGC,GAA+G,OAA1GF,EAAkBZ,OAAOe,gBAAkB,SAAyBF,EAAGC,GAAsB,OAAjBD,EAAEG,UAAYF,EAAUD,GAAaD,EAAgBC,EAAGC,GAErK,IACI1C,EADWC,EAAQ,IACND,EAGbyI,EADYxI,EAAQ,IACDwI,OAEnBC,EAAazI,EAAQ,IAErB0I,EAAuB1I,EAAQ,KAE/B2I,EAAY3I,EAAQ,KAEpB4I,EAAe5I,EAAQ,KAEvB6I,EAAwB7I,EAAQ,KAEhCqG,EAAarG,EAAQ,KAErBwD,EAAexD,EAAQ,KAEvB8I,EAAoB9I,EAAQ,KAShC,SAAS+I,EAAWC,GAClB,MAAoB,MAAhBA,EAAS,GACJL,EAAUK,EAASC,MAAM,IAG3BD,EAUT,SAASE,EAAgBtI,GACvB,MAAO,iBAAiBuI,KAAKvI,GAU/B,SAASwI,EAAgBxI,GACvB,MAAO,iBAAiBuI,KAAKvI,GAkC/BX,EAAOC,SAAWkI,EAAQD,EAAsB,SAAUkB,GA9F1D,IAAwB3F,EAAUC,EAkGhC,SAAS2F,EAAOC,EAAMC,GACpB,IAAIpF,GAEJA,EAAQiF,EAAQjH,KAAKE,KAAMiH,EAAMC,IAASlH,MACpCmH,aAlCV,WAEE,GAAIC,UAAUD,cAAgBC,UAAUD,aAAaE,aAEnD,OAAOD,UAAUD,aAGnB,IAAIG,EAAgBF,UAAUG,iBAAmBH,UAAUI,mBAE3D,OAAKF,EAIE,CACLD,aAAc,SAAsBH,GAClC,OAAO,IAAIrI,SAAQ,SAAUC,EAAS2I,GACpCH,EAAcxH,KAAKsH,UAAWF,EAAMpI,EAAS2I,QAN1C,KAwBcC,GACrB5F,EAAM6F,oBAAsB7F,EAAMqF,aAElCrF,EAAM8F,SAAWC,SAASD,SAASE,MAAM,UAAY,QAAU,OAC/DhG,EAAMiG,GAAKjG,EAAMoF,KAAKa,IAAM,SAC5BjG,EAAMmC,MAAQnC,EAAMoF,KAAKjD,OAAS,SAClCnC,EAAMpD,KAAO,WACboD,EAAMkG,kBAAoB,KAE1BlG,EAAM6D,KAAO,WACX,OAAOlI,EAAE,MAAO,CACd,cAAe,OACfK,UAAW,QACXE,MAAO,KACPC,OAAQ,KACRC,QAAS,aACRT,EAAE,IAAK,CACRM,KAAM,OACNK,SAAU,WACTX,EAAE,OAAQ,CACXmG,UAAW,sBACX7F,KAAM,UACNC,MAAO,KACPC,OAAQ,KACRgK,GAAI,OACFxK,EAAE,OAAQ,CACZU,EAAG,yZACHJ,KAAM,OACNK,SAAU,eAId0D,EAAMoG,cAAgB,CACpBC,QAAS,CACPC,MAAO,SACPC,YAAa,iBACbC,eAAgB,wBAChBC,cAAe,uBACfC,iBAAkB,qCAClBC,uBAAwB,wGACxBC,cAAe,uBACfC,oBAAqB,4EACrBC,wBAAyB,uEACzBC,gBAAiB,uCACjBC,mBAAoB,uBACpBC,oBAAqB,0BAIzB,IAAIC,EAAiB,CACnBC,iBAAkB,WAChB,OAAOpK,QAAQC,WAEjBoK,WAAW,EACXnI,MAAO,CAAC,cAAe,aAAc,aAAc,WACnD0B,QAAQ,EACRJ,yBAAyB,EACzB8G,WAAY,OACZC,uBAAwB,KACxBC,uBAAwB,KACxB/G,qBAAqB,GAmCvB,OAjCAR,EAAMoF,KAAO9H,EAAS,GAAI4J,EAAgB9B,GAE1CpF,EAAMwH,WAENxH,EAAMyH,QAAUzH,EAAMyH,QAAQC,KAAKzD,EAAuBjE,IAC1DA,EAAM2H,eAAiB3H,EAAM2H,eAAeD,KAAKzD,EAAuBjE,IACxEA,EAAMD,OAASC,EAAMD,OAAO2H,KAAKzD,EAAuBjE,IAExDA,EAAM3C,MAAQ2C,EAAM3C,MAAMqK,KAAKzD,EAAuBjE,IACtDA,EAAM4H,KAAO5H,EAAM4H,KAAKF,KAAKzD,EAAuBjE,IACpDA,EAAM6H,aAAe7H,EAAM6H,aAAaH,KAAKzD,EAAuBjE,IACpEA,EAAMwG,eAAiBxG,EAAMwG,eAAekB,KAAKzD,EAAuBjE,IACxEA,EAAMyG,cAAgBzG,EAAMyG,cAAciB,KAAKzD,EAAuBjE,IACtEA,EAAM8H,qBAAuB9H,EAAM8H,qBAAqBJ,KAAKzD,EAAuBjE,IACpFA,EAAM+H,OAAS/H,EAAM+H,OAAOL,KAAKzD,EAAuBjE,IACxDA,EAAMgI,iBAAmBhI,EAAMgI,iBAAiBN,KAAKzD,EAAuBjE,IAC5EA,EAAMiI,MAAQjI,EAAMiI,MAAMP,KAAKzD,EAAuBjE,IACtDA,EAAMkI,kBAAoBlI,EAAMkI,kBAAkBR,KAAKzD,EAAuBjE,IAC9EA,EAAMmI,cAAe,EAEjBnI,EAAMoF,KAAKgC,YACbpH,EAAMoF,KAAK+B,iBAAmBnH,EAAMgI,kBAGtChI,EAAM2H,eAAe,CACnB7D,WAAW,EACXsE,aAAa,EACbC,YAAa,KACbrH,uBAAwB,EACxBV,aAAc,GACd4C,gBAAiB,OAGZlD,EArMuBT,EA+FT0F,GA/FD3F,EA+FP4F,GA/FwC9H,UAAYG,OAAOiC,OAAOD,EAAWnC,WAAYkC,EAASlC,UAAUqC,YAAcH,EAAUnB,EAAgBmB,EAAUC,GAwM7K,IAAIG,EAASwF,EAAO9H,UAqhBpB,OAnhBAsC,EAAO4I,WAAa,SAAoBC,GACtCtD,EAAQ7H,UAAUkL,WAAWtK,KAAKE,KAAMZ,EAAS,GAAIiL,EAAS,CAC5DC,iBAAkBlL,EAAS,GAAIY,KAAKkH,KAAKoD,iBAA6B,MAAXD,OAAkB,EAASA,EAAQC,qBAGhGtK,KAAKsJ,YAGP9H,EAAO8H,SAAW,WAChBtJ,KAAKuK,WAAa,IAAIpE,EAAW,CAACnG,KAAKkI,cAAelI,KAAKiH,KAAKuD,OAAQxK,KAAKkH,KAAKsD,SAClFxK,KAAKwC,KAAOxC,KAAKuK,WAAWE,UAAUjB,KAAKxJ,KAAKuK,YAChDvK,KAAK0K,UAAY1K,KAAKuK,WAAWI,eAAenB,KAAKxJ,KAAKuK,YAC1DvK,KAAKyJ,kBAGPjI,EAAOoJ,eAAiB,WACtB,OAAK5K,KAAKmH,aAIHnH,KAAKmH,aAAa0D,mBAAmB9L,MAAK,SAAU+L,GACzD,OAAOA,EAAQC,MAAK,SAAUC,GAC5B,MAAuB,eAAhBA,EAAOC,WALTpM,QAAQC,SAAQ,IAU3B0C,EAAO0J,YAAc,WACnB,OAAkC,IAA3BlL,KAAKkH,KAAKnG,MAAMrB,QAAuC,eAAvBM,KAAKkH,KAAKnG,MAAM,IAGzDS,EAAO2J,eAAiB,SAAwB5F,GAC9C,IAAI6F,OAEa,IAAb7F,IACFA,EAAW,MAGb,IAAI8F,GAA2D,IAA5CrL,KAAKkH,KAAKnG,MAAME,QAAQ,iBAAoE,IAA3CjB,KAAKkH,KAAKnG,MAAME,QAAQ,cACxFqK,GAAgBtL,KAAKkL,iBAA8D,IAA5ClL,KAAKkH,KAAKnG,MAAME,QAAQ,iBAAoE,IAA3CjB,KAAKkH,KAAKnG,MAAME,QAAQ,gBAAgE,IAAxCjB,KAAKkH,KAAKnG,MAAME,QAAQ,YAEhKqJ,EAAmBlL,EAAS,GAA4D,OAAvDgM,EAAwBpL,KAAKkH,KAAKoD,kBAA4Bc,EAAwB,CACzHjC,WAAYnJ,KAAKkH,KAAKiC,YACrB5D,EAAW,CACZA,SAAUA,EACV4D,WAAY,MACV,IAEJ,MAAO,CACLoC,MAAOF,EACPG,QAAOF,GAAehB,IAK1B9I,EAAOrC,MAAQ,SAAesM,GAC5B,IAAIC,EAAS1L,KAMb,QAJgB,IAAZyL,IACFA,EAAU,OAGPzL,KAAK2H,kBACR,OAAO9I,QAAQ4I,OAAO,IAAIkE,MAAM,gCAGlC3L,KAAKiK,cAAe,EACpBjK,KAAKkH,KAAKzE,QAAS,EACnB,IAAImJ,EAAc5L,KAAKmL,eAAeM,GAAWA,EAAQlG,SAAWkG,EAAQlG,SAAW,MACvFvF,KAAK4K,iBAAiB7L,MAAK,SAAU6G,GAMnC,OALA8F,EAAOjC,eAAe,CACpB7D,UAAWA,IAIN8F,EAAOvE,aAAaE,aAAauE,GAAa7M,MAAK,SAAU8M,GAClEH,EAAOG,OAASA,EAChB,IAAI7G,EAAkB,KAClB8G,EAASJ,EAAOR,cAAgBW,EAAOE,iBAAmBF,EAAOG,iBAEhEP,GAAYA,EAAQlG,SAGvBuG,EAAOG,SAAQ,SAAUC,GACnBA,EAAMC,cAAc5G,WAAakG,EAAQlG,WAC3CP,EAAkBkH,EAAMC,cAAc5G,aAJ1CP,EAAkB8G,EAAO,GAAGK,cAAc5G,SAU5CmG,EAAOU,qBAEPV,EAAOjC,eAAe,CACpBzE,gBAAiBA,EACjBkF,aAAa,OApBV,OAsBE,SAAUmC,GACjBX,EAAOjC,eAAe,CACpBS,aAAa,EACbC,YAAakC,IAGfX,EAAOzE,KAAKqF,KAAKD,EAAIE,QAAS,gBASpC/K,EAAOgL,wBAA0B,WAC/B,IAAIf,EAAU,GAId,GAAIxM,cAAcwN,gBAAiB,CACjC,IAAIC,EAAe1M,KAAKiH,KAAKC,KAAKwF,aAC9BC,EAA0B,GAE1B3M,KAAKkH,KAAKmC,uBACZsD,EAA0B,CAAC3M,KAAKkH,KAAKmC,wBAC5BqD,EAAaE,mBACtBD,EAA0BD,EAAaE,iBAAiBvH,IAAIoB,GAAYoG,OAAOjG,IAGjF,IAIIkG,EAAsBH,EAAwBE,QAJvB,SAA8BE,GACvD,OAAO9N,cAAcwN,gBAAgBM,IAAkB3G,EAAqB2G,MAK1ED,EAAoBpN,OAAS,IAE/B+L,EAAQnN,SAAWwO,EAAoB,IAI3C,OAAOrB,GAGTjK,EAAO8G,eAAiB,WACtB,IAAI0E,EAAShN,KAIbA,KAAKiN,SAAW,IAAIhO,cAAce,KAAK6L,OAAQ7L,KAAKwM,2BACpDxM,KAAKkN,gBAAkB,GACvB,IAAIC,GAA2B,EAC/BnN,KAAKiN,SAASG,iBAAiB,iBAAiB,SAAUjI,GACxD6H,EAAOE,gBAAgBG,KAAKlI,EAAMmI,MAElC,IAAIZ,EAAeM,EAAO/F,KAAKC,KAAKwF,aAEpC,GAAIM,EAAOE,gBAAgBxN,OAAS,GAAiC,MAA5BgN,EAAaa,cAAwBJ,EAA0B,CACtG,IAAIK,EAAYR,EAAOE,gBAAgBO,QAAO,SAAUC,EAAKC,GAC3D,OAAOD,EAAMC,EAAMC,OAClB,GAICC,EAA0C,IADtBL,EAAYR,EAAOE,gBAAgB,GAAGU,OAASZ,EAAOE,gBAAgBxN,OAAS,IAInG8N,EAFU5I,KAAKkJ,IAAI,EAAGpB,EAAaa,YAAcM,KAGnDV,GAA2B,EAE3BH,EAAO/F,KAAKqF,KAAKU,EAAOxK,KAAK,2BAA4B,UAAW,KAEpEwK,EAAOzE,qBAMbvI,KAAKiN,SAAS9N,MAAM,KAEhBa,KAAKkH,KAAK5E,sBAEZtC,KAAK+N,qBAAuBC,aAAY,WACtC,IAAIC,EAAyBjB,EAAOkB,iBAAiBpL,uBAErDkK,EAAOvD,eAAe,CACpB3G,uBAAwBmL,EAAyB,MAElD,MAGLjO,KAAKyJ,eAAe,CAClB0E,aAAa,KAIjB3M,EAAO+G,cAAgB,WACrB,IAAI6F,EAASpO,KAkBb,OAhBc,IAAInB,SAAQ,SAAUC,GAClCsP,EAAOnB,SAASG,iBAAiB,QAAQ,WACvCtO,OAGFsP,EAAOnB,SAASvD,OAEZ0E,EAAOlH,KAAK5E,sBAEd+L,cAAcD,EAAOL,sBAErBK,EAAO3E,eAAe,CACpB3G,uBAAwB,QAIf/D,MAAK,WAKlB,OAJAqP,EAAO3E,eAAe,CACpB0E,aAAa,IAGRC,EAAOE,cACbvP,MAAK,SAAUwP,GAChB,IACEH,EAAOpG,kBAAoBuG,EAE3BH,EAAO3E,eAAe,CAEpBxH,cAAeuM,IAAIC,gBAAgBF,EAAKjB,QAG1Cc,EAAOlH,KAAKzE,QAAS,EACrB,MAAO4J,GAEFA,EAAIqC,eACPN,EAAOnH,KAAK0H,IAAItC,OAGnBtN,MAAK,WACNqP,EAAOlB,gBAAkB,KACzBkB,EAAOnB,SAAW,QACjB,SAAU2B,GAGX,MAFAR,EAAOlB,gBAAkB,KACzBkB,EAAOnB,SAAW,KACZ2B,MAIVpN,EAAOoI,qBAAuB,WAC5B5J,KAAKyJ,eAAe,CAClBxH,cAAe,OAEjBjC,KAAKkH,KAAKzE,QAAS,EACnBzC,KAAKgI,kBAAoB,MAG3BxG,EAAOqI,OAAS,WACd,IACM7J,KAAKgI,mBACPhI,KAAKiH,KAAK4H,QAAQ7O,KAAKgI,mBAEzB,MAAOqE,GAEFA,EAAIqC,eACP1O,KAAKiH,KAAK0H,IAAItC,EAAK,WAKzB7K,EAAOkI,KAAO,WACR1J,KAAK6L,SACP7L,KAAK6L,OAAOE,iBAAiBE,SAAQ,SAAUC,GAC7CA,EAAMxC,UAER1J,KAAK6L,OAAOG,iBAAiBC,SAAQ,SAAUC,GAC7CA,EAAMxC,WAIV1J,KAAKiK,cAAe,EACpBjK,KAAK6L,OAAS,KACd7L,KAAKyJ,eAAe,CAClBxH,cAAe,QAInBT,EAAOsN,gBAAkB,WACvB,OAAO9O,KAAK+O,GAAGC,cAAc,uBAG/BxN,EAAOsI,iBAAmB,WACxB,IAAImF,EAASjP,KAEb,OAAO,IAAInB,SAAQ,SAAUC,EAAS2I,GACpC,IAAIyH,EAAQD,EAAO/H,KAAKgC,UAEpBiG,EAAYnB,aAAY,WAC1B,IAAKiB,EAAOhF,aAGV,OAFAoE,cAAcc,GACdF,EAAOG,mBAAoB,EACpB3H,EAAO,IAAIkE,MAAM,yBAGtBuD,EAAQ,GACVD,EAAOhI,KAAKqF,KAAK4C,EAAQ,MAAO,UAAW,KAE3CA,MAEAb,cAAcc,GAEdF,EAAOhI,KAAKqF,KAAK2C,EAAOzM,KAAK,SAAU,UAAW,MAElD6M,YAAW,WACT,OAAOvQ,MACN,SAEJ,SAIP0C,EAAOmI,aAAe,WACpB,IAAI2F,EAAStP,KAETA,KAAKoP,oBACTpP,KAAKoP,mBAAoB,EACzBpP,KAAKkH,KAAK+B,mBAAV,OAAmC,SAAUoD,GAC3C,IAAIE,EAAyB,kBAARF,EAAmBA,EAAIE,QAAUF,EAItD,OAFAiD,EAAOrI,KAAKqF,KAAKC,EAAS,QAAS,KAE5B1N,QAAQ4I,OAAO,IAAIkE,MAAM,qBAAuBY,OACtDxN,MAAK,WACN,OAAOuQ,EAAOC,cACbxQ,MAAK,SAAUyQ,GAChBF,EAAOF,mBAAoB,EAE3B,IACEE,EAAOrI,KAAK4H,QAAQW,GACpB,MAAOnD,GAEFA,EAAIqC,eACPY,EAAOrI,KAAK0H,IAAItC,OAGnB,SAAUuC,GAEX,MADAU,EAAOF,mBAAoB,EACrBR,OAIVpN,EAAO+N,SAAW,WAChB,IAAIE,EAASzP,KAETwL,EAAQxL,KAAK8O,kBAEjB,IAAKtD,EACH,OAAO3M,QAAQ4I,OAAO,IAAIkE,MAAM,uEAGlC,IAAI3N,EAAQwN,EAAMkE,WACdzR,EAASuN,EAAMmE,YACflR,EAASmR,SAASC,cAAc,UACpCpR,EAAOT,MAAQA,EACfS,EAAOR,OAASA,EACNQ,EAAOqR,WAAW,MACxBC,UAAUvE,EAAO,EAAG,GACxB,IAAIkB,EAAe1M,KAAKiH,KAAKC,KAAKwF,aAC9BsD,EAA0B,GAE1BhQ,KAAKkH,KAAKkC,uBACZ4G,EAA0B,CAAChQ,KAAKkH,KAAKkC,wBAC5BsD,EAAaE,mBACtBoD,EAA0BtD,EAAaE,iBAAiBvH,IAAIoB,GAAYoG,OAAO/F,IAGjF,IAAIxI,EAAW0R,EAAwB,IAAM,aACzCC,EAAM7J,EAAqB9H,IAAa,MACxC4R,EAAO,OAASC,KAAKC,MAAQ,IAAMH,EACvC,OAAO3J,EAAa7H,EAAQH,GAAUS,MAAK,SAAUsR,GACnD,MAAO,CACL1Q,OAAQ8P,EAAO1H,GACfmI,KAAMA,EACN5C,KAAM,IAAIgD,KAAK,CAACD,GAAO,CACrB3R,KAAMJ,IAERI,KAAMJ,OAKZkD,EAAO8M,SAAW,WAIhB,IAAIhQ,EAAW0B,KAAKkN,gBAAgBqD,MAAK,SAAUF,GACjD,IAAIG,EAEJ,OAAoC,OAA3BA,EAAaH,EAAK3R,WAAgB,EAAS8R,EAAW9Q,QAAU,KACxEhB,KACC+R,EAAgBrK,EAAqB9H,GAEzC,IAAKmS,EACH,OAAO5R,QAAQ4I,OAAO,IAAIkE,MAAM,yDAA4DrN,EAAW,MAGzG,IAAI4R,EAAO,UAAYC,KAAKC,MAAQ,IAAMK,EACtCJ,EAAO,IAAIC,KAAKtQ,KAAKkN,gBAAiB,CACxCxO,KAAMJ,IAEJiQ,EAAO,CACT5O,OAAQK,KAAK+H,GACbmI,KAAMA,EACN5C,KAAM,IAAIgD,KAAK,CAACD,GAAO,CACrB3R,KAAMJ,IAERI,KAAMJ,GAER,OAAOO,QAAQC,QAAQyP,IAGzB/M,EAAOuI,MAAQ,WACb,IAAI2G,EAAS1Q,KAERA,KAAKkH,KAAKgC,WACfmG,YAAW,WACTqB,EAAOzJ,KAAKqF,KAAKoE,EAAOlO,KAAK,SAAU,UAAW,QACjD,MAGLhB,EAAOwI,kBAAoB,SAA2BzE,GACpDvF,KAAK0J,OACL1J,KAAKb,MAAM,CACToG,SAAUA,KAId/D,EAAO4K,mBAAqB,WAC1B,IAAIuE,EAAS3Q,KAEbA,KAAKmH,aAAa0D,mBAAmB9L,MAAK,SAAU+L,GAClD6F,EAAOlH,eAAe,CACpBrH,aAAc0I,EAAQ+B,QAAO,SAAU7B,GACrC,MAAuB,eAAhBA,EAAOC,cAMtBzJ,EAAOK,OAAS,WACT7B,KAAKiK,cACRjK,KAAKb,QAGP,IAAIyR,EAAc5Q,KAAKkO,iBAEvB,OAAK0C,EAAY1G,aAAgB0G,EAAYhL,UAQtCnI,EAAEyD,EACP9B,EAAS,GAAIwR,EAAa,CAC1B3L,oBAAqBjF,KAAKgK,kBAC1BtH,WAAY1C,KAAK2J,aACjBhH,iBAAkB3C,KAAKsI,eACvB1F,gBAAiB5C,KAAKuI,cACtB1F,uBAAwB7C,KAAK4J,qBAC7BrH,SAAUvC,KAAK6J,OACfnI,QAAS1B,KAAK+J,MACdnI,OAAQ5B,KAAK0J,KACblH,KAAMxC,KAAKwC,KACXzB,MAAOf,KAAKkH,KAAKnG,MACjBuB,oBAAqBtC,KAAKkH,KAAK5E,oBAC/BD,wBAAyBrC,KAAKkH,KAAK7E,wBACnCF,kBAAmBoE,IACnBrE,UAAW0O,EAAYzC,YACvB1L,OAAQzC,KAAKkH,KAAKzE,OAClBT,IAAKhC,KAAK6L,UAxBHpO,EAAE+I,EAAmB,CAC1Bb,KAAM5B,EACNvB,KAAMxC,KAAKwC,KACXoD,UAAWgL,EAAYhL,aAyB7BpE,EAAO+H,QAAU,WACf,IAAIsH,EAAU7Q,KAEdA,KAAKyJ,eAAe,CAClBS,aAAa,EACbpH,uBAAwB,IAE1B,IAAIvD,EAASS,KAAKkH,KAAK3H,OAEnBA,GACFS,KAAK8Q,MAAMvR,EAAQS,MAGjBA,KAAKmH,eACPnH,KAAKoM,qBAELpM,KAAKmH,aAAa4J,eAAiB,WAGjC,GAFAF,EAAQzE,qBAEJyE,EAAQhF,OAAQ,CAClB,IAAImF,GAAgB,EAEhBC,EAAwBJ,EAAQ3C,iBAChC9L,EAAe6O,EAAsB7O,aACrC4C,EAAkBiM,EAAsBjM,gBAE5C5C,EAAa6J,SAAQ,SAAU3G,GACzBN,IAAoBM,EAAYC,WAClCyL,GAAgB,MAIhBA,IACFH,EAAQnH,OAERmH,EAAQ1R,aAOlBqC,EAAO0P,UAAY,WACblR,KAAK6L,QACP7L,KAAK0J,OAGP1J,KAAKmR,WAGAnK,EA/nBuC,CAgoB9Cd,GAASL,EAAOuL,QAAU,SAAUtL","file":"static/js/9.a413d252.chunk.js","sourcesContent":["var _require = require('preact'),\n h = _require.h;\n\nmodule.exports = function (props) {\n return h(\"svg\", {\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n fill: \"#0097DC\",\n width: \"66\",\n height: \"55\",\n viewBox: \"0 0 66 55\"\n }, h(\"path\", {\n d: \"M57.3 8.433c4.59 0 8.1 3.51 8.1 8.1v29.7c0 4.59-3.51 8.1-8.1 8.1H8.7c-4.59 0-8.1-3.51-8.1-8.1v-29.7c0-4.59 3.51-8.1 8.1-8.1h9.45l4.59-7.02c.54-.54 1.35-1.08 2.16-1.08h16.2c.81 0 1.62.54 2.16 1.08l4.59 7.02h9.45zM33 14.64c-8.62 0-15.393 6.773-15.393 15.393 0 8.62 6.773 15.393 15.393 15.393 8.62 0 15.393-6.773 15.393-15.393 0-8.62-6.773-15.393-15.393-15.393zM33 40c-5.648 0-9.966-4.319-9.966-9.967 0-5.647 4.318-9.966 9.966-9.966s9.966 4.319 9.966 9.966C42.966 35.681 38.648 40 33 40z\",\n fillRule: \"evenodd\"\n }));\n};","// TODO Check which types are actually supported in browsers. Chrome likes webm\n// from my testing, but we may need more.\n// We could use a library but they tend to contain dozens of KBs of mappings,\n// most of which will go unused, so not sure if that's worth it.\nvar mimeToExtensions = {\n 'audio/mp3': 'mp3',\n 'audio/mp4': 'mp4',\n 'audio/ogg': 'ogg',\n 'audio/webm': 'webm',\n 'image/gif': 'gif',\n 'image/heic': 'heic',\n 'image/heif': 'heif',\n 'image/jpeg': 'jpg',\n 'image/png': 'png',\n 'image/svg+xml': 'svg',\n 'video/mp4': 'mp4',\n 'video/ogg': 'ogv',\n 'video/quicktime': 'mov',\n 'video/webm': 'webm',\n 'video/x-matroska': 'mkv',\n 'video/x-msvideo': 'avi'\n};\n\nmodule.exports = function getFileTypeExtension(mimeType) {\n // Remove the ; bit in 'video/x-matroska;codecs=avc1'\n mimeType = mimeType.replace(/;.*$/, '');\n return mimeToExtensions[mimeType] || null;\n};","var dataURItoBlob = require('./dataURItoBlob');\n/**\n * Save a <canvas> element's content to a Blob object.\n *\n * @param {HTMLCanvasElement} canvas\n * @returns {Promise}\n */\n\n\nmodule.exports = function canvasToBlob(canvas, type, quality) {\n if (canvas.toBlob) {\n return new Promise(function (resolve) {\n canvas.toBlob(resolve, type, quality);\n });\n }\n\n return Promise.resolve().then(function () {\n return dataURItoBlob(canvas.toDataURL(type, quality), {});\n });\n};","module.exports = function supportsMediaRecorder() {\n /* eslint-disable compat/compat */\n return typeof MediaRecorder === 'function' && !!MediaRecorder.prototype && typeof MediaRecorder.prototype.start === 'function';\n /* eslint-enable compat/compat */\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/* eslint-disable jsx-a11y/media-has-caption */\nvar _require = require('preact'),\n h = _require.h,\n Component = _require.Component;\n\nvar SnapshotButton = require('./SnapshotButton');\n\nvar RecordButton = require('./RecordButton');\n\nvar RecordingLength = require('./RecordingLength');\n\nvar VideoSourceSelect = require('./VideoSourceSelect');\n\nvar SubmitButton = require('./SubmitButton');\n\nvar DiscardButton = require('./DiscardButton');\n\nfunction isModeAvailable(modes, mode) {\n return modes.indexOf(mode) !== -1;\n}\n\nvar CameraScreen = /*#__PURE__*/function (_Component) {\n _inheritsLoose(CameraScreen, _Component);\n\n function CameraScreen() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = CameraScreen.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var onFocus = this.props.onFocus;\n onFocus();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var onStop = this.props.onStop;\n onStop();\n };\n\n _proto.render = function render() {\n var _this = this;\n\n var _this$props = this.props,\n src = _this$props.src,\n recordedVideo = _this$props.recordedVideo,\n recording = _this$props.recording,\n modes = _this$props.modes,\n supportsRecording = _this$props.supportsRecording,\n videoSources = _this$props.videoSources,\n showVideoSourceDropdown = _this$props.showVideoSourceDropdown,\n showRecordingLength = _this$props.showRecordingLength,\n onSubmit = _this$props.onSubmit,\n i18n = _this$props.i18n,\n mirror = _this$props.mirror,\n onSnapshot = _this$props.onSnapshot,\n onStartRecording = _this$props.onStartRecording,\n onStopRecording = _this$props.onStopRecording,\n onDiscardRecordedVideo = _this$props.onDiscardRecordedVideo,\n recordingLengthSeconds = _this$props.recordingLengthSeconds;\n var hasRecordedVideo = !!recordedVideo;\n var shouldShowRecordButton = !hasRecordedVideo && supportsRecording && (isModeAvailable(modes, 'video-only') || isModeAvailable(modes, 'audio-only') || isModeAvailable(modes, 'video-audio'));\n var shouldShowSnapshotButton = !hasRecordedVideo && isModeAvailable(modes, 'picture');\n var shouldShowRecordingLength = supportsRecording && showRecordingLength;\n var shouldShowVideoSourceDropdown = showVideoSourceDropdown && videoSources && videoSources.length > 1;\n var videoProps = {\n playsinline: true\n };\n\n if (recordedVideo) {\n videoProps.muted = false;\n videoProps.controls = true;\n videoProps.src = recordedVideo; // reset srcObject in dom. If not resetted, stream sticks in element\n\n if (this.videoElement) {\n this.videoElement.srcObject = undefined;\n }\n } else {\n videoProps.muted = true;\n videoProps.autoplay = true;\n videoProps.srcObject = src;\n }\n\n return h(\"div\", {\n className: \"uppy uppy-Webcam-container\"\n }, h(\"div\", {\n className: \"uppy-Webcam-videoContainer\"\n }, h(\"video\", _extends({\n /* eslint-disable-next-line no-return-assign */\n ref: function ref(videoElement) {\n return _this.videoElement = videoElement;\n },\n className: \"uppy-Webcam-video \" + (mirror ? 'uppy-Webcam-video--mirrored' : '')\n /* eslint-disable-next-line react/jsx-props-no-spreading */\n\n }, videoProps))), h(\"div\", {\n className: \"uppy-Webcam-footer\"\n }, h(\"div\", {\n className: \"uppy-Webcam-videoSourceContainer\"\n }, shouldShowVideoSourceDropdown ? VideoSourceSelect(this.props) : null), h(\"div\", {\n className: \"uppy-Webcam-buttonContainer\"\n }, shouldShowSnapshotButton && h(SnapshotButton, {\n onSnapshot: onSnapshot,\n i18n: i18n\n }), shouldShowRecordButton && h(RecordButton, {\n recording: recording,\n onStartRecording: onStartRecording,\n onStopRecording: onStopRecording,\n i18n: i18n\n }), hasRecordedVideo && h(SubmitButton, {\n onSubmit: onSubmit,\n i18n: i18n\n }), hasRecordedVideo && h(DiscardButton, {\n onDiscard: onDiscardRecordedVideo,\n i18n: i18n\n })), shouldShowRecordingLength && h(\"div\", {\n className: \"uppy-Webcam-recordingLength\"\n }, h(RecordingLength, {\n recordingLengthSeconds: recordingLengthSeconds,\n i18n: i18n\n }))));\n };\n\n return CameraScreen;\n}(Component);\n\nmodule.exports = CameraScreen;","var _require = require('preact'),\n h = _require.h;\n\nvar CameraIcon = require('./CameraIcon');\n\nmodule.exports = function (_ref) {\n var onSnapshot = _ref.onSnapshot,\n i18n = _ref.i18n;\n return h(\"button\", {\n className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--picture\",\n type: \"button\",\n title: i18n('takePicture'),\n \"aria-label\": i18n('takePicture'),\n onClick: onSnapshot,\n \"data-uppy-super-focusable\": true\n }, CameraIcon());\n};","var _require = require('preact'),\n h = _require.h;\n\nmodule.exports = function RecordButton(_ref) {\n var recording = _ref.recording,\n onStartRecording = _ref.onStartRecording,\n onStopRecording = _ref.onStopRecording,\n i18n = _ref.i18n;\n\n if (recording) {\n return h(\"button\", {\n className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button\",\n type: \"button\",\n title: i18n('stopRecording'),\n \"aria-label\": i18n('stopRecording'),\n onClick: onStopRecording,\n \"data-uppy-super-focusable\": true\n }, h(\"svg\", {\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n className: \"uppy-c-icon\",\n width: \"100\",\n height: \"100\",\n viewBox: \"0 0 100 100\"\n }, h(\"rect\", {\n x: \"15\",\n y: \"15\",\n width: \"70\",\n height: \"70\"\n })));\n }\n\n return h(\"button\", {\n className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button\",\n type: \"button\",\n title: i18n('startRecording'),\n \"aria-label\": i18n('startRecording'),\n onClick: onStartRecording,\n \"data-uppy-super-focusable\": true\n }, h(\"svg\", {\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n className: \"uppy-c-icon\",\n width: \"100\",\n height: \"100\",\n viewBox: \"0 0 100 100\"\n }, h(\"circle\", {\n cx: \"50\",\n cy: \"50\",\n r: \"40\"\n })));\n};","var _require = require('preact'),\n h = _require.h;\n\nvar formatSeconds = require('./formatSeconds');\n\nmodule.exports = function RecordingLength(_ref) {\n var recordingLengthSeconds = _ref.recordingLengthSeconds,\n i18n = _ref.i18n;\n var formattedRecordingLengthSeconds = formatSeconds(recordingLengthSeconds);\n return h(\"span\", {\n \"aria-label\": i18n('recordingLength', {\n recording_length: formattedRecordingLengthSeconds\n })\n }, formattedRecordingLengthSeconds);\n};","/**\n * Takes an Integer value of seconds (e.g. 83) and converts it into a human-readable formatted string (e.g. '1:23').\n *\n * @param {Integer} seconds\n * @returns {string} the formatted seconds (e.g. '1:23' for 1 minute and 23 seconds)\n *\n */\nmodule.exports = function formatSeconds(seconds) {\n return Math.floor(seconds / 60) + \":\" + String(seconds % 60).padStart(2, 0);\n};","var _require = require('preact'),\n h = _require.h;\n\nmodule.exports = function (_ref) {\n var currentDeviceId = _ref.currentDeviceId,\n videoSources = _ref.videoSources,\n onChangeVideoSource = _ref.onChangeVideoSource;\n return h(\"div\", {\n className: \"uppy-Webcam-videoSource\"\n }, h(\"select\", {\n className: \"uppy-u-reset uppy-Webcam-videoSource-select\",\n onChange: function onChange(event) {\n onChangeVideoSource(event.target.value);\n }\n }, videoSources.map(function (videoSource) {\n return h(\"option\", {\n key: videoSource.deviceId,\n value: videoSource.deviceId,\n selected: videoSource.deviceId === currentDeviceId\n }, videoSource.label);\n })));\n};","var _require = require('preact'),\n h = _require.h;\n\nfunction SubmitButton(_ref) {\n var onSubmit = _ref.onSubmit,\n i18n = _ref.i18n;\n return h(\"button\", {\n className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--submit\",\n type: \"button\",\n title: i18n('submitRecordedFile'),\n \"aria-label\": i18n('submitRecordedFile'),\n onClick: onSubmit,\n \"data-uppy-super-focusable\": true\n }, h(\"svg\", {\n width: \"12\",\n height: \"9\",\n viewBox: \"0 0 12 9\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n className: \"uppy-c-icon\"\n }, h(\"path\", {\n fill: \"#fff\",\n fillRule: \"nonzero\",\n d: \"M10.66 0L12 1.31 4.136 9 0 4.956l1.34-1.31L4.136 6.38z\"\n })));\n}\n\nmodule.exports = SubmitButton;","var _require = require('preact'),\n h = _require.h;\n\nfunction DiscardButton(_ref) {\n var onDiscard = _ref.onDiscard,\n i18n = _ref.i18n;\n return h(\"button\", {\n className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button\",\n type: \"button\",\n title: i18n('discardRecordedFile'),\n \"aria-label\": i18n('discardRecordedFile'),\n onClick: onDiscard,\n \"data-uppy-super-focusable\": true\n }, h(\"svg\", {\n width: \"13\",\n height: \"13\",\n viewBox: \"0 0 13 13\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n className: \"uppy-c-icon\"\n }, h(\"g\", {\n fill: \"#FFF\",\n fillRule: \"evenodd\"\n }, h(\"path\", {\n d: \"M.496 11.367L11.103.76l1.414 1.414L1.911 12.781z\"\n }), h(\"path\", {\n d: \"M11.104 12.782L.497 2.175 1.911.76l10.607 10.606z\"\n }))));\n}\n\nmodule.exports = DiscardButton;","var _require = require('preact'),\n h = _require.h;\n\nmodule.exports = function (props) {\n return h(\"div\", {\n className: \"uppy-Webcam-permissons\"\n }, h(\"div\", {\n className: \"uppy-Webcam-permissonsIcon\"\n }, props.icon()), h(\"h1\", {\n className: \"uppy-Webcam-title\"\n }, props.hasCamera ? props.i18n('allowAccessTitle') : props.i18n('noCameraTitle')), h(\"p\", null, props.hasCamera ? props.i18n('allowAccessDescription') : props.i18n('noCameraDescription')));\n};","var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar _require = require('preact'),\n h = _require.h;\n\nvar _require2 = require('@uppy/core'),\n Plugin = _require2.Plugin;\n\nvar Translator = require('@uppy/utils/lib/Translator');\n\nvar getFileTypeExtension = require('@uppy/utils/lib/getFileTypeExtension');\n\nvar mimeTypes = require('@uppy/utils/lib/mimeTypes');\n\nvar canvasToBlob = require('@uppy/utils/lib/canvasToBlob');\n\nvar supportsMediaRecorder = require('./supportsMediaRecorder');\n\nvar CameraIcon = require('./CameraIcon');\n\nvar CameraScreen = require('./CameraScreen');\n\nvar PermissionsScreen = require('./PermissionsScreen');\n/**\n * Normalize a MIME type or file extension into a MIME type.\n *\n * @param {string} fileType - MIME type or a file extension prefixed with `.`.\n * @returns {string|undefined} The MIME type or `undefined` if the fileType is an extension and is not known.\n */\n\n\nfunction toMimeType(fileType) {\n if (fileType[0] === '.') {\n return mimeTypes[fileType.slice(1)];\n }\n\n return fileType;\n}\n/**\n * Is this MIME type a video?\n *\n * @param {string} mimeType - MIME type.\n * @returns {boolean}\n */\n\n\nfunction isVideoMimeType(mimeType) {\n return /^video\\/[^*]+$/.test(mimeType);\n}\n/**\n * Is this MIME type an image?\n *\n * @param {string} mimeType - MIME type.\n * @returns {boolean}\n */\n\n\nfunction isImageMimeType(mimeType) {\n return /^image\\/[^*]+$/.test(mimeType);\n}\n/**\n * Setup getUserMedia, with polyfill for older browsers\n * Adapted from: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n */\n\n\nfunction getMediaDevices() {\n // eslint-disable-next-line compat/compat\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // eslint-disable-next-line compat/compat\n return navigator.mediaDevices;\n }\n\n var _getUserMedia = navigator.mozGetUserMedia || navigator.webkitGetUserMedia;\n\n if (!_getUserMedia) {\n return null;\n }\n\n return {\n getUserMedia: function getUserMedia(opts) {\n return new Promise(function (resolve, reject) {\n _getUserMedia.call(navigator, opts, resolve, reject);\n });\n }\n };\n}\n/**\n * Webcam\n */\n\n\nmodule.exports = (_temp = _class = /*#__PURE__*/function (_Plugin) {\n _inheritsLoose(Webcam, _Plugin);\n\n // eslint-disable-next-line global-require\n function Webcam(uppy, opts) {\n var _this;\n\n _this = _Plugin.call(this, uppy, opts) || this;\n _this.mediaDevices = getMediaDevices();\n _this.supportsUserMedia = !!_this.mediaDevices; // eslint-disable-next-line no-restricted-globals\n\n _this.protocol = location.protocol.match(/https/i) ? 'https' : 'http';\n _this.id = _this.opts.id || 'Webcam';\n _this.title = _this.opts.title || 'Camera';\n _this.type = 'acquirer';\n _this.capturedMediaFile = null;\n\n _this.icon = function () {\n return h(\"svg\", {\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n width: \"32\",\n height: \"32\",\n viewBox: \"0 0 32 32\"\n }, h(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, h(\"rect\", {\n className: \"uppy-ProviderIconBg\",\n fill: \"#03BFEF\",\n width: \"32\",\n height: \"32\",\n rx: \"16\"\n }), h(\"path\", {\n d: \"M22 11c1.133 0 2 .867 2 2v7.333c0 1.134-.867 2-2 2H10c-1.133 0-2-.866-2-2V13c0-1.133.867-2 2-2h2.333l1.134-1.733C13.6 9.133 13.8 9 14 9h4c.2 0 .4.133.533.267L19.667 11H22zm-6 1.533a3.764 3.764 0 0 0-3.8 3.8c0 2.129 1.672 3.801 3.8 3.801s3.8-1.672 3.8-3.8c0-2.13-1.672-3.801-3.8-3.801zm0 6.261c-1.395 0-2.46-1.066-2.46-2.46 0-1.395 1.065-2.461 2.46-2.461s2.46 1.066 2.46 2.46c0 1.395-1.065 2.461-2.46 2.461z\",\n fill: \"#FFF\",\n fillRule: \"nonzero\"\n })));\n };\n\n _this.defaultLocale = {\n strings: {\n smile: 'Smile!',\n takePicture: 'Take a picture',\n startRecording: 'Begin video recording',\n stopRecording: 'Stop video recording',\n allowAccessTitle: 'Please allow access to your camera',\n allowAccessDescription: 'In order to take pictures or record video with your camera, please allow camera access for this site.',\n noCameraTitle: 'Camera Not Available',\n noCameraDescription: 'In order to take pictures or record video, please connect a camera device',\n recordingStoppedMaxSize: 'Recording stopped because the file size is about to exceed the limit',\n recordingLength: 'Recording length %{recording_length}',\n submitRecordedFile: 'Submit recorded file',\n discardRecordedFile: 'Discard recorded file'\n }\n }; // set default options\n\n var defaultOptions = {\n onBeforeSnapshot: function onBeforeSnapshot() {\n return Promise.resolve();\n },\n countdown: false,\n modes: ['video-audio', 'video-only', 'audio-only', 'picture'],\n mirror: true,\n showVideoSourceDropdown: false,\n facingMode: 'user',\n preferredImageMimeType: null,\n preferredVideoMimeType: null,\n showRecordingLength: false\n };\n _this.opts = _extends({}, defaultOptions, opts);\n\n _this.i18nInit();\n\n _this.install = _this.install.bind(_assertThisInitialized(_this));\n _this.setPluginState = _this.setPluginState.bind(_assertThisInitialized(_this));\n _this.render = _this.render.bind(_assertThisInitialized(_this)); // Camera controls\n\n _this.start = _this.start.bind(_assertThisInitialized(_this));\n _this.stop = _this.stop.bind(_assertThisInitialized(_this));\n _this.takeSnapshot = _this.takeSnapshot.bind(_assertThisInitialized(_this));\n _this.startRecording = _this.startRecording.bind(_assertThisInitialized(_this));\n _this.stopRecording = _this.stopRecording.bind(_assertThisInitialized(_this));\n _this.discardRecordedVideo = _this.discardRecordedVideo.bind(_assertThisInitialized(_this));\n _this.submit = _this.submit.bind(_assertThisInitialized(_this));\n _this.oneTwoThreeSmile = _this.oneTwoThreeSmile.bind(_assertThisInitialized(_this));\n _this.focus = _this.focus.bind(_assertThisInitialized(_this));\n _this.changeVideoSource = _this.changeVideoSource.bind(_assertThisInitialized(_this));\n _this.webcamActive = false;\n\n if (_this.opts.countdown) {\n _this.opts.onBeforeSnapshot = _this.oneTwoThreeSmile;\n }\n\n _this.setPluginState({\n hasCamera: false,\n cameraReady: false,\n cameraError: null,\n recordingLengthSeconds: 0,\n videoSources: [],\n currentDeviceId: null\n });\n\n return _this;\n }\n\n var _proto = Webcam.prototype;\n\n _proto.setOptions = function setOptions(newOpts) {\n _Plugin.prototype.setOptions.call(this, _extends({}, newOpts, {\n videoConstraints: _extends({}, this.opts.videoConstraints, newOpts == null ? void 0 : newOpts.videoConstraints)\n }));\n\n this.i18nInit();\n };\n\n _proto.i18nInit = function i18nInit() {\n this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n this.i18n = this.translator.translate.bind(this.translator);\n this.i18nArray = this.translator.translateArray.bind(this.translator);\n this.setPluginState(); // so that UI re-renders and we see the updated locale\n };\n\n _proto.hasCameraCheck = function hasCameraCheck() {\n if (!this.mediaDevices) {\n return Promise.resolve(false);\n }\n\n return this.mediaDevices.enumerateDevices().then(function (devices) {\n return devices.some(function (device) {\n return device.kind === 'videoinput';\n });\n });\n };\n\n _proto.isAudioOnly = function isAudioOnly() {\n return this.opts.modes.length === 1 && this.opts.modes[0] === 'audio-only';\n };\n\n _proto.getConstraints = function getConstraints(deviceId) {\n var _this$opts$videoConst;\n\n if (deviceId === void 0) {\n deviceId = null;\n }\n\n var acceptsAudio = this.opts.modes.indexOf('video-audio') !== -1 || this.opts.modes.indexOf('audio-only') !== -1;\n var acceptsVideo = !this.isAudioOnly() && (this.opts.modes.indexOf('video-audio') !== -1 || this.opts.modes.indexOf('video-only') !== -1 || this.opts.modes.indexOf('picture') !== -1);\n\n var videoConstraints = _extends({}, (_this$opts$videoConst = this.opts.videoConstraints) != null ? _this$opts$videoConst : {\n facingMode: this.opts.facingMode\n }, deviceId ? {\n deviceId: deviceId,\n facingMode: null\n } : {});\n\n return {\n audio: acceptsAudio,\n video: acceptsVideo ? videoConstraints : false\n };\n } // eslint-disable-next-line consistent-return\n ;\n\n _proto.start = function start(options) {\n var _this2 = this;\n\n if (options === void 0) {\n options = null;\n }\n\n if (!this.supportsUserMedia) {\n return Promise.reject(new Error('Webcam access not supported'));\n }\n\n this.webcamActive = true;\n this.opts.mirror = true;\n var constraints = this.getConstraints(options && options.deviceId ? options.deviceId : null);\n this.hasCameraCheck().then(function (hasCamera) {\n _this2.setPluginState({\n hasCamera: hasCamera\n }); // ask user for access to their camera\n\n\n return _this2.mediaDevices.getUserMedia(constraints).then(function (stream) {\n _this2.stream = stream;\n var currentDeviceId = null;\n var tracks = _this2.isAudioOnly() ? stream.getAudioTracks() : stream.getVideoTracks();\n\n if (!options || !options.deviceId) {\n currentDeviceId = tracks[0].getSettings().deviceId;\n } else {\n tracks.forEach(function (track) {\n if (track.getSettings().deviceId === options.deviceId) {\n currentDeviceId = track.getSettings().deviceId;\n }\n });\n } // Update the sources now, so we can access the names.\n\n\n _this2.updateVideoSources();\n\n _this2.setPluginState({\n currentDeviceId: currentDeviceId,\n cameraReady: true\n });\n }).catch(function (err) {\n _this2.setPluginState({\n cameraReady: false,\n cameraError: err\n });\n\n _this2.uppy.info(err.message, 'error');\n });\n });\n }\n /**\n * @returns {object}\n */\n ;\n\n _proto.getMediaRecorderOptions = function getMediaRecorderOptions() {\n var options = {}; // Try to use the `opts.preferredVideoMimeType` or one of the `allowedFileTypes` for the recording.\n // If the browser doesn't support it, we'll fall back to the browser default instead.\n // Safari doesn't have the `isTypeSupported` API.\n\n if (MediaRecorder.isTypeSupported) {\n var restrictions = this.uppy.opts.restrictions;\n var preferredVideoMimeTypes = [];\n\n if (this.opts.preferredVideoMimeType) {\n preferredVideoMimeTypes = [this.opts.preferredVideoMimeType];\n } else if (restrictions.allowedFileTypes) {\n preferredVideoMimeTypes = restrictions.allowedFileTypes.map(toMimeType).filter(isVideoMimeType);\n }\n\n var filterSupportedTypes = function filterSupportedTypes(candidateType) {\n return MediaRecorder.isTypeSupported(candidateType) && getFileTypeExtension(candidateType);\n };\n\n var acceptableMimeTypes = preferredVideoMimeTypes.filter(filterSupportedTypes);\n\n if (acceptableMimeTypes.length > 0) {\n // eslint-disable-next-line prefer-destructuring\n options.mimeType = acceptableMimeTypes[0];\n }\n }\n\n return options;\n };\n\n _proto.startRecording = function startRecording() {\n var _this3 = this;\n\n // only used if supportsMediaRecorder() returned true\n // eslint-disable-next-line compat/compat\n this.recorder = new MediaRecorder(this.stream, this.getMediaRecorderOptions());\n this.recordingChunks = [];\n var stoppingBecauseOfMaxSize = false;\n this.recorder.addEventListener('dataavailable', function (event) {\n _this3.recordingChunks.push(event.data);\n\n var restrictions = _this3.uppy.opts.restrictions;\n\n if (_this3.recordingChunks.length > 1 && restrictions.maxFileSize != null && !stoppingBecauseOfMaxSize) {\n var totalSize = _this3.recordingChunks.reduce(function (acc, chunk) {\n return acc + chunk.size;\n }, 0); // Exclude the initial chunk from the average size calculation because it is likely to be a very small outlier\n\n\n var averageChunkSize = (totalSize - _this3.recordingChunks[0].size) / (_this3.recordingChunks.length - 1);\n var expectedEndChunkSize = averageChunkSize * 3;\n var maxSize = Math.max(0, restrictions.maxFileSize - expectedEndChunkSize);\n\n if (totalSize > maxSize) {\n stoppingBecauseOfMaxSize = true;\n\n _this3.uppy.info(_this3.i18n('recordingStoppedMaxSize'), 'warning', 4000);\n\n _this3.stopRecording();\n }\n }\n }); // use a \"time slice\" of 500ms: ondataavailable will be called each 500ms\n // smaller time slices mean we can more accurately check the max file size restriction\n\n this.recorder.start(500);\n\n if (this.opts.showRecordingLength) {\n // Start the recordingLengthTimer if we are showing the recording length.\n this.recordingLengthTimer = setInterval(function () {\n var currentRecordingLength = _this3.getPluginState().recordingLengthSeconds;\n\n _this3.setPluginState({\n recordingLengthSeconds: currentRecordingLength + 1\n });\n }, 1000);\n }\n\n this.setPluginState({\n isRecording: true\n });\n };\n\n _proto.stopRecording = function stopRecording() {\n var _this4 = this;\n\n var stopped = new Promise(function (resolve) {\n _this4.recorder.addEventListener('stop', function () {\n resolve();\n });\n\n _this4.recorder.stop();\n\n if (_this4.opts.showRecordingLength) {\n // Stop the recordingLengthTimer if we are showing the recording length.\n clearInterval(_this4.recordingLengthTimer);\n\n _this4.setPluginState({\n recordingLengthSeconds: 0\n });\n }\n });\n return stopped.then(function () {\n _this4.setPluginState({\n isRecording: false\n });\n\n return _this4.getVideo();\n }).then(function (file) {\n try {\n _this4.capturedMediaFile = file; // create object url for capture result preview\n\n _this4.setPluginState({\n // eslint-disable-next-line compat/compat\n recordedVideo: URL.createObjectURL(file.data)\n });\n\n _this4.opts.mirror = false;\n } catch (err) {\n // Logging the error, exept restrictions, which is handled in Core\n if (!err.isRestriction) {\n _this4.uppy.log(err);\n }\n }\n }).then(function () {\n _this4.recordingChunks = null;\n _this4.recorder = null;\n }, function (error) {\n _this4.recordingChunks = null;\n _this4.recorder = null;\n throw error;\n });\n };\n\n _proto.discardRecordedVideo = function discardRecordedVideo() {\n this.setPluginState({\n recordedVideo: null\n });\n this.opts.mirror = true;\n this.capturedMediaFile = null;\n };\n\n _proto.submit = function submit() {\n try {\n if (this.capturedMediaFile) {\n this.uppy.addFile(this.capturedMediaFile);\n }\n } catch (err) {\n // Logging the error, exept restrictions, which is handled in Core\n if (!err.isRestriction) {\n this.uppy.log(err, 'error');\n }\n }\n };\n\n _proto.stop = function stop() {\n if (this.stream) {\n this.stream.getAudioTracks().forEach(function (track) {\n track.stop();\n });\n this.stream.getVideoTracks().forEach(function (track) {\n track.stop();\n });\n }\n\n this.webcamActive = false;\n this.stream = null;\n this.setPluginState({\n recordedVideo: null\n });\n };\n\n _proto.getVideoElement = function getVideoElement() {\n return this.el.querySelector('.uppy-Webcam-video');\n };\n\n _proto.oneTwoThreeSmile = function oneTwoThreeSmile() {\n var _this5 = this;\n\n return new Promise(function (resolve, reject) {\n var count = _this5.opts.countdown; // eslint-disable-next-line consistent-return\n\n var countDown = setInterval(function () {\n if (!_this5.webcamActive) {\n clearInterval(countDown);\n _this5.captureInProgress = false;\n return reject(new Error('Webcam is not active'));\n }\n\n if (count > 0) {\n _this5.uppy.info(count + \"...\", 'warning', 800);\n\n count--;\n } else {\n clearInterval(countDown);\n\n _this5.uppy.info(_this5.i18n('smile'), 'success', 1500);\n\n setTimeout(function () {\n return resolve();\n }, 1500);\n }\n }, 1000);\n });\n };\n\n _proto.takeSnapshot = function takeSnapshot() {\n var _this6 = this;\n\n if (this.captureInProgress) return;\n this.captureInProgress = true;\n this.opts.onBeforeSnapshot().catch(function (err) {\n var message = typeof err === 'object' ? err.message : err;\n\n _this6.uppy.info(message, 'error', 5000);\n\n return Promise.reject(new Error(\"onBeforeSnapshot: \" + message));\n }).then(function () {\n return _this6.getImage();\n }).then(function (tagFile) {\n _this6.captureInProgress = false;\n\n try {\n _this6.uppy.addFile(tagFile);\n } catch (err) {\n // Logging the error, except restrictions, which is handled in Core\n if (!err.isRestriction) {\n _this6.uppy.log(err);\n }\n }\n }, function (error) {\n _this6.captureInProgress = false;\n throw error;\n });\n };\n\n _proto.getImage = function getImage() {\n var _this7 = this;\n\n var video = this.getVideoElement();\n\n if (!video) {\n return Promise.reject(new Error('No video element found, likely due to the Webcam tab being closed.'));\n }\n\n var width = video.videoWidth;\n var height = video.videoHeight;\n var canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n var ctx = canvas.getContext('2d');\n ctx.drawImage(video, 0, 0);\n var restrictions = this.uppy.opts.restrictions;\n var preferredImageMimeTypes = [];\n\n if (this.opts.preferredImageMimeType) {\n preferredImageMimeTypes = [this.opts.preferredImageMimeType];\n } else if (restrictions.allowedFileTypes) {\n preferredImageMimeTypes = restrictions.allowedFileTypes.map(toMimeType).filter(isImageMimeType);\n }\n\n var mimeType = preferredImageMimeTypes[0] || 'image/jpeg';\n var ext = getFileTypeExtension(mimeType) || 'jpg';\n var name = \"cam-\" + Date.now() + \".\" + ext;\n return canvasToBlob(canvas, mimeType).then(function (blob) {\n return {\n source: _this7.id,\n name: name,\n data: new Blob([blob], {\n type: mimeType\n }),\n type: mimeType\n };\n });\n };\n\n _proto.getVideo = function getVideo() {\n // Sometimes in iOS Safari, Blobs (especially the first Blob in the recordingChunks Array)\n // have empty 'type' attributes (e.g. '') so we need to find a Blob that has a defined 'type'\n // attribute in order to determine the correct MIME type.\n var mimeType = this.recordingChunks.find(function (blob) {\n var _blob$type;\n\n return ((_blob$type = blob.type) == null ? void 0 : _blob$type.length) > 0;\n }).type;\n var fileExtension = getFileTypeExtension(mimeType);\n\n if (!fileExtension) {\n return Promise.reject(new Error(\"Could not retrieve recording: Unsupported media type \\\"\" + mimeType + \"\\\"\"));\n }\n\n var name = \"webcam-\" + Date.now() + \".\" + fileExtension;\n var blob = new Blob(this.recordingChunks, {\n type: mimeType\n });\n var file = {\n source: this.id,\n name: name,\n data: new Blob([blob], {\n type: mimeType\n }),\n type: mimeType\n };\n return Promise.resolve(file);\n };\n\n _proto.focus = function focus() {\n var _this8 = this;\n\n if (!this.opts.countdown) return;\n setTimeout(function () {\n _this8.uppy.info(_this8.i18n('smile'), 'success', 1500);\n }, 1000);\n };\n\n _proto.changeVideoSource = function changeVideoSource(deviceId) {\n this.stop();\n this.start({\n deviceId: deviceId\n });\n };\n\n _proto.updateVideoSources = function updateVideoSources() {\n var _this9 = this;\n\n this.mediaDevices.enumerateDevices().then(function (devices) {\n _this9.setPluginState({\n videoSources: devices.filter(function (device) {\n return device.kind === 'videoinput';\n })\n });\n });\n };\n\n _proto.render = function render() {\n if (!this.webcamActive) {\n this.start();\n }\n\n var webcamState = this.getPluginState();\n\n if (!webcamState.cameraReady || !webcamState.hasCamera) {\n return h(PermissionsScreen, {\n icon: CameraIcon,\n i18n: this.i18n,\n hasCamera: webcamState.hasCamera\n });\n }\n\n return h(CameraScreen // eslint-disable-next-line react/jsx-props-no-spreading\n , _extends({}, webcamState, {\n onChangeVideoSource: this.changeVideoSource,\n onSnapshot: this.takeSnapshot,\n onStartRecording: this.startRecording,\n onStopRecording: this.stopRecording,\n onDiscardRecordedVideo: this.discardRecordedVideo,\n onSubmit: this.submit,\n onFocus: this.focus,\n onStop: this.stop,\n i18n: this.i18n,\n modes: this.opts.modes,\n showRecordingLength: this.opts.showRecordingLength,\n showVideoSourceDropdown: this.opts.showVideoSourceDropdown,\n supportsRecording: supportsMediaRecorder(),\n recording: webcamState.isRecording,\n mirror: this.opts.mirror,\n src: this.stream\n }));\n };\n\n _proto.install = function install() {\n var _this10 = this;\n\n this.setPluginState({\n cameraReady: false,\n recordingLengthSeconds: 0\n });\n var target = this.opts.target;\n\n if (target) {\n this.mount(target, this);\n }\n\n if (this.mediaDevices) {\n this.updateVideoSources();\n\n this.mediaDevices.ondevicechange = function () {\n _this10.updateVideoSources();\n\n if (_this10.stream) {\n var restartStream = true;\n\n var _this10$getPluginStat = _this10.getPluginState(),\n videoSources = _this10$getPluginStat.videoSources,\n currentDeviceId = _this10$getPluginStat.currentDeviceId;\n\n videoSources.forEach(function (videoSource) {\n if (currentDeviceId === videoSource.deviceId) {\n restartStream = false;\n }\n });\n\n if (restartStream) {\n _this10.stop();\n\n _this10.start();\n }\n }\n };\n }\n };\n\n _proto.uninstall = function uninstall() {\n if (this.stream) {\n this.stop();\n }\n\n this.unmount();\n };\n\n return Webcam;\n}(Plugin), _class.VERSION = \"1.8.13\", _temp);"],"sourceRoot":""}
1
+ {"version":3,"sources":["../../../node_modules/@uppy/webcam/lib/CameraIcon.js","../../../node_modules/@uppy/utils/lib/getFileTypeExtension.js","../../../node_modules/@uppy/utils/lib/canvasToBlob.js","../../../node_modules/@uppy/webcam/lib/supportsMediaRecorder.js","../../../node_modules/@uppy/webcam/lib/CameraScreen.js","../../../node_modules/@uppy/webcam/lib/SnapshotButton.js","../../../node_modules/@uppy/webcam/lib/RecordButton.js","../../../node_modules/@uppy/webcam/lib/RecordingLength.js","../../../node_modules/@uppy/webcam/lib/formatSeconds.js","../../../node_modules/@uppy/webcam/lib/VideoSourceSelect.js","../../../node_modules/@uppy/webcam/lib/SubmitButton.js","../../../node_modules/@uppy/webcam/lib/DiscardButton.js","../../../node_modules/@uppy/webcam/lib/PermissionsScreen.js","../../../node_modules/@uppy/webcam/lib/index.js"],"names":["h","require","module","exports","props","focusable","fill","width","height","viewBox","d","fillRule","mimeToExtensions","mimeType","replace","dataURItoBlob","canvas","type","quality","toBlob","Promise","resolve","then","toDataURL","MediaRecorder","prototype","start","_extends","Object","assign","target","i","arguments","length","source","key","hasOwnProperty","call","apply","this","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_require","Component","SnapshotButton","RecordButton","RecordingLength","VideoSourceSelect","SubmitButton","DiscardButton","isModeAvailable","modes","mode","indexOf","CameraScreen","_Component","subClass","superClass","create","constructor","_proto","componentDidMount","onFocus","componentWillUnmount","onStop","render","_this","_this$props","src","recordedVideo","recording","supportsRecording","videoSources","showVideoSourceDropdown","showRecordingLength","onSubmit","i18n","mirror","onSnapshot","onStartRecording","onStopRecording","onDiscardRecordedVideo","recordingLengthSeconds","hasRecordedVideo","shouldShowRecordButton","shouldShowSnapshotButton","shouldShowRecordingLength","shouldShowVideoSourceDropdown","videoProps","playsinline","muted","controls","videoElement","srcObject","undefined","autoplay","className","ref","onDiscard","CameraIcon","_ref","title","onClick","x","y","cx","cy","r","formatSeconds","formattedRecordingLengthSeconds","recording_length","seconds","Math","floor","String","padStart","currentDeviceId","onChangeVideoSource","onChange","event","value","map","videoSource","deviceId","selected","label","xmlns","icon","hasCamera","_class","_temp","_assertThisInitialized","self","ReferenceError","Plugin","Translator","getFileTypeExtension","mimeTypes","canvasToBlob","supportsMediaRecorder","PermissionsScreen","toMimeType","fileType","slice","isVideoMimeType","test","isImageMimeType","_Plugin","Webcam","uppy","opts","mediaDevices","navigator","getUserMedia","_getUserMedia","mozGetUserMedia","webkitGetUserMedia","reject","getMediaDevices","supportsUserMedia","protocol","location","match","id","capturedMediaFile","rx","defaultLocale","strings","smile","takePicture","startRecording","stopRecording","allowAccessTitle","allowAccessDescription","noCameraTitle","noCameraDescription","recordingStoppedMaxSize","recordingLength","submitRecordedFile","discardRecordedFile","defaultOptions","onBeforeSnapshot","countdown","facingMode","preferredImageMimeType","preferredVideoMimeType","i18nInit","install","bind","setPluginState","stop","takeSnapshot","discardRecordedVideo","submit","oneTwoThreeSmile","focus","changeVideoSource","webcamActive","cameraReady","cameraError","setOptions","newOpts","videoConstraints","translator","locale","translate","i18nArray","translateArray","hasCameraCheck","enumerateDevices","devices","some","device","kind","isAudioOnly","getConstraints","_this$opts$videoConst","acceptsAudio","acceptsVideo","audio","video","options","_this2","Error","constraints","stream","tracks","getAudioTracks","getVideoTracks","forEach","track","getSettings","updateVideoSources","err","info","message","getMediaRecorderOptions","isTypeSupported","restrictions","preferredVideoMimeTypes","allowedFileTypes","filter","acceptableMimeTypes","candidateType","_this3","recorder","recordingChunks","stoppingBecauseOfMaxSize","addEventListener","push","data","maxFileSize","totalSize","reduce","acc","chunk","size","expectedEndChunkSize","max","recordingLengthTimer","setInterval","currentRecordingLength","getPluginState","isRecording","_this4","clearInterval","getVideo","file","URL","createObjectURL","isRestriction","log","error","addFile","getVideoElement","el","querySelector","_this5","count","countDown","captureInProgress","setTimeout","_this6","getImage","tagFile","_this7","videoWidth","videoHeight","document","createElement","getContext","drawImage","preferredImageMimeTypes","ext","name","Date","now","blob","Blob","find","_blob$type","fileExtension","_this8","_this9","webcamState","_this10","mount","ondevicechange","restartStream","_this10$getPluginStat","uninstall","unmount","VERSION"],"mappings":"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","file":"static/js/7.fbca3b10.chunk.js","sourcesContent":["var _require = require('preact'),\n h = _require.h;\n\nmodule.exports = function (props) {\n return h(\"svg\", {\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n fill: \"#0097DC\",\n width: \"66\",\n height: \"55\",\n viewBox: \"0 0 66 55\"\n }, h(\"path\", {\n d: \"M57.3 8.433c4.59 0 8.1 3.51 8.1 8.1v29.7c0 4.59-3.51 8.1-8.1 8.1H8.7c-4.59 0-8.1-3.51-8.1-8.1v-29.7c0-4.59 3.51-8.1 8.1-8.1h9.45l4.59-7.02c.54-.54 1.35-1.08 2.16-1.08h16.2c.81 0 1.62.54 2.16 1.08l4.59 7.02h9.45zM33 14.64c-8.62 0-15.393 6.773-15.393 15.393 0 8.62 6.773 15.393 15.393 15.393 8.62 0 15.393-6.773 15.393-15.393 0-8.62-6.773-15.393-15.393-15.393zM33 40c-5.648 0-9.966-4.319-9.966-9.967 0-5.647 4.318-9.966 9.966-9.966s9.966 4.319 9.966 9.966C42.966 35.681 38.648 40 33 40z\",\n fillRule: \"evenodd\"\n }));\n};","// TODO Check which types are actually supported in browsers. Chrome likes webm\n// from my testing, but we may need more.\n// We could use a library but they tend to contain dozens of KBs of mappings,\n// most of which will go unused, so not sure if that's worth it.\nvar mimeToExtensions = {\n 'audio/mp3': 'mp3',\n 'audio/mp4': 'mp4',\n 'audio/ogg': 'ogg',\n 'audio/webm': 'webm',\n 'image/gif': 'gif',\n 'image/heic': 'heic',\n 'image/heif': 'heif',\n 'image/jpeg': 'jpg',\n 'image/png': 'png',\n 'image/svg+xml': 'svg',\n 'video/mp4': 'mp4',\n 'video/ogg': 'ogv',\n 'video/quicktime': 'mov',\n 'video/webm': 'webm',\n 'video/x-matroska': 'mkv',\n 'video/x-msvideo': 'avi'\n};\n\nmodule.exports = function getFileTypeExtension(mimeType) {\n // Remove the ; bit in 'video/x-matroska;codecs=avc1'\n mimeType = mimeType.replace(/;.*$/, '');\n return mimeToExtensions[mimeType] || null;\n};","var dataURItoBlob = require('./dataURItoBlob');\n/**\n * Save a <canvas> element's content to a Blob object.\n *\n * @param {HTMLCanvasElement} canvas\n * @returns {Promise}\n */\n\n\nmodule.exports = function canvasToBlob(canvas, type, quality) {\n if (canvas.toBlob) {\n return new Promise(function (resolve) {\n canvas.toBlob(resolve, type, quality);\n });\n }\n\n return Promise.resolve().then(function () {\n return dataURItoBlob(canvas.toDataURL(type, quality), {});\n });\n};","module.exports = function supportsMediaRecorder() {\n /* eslint-disable compat/compat */\n return typeof MediaRecorder === 'function' && !!MediaRecorder.prototype && typeof MediaRecorder.prototype.start === 'function';\n /* eslint-enable compat/compat */\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/* eslint-disable jsx-a11y/media-has-caption */\nvar _require = require('preact'),\n h = _require.h,\n Component = _require.Component;\n\nvar SnapshotButton = require('./SnapshotButton');\n\nvar RecordButton = require('./RecordButton');\n\nvar RecordingLength = require('./RecordingLength');\n\nvar VideoSourceSelect = require('./VideoSourceSelect');\n\nvar SubmitButton = require('./SubmitButton');\n\nvar DiscardButton = require('./DiscardButton');\n\nfunction isModeAvailable(modes, mode) {\n return modes.indexOf(mode) !== -1;\n}\n\nvar CameraScreen = /*#__PURE__*/function (_Component) {\n _inheritsLoose(CameraScreen, _Component);\n\n function CameraScreen() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = CameraScreen.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var onFocus = this.props.onFocus;\n onFocus();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var onStop = this.props.onStop;\n onStop();\n };\n\n _proto.render = function render() {\n var _this = this;\n\n var _this$props = this.props,\n src = _this$props.src,\n recordedVideo = _this$props.recordedVideo,\n recording = _this$props.recording,\n modes = _this$props.modes,\n supportsRecording = _this$props.supportsRecording,\n videoSources = _this$props.videoSources,\n showVideoSourceDropdown = _this$props.showVideoSourceDropdown,\n showRecordingLength = _this$props.showRecordingLength,\n onSubmit = _this$props.onSubmit,\n i18n = _this$props.i18n,\n mirror = _this$props.mirror,\n onSnapshot = _this$props.onSnapshot,\n onStartRecording = _this$props.onStartRecording,\n onStopRecording = _this$props.onStopRecording,\n onDiscardRecordedVideo = _this$props.onDiscardRecordedVideo,\n recordingLengthSeconds = _this$props.recordingLengthSeconds;\n var hasRecordedVideo = !!recordedVideo;\n var shouldShowRecordButton = !hasRecordedVideo && supportsRecording && (isModeAvailable(modes, 'video-only') || isModeAvailable(modes, 'audio-only') || isModeAvailable(modes, 'video-audio'));\n var shouldShowSnapshotButton = !hasRecordedVideo && isModeAvailable(modes, 'picture');\n var shouldShowRecordingLength = supportsRecording && showRecordingLength;\n var shouldShowVideoSourceDropdown = showVideoSourceDropdown && videoSources && videoSources.length > 1;\n var videoProps = {\n playsinline: true\n };\n\n if (recordedVideo) {\n videoProps.muted = false;\n videoProps.controls = true;\n videoProps.src = recordedVideo; // reset srcObject in dom. If not resetted, stream sticks in element\n\n if (this.videoElement) {\n this.videoElement.srcObject = undefined;\n }\n } else {\n videoProps.muted = true;\n videoProps.autoplay = true;\n videoProps.srcObject = src;\n }\n\n return h(\"div\", {\n className: \"uppy uppy-Webcam-container\"\n }, h(\"div\", {\n className: \"uppy-Webcam-videoContainer\"\n }, h(\"video\", _extends({\n /* eslint-disable-next-line no-return-assign */\n ref: function ref(videoElement) {\n return _this.videoElement = videoElement;\n },\n className: \"uppy-Webcam-video \" + (mirror ? 'uppy-Webcam-video--mirrored' : '')\n /* eslint-disable-next-line react/jsx-props-no-spreading */\n\n }, videoProps))), h(\"div\", {\n className: \"uppy-Webcam-footer\"\n }, h(\"div\", {\n className: \"uppy-Webcam-videoSourceContainer\"\n }, shouldShowVideoSourceDropdown ? VideoSourceSelect(this.props) : null), h(\"div\", {\n className: \"uppy-Webcam-buttonContainer\"\n }, shouldShowSnapshotButton && h(SnapshotButton, {\n onSnapshot: onSnapshot,\n i18n: i18n\n }), shouldShowRecordButton && h(RecordButton, {\n recording: recording,\n onStartRecording: onStartRecording,\n onStopRecording: onStopRecording,\n i18n: i18n\n }), hasRecordedVideo && h(SubmitButton, {\n onSubmit: onSubmit,\n i18n: i18n\n }), hasRecordedVideo && h(DiscardButton, {\n onDiscard: onDiscardRecordedVideo,\n i18n: i18n\n })), shouldShowRecordingLength && h(\"div\", {\n className: \"uppy-Webcam-recordingLength\"\n }, h(RecordingLength, {\n recordingLengthSeconds: recordingLengthSeconds,\n i18n: i18n\n }))));\n };\n\n return CameraScreen;\n}(Component);\n\nmodule.exports = CameraScreen;","var _require = require('preact'),\n h = _require.h;\n\nvar CameraIcon = require('./CameraIcon');\n\nmodule.exports = function (_ref) {\n var onSnapshot = _ref.onSnapshot,\n i18n = _ref.i18n;\n return h(\"button\", {\n className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--picture\",\n type: \"button\",\n title: i18n('takePicture'),\n \"aria-label\": i18n('takePicture'),\n onClick: onSnapshot,\n \"data-uppy-super-focusable\": true\n }, CameraIcon());\n};","var _require = require('preact'),\n h = _require.h;\n\nmodule.exports = function RecordButton(_ref) {\n var recording = _ref.recording,\n onStartRecording = _ref.onStartRecording,\n onStopRecording = _ref.onStopRecording,\n i18n = _ref.i18n;\n\n if (recording) {\n return h(\"button\", {\n className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button\",\n type: \"button\",\n title: i18n('stopRecording'),\n \"aria-label\": i18n('stopRecording'),\n onClick: onStopRecording,\n \"data-uppy-super-focusable\": true\n }, h(\"svg\", {\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n className: \"uppy-c-icon\",\n width: \"100\",\n height: \"100\",\n viewBox: \"0 0 100 100\"\n }, h(\"rect\", {\n x: \"15\",\n y: \"15\",\n width: \"70\",\n height: \"70\"\n })));\n }\n\n return h(\"button\", {\n className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button\",\n type: \"button\",\n title: i18n('startRecording'),\n \"aria-label\": i18n('startRecording'),\n onClick: onStartRecording,\n \"data-uppy-super-focusable\": true\n }, h(\"svg\", {\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n className: \"uppy-c-icon\",\n width: \"100\",\n height: \"100\",\n viewBox: \"0 0 100 100\"\n }, h(\"circle\", {\n cx: \"50\",\n cy: \"50\",\n r: \"40\"\n })));\n};","var _require = require('preact'),\n h = _require.h;\n\nvar formatSeconds = require('./formatSeconds');\n\nmodule.exports = function RecordingLength(_ref) {\n var recordingLengthSeconds = _ref.recordingLengthSeconds,\n i18n = _ref.i18n;\n var formattedRecordingLengthSeconds = formatSeconds(recordingLengthSeconds);\n return h(\"span\", {\n \"aria-label\": i18n('recordingLength', {\n recording_length: formattedRecordingLengthSeconds\n })\n }, formattedRecordingLengthSeconds);\n};","/**\n * Takes an Integer value of seconds (e.g. 83) and converts it into a human-readable formatted string (e.g. '1:23').\n *\n * @param {Integer} seconds\n * @returns {string} the formatted seconds (e.g. '1:23' for 1 minute and 23 seconds)\n *\n */\nmodule.exports = function formatSeconds(seconds) {\n return Math.floor(seconds / 60) + \":\" + String(seconds % 60).padStart(2, 0);\n};","var _require = require('preact'),\n h = _require.h;\n\nmodule.exports = function (_ref) {\n var currentDeviceId = _ref.currentDeviceId,\n videoSources = _ref.videoSources,\n onChangeVideoSource = _ref.onChangeVideoSource;\n return h(\"div\", {\n className: \"uppy-Webcam-videoSource\"\n }, h(\"select\", {\n className: \"uppy-u-reset uppy-Webcam-videoSource-select\",\n onChange: function onChange(event) {\n onChangeVideoSource(event.target.value);\n }\n }, videoSources.map(function (videoSource) {\n return h(\"option\", {\n key: videoSource.deviceId,\n value: videoSource.deviceId,\n selected: videoSource.deviceId === currentDeviceId\n }, videoSource.label);\n })));\n};","var _require = require('preact'),\n h = _require.h;\n\nfunction SubmitButton(_ref) {\n var onSubmit = _ref.onSubmit,\n i18n = _ref.i18n;\n return h(\"button\", {\n className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--submit\",\n type: \"button\",\n title: i18n('submitRecordedFile'),\n \"aria-label\": i18n('submitRecordedFile'),\n onClick: onSubmit,\n \"data-uppy-super-focusable\": true\n }, h(\"svg\", {\n width: \"12\",\n height: \"9\",\n viewBox: \"0 0 12 9\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n className: \"uppy-c-icon\"\n }, h(\"path\", {\n fill: \"#fff\",\n fillRule: \"nonzero\",\n d: \"M10.66 0L12 1.31 4.136 9 0 4.956l1.34-1.31L4.136 6.38z\"\n })));\n}\n\nmodule.exports = SubmitButton;","var _require = require('preact'),\n h = _require.h;\n\nfunction DiscardButton(_ref) {\n var onDiscard = _ref.onDiscard,\n i18n = _ref.i18n;\n return h(\"button\", {\n className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button\",\n type: \"button\",\n title: i18n('discardRecordedFile'),\n \"aria-label\": i18n('discardRecordedFile'),\n onClick: onDiscard,\n \"data-uppy-super-focusable\": true\n }, h(\"svg\", {\n width: \"13\",\n height: \"13\",\n viewBox: \"0 0 13 13\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n className: \"uppy-c-icon\"\n }, h(\"g\", {\n fill: \"#FFF\",\n fillRule: \"evenodd\"\n }, h(\"path\", {\n d: \"M.496 11.367L11.103.76l1.414 1.414L1.911 12.781z\"\n }), h(\"path\", {\n d: \"M11.104 12.782L.497 2.175 1.911.76l10.607 10.606z\"\n }))));\n}\n\nmodule.exports = DiscardButton;","var _require = require('preact'),\n h = _require.h;\n\nmodule.exports = function (props) {\n return h(\"div\", {\n className: \"uppy-Webcam-permissons\"\n }, h(\"div\", {\n className: \"uppy-Webcam-permissonsIcon\"\n }, props.icon()), h(\"h1\", {\n className: \"uppy-Webcam-title\"\n }, props.hasCamera ? props.i18n('allowAccessTitle') : props.i18n('noCameraTitle')), h(\"p\", null, props.hasCamera ? props.i18n('allowAccessDescription') : props.i18n('noCameraDescription')));\n};","var _class, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar _require = require('preact'),\n h = _require.h;\n\nvar _require2 = require('@uppy/core'),\n Plugin = _require2.Plugin;\n\nvar Translator = require('@uppy/utils/lib/Translator');\n\nvar getFileTypeExtension = require('@uppy/utils/lib/getFileTypeExtension');\n\nvar mimeTypes = require('@uppy/utils/lib/mimeTypes');\n\nvar canvasToBlob = require('@uppy/utils/lib/canvasToBlob');\n\nvar supportsMediaRecorder = require('./supportsMediaRecorder');\n\nvar CameraIcon = require('./CameraIcon');\n\nvar CameraScreen = require('./CameraScreen');\n\nvar PermissionsScreen = require('./PermissionsScreen');\n/**\n * Normalize a MIME type or file extension into a MIME type.\n *\n * @param {string} fileType - MIME type or a file extension prefixed with `.`.\n * @returns {string|undefined} The MIME type or `undefined` if the fileType is an extension and is not known.\n */\n\n\nfunction toMimeType(fileType) {\n if (fileType[0] === '.') {\n return mimeTypes[fileType.slice(1)];\n }\n\n return fileType;\n}\n/**\n * Is this MIME type a video?\n *\n * @param {string} mimeType - MIME type.\n * @returns {boolean}\n */\n\n\nfunction isVideoMimeType(mimeType) {\n return /^video\\/[^*]+$/.test(mimeType);\n}\n/**\n * Is this MIME type an image?\n *\n * @param {string} mimeType - MIME type.\n * @returns {boolean}\n */\n\n\nfunction isImageMimeType(mimeType) {\n return /^image\\/[^*]+$/.test(mimeType);\n}\n/**\n * Setup getUserMedia, with polyfill for older browsers\n * Adapted from: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n */\n\n\nfunction getMediaDevices() {\n // eslint-disable-next-line compat/compat\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // eslint-disable-next-line compat/compat\n return navigator.mediaDevices;\n }\n\n var _getUserMedia = navigator.mozGetUserMedia || navigator.webkitGetUserMedia;\n\n if (!_getUserMedia) {\n return null;\n }\n\n return {\n getUserMedia: function getUserMedia(opts) {\n return new Promise(function (resolve, reject) {\n _getUserMedia.call(navigator, opts, resolve, reject);\n });\n }\n };\n}\n/**\n * Webcam\n */\n\n\nmodule.exports = (_temp = _class = /*#__PURE__*/function (_Plugin) {\n _inheritsLoose(Webcam, _Plugin);\n\n // eslint-disable-next-line global-require\n function Webcam(uppy, opts) {\n var _this;\n\n _this = _Plugin.call(this, uppy, opts) || this;\n _this.mediaDevices = getMediaDevices();\n _this.supportsUserMedia = !!_this.mediaDevices; // eslint-disable-next-line no-restricted-globals\n\n _this.protocol = location.protocol.match(/https/i) ? 'https' : 'http';\n _this.id = _this.opts.id || 'Webcam';\n _this.title = _this.opts.title || 'Camera';\n _this.type = 'acquirer';\n _this.capturedMediaFile = null;\n\n _this.icon = function () {\n return h(\"svg\", {\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n width: \"32\",\n height: \"32\",\n viewBox: \"0 0 32 32\"\n }, h(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, h(\"rect\", {\n className: \"uppy-ProviderIconBg\",\n fill: \"#03BFEF\",\n width: \"32\",\n height: \"32\",\n rx: \"16\"\n }), h(\"path\", {\n d: \"M22 11c1.133 0 2 .867 2 2v7.333c0 1.134-.867 2-2 2H10c-1.133 0-2-.866-2-2V13c0-1.133.867-2 2-2h2.333l1.134-1.733C13.6 9.133 13.8 9 14 9h4c.2 0 .4.133.533.267L19.667 11H22zm-6 1.533a3.764 3.764 0 0 0-3.8 3.8c0 2.129 1.672 3.801 3.8 3.801s3.8-1.672 3.8-3.8c0-2.13-1.672-3.801-3.8-3.801zm0 6.261c-1.395 0-2.46-1.066-2.46-2.46 0-1.395 1.065-2.461 2.46-2.461s2.46 1.066 2.46 2.46c0 1.395-1.065 2.461-2.46 2.461z\",\n fill: \"#FFF\",\n fillRule: \"nonzero\"\n })));\n };\n\n _this.defaultLocale = {\n strings: {\n smile: 'Smile!',\n takePicture: 'Take a picture',\n startRecording: 'Begin video recording',\n stopRecording: 'Stop video recording',\n allowAccessTitle: 'Please allow access to your camera',\n allowAccessDescription: 'In order to take pictures or record video with your camera, please allow camera access for this site.',\n noCameraTitle: 'Camera Not Available',\n noCameraDescription: 'In order to take pictures or record video, please connect a camera device',\n recordingStoppedMaxSize: 'Recording stopped because the file size is about to exceed the limit',\n recordingLength: 'Recording length %{recording_length}',\n submitRecordedFile: 'Submit recorded file',\n discardRecordedFile: 'Discard recorded file'\n }\n }; // set default options\n\n var defaultOptions = {\n onBeforeSnapshot: function onBeforeSnapshot() {\n return Promise.resolve();\n },\n countdown: false,\n modes: ['video-audio', 'video-only', 'audio-only', 'picture'],\n mirror: true,\n showVideoSourceDropdown: false,\n facingMode: 'user',\n preferredImageMimeType: null,\n preferredVideoMimeType: null,\n showRecordingLength: false\n };\n _this.opts = _extends({}, defaultOptions, opts);\n\n _this.i18nInit();\n\n _this.install = _this.install.bind(_assertThisInitialized(_this));\n _this.setPluginState = _this.setPluginState.bind(_assertThisInitialized(_this));\n _this.render = _this.render.bind(_assertThisInitialized(_this)); // Camera controls\n\n _this.start = _this.start.bind(_assertThisInitialized(_this));\n _this.stop = _this.stop.bind(_assertThisInitialized(_this));\n _this.takeSnapshot = _this.takeSnapshot.bind(_assertThisInitialized(_this));\n _this.startRecording = _this.startRecording.bind(_assertThisInitialized(_this));\n _this.stopRecording = _this.stopRecording.bind(_assertThisInitialized(_this));\n _this.discardRecordedVideo = _this.discardRecordedVideo.bind(_assertThisInitialized(_this));\n _this.submit = _this.submit.bind(_assertThisInitialized(_this));\n _this.oneTwoThreeSmile = _this.oneTwoThreeSmile.bind(_assertThisInitialized(_this));\n _this.focus = _this.focus.bind(_assertThisInitialized(_this));\n _this.changeVideoSource = _this.changeVideoSource.bind(_assertThisInitialized(_this));\n _this.webcamActive = false;\n\n if (_this.opts.countdown) {\n _this.opts.onBeforeSnapshot = _this.oneTwoThreeSmile;\n }\n\n _this.setPluginState({\n hasCamera: false,\n cameraReady: false,\n cameraError: null,\n recordingLengthSeconds: 0,\n videoSources: [],\n currentDeviceId: null\n });\n\n return _this;\n }\n\n var _proto = Webcam.prototype;\n\n _proto.setOptions = function setOptions(newOpts) {\n _Plugin.prototype.setOptions.call(this, _extends({}, newOpts, {\n videoConstraints: _extends({}, this.opts.videoConstraints, newOpts == null ? void 0 : newOpts.videoConstraints)\n }));\n\n this.i18nInit();\n };\n\n _proto.i18nInit = function i18nInit() {\n this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n this.i18n = this.translator.translate.bind(this.translator);\n this.i18nArray = this.translator.translateArray.bind(this.translator);\n this.setPluginState(); // so that UI re-renders and we see the updated locale\n };\n\n _proto.hasCameraCheck = function hasCameraCheck() {\n if (!this.mediaDevices) {\n return Promise.resolve(false);\n }\n\n return this.mediaDevices.enumerateDevices().then(function (devices) {\n return devices.some(function (device) {\n return device.kind === 'videoinput';\n });\n });\n };\n\n _proto.isAudioOnly = function isAudioOnly() {\n return this.opts.modes.length === 1 && this.opts.modes[0] === 'audio-only';\n };\n\n _proto.getConstraints = function getConstraints(deviceId) {\n var _this$opts$videoConst;\n\n if (deviceId === void 0) {\n deviceId = null;\n }\n\n var acceptsAudio = this.opts.modes.indexOf('video-audio') !== -1 || this.opts.modes.indexOf('audio-only') !== -1;\n var acceptsVideo = !this.isAudioOnly() && (this.opts.modes.indexOf('video-audio') !== -1 || this.opts.modes.indexOf('video-only') !== -1 || this.opts.modes.indexOf('picture') !== -1);\n\n var videoConstraints = _extends({}, (_this$opts$videoConst = this.opts.videoConstraints) != null ? _this$opts$videoConst : {\n facingMode: this.opts.facingMode\n }, deviceId ? {\n deviceId: deviceId,\n facingMode: null\n } : {});\n\n return {\n audio: acceptsAudio,\n video: acceptsVideo ? videoConstraints : false\n };\n } // eslint-disable-next-line consistent-return\n ;\n\n _proto.start = function start(options) {\n var _this2 = this;\n\n if (options === void 0) {\n options = null;\n }\n\n if (!this.supportsUserMedia) {\n return Promise.reject(new Error('Webcam access not supported'));\n }\n\n this.webcamActive = true;\n this.opts.mirror = true;\n var constraints = this.getConstraints(options && options.deviceId ? options.deviceId : null);\n this.hasCameraCheck().then(function (hasCamera) {\n _this2.setPluginState({\n hasCamera: hasCamera\n }); // ask user for access to their camera\n\n\n return _this2.mediaDevices.getUserMedia(constraints).then(function (stream) {\n _this2.stream = stream;\n var currentDeviceId = null;\n var tracks = _this2.isAudioOnly() ? stream.getAudioTracks() : stream.getVideoTracks();\n\n if (!options || !options.deviceId) {\n currentDeviceId = tracks[0].getSettings().deviceId;\n } else {\n tracks.forEach(function (track) {\n if (track.getSettings().deviceId === options.deviceId) {\n currentDeviceId = track.getSettings().deviceId;\n }\n });\n } // Update the sources now, so we can access the names.\n\n\n _this2.updateVideoSources();\n\n _this2.setPluginState({\n currentDeviceId: currentDeviceId,\n cameraReady: true\n });\n }).catch(function (err) {\n _this2.setPluginState({\n cameraReady: false,\n cameraError: err\n });\n\n _this2.uppy.info(err.message, 'error');\n });\n });\n }\n /**\n * @returns {object}\n */\n ;\n\n _proto.getMediaRecorderOptions = function getMediaRecorderOptions() {\n var options = {}; // Try to use the `opts.preferredVideoMimeType` or one of the `allowedFileTypes` for the recording.\n // If the browser doesn't support it, we'll fall back to the browser default instead.\n // Safari doesn't have the `isTypeSupported` API.\n\n if (MediaRecorder.isTypeSupported) {\n var restrictions = this.uppy.opts.restrictions;\n var preferredVideoMimeTypes = [];\n\n if (this.opts.preferredVideoMimeType) {\n preferredVideoMimeTypes = [this.opts.preferredVideoMimeType];\n } else if (restrictions.allowedFileTypes) {\n preferredVideoMimeTypes = restrictions.allowedFileTypes.map(toMimeType).filter(isVideoMimeType);\n }\n\n var filterSupportedTypes = function filterSupportedTypes(candidateType) {\n return MediaRecorder.isTypeSupported(candidateType) && getFileTypeExtension(candidateType);\n };\n\n var acceptableMimeTypes = preferredVideoMimeTypes.filter(filterSupportedTypes);\n\n if (acceptableMimeTypes.length > 0) {\n // eslint-disable-next-line prefer-destructuring\n options.mimeType = acceptableMimeTypes[0];\n }\n }\n\n return options;\n };\n\n _proto.startRecording = function startRecording() {\n var _this3 = this;\n\n // only used if supportsMediaRecorder() returned true\n // eslint-disable-next-line compat/compat\n this.recorder = new MediaRecorder(this.stream, this.getMediaRecorderOptions());\n this.recordingChunks = [];\n var stoppingBecauseOfMaxSize = false;\n this.recorder.addEventListener('dataavailable', function (event) {\n _this3.recordingChunks.push(event.data);\n\n var restrictions = _this3.uppy.opts.restrictions;\n\n if (_this3.recordingChunks.length > 1 && restrictions.maxFileSize != null && !stoppingBecauseOfMaxSize) {\n var totalSize = _this3.recordingChunks.reduce(function (acc, chunk) {\n return acc + chunk.size;\n }, 0); // Exclude the initial chunk from the average size calculation because it is likely to be a very small outlier\n\n\n var averageChunkSize = (totalSize - _this3.recordingChunks[0].size) / (_this3.recordingChunks.length - 1);\n var expectedEndChunkSize = averageChunkSize * 3;\n var maxSize = Math.max(0, restrictions.maxFileSize - expectedEndChunkSize);\n\n if (totalSize > maxSize) {\n stoppingBecauseOfMaxSize = true;\n\n _this3.uppy.info(_this3.i18n('recordingStoppedMaxSize'), 'warning', 4000);\n\n _this3.stopRecording();\n }\n }\n }); // use a \"time slice\" of 500ms: ondataavailable will be called each 500ms\n // smaller time slices mean we can more accurately check the max file size restriction\n\n this.recorder.start(500);\n\n if (this.opts.showRecordingLength) {\n // Start the recordingLengthTimer if we are showing the recording length.\n this.recordingLengthTimer = setInterval(function () {\n var currentRecordingLength = _this3.getPluginState().recordingLengthSeconds;\n\n _this3.setPluginState({\n recordingLengthSeconds: currentRecordingLength + 1\n });\n }, 1000);\n }\n\n this.setPluginState({\n isRecording: true\n });\n };\n\n _proto.stopRecording = function stopRecording() {\n var _this4 = this;\n\n var stopped = new Promise(function (resolve) {\n _this4.recorder.addEventListener('stop', function () {\n resolve();\n });\n\n _this4.recorder.stop();\n\n if (_this4.opts.showRecordingLength) {\n // Stop the recordingLengthTimer if we are showing the recording length.\n clearInterval(_this4.recordingLengthTimer);\n\n _this4.setPluginState({\n recordingLengthSeconds: 0\n });\n }\n });\n return stopped.then(function () {\n _this4.setPluginState({\n isRecording: false\n });\n\n return _this4.getVideo();\n }).then(function (file) {\n try {\n _this4.capturedMediaFile = file; // create object url for capture result preview\n\n _this4.setPluginState({\n // eslint-disable-next-line compat/compat\n recordedVideo: URL.createObjectURL(file.data)\n });\n\n _this4.opts.mirror = false;\n } catch (err) {\n // Logging the error, exept restrictions, which is handled in Core\n if (!err.isRestriction) {\n _this4.uppy.log(err);\n }\n }\n }).then(function () {\n _this4.recordingChunks = null;\n _this4.recorder = null;\n }, function (error) {\n _this4.recordingChunks = null;\n _this4.recorder = null;\n throw error;\n });\n };\n\n _proto.discardRecordedVideo = function discardRecordedVideo() {\n this.setPluginState({\n recordedVideo: null\n });\n this.opts.mirror = true;\n this.capturedMediaFile = null;\n };\n\n _proto.submit = function submit() {\n try {\n if (this.capturedMediaFile) {\n this.uppy.addFile(this.capturedMediaFile);\n }\n } catch (err) {\n // Logging the error, exept restrictions, which is handled in Core\n if (!err.isRestriction) {\n this.uppy.log(err, 'error');\n }\n }\n };\n\n _proto.stop = function stop() {\n if (this.stream) {\n this.stream.getAudioTracks().forEach(function (track) {\n track.stop();\n });\n this.stream.getVideoTracks().forEach(function (track) {\n track.stop();\n });\n }\n\n this.webcamActive = false;\n this.stream = null;\n this.setPluginState({\n recordedVideo: null\n });\n };\n\n _proto.getVideoElement = function getVideoElement() {\n return this.el.querySelector('.uppy-Webcam-video');\n };\n\n _proto.oneTwoThreeSmile = function oneTwoThreeSmile() {\n var _this5 = this;\n\n return new Promise(function (resolve, reject) {\n var count = _this5.opts.countdown; // eslint-disable-next-line consistent-return\n\n var countDown = setInterval(function () {\n if (!_this5.webcamActive) {\n clearInterval(countDown);\n _this5.captureInProgress = false;\n return reject(new Error('Webcam is not active'));\n }\n\n if (count > 0) {\n _this5.uppy.info(count + \"...\", 'warning', 800);\n\n count--;\n } else {\n clearInterval(countDown);\n\n _this5.uppy.info(_this5.i18n('smile'), 'success', 1500);\n\n setTimeout(function () {\n return resolve();\n }, 1500);\n }\n }, 1000);\n });\n };\n\n _proto.takeSnapshot = function takeSnapshot() {\n var _this6 = this;\n\n if (this.captureInProgress) return;\n this.captureInProgress = true;\n this.opts.onBeforeSnapshot().catch(function (err) {\n var message = typeof err === 'object' ? err.message : err;\n\n _this6.uppy.info(message, 'error', 5000);\n\n return Promise.reject(new Error(\"onBeforeSnapshot: \" + message));\n }).then(function () {\n return _this6.getImage();\n }).then(function (tagFile) {\n _this6.captureInProgress = false;\n\n try {\n _this6.uppy.addFile(tagFile);\n } catch (err) {\n // Logging the error, except restrictions, which is handled in Core\n if (!err.isRestriction) {\n _this6.uppy.log(err);\n }\n }\n }, function (error) {\n _this6.captureInProgress = false;\n throw error;\n });\n };\n\n _proto.getImage = function getImage() {\n var _this7 = this;\n\n var video = this.getVideoElement();\n\n if (!video) {\n return Promise.reject(new Error('No video element found, likely due to the Webcam tab being closed.'));\n }\n\n var width = video.videoWidth;\n var height = video.videoHeight;\n var canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n var ctx = canvas.getContext('2d');\n ctx.drawImage(video, 0, 0);\n var restrictions = this.uppy.opts.restrictions;\n var preferredImageMimeTypes = [];\n\n if (this.opts.preferredImageMimeType) {\n preferredImageMimeTypes = [this.opts.preferredImageMimeType];\n } else if (restrictions.allowedFileTypes) {\n preferredImageMimeTypes = restrictions.allowedFileTypes.map(toMimeType).filter(isImageMimeType);\n }\n\n var mimeType = preferredImageMimeTypes[0] || 'image/jpeg';\n var ext = getFileTypeExtension(mimeType) || 'jpg';\n var name = \"cam-\" + Date.now() + \".\" + ext;\n return canvasToBlob(canvas, mimeType).then(function (blob) {\n return {\n source: _this7.id,\n name: name,\n data: new Blob([blob], {\n type: mimeType\n }),\n type: mimeType\n };\n });\n };\n\n _proto.getVideo = function getVideo() {\n // Sometimes in iOS Safari, Blobs (especially the first Blob in the recordingChunks Array)\n // have empty 'type' attributes (e.g. '') so we need to find a Blob that has a defined 'type'\n // attribute in order to determine the correct MIME type.\n var mimeType = this.recordingChunks.find(function (blob) {\n var _blob$type;\n\n return ((_blob$type = blob.type) == null ? void 0 : _blob$type.length) > 0;\n }).type;\n var fileExtension = getFileTypeExtension(mimeType);\n\n if (!fileExtension) {\n return Promise.reject(new Error(\"Could not retrieve recording: Unsupported media type \\\"\" + mimeType + \"\\\"\"));\n }\n\n var name = \"webcam-\" + Date.now() + \".\" + fileExtension;\n var blob = new Blob(this.recordingChunks, {\n type: mimeType\n });\n var file = {\n source: this.id,\n name: name,\n data: new Blob([blob], {\n type: mimeType\n }),\n type: mimeType\n };\n return Promise.resolve(file);\n };\n\n _proto.focus = function focus() {\n var _this8 = this;\n\n if (!this.opts.countdown) return;\n setTimeout(function () {\n _this8.uppy.info(_this8.i18n('smile'), 'success', 1500);\n }, 1000);\n };\n\n _proto.changeVideoSource = function changeVideoSource(deviceId) {\n this.stop();\n this.start({\n deviceId: deviceId\n });\n };\n\n _proto.updateVideoSources = function updateVideoSources() {\n var _this9 = this;\n\n this.mediaDevices.enumerateDevices().then(function (devices) {\n _this9.setPluginState({\n videoSources: devices.filter(function (device) {\n return device.kind === 'videoinput';\n })\n });\n });\n };\n\n _proto.render = function render() {\n if (!this.webcamActive) {\n this.start();\n }\n\n var webcamState = this.getPluginState();\n\n if (!webcamState.cameraReady || !webcamState.hasCamera) {\n return h(PermissionsScreen, {\n icon: CameraIcon,\n i18n: this.i18n,\n hasCamera: webcamState.hasCamera\n });\n }\n\n return h(CameraScreen // eslint-disable-next-line react/jsx-props-no-spreading\n , _extends({}, webcamState, {\n onChangeVideoSource: this.changeVideoSource,\n onSnapshot: this.takeSnapshot,\n onStartRecording: this.startRecording,\n onStopRecording: this.stopRecording,\n onDiscardRecordedVideo: this.discardRecordedVideo,\n onSubmit: this.submit,\n onFocus: this.focus,\n onStop: this.stop,\n i18n: this.i18n,\n modes: this.opts.modes,\n showRecordingLength: this.opts.showRecordingLength,\n showVideoSourceDropdown: this.opts.showVideoSourceDropdown,\n supportsRecording: supportsMediaRecorder(),\n recording: webcamState.isRecording,\n mirror: this.opts.mirror,\n src: this.stream\n }));\n };\n\n _proto.install = function install() {\n var _this10 = this;\n\n this.setPluginState({\n cameraReady: false,\n recordingLengthSeconds: 0\n });\n var target = this.opts.target;\n\n if (target) {\n this.mount(target, this);\n }\n\n if (this.mediaDevices) {\n this.updateVideoSources();\n\n this.mediaDevices.ondevicechange = function () {\n _this10.updateVideoSources();\n\n if (_this10.stream) {\n var restartStream = true;\n\n var _this10$getPluginStat = _this10.getPluginState(),\n videoSources = _this10$getPluginStat.videoSources,\n currentDeviceId = _this10$getPluginStat.currentDeviceId;\n\n videoSources.forEach(function (videoSource) {\n if (currentDeviceId === videoSource.deviceId) {\n restartStream = false;\n }\n });\n\n if (restartStream) {\n _this10.stop();\n\n _this10.start();\n }\n }\n };\n }\n };\n\n _proto.uninstall = function uninstall() {\n if (this.stream) {\n this.stop();\n }\n\n this.unmount();\n };\n\n return Webcam;\n}(Plugin), _class.VERSION = \"1.8.13\", _temp);"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (this["webpackJsonp@micromag/viewer-build"]=this["webpackJsonp@micromag/viewer-build"]||[]).push([[8],{443:function(e,t,n){var r=n(140);e.exports=r((function(e,t,n){var r=t.progress,o=t.bytesUploaded,s=t.bytesTotal;r&&(e.uppy.log("Upload progress: "+r),e.uppy.emit("upload-progress",n,{uploader:e,bytesUploaded:o,bytesTotal:s}))}),300,{leading:!0,trailing:!0})},444:function(e,t){e.exports=function(e){var t=/^(?:https?:\/\/|\/\/)?(?:[^@\n]+@)?(?:www\.)?([^\n]+)/i.exec(e)[1];return(/^http:\/\//i.test(e)?"ws":"wss")+"://"+t}},445:function(e,t){e.exports=function(e){var t=[],n=[];function r(e){t.push(e)}function o(e){n.push(e)}return Promise.all(e.map((function(e){return e.then(r,o)}))).then((function(){return{successful:t,failed:n}}))}},446:function(e,t){e.exports=function(){function e(e){this._events=[],this._emitter=e}var t=e.prototype;return t.on=function(e,t){return this._events.push([e,t]),this._emitter.on(e,t)},t.remove=function(){var e=this;this._events.forEach((function(t){var n=t[0],r=t[1];e._emitter.off(n,r)}))},e}()},447:function(e,t){e.exports=function(e){return!!e&&(0!==e.readyState&&4!==e.readyState||0===e.status)}},448:function(e,t,n){var r=n(215);function o(){return new Error("Cancelled")}e.exports=function(){function e(e){this.limit="number"!==typeof e||0===e?1/0:e,this.activeRequests=0,this.queuedHandlers=[]}var t=e.prototype;return t._call=function(e){var t=this;this.activeRequests+=1;var n,r=!1;try{n=e()}catch(o){throw this.activeRequests-=1,o}return{abort:function(){r||(r=!0,t.activeRequests-=1,n(),t._queueNext())},done:function(){r||(r=!0,t.activeRequests-=1,t._queueNext())}}},t._queueNext=function(){var e=this;Promise.resolve().then((function(){e._next()}))},t._next=function(){if(!(this.activeRequests>=this.limit)&&0!==this.queuedHandlers.length){var e=this.queuedHandlers.shift(),t=this._call(e.fn);e.abort=t.abort,e.done=t.done}},t._queue=function(e,t){var n=this;void 0===t&&(t={});var o={fn:e,priority:t.priority||0,abort:function(){n._dequeue(o)},done:function(){throw new Error("Cannot mark a queued request as done: this indicates a bug")}},s=r(this.queuedHandlers,(function(e){return o.priority>e.priority}));return-1===s?this.queuedHandlers.push(o):this.queuedHandlers.splice(s,0,o),o},t._dequeue=function(e){var t=this.queuedHandlers.indexOf(e);-1!==t&&this.queuedHandlers.splice(t,1)},t.run=function(e,t){return this.activeRequests<this.limit?this._call(e):this._queue(e,t)},t.wrapPromiseFunction=function(e,t){var n=this;return function(){for(var r=arguments.length,s=new Array(r),i=0;i<r;i++)s[i]=arguments[i];var a,u=new Promise((function(r,i){a=n.run((function(){var t,n;try{n=Promise.resolve(e.apply(void 0,s))}catch(u){n=Promise.reject(u)}return n.then((function(e){t?i(t):(a.done(),r(e))}),(function(e){t?i(t):(a.done(),i(e))})),function(){t=o()}}),t)}));return u.abort=function(){a.abort()},u}},e}()},516:function(e,t){var n=function(){function e(e,t){this._timeout=e,this._onTimedOut=t,this._isDone=!1,this._aliveTimer=null,this._onTimedOut=this._onTimedOut.bind(this)}var t=e.prototype;return t.progress=function(){this._isDone||this._timeout>0&&(this._aliveTimer&&clearTimeout(this._aliveTimer),this._aliveTimer=setTimeout(this._onTimedOut,this._timeout))},t.done=function(){this._aliveTimer&&(clearTimeout(this._aliveTimer),this._aliveTimer=null),this._isDone=!0},e}();e.exports=n},550:function(e,t,n){var r,o;function s(e,t){return s=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},s(e,t)}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var a=n(50).Plugin,u=n(141),p=n(64),d=n(432),l=d.Provider,c=d.RequestClient,h=d.Socket,f=n(443),m=n(444),v=n(445),y=n(446),g=n(516),w=n(448),b=n(434),E=n(447);function U(e,t){return t||(t=new Error("Upload error")),"string"===typeof t&&(t=new Error(t)),t instanceof Error||(t=i(new Error("Upload error"),{data:t})),E(e)?t=new b(t,e):(t.request=e,t)}function R(e){return e.data.slice(0,e.data.size,e.meta.type)}e.exports=(o=r=function(e){var t,n;function r(t,n){var r;(r=e.call(this,t,n)||this).type="uploader",r.id=r.opts.id||"XHRUpload",r.title="XHRUpload",r.defaultLocale={strings:{timedOut:"Upload stalled for %{seconds} seconds, aborting."}};var o={formData:!0,fieldName:"files[]",method:"post",metaFields:null,responseUrlFieldName:"url",bundle:!1,headers:{},timeout:3e4,limit:0,withCredentials:!1,responseType:"",getResponseData:function(e,t){var n={};try{n=JSON.parse(e)}catch(r){console.log(r)}return n},getResponseError:function(e,t){var n=new Error("Upload error");return E(t)&&(n=new b(n,t)),n},validateStatus:function(e,t,n){return e>=200&&e<300}};if(r.opts=i({},o,n),r.i18nInit(),r.handleUpload=r.handleUpload.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r)),r.opts.__queue instanceof w?r.requests=r.opts.__queue:r.requests=new w(r.opts.limit),r.opts.bundle&&!r.opts.formData)throw new Error("`opts.formData` must be true when `opts.bundle` is enabled.");return r.uploaderEvents=Object.create(null),r}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,s(t,n);var o=r.prototype;return o.setOptions=function(t){e.prototype.setOptions.call(this,t),this.i18nInit()},o.i18nInit=function(){this.translator=new p([this.defaultLocale,this.uppy.locale,this.opts.locale]),this.i18n=this.translator.translate.bind(this.translator),this.setPluginState()},o.getOptions=function(e){var t=this.uppy.getState().xhrUpload,n=this.opts.headers,r=i({},this.opts,t||{},e.xhrUpload||{},{headers:{}});return"function"===typeof n?r.headers=n(e):i(r.headers,this.opts.headers),t&&i(r.headers,t.headers),e.xhrUpload&&i(r.headers,e.xhrUpload.headers),r},o.addMetadata=function(e,t,n){(Array.isArray(n.metaFields)?n.metaFields:Object.keys(t)).forEach((function(n){e.append(n,t[n])}))},o.createFormDataUpload=function(e,t){var n=new FormData;this.addMetadata(n,e.meta,t);var r=R(e);return e.name?n.append(t.fieldName,r,e.meta.name):n.append(t.fieldName,r),n},o.createBundledUpload=function(e,t){var n=this,r=new FormData,o=this.uppy.getState().meta;return this.addMetadata(r,o,t),e.forEach((function(e){var t=n.getOptions(e),o=R(e);e.name?r.append(t.fieldName,o,e.name):r.append(t.fieldName,o)})),r},o.createBareUpload=function(e,t){return e.data},o.upload=function(e,t,n){var r=this,o=this.getOptions(e);return this.uppy.log("uploading "+t+" of "+n),new Promise((function(t,n){r.uppy.emit("upload-started",e);var s=o.formData?r.createFormDataUpload(e,o):r.createBareUpload(e,o),i=new XMLHttpRequest;r.uploaderEvents[e.id]=new y(r.uppy);var a=new g(o.timeout,(function(){i.abort(),d.done();var t=new Error(r.i18n("timedOut",{seconds:Math.ceil(o.timeout/1e3)}));r.uppy.emit("upload-error",e,t),n(t)})),p=u();i.upload.addEventListener("loadstart",(function(e){r.uppy.log("[XHRUpload] "+p+" started")})),i.upload.addEventListener("progress",(function(t){r.uppy.log("[XHRUpload] "+p+" progress: "+t.loaded+" / "+t.total),a.progress(),t.lengthComputable&&r.uppy.emit("upload-progress",e,{uploader:r,bytesUploaded:t.loaded,bytesTotal:t.total})})),i.addEventListener("load",(function(s){if(r.uppy.log("[XHRUpload] "+p+" finished"),a.done(),d.done(),r.uploaderEvents[e.id]&&(r.uploaderEvents[e.id].remove(),r.uploaderEvents[e.id]=null),o.validateStatus(s.target.status,i.responseText,i)){var u=o.getResponseData(i.responseText,i),l=u[o.responseUrlFieldName],c={status:s.target.status,body:u,uploadURL:l};return r.uppy.emit("upload-success",e,c),l&&r.uppy.log("Download "+e.name+" from "+l),t(e)}var h=o.getResponseData(i.responseText,i),f=U(i,o.getResponseError(i.responseText,i)),m={status:s.target.status,body:h};return r.uppy.emit("upload-error",e,f,m),n(f)})),i.addEventListener("error",(function(t){r.uppy.log("[XHRUpload] "+p+" errored"),a.done(),d.done(),r.uploaderEvents[e.id]&&(r.uploaderEvents[e.id].remove(),r.uploaderEvents[e.id]=null);var s=U(i,o.getResponseError(i.responseText,i));return r.uppy.emit("upload-error",e,s),n(s)})),i.open(o.method.toUpperCase(),o.endpoint,!0),i.withCredentials=o.withCredentials,""!==o.responseType&&(i.responseType=o.responseType);var d=r.requests.run((function(){var t=r.getOptions(e);return Object.keys(t.headers).forEach((function(e){i.setRequestHeader(e,t.headers[e])})),i.send(s),function(){a.done(),i.abort()}}));r.onFileRemove(e.id,(function(){d.abort(),n(new Error("File removed"))})),r.onCancelAll(e.id,(function(){d.abort(),n(new Error("Upload cancelled"))}))}))},o.uploadRemote=function(e,t,n){var r=this,o=this.getOptions(e);return new Promise((function(t,n){r.uppy.emit("upload-started",e);var s={};(Array.isArray(o.metaFields)?o.metaFields:Object.keys(e.meta)).forEach((function(t){s[t]=e.meta[t]})),new(e.remote.providerOptions.provider?l:c)(r.uppy,e.remote.providerOptions).post(e.remote.url,i({},e.remote.body,{endpoint:o.endpoint,size:e.data.size,fieldname:o.fieldName,metadata:s,httpMethod:o.method,useFormData:o.formData,headers:o.headers})).then((function(s){var a=s.token,u=m(e.remote.companionUrl),p=new h({target:u+"/api/"+a,autoOpen:!1});r.uploaderEvents[e.id]=new y(r.uppy),r.onFileRemove(e.id,(function(){p.send("pause",{}),d.abort(),t("upload "+e.id+" was removed")})),r.onCancelAll(e.id,(function(){p.send("pause",{}),d.abort(),t("upload "+e.id+" was canceled")})),r.onRetry(e.id,(function(){p.send("pause",{}),p.send("resume",{})})),r.onRetryAll(e.id,(function(){p.send("pause",{}),p.send("resume",{})})),p.on("progress",(function(t){return f(r,t,e)})),p.on("success",(function(n){var s=o.getResponseData(n.response.responseText,n.response),i=s[o.responseUrlFieldName],a={status:n.response.status,body:s,uploadURL:i};return r.uppy.emit("upload-success",e,a),d.done(),r.uploaderEvents[e.id]&&(r.uploaderEvents[e.id].remove(),r.uploaderEvents[e.id]=null),t()})),p.on("error",(function(t){var s=t.response,a=s?o.getResponseError(s.responseText,s):i(new Error(t.error.message),{cause:t.error});r.uppy.emit("upload-error",e,a),d.done(),r.uploaderEvents[e.id]&&(r.uploaderEvents[e.id].remove(),r.uploaderEvents[e.id]=null),n(a)}));var d=r.requests.run((function(){return p.open(),e.isPaused&&p.send("pause",{}),function(){return p.close()}}))})).catch((function(t){r.uppy.emit("upload-error",e,t),n(t)}))}))},o.uploadBundle=function(e){var t=this;return new Promise((function(n,r){var o=t.opts.endpoint,s=t.opts.method,a=t.uppy.getState().xhrUpload,u=t.createBundledUpload(e,i({},t.opts,a||{})),p=new XMLHttpRequest,d=new g(t.opts.timeout,(function(){p.abort();var e=new Error(t.i18n("timedOut",{seconds:Math.ceil(t.opts.timeout/1e3)}));l(e),r(e)})),l=function(n){e.forEach((function(e){t.uppy.emit("upload-error",e,n)}))};p.upload.addEventListener("loadstart",(function(e){t.uppy.log("[XHRUpload] started uploading bundle"),d.progress()})),p.upload.addEventListener("progress",(function(n){d.progress(),n.lengthComputable&&e.forEach((function(e){t.uppy.emit("upload-progress",e,{uploader:t,bytesUploaded:n.loaded/n.total*e.size,bytesTotal:e.size})}))})),p.addEventListener("load",(function(o){if(d.done(),t.opts.validateStatus(o.target.status,p.responseText,p)){var s=t.opts.getResponseData(p.responseText,p),i={status:o.target.status,body:s};return e.forEach((function(e){t.uppy.emit("upload-success",e,i)})),n()}var a=t.opts.getResponseError(p.responseText,p)||new Error("Upload error");return a.request=p,l(a),r(a)})),p.addEventListener("error",(function(e){d.done();var n=t.opts.getResponseError(p.responseText,p)||new Error("Upload error");return l(n),r(n)})),t.uppy.on("cancel-all",(function(){d.done(),p.abort()})),p.open(s.toUpperCase(),o,!0),p.withCredentials=t.opts.withCredentials,""!==t.opts.responseType&&(p.responseType=t.opts.responseType),Object.keys(t.opts.headers).forEach((function(e){p.setRequestHeader(e,t.opts.headers[e])})),p.send(u),e.forEach((function(e){t.uppy.emit("upload-started",e)}))}))},o.uploadFiles=function(e){var t=this,n=e.map((function(n,r){var o=parseInt(r,10)+1,s=e.length;return n.error?Promise.reject(new Error(n.error)):n.isRemote?t.uploadRemote(n,o,s):t.upload(n,o,s)}));return v(n)},o.onFileRemove=function(e,t){this.uploaderEvents[e].on("file-removed",(function(n){e===n.id&&t(n.id)}))},o.onRetry=function(e,t){this.uploaderEvents[e].on("upload-retry",(function(n){e===n&&t()}))},o.onRetryAll=function(e,t){var n=this;this.uploaderEvents[e].on("retry-all",(function(r){n.uppy.getFile(e)&&t()}))},o.onCancelAll=function(e,t){var n=this;this.uploaderEvents[e].on("cancel-all",(function(){n.uppy.getFile(e)&&t()}))},o.handleUpload=function(e){var t=this;if(0===e.length)return this.uppy.log("[XHRUpload] No files to upload!"),Promise.resolve();0!==this.opts.limit||this.opts.__queue||this.uppy.log("[XHRUpload] When uploading multiple files at once, consider setting the `limit` option (to `10` for example), to limit the number of concurrent uploads, which helps prevent memory and network issues: https://uppy.io/docs/xhr-upload/#limit-0","warning"),this.uppy.log("[XHRUpload] Uploading...");var n=e.map((function(e){return t.uppy.getFile(e)}));if(this.opts.bundle){if(n.some((function(e){return e.isRemote})))throw new Error("Can\u2019t upload remote files when the `bundle: true` option is set");if("function"===typeof this.opts.headers)throw new TypeError("`headers` may not be a function when the `bundle: true` option is set");return this.uploadBundle(n)}return this.uploadFiles(n).then((function(){return null}))},o.install=function(){if(this.opts.bundle){var e=this.uppy.getState().capabilities;this.uppy.setState({capabilities:i({},e,{individualCancellation:!1})})}this.uppy.addUploader(this.handleUpload)},o.uninstall=function(){if(this.opts.bundle){var e=this.uppy.getState().capabilities;this.uppy.setState({capabilities:i({},e,{individualCancellation:!0})})}this.uppy.removeUploader(this.handleUpload)},r}(a),r.VERSION="1.7.5",o)}}]);
2
+ //# sourceMappingURL=8.33d32e6f.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/@uppy/utils/lib/emitSocketProgress.js","../../../node_modules/@uppy/utils/lib/getSocketHost.js","../../../node_modules/@uppy/utils/lib/settle.js","../../../node_modules/@uppy/utils/lib/EventTracker.js","../../../node_modules/@uppy/utils/lib/isNetworkError.js","../../../node_modules/@uppy/utils/lib/RateLimitedQueue.js","../../../node_modules/@uppy/utils/lib/ProgressTimeout.js","../../../node_modules/@uppy/xhr-upload/lib/index.js"],"names":["throttle","require","module","exports","uploader","progressData","file","progress","bytesUploaded","bytesTotal","uppy","log","emit","leading","trailing","url","host","exec","test","promises","resolutions","rejections","resolved","value","push","rejected","error","Promise","all","map","promise","then","successful","failed","EventTracker","emitter","this","_events","_emitter","_proto","prototype","on","event","fn","remove","_this","forEach","_ref","off","xhr","readyState","status","findIndex","createCancelError","Error","RateLimitedQueue","limit","Infinity","activeRequests","queuedHandlers","_call","cancelActive","_done","err","abort","_queueNext","done","_this2","resolve","_next","length","next","shift","handler","_queue","options","_this3","priority","_dequeue","index","other","splice","indexOf","run","queueOptions","wrapPromiseFunction","_this4","_len","arguments","args","Array","_key","queuedRequest","outerPromise","reject","cancelError","innerPromise","apply","result","ProgressTimeout","timeout","timeoutHandler","_timeout","_onTimedOut","_isDone","_aliveTimer","bind","clearTimeout","setTimeout","_class","_temp","_setPrototypeOf","o","p","Object","setPrototypeOf","__proto__","_extends","assign","target","i","source","key","hasOwnProperty","call","Plugin","cuid","Translator","_require2","Provider","RequestClient","Socket","emitSocketProgress","getSocketHost","settle","NetworkError","isNetworkError","buildResponseError","data","request","setTypeInBlob","slice","size","meta","type","_Plugin","subClass","superClass","XHRUpload","opts","id","title","defaultLocale","strings","timedOut","defaultOptions","formData","fieldName","method","metaFields","responseUrlFieldName","bundle","headers","withCredentials","responseType","getResponseData","responseText","response","parsedResponse","JSON","parse","console","getResponseError","validateStatus","i18nInit","handleUpload","self","ReferenceError","_assertThisInitialized","__queue","requests","uploaderEvents","create","constructor","setOptions","newOpts","translator","locale","i18n","translate","setPluginState","getOptions","overrides","getState","xhrUpload","addMetadata","isArray","keys","item","append","createFormDataUpload","formPost","FormData","dataWithUpdatedType","name","createBundledUpload","files","createBareUpload","upload","current","total","XMLHttpRequest","timer","seconds","Math","ceil","addEventListener","ev","loaded","lengthComputable","_body","uploadURL","uploadResp","body","open","toUpperCase","endpoint","currentOpts","header","setRequestHeader","send","onFileRemove","onCancelAll","uploadRemote","fields","remote","providerOptions","provider","post","fieldname","metadata","httpMethod","useFormData","res","token","companionUrl","socket","autoOpen","onRetry","onRetryAll","errData","resp","message","cause","isPaused","close","uploadBundle","_this5","optsFromState","emitError","uploadFiles","_this6","parseInt","isRemote","fileID","cb","targetFileID","_this7","filesToRetry","getFile","_this8","fileIDs","_this9","some","TypeError","install","capabilities","setState","individualCancellation","addUploader","uninstall","removeUploader","VERSION"],"mappings":"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","file":"static/js/8.33d32e6f.chunk.js","sourcesContent":["var throttle = require('lodash.throttle');\n\nfunction _emitSocketProgress(uploader, progressData, file) {\n var progress = progressData.progress,\n bytesUploaded = progressData.bytesUploaded,\n bytesTotal = progressData.bytesTotal;\n\n if (progress) {\n uploader.uppy.log(\"Upload progress: \" + progress);\n uploader.uppy.emit('upload-progress', file, {\n uploader: uploader,\n bytesUploaded: bytesUploaded,\n bytesTotal: bytesTotal\n });\n }\n}\n\nmodule.exports = throttle(_emitSocketProgress, 300, {\n leading: true,\n trailing: true\n});","module.exports = function getSocketHost(url) {\n // get the host domain\n var regex = /^(?:https?:\\/\\/|\\/\\/)?(?:[^@\\n]+@)?(?:www\\.)?([^\\n]+)/i;\n var host = regex.exec(url)[1];\n var socketProtocol = /^http:\\/\\//i.test(url) ? 'ws' : 'wss';\n return socketProtocol + \"://\" + host;\n};","module.exports = function settle(promises) {\n var resolutions = [];\n var rejections = [];\n\n function resolved(value) {\n resolutions.push(value);\n }\n\n function rejected(error) {\n rejections.push(error);\n }\n\n var wait = Promise.all(promises.map(function (promise) {\n return promise.then(resolved, rejected);\n }));\n return wait.then(function () {\n return {\n successful: resolutions,\n failed: rejections\n };\n });\n};","/**\n * Create a wrapper around an event emitter with a `remove` method to remove\n * all events that were added using the wrapped emitter.\n */\nmodule.exports = /*#__PURE__*/function () {\n function EventTracker(emitter) {\n this._events = [];\n this._emitter = emitter;\n }\n\n var _proto = EventTracker.prototype;\n\n _proto.on = function on(event, fn) {\n this._events.push([event, fn]);\n\n return this._emitter.on(event, fn);\n };\n\n _proto.remove = function remove() {\n var _this = this;\n\n this._events.forEach(function (_ref) {\n var event = _ref[0],\n fn = _ref[1];\n\n _this._emitter.off(event, fn);\n });\n };\n\n return EventTracker;\n}();","function isNetworkError(xhr) {\n if (!xhr) {\n return false;\n }\n\n return xhr.readyState !== 0 && xhr.readyState !== 4 || xhr.status === 0;\n}\n\nmodule.exports = isNetworkError;","var findIndex = require('./findIndex');\n\nfunction createCancelError() {\n return new Error('Cancelled');\n}\n\nmodule.exports = /*#__PURE__*/function () {\n function RateLimitedQueue(limit) {\n if (typeof limit !== 'number' || limit === 0) {\n this.limit = Infinity;\n } else {\n this.limit = limit;\n }\n\n this.activeRequests = 0;\n this.queuedHandlers = [];\n }\n\n var _proto = RateLimitedQueue.prototype;\n\n _proto._call = function _call(fn) {\n var _this = this;\n\n this.activeRequests += 1;\n var _done = false;\n var cancelActive;\n\n try {\n cancelActive = fn();\n } catch (err) {\n this.activeRequests -= 1;\n throw err;\n }\n\n return {\n abort: function abort() {\n if (_done) return;\n _done = true;\n _this.activeRequests -= 1;\n cancelActive();\n\n _this._queueNext();\n },\n done: function done() {\n if (_done) return;\n _done = true;\n _this.activeRequests -= 1;\n\n _this._queueNext();\n }\n };\n };\n\n _proto._queueNext = function _queueNext() {\n var _this2 = this;\n\n // Do it soon but not immediately, this allows clearing out the entire queue synchronously\n // one by one without continuously _advancing_ it (and starting new tasks before immediately\n // aborting them)\n Promise.resolve().then(function () {\n _this2._next();\n });\n };\n\n _proto._next = function _next() {\n if (this.activeRequests >= this.limit) {\n return;\n }\n\n if (this.queuedHandlers.length === 0) {\n return;\n } // Dispatch the next request, and update the abort/done handlers\n // so that cancelling it does the Right Thing (and doesn't just try\n // to dequeue an already-running request).\n\n\n var next = this.queuedHandlers.shift();\n\n var handler = this._call(next.fn);\n\n next.abort = handler.abort;\n next.done = handler.done;\n };\n\n _proto._queue = function _queue(fn, options) {\n var _this3 = this;\n\n if (options === void 0) {\n options = {};\n }\n\n var handler = {\n fn: fn,\n priority: options.priority || 0,\n abort: function abort() {\n _this3._dequeue(handler);\n },\n done: function done() {\n throw new Error('Cannot mark a queued request as done: this indicates a bug');\n }\n };\n var index = findIndex(this.queuedHandlers, function (other) {\n return handler.priority > other.priority;\n });\n\n if (index === -1) {\n this.queuedHandlers.push(handler);\n } else {\n this.queuedHandlers.splice(index, 0, handler);\n }\n\n return handler;\n };\n\n _proto._dequeue = function _dequeue(handler) {\n var index = this.queuedHandlers.indexOf(handler);\n\n if (index !== -1) {\n this.queuedHandlers.splice(index, 1);\n }\n };\n\n _proto.run = function run(fn, queueOptions) {\n if (this.activeRequests < this.limit) {\n return this._call(fn);\n }\n\n return this._queue(fn, queueOptions);\n };\n\n _proto.wrapPromiseFunction = function wrapPromiseFunction(fn, queueOptions) {\n var _this4 = this;\n\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var queuedRequest;\n var outerPromise = new Promise(function (resolve, reject) {\n queuedRequest = _this4.run(function () {\n var cancelError;\n var innerPromise;\n\n try {\n innerPromise = Promise.resolve(fn.apply(void 0, args));\n } catch (err) {\n innerPromise = Promise.reject(err);\n }\n\n innerPromise.then(function (result) {\n if (cancelError) {\n reject(cancelError);\n } else {\n queuedRequest.done();\n resolve(result);\n }\n }, function (err) {\n if (cancelError) {\n reject(cancelError);\n } else {\n queuedRequest.done();\n reject(err);\n }\n });\n return function () {\n cancelError = createCancelError();\n };\n }, queueOptions);\n });\n\n outerPromise.abort = function () {\n queuedRequest.abort();\n };\n\n return outerPromise;\n };\n };\n\n return RateLimitedQueue;\n}();","/**\n * Helper to abort upload requests if there has not been any progress for `timeout` ms.\n * Create an instance using `timer = new ProgressTimeout(10000, onTimeout)`\n * Call `timer.progress()` to signal that there has been progress of any kind.\n * Call `timer.done()` when the upload has completed.\n */\nvar ProgressTimeout = /*#__PURE__*/function () {\n function ProgressTimeout(timeout, timeoutHandler) {\n this._timeout = timeout;\n this._onTimedOut = timeoutHandler;\n this._isDone = false;\n this._aliveTimer = null;\n this._onTimedOut = this._onTimedOut.bind(this);\n }\n\n var _proto = ProgressTimeout.prototype;\n\n _proto.progress = function progress() {\n // Some browsers fire another progress event when the upload is\n // cancelled, so we have to ignore progress after the timer was\n // told to stop.\n if (this._isDone) return;\n\n if (this._timeout > 0) {\n if (this._aliveTimer) clearTimeout(this._aliveTimer);\n this._aliveTimer = setTimeout(this._onTimedOut, this._timeout);\n }\n };\n\n _proto.done = function done() {\n if (this._aliveTimer) {\n clearTimeout(this._aliveTimer);\n this._aliveTimer = null;\n }\n\n this._isDone = true;\n };\n\n return ProgressTimeout;\n}();\n\nmodule.exports = ProgressTimeout;","var _class, _temp;\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar _require = require('@uppy/core'),\n Plugin = _require.Plugin;\n\nvar cuid = require('cuid');\n\nvar Translator = require('@uppy/utils/lib/Translator');\n\nvar _require2 = require('@uppy/companion-client'),\n Provider = _require2.Provider,\n RequestClient = _require2.RequestClient,\n Socket = _require2.Socket;\n\nvar emitSocketProgress = require('@uppy/utils/lib/emitSocketProgress');\n\nvar getSocketHost = require('@uppy/utils/lib/getSocketHost');\n\nvar settle = require('@uppy/utils/lib/settle');\n\nvar EventTracker = require('@uppy/utils/lib/EventTracker');\n\nvar ProgressTimeout = require('@uppy/utils/lib/ProgressTimeout');\n\nvar RateLimitedQueue = require('@uppy/utils/lib/RateLimitedQueue');\n\nvar NetworkError = require('@uppy/utils/lib/NetworkError');\n\nvar isNetworkError = require('@uppy/utils/lib/isNetworkError');\n\nfunction buildResponseError(xhr, error) {\n // No error message\n if (!error) error = new Error('Upload error'); // Got an error message string\n\n if (typeof error === 'string') error = new Error(error); // Got something else\n\n if (!(error instanceof Error)) {\n error = _extends(new Error('Upload error'), {\n data: error\n });\n }\n\n if (isNetworkError(xhr)) {\n error = new NetworkError(error, xhr);\n return error;\n }\n\n error.request = xhr;\n return error;\n}\n/**\n * Set `data.type` in the blob to `file.meta.type`,\n * because we might have detected a more accurate file type in Uppy\n * https://stackoverflow.com/a/50875615\n *\n * @param {object} file File object with `data`, `size` and `meta` properties\n * @returns {object} blob updated with the new `type` set from `file.meta.type`\n */\n\n\nfunction setTypeInBlob(file) {\n var dataWithUpdatedType = file.data.slice(0, file.data.size, file.meta.type);\n return dataWithUpdatedType;\n}\n\nmodule.exports = (_temp = _class = /*#__PURE__*/function (_Plugin) {\n _inheritsLoose(XHRUpload, _Plugin);\n\n function XHRUpload(uppy, opts) {\n var _this;\n\n _this = _Plugin.call(this, uppy, opts) || this;\n _this.type = 'uploader';\n _this.id = _this.opts.id || 'XHRUpload';\n _this.title = 'XHRUpload';\n _this.defaultLocale = {\n strings: {\n timedOut: 'Upload stalled for %{seconds} seconds, aborting.'\n }\n }; // Default options\n\n var defaultOptions = {\n formData: true,\n fieldName: 'files[]',\n method: 'post',\n metaFields: null,\n responseUrlFieldName: 'url',\n bundle: false,\n headers: {},\n timeout: 30 * 1000,\n limit: 0,\n withCredentials: false,\n responseType: '',\n\n /**\n * @typedef respObj\n * @property {string} responseText\n * @property {number} status\n * @property {string} statusText\n * @property {object.<string, string>} headers\n *\n * @param {string} responseText the response body string\n * @param {XMLHttpRequest | respObj} response the response object (XHR or similar)\n */\n getResponseData: function getResponseData(responseText, response) {\n var parsedResponse = {};\n\n try {\n parsedResponse = JSON.parse(responseText);\n } catch (err) {\n console.log(err);\n }\n\n return parsedResponse;\n },\n\n /**\n *\n * @param {string} responseText the response body string\n * @param {XMLHttpRequest | respObj} response the response object (XHR or similar)\n */\n getResponseError: function getResponseError(responseText, response) {\n var error = new Error('Upload error');\n\n if (isNetworkError(response)) {\n error = new NetworkError(error, response);\n }\n\n return error;\n },\n\n /**\n * Check if the response from the upload endpoint indicates that the upload was successful.\n *\n * @param {number} status the response status code\n * @param {string} responseText the response body string\n * @param {XMLHttpRequest | respObj} response the response object (XHR or similar)\n */\n validateStatus: function validateStatus(status, responseText, response) {\n return status >= 200 && status < 300;\n }\n };\n _this.opts = _extends({}, defaultOptions, opts);\n\n _this.i18nInit();\n\n _this.handleUpload = _this.handleUpload.bind(_assertThisInitialized(_this)); // Simultaneous upload limiting is shared across all uploads with this plugin.\n // __queue is for internal Uppy use only!\n\n if (_this.opts.__queue instanceof RateLimitedQueue) {\n _this.requests = _this.opts.__queue;\n } else {\n _this.requests = new RateLimitedQueue(_this.opts.limit);\n }\n\n if (_this.opts.bundle && !_this.opts.formData) {\n throw new Error('`opts.formData` must be true when `opts.bundle` is enabled.');\n }\n\n _this.uploaderEvents = Object.create(null);\n return _this;\n }\n\n var _proto = XHRUpload.prototype;\n\n _proto.setOptions = function setOptions(newOpts) {\n _Plugin.prototype.setOptions.call(this, newOpts);\n\n this.i18nInit();\n };\n\n _proto.i18nInit = function i18nInit() {\n this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n this.i18n = this.translator.translate.bind(this.translator);\n this.setPluginState(); // so that UI re-renders and we see the updated locale\n };\n\n _proto.getOptions = function getOptions(file) {\n var overrides = this.uppy.getState().xhrUpload;\n var headers = this.opts.headers;\n\n var opts = _extends({}, this.opts, overrides || {}, file.xhrUpload || {}, {\n headers: {}\n }); // Support for `headers` as a function, only in the XHRUpload settings.\n // Options set by other plugins in Uppy state or on the files themselves are still merged in afterward.\n //\n // ```js\n // headers: (file) => ({ expires: file.meta.expires })\n // ```\n\n\n if (typeof headers === 'function') {\n opts.headers = headers(file);\n } else {\n _extends(opts.headers, this.opts.headers);\n }\n\n if (overrides) {\n _extends(opts.headers, overrides.headers);\n }\n\n if (file.xhrUpload) {\n _extends(opts.headers, file.xhrUpload.headers);\n }\n\n return opts;\n };\n\n _proto.addMetadata = function addMetadata(formData, meta, opts) {\n var metaFields = Array.isArray(opts.metaFields) ? opts.metaFields // Send along all fields by default.\n : Object.keys(meta);\n metaFields.forEach(function (item) {\n formData.append(item, meta[item]);\n });\n };\n\n _proto.createFormDataUpload = function createFormDataUpload(file, opts) {\n var formPost = new FormData();\n this.addMetadata(formPost, file.meta, opts);\n var dataWithUpdatedType = setTypeInBlob(file);\n\n if (file.name) {\n formPost.append(opts.fieldName, dataWithUpdatedType, file.meta.name);\n } else {\n formPost.append(opts.fieldName, dataWithUpdatedType);\n }\n\n return formPost;\n };\n\n _proto.createBundledUpload = function createBundledUpload(files, opts) {\n var _this2 = this;\n\n var formPost = new FormData();\n\n var _this$uppy$getState = this.uppy.getState(),\n meta = _this$uppy$getState.meta;\n\n this.addMetadata(formPost, meta, opts);\n files.forEach(function (file) {\n var opts = _this2.getOptions(file);\n\n var dataWithUpdatedType = setTypeInBlob(file);\n\n if (file.name) {\n formPost.append(opts.fieldName, dataWithUpdatedType, file.name);\n } else {\n formPost.append(opts.fieldName, dataWithUpdatedType);\n }\n });\n return formPost;\n };\n\n _proto.createBareUpload = function createBareUpload(file, opts) {\n return file.data;\n };\n\n _proto.upload = function upload(file, current, total) {\n var _this3 = this;\n\n var opts = this.getOptions(file);\n this.uppy.log(\"uploading \" + current + \" of \" + total);\n return new Promise(function (resolve, reject) {\n _this3.uppy.emit('upload-started', file);\n\n var data = opts.formData ? _this3.createFormDataUpload(file, opts) : _this3.createBareUpload(file, opts);\n var xhr = new XMLHttpRequest();\n _this3.uploaderEvents[file.id] = new EventTracker(_this3.uppy);\n var timer = new ProgressTimeout(opts.timeout, function () {\n xhr.abort();\n queuedRequest.done();\n var error = new Error(_this3.i18n('timedOut', {\n seconds: Math.ceil(opts.timeout / 1000)\n }));\n\n _this3.uppy.emit('upload-error', file, error);\n\n reject(error);\n });\n var id = cuid();\n xhr.upload.addEventListener('loadstart', function (ev) {\n _this3.uppy.log(\"[XHRUpload] \" + id + \" started\");\n });\n xhr.upload.addEventListener('progress', function (ev) {\n _this3.uppy.log(\"[XHRUpload] \" + id + \" progress: \" + ev.loaded + \" / \" + ev.total); // Begin checking for timeouts when progress starts, instead of loading,\n // to avoid timing out requests on browser concurrency queue\n\n\n timer.progress();\n\n if (ev.lengthComputable) {\n _this3.uppy.emit('upload-progress', file, {\n uploader: _this3,\n bytesUploaded: ev.loaded,\n bytesTotal: ev.total\n });\n }\n });\n xhr.addEventListener('load', function (ev) {\n _this3.uppy.log(\"[XHRUpload] \" + id + \" finished\");\n\n timer.done();\n queuedRequest.done();\n\n if (_this3.uploaderEvents[file.id]) {\n _this3.uploaderEvents[file.id].remove();\n\n _this3.uploaderEvents[file.id] = null;\n }\n\n if (opts.validateStatus(ev.target.status, xhr.responseText, xhr)) {\n var _body = opts.getResponseData(xhr.responseText, xhr);\n\n var uploadURL = _body[opts.responseUrlFieldName];\n var uploadResp = {\n status: ev.target.status,\n body: _body,\n uploadURL: uploadURL\n };\n\n _this3.uppy.emit('upload-success', file, uploadResp);\n\n if (uploadURL) {\n _this3.uppy.log(\"Download \" + file.name + \" from \" + uploadURL);\n }\n\n return resolve(file);\n }\n\n var body = opts.getResponseData(xhr.responseText, xhr);\n var error = buildResponseError(xhr, opts.getResponseError(xhr.responseText, xhr));\n var response = {\n status: ev.target.status,\n body: body\n };\n\n _this3.uppy.emit('upload-error', file, error, response);\n\n return reject(error);\n });\n xhr.addEventListener('error', function (ev) {\n _this3.uppy.log(\"[XHRUpload] \" + id + \" errored\");\n\n timer.done();\n queuedRequest.done();\n\n if (_this3.uploaderEvents[file.id]) {\n _this3.uploaderEvents[file.id].remove();\n\n _this3.uploaderEvents[file.id] = null;\n }\n\n var error = buildResponseError(xhr, opts.getResponseError(xhr.responseText, xhr));\n\n _this3.uppy.emit('upload-error', file, error);\n\n return reject(error);\n });\n xhr.open(opts.method.toUpperCase(), opts.endpoint, true); // IE10 does not allow setting `withCredentials` and `responseType`\n // before `open()` is called.\n\n xhr.withCredentials = opts.withCredentials;\n\n if (opts.responseType !== '') {\n xhr.responseType = opts.responseType;\n }\n\n var queuedRequest = _this3.requests.run(function () {\n // When using an authentication system like JWT, the bearer token goes as a header. This\n // header needs to be fresh each time the token is refreshed so computing and setting the\n // headers just before the upload starts enables this kind of authentication to work properly.\n // Otherwise, half-way through the list of uploads the token could be stale and the upload would fail.\n var currentOpts = _this3.getOptions(file);\n\n Object.keys(currentOpts.headers).forEach(function (header) {\n xhr.setRequestHeader(header, currentOpts.headers[header]);\n });\n xhr.send(data);\n return function () {\n timer.done();\n xhr.abort();\n };\n });\n\n _this3.onFileRemove(file.id, function () {\n queuedRequest.abort();\n reject(new Error('File removed'));\n });\n\n _this3.onCancelAll(file.id, function () {\n queuedRequest.abort();\n reject(new Error('Upload cancelled'));\n });\n });\n };\n\n _proto.uploadRemote = function uploadRemote(file, current, total) {\n var _this4 = this;\n\n var opts = this.getOptions(file);\n return new Promise(function (resolve, reject) {\n _this4.uppy.emit('upload-started', file);\n\n var fields = {};\n var metaFields = Array.isArray(opts.metaFields) ? opts.metaFields // Send along all fields by default.\n : Object.keys(file.meta);\n metaFields.forEach(function (name) {\n fields[name] = file.meta[name];\n });\n var Client = file.remote.providerOptions.provider ? Provider : RequestClient;\n var client = new Client(_this4.uppy, file.remote.providerOptions);\n client.post(file.remote.url, _extends({}, file.remote.body, {\n endpoint: opts.endpoint,\n size: file.data.size,\n fieldname: opts.fieldName,\n metadata: fields,\n httpMethod: opts.method,\n useFormData: opts.formData,\n headers: opts.headers\n })).then(function (res) {\n var token = res.token;\n var host = getSocketHost(file.remote.companionUrl);\n var socket = new Socket({\n target: host + \"/api/\" + token,\n autoOpen: false\n });\n _this4.uploaderEvents[file.id] = new EventTracker(_this4.uppy);\n\n _this4.onFileRemove(file.id, function () {\n socket.send('pause', {});\n queuedRequest.abort();\n resolve(\"upload \" + file.id + \" was removed\");\n });\n\n _this4.onCancelAll(file.id, function () {\n socket.send('pause', {});\n queuedRequest.abort();\n resolve(\"upload \" + file.id + \" was canceled\");\n });\n\n _this4.onRetry(file.id, function () {\n socket.send('pause', {});\n socket.send('resume', {});\n });\n\n _this4.onRetryAll(file.id, function () {\n socket.send('pause', {});\n socket.send('resume', {});\n });\n\n socket.on('progress', function (progressData) {\n return emitSocketProgress(_this4, progressData, file);\n });\n socket.on('success', function (data) {\n var body = opts.getResponseData(data.response.responseText, data.response);\n var uploadURL = body[opts.responseUrlFieldName];\n var uploadResp = {\n status: data.response.status,\n body: body,\n uploadURL: uploadURL\n };\n\n _this4.uppy.emit('upload-success', file, uploadResp);\n\n queuedRequest.done();\n\n if (_this4.uploaderEvents[file.id]) {\n _this4.uploaderEvents[file.id].remove();\n\n _this4.uploaderEvents[file.id] = null;\n }\n\n return resolve();\n });\n socket.on('error', function (errData) {\n var resp = errData.response;\n var error = resp ? opts.getResponseError(resp.responseText, resp) : _extends(new Error(errData.error.message), {\n cause: errData.error\n });\n\n _this4.uppy.emit('upload-error', file, error);\n\n queuedRequest.done();\n\n if (_this4.uploaderEvents[file.id]) {\n _this4.uploaderEvents[file.id].remove();\n\n _this4.uploaderEvents[file.id] = null;\n }\n\n reject(error);\n });\n\n var queuedRequest = _this4.requests.run(function () {\n socket.open();\n\n if (file.isPaused) {\n socket.send('pause', {});\n }\n\n return function () {\n return socket.close();\n };\n });\n }).catch(function (err) {\n _this4.uppy.emit('upload-error', file, err);\n\n reject(err);\n });\n });\n };\n\n _proto.uploadBundle = function uploadBundle(files) {\n var _this5 = this;\n\n return new Promise(function (resolve, reject) {\n var endpoint = _this5.opts.endpoint;\n var method = _this5.opts.method;\n\n var optsFromState = _this5.uppy.getState().xhrUpload;\n\n var formData = _this5.createBundledUpload(files, _extends({}, _this5.opts, optsFromState || {}));\n\n var xhr = new XMLHttpRequest();\n var timer = new ProgressTimeout(_this5.opts.timeout, function () {\n xhr.abort();\n var error = new Error(_this5.i18n('timedOut', {\n seconds: Math.ceil(_this5.opts.timeout / 1000)\n }));\n emitError(error);\n reject(error);\n });\n\n var emitError = function emitError(error) {\n files.forEach(function (file) {\n _this5.uppy.emit('upload-error', file, error);\n });\n };\n\n xhr.upload.addEventListener('loadstart', function (ev) {\n _this5.uppy.log('[XHRUpload] started uploading bundle');\n\n timer.progress();\n });\n xhr.upload.addEventListener('progress', function (ev) {\n timer.progress();\n if (!ev.lengthComputable) return;\n files.forEach(function (file) {\n _this5.uppy.emit('upload-progress', file, {\n uploader: _this5,\n bytesUploaded: ev.loaded / ev.total * file.size,\n bytesTotal: file.size\n });\n });\n });\n xhr.addEventListener('load', function (ev) {\n timer.done();\n\n if (_this5.opts.validateStatus(ev.target.status, xhr.responseText, xhr)) {\n var body = _this5.opts.getResponseData(xhr.responseText, xhr);\n\n var uploadResp = {\n status: ev.target.status,\n body: body\n };\n files.forEach(function (file) {\n _this5.uppy.emit('upload-success', file, uploadResp);\n });\n return resolve();\n }\n\n var error = _this5.opts.getResponseError(xhr.responseText, xhr) || new Error('Upload error');\n error.request = xhr;\n emitError(error);\n return reject(error);\n });\n xhr.addEventListener('error', function (ev) {\n timer.done();\n var error = _this5.opts.getResponseError(xhr.responseText, xhr) || new Error('Upload error');\n emitError(error);\n return reject(error);\n });\n\n _this5.uppy.on('cancel-all', function () {\n timer.done();\n xhr.abort();\n });\n\n xhr.open(method.toUpperCase(), endpoint, true); // IE10 does not allow setting `withCredentials` and `responseType`\n // before `open()` is called.\n\n xhr.withCredentials = _this5.opts.withCredentials;\n\n if (_this5.opts.responseType !== '') {\n xhr.responseType = _this5.opts.responseType;\n }\n\n Object.keys(_this5.opts.headers).forEach(function (header) {\n xhr.setRequestHeader(header, _this5.opts.headers[header]);\n });\n xhr.send(formData);\n files.forEach(function (file) {\n _this5.uppy.emit('upload-started', file);\n });\n });\n };\n\n _proto.uploadFiles = function uploadFiles(files) {\n var _this6 = this;\n\n var promises = files.map(function (file, i) {\n var current = parseInt(i, 10) + 1;\n var total = files.length;\n\n if (file.error) {\n return Promise.reject(new Error(file.error));\n }\n\n if (file.isRemote) {\n return _this6.uploadRemote(file, current, total);\n }\n\n return _this6.upload(file, current, total);\n });\n return settle(promises);\n };\n\n _proto.onFileRemove = function onFileRemove(fileID, cb) {\n this.uploaderEvents[fileID].on('file-removed', function (file) {\n if (fileID === file.id) cb(file.id);\n });\n };\n\n _proto.onRetry = function onRetry(fileID, cb) {\n this.uploaderEvents[fileID].on('upload-retry', function (targetFileID) {\n if (fileID === targetFileID) {\n cb();\n }\n });\n };\n\n _proto.onRetryAll = function onRetryAll(fileID, cb) {\n var _this7 = this;\n\n this.uploaderEvents[fileID].on('retry-all', function (filesToRetry) {\n if (!_this7.uppy.getFile(fileID)) return;\n cb();\n });\n };\n\n _proto.onCancelAll = function onCancelAll(fileID, cb) {\n var _this8 = this;\n\n this.uploaderEvents[fileID].on('cancel-all', function () {\n if (!_this8.uppy.getFile(fileID)) return;\n cb();\n });\n };\n\n _proto.handleUpload = function handleUpload(fileIDs) {\n var _this9 = this;\n\n if (fileIDs.length === 0) {\n this.uppy.log('[XHRUpload] No files to upload!');\n return Promise.resolve();\n } // no limit configured by the user, and no RateLimitedQueue passed in by a \"parent\" plugin (basically just AwsS3) using the top secret `__queue` option\n\n\n if (this.opts.limit === 0 && !this.opts.__queue) {\n this.uppy.log('[XHRUpload] When uploading multiple files at once, consider setting the `limit` option (to `10` for example), to limit the number of concurrent uploads, which helps prevent memory and network issues: https://uppy.io/docs/xhr-upload/#limit-0', 'warning');\n }\n\n this.uppy.log('[XHRUpload] Uploading...');\n var files = fileIDs.map(function (fileID) {\n return _this9.uppy.getFile(fileID);\n });\n\n if (this.opts.bundle) {\n // if bundle: true, we don’t support remote uploads\n var isSomeFileRemote = files.some(function (file) {\n return file.isRemote;\n });\n\n if (isSomeFileRemote) {\n throw new Error('Can’t upload remote files when the `bundle: true` option is set');\n }\n\n if (typeof this.opts.headers === 'function') {\n throw new TypeError('`headers` may not be a function when the `bundle: true` option is set');\n }\n\n return this.uploadBundle(files);\n }\n\n return this.uploadFiles(files).then(function () {\n return null;\n });\n };\n\n _proto.install = function install() {\n if (this.opts.bundle) {\n var _this$uppy$getState2 = this.uppy.getState(),\n capabilities = _this$uppy$getState2.capabilities;\n\n this.uppy.setState({\n capabilities: _extends({}, capabilities, {\n individualCancellation: false\n })\n });\n }\n\n this.uppy.addUploader(this.handleUpload);\n };\n\n _proto.uninstall = function uninstall() {\n if (this.opts.bundle) {\n var _this$uppy$getState3 = this.uppy.getState(),\n capabilities = _this$uppy$getState3.capabilities;\n\n this.uppy.setState({\n capabilities: _extends({}, capabilities, {\n individualCancellation: true\n })\n });\n }\n\n this.uppy.removeUploader(this.handleUpload);\n };\n\n return XHRUpload;\n}(Plugin), _class.VERSION = \"1.7.5\", _temp);"],"sourceRoot":""}