diff --git a/appcache/manifest.appcache b/appcache/manifest.appcache index 22b959d..fb9e10a 100644 --- a/appcache/manifest.appcache +++ b/appcache/manifest.appcache @@ -1,10 +1,10 @@ CACHE MANIFEST -#ver:8/2/2017, 5:17:18 PM +#ver:6/13/2018, 7:13:03 PM #plugin:4.8.3 CACHE: -/bundle.c14f881344d79b6d5899.js -/bundle.c14f881344d79b6d5899.css +/bundle.db4a3dd38e813528b682.js +/bundle.db4a3dd38e813528b682.css / NETWORK: diff --git a/bundle.c14f881344d79b6d5899.js b/bundle.c14f881344d79b6d5899.js deleted file mode 100644 index b16d8b1..0000000 --- a/bundle.c14f881344d79b6d5899.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e){function n(o){if(t[o])return t[o].exports;var i=t[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,n),i.l=!0,i.exports}var t={};n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:o})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="/",n(n.s=2)}([function(e,n,t){"use strict";function o(e,n){function t(e){e.preventDefault();var n=(0,d.showDownloadOptions)({}),t=n.failed,c=n.suceeded;r(i,a,o,t,c)}var o=n.OrginalImage,i=n.canvas,a=n.originalFileName;e.addEventListener("click",t)}function i(e){console.log(e)}function r(e,n,t){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:i,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:i,d=n+"-minimage-"+l+".png";a(e,t,o,r),c(e,d,o,r),l++}function a(e,n,t,o){try{var i=e.getContext("2d"),r=i.globalCompositeOperation;return i.globalCompositeOperation="destination-over",i.drawImage(n,0,0,e.width,e.height),i.globalCompositeOperation=r,o&&setTimeout(o),e}catch(e){t&&t(e)}}function c(e,n,t,o){try{e.toBlob(function(e){try{if(window.navigator.msSaveOrOpenBlob)window.navigator.msSaveBlob(e,n),o&&setTimeout(o);else{var i=window.URL.createObjectURL(e),r=document.createElement("a");document.body.appendChild(r),r.setAttribute("href",i),r.setAttribute("download",n),r.click(),o&&setTimeout(o),setTimeout(function(){window.URL.revokeObjectURL(i),document.body.removeChild(r)},3e3)}}catch(e){t&&t(e)}})}catch(e){t&&t(e)}}Object.defineProperty(n,"__esModule",{value:!0}),n.makeDownloadLink=o,n.triggerDownload=r,n.mergeCanvasAndImage=a;var d=t(11),l=0},function(e,n,t){"use strict";function o(e,n){function t(e){27==e.which&&o()}function o(){r.classList.add("closing"),a.classList.add("closing"),setTimeout(function(){document.body.removeChild(r),document.body.removeChild(a)},300),document.removeEventListener("keyup",t)}var r=document.createElement("div");r.classList.add("modal"),r.classList.add(e),document.body.appendChild(r);var a=document.createElement("div");return a.classList.add("modal-backdrop"),document.body.appendChild(a),a.style.zIndex=i,r.style.zIndex=i+1,a.addEventListener("click",o),document.addEventListener("keyup",t),i+=2,n({modal:r,closeModal:o})}Object.defineProperty(n,"__esModule",{value:!0}),n.createModal=o;var i=4},function(e,n,t){e.exports=t(3)},function(e,n,t){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function i(e){function n(e){"eraser"==e?y():w(e)}M=e,O();var t=L("drawzone"),o=L("drawzoneWrapper");L("inputForAFile").style.display="none",L("drawAndDownload").style.display="",console.log(e.width,e.height);var i=2*Math.max(window.innerWidth,window.innerHeight),r=Math.max(e.width/i,e.height/i,1);e.width=t.width=e.width/r,e.height=t.height=e.height/r,o.style.maxWidth=e.width,o.style.maxHeight=e.height,o.appendChild(e);var c=(t.getContext("2d"),!1),d=L("topbar").classList,l=L("background"),u=(0,a.default)(L("pensizePreview"),{canvasForCursor:t,onColorChange:n,elementToContrastWith:l}),p=u.setColorDotSize,m=u.refreshColorPreviewBorder,h=(u.clearColorPicker,(0,f.default)(t,{onMouseDown:function(){t.getClientRects()[0].height+160>window.innerHeight&&d.add("drawInProgress")},onMouseUp:function(){c||(c=!0,download.classList.add("usable")),d.remove("drawInProgress")},OrginalImage:M})),w=h.drawWithColor,y=h.drawWithEraser,C=h.setPencilSize;(0,s.default)(l,{onChange:m}),(0,v.default)(L("pensize"),{onChange:function(e){p(e),C(e)}}),(0,g.makeDownloadLink)(L("download"),{OrginalImage:M,originalFileName:E,canvas:t}),(0,b.detectCtrlS)({canvas:t,OrginalImage:M,originalFileName:E})}t(4);var r=t(5),a=o(r),c=t(8),d=o(c),l=t(9),s=o(l),u=t(10),f=o(u),g=t(0),p=t(12),v=o(p),m=t(13),h=o(m),w=t(14),y=t(15),b=t(16),C=t(17),k=function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t]);return n.default=e,n}(C),L=document.getElementById.bind(document);k.install(),(0,w.checkRunWithinWebview)();var E=void 0,M=void 0;(0,d.default)({fileinput:L("fileinput"),onImageCreated:function(e,n){E=n,i(e)},startTask:y.startTask,endTask:y.endTask});var F=(0,h.default)(L("welcome"),{fitWindow:!0}),O=F.stopAnim,x=F.bgColor;L("fileInputWrapper").style.color=x},function(e,n){},function(e,n,t){"use strict";function o(e,n){if("eraser"==e)return"transparent";var t=(0,l.luminance)(n),o=(0,l.luminance)(e);return t>125&&o>200?"black":t<125&&o<25?"white":"transparent"}function i(e){return(0,l.luminance)(e)>127.5?"rgba(0,0,0,0.8)":"rgba(255,255,255,0.8)"}function r(e,n){(0,u.createModal)("color-modal",function(t){function o(e){a(),n(e)}var r=t.modal,a=t.closeModal;s.paletteColors.forEach(function(n){var t=document.createElement("button");t.classList.add("colorbutton"),n===e&&(t.classList.add("active"),t.innerHTML="Selected",t.style.color=i(n)),t.style.backgroundColor=n.toLowerCase(),t.addEventListener("click",function(){return o(n)}),r.appendChild(t)});var c=document.createElement("button");c.classList.add("eraser"),c.addEventListener("click",function(){return o("eraser")}),c.innerHTML=''+("eraser"===e?"Eraser selected":"Eraser")+"",r.appendChild(c)})}function a(e,n,t){var o=n<4?4:n,i=document.createElement("canvas");i.width=i.height=o;var r=i.getContext("2d");"eraser"==t?d(r,o):c(r,o,t);var a=i.toDataURL("image/png");e.style.cursor="url("+a+") "+o/2+" "+o/2+",auto"}function c(e,n,t){e.beginPath(),e.arc(n/2,n/2,n/2,0,2*Math.PI,!1),e.fillStyle=t,e.fill()}function d(e,n){e.fillStyle="#da502d",e.fillRect(0,0,2*n/3,n),e.fillStyle="#6584a5",e.fillRect(2*n/3-1,0,n,n),e.globalCompositeOperation="destination-in",c(e,n,"white")}Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){function t(){p.style.background=o(v,s.style.backgroundColor)}function i(){r(v,c)}function c(e){console.log("onColorPicked",e),v&&e!==v&&(m=v),localStorage.setItem("previousColor",m),v=e,a(u,h,v),"eraser"==e?(g.style.background="",g.classList.add("eraser")):(g.classList.remove("eraser"),g.style.background=e,t()),localStorage.setItem("color",e),l(e)}function d(e){h=e,a(u,h,v),g.style.transform="scale("+e/w+")",p.style.transform="scale("+(e/w+1/w)+")"}var l=n.onColorChange,s=n.elementToContrastWith,u=n.canvasForCursor,g=e.children[0],p=e.children[1],v=void 0;e.addEventListener("click",i);var m=localStorage.getItem("previousColor")||"eraser",h=void 0,w=g.getBoundingClientRect().width;return window.addEventListener("keydown",function(e){"x"===String.fromCharCode(e.which).toLowerCase()&&(console.log("x switching to "+m),c(m))}),setTimeout(function(){return c(localStorage.getItem("color")||f)}),{clearColorPicker:function(){e.removeEventListener("click",i)},setColorDotSize:d,refreshColorPreviewBorder:t}};var l=t(6),s=t(7),u=t(1),f="#2b76ce"},function(e,n,t){"use strict";function o(e){if(Array.isArray(e)){for(var n=0,t=Array(e.length);n2&&void 0!==arguments[2]?arguments[2]:e;e.addEventListener(n,function(e){e.preventDefault();var n=e.touches[0]||{},i=n.clientX,r=n.clientY,a=new MouseEvent(t,{clientX:i,clientY:r});o.dispatchEvent(a)},!1)}var s=n.onMouseDown,u=n.onMouseUp,f=n.OrginalImage,g=void 0,p=void 0,v=void 0;t(),window.addEventListener("resize",t);var m=e.getContext("2d");m.lineCap="round";var h={x:0,y:0},w=h;e.addEventListener("mousedown",function(n){if(3==n.which)return void(0,o.mergeCanvasAndImage)(e,f);h=w=i(n),r(),s()},!1),document.addEventListener("copy",function(n){n.preventDefault(),(0,o.mergeCanvasAndImage)(e,f),n.clipboardData.setData("text/html",'')}),document.addEventListener("mouseup",a,!1),e.addEventListener("mousemove",function(e){h=i(e)},!1);var y=!1;return l("touchstart","mousedown"),l("touchend","mouseup",document),l("touchmove","mousemove"),{drawWithEraser:function(){m.globalCompositeOperation="destination-out"},drawWithColor:function(e){m.globalCompositeOperation="source-over",m.strokeStyle=e},setPencilSize:function(e){v=e,m.lineWidth=e/g}}};var o=t(0)},function(e,n,t){"use strict";function o(e){if(null==e)throw new TypeError("Cannot destructure undefined")}function i(e){return o(e),(0,a.createModal)("file-download",function(e){function n(e,n){var t=document.getElementById("downloadIndicator");t.classList.add(e),t.innerHTML=n}var t=e.modal,o=e.closeModal;t.innerHTML='\n

Your download is getting ready

\n\n '+r()+'\n\n \n Like our facebook page\n \n\n\n \n This app is open source. See the source code on github.\n \n\n\n\n\n

Pressing "X" will switch between the last 2 used colors.

\n

You can edit transparent pngs and keep them transparent

\n

Clicking the background around the picture will switch between light and dark background

\n\n

You can paste an image in the page and it will be loaded

\n

You can drop an image file in the page and it will be loaded

\n

You can right click the canvas and copy its content

\n

Pressing ctrl+s will trigger the download of the picture

\n\n\n\n\n ',t.addEventListener("click",function(e){var n=e.target.getAttribute("class");return"keepDrawing"==n?o():"newPicture"==n?window.location.reload():console.log("unrecognized click ",e)});var i=!1;return{failed:function(e){i=!0,n("failed","\n It looks like the download failed, sorry about that.\n It works best on google chrome.\n
"+e.stack+"
\n ")},suceeded:function(){i||n("sucess",'\n
Download started
\n \n \n ')}}})}function r(){return navigator.userAgent.match(/Android/i)?"?fromHomeScreen"===window.location.search?"":"\n

You can add this app to your home screen and it will work\n offline and in full screen.\n

\n ":""}Object.defineProperty(n,"__esModule",{value:!0}),n.showDownloadOptions=i;var a=t(1)},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){function t(n){e.value=n,localStorage.setItem("pensize",n),i(n)}var i=n.onChange;e.addEventListener("input",function(e){return t(e.target.value)}),t(parseInt(localStorage.getItem("pensize"))||o)};var o=20},function(e,n,t){"use strict";function o(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",t=e.filter(function(e){return e!=n});return t[Math.floor(Math.random()*t.length)]}Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){function t(){s&&(e.width=window.innerWidth,e.height=window.innerHeight),f=e.width,g=e.height,u=e.getContext("2d"),u.fillStyle=p,u.fillRect(0,0,f,g),u.lineCap="round",r()}function r(){v={x:f/2,y:g/2},m={x:10*Math.random()-5,y:10*Math.random()-5},h={x:10*Math.random()-5,y:10*Math.random()-5},u.strokeStyle=o(i,p),u.lineWidth=20+40*Math.random(),u.beginPath(),u.moveTo(v.x,v.y)}function a(){h={x:2*Math.random()-1,y:2*Math.random()-1},w=setTimeout(a,100+200*Math.random())}function c(){u.moveTo(v.x,v.y),m.x*=.95,m.y*=.95,m.x+=h.x,m.y+=h.y,v.x+=m.x,v.y+=m.y,u.lineTo(v.x,v.y),u.stroke(),(v.x<-50||v.x>f+50||v.y<-50||v.y>g+50)&&r()}function d(){y&&(window.requestAnimationFrame(d),c())}function l(){y=!1,clearTimeout(w),window.removeEventListener("resize",t)}var s=n.fitWindow,u=void 0,f=void 0,g=void 0,p="#F44336",v=void 0,m=void 0,h=void 0,w=void 0;t(),window.addEventListener("resize",t),a();var y=!0;return d(),{stopAnim:l,bgColor:p}};var i="#F44336,#E91E63,#9C27B0,#673AB7,#3F51B5,#2196F3,#03A9F4,#00BCD4,#009688,#4CAF50,#8BC34A,#CDDC39,#FFEB3B,#FFC107,#FF9800,#FF5722".split(",")},function(e,n,t){"use strict";function o(){if(navigator.userAgent.match(/Android/i)){var e=document.createElement("script");e.src="https://iswebview.herokuapp.com/?callback=JSONPcallback",document.body.appendChild(e)}}Object.defineProperty(n,"__esModule",{value:!0}),n.checkRunWithinWebview=o,window.JSONPcallback=function(e){e.isWebView&&(document.body.classList.add("runningWithinWebview"),document.body.innerHTML='\n Please open minimage.tk with chrome,\n it cannot work within another app.\n\n There may be an option in the menu above the page,\n something like "Open in Chrome".\n\n ')}},function(e,n,t){"use strict";function o(){a++,r()}function i(){a--,setTimeout(r)}function r(){spinners.classList[a?"remove":"add"]("hidden")}Object.defineProperty(n,"__esModule",{value:!0}),n.startTask=o,n.endTask=i,n.updateLook=r;var a=0;document.addEventListener("DOMContentLoaded",r)},function(e,n,t){"use strict";function o(e){var n=e.canvas,t=e.OrginalImage,o=e.originalFileName;window.addEventListener("keydown",function(e){(e.ctrlKey||e.metaKey)&&"s"===String.fromCharCode(e.which).toLowerCase()&&(e.preventDefault(),(0,i.triggerDownload)(n,o,t))})}Object.defineProperty(n,"__esModule",{value:!0}),n.detectCtrlS=o;var i=t(0)},function(e,n){function t(){return"serviceWorker"in navigator&&(window.fetch||"imageRendering"in document.documentElement.style)&&("https:"===window.location.protocol||"localhost"===window.location.hostname||0===window.location.hostname.indexOf("127."))}function o(e){if(e||(e={}),t()){navigator.serviceWorker.register("/sw.js")}else if(window.applicationCache){var n=function(){var e=document.createElement("iframe");e.src="/appcache/manifest.html",e.style.display="none",a=e,document.body.appendChild(e)};return void("complete"===document.readyState?setTimeout(n):window.addEventListener("load",n))}}function i(e,n){}function r(){if(t()&&navigator.serviceWorker.getRegistration().then(function(e){if(e)return e.update()}),a)try{a.contentWindow.applicationCache.update()}catch(e){}}var a;n.install=o,n.applyUpdate=i,n.update=r}]); -//# sourceMappingURL=bundle.c14f881344d79b6d5899.js.map \ No newline at end of file diff --git a/bundle.c14f881344d79b6d5899.js.map b/bundle.c14f881344d79b6d5899.js.map deleted file mode 100644 index 5bd58a3..0000000 --- a/bundle.c14f881344d79b6d5899.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///bundle.c14f881344d79b6d5899.js","webpack:///webpack/bootstrap c14f881344d79b6d5899","webpack:///./src/canvasMergerAndDonwloaderLink.js","webpack:///./src/modal.js","webpack:///./src/app.js","webpack:///./src/colorPicker.js","webpack:///./src/colorToRGB.js","webpack:///./src/palette.js","webpack:///./src/getAnImage.js","webpack:///./src/toggleAbleBackground.js","webpack:///./src/editableCanvas.js","webpack:///./src/showDownloadOptions.js","webpack:///./src/pencilSizeSlider.js","webpack:///./src/welcomeAnim.js","webpack:///./src/checkRunWithinWebview.js","webpack:///./src/spinners.js","webpack:///./src/detectCtrlS.js","webpack:///./node_modules/offline-plugin/runtime.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","makeDownloadLink","link","_ref","downloadImage","e","preventDefault","_showDownloadOptions","_showDownloadOptions2","showDownloadOptions","failed","suceeded","triggerDownload","canvas","originalFileName","OrginalImage","addEventListener","nope","console","log","arguments","length","undefined","filename","downloadCounter","mergeCanvasAndImage","downloadCanvas","img","ctx","getContext","oldComposite","globalCompositeOperation","drawImage","width","height","setTimeout","toBlob","blob","window","navigator","msSaveOrOpenBlob","msSaveBlob","url","URL","createObjectURL","document","createElement","body","appendChild","setAttribute","click","revokeObjectURL","removeChild","value","createModal","className","callback","closeOnEscape","ev","which","closeModal","modal","classList","add","backdrop","removeEventListener","style","zIndex","modalZindex","_interopRequireDefault","obj","default","letUserDrawAndDownload","setColor","color","drawWithEraser","drawWithColor","stopAnim","byId","drawzoneWrapper","display","maxRes","Math","max","innerWidth","innerHeight","imgScale","maxWidth","maxHeight","hasDoneFirstDraw","barClass","background","_setupColorPicker","_colorPicker2","canvasForCursor","onColorChange","elementToContrastWith","setColorDotSize","refreshColorPreviewBorder","_setupEditableCanvas","clearColorPicker","_editableCanvas2","onMouseDown","getClientRects","onMouseUp","download","remove","setPencilSize","_toggleAbleBackground2","onChange","_pencilSizeSlider2","pxSize","_canvasMergerAndDonwloaderLink","_detectCtrlS","detectCtrlS","_colorPicker","_getAnImage","_getAnImage2","_toggleAbleBackground","_editableCanvas","_pencilSizeSlider","_welcomeAnim2","_welcomeAnim3","_checkRunWithinWebview","_spinners","_runtime","OfflinePluginRuntime","newObj","key","getElementById","bind","install","checkRunWithinWebview","fileinput","onImageCreated","startTask","endTask","_welcomeAnim","fitWindow","bgColor","borderColor","foreground","bgL","_colorToRGB","luminance","fgL","textColor","openColorPicker","currentColor","_modal","_ref2","pickColor","_palette","paletteColors","forEach","button","innerHTML","backgroundColor","toLowerCase","eraser","setCursor","node","size","drawEraser","drawColorCircle","cursor","toDataURL","beginPath","arc","PI","fillStyle","fill","fillRect","pensizePreview","pensizePreviewBorder","openInitializedColorPicker","onColorPicked","previousColor","localStorage","setItem","currentSize","pensizePreviewDot","transform","baseSize","children","getItem","getBoundingClientRect","String","fromCharCode","DEFAULTCOLOR","_toConsumableArray","arr","Array","isArray","arr2","from","colorToRGB","clearRect","concat","getImageData","data","slice","reduce","a","b","split","loadFile","fileToLoad","fileReader","FileReader","onload","createImageWithFileContent","result","onerror","readAsDataURL","askingForImage","Image","src","handleDataTransferItems","items","imageFile","find","kind","type","match","getAsFile","getAsString","_ref$startTask","_ref$endTask","fileChanged","changeEvent","pop","target","files","clipboardData","stopPropagation","dataTransfer","switchBackground","currentMode","applyBackground","options","current","bclass","index","switchCount","measureScale","rect","scale","lastUsedPXsize","lineWidth","getMousePos","mouseEvent","x","clientX","left","y","clientY","top","startDrawLoop","isDrawing","drawLoop","endDrawLoop","requestAnimationFrame","renderCanvas","moveTo","lastPos","lineTo","mousePos","stroke","proxyTouchToMouse","touchEventName","mouseEventName","eventTarget","touches","MouseEvent","dispatchEvent","lineCap","setData","strokeStyle","_objectDestructuringEmpty","TypeError","reportDLStatus","text","addToHomeScreen","targetClass","getAttribute","location","reload","exeption","stack","userAgent","search","slider","onPencilSizeChange","parseInt","DEFAULTSIZE","randomColor","colorPool","exception","withoutEx","filter","floor","random","reset","w","h","randomizeInst","position","speed","acceleration","coolColors","randomAcceletation","accelerationTimeoutHandle","clearTimeout","JSONPcall","JSONPcallback","isWebView","tasksInProgress","updateLook","spinners","event","ctrlKey","metaKey","hasSW","fetch","documentElement","protocol","hostname","indexOf","serviceWorker","register","applicationCache","doLoad","iframe","directory","appCacheIframe","readyState","applyUpdate","errback","update","getRegistration","then","registration","contentWindow"],"mappings":"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","file":"bundle.c14f881344d79b6d5899.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 2);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.makeDownloadLink = makeDownloadLink;\nexports.triggerDownload = triggerDownload;\nexports.mergeCanvasAndImage = mergeCanvasAndImage;\n\nvar _showDownloadOptions2 = __webpack_require__(11);\n\nfunction makeDownloadLink(link, _ref) {\n var OrginalImage = _ref.OrginalImage,\n canvas = _ref.canvas,\n originalFileName = _ref.originalFileName;\n\n // Download button\n function downloadImage(e) {\n e.preventDefault();\n\n var _showDownloadOptions = (0, _showDownloadOptions2.showDownloadOptions)({}),\n failed = _showDownloadOptions.failed,\n suceeded = _showDownloadOptions.suceeded;\n\n triggerDownload(canvas, originalFileName, OrginalImage, failed, suceeded);\n }\n link.addEventListener(\"click\", downloadImage);\n}\n\nfunction nope(e) {\n console.log(e);\n}\nvar downloadCounter = 0;\nfunction triggerDownload(canvas, originalFileName, OrginalImage) {\n var failed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : nope;\n var suceeded = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : nope;\n\n var filename = originalFileName + \"-minimage-\" + downloadCounter + \".png\";\n mergeCanvasAndImage(canvas, OrginalImage, failed, suceeded);\n downloadCanvas(canvas, filename, failed, suceeded);\n\n downloadCounter++;\n}\n\nfunction mergeCanvasAndImage(canvas, img, failed, suceeded) {\n try {\n // Pastes the image as a canvas background\n var ctx = canvas.getContext(\"2d\");\n var oldComposite = ctx.globalCompositeOperation;\n ctx.globalCompositeOperation = \"destination-over\";\n\n // Draw the orignal image\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n ctx.globalCompositeOperation = oldComposite;\n suceeded && setTimeout(suceeded);\n return canvas;\n } catch (e) {\n failed && failed(e);\n }\n}\n\nfunction downloadCanvas(canvas, filename, failed, suceeded) {\n try {\n canvas.toBlob(function (blob) {\n try {\n if (window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveBlob(blob, filename);\n suceeded && setTimeout(suceeded);\n } else {\n var url = window.URL.createObjectURL(blob);\n var link = document.createElement(\"a\");\n document.body.appendChild(link);\n link.setAttribute(\"href\", url);\n link.setAttribute(\"download\", filename);\n link.click();\n suceeded && setTimeout(suceeded);\n setTimeout(function () {\n window.URL.revokeObjectURL(url);\n document.body.removeChild(link);\n }, 3000);\n }\n } catch (e) {\n failed && failed(e);\n }\n });\n } catch (e) {\n failed && failed(e);\n }\n}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createModal = createModal;\nvar modalZindex = 4;\nfunction createModal(className, callback) {\n var modal = document.createElement(\"div\");\n modal.classList.add(\"modal\");\n modal.classList.add(className);\n document.body.appendChild(modal);\n\n var backdrop = document.createElement(\"div\");\n backdrop.classList.add(\"modal-backdrop\");\n document.body.appendChild(backdrop);\n\n backdrop.style.zIndex = modalZindex;\n modal.style.zIndex = modalZindex + 1;\n backdrop.addEventListener(\"click\", closeModal);\n document.addEventListener(\"keyup\", closeOnEscape);\n function closeOnEscape(ev) {\n if (ev.which == 27 // escape key\n ) closeModal();\n }\n function closeModal() {\n modal.classList.add(\"closing\");\n backdrop.classList.add(\"closing\");\n setTimeout(function () {\n document.body.removeChild(modal);\n document.body.removeChild(backdrop);\n }, 300);\n document.removeEventListener(\"keyup\", closeOnEscape);\n }\n modalZindex += 2;\n return callback({ modal: modal, closeModal: closeModal });\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(3);\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(4);\n\nvar _colorPicker = __webpack_require__(5);\n\nvar _colorPicker2 = _interopRequireDefault(_colorPicker);\n\nvar _getAnImage = __webpack_require__(8);\n\nvar _getAnImage2 = _interopRequireDefault(_getAnImage);\n\nvar _toggleAbleBackground = __webpack_require__(9);\n\nvar _toggleAbleBackground2 = _interopRequireDefault(_toggleAbleBackground);\n\nvar _editableCanvas = __webpack_require__(10);\n\nvar _editableCanvas2 = _interopRequireDefault(_editableCanvas);\n\nvar _canvasMergerAndDonwloaderLink = __webpack_require__(0);\n\nvar _pencilSizeSlider = __webpack_require__(12);\n\nvar _pencilSizeSlider2 = _interopRequireDefault(_pencilSizeSlider);\n\nvar _welcomeAnim2 = __webpack_require__(13);\n\nvar _welcomeAnim3 = _interopRequireDefault(_welcomeAnim2);\n\nvar _checkRunWithinWebview = __webpack_require__(14);\n\nvar _spinners = __webpack_require__(15);\n\nvar _detectCtrlS = __webpack_require__(16);\n\nvar _runtime = __webpack_require__(17);\n\nvar OfflinePluginRuntime = _interopRequireWildcard(_runtime);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*\n\nSee the app in action here : https://minimage.tk\n\n*/\nvar byId = document.getElementById.bind(document);\n\nOfflinePluginRuntime.install();\n\n(0, _checkRunWithinWebview.checkRunWithinWebview)();\nvar originalFileName = void 0,\n OrginalImage = void 0;\n(0, _getAnImage2.default)({\n fileinput: byId(\"fileinput\"),\n onImageCreated: function onImageCreated(img, filename) {\n originalFileName = filename;\n letUserDrawAndDownload(img);\n },\n startTask: _spinners.startTask,\n endTask: _spinners.endTask\n});\n\nvar _welcomeAnim = (0, _welcomeAnim3.default)(byId(\"welcome\"), { fitWindow: true }),\n stopAnim = _welcomeAnim.stopAnim,\n bgColor = _welcomeAnim.bgColor;\n\nbyId(\"fileInputWrapper\").style.color = bgColor;\n\n// Lets the user draw on the loaded image\nfunction letUserDrawAndDownload(img) {\n OrginalImage = img;\n stopAnim();\n var canvas = byId(\"drawzone\"),\n drawzoneWrapper = byId(\"drawzoneWrapper\");\n\n // Switch to drawing mode\n byId(\"inputForAFile\").style.display = \"none\";\n byId(\"drawAndDownload\").style.display = \"\";\n\n console.log(img.width, img.height);\n var maxRes = Math.max(window.innerWidth, window.innerHeight) * 2;\n // Fits the canvas to screen\n var imgScale = Math.max(img.width / maxRes, img.height / maxRes, 1);\n img.width = canvas.width = img.width / imgScale;\n img.height = canvas.height = img.height / imgScale;\n drawzoneWrapper.style.maxWidth = img.width;\n drawzoneWrapper.style.maxHeight = img.height;\n\n // Needs to happen AFTER size measurements\n drawzoneWrapper.appendChild(img);\n\n var ctx = canvas.getContext(\"2d\");\n var hasDoneFirstDraw = false;\n var barClass = byId(\"topbar\").classList;\n\n var background = byId(\"background\");\n\n var _setupColorPicker = (0, _colorPicker2.default)(byId(\"pensizePreview\"), {\n canvasForCursor: canvas,\n onColorChange: setColor,\n elementToContrastWith: background\n }),\n setColorDotSize = _setupColorPicker.setColorDotSize,\n refreshColorPreviewBorder = _setupColorPicker.refreshColorPreviewBorder,\n clearColorPicker = _setupColorPicker.clearColorPicker;\n\n var _setupEditableCanvas = (0, _editableCanvas2.default)(canvas, {\n onMouseDown: function onMouseDown() {\n if (canvas.getClientRects()[0].height + 2 * 80 > window.innerHeight) {\n barClass.add(\"drawInProgress\");\n }\n },\n onMouseUp: function onMouseUp() {\n if (!hasDoneFirstDraw) {\n hasDoneFirstDraw = true;\n download.classList.add(\"usable\");\n }\n barClass.remove(\"drawInProgress\");\n },\n\n OrginalImage: OrginalImage\n }),\n drawWithColor = _setupEditableCanvas.drawWithColor,\n drawWithEraser = _setupEditableCanvas.drawWithEraser,\n setPencilSize = _setupEditableCanvas.setPencilSize;\n\n // Sets draw color at load and when user clicks color input\n\n\n function setColor(color) {\n if (color == \"eraser\") {\n drawWithEraser();\n } else {\n drawWithColor(color);\n }\n }\n // Tap the background to switch its color (usefull for transparent images)\n (0, _toggleAbleBackground2.default)(background, { onChange: refreshColorPreviewBorder });\n\n (0, _pencilSizeSlider2.default)(byId(\"pensize\"), {\n onChange: function onChange(pxSize) {\n setColorDotSize(pxSize);\n setPencilSize(pxSize);\n }\n });\n\n (0, _canvasMergerAndDonwloaderLink.makeDownloadLink)(byId(\"download\"), {\n OrginalImage: OrginalImage,\n originalFileName: originalFileName,\n canvas: canvas\n });\n\n (0, _detectCtrlS.detectCtrlS)({\n canvas: canvas,\n OrginalImage: OrginalImage,\n originalFileName: originalFileName\n });\n\n function clear() {\n clearColorPicker();\n }\n}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (pensizePreview, _ref) {\n var onColorChange = _ref.onColorChange,\n elementToContrastWith = _ref.elementToContrastWith,\n canvasForCursor = _ref.canvasForCursor;\n\n var pensizePreviewDot = pensizePreview.children[0];\n var pensizePreviewBorder = pensizePreview.children[1];\n\n function refreshColorPreviewBorder() {\n pensizePreviewBorder.style.background = borderColor(currentColor, elementToContrastWith.style.backgroundColor);\n }\n\n var currentColor = void 0;\n function openInitializedColorPicker() {\n openColorPicker(currentColor, onColorPicked);\n }\n pensizePreview.addEventListener(\"click\", openInitializedColorPicker);\n var previousColor = localStorage.getItem(\"previousColor\") || \"eraser\";\n\n function onColorPicked(color) {\n console.log(\"onColorPicked\", color);\n if (currentColor && color !== currentColor) {\n // For toggling between last two colors\n previousColor = currentColor;\n }\n\n localStorage.setItem(\"previousColor\", previousColor);\n\n currentColor = color;\n setCursor(canvasForCursor, currentSize, currentColor);\n if (color == \"eraser\") {\n pensizePreviewDot.style.background = \"\";\n pensizePreviewDot.classList.add(\"eraser\");\n } else {\n pensizePreviewDot.classList.remove(\"eraser\");\n pensizePreviewDot.style.background = color;\n refreshColorPreviewBorder();\n }\n localStorage.setItem(\"color\", color);\n onColorChange(color);\n }\n var currentSize = void 0;\n // Should be 10\n var baseSize = pensizePreviewDot.getBoundingClientRect().width;\n\n window.addEventListener(\"keydown\", function (ev) {\n if (String.fromCharCode(ev.which).toLowerCase() === \"x\") {\n console.log(\"x switching to \" + previousColor);\n onColorPicked(previousColor);\n }\n });\n\n function setColorDotSize(pxSize) {\n currentSize = pxSize;\n setCursor(canvasForCursor, currentSize, currentColor);\n pensizePreviewDot.style.transform = \"scale(\" + pxSize / baseSize + \")\";\n pensizePreviewBorder.style.transform = \"scale(\" + (pxSize / baseSize + 1 / baseSize) + \")\";\n }\n\n setTimeout(function () {\n return onColorPicked(localStorage.getItem(\"color\") || DEFAULTCOLOR);\n });\n\n return {\n clearColorPicker: function clearColorPicker() {\n pensizePreview.removeEventListener(\"click\", openInitializedColorPicker);\n },\n\n setColorDotSize: setColorDotSize,\n refreshColorPreviewBorder: refreshColorPreviewBorder\n };\n};\n\nvar _colorToRGB = __webpack_require__(6);\n\nvar _palette = __webpack_require__(7);\n\nvar _modal = __webpack_require__(1);\n\nvar DEFAULTCOLOR = \"#2b76ce\";\n\n\nfunction borderColor(foreground, background) {\n if (foreground == \"eraser\") return \"transparent\";\n var bgL = (0, _colorToRGB.luminance)(background);\n var fgL = (0, _colorToRGB.luminance)(foreground);\n if (bgL > 125 && fgL > 200) return \"black\";\n if (bgL < 125 && fgL < 25) return \"white\";\n return \"transparent\";\n}\n\nfunction textColor(background) {\n return (0, _colorToRGB.luminance)(background) > 255 / 2 ? \"rgba(0,0,0,0.8)\" : \"rgba(255,255,255,0.8)\";\n}\n\nfunction openColorPicker(currentColor, callback) {\n (0, _modal.createModal)(\"color-modal\", function (_ref2) {\n var modal = _ref2.modal,\n closeModal = _ref2.closeModal;\n\n function pickColor(color) {\n closeModal();\n callback(color);\n }\n\n _palette.paletteColors.forEach(function (color) {\n var button = document.createElement(\"button\");\n button.classList.add(\"colorbutton\");\n if (color === currentColor) {\n button.classList.add(\"active\");\n button.innerHTML = \"Selected\";\n button.style.color = textColor(color);\n }\n button.style.backgroundColor = color.toLowerCase();\n button.addEventListener(\"click\", function () {\n return pickColor(color);\n });\n modal.appendChild(button);\n });\n\n var eraser = document.createElement(\"button\");\n eraser.classList.add(\"eraser\");\n eraser.addEventListener(\"click\", function () {\n return pickColor(\"eraser\");\n });\n eraser.innerHTML = '' + (\"eraser\" === currentColor ? \"Eraser selected\" : \"Eraser\") + \"\";\n modal.appendChild(eraser);\n });\n}\n\nfunction setCursor(node, size, color) {\n var s = size < 4 ? 4 : size;\n var c = document.createElement(\"canvas\");\n c.width = c.height = s;\n var ctx = c.getContext(\"2d\");\n\n if (color == \"eraser\") drawEraser(ctx, s);else drawColorCircle(ctx, s, color);\n var cursor = c.toDataURL(\"image/png\");\n node.style.cursor = \"url(\" + cursor + \") \" + s / 2 + \" \" + s / 2 + \",auto\";\n}\n\nfunction drawColorCircle(ctx, s, color) {\n ctx.beginPath();\n ctx.arc(s / 2, s / 2, s / 2, 0, 2 * Math.PI, false);\n ctx.fillStyle = color;\n ctx.fill();\n}\n\nfunction drawEraser(ctx, s) {\n ctx.fillStyle = \"#da502d\";\n ctx.fillRect(0, 0, s * 2 / 3, s);\n ctx.fillStyle = \"#6584a5\";\n ctx.fillRect(s * 2 / 3 - 1, 0, s, s);\n ctx.globalCompositeOperation = \"destination-in\";\n drawColorCircle(ctx, s, \"white\");\n}\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.colorToRGB = colorToRGB;\nexports.luminance = luminance;\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction colorToRGB(color) {\n var canvas = document.createElement(\"canvas\");\n canvas.width = canvas.height = 1;\n var ctx = canvas.getContext(\"2d\");\n ctx.clearRect(0, 0, 1, 1);\n ctx.fillStyle = color;\n ctx.fillRect(0, 0, 1, 1);\n return [].concat(_toConsumableArray(ctx.getImageData(0, 0, 1, 1).data)).slice(0, 3);\n}\n\nfunction luminance(color) {\n return colorToRGB(color).reduce(function (a, b) {\n return a + b;\n }, 0) / 3;\n}\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar paletteColors = exports.paletteColors = \"#000000,#FFFFFF,#F44336,#E91E63,#9C27B0,#673AB7,#3F51B5,#2196F3,#03A9F4,#00BCD4,#009688,#4CAF50,#8BC34A,#CDDC39,#FFEB3B,#FFC107,#FF9800,#FF5722,#795548,#9E9E9E,#607D8B\".split(\",\");\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (_ref) {\n var onImageCreated = _ref.onImageCreated,\n fileinput = _ref.fileinput,\n _ref$startTask = _ref.startTask,\n startTask = _ref$startTask === undefined ? function () {\n return null;\n } : _ref$startTask,\n _ref$endTask = _ref.endTask,\n endTask = _ref$endTask === undefined ? function () {\n return null;\n } : _ref$endTask;\n\n // Callbacks onImageCreated with img tag and filename\n var originalFileName = \"pasted-image\";\n var askingForImage = true;\n\n // Transforms the file input content to a real image\n function loadFile(fileToLoad) {\n startTask();\n var fileReader = new FileReader();\n fileReader.onload = function () {\n createImageWithFileContent(fileReader.result);\n endTask();\n };\n fileReader.onerror = endTask;\n fileReader.readAsDataURL(fileToLoad);\n }\n\n function createImageWithFileContent(result) {\n startTask();\n if (!askingForImage) return;\n var img = new Image();\n img.onload = function () {\n askingForImage = false;\n onImageCreated(img, originalFileName);\n endTask();\n };\n img.onerror = endTask;\n img.src = result;\n }\n\n // Setup of the welcome UI\n function askForImage() {\n fileinput && fileinput.addEventListener(\"change\", fileChanged);\n function fileChanged(changeEvent) {\n fileinput.removeEventListener(\"change\", fileChanged);\n originalFileName = fileinput.value.split(\"\\\\\").pop().split(\".\")[0] || \"image\";\n loadFile(changeEvent.target.files[0]);\n }\n }\n\n askForImage();\n\n window.addEventListener(\"paste\", function (ev) {\n handleDataTransferItems(ev.clipboardData.items);\n });\n\n document.body.addEventListener(\"dragover\", function (ev) {\n ev.preventDefault();\n ev.stopPropagation();\n });\n document.body.addEventListener(\"drop\", function (ev) {\n ev.preventDefault();\n ev.stopPropagation();\n handleDataTransferItems(ev.dataTransfer.items);\n });\n\n function handleDataTransferItems(items) {\n // Tries to paste an image\n var imageFile = Array.prototype.find.call(items, function (e) {\n return e.kind == \"file\" && e.type.match(\"image\");\n });\n originalFileName = \"pasted-image\";\n if (imageFile) {\n loadFile(imageFile.getAsFile());\n return;\n }\n // Tries to load a remote image given its adress\n var url = Array.prototype.find.call(items, function (e) {\n return e.kind == \"string\";\n });\n if (url) {\n url.getAsString(function (s) {\n return createImageWithFileContent(s);\n });\n }\n }\n};\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (background, _ref) {\n var onChange = _ref.onChange;\n\n function switchBackground() {\n currentMode++;\n localStorage.setItem(\"background\", currentMode);\n applyBackground();\n }\n var switchCount = 0;\n function applyBackground() {\n var options = [\"#DDD\", \"#333\"];\n var current = currentMode % options.length;\n background.style.backgroundColor = options[current];\n // let meta = document.getElementById(\"theme-color\");\n // meta && meta.setAttribute(\"content\", \"#fff\");\n onChange(current);\n\n var bclass = document.body.classList;\n options.forEach(function (color, index) {\n return bclass.remove(\"background_n_\" + index);\n });\n bclass.add(\"background_n_\" + current);\n // https://www.youtube.com/watch?v=Pr8ETbGz35Q\n if (switchCount < 8) {\n console.log(current == 0 ? \"jour !\" : \"nuit !\");\n switchCount++;\n } else {\n console.log(\"Monsieur Jacquouille, je vous en prie, à la longue, ça devient casse-pied !\");\n }\n }\n var currentMode = localStorage.getItem(\"background\") || 0;\n applyBackground();\n background.addEventListener(\"click\", switchBackground);\n};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (canvas, _ref) {\n var onMouseDown = _ref.onMouseDown,\n onMouseUp = _ref.onMouseUp,\n OrginalImage = _ref.OrginalImage;\n\n // We cache some zoom related data to avoid getting them all the time\n var scale = void 0,\n rect = void 0,\n lastUsedPXsize = void 0;\n\n function measureScale() {\n rect = canvas.getBoundingClientRect();\n scale = rect.width / canvas.width;\n if (lastUsedPXsize && ctx) {\n ctx.lineWidth = lastUsedPXsize / scale;\n }\n }\n measureScale();\n\n window.addEventListener(\"resize\", measureScale);\n\n var ctx = canvas.getContext(\"2d\");\n\n // To make the lines look slightly nicer\n ctx.lineCap = \"round\";\n\n // We cache the mouse position and previous mouse position.\n // Theay are defined by touch events, and used by the draw loop\n var mousePos = {\n x: 0,\n y: 0\n },\n lastPos = mousePos;\n\n canvas.addEventListener(\"mousedown\", function (e) {\n if (e.which == 3) {\n // We detected a right click on canvas, probably to save it.\n // We merge the content of the background image with the canvas\n (0, _canvasMergerAndDonwloaderLink.mergeCanvasAndImage)(canvas, OrginalImage);\n return;\n }\n mousePos = lastPos = getMousePos(e);\n startDrawLoop();\n onMouseDown();\n }, false);\n\n // Allow ctrl-c > pasting to word & co\n document.addEventListener(\"copy\", function (ev) {\n ev.preventDefault();\n (0, _canvasMergerAndDonwloaderLink.mergeCanvasAndImage)(canvas, OrginalImage);\n ev.clipboardData.setData(\"text/html\", '');\n });\n\n document.addEventListener(\"mouseup\", endDrawLoop, false);\n\n canvas.addEventListener(\"mousemove\", function (e) {\n mousePos = getMousePos(e);\n }, false);\n\n // Get the position of the mouse relative to the canvas\n function getMousePos(mouseEvent) {\n return {\n x: (mouseEvent.clientX - rect.left) / scale,\n y: (mouseEvent.clientY - rect.top) / scale\n };\n }\n\n // Drawing loop is separated from the events\n\n var isDrawing = false;\n\n function startDrawLoop() {\n if (isDrawing) return;\n isDrawing = true;\n ctx.beginPath();\n drawLoop();\n }\n function endDrawLoop() {\n isDrawing && onMouseUp();\n isDrawing = false;\n }\n\n function drawLoop() {\n if (isDrawing) {\n window.requestAnimationFrame(drawLoop);\n renderCanvas();\n }\n }\n function renderCanvas() {\n ctx.moveTo(lastPos.x, lastPos.y);\n ctx.lineTo(mousePos.x, mousePos.y);\n ctx.stroke();\n lastPos = mousePos;\n }\n\n // Proxy mobile events to their mouse counterpart\n function proxyTouchToMouse(touchEventName, mouseEventName) {\n var eventTarget = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : canvas;\n\n canvas.addEventListener(touchEventName, function (e) {\n e.preventDefault();\n\n var _ref2 = e.touches[0] || {},\n clientX = _ref2.clientX,\n clientY = _ref2.clientY;\n\n var mouseEvent = new MouseEvent(mouseEventName, {\n clientX: clientX,\n clientY: clientY\n });\n eventTarget.dispatchEvent(mouseEvent);\n }, false);\n }\n proxyTouchToMouse(\"touchstart\", \"mousedown\");\n proxyTouchToMouse(\"touchend\", \"mouseup\", document);\n proxyTouchToMouse(\"touchmove\", \"mousemove\");\n\n return {\n drawWithEraser: function drawWithEraser() {\n ctx.globalCompositeOperation = \"destination-out\";\n },\n drawWithColor: function drawWithColor(color) {\n ctx.globalCompositeOperation = \"source-over\";\n ctx.strokeStyle = color;\n },\n setPencilSize: function setPencilSize(pxSize) {\n lastUsedPXsize = pxSize;\n ctx.lineWidth = pxSize / scale;\n }\n };\n};\n\nvar _canvasMergerAndDonwloaderLink = __webpack_require__(0);\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.showDownloadOptions = showDownloadOptions;\n\nvar _modal = __webpack_require__(1);\n\nfunction _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError(\"Cannot destructure undefined\"); }\n\n// Start downloading in the background, show modal with some options\nfunction showDownloadOptions(_ref) {\n _objectDestructuringEmpty(_ref);\n\n return (0, _modal.createModal)(\"file-download\", function (_ref2) {\n var modal = _ref2.modal,\n closeModal = _ref2.closeModal;\n\n modal.innerHTML = \"\\n

Your download is getting ready

\\n\\n \" + addToHomeScreen() + \"\\n\\n \\n Like our facebook page\\n \\n\\n\\n \\n This app is open source. See the source code on github.\\n \\n\\n\\n\\n\\n

Pressing \\\"X\\\" will switch between the last 2 used colors.

\\n

You can edit transparent pngs and keep them transparent

\\n

Clicking the background around the picture will switch between light and dark background

\\n\\n

You can paste an image in the page and it will be loaded

\\n

You can drop an image file in the page and it will be loaded

\\n

You can right click the canvas and copy its content

\\n

Pressing ctrl+s will trigger the download of the picture

\\n\\n\\n\\n\\n \";\n function reportDLStatus(className, text) {\n var p = document.getElementById(\"downloadIndicator\");\n p.classList.add(className);\n p.innerHTML = text;\n }\n\n modal.addEventListener(\"click\", function (ev) {\n var targetClass = ev.target.getAttribute(\"class\");\n\n if (targetClass == \"keepDrawing\") return closeModal();\n\n if (targetClass == \"newPicture\") return window.location.reload();\n\n return console.log(\"unrecognized click \", ev);\n });\n\n var _failed = false;\n return {\n failed: function failed(exeption) {\n _failed = true;\n reportDLStatus(\"failed\", \"\\n It looks like the download failed, sorry about that.\\n It works best on google chrome.\\n
\" + exeption.stack + \"
\\n \");\n },\n suceeded: function suceeded() {\n if (_failed) return;\n reportDLStatus(\"sucess\", \"\\n
Download started
\\n \\n \\n \");\n }\n };\n });\n}\n\nfunction addToHomeScreen() {\n // Show invitation to add to home screen if not already the\n //case\n\n if (!navigator.userAgent.match(/Android/i)) return \"\";\n\n if (window.location.search === \"?fromHomeScreen\") {\n return \"\";\n }\n\n return \"\\n

You can add this app to your home screen and it will work\\n offline and in full screen.\\n

\\n \";\n}\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (slider, _ref) {\n var onChange = _ref.onChange;\n\n // Sets draw size at load and style when the user interracts with the slider\n function onPencilSizeChange(pxSize) {\n slider.value = pxSize;\n localStorage.setItem(\"pensize\", pxSize);\n onChange(pxSize);\n }\n slider.addEventListener(\"input\", function (e) {\n return onPencilSizeChange(e.target.value);\n });\n onPencilSizeChange(parseInt(localStorage.getItem(\"pensize\")) || DEFAULTSIZE);\n};\n\nvar DEFAULTSIZE = 20;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (canvas, _ref) {\n var fitWindow = _ref.fitWindow;\n\n var ctx = void 0,\n w = void 0,\n h = void 0;\n var bgColor = \"#F44336\"; //randomColor(darkCoolColors);\n function reset() {\n if (fitWindow) {\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n }\n w = canvas.width;\n h = canvas.height;\n ctx = canvas.getContext(\"2d\");\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, w, h);\n ctx.lineCap = \"round\";\n randomizeInst();\n }\n\n var position = void 0,\n speed = void 0,\n acceleration = void 0,\n timeoutHandle = void 0,\n accelerationTimeoutHandle = void 0;\n function randomizeInst() {\n position = {\n // x: Math.random() * w,\n // y: Math.random() * h\n x: w / 2,\n y: h / 2\n };\n speed = {\n x: Math.random() * 10 - 5,\n y: Math.random() * 10 - 5\n };\n acceleration = {\n x: Math.random() * 10 - 5,\n y: Math.random() * 10 - 5\n };\n\n ctx.strokeStyle = randomColor(coolColors, bgColor);\n ctx.lineWidth = 20 + Math.random() * 40;\n ctx.beginPath();\n ctx.moveTo(position.x, position.y);\n }\n\n reset();\n window.addEventListener(\"resize\", reset);\n\n function randomAcceletation() {\n acceleration = {\n x: Math.random() * 2 - 1,\n y: Math.random() * 2 - 1\n };\n // speed.x*=0.2;\n // speed.y*=0.2;\n\n accelerationTimeoutHandle = setTimeout(randomAcceletation, 100 + Math.random() * 200);\n }\n randomAcceletation();\n function renderCanvas() {\n ctx.moveTo(position.x, position.y);\n speed.x *= 0.95;\n speed.y *= 0.95;\n\n speed.x += acceleration.x;\n speed.y += acceleration.y;\n position.x += speed.x;\n position.y += speed.y;\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n if (position.x < -50 || position.x > w + 50 || position.y < -50 || position.y > h + 50) randomizeInst();\n }\n\n var isDrawing = true;\n function drawLoop() {\n if (isDrawing) {\n window.requestAnimationFrame(drawLoop);\n renderCanvas();\n }\n }\n\n drawLoop();\n\n function stopAnim() {\n isDrawing = false;\n clearTimeout(accelerationTimeoutHandle);\n window.removeEventListener(\"resize\", reset);\n }\n\n return {\n stopAnim: stopAnim,\n bgColor: bgColor\n };\n};\n\nvar coolColors = \"#F44336,#E91E63,#9C27B0,#673AB7,#3F51B5,#2196F3,#03A9F4,#00BCD4,#009688,#4CAF50,#8BC34A,#CDDC39,#FFEB3B,#FFC107,#FF9800,#FF5722\".split(\",\");\n\n//import { luminance } from \"./colorToRGB.js\";\n// const darkCoolColors = coolColors.filter(c => luminance(c) < 150);\n\nfunction randomColor(colorPool) {\n var exception = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n\n var withoutEx = colorPool.filter(function (c) {\n return c != exception;\n });\n return withoutEx[Math.floor(Math.random() * withoutEx.length)];\n}\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.checkRunWithinWebview = checkRunWithinWebview;\nfunction checkRunWithinWebview() {\n if (navigator.userAgent.match(/Android/i)) {\n var JSONPcall = document.createElement(\"script\");\n JSONPcall.src = \"https://iswebview.herokuapp.com/?callback=JSONPcallback\";\n // JSONPcall.src = \"https://iswebview2repo-iswebview2.7e14.starter-us-west-2.openshiftapps.com/?callback=JSONPcallback\";\n document.body.appendChild(JSONPcall);\n }\n}\nwindow.JSONPcallback = function (result) {\n if (result.isWebView) {\n document.body.classList.add(\"runningWithinWebview\");\n document.body.innerHTML = \"\\n Please open minimage.tk with chrome,\\n it cannot work within another app.\\n\\n There may be an option in the menu above the page,\\n something like \\\"Open in Chrome\\\".\\n\\n \";\n }\n};\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.startTask = startTask;\nexports.endTask = endTask;\nexports.updateLook = updateLook;\nvar tasksInProgress = 0;\nfunction startTask() {\n tasksInProgress++;\n updateLook();\n}\n\nfunction endTask() {\n tasksInProgress--;\n setTimeout(updateLook);\n}\n\nfunction updateLook() {\n spinners.classList[tasksInProgress ? \"remove\" : \"add\"](\"hidden\");\n}\ndocument.addEventListener(\"DOMContentLoaded\", updateLook);\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.detectCtrlS = detectCtrlS;\n\nvar _canvasMergerAndDonwloaderLink = __webpack_require__(0);\n\nfunction detectCtrlS(_ref) {\n var canvas = _ref.canvas,\n OrginalImage = _ref.OrginalImage,\n originalFileName = _ref.originalFileName;\n\n window.addEventListener(\"keydown\", function (event) {\n if (event.ctrlKey || event.metaKey) {\n if (String.fromCharCode(event.which).toLowerCase() === \"s\") {\n event.preventDefault();\n (0, _canvasMergerAndDonwloaderLink.triggerDownload)(canvas, originalFileName, OrginalImage);\n }\n }\n });\n}\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\nvar appCacheIframe;\n\nfunction hasSW() {\n return 'serviceWorker' in navigator &&\n // This is how I block Chrome 40 and detect Chrome 41, because first has\n // bugs with history.pustState and/or hashchange\n (window.fetch || 'imageRendering' in document.documentElement.style) &&\n (window.location.protocol === 'https:' || window.location.hostname === 'localhost' || window.location.hostname.indexOf('127.') === 0)\n}\n\nfunction install(options) {\n options || (options = {});\n\n \n if (hasSW()) {\n var registration = navigator.serviceWorker\n .register(\n \"/sw.js\"\n \n );\n\n \n\n return;\n }\n \n\n \n if (window.applicationCache) {\n var directory = \"/appcache/\";\n var name = \"manifest\";\n\n var doLoad = function() {\n var page = directory + name + '.html';\n var iframe = document.createElement('iframe');\n\n \n\n iframe.src = page;\n iframe.style.display = 'none';\n\n appCacheIframe = iframe;\n document.body.appendChild(iframe);\n };\n\n if (document.readyState === 'complete') {\n setTimeout(doLoad);\n } else {\n window.addEventListener('load', doLoad);\n }\n\n return;\n }\n \n}\n\nfunction applyUpdate(callback, errback) {\n \n\n \n}\n\nfunction update() {\n \n if (hasSW()) {\n navigator.serviceWorker.getRegistration().then(function(registration) {\n if (!registration) return;\n return registration.update();\n });\n }\n \n\n \n if (appCacheIframe) {\n try {\n appCacheIframe.contentWindow.applicationCache.update();\n } catch (e) {}\n }\n \n}\n\n\n\nexports.install = install;\nexports.applyUpdate = applyUpdate;\nexports.update = update;\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// bundle.c14f881344d79b6d5899.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c14f881344d79b6d5899","import { showDownloadOptions } from \"./showDownloadOptions.js\";\n\nexport function makeDownloadLink(\n link,\n { OrginalImage, canvas, originalFileName }\n) {\n // Download button\n function downloadImage(e) {\n e.preventDefault();\n let { failed, suceeded } = showDownloadOptions({});\n triggerDownload(canvas, originalFileName, OrginalImage, failed, suceeded);\n }\n link.addEventListener(\"click\", downloadImage);\n}\n\nfunction nope(e) {\n console.log(e);\n}\nvar downloadCounter = 0;\nexport function triggerDownload(\n canvas,\n originalFileName,\n OrginalImage,\n failed = nope,\n suceeded = nope\n) {\n let filename = originalFileName + \"-minimage-\" + downloadCounter + \".png\";\n mergeCanvasAndImage(canvas, OrginalImage, failed, suceeded);\n downloadCanvas(canvas, filename, failed, suceeded);\n\n downloadCounter++;\n}\n\nexport function mergeCanvasAndImage(canvas, img, failed, suceeded) {\n try {\n // Pastes the image as a canvas background\n var ctx = canvas.getContext(\"2d\");\n let oldComposite = ctx.globalCompositeOperation;\n ctx.globalCompositeOperation = \"destination-over\";\n\n // Draw the orignal image\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n ctx.globalCompositeOperation = oldComposite;\n suceeded && setTimeout(suceeded);\n return canvas;\n } catch (e) {\n failed && failed(e);\n }\n}\n\nfunction downloadCanvas(canvas, filename, failed, suceeded) {\n try {\n canvas.toBlob(function(blob) {\n try {\n if (window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveBlob(blob, filename);\n suceeded && setTimeout(suceeded);\n } else {\n let url = window.URL.createObjectURL(blob);\n let link = document.createElement(\"a\");\n document.body.appendChild(link);\n link.setAttribute(\"href\", url);\n link.setAttribute(\"download\", filename);\n link.click();\n suceeded && setTimeout(suceeded);\n setTimeout(() => {\n window.URL.revokeObjectURL(url);\n document.body.removeChild(link);\n }, 3000);\n }\n } catch (e) {\n failed && failed(e);\n }\n });\n } catch (e) {\n failed && failed(e);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/canvasMergerAndDonwloaderLink.js","let modalZindex = 4;\nexport function createModal(className, callback) {\n let modal = document.createElement(\"div\");\n modal.classList.add(\"modal\");\n modal.classList.add(className);\n document.body.appendChild(modal);\n\n let backdrop = document.createElement(\"div\");\n backdrop.classList.add(\"modal-backdrop\");\n document.body.appendChild(backdrop);\n\n backdrop.style.zIndex = modalZindex;\n modal.style.zIndex = modalZindex + 1;\n backdrop.addEventListener(\"click\", closeModal);\n document.addEventListener(\"keyup\", closeOnEscape);\n function closeOnEscape(ev) {\n if (\n ev.which == 27 // escape key\n )\n closeModal();\n }\n function closeModal() {\n modal.classList.add(\"closing\");\n backdrop.classList.add(\"closing\");\n setTimeout(() => {\n document.body.removeChild(modal);\n document.body.removeChild(backdrop);\n }, 300);\n document.removeEventListener(\"keyup\", closeOnEscape);\n }\n modalZindex += 2;\n return callback({ modal, closeModal });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/modal.js","/*\n\nSee the app in action here : https://minimage.tk\n\n*/\nimport \"./styles.less\";\nimport setupColorPicker from \"./colorPicker.js\";\nimport askForIMG from \"./getAnImage.js\";\nimport toggleAbleBackground from \"./toggleAbleBackground.js\";\nimport setupEditableCanvas from \"./editableCanvas.js\";\nimport { makeDownloadLink } from \"./canvasMergerAndDonwloaderLink.js\";\nimport pencilSizeSlider from \"./pencilSizeSlider.js\";\nimport welcomeAnim from \"./welcomeAnim.js\";\nimport { checkRunWithinWebview } from \"./checkRunWithinWebview.js\";\nimport { startTask, endTask } from \"./spinners.js\";\nconst byId = document.getElementById.bind(document);\nimport { detectCtrlS } from \"./detectCtrlS.js\";\n\nimport * as OfflinePluginRuntime from \"offline-plugin/runtime\";\nOfflinePluginRuntime.install();\n\ncheckRunWithinWebview();\nlet originalFileName, OrginalImage;\naskForIMG({\n fileinput: byId(\"fileinput\"),\n onImageCreated: (img, filename) => {\n originalFileName = filename;\n letUserDrawAndDownload(img);\n },\n startTask,\n endTask\n});\n\nlet { stopAnim, bgColor } = welcomeAnim(byId(\"welcome\"), { fitWindow: true });\nbyId(\"fileInputWrapper\").style.color = bgColor;\n\n// Lets the user draw on the loaded image\nfunction letUserDrawAndDownload(img) {\n OrginalImage = img;\n stopAnim();\n const canvas = byId(\"drawzone\"),\n drawzoneWrapper = byId(\"drawzoneWrapper\");\n\n // Switch to drawing mode\n byId(\"inputForAFile\").style.display = \"none\";\n byId(\"drawAndDownload\").style.display = \"\";\n\n console.log(img.width, img.height);\n let maxRes = Math.max(window.innerWidth, window.innerHeight) * 2;\n // Fits the canvas to screen\n let imgScale = Math.max(img.width / maxRes, img.height / maxRes, 1);\n img.width = canvas.width = img.width / imgScale;\n img.height = canvas.height = img.height / imgScale;\n drawzoneWrapper.style.maxWidth = img.width;\n drawzoneWrapper.style.maxHeight = img.height;\n\n // Needs to happen AFTER size measurements\n drawzoneWrapper.appendChild(img);\n\n let ctx = canvas.getContext(\"2d\");\n let hasDoneFirstDraw = false;\n let barClass = byId(\"topbar\").classList;\n\n let background = byId(\"background\");\n\n const {\n setColorDotSize,\n refreshColorPreviewBorder,\n clearColorPicker\n } = setupColorPicker(byId(\"pensizePreview\"), {\n canvasForCursor: canvas,\n onColorChange: setColor,\n elementToContrastWith: background\n });\n\n let {\n drawWithColor,\n drawWithEraser,\n setPencilSize\n } = setupEditableCanvas(canvas, {\n onMouseDown() {\n if (canvas.getClientRects()[0].height + 2 * 80 > window.innerHeight) {\n barClass.add(\"drawInProgress\");\n }\n },\n onMouseUp() {\n if (!hasDoneFirstDraw) {\n hasDoneFirstDraw = true;\n download.classList.add(\"usable\");\n }\n barClass.remove(\"drawInProgress\");\n },\n OrginalImage\n });\n\n // Sets draw color at load and when user clicks color input\n function setColor(color) {\n if (color == \"eraser\") {\n drawWithEraser();\n } else {\n drawWithColor(color);\n }\n }\n // Tap the background to switch its color (usefull for transparent images)\n toggleAbleBackground(background, { onChange: refreshColorPreviewBorder });\n\n pencilSizeSlider(byId(\"pensize\"), {\n onChange(pxSize) {\n setColorDotSize(pxSize);\n setPencilSize(pxSize);\n }\n });\n\n makeDownloadLink(byId(\"download\"), {\n OrginalImage,\n originalFileName,\n canvas\n });\n\n detectCtrlS({\n canvas,\n OrginalImage,\n originalFileName\n });\n\n function clear() {\n clearColorPicker();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app.js","const DEFAULTCOLOR = \"#2b76ce\";\nimport { luminance } from \"./colorToRGB.js\";\nimport { paletteColors } from \"./palette.js\";\nimport { createModal } from \"./modal.js\";\nexport default function(\n pensizePreview,\n { onColorChange, elementToContrastWith, canvasForCursor }\n) {\n const pensizePreviewDot = pensizePreview.children[0];\n const pensizePreviewBorder = pensizePreview.children[1];\n\n function refreshColorPreviewBorder() {\n pensizePreviewBorder.style.background = borderColor(\n currentColor,\n elementToContrastWith.style.backgroundColor\n );\n }\n\n let currentColor;\n function openInitializedColorPicker() {\n openColorPicker(currentColor, onColorPicked);\n }\n pensizePreview.addEventListener(\"click\", openInitializedColorPicker);\n let previousColor = localStorage.getItem(\"previousColor\") || \"eraser\";\n\n function onColorPicked(color) {\n console.log(\"onColorPicked\", color);\n if (currentColor && color !== currentColor) {\n // For toggling between last two colors\n previousColor = currentColor;\n }\n\n localStorage.setItem(\"previousColor\", previousColor);\n\n currentColor = color;\n setCursor(canvasForCursor, currentSize, currentColor);\n if (color == \"eraser\") {\n pensizePreviewDot.style.background = \"\";\n pensizePreviewDot.classList.add(\"eraser\");\n } else {\n pensizePreviewDot.classList.remove(\"eraser\");\n pensizePreviewDot.style.background = color;\n refreshColorPreviewBorder();\n }\n localStorage.setItem(\"color\", color);\n onColorChange(color);\n }\n let currentSize;\n // Should be 10\n const baseSize = pensizePreviewDot.getBoundingClientRect().width;\n\n window.addEventListener(\"keydown\", ev => {\n if (String.fromCharCode(ev.which).toLowerCase() === \"x\") {\n console.log(\"x switching to \" + previousColor);\n onColorPicked(previousColor);\n }\n });\n\n function setColorDotSize(pxSize) {\n currentSize = pxSize;\n setCursor(canvasForCursor, currentSize, currentColor);\n pensizePreviewDot.style.transform = \"scale(\" + pxSize / baseSize + \")\";\n pensizePreviewBorder.style.transform =\n \"scale(\" + (pxSize / baseSize + 1 / baseSize) + \")\";\n }\n\n setTimeout(() =>\n onColorPicked(localStorage.getItem(\"color\") || DEFAULTCOLOR)\n );\n\n return {\n clearColorPicker() {\n pensizePreview.removeEventListener(\"click\", openInitializedColorPicker);\n },\n setColorDotSize,\n refreshColorPreviewBorder\n };\n}\n\nfunction borderColor(foreground, background) {\n if (foreground == \"eraser\") return \"transparent\";\n let bgL = luminance(background);\n let fgL = luminance(foreground);\n if (bgL > 125 && fgL > 200) return \"black\";\n if (bgL < 125 && fgL < 25) return \"white\";\n return \"transparent\";\n}\n\nfunction textColor(background) {\n return luminance(background) > 255 / 2\n ? \"rgba(0,0,0,0.8)\"\n : \"rgba(255,255,255,0.8)\";\n}\n\nfunction openColorPicker(currentColor, callback) {\n createModal(\"color-modal\", ({ modal, closeModal }) => {\n function pickColor(color) {\n closeModal();\n callback(color);\n }\n\n paletteColors.forEach(color => {\n let button = document.createElement(\"button\");\n button.classList.add(\"colorbutton\");\n if (color === currentColor) {\n button.classList.add(\"active\");\n button.innerHTML = \"Selected\";\n button.style.color = textColor(color);\n }\n button.style.backgroundColor = color.toLowerCase();\n button.addEventListener(\"click\", () => pickColor(color));\n modal.appendChild(button);\n });\n\n let eraser = document.createElement(\"button\");\n eraser.classList.add(\"eraser\");\n eraser.addEventListener(\"click\", () => pickColor(\"eraser\"));\n eraser.innerHTML =\n '' +\n (\"eraser\" === currentColor ? \"Eraser selected\" : \"Eraser\") +\n \"\";\n modal.appendChild(eraser);\n });\n}\n\nfunction setCursor(node, size, color) {\n let s = size < 4 ? 4 : size;\n let c = document.createElement(\"canvas\");\n c.width = c.height = s;\n let ctx = c.getContext(\"2d\");\n\n if (color == \"eraser\") drawEraser(ctx, s);\n else drawColorCircle(ctx, s, color);\n let cursor = c.toDataURL(\"image/png\");\n node.style.cursor = `url(${cursor}) ${s / 2} ${s / 2},auto`;\n}\n\nfunction drawColorCircle(ctx, s, color) {\n ctx.beginPath();\n ctx.arc(s / 2, s / 2, s / 2, 0, 2 * Math.PI, false);\n ctx.fillStyle = color;\n ctx.fill();\n}\n\nfunction drawEraser(ctx, s) {\n ctx.fillStyle = \"#da502d\";\n ctx.fillRect(0, 0, s * 2 / 3, s);\n ctx.fillStyle = \"#6584a5\";\n ctx.fillRect(s * 2 / 3 - 1, 0, s, s);\n ctx.globalCompositeOperation = \"destination-in\";\n drawColorCircle(ctx, s, \"white\");\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/colorPicker.js","export function colorToRGB(color) {\n var canvas = document.createElement(\"canvas\");\n canvas.width = canvas.height = 1;\n var ctx = canvas.getContext(\"2d\");\n ctx.clearRect(0, 0, 1, 1);\n ctx.fillStyle = color;\n ctx.fillRect(0, 0, 1, 1);\n return [...ctx.getImageData(0, 0, 1, 1).data].slice(0, 3);\n}\n\nexport function luminance(color) {\n return colorToRGB(color).reduce((a, b) => a + b, 0) / 3;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/colorToRGB.js","export const paletteColors = \"#000000,#FFFFFF,#F44336,#E91E63,#9C27B0,#673AB7,#3F51B5,#2196F3,#03A9F4,#00BCD4,#009688,#4CAF50,#8BC34A,#CDDC39,#FFEB3B,#FFC107,#FF9800,#FF5722,#795548,#9E9E9E,#607D8B\".split(\n \",\"\n);\n\n\n\n// WEBPACK FOOTER //\n// ./src/palette.js","export default function({\n onImageCreated,\n fileinput,\n startTask = () => null,\n endTask = () => null\n}) {\n // Callbacks onImageCreated with img tag and filename\n let originalFileName = \"pasted-image\";\n let askingForImage = true;\n\n // Transforms the file input content to a real image\n function loadFile(fileToLoad) {\n startTask();\n let fileReader = new FileReader();\n fileReader.onload = () => {\n createImageWithFileContent(fileReader.result);\n endTask();\n };\n fileReader.onerror = endTask;\n fileReader.readAsDataURL(fileToLoad);\n }\n\n function createImageWithFileContent(result) {\n startTask();\n if (!askingForImage) return;\n let img = new Image();\n img.onload = () => {\n askingForImage = false;\n onImageCreated(img, originalFileName);\n endTask();\n };\n img.onerror = endTask;\n img.src = result;\n }\n\n // Setup of the welcome UI\n function askForImage() {\n fileinput && fileinput.addEventListener(\"change\", fileChanged);\n function fileChanged(changeEvent) {\n fileinput.removeEventListener(\"change\", fileChanged);\n originalFileName =\n fileinput.value.split(\"\\\\\").pop().split(\".\")[0] || \"image\";\n loadFile(changeEvent.target.files[0]);\n }\n }\n\n askForImage();\n\n window.addEventListener(\"paste\", function(ev) {\n handleDataTransferItems(ev.clipboardData.items);\n });\n\n document.body.addEventListener(\"dragover\", function(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n });\n document.body.addEventListener(\"drop\", function(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n handleDataTransferItems(ev.dataTransfer.items);\n });\n\n function handleDataTransferItems(items) {\n // Tries to paste an image\n let imageFile = Array.prototype.find.call(\n items,\n e => e.kind == \"file\" && e.type.match(\"image\")\n );\n originalFileName = \"pasted-image\";\n if (imageFile) {\n loadFile(imageFile.getAsFile());\n return;\n }\n // Tries to load a remote image given its adress\n let url = Array.prototype.find.call(items, e => e.kind == \"string\");\n if (url) {\n url.getAsString(s => createImageWithFileContent(s));\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/getAnImage.js","export default function(background, { onChange }) {\n function switchBackground() {\n currentMode++;\n localStorage.setItem(\"background\", currentMode);\n applyBackground();\n }\n let switchCount = 0;\n function applyBackground() {\n let options = [\"#DDD\", \"#333\"];\n let current = currentMode % options.length;\n background.style.backgroundColor = options[current];\n // let meta = document.getElementById(\"theme-color\");\n // meta && meta.setAttribute(\"content\", \"#fff\");\n onChange(current);\n\n let bclass = document.body.classList;\n options.forEach((color, index) => bclass.remove(\"background_n_\" + index));\n bclass.add(\"background_n_\" + current);\n // https://www.youtube.com/watch?v=Pr8ETbGz35Q\n if (switchCount < 8) {\n console.log(current == 0 ? \"jour !\" : \"nuit !\");\n switchCount++;\n } else {\n console.log(\n \"Monsieur Jacquouille, je vous en prie, à la longue, ça devient casse-pied !\"\n );\n }\n }\n let currentMode = localStorage.getItem(\"background\") || 0;\n applyBackground();\n background.addEventListener(\"click\", switchBackground);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/toggleAbleBackground.js","import { mergeCanvasAndImage } from \"./canvasMergerAndDonwloaderLink.js\";\n\nexport default function(canvas, { onMouseDown, onMouseUp, OrginalImage }) {\n // We cache some zoom related data to avoid getting them all the time\n let scale, rect, lastUsedPXsize;\n\n function measureScale() {\n rect = canvas.getBoundingClientRect();\n scale = rect.width / canvas.width;\n if (lastUsedPXsize && ctx) {\n ctx.lineWidth = lastUsedPXsize / scale;\n }\n }\n measureScale();\n\n window.addEventListener(\"resize\", measureScale);\n\n let ctx = canvas.getContext(\"2d\");\n\n // To make the lines look slightly nicer\n ctx.lineCap = \"round\";\n\n // We cache the mouse position and previous mouse position.\n // Theay are defined by touch events, and used by the draw loop\n let mousePos = {\n x: 0,\n y: 0\n },\n lastPos = mousePos;\n\n canvas.addEventListener(\n \"mousedown\",\n function(e) {\n if (e.which == 3) {\n // We detected a right click on canvas, probably to save it.\n // We merge the content of the background image with the canvas\n mergeCanvasAndImage(canvas, OrginalImage);\n return;\n }\n mousePos = lastPos = getMousePos(e);\n startDrawLoop();\n onMouseDown();\n },\n false\n );\n\n // Allow ctrl-c > pasting to word & co\n document.addEventListener(\"copy\", ev => {\n ev.preventDefault();\n mergeCanvasAndImage(canvas, OrginalImage);\n ev.clipboardData.setData(\n \"text/html\",\n ''\n );\n });\n\n document.addEventListener(\"mouseup\", endDrawLoop, false);\n\n canvas.addEventListener(\n \"mousemove\",\n function(e) {\n mousePos = getMousePos(e);\n },\n false\n );\n\n // Get the position of the mouse relative to the canvas\n function getMousePos(mouseEvent) {\n return {\n x: (mouseEvent.clientX - rect.left) / scale,\n y: (mouseEvent.clientY - rect.top) / scale\n };\n }\n\n // Drawing loop is separated from the events\n\n let isDrawing = false;\n\n function startDrawLoop() {\n if (isDrawing) return;\n isDrawing = true;\n ctx.beginPath();\n drawLoop();\n }\n function endDrawLoop() {\n isDrawing && onMouseUp();\n isDrawing = false;\n }\n\n function drawLoop() {\n if (isDrawing) {\n window.requestAnimationFrame(drawLoop);\n renderCanvas();\n }\n }\n function renderCanvas() {\n ctx.moveTo(lastPos.x, lastPos.y);\n ctx.lineTo(mousePos.x, mousePos.y);\n ctx.stroke();\n lastPos = mousePos;\n }\n\n // Proxy mobile events to their mouse counterpart\n function proxyTouchToMouse(\n touchEventName,\n mouseEventName,\n eventTarget = canvas\n ) {\n canvas.addEventListener(\n touchEventName,\n function(e) {\n e.preventDefault();\n let { clientX, clientY } = e.touches[0] || {};\n let mouseEvent = new MouseEvent(mouseEventName, {\n clientX,\n clientY\n });\n eventTarget.dispatchEvent(mouseEvent);\n },\n false\n );\n }\n proxyTouchToMouse(\"touchstart\", \"mousedown\");\n proxyTouchToMouse(\"touchend\", \"mouseup\", document);\n proxyTouchToMouse(\"touchmove\", \"mousemove\");\n\n return {\n drawWithEraser() {\n ctx.globalCompositeOperation = \"destination-out\";\n },\n drawWithColor(color) {\n ctx.globalCompositeOperation = \"source-over\";\n ctx.strokeStyle = color;\n },\n setPencilSize(pxSize) {\n lastUsedPXsize = pxSize;\n ctx.lineWidth = pxSize / scale;\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/editableCanvas.js","import { createModal } from \"./modal.js\";\n\n// Start downloading in the background, show modal with some options\nexport function showDownloadOptions({}) {\n return createModal(\"file-download\", ({ modal, closeModal }) => {\n modal.innerHTML = `\n

Your download is getting ready

\n\n ${addToHomeScreen()}\n\n \n Like our facebook page\n \n\n\n \n This app is open source. See the source code on github.\n \n\n\n\n\n

Pressing \"X\" will switch between the last 2 used colors.

\n

You can edit transparent pngs and keep them transparent

\n

Clicking the background around the picture will switch between light and dark background

\n\n

You can paste an image in the page and it will be loaded

\n

You can drop an image file in the page and it will be loaded

\n

You can right click the canvas and copy its content

\n

Pressing ctrl+s will trigger the download of the picture

\n\n\n\n\n `;\n function reportDLStatus(className, text) {\n let p = document.getElementById(\"downloadIndicator\");\n p.classList.add(className);\n p.innerHTML = text;\n }\n\n modal.addEventListener(\"click\", ev => {\n let targetClass = ev.target.getAttribute(\"class\");\n\n if (targetClass == \"keepDrawing\") return closeModal();\n\n if (targetClass == \"newPicture\") return window.location.reload();\n\n return console.log(\"unrecognized click \", ev);\n });\n\n let failed = false;\n return {\n failed(exeption) {\n failed = true;\n reportDLStatus(\n \"failed\",\n `\n It looks like the download failed, sorry about that.\n It works best on google chrome.\n
${exeption.stack}
\n `\n );\n },\n suceeded() {\n if (failed) return;\n reportDLStatus(\n \"sucess\",\n `\n
Download started
\n \n \n `\n );\n }\n };\n });\n}\n\nfunction addToHomeScreen() {\n // Show invitation to add to home screen if not already the\n //case\n\n if (!navigator.userAgent.match(/Android/i)) return \"\";\n\n if (window.location.search === \"?fromHomeScreen\") {\n return \"\";\n }\n\n return `\n

You can add this app to your home screen and it will work\n offline and in full screen.\n

\n `;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/showDownloadOptions.js","const DEFAULTSIZE = 20;\nexport default function(slider, { onChange }) {\n // Sets draw size at load and style when the user interracts with the slider\n function onPencilSizeChange(pxSize) {\n slider.value = pxSize;\n localStorage.setItem(\"pensize\", pxSize);\n onChange(pxSize);\n }\n slider.addEventListener(\"input\", e => onPencilSizeChange(e.target.value));\n onPencilSizeChange(parseInt(localStorage.getItem(\"pensize\")) || DEFAULTSIZE);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/pencilSizeSlider.js","const coolColors = \"#F44336,#E91E63,#9C27B0,#673AB7,#3F51B5,#2196F3,#03A9F4,#00BCD4,#009688,#4CAF50,#8BC34A,#CDDC39,#FFEB3B,#FFC107,#FF9800,#FF5722\".split(\n \",\"\n);\n\n//import { luminance } from \"./colorToRGB.js\";\n// const darkCoolColors = coolColors.filter(c => luminance(c) < 150);\n\nfunction randomColor(colorPool, exception = \"\") {\n let withoutEx = colorPool.filter(c => c != exception);\n return withoutEx[Math.floor(Math.random() * withoutEx.length)];\n}\n\nexport default function(canvas, { fitWindow }) {\n let ctx, w, h;\n let bgColor = \"#F44336\"; //randomColor(darkCoolColors);\n function reset() {\n if (fitWindow) {\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n }\n w = canvas.width;\n h = canvas.height;\n ctx = canvas.getContext(\"2d\");\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, w, h);\n ctx.lineCap = \"round\";\n randomizeInst();\n }\n\n let position, speed, acceleration, timeoutHandle, accelerationTimeoutHandle;\n function randomizeInst() {\n position = {\n // x: Math.random() * w,\n // y: Math.random() * h\n x: w / 2,\n y: h / 2\n };\n speed = {\n x: Math.random() * 10 - 5,\n y: Math.random() * 10 - 5\n };\n acceleration = {\n x: Math.random() * 10 - 5,\n y: Math.random() * 10 - 5\n };\n\n ctx.strokeStyle = randomColor(coolColors, bgColor);\n ctx.lineWidth = 20 + Math.random() * 40;\n ctx.beginPath();\n ctx.moveTo(position.x, position.y);\n }\n\n reset();\n window.addEventListener(\"resize\", reset);\n\n function randomAcceletation() {\n acceleration = {\n x: Math.random() * 2 - 1,\n y: Math.random() * 2 - 1\n };\n // speed.x*=0.2;\n // speed.y*=0.2;\n\n accelerationTimeoutHandle = setTimeout(\n randomAcceletation,\n 100 + Math.random() * 200\n );\n }\n randomAcceletation();\n function renderCanvas() {\n ctx.moveTo(position.x, position.y);\n speed.x *= 0.95;\n speed.y *= 0.95;\n\n speed.x += acceleration.x;\n speed.y += acceleration.y;\n position.x += speed.x;\n position.y += speed.y;\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n if (\n position.x < -50 ||\n position.x > w + 50 ||\n position.y < -50 ||\n position.y > h + 50\n )\n randomizeInst();\n }\n\n let isDrawing = true;\n function drawLoop() {\n if (isDrawing) {\n window.requestAnimationFrame(drawLoop);\n renderCanvas();\n }\n }\n\n drawLoop();\n\n function stopAnim() {\n isDrawing = false;\n clearTimeout(accelerationTimeoutHandle);\n window.removeEventListener(\"resize\", reset);\n }\n\n return {\n stopAnim,\n bgColor\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/welcomeAnim.js","export function checkRunWithinWebview() {\n if (navigator.userAgent.match(/Android/i)) {\n let JSONPcall = document.createElement(\"script\");\n JSONPcall.src = \"https://iswebview.herokuapp.com/?callback=JSONPcallback\";\n // JSONPcall.src = \"https://iswebview2repo-iswebview2.7e14.starter-us-west-2.openshiftapps.com/?callback=JSONPcallback\";\n document.body.appendChild(JSONPcall);\n }\n}\nwindow.JSONPcallback = function(result) {\n if (result.isWebView) {\n document.body.classList.add(\"runningWithinWebview\");\n document.body.innerHTML = `\n Please open minimage.tk with chrome,\n it cannot work within another app.\n\n There may be an option in the menu above the page,\n something like \"Open in Chrome\".\n\n `;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/checkRunWithinWebview.js","let tasksInProgress = 0;\nexport function startTask() {\n tasksInProgress++;\n updateLook();\n}\n\nexport function endTask() {\n tasksInProgress--;\n setTimeout(updateLook);\n}\n\nexport function updateLook() {\n spinners.classList[tasksInProgress ? \"remove\" : \"add\"](\"hidden\");\n}\ndocument.addEventListener(\"DOMContentLoaded\", updateLook);\n\n\n\n// WEBPACK FOOTER //\n// ./src/spinners.js","import { triggerDownload } from \"./canvasMergerAndDonwloaderLink.js\";\nexport function detectCtrlS({ canvas, OrginalImage, originalFileName }) {\n window.addEventListener(\"keydown\", event => {\n if (event.ctrlKey || event.metaKey) {\n if (String.fromCharCode(event.which).toLowerCase() === \"s\") {\n event.preventDefault();\n triggerDownload(canvas, originalFileName, OrginalImage);\n }\n }\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/detectCtrlS.js","var appCacheIframe;\n\nfunction hasSW() {\n return 'serviceWorker' in navigator &&\n // This is how I block Chrome 40 and detect Chrome 41, because first has\n // bugs with history.pustState and/or hashchange\n (window.fetch || 'imageRendering' in document.documentElement.style) &&\n (window.location.protocol === 'https:' || window.location.hostname === 'localhost' || window.location.hostname.indexOf('127.') === 0)\n}\n\nfunction install(options) {\n options || (options = {});\n\n \n if (hasSW()) {\n var registration = navigator.serviceWorker\n .register(\n \"/sw.js\"\n \n );\n\n \n\n return;\n }\n \n\n \n if (window.applicationCache) {\n var directory = \"/appcache/\";\n var name = \"manifest\";\n\n var doLoad = function() {\n var page = directory + name + '.html';\n var iframe = document.createElement('iframe');\n\n \n\n iframe.src = page;\n iframe.style.display = 'none';\n\n appCacheIframe = iframe;\n document.body.appendChild(iframe);\n };\n\n if (document.readyState === 'complete') {\n setTimeout(doLoad);\n } else {\n window.addEventListener('load', doLoad);\n }\n\n return;\n }\n \n}\n\nfunction applyUpdate(callback, errback) {\n \n\n \n}\n\nfunction update() {\n \n if (hasSW()) {\n navigator.serviceWorker.getRegistration().then(function(registration) {\n if (!registration) return;\n return registration.update();\n });\n }\n \n\n \n if (appCacheIframe) {\n try {\n appCacheIframe.contentWindow.applicationCache.update();\n } catch (e) {}\n }\n \n}\n\n\n\nexports.install = install;\nexports.applyUpdate = applyUpdate;\nexports.update = update;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/offline-plugin/runtime.js\n// module id = 17\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/bundle.c14f881344d79b6d5899.css b/bundle.db4a3dd38e813528b682.css similarity index 99% rename from bundle.c14f881344d79b6d5899.css rename to bundle.db4a3dd38e813528b682.css index 6871f12..306339b 100644 --- a/bundle.c14f881344d79b6d5899.css +++ b/bundle.db4a3dd38e813528b682.css @@ -1,2 +1,2 @@ body{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;margin:0;padding:0;overflow:hidden}input[type=range]{-webkit-appearance:none;margin:15px 0;width:140px}input[type=range]:focus{outline:none}input[type=range]::-webkit-slider-runnable-track{width:140px;height:8px;cursor:pointer;animate:.2s;box-shadow:0 0 0 #bbb,0 0 0 #c8c8c8;background:#aaa;border-radius:4px;border:1px solid #bbb}input[type=range]::-webkit-slider-thumb{box-shadow:1px 1px 1px #333,0 0 1px #404040;border:0 solid #fff;height:30px;width:30px;border-radius:8px;background:#ddd;cursor:pointer;-webkit-appearance:none;margin-top:-12px}input[type=range]:focus::-webkit-slider-runnable-track{background:#b7b7b7}input[type=range]::-moz-range-track{width:140px;height:8px;cursor:pointer;animate:.2s;box-shadow:0 0 0 #bbb,0 0 0 #c8c8c8;background:#aaa;border-radius:4px;border:1px solid #bbb}input[type=range]::-moz-range-thumb{box-shadow:1px 1px 1px #333,0 0 1px #404040;border:0 solid #fff;height:30px;width:30px;border-radius:8px;background:#ddd;cursor:pointer}input[type=range]::-ms-track{width:140px;height:8px;cursor:pointer;animate:.2s;background:transparent;border-color:transparent;border-width:30px 0;color:transparent}input[type=range]::-ms-fill-lower{background:#9d9d9d}input[type=range]::-ms-fill-lower,input[type=range]::-ms-fill-upper{border:1px solid #bbb;border-radius:8px;box-shadow:0 0 0 #bbb,0 0 0 #c8c8c8}input[type=range]::-ms-fill-upper{background:#aaa}input[type=range]::-ms-thumb{box-shadow:1px 1px 1px #333,0 0 1px #404040;border:0 solid #fff;height:30px;width:30px;border-radius:8px;background:#ddd;cursor:pointer}input[type=range]:focus::-ms-fill-lower{background:#aaa}input[type=range]:focus::-ms-fill-upper{background:#b7b7b7}div#spinners{position:absolute;top:50%;left:50%;transition:opacity .2s}div#spinners.hidden{opacity:0;pointer-events:none}div#spinners i{-webkit-animation:bounce .8s infinite;animation:bounce .8s infinite;display:block;position:absolute;z-index:11}div#spinners i:after{content:"";display:block;background:red;width:30px;height:30px;border-radius:50%;-webkit-animation:rainbow .8s infinite,squash .8s infinite;animation:rainbow .8s infinite,squash .8s infinite}div#spinners i:first-child{left:-50px}div#spinners i:first-child,div#spinners i:first-child:after{-webkit-animation-delay:-.7333s;animation-delay:-.7333s}div#spinners i:nth-child(3){left:50px}div#spinners i:nth-child(3),div#spinners i:nth-child(3):after{-webkit-animation-delay:-.266s;animation-delay:-.266s}div#spinners:after{content:"";display:block;background:hsla(0,0%,100%,.8);position:fixed;top:0;left:0;right:0;bottom:0;z-index:10}@-webkit-keyframes bounce{0%,to{-webkit-transform:translateY(-100px);transform:translateY(-100px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}50%{-webkit-transform:translate(0);transform:translate(0);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes bounce{0%,to{-webkit-transform:translateY(-100px);transform:translateY(-100px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}50%{-webkit-transform:translate(0);transform:translate(0);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@-webkit-keyframes squash{0%,50%,to{-webkit-transform:scaleX(.9) scaleY(1.1);transform:scaleX(.9) scaleY(1.1)}60%{-webkit-transform:scaleX(1.2) scaleY(.6);transform:scaleX(1.2) scaleY(.6)}}@keyframes squash{0%,50%,to{-webkit-transform:scaleX(.9) scaleY(1.1);transform:scaleX(.9) scaleY(1.1)}60%{-webkit-transform:scaleX(1.2) scaleY(.6);transform:scaleX(1.2) scaleY(.6)}}body.runningWithinWebview{background:#f44336;color:#fff;max-width:500px;padding:20px;margin:200px auto;font-size:25px}body.runningWithinWebview:after{content:"";display:block;width:0;height:0;border:40px solid;border-color:transparent transparent #fff;position:fixed;top:0;right:20px;-webkit-animation:pointAtButton 1s infinite;animation:pointAtButton 1s infinite}@-webkit-keyframes pointAtButton{0%,to{-webkit-transform:rotate(30deg);transform:rotate(30deg)}33%{-webkit-transform:translate(-5px,20px) rotate(35deg) scale(.9);transform:translate(-5px,20px) rotate(35deg) scale(.9)}66%{-webkit-transform:translateY(-20px) rotate(25deg) scale(1.1);transform:translateY(-20px) rotate(25deg) scale(1.1)}}@keyframes pointAtButton{0%,to{-webkit-transform:rotate(30deg);transform:rotate(30deg)}33%{-webkit-transform:translate(-5px,20px) rotate(35deg) scale(.9);transform:translate(-5px,20px) rotate(35deg) scale(.9)}66%{-webkit-transform:translateY(-20px) rotate(25deg) scale(1.1);transform:translateY(-20px) rotate(25deg) scale(1.1)}}.bounceClick{transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.bounceClick:active{-webkit-transform:scale(.95);transform:scale(.95)}button{cursor:pointer}canvas#welcome{top:0;z-index:-1}.links,canvas#welcome{position:fixed;left:0;right:0;bottom:0}.links{display:-webkit-box;display:-ms-flexbox;display:flex;color:#fff;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background:rgba(0,0,0,.3)}@media (max-width:700px){.links{display:none}}.links>*{padding:5px;color:#fff}#fileInputWrapper{background:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-weight:700;font-size:120%;padding:20px;position:absolute;top:0;left:0;bottom:0;right:0;margin:auto;max-width:250px;max-height:250px;border-radius:50%}@media (min-width:400){#fileInputWrapper{font-size:140%}}#fileinput,#inputForAFile,canvas#drawzone{position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box}div#drawAndDownload{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;top:0;position:absolute;display:block;bottom:0;left:0;right:0}#drawzoneWrapper{position:absolute;margin:auto;top:0;left:0;right:0;bottom:0;width:100%;height:100%}#drawzoneWrapper canvas,#drawzoneWrapper img{position:absolute;max-width:100%;max-height:100%;margin:auto;border-radius:2px;width:auto;height:auto;display:block;top:0;bottom:0;left:0;right:0}#drawzoneWrapper img{z-index:2}#drawzoneWrapper canvas{z-index:3;cursor:default}label#fileInputWrapper{transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}label#fileInputWrapper:active{-webkit-transform:scale(.95);transform:scale(.95)}label#fileInputWrapper #fileinput{width:100%;opacity:0;cursor:pointer}h1.noscript{display:-webkit-box;display:-ms-flexbox;display:flex;background:orange;color:#fff;text-align:center;position:absolute;top:0;left:0;right:0;bottom:0;margin:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;z-index:200}ul.tip{color:#666;font-style:italic}ul.tip li{margin:5px 0}#topbar{position:fixed;bottom:0;left:0;right:0;height:50px;padding:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:3;overflow:hidden;max-width:400px;margin:auto;border-radius:5px;bottom:10px;transition:background-color .3s,-webkit-transform .2s;transition:transform .2s,background-color .3s;transition:transform .2s,background-color .3s,-webkit-transform .2s}#topbar>*{pointer-events:auto}#topbar.drawInProgress{-webkit-transform:translateY(150px);transform:translateY(150px)}#topbar #pensizePreview{width:50px;height:50px;position:relative;margin-right:50px;background:transparent;border:none;outline:none;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}#topbar #pensizePreview:active,#topbar #pensizePreview:focus{outline:none}#topbar #pensizePreview:active{-webkit-transform:scale(.95);transform:scale(.95)}#topbar #pensizePreview #pensizePreviewDot{z-index:2}#topbar #pensizePreview:hover{-webkit-animation:squish .5s infinite;animation:squish .5s infinite}#topbar #pensizePreview:hover #pensizePreviewDot{-webkit-animation:rainbow 1s infinite;animation:rainbow 1s infinite}#topbar #pensizePreview>*{border-radius:50%;height:50px;width:50px;position:absolute;top:0;left:0;right:0;bottom:0;margin:auto}#topbar #pensizePreview>.eraser{background:url(/images/eraser-color.svg);background-repeat:no-repeat;background-size:contain;background-position:50%}#topbar #download{width:140px;text-transform:uppercase;font-size:80%;margin-left:20px;position:relative;opacity:.5}#topbar #download.usable{opacity:1;-webkit-animation:bounceIn .3s;animation:bounceIn .3s}#topbar #download span.icon{padding:0 5px;opacity:.8;-webkit-transform:scale(.8);transform:scale(.8)}@media (max-width:380px){#topbar #download{width:50px}#topbar #download .label{display:none}}@-webkit-keyframes bounceIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}50%{opacity:1;-webkit-transform:scale(1.2) translateY(-5px);transform:scale(1.2) translateY(-5px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes bounceIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}50%{opacity:1;-webkit-transform:scale(1.2) translateY(-5px);transform:scale(1.2) translateY(-5px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}body.background_n_1 #download{position:relative;color:#333;background:#fff;font-weight:700;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;text-decoration:none;cursor:pointer;-webkit-transform:translateY(-2px);transform:translateY(-2px);box-shadow:0 3px 0 #ccc;transition:box-shadow .2s,-webkit-transform .2s;transition:transform .2s,box-shadow .2s;transition:transform .2s,box-shadow .2s,-webkit-transform .2s;border-radius:3px;margin:5px 0}body.background_n_1 #download:focus,body.background_n_1 #download:hover{background:#e6e6e6;-webkit-animation:squish .2s;animation:squish .2s}body.background_n_1 #download:active{-webkit-transform:none;transform:none;box-shadow:0 0 0 #ccc;background:#ccc}body.background_n_1 #topbar{background-color:#333}body.background_n_0 #download{position:relative;color:#fff;background:#333;font-weight:700;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;text-decoration:none;cursor:pointer;-webkit-transform:translateY(-2px);transform:translateY(-2px);box-shadow:0 3px 0 #000;transition:box-shadow .2s,-webkit-transform .2s;transition:transform .2s,box-shadow .2s;transition:transform .2s,box-shadow .2s,-webkit-transform .2s;border-radius:3px;margin:5px 0}body.background_n_0 #download:focus,body.background_n_0 #download:hover{background:#1a1a1a;-webkit-animation:squish .2s;animation:squish .2s}body.background_n_0 #download:active{-webkit-transform:none;transform:none;box-shadow:0 0 0 #000;background:#000}body.background_n_0 #download span.icon svg path{fill:#fff}body.background_n_0 #topbar{background-color:#ddd}div#background{transition:background-color .2s}.modal,div#background{background:#fff;position:fixed;top:0;left:0;right:0;bottom:0}.modal{border-radius:2px;margin:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-animation:openModal .2s;animation:openModal .2s}.modal.color-modal{max-width:500px;max-height:500px}.modal.color-modal button{border:none;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:30%;margin:5px;border-radius:2px;border:1px solid hsla(0,0%,100%,0);transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s;line-height:0}.modal.color-modal button:active{-webkit-transform:scale(.95);transform:scale(.95)}@media (min-width:600){.modal.color-modal button{font-size:140%}}.modal.color-modal button.active{font-weight:700}.modal.color-modal button.colorbutton{box-shadow:0 0 5px rgba(0,0,0,.58)}.modal.color-modal button.colorbutton:hover{-webkit-animation:squish .3s;animation:squish .3s}.modal.color-modal button.eraser{position:relative;background:transparent}.modal.color-modal button.eraser img{max-width:100%;max-height:100%;position:absolute;left:0;right:0;top:0;bottom:0;margin:auto}.modal.color-modal button.eraser:hover img{-webkit-animation:eraseStuff .5s infinite;animation:eraseStuff .5s infinite}.modal.color-modal button.eraser span.imagelabel{position:absolute;left:50%;opacity:.8;padding-left:70px}.modal.file-download{overflow-y:scroll;display:block;max-width:400px;margin:auto}.modal.file-download a:hover,.modal.file-download button:hover{-webkit-animation:squish .3s;animation:squish .3s}.modal.file-download>*{padding:20px;margin:10px;background:#eee;display:block;border-radius:5px;text-decoration:none}.modal.file-download>.facebookLink{background:#3b5998;color:#fff}.modal.file-download>.githubLink{color:#fff;background:#24292e}.modal.file-download>#downloadIndicator{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:0}.modal.file-download>#downloadIndicator div{padding:20px}.modal.file-download>#downloadIndicator.sucess{background:#4caf50;color:#fff;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.modal.file-download>#downloadIndicator.sucess button{padding:20px;margin:10px}.modal.file-download>#downloadIndicator.failed{background:#f44336;color:#fff}.modal.file-download>.pcHint{opacity:.8}@media (max-width:900px){.modal.file-download>.pcHint{display:none}}.modal.closing{pointer-events:none;-webkit-animation:closeModal .3s ease-in;animation:closeModal .3s ease-in}.modal-backdrop{position:absolute;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.5);-webkit-animation:openBackdrop .2s;animation:openBackdrop .2s}.modal-backdrop.closing{pointer-events:none;-webkit-animation:closeBackdrop .3s;animation:closeBackdrop .3s}@-webkit-keyframes squish{33%{-webkit-transform:scaleX(.95);transform:scaleX(.95)}66%{-webkit-transform:scaleX(.97) scaleY(1.05);transform:scaleX(.97) scaleY(1.05)}}@keyframes squish{33%{-webkit-transform:scaleX(.95);transform:scaleX(.95)}66%{-webkit-transform:scaleX(.97) scaleY(1.05);transform:scaleX(.97) scaleY(1.05)}}@-webkit-keyframes eraseStuff{33%{-webkit-transform:rotate(-4deg) translate(-15px);transform:rotate(-4deg) translate(-15px)}66%{-webkit-transform:rotate(-5deg) scaleX(.97) scaleY(1.02);transform:rotate(-5deg) scaleX(.97) scaleY(1.02)}}@keyframes eraseStuff{33%{-webkit-transform:rotate(-4deg) translate(-15px);transform:rotate(-4deg) translate(-15px)}66%{-webkit-transform:rotate(-5deg) scaleX(.97) scaleY(1.02);transform:rotate(-5deg) scaleX(.97) scaleY(1.02)}}@-webkit-keyframes openModal{0%{opacity:0;-webkit-transform:scale(.5) translateY(-100px);transform:scale(.5) translateY(-100px)}}@keyframes openModal{0%{opacity:0;-webkit-transform:scale(.5) translateY(-100px);transform:scale(.5) translateY(-100px)}}@-webkit-keyframes closeModal{to{-webkit-transform:scale(.5) translateY(100px);transform:scale(.5) translateY(100px);opacity:0}}@keyframes closeModal{to{-webkit-transform:scale(.5) translateY(100px);transform:scale(.5) translateY(100px);opacity:0}}@-webkit-keyframes rainbow{16%{background-color:#f44336}33%{background-color:#3f51b5}50%{background-color:#2196f3}66%{background-color:#4caf50}75%{background-color:#8bc34a}}@keyframes rainbow{16%{background-color:#f44336}33%{background-color:#3f51b5}50%{background-color:#2196f3}66%{background-color:#4caf50}75%{background-color:#8bc34a}}@-webkit-keyframes openBackdrop{0%{opacity:0}}@keyframes openBackdrop{0%{opacity:0}}@-webkit-keyframes closeBackdrop{to{opacity:0}}@keyframes closeBackdrop{to{opacity:0}} -/*# sourceMappingURL=bundle.c14f881344d79b6d5899.css.map*/ \ No newline at end of file +/*# sourceMappingURL=bundle.db4a3dd38e813528b682.css.map*/ \ No newline at end of file diff --git a/bundle.c14f881344d79b6d5899.css.map b/bundle.db4a3dd38e813528b682.css.map similarity index 99% rename from bundle.c14f881344d79b6d5899.css.map rename to bundle.db4a3dd38e813528b682.css.map index c956b90..050de65 100644 --- a/bundle.c14f881344d79b6d5899.css.map +++ b/bundle.db4a3dd38e813528b682.css.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./src/styles.less","webpack:///./src/slider.less","webpack:///./src/spinner.less","webpack:///./src/withinWebview.less"],"names":[],"mappings":"AAAA,KACE,sDACA,SACA,UACA,gBCyCF,kBACE,wBACA,cACA,YAEA,wBACE,aAGF,iDAzBA,YACA,WACA,eACA,YARA,oCAiCE,gBACA,kBACA,sBAGF,wCAtCA,4CAaA,oBACA,YACA,WACA,kBACA,gBACA,eAsBE,wBACA,iBAIF,uDACE,mBAGF,oCA5CA,YACA,WACA,eACA,YARA,oCAoDE,gBACA,kBACA,sBAEF,oCAxDA,4CAaA,oBACA,YACA,WACA,kBACA,gBACA,eA0CA,6BAvDA,YACA,WACA,eACA,YAsDE,uBACA,yBACA,oBACA,kBAGF,kCACE,kBACA,CAIF,oEAJE,sBACA,kBAvEF,oCAgFA,kCALE,eACA,CAIF,6BAhFA,4CAaA,oBACA,YACA,WACA,kBACA,gBACA,eAiEA,wCACE,gBAEF,wCACE,mBC/GJ,aACE,kBACA,QACA,SACA,uBACA,oBACE,UACA,oBAPJ,eAUI,oEACA,cACA,kBAwBA,WAvBA,qBACE,WACA,cACA,eACA,WACA,YACA,kBACA,8GAEF,2BACE,WACA,4DAEE,wDAGJ,4BACE,UACA,8DAEE,sDAKN,mBACE,WACA,cACA,8BACA,eACA,MACA,OACA,QACA,SACA,WAIJ,0BACE,MAEE,kEACA,4EAEF,IACE,sDACA,+EARJ,kBACE,MAEE,kEACA,4EAEF,IACE,sDACA,+EAIJ,0BACE,UAGE,yEAAuB,CAEzB,IACE,yEAAuB,EAP3B,kBACE,UAGE,yEAAuB,CAEzB,IACE,yEAAuB,ECtE3B,0BACE,mBACA,WACA,gBACA,aACA,kBACA,eACA,gCACE,WACA,cACA,QACA,SACA,kBACA,0CACA,eACA,MACA,WACA,gFAGJ,iCACE,MAEE,uDAAW,CAEb,IACE,qHAA+C,CAEjD,IACE,iHAA6C,EHnBjD,yBGWE,MAEE,uDAAW,CAEb,IACE,qHAA+C,CAEjD,IACE,iHAA6C,EHnBjD,aAIE,yGAHA,oBACE,iDAAW,CAIf,OACE,eA+BF,eAGE,MAGA,WAGF,sBARE,eACA,OAEA,QACA,QACA,CAIA,OAOA,qDACA,WACA,oEACA,0BAVA,yBAyeF,OAxeI,cAUF,SACE,YACA,WAUJ,kBACE,gBACA,qDACA,kEACA,oEACA,gBAEA,eAIA,aACA,kBACA,MACA,OACA,SACA,QACA,YACA,gBACA,iBACA,kBAZA,uBA0cF,kBAzcI,gBA4BJ,0CAGE,kBACA,MACA,OACA,SACA,QACA,sBAEF,oBACE,qFACA,MACA,kBACA,cACA,SACA,OACA,QAGF,iBACE,kBACA,YACA,MACA,OACA,QACA,SACA,WACA,YARF,6CAYI,kBACA,eACA,gBACA,YAEA,kBACA,WACA,YAEA,cACA,MACA,SACA,OACA,QAzBJ,qBA4BI,UA5BJ,wBA+BI,UACA,eAIJ,uBACE,yGACA,8BACE,iDAAW,CAHf,kCAMI,WACA,UACA,eAIJ,YACE,qDACA,kBACA,WACA,kBACA,kBACA,MACA,OACA,QACA,SACA,SACA,kEACA,oEACA,YAGF,OACE,WACA,kBAFF,UAII,aAIJ,QACE,eACA,SACA,OACA,QACA,YAEA,aACA,qDACA,oEACA,kEACA,UACA,gBACA,gBACA,YACA,kBACA,YAKA,wKAHA,UACE,oBAGF,uBACE,+DAAW,CAvBf,wBA0BI,WACA,YACA,kBACA,kBAEA,uBACA,YACA,aArOF,yGAsOE,6DAEE,aA3OJ,+BACE,iDAAW,CAsMf,2CAwCM,UAEF,8BACE,oEADF,iDAII,oEAGJ,0BACE,kBACA,YACA,WACA,kBACA,MACA,OACA,QACA,SACA,YACA,gCACE,yCACA,4BACA,wBACA,wBA/DR,kBAoEI,YACA,yBACA,cACA,iBACA,kBACA,WACA,yBACE,UACA,sDA5EN,4BA+EM,cACA,WACA,+CAAW,CAEb,yBA8PJ,kBA7PM,WA6PN,yBA1PQ,cAMR,4BACE,GACE,4EAEF,IACE,UACA,oFACA,+EAPJ,oBACE,GACE,4EAEF,IACE,UACA,oFACA,+EAKJ,8BAvSE,kBACA,WACA,gBAEA,gBACA,qDACA,oEACA,kEACA,+CACA,qBACA,eACA,8DACA,wBACA,sJACA,kBACA,aACA,wEAEE,mBACA,kDAGF,qCACE,sCACA,sBACA,gBA8QJ,4BAKI,sBAIJ,8BAhTE,kBACA,WACA,gBAEA,gBACA,qDACA,oEACA,kEACA,+CACA,qBACA,eACA,8DACA,wBACA,sJACA,kBACA,aACA,wEAEE,mBACA,kDAGF,qCACE,sCACA,sBACA,gBAuRJ,iDAIM,UAJN,4BAQI,sBAIJ,eAOE,gCAEF,sBARE,gBACA,eACA,MACA,OACA,QACA,QACA,CAeA,OAZA,kBACA,YAQA,qDACA,sDACA,kCA8GA,wDA7GA,mBACE,gBACA,iBAFF,0BAKI,YACA,mDACA,UACA,WACA,kBACA,mCAlWJ,yGAqWI,cAxWJ,iCACE,iDAAW,CAwWT,uBA+KN,0BA9KQ,gBAEF,iCACE,gBAEF,sCACE,mCACA,4CACE,kDAGJ,iCACE,kBACA,uBAFF,qCAII,eACA,gBACA,kBACA,OACA,QACA,MACA,SACA,YAEF,2CACE,4EAdJ,iDAiBI,kBACA,SACA,WACA,kBAKR,qBACE,kBACA,cAEA,gBACA,YALF,+DAQI,kDAEF,uBACE,aACA,YACA,gBACA,cACA,kBACA,qBAEA,mCACE,mBACA,WAEF,iCACE,WACA,mBAEF,wCACE,qDACA,yGACA,UAHF,4CAMI,aAGF,+CACE,mBACA,WACA,yGAHF,sDAKI,aACA,YAGJ,+CACE,mBACA,WAGJ,6BACE,WAEA,yBAsFR,6BArFU,cAMR,eACE,oBACA,0EAGJ,gBACE,kBACA,MACA,OACA,QACA,SACA,gCACA,8DACA,wBACE,oBACA,gEAIJ,0BACE,IACE,mDAAW,CAEb,IACE,6EAAwB,EAL5B,kBACE,IACE,mDAAW,CAEb,IACE,6EAAwB,EAK5B,8BACE,IACE,yFAAyB,CAE3B,IACE,yGAAsC,EAL1C,sBACE,IACE,yFAAyB,CAE3B,IACE,yGAAsC,EAI1C,6BACE,GACE,UACA,qFAAsB,EAH1B,qBACE,GACE,UACA,qFAAsB,EAG1B,8BACE,GACE,oFACA,WAHJ,sBACE,GACE,oFACA,WAIJ,2BACE,IACE,yBAEF,IACE,yBAEF,IACE,yBAEF,IACE,yBAEF,IACE,0BAdJ,mBACE,IACE,yBAEF,IACE,yBAEF,IACE,yBAEF,IACE,yBAEF,IACE,0BAIJ,gCACE,GACE,WAFJ,wBACE,GACE,WAGJ,iCACE,GACE,WAFJ,yBACE,GACE","file":"bundle.c14f881344d79b6d5899.css","sourcesContent":["body {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n margin: 0;\n padding: 0;\n overflow: hidden;\n}\n@import './slider.less';\n@import './spinner.less';\n@import './withinWebview.less';\n\n.bounceClick {\n &:active {\n transform: scale(0.95);\n }\n transition: transform 0.2s;\n}\nbutton {\n cursor: pointer;\n}\n.button (@text, @background) {\n position: relative;\n color: @text;\n background: @background;\n\n font-weight: bold;\n display: flex;\n justify-content: center;\n align-items: center;\n align-self: stretch;\n text-decoration: none;\n cursor: pointer;\n transform: translate(0, -2px);\n box-shadow: 0 3px 0 darken(@background, 20%);\n transition: transform 0.2s, box-shadow 0.2s;\n border-radius: 3px;\n margin: 5px 0;\n &:focus,\n &:hover {\n background: darken(@background, 10%);\n animation: squish 0.2s;\n }\n\n &:active {\n transform: none;\n box-shadow: 0 0 0 darken(@background, 20%);\n background: darken(@background, 20%);\n }\n}\ncanvas#welcome {\n position: fixed;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: -1;\n}\n\n.links {\n @media (max-width: 700px) {\n display: none;\n }\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n color: white;\n justify-content: center;\n background: rgba(0, 0, 0, 0.3);\n & > * {\n padding: 5px;\n color: white;\n }\n // transform: translate(0, 100%);\n // transition: transform 0.2s;\n}\n// Show links when cursor in page\n// #inputForAFile:hover .links {\n// transform: none;\n// }\n\n#fileInputWrapper {\n background: white;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: bold;\n\n font-size: 120%;\n @media (min-width: 400) {\n font-size: 140%;\n }\n padding: 20px;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n margin: auto;\n max-width: 250px;\n max-height: 250px;\n border-radius: 50%;\n\n // opacity: 0;\n // transform: scale(0.5);\n // transition: opacity 0.1s, transform 0.3s;\n}\n//\n// #inputForAFile:hover {\n// #fileInputWrapper {\n// opacity: 1;\n// transform: scale(1);\n// &:hover {\n// opacity: 1;\n// transform: scale(1.2);\n// }\n// }\n// }\n#inputForAFile,\n#fileinput,\ncanvas#drawzone {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n box-sizing: border-box;\n}\ndiv#drawAndDownload {\n user-select: none;\n top: 0;\n position: absolute;\n display: block;\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n#drawzoneWrapper {\n position: absolute;\n margin: auto;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n\n img,\n canvas {\n position: absolute;\n max-width: 100%;\n max-height: 100%;\n margin: auto;\n // box-shadow: 0 0 70px rgba(0, 0, 0, 0.5);\n border-radius: 2px;\n width: auto;\n height: auto;\n\n display: block;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n img {\n z-index: 2;\n }\n canvas {\n z-index: 3;\n cursor: default;\n }\n}\n\nlabel#fileInputWrapper {\n transition: transform 0.2s;\n &:active {\n transform: scale(0.95);\n }\n #fileinput {\n width: 100%;\n opacity: 0;\n cursor: pointer;\n }\n}\n\nh1.noscript {\n display: flex;\n background: orange;\n color: white;\n text-align: center;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n margin: 0;\n align-items: center;\n justify-content: center;\n z-index: 200;\n}\n\nul.tip {\n color: #666;\n font-style: italic;\n li {\n margin: 5px 0;\n }\n}\n\n#topbar {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n height: 50px;\n\n padding: 10px;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 3;\n overflow: hidden;\n max-width: 400px;\n margin: auto;\n border-radius: 5px;\n bottom: 10px;\n\n & > * {\n pointer-events: auto;\n }\n transition: transform 0.2s, background-color 0.3s;\n &.drawInProgress {\n transform: translate(0, 150px);\n }\n #pensizePreview {\n width: 50px;\n height: 50px;\n position: relative;\n margin-right: 50px;\n\n background: transparent;\n border: none;\n outline: none;\n &:focus,\n &:active {\n outline: none;\n }\n .bounceClick;\n #pensizePreviewDot {\n z-index: 2;\n }\n &:hover {\n animation: squish 0.5s infinite;\n\n #pensizePreviewDot {\n animation: rainbow 1s infinite;\n }\n }\n & > * {\n border-radius: 50%;\n height: 50px;\n width: 50px;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n margin: auto;\n &.eraser {\n background: url(/images/eraser-color.svg);\n background-repeat: no-repeat;\n background-size: contain;\n background-position: center;\n }\n }\n }\n #download {\n width: 140px;\n text-transform: uppercase;\n font-size: 80%;\n margin-left: 20px;\n position: relative;\n opacity: 0.5;\n &.usable {\n opacity: 1;\n animation: bounceIn 0.3s;\n }\n span.icon {\n padding: 0 5px;\n opacity: 0.8;\n transform: scale(0.8);\n }\n @media (max-width: 380px) {\n width: 50px;\n\n .label {\n display: none;\n }\n }\n }\n}\n\n@keyframes bounceIn {\n 0% {\n animation-timing-function: ease-in;\n }\n 50% {\n opacity: 1;\n transform: scale(1.2) translate(0, -5px);\n animation-timing-function: ease-out;\n }\n 100% {\n }\n}\nbody.background_n_1 {\n #download {\n .button(#333, white);\n }\n #topbar {\n background-color: rgba(51, 51, 51, 1);\n }\n}\n\nbody.background_n_0 {\n #download {\n .button(white, #333);\n span.icon svg path {\n fill: white;\n }\n }\n #topbar {\n background-color: rgba(221, 221, 221, 1);\n }\n}\n\ndiv#background {\n background: white;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n transition: background-color 0.2s;\n}\n.modal {\n border-radius: 2px;\n margin: auto;\n\n position: fixed;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0;\n background: white;\n display: flex;\n justify-content: space-around;\n flex-wrap: wrap;\n &.color-modal {\n max-width: 500px;\n max-height: 500px;\n\n button {\n border: none;\n flex-grow: 1;\n width: 30%;\n margin: 5px;\n border-radius: 2px;\n border: 1px solid rgba(255, 255, 255, 0);\n .bounceClick;\n // Avoids button with text taking more space\n line-height: 0;\n @media (min-width: 600) {\n font-size: 140%;\n }\n &.active {\n font-weight: bold;\n }\n &.colorbutton {\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.58);\n &:hover {\n animation: squish 0.3s;\n }\n }\n &.eraser {\n position: relative;\n background: transparent;\n img {\n max-width: 100%;\n max-height: 100%;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n margin: auto;\n }\n &:hover img {\n animation: eraseStuff 0.5s infinite;\n }\n span.imagelabel {\n position: absolute;\n left: 50%;\n opacity: 0.8;\n padding-left: 70px;\n }\n }\n }\n }\n &.file-download {\n overflow-y: scroll;\n display: block;\n\n max-width: 400px;\n margin: auto;\n a:hover,\n button:hover {\n animation: squish 0.3s;\n }\n & > * {\n padding: 20px;\n margin: 10px;\n background: #eee;\n display: block;\n border-radius: 5px;\n text-decoration: none;\n\n &.facebookLink {\n background: #3b5998;\n color: white;\n }\n &.githubLink {\n color: white;\n background: #24292e;\n }\n &#downloadIndicator {\n display: flex;\n flex-direction: column;\n padding: 0;\n\n div {\n padding: 20px;\n }\n\n &.sucess {\n background: #4caf50;\n color: white;\n flex-direction: column;\n button {\n padding: 20px;\n margin: 10px;\n }\n }\n &.failed {\n background: #f44336;\n color: white;\n }\n }\n &.pcHint {\n opacity: 0.8;\n\n @media (max-width: 900px) {\n display: none;\n }\n }\n }\n }\n animation: openModal 0.2s;\n &.closing {\n pointer-events: none;\n animation: closeModal 0.3s ease-in;\n }\n}\n.modal-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n animation: openBackdrop 0.2s;\n &.closing {\n pointer-events: none;\n animation: closeBackdrop 0.3s;\n }\n}\n\n@keyframes squish {\n 33% {\n transform: scaleX(0.95);\n }\n 66% {\n transform: scaleX(0.97) scaleY(1.05);\n }\n 100% {\n }\n}\n@keyframes eraseStuff {\n 33% {\n transform: rotate(-4deg) translate(-15px, 0);\n }\n 66% {\n transform: rotate(-5deg) scaleX(0.97) scaleY(1.02);\n }\n}\n\n@keyframes openModal {\n 0% {\n opacity: 0;\n transform: scale(0.5) translate(0, -100px);\n }\n}\n@keyframes closeModal {\n 100% {\n transform: scale(0.5) translate(0, 100px);\n opacity: 0;\n }\n}\n\n@keyframes rainbow {\n 16% {\n background-color: #f44336;\n }\n 33% {\n background-color: #3f51b5;\n }\n 50% {\n background-color: #2196f3;\n }\n 66% {\n background-color: #4caf50;\n }\n 75% {\n background-color: #8bc34a;\n }\n}\n\n@keyframes openBackdrop {\n 0% {\n opacity: 0;\n }\n}\n@keyframes closeBackdrop {\n 100% {\n opacity: 0;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/styles.less","@track-color: #aaaaaa;\n@thumb-color: #dddddd;\n\n@thumb-radius: 8px;\n@thumb-height: 30px;\n@thumb-width: 30px;\n@thumb-shadow-size: 1px;\n@thumb-shadow-blur: 1px;\n@thumb-shadow-color: #333;\n@thumb-border-width: 0;\n@thumb-border-color: white;\n\n@track-width: 140px;\n@track-height: 8px;\n@track-shadow-size: 0px;\n@track-shadow-blur: 0px;\n@track-shadow-color: #bbb;\n@track-border-width: 1px;\n@track-border-color: #bbb;\n\n@track-radius: 4px;\n@contrast: 5%;\n\n.shadow(@shadow-size,@shadow-blur,@shadow-color) {\n box-shadow: @shadow-size @shadow-size @shadow-blur @shadow-color,\n 0px 0px @shadow-size lighten(@shadow-color, 5%);\n}\n\n.track() {\n width: @track-width;\n height: @track-height;\n cursor: pointer;\n animate: 0.2s;\n}\n\n.thumb() {\n .shadow(@thumb-shadow-size,@thumb-shadow-blur,@thumb-shadow-color);\n border: @thumb-border-width solid @thumb-border-color;\n height: @thumb-height;\n width: @thumb-width;\n border-radius: @thumb-radius;\n background: @thumb-color;\n cursor: pointer;\n}\n\ninput[type=range] {\n -webkit-appearance: none;\n margin: @thumb-height/2 0;\n width: @track-width;\n\n &:focus {\n outline: none;\n }\n\n &::-webkit-slider-runnable-track {\n .track();\n .shadow(@track-shadow-size,@track-shadow-blur,@track-shadow-color);\n background: @track-color;\n border-radius: @track-radius;\n border: @track-border-width solid @track-border-color;\n }\n\n &::-webkit-slider-thumb {\n .thumb();\n -webkit-appearance: none;\n margin-top: ((-@track-border-width * 2 + @track-height) / 2) - (@thumb-height /\n 2);\n }\n\n &:focus::-webkit-slider-runnable-track {\n background: lighten(@track-color, @contrast);\n }\n\n &::-moz-range-track {\n .track();\n .shadow(@track-shadow-size,@track-shadow-blur,@track-shadow-color);\n background: @track-color;\n border-radius: @track-radius;\n border: @track-border-width solid @track-border-color;\n }\n &::-moz-range-thumb {\n .thumb();\n }\n\n &::-ms-track {\n .track();\n background: transparent;\n border-color: transparent;\n border-width: @thumb-width 0;\n color: transparent;\n }\n\n &::-ms-fill-lower {\n background: darken(@track-color, @contrast);\n border: @track-border-width solid @track-border-color;\n border-radius: @track-radius*2;\n .shadow(@track-shadow-size,@track-shadow-blur,@track-shadow-color);\n }\n &::-ms-fill-upper {\n background: @track-color;\n border: @track-border-width solid @track-border-color;\n border-radius: @track-radius*2;\n .shadow(@track-shadow-size,@track-shadow-blur,@track-shadow-color);\n }\n &::-ms-thumb {\n .thumb();\n }\n &:focus::-ms-fill-lower {\n background: @track-color;\n }\n &:focus::-ms-fill-upper {\n background: lighten(@track-color, @contrast);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/slider.less","div#spinners {\n position: absolute;\n top: 50%;\n left: 50%;\n transition: opacity 0.2s;\n &.hidden {\n opacity: 0;\n pointer-events: none;\n }\n i {\n animation: bounce 0.8s infinite;\n display: block;\n position: absolute;\n &:after {\n content: \"\";\n display: block;\n background: red;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n animation: rainbow 0.8s infinite, squash 0.8s infinite;\n }\n &:nth-child(1) {\n left: -50px;\n &,\n &:after {\n animation-delay: -0.7333s;\n }\n }\n &:nth-child(3) {\n left: 50px;\n &,\n &:after {\n animation-delay: -0.266s;\n }\n }\n z-index: 11;\n }\n &:after {\n content: \"\";\n display: block;\n background: rgba(255, 255, 255, 0.8);\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 10;\n }\n}\n\n@keyframes bounce {\n 0%,\n 100% {\n transform: translate(0, -100px);\n animation-timing-function: ease-in;\n }\n 50% {\n transform: translate(0, 0);\n animation-timing-function: ease-out;\n }\n}\n\n@keyframes squash {\n 0%,\n 50%,\n 100% {\n transform: scaleX(0.9) scaleY(1.1);\n }\n 60% {\n transform: scaleX(1.2) scaleY(0.6);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/spinner.less","body.runningWithinWebview {\n background: #f44336;\n color: white;\n max-width: 500px;\n padding: 20px;\n margin: 200px auto;\n font-size: 25px;\n &:after {\n content: \"\";\n display: block;\n width: 0;\n height: 0;\n border: 40px solid;\n border-color: transparent transparent white transparent;\n position: fixed;\n top: 0;\n right: 20px;\n animation: pointAtButton 1s infinite;\n }\n}\n@keyframes pointAtButton {\n 0%,\n 100% {\n transform: rotate(30deg);\n }\n 33% {\n transform: translate(-5px, 20px) rotate(35deg) scale(0.9);\n }\n 66% {\n transform: translate(0, -20px) rotate(25deg) scale(1.1);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/withinWebview.less"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./src/styles.less","webpack:///./src/slider.less","webpack:///./src/spinner.less","webpack:///./src/withinWebview.less"],"names":[],"mappings":"AAAA,KACE,sDACA,SACA,UACA,gBCyCF,kBACE,wBACA,cACA,YAEA,wBACE,aAGF,iDAzBA,YACA,WACA,eACA,YARA,oCAiCE,gBACA,kBACA,sBAGF,wCAtCA,4CAaA,oBACA,YACA,WACA,kBACA,gBACA,eAsBE,wBACA,iBAIF,uDACE,mBAGF,oCA5CA,YACA,WACA,eACA,YARA,oCAoDE,gBACA,kBACA,sBAEF,oCAxDA,4CAaA,oBACA,YACA,WACA,kBACA,gBACA,eA0CA,6BAvDA,YACA,WACA,eACA,YAsDE,uBACA,yBACA,oBACA,kBAGF,kCACE,kBACA,CAIF,oEAJE,sBACA,kBAvEF,oCAgFA,kCALE,eACA,CAIF,6BAhFA,4CAaA,oBACA,YACA,WACA,kBACA,gBACA,eAiEA,wCACE,gBAEF,wCACE,mBC/GJ,aACE,kBACA,QACA,SACA,uBACA,oBACE,UACA,oBAPJ,eAUI,oEACA,cACA,kBAwBA,WAvBA,qBACE,WACA,cACA,eACA,WACA,YACA,kBACA,8GAEF,2BACE,WACA,4DAEE,wDAGJ,4BACE,UACA,8DAEE,sDAKN,mBACE,WACA,cACA,8BACA,eACA,MACA,OACA,QACA,SACA,WAIJ,0BACE,MAEE,kEACA,4EAEF,IACE,sDACA,+EARJ,kBACE,MAEE,kEACA,4EAEF,IACE,sDACA,+EAIJ,0BACE,UAGE,yEAAuB,CAEzB,IACE,yEAAuB,EAP3B,kBACE,UAGE,yEAAuB,CAEzB,IACE,yEAAuB,ECtE3B,0BACE,mBACA,WACA,gBACA,aACA,kBACA,eACA,gCACE,WACA,cACA,QACA,SACA,kBACA,0CACA,eACA,MACA,WACA,gFAGJ,iCACE,MAEE,uDAAW,CAEb,IACE,qHAA+C,CAEjD,IACE,iHAA6C,EHnBjD,yBGWE,MAEE,uDAAW,CAEb,IACE,qHAA+C,CAEjD,IACE,iHAA6C,EHnBjD,aAIE,yGAHA,oBACE,iDAAW,CAIf,OACE,eA+BF,eAGE,MAGA,WAGF,sBARE,eACA,OAEA,QACA,QACA,CAIA,OAOA,qDACA,WACA,oEACA,0BAVA,yBAyeF,OAxeI,cAUF,SACE,YACA,WAUJ,kBACE,gBACA,qDACA,kEACA,oEACA,gBAEA,eAIA,aACA,kBACA,MACA,OACA,SACA,QACA,YACA,gBACA,iBACA,kBAZA,uBA0cF,kBAzcI,gBA4BJ,0CAGE,kBACA,MACA,OACA,SACA,QACA,sBAEF,oBACE,qFACA,MACA,kBACA,cACA,SACA,OACA,QAGF,iBACE,kBACA,YACA,MACA,OACA,QACA,SACA,WACA,YARF,6CAYI,kBACA,eACA,gBACA,YAEA,kBACA,WACA,YAEA,cACA,MACA,SACA,OACA,QAzBJ,qBA4BI,UA5BJ,wBA+BI,UACA,eAIJ,uBACE,yGACA,8BACE,iDAAW,CAHf,kCAMI,WACA,UACA,eAIJ,YACE,qDACA,kBACA,WACA,kBACA,kBACA,MACA,OACA,QACA,SACA,SACA,kEACA,oEACA,YAGF,OACE,WACA,kBAFF,UAII,aAIJ,QACE,eACA,SACA,OACA,QACA,YAEA,aACA,qDACA,oEACA,kEACA,UACA,gBACA,gBACA,YACA,kBACA,YAKA,wKAHA,UACE,oBAGF,uBACE,+DAAW,CAvBf,wBA0BI,WACA,YACA,kBACA,kBAEA,uBACA,YACA,aArOF,yGAsOE,6DAEE,aA3OJ,+BACE,iDAAW,CAsMf,2CAwCM,UAEF,8BACE,oEADF,iDAII,oEAGJ,0BACE,kBACA,YACA,WACA,kBACA,MACA,OACA,QACA,SACA,YACA,gCACE,yCACA,4BACA,wBACA,wBA/DR,kBAoEI,YACA,yBACA,cACA,iBACA,kBACA,WACA,yBACE,UACA,sDA5EN,4BA+EM,cACA,WACA,+CAAW,CAEb,yBA8PJ,kBA7PM,WA6PN,yBA1PQ,cAMR,4BACE,GACE,4EAEF,IACE,UACA,oFACA,+EAPJ,oBACE,GACE,4EAEF,IACE,UACA,oFACA,+EAKJ,8BAvSE,kBACA,WACA,gBAEA,gBACA,qDACA,oEACA,kEACA,+CACA,qBACA,eACA,8DACA,wBACA,sJACA,kBACA,aACA,wEAEE,mBACA,kDAGF,qCACE,sCACA,sBACA,gBA8QJ,4BAKI,sBAIJ,8BAhTE,kBACA,WACA,gBAEA,gBACA,qDACA,oEACA,kEACA,+CACA,qBACA,eACA,8DACA,wBACA,sJACA,kBACA,aACA,wEAEE,mBACA,kDAGF,qCACE,sCACA,sBACA,gBAuRJ,iDAIM,UAJN,4BAQI,sBAIJ,eAOE,gCAEF,sBARE,gBACA,eACA,MACA,OACA,QACA,QACA,CAeA,OAZA,kBACA,YAQA,qDACA,sDACA,kCA8GA,wDA7GA,mBACE,gBACA,iBAFF,0BAKI,YACA,mDACA,UACA,WACA,kBACA,mCAlWJ,yGAqWI,cAxWJ,iCACE,iDAAW,CAwWT,uBA+KN,0BA9KQ,gBAEF,iCACE,gBAEF,sCACE,mCACA,4CACE,kDAGJ,iCACE,kBACA,uBAFF,qCAII,eACA,gBACA,kBACA,OACA,QACA,MACA,SACA,YAEF,2CACE,4EAdJ,iDAiBI,kBACA,SACA,WACA,kBAKR,qBACE,kBACA,cAEA,gBACA,YALF,+DAQI,kDAEF,uBACE,aACA,YACA,gBACA,cACA,kBACA,qBAEA,mCACE,mBACA,WAEF,iCACE,WACA,mBAEF,wCACE,qDACA,yGACA,UAHF,4CAMI,aAGF,+CACE,mBACA,WACA,yGAHF,sDAKI,aACA,YAGJ,+CACE,mBACA,WAGJ,6BACE,WAEA,yBAsFR,6BArFU,cAMR,eACE,oBACA,0EAGJ,gBACE,kBACA,MACA,OACA,QACA,SACA,gCACA,8DACA,wBACE,oBACA,gEAIJ,0BACE,IACE,mDAAW,CAEb,IACE,6EAAwB,EAL5B,kBACE,IACE,mDAAW,CAEb,IACE,6EAAwB,EAK5B,8BACE,IACE,yFAAyB,CAE3B,IACE,yGAAsC,EAL1C,sBACE,IACE,yFAAyB,CAE3B,IACE,yGAAsC,EAI1C,6BACE,GACE,UACA,qFAAsB,EAH1B,qBACE,GACE,UACA,qFAAsB,EAG1B,8BACE,GACE,oFACA,WAHJ,sBACE,GACE,oFACA,WAIJ,2BACE,IACE,yBAEF,IACE,yBAEF,IACE,yBAEF,IACE,yBAEF,IACE,0BAdJ,mBACE,IACE,yBAEF,IACE,yBAEF,IACE,yBAEF,IACE,yBAEF,IACE,0BAIJ,gCACE,GACE,WAFJ,wBACE,GACE,WAGJ,iCACE,GACE,WAFJ,yBACE,GACE","file":"bundle.db4a3dd38e813528b682.css","sourcesContent":["body {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n margin: 0;\n padding: 0;\n overflow: hidden;\n}\n@import './slider.less';\n@import './spinner.less';\n@import './withinWebview.less';\n\n.bounceClick {\n &:active {\n transform: scale(0.95);\n }\n transition: transform 0.2s;\n}\nbutton {\n cursor: pointer;\n}\n.button (@text, @background) {\n position: relative;\n color: @text;\n background: @background;\n\n font-weight: bold;\n display: flex;\n justify-content: center;\n align-items: center;\n align-self: stretch;\n text-decoration: none;\n cursor: pointer;\n transform: translate(0, -2px);\n box-shadow: 0 3px 0 darken(@background, 20%);\n transition: transform 0.2s, box-shadow 0.2s;\n border-radius: 3px;\n margin: 5px 0;\n &:focus,\n &:hover {\n background: darken(@background, 10%);\n animation: squish 0.2s;\n }\n\n &:active {\n transform: none;\n box-shadow: 0 0 0 darken(@background, 20%);\n background: darken(@background, 20%);\n }\n}\ncanvas#welcome {\n position: fixed;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: -1;\n}\n\n.links {\n @media (max-width: 700px) {\n display: none;\n }\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n color: white;\n justify-content: center;\n background: rgba(0, 0, 0, 0.3);\n & > * {\n padding: 5px;\n color: white;\n }\n // transform: translate(0, 100%);\n // transition: transform 0.2s;\n}\n// Show links when cursor in page\n// #inputForAFile:hover .links {\n// transform: none;\n// }\n\n#fileInputWrapper {\n background: white;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: bold;\n\n font-size: 120%;\n @media (min-width: 400) {\n font-size: 140%;\n }\n padding: 20px;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n margin: auto;\n max-width: 250px;\n max-height: 250px;\n border-radius: 50%;\n\n // opacity: 0;\n // transform: scale(0.5);\n // transition: opacity 0.1s, transform 0.3s;\n}\n//\n// #inputForAFile:hover {\n// #fileInputWrapper {\n// opacity: 1;\n// transform: scale(1);\n// &:hover {\n// opacity: 1;\n// transform: scale(1.2);\n// }\n// }\n// }\n#inputForAFile,\n#fileinput,\ncanvas#drawzone {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n box-sizing: border-box;\n}\ndiv#drawAndDownload {\n user-select: none;\n top: 0;\n position: absolute;\n display: block;\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n#drawzoneWrapper {\n position: absolute;\n margin: auto;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n\n img,\n canvas {\n position: absolute;\n max-width: 100%;\n max-height: 100%;\n margin: auto;\n // box-shadow: 0 0 70px rgba(0, 0, 0, 0.5);\n border-radius: 2px;\n width: auto;\n height: auto;\n\n display: block;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n img {\n z-index: 2;\n }\n canvas {\n z-index: 3;\n cursor: default;\n }\n}\n\nlabel#fileInputWrapper {\n transition: transform 0.2s;\n &:active {\n transform: scale(0.95);\n }\n #fileinput {\n width: 100%;\n opacity: 0;\n cursor: pointer;\n }\n}\n\nh1.noscript {\n display: flex;\n background: orange;\n color: white;\n text-align: center;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n margin: 0;\n align-items: center;\n justify-content: center;\n z-index: 200;\n}\n\nul.tip {\n color: #666;\n font-style: italic;\n li {\n margin: 5px 0;\n }\n}\n\n#topbar {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n height: 50px;\n\n padding: 10px;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 3;\n overflow: hidden;\n max-width: 400px;\n margin: auto;\n border-radius: 5px;\n bottom: 10px;\n\n & > * {\n pointer-events: auto;\n }\n transition: transform 0.2s, background-color 0.3s;\n &.drawInProgress {\n transform: translate(0, 150px);\n }\n #pensizePreview {\n width: 50px;\n height: 50px;\n position: relative;\n margin-right: 50px;\n\n background: transparent;\n border: none;\n outline: none;\n &:focus,\n &:active {\n outline: none;\n }\n .bounceClick;\n #pensizePreviewDot {\n z-index: 2;\n }\n &:hover {\n animation: squish 0.5s infinite;\n\n #pensizePreviewDot {\n animation: rainbow 1s infinite;\n }\n }\n & > * {\n border-radius: 50%;\n height: 50px;\n width: 50px;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n margin: auto;\n &.eraser {\n background: url(/images/eraser-color.svg);\n background-repeat: no-repeat;\n background-size: contain;\n background-position: center;\n }\n }\n }\n #download {\n width: 140px;\n text-transform: uppercase;\n font-size: 80%;\n margin-left: 20px;\n position: relative;\n opacity: 0.5;\n &.usable {\n opacity: 1;\n animation: bounceIn 0.3s;\n }\n span.icon {\n padding: 0 5px;\n opacity: 0.8;\n transform: scale(0.8);\n }\n @media (max-width: 380px) {\n width: 50px;\n\n .label {\n display: none;\n }\n }\n }\n}\n\n@keyframes bounceIn {\n 0% {\n animation-timing-function: ease-in;\n }\n 50% {\n opacity: 1;\n transform: scale(1.2) translate(0, -5px);\n animation-timing-function: ease-out;\n }\n 100% {\n }\n}\nbody.background_n_1 {\n #download {\n .button(#333, white);\n }\n #topbar {\n background-color: rgba(51, 51, 51, 1);\n }\n}\n\nbody.background_n_0 {\n #download {\n .button(white, #333);\n span.icon svg path {\n fill: white;\n }\n }\n #topbar {\n background-color: rgba(221, 221, 221, 1);\n }\n}\n\ndiv#background {\n background: white;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n transition: background-color 0.2s;\n}\n.modal {\n border-radius: 2px;\n margin: auto;\n\n position: fixed;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0;\n background: white;\n display: flex;\n justify-content: space-around;\n flex-wrap: wrap;\n &.color-modal {\n max-width: 500px;\n max-height: 500px;\n\n button {\n border: none;\n flex-grow: 1;\n width: 30%;\n margin: 5px;\n border-radius: 2px;\n border: 1px solid rgba(255, 255, 255, 0);\n .bounceClick;\n // Avoids button with text taking more space\n line-height: 0;\n @media (min-width: 600) {\n font-size: 140%;\n }\n &.active {\n font-weight: bold;\n }\n &.colorbutton {\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.58);\n &:hover {\n animation: squish 0.3s;\n }\n }\n &.eraser {\n position: relative;\n background: transparent;\n img {\n max-width: 100%;\n max-height: 100%;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n margin: auto;\n }\n &:hover img {\n animation: eraseStuff 0.5s infinite;\n }\n span.imagelabel {\n position: absolute;\n left: 50%;\n opacity: 0.8;\n padding-left: 70px;\n }\n }\n }\n }\n &.file-download {\n overflow-y: scroll;\n display: block;\n\n max-width: 400px;\n margin: auto;\n a:hover,\n button:hover {\n animation: squish 0.3s;\n }\n & > * {\n padding: 20px;\n margin: 10px;\n background: #eee;\n display: block;\n border-radius: 5px;\n text-decoration: none;\n\n &.facebookLink {\n background: #3b5998;\n color: white;\n }\n &.githubLink {\n color: white;\n background: #24292e;\n }\n &#downloadIndicator {\n display: flex;\n flex-direction: column;\n padding: 0;\n\n div {\n padding: 20px;\n }\n\n &.sucess {\n background: #4caf50;\n color: white;\n flex-direction: column;\n button {\n padding: 20px;\n margin: 10px;\n }\n }\n &.failed {\n background: #f44336;\n color: white;\n }\n }\n &.pcHint {\n opacity: 0.8;\n\n @media (max-width: 900px) {\n display: none;\n }\n }\n }\n }\n animation: openModal 0.2s;\n &.closing {\n pointer-events: none;\n animation: closeModal 0.3s ease-in;\n }\n}\n.modal-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n animation: openBackdrop 0.2s;\n &.closing {\n pointer-events: none;\n animation: closeBackdrop 0.3s;\n }\n}\n\n@keyframes squish {\n 33% {\n transform: scaleX(0.95);\n }\n 66% {\n transform: scaleX(0.97) scaleY(1.05);\n }\n 100% {\n }\n}\n@keyframes eraseStuff {\n 33% {\n transform: rotate(-4deg) translate(-15px, 0);\n }\n 66% {\n transform: rotate(-5deg) scaleX(0.97) scaleY(1.02);\n }\n}\n\n@keyframes openModal {\n 0% {\n opacity: 0;\n transform: scale(0.5) translate(0, -100px);\n }\n}\n@keyframes closeModal {\n 100% {\n transform: scale(0.5) translate(0, 100px);\n opacity: 0;\n }\n}\n\n@keyframes rainbow {\n 16% {\n background-color: #f44336;\n }\n 33% {\n background-color: #3f51b5;\n }\n 50% {\n background-color: #2196f3;\n }\n 66% {\n background-color: #4caf50;\n }\n 75% {\n background-color: #8bc34a;\n }\n}\n\n@keyframes openBackdrop {\n 0% {\n opacity: 0;\n }\n}\n@keyframes closeBackdrop {\n 100% {\n opacity: 0;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/styles.less","@track-color: #aaaaaa;\n@thumb-color: #dddddd;\n\n@thumb-radius: 8px;\n@thumb-height: 30px;\n@thumb-width: 30px;\n@thumb-shadow-size: 1px;\n@thumb-shadow-blur: 1px;\n@thumb-shadow-color: #333;\n@thumb-border-width: 0;\n@thumb-border-color: white;\n\n@track-width: 140px;\n@track-height: 8px;\n@track-shadow-size: 0px;\n@track-shadow-blur: 0px;\n@track-shadow-color: #bbb;\n@track-border-width: 1px;\n@track-border-color: #bbb;\n\n@track-radius: 4px;\n@contrast: 5%;\n\n.shadow(@shadow-size,@shadow-blur,@shadow-color) {\n box-shadow: @shadow-size @shadow-size @shadow-blur @shadow-color,\n 0px 0px @shadow-size lighten(@shadow-color, 5%);\n}\n\n.track() {\n width: @track-width;\n height: @track-height;\n cursor: pointer;\n animate: 0.2s;\n}\n\n.thumb() {\n .shadow(@thumb-shadow-size,@thumb-shadow-blur,@thumb-shadow-color);\n border: @thumb-border-width solid @thumb-border-color;\n height: @thumb-height;\n width: @thumb-width;\n border-radius: @thumb-radius;\n background: @thumb-color;\n cursor: pointer;\n}\n\ninput[type=range] {\n -webkit-appearance: none;\n margin: @thumb-height/2 0;\n width: @track-width;\n\n &:focus {\n outline: none;\n }\n\n &::-webkit-slider-runnable-track {\n .track();\n .shadow(@track-shadow-size,@track-shadow-blur,@track-shadow-color);\n background: @track-color;\n border-radius: @track-radius;\n border: @track-border-width solid @track-border-color;\n }\n\n &::-webkit-slider-thumb {\n .thumb();\n -webkit-appearance: none;\n margin-top: ((-@track-border-width * 2 + @track-height) / 2) - (@thumb-height /\n 2);\n }\n\n &:focus::-webkit-slider-runnable-track {\n background: lighten(@track-color, @contrast);\n }\n\n &::-moz-range-track {\n .track();\n .shadow(@track-shadow-size,@track-shadow-blur,@track-shadow-color);\n background: @track-color;\n border-radius: @track-radius;\n border: @track-border-width solid @track-border-color;\n }\n &::-moz-range-thumb {\n .thumb();\n }\n\n &::-ms-track {\n .track();\n background: transparent;\n border-color: transparent;\n border-width: @thumb-width 0;\n color: transparent;\n }\n\n &::-ms-fill-lower {\n background: darken(@track-color, @contrast);\n border: @track-border-width solid @track-border-color;\n border-radius: @track-radius*2;\n .shadow(@track-shadow-size,@track-shadow-blur,@track-shadow-color);\n }\n &::-ms-fill-upper {\n background: @track-color;\n border: @track-border-width solid @track-border-color;\n border-radius: @track-radius*2;\n .shadow(@track-shadow-size,@track-shadow-blur,@track-shadow-color);\n }\n &::-ms-thumb {\n .thumb();\n }\n &:focus::-ms-fill-lower {\n background: @track-color;\n }\n &:focus::-ms-fill-upper {\n background: lighten(@track-color, @contrast);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/slider.less","div#spinners {\n position: absolute;\n top: 50%;\n left: 50%;\n transition: opacity 0.2s;\n &.hidden {\n opacity: 0;\n pointer-events: none;\n }\n i {\n animation: bounce 0.8s infinite;\n display: block;\n position: absolute;\n &:after {\n content: \"\";\n display: block;\n background: red;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n animation: rainbow 0.8s infinite, squash 0.8s infinite;\n }\n &:nth-child(1) {\n left: -50px;\n &,\n &:after {\n animation-delay: -0.7333s;\n }\n }\n &:nth-child(3) {\n left: 50px;\n &,\n &:after {\n animation-delay: -0.266s;\n }\n }\n z-index: 11;\n }\n &:after {\n content: \"\";\n display: block;\n background: rgba(255, 255, 255, 0.8);\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 10;\n }\n}\n\n@keyframes bounce {\n 0%,\n 100% {\n transform: translate(0, -100px);\n animation-timing-function: ease-in;\n }\n 50% {\n transform: translate(0, 0);\n animation-timing-function: ease-out;\n }\n}\n\n@keyframes squash {\n 0%,\n 50%,\n 100% {\n transform: scaleX(0.9) scaleY(1.1);\n }\n 60% {\n transform: scaleX(1.2) scaleY(0.6);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/spinner.less","body.runningWithinWebview {\n background: #f44336;\n color: white;\n max-width: 500px;\n padding: 20px;\n margin: 200px auto;\n font-size: 25px;\n &:after {\n content: \"\";\n display: block;\n width: 0;\n height: 0;\n border: 40px solid;\n border-color: transparent transparent white transparent;\n position: fixed;\n top: 0;\n right: 20px;\n animation: pointAtButton 1s infinite;\n }\n}\n@keyframes pointAtButton {\n 0%,\n 100% {\n transform: rotate(30deg);\n }\n 33% {\n transform: translate(-5px, 20px) rotate(35deg) scale(0.9);\n }\n 66% {\n transform: translate(0, -20px) rotate(25deg) scale(1.1);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/withinWebview.less"],"sourceRoot":""} \ No newline at end of file diff --git a/bundle.db4a3dd38e813528b682.js b/bundle.db4a3dd38e813528b682.js new file mode 100644 index 0000000..a85853e --- /dev/null +++ b/bundle.db4a3dd38e813528b682.js @@ -0,0 +1,2 @@ +!function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/",t(t.s=1)}([function(e,t,n){"use strict";function o(e,t){function n(e){e.preventDefault(),r(i,a,o)}var o=t.OrginalImage,i=t.canvas,a=t.originalFileName;e.addEventListener("click",n)}function i(e){console.log(e)}function r(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:i,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:i,l=t+"-minimage-"+d+".png";a(e,n,o,r),c(e,l,o,r),d++}function a(e,t,n,o){try{var i=e.getContext("2d"),r=i.globalCompositeOperation;return i.globalCompositeOperation="destination-over",i.drawImage(t,0,0,e.width,e.height),i.globalCompositeOperation=r,o&&setTimeout(o),e}catch(e){n&&n(e)}}function c(e,t,n,o){try{e.toBlob(function(e){try{if(window.navigator.msSaveOrOpenBlob)window.navigator.msSaveBlob(e,t),o&&setTimeout(o);else{var i=window.URL.createObjectURL(e),r=document.createElement("a");document.body.appendChild(r),r.setAttribute("href",i),r.setAttribute("download",t),r.click(),o&&setTimeout(o),setTimeout(function(){window.URL.revokeObjectURL(i),document.body.removeChild(r)},3e3)}}catch(e){n&&n(e)}})}catch(e){n&&n(e)}}Object.defineProperty(t,"__esModule",{value:!0}),t.makeDownloadLink=o,t.triggerDownload=r,t.mergeCanvasAndImage=a;var d=0},function(e,t,n){e.exports=n(2)},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function i(e){function t(e){"eraser"==e?y():w(e)}F=e,x();var n=L("drawzone"),o=L("drawzoneWrapper");L("inputForAFile").style.display="none",L("drawAndDownload").style.display="",console.log(e.width,e.height);var i=2*Math.max(window.innerWidth,window.innerHeight),r=Math.max(e.width/i,e.height/i,1);e.width=n.width=e.width/r,e.height=n.height=e.height/r,o.style.maxWidth=e.width,o.style.maxHeight=e.height,o.appendChild(e);var c=(n.getContext("2d"),!1),d=L("topbar").classList,l=L("background"),s=(0,a.default)(L("pensizePreview"),{canvasForCursor:n,onColorChange:t,elementToContrastWith:l}),m=s.setColorDotSize,h=s.refreshColorPreviewBorder,p=(s.clearColorPicker,(0,f.default)(n,{onMouseDown:function(){n.getClientRects()[0].height+160>window.innerHeight&&d.add("drawInProgress")},onMouseUp:function(){c||(c=!0,download.classList.add("usable")),d.remove("drawInProgress")},OrginalImage:F})),w=p.drawWithColor,y=p.drawWithEraser,b=p.setPencilSize;(0,u.default)(l,{onChange:h}),(0,g.default)(L("pensize"),{onChange:function(e){m(e),b(e)}}),(0,v.makeDownloadLink)(L("download"),{OrginalImage:F,originalFileName:E,canvas:n}),(0,C.detectCtrlS)({canvas:n,OrginalImage:F,originalFileName:E})}n(3);var r=n(4),a=o(r),c=n(8),d=o(c),l=n(9),u=o(l),s=n(10),f=o(s),v=n(0),m=n(11),g=o(m),h=n(12),p=o(h),w=n(13),y=n(14),C=n(15),b=n(16),k=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(b),L=document.getElementById.bind(document);k.install(),(0,w.checkRunWithinWebview)();var E=void 0,F=void 0;(0,d.default)({fileinput:L("fileinput"),onImageCreated:function(e,t){E=t,i(e)},startTask:y.startTask,endTask:y.endTask});var M=(0,p.default)(L("welcome"),{fitWindow:!0}),x=M.stopAnim,O=M.bgColor;L("fileInputWrapper").style.color=O},function(e,t){},function(e,t,n){"use strict";function o(e,t){if("eraser"==e)return"transparent";var n=(0,l.luminance)(t),o=(0,l.luminance)(e);return n>125&&o>200?"black":n<125&&o<25?"white":"transparent"}function i(e){return(0,l.luminance)(e)>127.5?"rgba(0,0,0,0.8)":"rgba(255,255,255,0.8)"}function r(e,t){(0,s.createModal)("color-modal",function(n){function o(e){a(),t(e)}var r=n.modal,a=n.closeModal;u.paletteColors.forEach(function(t){var n=document.createElement("button");n.classList.add("colorbutton"),t===e&&(n.classList.add("active"),n.innerHTML="Selected",n.style.color=i(t)),n.style.backgroundColor=t.toLowerCase(),n.addEventListener("click",function(){return o(t)}),r.appendChild(n)});var c=document.createElement("button");c.classList.add("eraser"),c.addEventListener("click",function(){return o("eraser")}),c.innerHTML=''+("eraser"===e?"Eraser selected":"Eraser")+"",r.appendChild(c)})}function a(e,t,n){var o=t<4?4:t,i=document.createElement("canvas");i.width=i.height=o;var r=i.getContext("2d");"eraser"==n?d(r,o):c(r,o,n);var a=i.toDataURL("image/png");e.style.cursor="url("+a+") "+o/2+" "+o/2+",auto"}function c(e,t,n){e.beginPath(),e.arc(t/2,t/2,t/2,0,2*Math.PI,!1),e.fillStyle=n,e.fill()}function d(e,t){e.fillStyle="#da502d",e.fillRect(0,0,2*t/3,t),e.fillStyle="#6584a5",e.fillRect(2*t/3-1,0,t,t),e.globalCompositeOperation="destination-in",c(e,t,"white")}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){function n(){m.style.background=o(g,u.style.backgroundColor)}function i(){r(g,c)}function c(e){console.log("onColorPicked",e),g&&e!==g&&(h=g),localStorage.setItem("previousColor",h),g=e,a(s,p,g),"eraser"==e?(v.style.background="",v.classList.add("eraser")):(v.classList.remove("eraser"),v.style.background=e,n()),localStorage.setItem("color",e),l(e)}function d(e){p=e,a(s,p,g),v.style.transform="scale("+e/w+")",m.style.transform="scale("+(e/w+1/w)+")"}var l=t.onColorChange,u=t.elementToContrastWith,s=t.canvasForCursor,v=e.children[0],m=e.children[1],g=void 0;e.addEventListener("click",i);var h=localStorage.getItem("previousColor")||"eraser",p=void 0,w=v.getBoundingClientRect().width;return window.addEventListener("keydown",function(e){"x"===String.fromCharCode(e.which).toLowerCase()&&(console.log("x switching to "+h),c(h))}),setTimeout(function(){return c(localStorage.getItem("color")||f)}),{clearColorPicker:function(){e.removeEventListener("click",i)},setColorDotSize:d,refreshColorPreviewBorder:n}};var l=n(5),u=n(6),s=n(7),f="#2b76ce"},function(e,t,n){"use strict";function o(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:e;e.addEventListener(t,function(e){e.preventDefault();var t=e.touches[0]||{},i=t.clientX,r=t.clientY,a=new MouseEvent(n,{clientX:i,clientY:r});o.dispatchEvent(a)},!1)}var u=t.onMouseDown,s=t.onMouseUp,f=t.OrginalImage,v=void 0,m=void 0,g=void 0;n(),window.addEventListener("resize",n);var h=e.getContext("2d");h.lineCap="round";var p={x:0,y:0},w=p;e.addEventListener("mousedown",function(t){if(3==t.which)return void(0,o.mergeCanvasAndImage)(e,f);p=w=i(t),r(),u()},!1),document.addEventListener("copy",function(t){t.preventDefault(),(0,o.mergeCanvasAndImage)(e,f),t.clipboardData.setData("text/html",'')}),document.addEventListener("mouseup",a,!1),e.addEventListener("mousemove",function(e){p=i(e)},!1);var y=!1;return l("touchstart","mousedown"),l("touchend","mouseup",document),l("touchmove","mousemove"),{drawWithEraser:function(){h.globalCompositeOperation="destination-out"},drawWithColor:function(e){h.globalCompositeOperation="source-over",h.strokeStyle=e},setPencilSize:function(e){g=e,h.lineWidth=e/v}}};var o=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){function n(t){e.value=t,localStorage.setItem("pensize",t),i(t)}var i=t.onChange;e.addEventListener("input",function(e){return n(e.target.value)}),n(parseInt(localStorage.getItem("pensize"))||o)};var o=20},function(e,t,n){"use strict";function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=e.filter(function(e){return e!=t});return n[Math.floor(Math.random()*n.length)]}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){function n(){u&&(e.width=window.innerWidth,e.height=window.innerHeight),f=e.width,v=e.height,s=e.getContext("2d"),s.fillStyle=m,s.fillRect(0,0,f,v),s.lineCap="round",r()}function r(){g={x:f/2,y:v/2},h={x:10*Math.random()-5,y:10*Math.random()-5},p={x:10*Math.random()-5,y:10*Math.random()-5},s.strokeStyle=o(i,m),s.lineWidth=20+40*Math.random(),s.beginPath(),s.moveTo(g.x,g.y)}function a(){p={x:2*Math.random()-1,y:2*Math.random()-1},w=setTimeout(a,100+200*Math.random())}function c(){s.moveTo(g.x,g.y),h.x*=.95,h.y*=.95,h.x+=p.x,h.y+=p.y,g.x+=h.x,g.y+=h.y,s.lineTo(g.x,g.y),s.stroke(),(g.x<-50||g.x>f+50||g.y<-50||g.y>v+50)&&r()}function d(){y&&(window.requestAnimationFrame(d),c())}function l(){y=!1,clearTimeout(w),window.removeEventListener("resize",n)}var u=t.fitWindow,s=void 0,f=void 0,v=void 0,m="#F44336",g=void 0,h=void 0,p=void 0,w=void 0;n(),window.addEventListener("resize",n),a();var y=!0;return d(),{stopAnim:l,bgColor:m}};var i="#F44336,#E91E63,#9C27B0,#673AB7,#3F51B5,#2196F3,#03A9F4,#00BCD4,#009688,#4CAF50,#8BC34A,#CDDC39,#FFEB3B,#FFC107,#FF9800,#FF5722".split(",")},function(e,t,n){"use strict";function o(){if(navigator.userAgent.match(/Android/i)){var e=document.createElement("script");e.src="https://iswebview.herokuapp.com/?callback=JSONPcallback",document.body.appendChild(e)}}Object.defineProperty(t,"__esModule",{value:!0}),t.checkRunWithinWebview=o,window.JSONPcallback=function(e){e.isWebView&&(document.body.classList.add("runningWithinWebview"),document.body.innerHTML='\n Please open minimage.tk with chrome,\n it cannot work within another app.\n\n There may be an option in the menu above the page,\n something like "Open in Chrome".\n\n ')}},function(e,t,n){"use strict";function o(){a++,r()}function i(){a--,setTimeout(r)}function r(){spinners.classList[a?"remove":"add"]("hidden")}Object.defineProperty(t,"__esModule",{value:!0}),t.startTask=o,t.endTask=i,t.updateLook=r;var a=0;document.addEventListener("DOMContentLoaded",r)},function(e,t,n){"use strict";function o(e){var t=e.canvas,n=e.OrginalImage,o=e.originalFileName;window.addEventListener("keydown",function(e){(e.ctrlKey||e.metaKey)&&"s"===String.fromCharCode(e.which).toLowerCase()&&(e.preventDefault(),(0,i.triggerDownload)(t,o,n))})}Object.defineProperty(t,"__esModule",{value:!0}),t.detectCtrlS=o;var i=n(0)},function(e,t){function n(){return"serviceWorker"in navigator&&(window.fetch||"imageRendering"in document.documentElement.style)&&("https:"===window.location.protocol||"localhost"===window.location.hostname||0===window.location.hostname.indexOf("127."))}function o(e){if(e||(e={}),n()){navigator.serviceWorker.register("/sw.js")}else if(window.applicationCache){var t=function(){var e=document.createElement("iframe");e.src="/appcache/manifest.html",e.style.display="none",a=e,document.body.appendChild(e)};return void("complete"===document.readyState?setTimeout(t):window.addEventListener("load",t))}}function i(e,t){}function r(){if(n()&&navigator.serviceWorker.getRegistration().then(function(e){if(e)return e.update()}),a)try{a.contentWindow.applicationCache.update()}catch(e){}}var a;t.install=o,t.applyUpdate=i,t.update=r}]); +//# sourceMappingURL=bundle.db4a3dd38e813528b682.js.map \ No newline at end of file diff --git a/bundle.db4a3dd38e813528b682.js.map b/bundle.db4a3dd38e813528b682.js.map new file mode 100644 index 0000000..c43731d --- /dev/null +++ b/bundle.db4a3dd38e813528b682.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///bundle.db4a3dd38e813528b682.js","webpack:///webpack/bootstrap db4a3dd38e813528b682","webpack:///./src/canvasMergerAndDonwloaderLink.js","webpack:///./src/app.js","webpack:///./src/colorPicker.js","webpack:///./src/colorToRGB.js","webpack:///./src/palette.js","webpack:///./src/modal.js","webpack:///./src/getAnImage.js","webpack:///./src/toggleAbleBackground.js","webpack:///./src/editableCanvas.js","webpack:///./src/pencilSizeSlider.js","webpack:///./src/welcomeAnim.js","webpack:///./src/checkRunWithinWebview.js","webpack:///./src/spinners.js","webpack:///./src/detectCtrlS.js","webpack:///./node_modules/offline-plugin/runtime.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","makeDownloadLink","link","_ref","downloadImage","e","preventDefault","triggerDownload","canvas","originalFileName","OrginalImage","addEventListener","nope","console","log","failed","arguments","length","undefined","suceeded","filename","downloadCounter","mergeCanvasAndImage","downloadCanvas","img","ctx","getContext","oldComposite","globalCompositeOperation","drawImage","width","height","setTimeout","toBlob","blob","window","navigator","msSaveOrOpenBlob","msSaveBlob","url","URL","createObjectURL","document","createElement","body","appendChild","setAttribute","click","revokeObjectURL","removeChild","value","_interopRequireDefault","obj","default","letUserDrawAndDownload","setColor","color","drawWithEraser","drawWithColor","stopAnim","byId","drawzoneWrapper","style","display","maxRes","Math","max","innerWidth","innerHeight","imgScale","maxWidth","maxHeight","hasDoneFirstDraw","barClass","classList","background","_setupColorPicker","_colorPicker2","canvasForCursor","onColorChange","elementToContrastWith","setColorDotSize","refreshColorPreviewBorder","_setupEditableCanvas","clearColorPicker","_editableCanvas2","onMouseDown","getClientRects","add","onMouseUp","download","remove","setPencilSize","_toggleAbleBackground2","onChange","_pencilSizeSlider2","pxSize","_canvasMergerAndDonwloaderLink","_detectCtrlS","detectCtrlS","_colorPicker","_getAnImage","_getAnImage2","_toggleAbleBackground","_editableCanvas","_pencilSizeSlider","_welcomeAnim2","_welcomeAnim3","_checkRunWithinWebview","_spinners","_runtime","OfflinePluginRuntime","newObj","key","getElementById","bind","install","checkRunWithinWebview","fileinput","onImageCreated","startTask","endTask","_welcomeAnim","fitWindow","bgColor","borderColor","foreground","bgL","_colorToRGB","luminance","fgL","textColor","openColorPicker","currentColor","callback","_modal","createModal","_ref2","pickColor","closeModal","modal","_palette","paletteColors","forEach","button","innerHTML","backgroundColor","toLowerCase","eraser","setCursor","node","size","drawEraser","drawColorCircle","cursor","toDataURL","beginPath","arc","PI","fillStyle","fill","fillRect","pensizePreview","pensizePreviewBorder","openInitializedColorPicker","onColorPicked","previousColor","localStorage","setItem","currentSize","pensizePreviewDot","transform","baseSize","children","getItem","getBoundingClientRect","ev","String","fromCharCode","which","DEFAULTCOLOR","removeEventListener","_toConsumableArray","arr","Array","isArray","arr2","from","colorToRGB","clearRect","concat","getImageData","data","slice","reduce","a","b","split","className","closeOnEscape","backdrop","zIndex","modalZindex","loadFile","fileToLoad","fileReader","FileReader","onload","createImageWithFileContent","result","onerror","readAsDataURL","askingForImage","Image","src","handleDataTransferItems","items","imageFile","find","kind","type","match","getAsFile","getAsString","_ref$startTask","_ref$endTask","fileChanged","changeEvent","pop","target","files","clipboardData","stopPropagation","dataTransfer","switchBackground","currentMode","applyBackground","options","current","bclass","index","switchCount","measureScale","rect","scale","lastUsedPXsize","lineWidth","getMousePos","mouseEvent","x","clientX","left","y","clientY","top","startDrawLoop","isDrawing","drawLoop","endDrawLoop","requestAnimationFrame","renderCanvas","moveTo","lastPos","lineTo","mousePos","stroke","proxyTouchToMouse","touchEventName","mouseEventName","eventTarget","touches","MouseEvent","dispatchEvent","lineCap","setData","strokeStyle","slider","onPencilSizeChange","parseInt","DEFAULTSIZE","randomColor","colorPool","exception","withoutEx","filter","floor","random","reset","w","h","randomizeInst","position","speed","acceleration","coolColors","randomAcceletation","accelerationTimeoutHandle","clearTimeout","userAgent","JSONPcall","JSONPcallback","isWebView","tasksInProgress","updateLook","spinners","event","ctrlKey","metaKey","hasSW","fetch","documentElement","location","protocol","hostname","indexOf","serviceWorker","register","applicationCache","doLoad","iframe","directory","appCacheIframe","readyState","applyUpdate","errback","update","getRegistration","then","registration","contentWindow"],"mappings":"CAAS,SAAUA,GCInB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QAvBA,GAAAD,KA4BAF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,EAGAF,EAAAU,EAAA,SAAAP,EAAAQ,EAAAC,GACAZ,EAAAa,EAAAV,EAAAQ,IACAG,OAAAC,eAAAZ,EAAAQ,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAZ,EAAAmB,EAAA,SAAAf,GACA,GAAAQ,GAAAR,KAAAgB,WACA,WAA2B,MAAAhB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAAU,EAAAE,EAAA,IAAAA,GACAA,GAIAZ,EAAAa,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAGtDtB,EAAAyB,EAAA,IAGAzB,IAAA0B,EAAA,KDMM,SAAUtB,EAAQD,EAASH,GAEjC,YEpEO,SAAS2B,GACdC,EADKC,GAKL,QAASC,GAAcC,GACrBA,EAAEC,iBACFC,EAAgBC,EAAQC,EAAkBC,GAJ5C,GADEA,GACFP,EADEO,aAAcF,EAChBL,EADgBK,OAAQC,EACxBN,EADwBM,gBAOxBP,GAAKS,iBAAiB,QAASP,GAGjC,QAASQ,GAAKP,GACZQ,QAAQC,IAAIT,GAGP,QAASE,GACdC,EACAC,EACAC,GAGA,GAFAK,GAEAC,UAAAC,OAAA,OAAAC,KAAAF,UAAA,GAAAA,UAAA,GAFSJ,EACTO,EACAH,UAAAC,OAAA,OAAAC,KAAAF,UAAA,GAAAA,UAAA,GADWJ,EAEPQ,EAAWX,EAAmB,aAAeY,EAAkB,MACnEC,GAAoBd,EAAQE,EAAcK,EAAQI,GAClDI,EAAef,EAAQY,EAAUL,EAAQI,GAEzCE,IAGK,QAASC,GAAoBd,EAAQgB,EAAKT,EAAQI,GACvD,IAEE,GAAIM,GAAMjB,EAAOkB,WAAW,MACxBC,EAAeF,EAAIG,wBAQvB,OAPAH,GAAIG,yBAA2B,mBAG/BH,EAAII,UAAUL,EAAK,EAAG,EAAGhB,EAAOsB,MAAOtB,EAAOuB,QAE9CN,EAAIG,yBAA2BD,EAC/BR,GAAYa,WAAWb,GAChBX,EACP,MAAOH,GACPU,GAAUA,EAAOV,IAIrB,QAASkB,GAAef,EAAQY,EAAUL,EAAQI,GAChD,IACEX,EAAOyB,OAAO,SAASC,GACrB,IACE,GAAIC,OAAOC,UAAUC,iBACnBF,OAAOC,UAAUE,WAAWJ,EAAMd,GAClCD,GAAYa,WAAWb,OAClB,CACL,GAAIoB,GAAMJ,OAAOK,IAAIC,gBAAgBP,GACjChC,EAAOwC,SAASC,cAAc,IAClCD,UAASE,KAAKC,YAAY3C,GAC1BA,EAAK4C,aAAa,OAAQP,GAC1BrC,EAAK4C,aAAa,WAAY1B,GAC9BlB,EAAK6C,QACL5B,GAAYa,WAAWb,GACvBa,WAAW,WACTG,OAAOK,IAAIQ,gBAAgBT,GAC3BG,SAASE,KAAKK,YAAY/C,IACzB,MAEL,MAAOG,GACPU,GAAUA,EAAOV,MAGrB,MAAOA,GACPU,GAAUA,EAAOV,IFFrBjB,OAAOC,eAAeZ,EAAS,cAC7ByE,OAAO,IAETzE,EE1EgBwB,mBF2EhBxB,EE3DgB8B,kBF4DhB9B,EE9CgB6C,qBAfhB,IAAID,GAAkB,GF2IhB,SAAU3C,EAAQD,EAASH,GAEjCI,EAAOD,QAAUH,EAAoB,IAK/B,SAAUI,EAAQD,EAASH,GAEjC,YA2CA,SAAS6E,GAAuBC,GAAO,MAAOA,IAAOA,EAAI1D,WAAa0D,GAAQC,QAASD,GG1KvF,QAASE,GAAuB9B,GA2D9B,QAAS+B,GAASC,GACH,UAATA,EACFC,IAEAC,EAAcF,GA9DlB9C,EAAec,EACfmC,GACA,IAAMnD,GAASoD,EAAK,YAClBC,EAAkBD,EAAK,kBAGzBA,GAAK,iBAAiBE,MAAMC,QAAU,OACtCH,EAAK,mBAAmBE,MAAMC,QAAU,GAExClD,QAAQC,IAAIU,EAAIM,MAAON,EAAIO,OAC3B,IAAIiC,GAA2D,EAAlDC,KAAKC,IAAI/B,OAAOgC,WAAYhC,OAAOiC,aAE5CC,EAAWJ,KAAKC,IAAI1C,EAAIM,MAAQkC,EAAQxC,EAAIO,OAASiC,EAAQ,EACjExC,GAAIM,MAAQtB,EAAOsB,MAAQN,EAAIM,MAAQuC,EACvC7C,EAAIO,OAASvB,EAAOuB,OAASP,EAAIO,OAASsC,EAC1CR,EAAgBC,MAAMQ,SAAW9C,EAAIM,MACrC+B,EAAgBC,MAAMS,UAAY/C,EAAIO,OAGtC8B,EAAgBhB,YAAYrB,EAE5B,IACIgD,IADMhE,EAAOkB,WAAW,OACL,GACnB+C,EAAWb,EAAK,UAAUc,UAE1BC,EAAaf,EAAK,cA1BagB,GAgC/B,EAAAC,EAAAxB,SAAiBO,EAAK,mBACxBkB,gBAAiBtE,EACjBuE,cAAexB,EACfyB,sBAAuBL,IANvBM,EA7BiCL,EA6BjCK,gBACAC,EA9BiCN,EA8BjCM,0BA9BiCC,GAAAP,EA+BjCQ,kBAWE,EAAAC,EAAAhC,SAAoB7C,GACtB8E,YAD8B,WAExB9E,EAAO+E,iBAAiB,GAAGxD,OAAS,IAASI,OAAOiC,aACtDK,EAASe,IAAI,mBAGjBC,UAN8B,WAOvBjB,IACHA,GAAmB,EACnBkB,SAAShB,UAAUc,IAAI,WAEzBf,EAASkB,OAAO,mBAElBjF,kBAhBAgD,EAvCiCyB,EAuCjCzB,cACAD,EAxCiC0B,EAwCjC1B,eACAmC,EAzCiCT,EAyCjCS,eA0BF,EAAAC,EAAAxC,SAAqBsB,GAAcmB,SAAUZ,KAE7C,EAAAa,EAAA1C,SAAiBO,EAAK,YACpBkC,SADgC,SACvBE,GACPf,EAAgBe,GAChBJ,EAAcI,OAIlB,EAAAC,EAAAhG,kBAAiB2D,EAAK,aACpBlD,eACAD,mBACAD,YAGF,EAAA0F,EAAAC,cACE3F,SACAE,eACAD,qBArHJnC,EAAA,EACA,IAAA8H,GAAA9H,EAAA,GHqKIuG,EAAgB1B,EAAuBiD,GGpK3CC,EAAA/H,EAAA,GHwKIgI,EAAenD,EAAuBkD,GGvK1CE,EAAAjI,EAAA,GH2KIuH,EAAyB1C,EAAuBoD,GG1KpDC,EAAAlI,EAAA,IH8KI+G,EAAmBlC,EAAuBqD,GG7K9CP,EAAA3H,EAAA,GACAmI,EAAAnI,EAAA,IHkLIyH,EAAqB5C,EAAuBsD,GGjLhDC,EAAApI,EAAA,IHqLIqI,EAAgBxD,EAAuBuD,GGpL3CE,EAAAtI,EAAA,IACAuI,EAAAvI,EAAA,IAEA4H,EAAA5H,EAAA,IAEAwI,EAAAxI,EAAA,IAAYyI,EH2LZ,SAAiC3D,GAAO,GAAIA,GAAOA,EAAI1D,WAAc,MAAO0D,EAAc,IAAI4D,KAAa,IAAW,MAAP5D,EAAe,IAAK,GAAI6D,KAAO7D,GAAWhE,OAAOS,UAAUC,eAAejB,KAAKuE,EAAK6D,KAAMD,EAAOC,GAAO7D,EAAI6D,GAAgC,OAAtBD,GAAO3D,QAAUD,EAAY4D,GAF/MF,GG5L7ClD,EAAOlB,SAASwE,eAAeC,KAAKzE,SAI1CqE,GAAqBK,WAErB,EAAAR,EAAAS,wBACA,IAAI5G,UAAkBC,UACtB,EAAA4F,EAAAjD,UACEiE,UAAW1D,EAAK,aAChB2D,eAAgB,SAAC/F,EAAKJ,GACpBX,EAAmBW,EACnBkC,EAAuB9B,IAEzBgG,sBACAC,mBHyMF,IAAIC,IGtMwB,EAAAf,EAAAtD,SAAYO,EAAK,YAAc+D,WAAW,IAAhEhE,EHuMS+D,EGvMT/D,SAAUiE,EHwMFF,EGxMEE,OAChBhE,GAAK,oBAAoBE,MAAMN,MAAQoE,GH4SjC,SAAUlJ,EAAQD,KAMlB,SAAUC,EAAQD,EAASH,GAEjC,YIvQA,SAASuJ,GAAYC,EAAYnD,GAC/B,GAAkB,UAAdmD,EAAwB,MAAO,aACnC,IAAIC,IAAM,EAAAC,EAAAC,WAAUtD,GAChBuD,GAAM,EAAAF,EAAAC,WAAUH,EACpB,OAAIC,GAAM,KAAOG,EAAM,IAAY,QAC/BH,EAAM,KAAOG,EAAM,GAAW,QAC3B,cAGT,QAASC,GAAUxD,GACjB,OAAO,EAAAqD,EAAAC,WAAUtD,GAAc,MAC3B,kBACA,wBAGN,QAASyD,GAAgBC,EAAcC,IACrC,EAAAC,EAAAC,aAAY,cAAe,SAAAC,GACzB,QAASC,GAAUlF,GACjBmF,IACAL,EAAS9E,GAHyC,GAAxBoF,GAAwBH,EAAxBG,MAAOD,EAAiBF,EAAjBE,UAMnCE,GAAAC,cAAcC,QAAQ,SAAAvF,GACpB,GAAIwF,GAAStG,SAASC,cAAc,SACpCqG,GAAOtE,UAAUc,IAAI,eACjBhC,IAAU6E,IACZW,EAAOtE,UAAUc,IAAI,UACrBwD,EAAOC,UAAY,WACnBD,EAAOlF,MAAMN,MAAQ2E,EAAU3E,IAEjCwF,EAAOlF,MAAMoF,gBAAkB1F,EAAM2F,cACrCH,EAAOrI,iBAAiB,QAAS,iBAAM+H,GAAUlF,KACjDoF,EAAM/F,YAAYmG,IAGpB,IAAII,GAAS1G,SAASC,cAAc,SACpCyG,GAAO1E,UAAUc,IAAI,UACrB4D,EAAOzI,iBAAiB,QAAS,iBAAM+H,GAAU,YACjDU,EAAOH,UACL,kEACC,WAAaZ,EAAe,kBAAoB,UACjD,UACFO,EAAM/F,YAAYuG,KAItB,QAASC,GAAUC,EAAMC,EAAM/F,GAC7B,GAAIxD,GAAIuJ,EAAO,EAAI,EAAIA,EACnBxK,EAAI2D,SAASC,cAAc,SAC/B5D,GAAE+C,MAAQ/C,EAAEgD,OAAS/B,CACrB,IAAIyB,GAAM1C,EAAE2C,WAAW,KAEV,WAAT8B,EAAmBgG,EAAW/H,EAAKzB,GAClCyJ,EAAgBhI,EAAKzB,EAAGwD,EAC7B,IAAIkG,GAAS3K,EAAE4K,UAAU,YACzBL,GAAKxF,MAAM4F,OAAX,OAA2BA,EAA3B,KAAsC1J,EAAI,EAA1C,IAA+CA,EAAI,EAAnD,QAGF,QAASyJ,GAAgBhI,EAAKzB,EAAGwD,GAC/B/B,EAAImI,YACJnI,EAAIoI,IAAI7J,EAAI,EAAGA,EAAI,EAAGA,EAAI,EAAG,EAAG,EAAIiE,KAAK6F,IAAI,GAC7CrI,EAAIsI,UAAYvG,EAChB/B,EAAIuI,OAGN,QAASR,GAAW/H,EAAKzB,GACvByB,EAAIsI,UAAY,UAChBtI,EAAIwI,SAAS,EAAG,EAAO,EAAJjK,EAAQ,EAAGA,GAC9ByB,EAAIsI,UAAY,UAChBtI,EAAIwI,SAAa,EAAJjK,EAAQ,EAAI,EAAG,EAAGA,EAAGA,GAClCyB,EAAIG,yBAA2B,iBAC/B6H,EAAgBhI,EAAKzB,EAAG,SJmM1BZ,OAAOC,eAAeZ,EAAS,cAC7ByE,OAAO,IAGTzE,EAAQ4E,QIzVO,SACb6G,EADa/J,GAOb,QAAS+E,KACPiF,EAAqBrG,MAAMa,WAAakD,EACtCQ,EACArD,EAAsBlB,MAAMoF,iBAKhC,QAASkB,KACPhC,EAAgBC,EAAcgC,GAKhC,QAASA,GAAc7G,GACrB3C,QAAQC,IAAI,gBAAiB0C,GACzB6E,GAAgB7E,IAAU6E,IAE5BiC,EAAgBjC,GAGlBkC,aAAaC,QAAQ,gBAAiBF,GAEtCjC,EAAe7E,EACf6F,EAAUvE,EAAiB2F,EAAapC,GAC3B,UAAT7E,GACFkH,EAAkB5G,MAAMa,WAAa,GACrC+F,EAAkBhG,UAAUc,IAAI,YAEhCkF,EAAkBhG,UAAUiB,OAAO,UACnC+E,EAAkB5G,MAAMa,WAAanB,EACrC0B,KAEFqF,aAAaC,QAAQ,QAAShH,GAC9BuB,EAAcvB,GAahB,QAASyB,GAAgBe,GACvByE,EAAczE,EACdqD,EAAUvE,EAAiB2F,EAAapC,GACxCqC,EAAkB5G,MAAM6G,UAAY,SAAW3E,EAAS4E,EAAW,IACnET,EAAqBrG,MAAM6G,UACzB,UAAY3E,EAAS4E,EAAW,EAAIA,GAAY,IAxDpD,GADE7F,GACF5E,EADE4E,cAAeC,EACjB7E,EADiB6E,sBAAuBF,EACxC3E,EADwC2E,gBAElC4F,EAAoBR,EAAeW,SAAS,GAC5CV,EAAuBD,EAAeW,SAAS,GASjDxC,QAIJ6B,GAAevJ,iBAAiB,QAASyJ,EACzC,IAAIE,GAAgBC,aAAaO,QAAQ,kBAAoB,SAwBzDL,SAEEG,EAAWF,EAAkBK,wBAAwBjJ,KAqB3D,OAnBAK,QAAOxB,iBAAiB,UAAW,SAAAqK,GACmB,MAAhDC,OAAOC,aAAaF,EAAGG,OAAOhC,gBAChCtI,QAAQC,IAAI,kBAAoBwJ,GAChCD,EAAcC,MAYlBtI,WAAW,iBACTqI,GAAcE,aAAaO,QAAQ,UAAYM,MAI/ChG,iBADK,WAEH8E,EAAemB,oBAAoB,QAASjB,IAE9CnF,kBACAC,6BA1EJ,IAAA8C,GAAA1J,EAAA,GACAuK,EAAAvK,EAAA,GACAiK,EAAAjK,EAAA,GAHM8M,EAAe,WJ4ff,SAAU1M,EAAQD,EAASH,GAEjC,YASA,SAASgN,GAAmBC,GAAO,GAAIC,MAAMC,QAAQF,GAAM,CAAE,IAAK,GAAI5M,GAAI,EAAG+M,EAAOF,MAAMD,EAAItK,QAAStC,EAAI4M,EAAItK,OAAQtC,IAAO+M,EAAK/M,GAAK4M,EAAI5M,EAAM,OAAO+M,GAAe,MAAOF,OAAMG,KAAKJ,GKvgBnL,QAASK,GAAWpI,GACzB,GAAIhD,GAASkC,SAASC,cAAc,SACpCnC,GAAOsB,MAAQtB,EAAOuB,OAAS,CAC/B,IAAIN,GAAMjB,EAAOkB,WAAW,KAI5B,OAHAD,GAAIoK,UAAU,EAAG,EAAG,EAAG,GACvBpK,EAAIsI,UAAYvG,EAChB/B,EAAIwI,SAAS,EAAG,EAAG,EAAG,MACf6B,OAAAR,EAAI7J,EAAIsK,aAAa,EAAG,EAAG,EAAG,GAAGC,OAAMC,MAAM,EAAG,GAGlD,QAAShE,GAAUzE,GACxB,MAAOoI,GAAWpI,GAAO0I,OAAO,SAACC,EAAGC,GAAJ,MAAUD,GAAIC,GAAG,GAAK,ELsfxDhN,OAAOC,eAAeZ,EAAS,cAC7ByE,OAAO,IAETzE,EKpgBgBmN,aLqgBhBnN,EK3fgBwJ,aLihBV,SAAUvJ,EAAQD,EAASH,GAEjC,YAGAc,QAAOC,eAAeZ,EAAS,cAC7ByE,OAAO,GMjiBI4F,iBAAgB,0KAA0KuD,MACrM,MNsiBI,SAAU3N,EAAQD,EAASH,GAEjC,YOxiBO,SAASkK,GAAY8D,EAAWhE,GAcrC,QAASiE,GAAcvB,GAEP,IAAZA,EAAGG,OAEHxC,IAEJ,QAASA,KACPC,EAAMlE,UAAUc,IAAI,WACpBgH,EAAS9H,UAAUc,IAAI,WACvBxD,WAAW,WACTU,SAASE,KAAKK,YAAY2F,GAC1BlG,SAASE,KAAKK,YAAYuJ,IACzB,KACH9J,SAAS2I,oBAAoB,QAASkB,GA1BxC,GAAI3D,GAAQlG,SAASC,cAAc,MACnCiG,GAAMlE,UAAUc,IAAI,SACpBoD,EAAMlE,UAAUc,IAAI8G,GACpB5J,SAASE,KAAKC,YAAY+F,EAE1B,IAAI4D,GAAW9J,SAASC,cAAc,MAwBtC,OAvBA6J,GAAS9H,UAAUc,IAAI,kBACvB9C,SAASE,KAAKC,YAAY2J,GAE1BA,EAAS1I,MAAM2I,OAASC,EACxB9D,EAAM9E,MAAM2I,OAASC,EAAc,EACnCF,EAAS7L,iBAAiB,QAASgI,GACnCjG,SAAS/B,iBAAiB,QAAS4L,GAgBnCG,GAAe,EACRpE,GAAWM,QAAOD,eP6gB3BvJ,OAAOC,eAAeZ,EAAS,cAC7ByE,OAAO,IAETzE,EO9iBgB+J,aADhB,IAAIkE,GAAc,GPklBZ,SAAUhO,EAAQD,EAASH,GAEjC,YAGAc,QAAOC,eAAeZ,EAAS,cAC7ByE,OAAO,IAGTzE,EAAQ4E,QQ3lBO,SAAAlD,GAWb,QAASwM,GAASC,GAChBpF,GACA,IAAIqF,GAAa,GAAIC,WACrBD,GAAWE,OAAS,WAClBC,EAA2BH,EAAWI,QACtCxF,KAEFoF,EAAWK,QAAUzF,EACrBoF,EAAWM,cAAcP,GAG3B,QAASI,GAA2BC,GAElC,GADAzF,IACK4F,EAAL,CACA,GAAI5L,GAAM,GAAI6L,MACd7L,GAAIuL,OAAS,WACXK,GAAiB,EACjB7F,EAAe/F,EAAKf,GACpBgH,KAEFjG,EAAI0L,QAAUzF,EACdjG,EAAI8L,IAAML,GA8BZ,QAASM,GAAwBC,GAE/B,GAAIC,GAAYjC,MAAM3L,UAAU6N,KAAK7O,KACnC2O,EACA,SAAAnN,GAAA,MAAe,QAAVA,EAAEsN,MAAkBtN,EAAEuN,KAAKC,MAAM,UAGxC,IADApN,EAAmB,eACfgN,EAEF,WADAd,GAASc,EAAUK,YAIrB,IAAIvL,GAAMiJ,MAAM3L,UAAU6N,KAAK7O,KAAK2O,EAAO,SAAAnN,GAAA,MAAe,UAAVA,EAAEsN,MAC9CpL,IACFA,EAAIwL,YAAY,SAAA/N,GAAA,MAAKgN,GAA2BhN,KAvEnD,GAJDuH,GAICpH,EAJDoH,eACAD,EAGCnH,EAHDmH,UAGC0G,EAAA7N,EAFDqH,gBAECtG,KAAA8M,EAFW,iBAAM,OAEjBA,EAAAC,EAAA9N,EADDsH,cACCvG,KAAA+M,EADS,iBAAM,OACfA,EAEGxN,EAAmB,eACnB2M,GAAiB,GA4BrB,WAEE,QAASc,GAAYC,GACnB7G,EAAU+D,oBAAoB,SAAU6C,GACxCzN,EACE6G,EAAUpE,MAAMmJ,MAAM,MAAM+B,MAAM/B,MAAM,KAAK,IAAM,QACrDM,EAASwB,EAAYE,OAAOC,MAAM,IALpChH,GAAaA,EAAU3G,iBAAiB,SAAUuN,MAWpD/L,OAAOxB,iBAAiB,QAAS,SAASqK,GACxCuC,EAAwBvC,EAAGuD,cAAcf,SAG3C9K,SAASE,KAAKjC,iBAAiB,WAAY,SAASqK,GAClDA,EAAG1K,iBACH0K,EAAGwD,oBAEL9L,SAASE,KAAKjC,iBAAiB,OAAQ,SAASqK,GAC9CA,EAAG1K,iBACH0K,EAAGwD,kBACHjB,EAAwBvC,EAAGyD,aAAajB,WR2nBtC,SAAU9O,EAAQD,EAASH,GAEjC,YAGAc,QAAOC,eAAeZ,EAAS,cAC7ByE,OAAO,IAGTzE,EAAQ4E,QS/rBO,SAASsB,EAATxE,GACb,QAASuO,KACPC,IACApE,aAAaC,QAAQ,aAAcmE,GACnCC,IAGF,QAASA,KACP,GAAIC,IAAW,OAAQ,QACnBC,EAAUH,EAAcE,EAAQ5N,MACpC0D,GAAWb,MAAMoF,gBAAkB2F,EAAQC,GAG3ChJ,EAASgJ,EAET,IAAIC,GAASrM,SAASE,KAAK8B,SAC3BmK,GAAQ9F,QAAQ,SAACvF,EAAOwL,GAAR,MAAkBD,GAAOpJ,OAAO,gBAAkBqJ,KAClED,EAAOvJ,IAAI,gBAAkBsJ,GAEzBG,EAAc,GAChBpO,QAAQC,IAAe,GAAXgO,EAAe,SAAW,UACtCG,KAEApO,QAAQC,IACN,+EAxB0C,GAAZgF,GAAY3F,EAAZ2F,SAMhCmJ,EAAc,EAsBdN,EAAcpE,aAAaO,QAAQ,eAAiB,CACxD8D,KACAjK,EAAWhE,iBAAiB,QAAS+N,KTssBjC,SAAUhQ,EAAQD,EAASH,GAEjC,YAGAc,QAAOC,eAAeZ,EAAS,cAC7ByE,OAAO,IAGTzE,EAAQ4E,QU3uBO,SAAS7C,EAATL,GAIb,QAAS+O,KACPC,EAAO3O,EAAOuK,wBACdqE,EAAQD,EAAKrN,MAAQtB,EAAOsB,MACxBuN,GAAkB5N,IACpBA,EAAI6N,UAAYD,EAAiBD,GAyDrC,QAASG,GAAYC,GACnB,OACEC,GAAID,EAAWE,QAAUP,EAAKQ,MAAQP,EACtCQ,GAAIJ,EAAWK,QAAUV,EAAKW,KAAOV,GAQzC,QAASW,KACHC,IACJA,GAAY,EACZvO,EAAImI,YACJqG,KAEF,QAASC,KACPF,GAAavK,IACbuK,GAAY,EAGd,QAASC,KACHD,IACF7N,OAAOgO,sBAAsBF,GAC7BG,KAGJ,QAASA,KACP3O,EAAI4O,OAAOC,EAAQb,EAAGa,EAAQV,GAC9BnO,EAAI8O,OAAOC,EAASf,EAAGe,EAASZ,GAChCnO,EAAIgP,SACJH,EAAUE,EAIZ,QAASE,GACPC,EACAC,GAEA,GADAC,GACA7P,UAAAC,OAAA,OAAAC,KAAAF,UAAA,GAAAA,UAAA,GADcR,CAEdA,GAAOG,iBACLgQ,EACA,SAAStQ,GACPA,EAAEC,gBADQ,IAAAmI,GAEiBpI,EAAEyQ,QAAQ,OAA/BpB,EAFIjH,EAEJiH,QAASG,EAFLpH,EAEKoH,QACXL,EAAa,GAAIuB,YAAWH,GAC9BlB,UACAG,WAEFgB,GAAYG,cAAcxB,KAE5B,GArHoE,GAAxClK,GAAwCnF,EAAxCmF,YAAaG,EAA2BtF,EAA3BsF,UAAW/E,EAAgBP,EAAhBO,aAEpD0O,SAAOD,SAAME,QASjBH,KAEA/M,OAAOxB,iBAAiB,SAAUuO,EAElC,IAAIzN,GAAMjB,EAAOkB,WAAW,KAG5BD,GAAIwP,QAAU,OAId,IAAIT,IACAf,EAAG,EACHG,EAAG,GAELU,EAAUE,CAEZhQ,GAAOG,iBACL,YACA,SAASN,GACP,GAAe,GAAXA,EAAE8K,MAIJ,YADA,EAAAlF,EAAA3E,qBAAoBd,EAAQE,EAG9B8P,GAAWF,EAAUf,EAAYlP,GACjC0P,IACAzK,MAEF,GAIF5C,SAAS/B,iBAAiB,OAAQ,SAAAqK,GAChCA,EAAG1K,kBACH,EAAA2F,EAAA3E,qBAAoBd,EAAQE,GAC5BsK,EAAGuD,cAAc2C,QACf,YACA,aAAe1Q,EAAOmJ,YAAc,SAIxCjH,SAAS/B,iBAAiB,UAAWuP,GAAa,GAElD1P,EAAOG,iBACL,YACA,SAASN,GACPmQ,EAAWjB,EAAYlP,KAEzB,EAaF,IAAI2P,IAAY,CAkDhB,OAJAU,GAAkB,aAAc,aAChCA,EAAkB,WAAY,UAAWhO,UACzCgO,EAAkB,YAAa,cAG7BjN,eADK,WAEHhC,EAAIG,yBAA2B,mBAEjC8B,cAJK,SAISF,GACZ/B,EAAIG,yBAA2B,cAC/BH,EAAI0P,YAAc3N,GAEpBoC,cARK,SAQSI,GACZqJ,EAAiBrJ,EACjBvE,EAAI6N,UAAYtJ,EAASoJ,IAxI/B,IAAAnJ,GAAA3H,EAAA,IVq3BM,SAAUI,EAAQD,EAASH,GAEjC,YAGAc,QAAOC,eAAeZ,EAAS,cAC7ByE,OAAO,IAGTzE,EAAQ4E,QW73BO,SAAS+N,EAATjR,GAEb,QAASkR,GAAmBrL,GAC1BoL,EAAOlO,MAAQ8C,EACfuE,aAAaC,QAAQ,UAAWxE,GAChCF,EAASE,GALiC,GAAZF,GAAY3F,EAAZ2F,QAOhCsL,GAAOzQ,iBAAiB,QAAS,SAAAN,GAAA,MAAKgR,GAAmBhR,EAAEgO,OAAOnL,SAClEmO,EAAmBC,SAAS/G,aAAaO,QAAQ,aAAeyG,GATlE,IAAMA,GAAc,IXi5Bd,SAAU7S,EAAQD,EAASH,GAEjC,YY54BA,SAASkT,GAAYC,GAA2B,GAAhBC,GAAgB1Q,UAAAC,OAAA,OAAAC,KAAAF,UAAA,GAAAA,UAAA,GAAJ,GACtC2Q,EAAYF,EAAUG,OAAO,SAAA7S,GAAA,MAAKA,IAAK2S,GAC3C,OAAOC,GAAU1N,KAAK4N,MAAM5N,KAAK6N,SAAWH,EAAU1Q,SZ64BxD7B,OAAOC,eAAeZ,EAAS,cAC7ByE,OAAO,IAGTzE,EAAQ4E,QY94BO,SAAS7C,EAATL,GAGb,QAAS4R,KACHpK,IACFnH,EAAOsB,MAAQK,OAAOgC,WACtB3D,EAAOuB,OAASI,OAAOiC,aAEzB4N,EAAIxR,EAAOsB,MACXmQ,EAAIzR,EAAOuB,OACXN,EAAMjB,EAAOkB,WAAW,MACxBD,EAAIsI,UAAYnC,EAChBnG,EAAIwI,SAAS,EAAG,EAAG+H,EAAGC,GACtBxQ,EAAIwP,QAAU,QACdiB,IAIF,QAASA,KACPC,GAGE1C,EAAGuC,EAAI,EACPpC,EAAGqC,EAAI,GAETG,GACE3C,EAAmB,GAAhBxL,KAAK6N,SAAgB,EACxBlC,EAAmB,GAAhB3L,KAAK6N,SAAgB,GAE1BO,GACE5C,EAAmB,GAAhBxL,KAAK6N,SAAgB,EACxBlC,EAAmB,GAAhB3L,KAAK6N,SAAgB,GAG1BrQ,EAAI0P,YAAcK,EAAYc,EAAY1K,GAC1CnG,EAAI6N,UAAY,GAAqB,GAAhBrL,KAAK6N,SAC1BrQ,EAAImI,YACJnI,EAAI4O,OAAO8B,EAAS1C,EAAG0C,EAASvC,GAMlC,QAAS2C,KACPF,GACE5C,EAAmB,EAAhBxL,KAAK6N,SAAe,EACvBlC,EAAmB,EAAhB3L,KAAK6N,SAAe,GAKzBU,EAA4BxQ,WAC1BuQ,EACA,IAAsB,IAAhBtO,KAAK6N,UAIf,QAAS1B,KACP3O,EAAI4O,OAAO8B,EAAS1C,EAAG0C,EAASvC,GAChCwC,EAAM3C,GAAK,IACX2C,EAAMxC,GAAK,IAEXwC,EAAM3C,GAAK4C,EAAa5C,EACxB2C,EAAMxC,GAAKyC,EAAazC,EACxBuC,EAAS1C,GAAK2C,EAAM3C,EACpB0C,EAASvC,GAAKwC,EAAMxC,EACpBnO,EAAI8O,OAAO4B,EAAS1C,EAAG0C,EAASvC,GAChCnO,EAAIgP,UAEF0B,EAAS1C,GAAK,IACd0C,EAAS1C,EAAIuC,EAAI,IACjBG,EAASvC,GAAK,IACduC,EAASvC,EAAIqC,EAAI,KAEjBC,IAIJ,QAASjC,KACHD,IACF7N,OAAOgO,sBAAsBF,GAC7BG,KAMJ,QAASzM,KACPqM,GAAY,EACZyC,aAAaD,GACbrQ,OAAOkJ,oBAAoB,SAAU0G,GA1FM,GAAbpK,GAAaxH,EAAbwH,UAC5BlG,SAAKuQ,SAAGC,SACRrK,EAAU,UAeVuK,SAAUC,SAAOC,SAA6BG,QAuBlDT,KACA5P,OAAOxB,iBAAiB,SAAUoR,GAelCQ,GAqBA,IAAIvC,IAAY,CAgBhB,OARAC,MASEtM,WACAiE,WA3GJ,IAAM0K,GAAa,kIAAkIjG,MACnJ,MZ2gCI,SAAU3N,EAAQD,EAASH,GAEjC,Ya9gCO,SAAS+I,KACd,GAAIjF,UAAUsQ,UAAU7E,MAAM,YAAa,CACzC,GAAI8E,GAAYjQ,SAASC,cAAc,SACvCgQ,GAAUrF,IAAM,0DAEhB5K,SAASE,KAAKC,YAAY8P,Ib4gC9BvT,OAAOC,eAAeZ,EAAS,cAC7ByE,OAAO,IAETzE,EaphCgB4I,wBAQhBlF,OAAOyQ,cAAgB,SAAS3F,GAC1BA,EAAO4F,YACTnQ,SAASE,KAAK8B,UAAUc,IAAI,wBAC5B9C,SAASE,KAAKqG,UAAd,mNb2hCE,SAAUvK,EAAQD,EAASH,GAEjC,YcviCO,SAASkJ,KACdsL,IACAC,IAGK,QAAStL,KACdqL,IACA9Q,WAAW+Q,GAGN,QAASA,KACdC,SAAStO,UAAUoO,EAAkB,SAAW,OAAO,Ud+hCzD1T,OAAOC,eAAeZ,EAAS,cAC7ByE,OAAO,IAETzE,Ec7iCgB+I,Yd8iChB/I,EcziCgBgJ,Ud0iChBhJ,EcriCgBsU,YAXhB,IAAID,GAAkB,CActBpQ,UAAS/B,iBAAiB,mBAAoBoS,IdqjCxC,SAAUrU,EAAQD,EAASH,GAEjC,YepkCO,SAAS6H,GAAThG,GAAiE,GAA1CK,GAA0CL,EAA1CK,OAAQE,EAAkCP,EAAlCO,aAAcD,EAAoBN,EAApBM,gBAClD0B,QAAOxB,iBAAiB,UAAW,SAAAsS,IAC7BA,EAAMC,SAAWD,EAAME,UAC8B,MAAnDlI,OAAOC,aAAa+H,EAAM9H,OAAOhC,gBACnC8J,EAAM3S,kBACN,EAAA2F,EAAA1F,iBAAgBC,EAAQC,EAAkBC,MfkkClDtB,OAAOC,eAAeZ,EAAS,cAC7ByE,OAAO,IAETzE,Ee1kCgB0H,aADhB,IAAAF,GAAA3H,EAAA,IfgmCM,SAAUI,EAAQD,GgB9lCxB,QAAA2U,KACA,uBAAAhR,aAGAD,OAAAkR,OAAA,kBAAA3Q,UAAA4Q,gBAAAxP,SACA,WAAA3B,OAAAoR,SAAAC,UAAA,cAAArR,OAAAoR,SAAAE,UAAA,IAAAtR,OAAAoR,SAAAE,SAAAC,QAAA,SAGA,QAAAtM,GAAAyH,GAIA,GAHAA,UAGAuE,IACA,CAAAhR,UAAAuR,cACAC,SACA,cAWA,IAAAzR,OAAA0R,iBAAA,CACA,GAGAC,GAAA,WACA,GACAC,GAAArR,SAAAC,cAAA,SAIAoR,GAAAzG,IALA0G,0BAMAD,EAAAjQ,MAAAC,QAAA,OAEAkQ,EAAAF,EACArR,SAAAE,KAAAC,YAAAkR,GASA,aANA,aAAArR,SAAAwR,WACAlS,WAAA8R,GAEA3R,OAAAxB,iBAAA,OAAAmT,KAQA,QAAAK,GAAA7L,EAAA8L,IAMA,QAAAC,KAWA,GATAjB,KACAhR,UAAAuR,cAAAW,kBAAAC,KAAA,SAAAC,GACA,GAAAA,EACA,MAAAA,GAAAH,WAMAJ,EACA,IACAA,EAAAQ,cAAAZ,iBAAAQ,SACO,MAAAhU,KA5EP,GAAA4T,EAmFAxV,GAAA2I,UACA3I,EAAA0V,cACA1V,EAAA4V","file":"bundle.db4a3dd38e813528b682.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.makeDownloadLink = makeDownloadLink;\nexports.triggerDownload = triggerDownload;\nexports.mergeCanvasAndImage = mergeCanvasAndImage;\nfunction makeDownloadLink(link, _ref) {\n var OrginalImage = _ref.OrginalImage,\n canvas = _ref.canvas,\n originalFileName = _ref.originalFileName;\n\n // Download button\n function downloadImage(e) {\n e.preventDefault();\n triggerDownload(canvas, originalFileName, OrginalImage);\n }\n link.addEventListener(\"click\", downloadImage);\n}\n\nfunction nope(e) {\n console.log(e);\n}\nvar downloadCounter = 0;\nfunction triggerDownload(canvas, originalFileName, OrginalImage) {\n var failed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : nope;\n var suceeded = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : nope;\n\n var filename = originalFileName + \"-minimage-\" + downloadCounter + \".png\";\n mergeCanvasAndImage(canvas, OrginalImage, failed, suceeded);\n downloadCanvas(canvas, filename, failed, suceeded);\n\n downloadCounter++;\n}\n\nfunction mergeCanvasAndImage(canvas, img, failed, suceeded) {\n try {\n // Pastes the image as a canvas background\n var ctx = canvas.getContext(\"2d\");\n var oldComposite = ctx.globalCompositeOperation;\n ctx.globalCompositeOperation = \"destination-over\";\n\n // Draw the orignal image\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n ctx.globalCompositeOperation = oldComposite;\n suceeded && setTimeout(suceeded);\n return canvas;\n } catch (e) {\n failed && failed(e);\n }\n}\n\nfunction downloadCanvas(canvas, filename, failed, suceeded) {\n try {\n canvas.toBlob(function (blob) {\n try {\n if (window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveBlob(blob, filename);\n suceeded && setTimeout(suceeded);\n } else {\n var url = window.URL.createObjectURL(blob);\n var link = document.createElement(\"a\");\n document.body.appendChild(link);\n link.setAttribute(\"href\", url);\n link.setAttribute(\"download\", filename);\n link.click();\n suceeded && setTimeout(suceeded);\n setTimeout(function () {\n window.URL.revokeObjectURL(url);\n document.body.removeChild(link);\n }, 3000);\n }\n } catch (e) {\n failed && failed(e);\n }\n });\n } catch (e) {\n failed && failed(e);\n }\n}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(2);\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(3);\n\nvar _colorPicker = __webpack_require__(4);\n\nvar _colorPicker2 = _interopRequireDefault(_colorPicker);\n\nvar _getAnImage = __webpack_require__(8);\n\nvar _getAnImage2 = _interopRequireDefault(_getAnImage);\n\nvar _toggleAbleBackground = __webpack_require__(9);\n\nvar _toggleAbleBackground2 = _interopRequireDefault(_toggleAbleBackground);\n\nvar _editableCanvas = __webpack_require__(10);\n\nvar _editableCanvas2 = _interopRequireDefault(_editableCanvas);\n\nvar _canvasMergerAndDonwloaderLink = __webpack_require__(0);\n\nvar _pencilSizeSlider = __webpack_require__(11);\n\nvar _pencilSizeSlider2 = _interopRequireDefault(_pencilSizeSlider);\n\nvar _welcomeAnim2 = __webpack_require__(12);\n\nvar _welcomeAnim3 = _interopRequireDefault(_welcomeAnim2);\n\nvar _checkRunWithinWebview = __webpack_require__(13);\n\nvar _spinners = __webpack_require__(14);\n\nvar _detectCtrlS = __webpack_require__(15);\n\nvar _runtime = __webpack_require__(16);\n\nvar OfflinePluginRuntime = _interopRequireWildcard(_runtime);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*\n\nSee the app in action here : https://minimage.tk\n\n*/\nvar byId = document.getElementById.bind(document);\n\nOfflinePluginRuntime.install();\n\n(0, _checkRunWithinWebview.checkRunWithinWebview)();\nvar originalFileName = void 0,\n OrginalImage = void 0;\n(0, _getAnImage2.default)({\n fileinput: byId(\"fileinput\"),\n onImageCreated: function onImageCreated(img, filename) {\n originalFileName = filename;\n letUserDrawAndDownload(img);\n },\n startTask: _spinners.startTask,\n endTask: _spinners.endTask\n});\n\nvar _welcomeAnim = (0, _welcomeAnim3.default)(byId(\"welcome\"), { fitWindow: true }),\n stopAnim = _welcomeAnim.stopAnim,\n bgColor = _welcomeAnim.bgColor;\n\nbyId(\"fileInputWrapper\").style.color = bgColor;\n\n// Lets the user draw on the loaded image\nfunction letUserDrawAndDownload(img) {\n OrginalImage = img;\n stopAnim();\n var canvas = byId(\"drawzone\"),\n drawzoneWrapper = byId(\"drawzoneWrapper\");\n\n // Switch to drawing mode\n byId(\"inputForAFile\").style.display = \"none\";\n byId(\"drawAndDownload\").style.display = \"\";\n\n console.log(img.width, img.height);\n var maxRes = Math.max(window.innerWidth, window.innerHeight) * 2;\n // Fits the canvas to screen\n var imgScale = Math.max(img.width / maxRes, img.height / maxRes, 1);\n img.width = canvas.width = img.width / imgScale;\n img.height = canvas.height = img.height / imgScale;\n drawzoneWrapper.style.maxWidth = img.width;\n drawzoneWrapper.style.maxHeight = img.height;\n\n // Needs to happen AFTER size measurements\n drawzoneWrapper.appendChild(img);\n\n var ctx = canvas.getContext(\"2d\");\n var hasDoneFirstDraw = false;\n var barClass = byId(\"topbar\").classList;\n\n var background = byId(\"background\");\n\n var _setupColorPicker = (0, _colorPicker2.default)(byId(\"pensizePreview\"), {\n canvasForCursor: canvas,\n onColorChange: setColor,\n elementToContrastWith: background\n }),\n setColorDotSize = _setupColorPicker.setColorDotSize,\n refreshColorPreviewBorder = _setupColorPicker.refreshColorPreviewBorder,\n clearColorPicker = _setupColorPicker.clearColorPicker;\n\n var _setupEditableCanvas = (0, _editableCanvas2.default)(canvas, {\n onMouseDown: function onMouseDown() {\n if (canvas.getClientRects()[0].height + 2 * 80 > window.innerHeight) {\n barClass.add(\"drawInProgress\");\n }\n },\n onMouseUp: function onMouseUp() {\n if (!hasDoneFirstDraw) {\n hasDoneFirstDraw = true;\n download.classList.add(\"usable\");\n }\n barClass.remove(\"drawInProgress\");\n },\n\n OrginalImage: OrginalImage\n }),\n drawWithColor = _setupEditableCanvas.drawWithColor,\n drawWithEraser = _setupEditableCanvas.drawWithEraser,\n setPencilSize = _setupEditableCanvas.setPencilSize;\n\n // Sets draw color at load and when user clicks color input\n\n\n function setColor(color) {\n if (color == \"eraser\") {\n drawWithEraser();\n } else {\n drawWithColor(color);\n }\n }\n // Tap the background to switch its color (usefull for transparent images)\n (0, _toggleAbleBackground2.default)(background, { onChange: refreshColorPreviewBorder });\n\n (0, _pencilSizeSlider2.default)(byId(\"pensize\"), {\n onChange: function onChange(pxSize) {\n setColorDotSize(pxSize);\n setPencilSize(pxSize);\n }\n });\n\n (0, _canvasMergerAndDonwloaderLink.makeDownloadLink)(byId(\"download\"), {\n OrginalImage: OrginalImage,\n originalFileName: originalFileName,\n canvas: canvas\n });\n\n (0, _detectCtrlS.detectCtrlS)({\n canvas: canvas,\n OrginalImage: OrginalImage,\n originalFileName: originalFileName\n });\n\n function clear() {\n clearColorPicker();\n }\n}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (pensizePreview, _ref) {\n var onColorChange = _ref.onColorChange,\n elementToContrastWith = _ref.elementToContrastWith,\n canvasForCursor = _ref.canvasForCursor;\n\n var pensizePreviewDot = pensizePreview.children[0];\n var pensizePreviewBorder = pensizePreview.children[1];\n\n function refreshColorPreviewBorder() {\n pensizePreviewBorder.style.background = borderColor(currentColor, elementToContrastWith.style.backgroundColor);\n }\n\n var currentColor = void 0;\n function openInitializedColorPicker() {\n openColorPicker(currentColor, onColorPicked);\n }\n pensizePreview.addEventListener(\"click\", openInitializedColorPicker);\n var previousColor = localStorage.getItem(\"previousColor\") || \"eraser\";\n\n function onColorPicked(color) {\n console.log(\"onColorPicked\", color);\n if (currentColor && color !== currentColor) {\n // For toggling between last two colors\n previousColor = currentColor;\n }\n\n localStorage.setItem(\"previousColor\", previousColor);\n\n currentColor = color;\n setCursor(canvasForCursor, currentSize, currentColor);\n if (color == \"eraser\") {\n pensizePreviewDot.style.background = \"\";\n pensizePreviewDot.classList.add(\"eraser\");\n } else {\n pensizePreviewDot.classList.remove(\"eraser\");\n pensizePreviewDot.style.background = color;\n refreshColorPreviewBorder();\n }\n localStorage.setItem(\"color\", color);\n onColorChange(color);\n }\n var currentSize = void 0;\n // Should be 10\n var baseSize = pensizePreviewDot.getBoundingClientRect().width;\n\n window.addEventListener(\"keydown\", function (ev) {\n if (String.fromCharCode(ev.which).toLowerCase() === \"x\") {\n console.log(\"x switching to \" + previousColor);\n onColorPicked(previousColor);\n }\n });\n\n function setColorDotSize(pxSize) {\n currentSize = pxSize;\n setCursor(canvasForCursor, currentSize, currentColor);\n pensizePreviewDot.style.transform = \"scale(\" + pxSize / baseSize + \")\";\n pensizePreviewBorder.style.transform = \"scale(\" + (pxSize / baseSize + 1 / baseSize) + \")\";\n }\n\n setTimeout(function () {\n return onColorPicked(localStorage.getItem(\"color\") || DEFAULTCOLOR);\n });\n\n return {\n clearColorPicker: function clearColorPicker() {\n pensizePreview.removeEventListener(\"click\", openInitializedColorPicker);\n },\n\n setColorDotSize: setColorDotSize,\n refreshColorPreviewBorder: refreshColorPreviewBorder\n };\n};\n\nvar _colorToRGB = __webpack_require__(5);\n\nvar _palette = __webpack_require__(6);\n\nvar _modal = __webpack_require__(7);\n\nvar DEFAULTCOLOR = \"#2b76ce\";\n\n\nfunction borderColor(foreground, background) {\n if (foreground == \"eraser\") return \"transparent\";\n var bgL = (0, _colorToRGB.luminance)(background);\n var fgL = (0, _colorToRGB.luminance)(foreground);\n if (bgL > 125 && fgL > 200) return \"black\";\n if (bgL < 125 && fgL < 25) return \"white\";\n return \"transparent\";\n}\n\nfunction textColor(background) {\n return (0, _colorToRGB.luminance)(background) > 255 / 2 ? \"rgba(0,0,0,0.8)\" : \"rgba(255,255,255,0.8)\";\n}\n\nfunction openColorPicker(currentColor, callback) {\n (0, _modal.createModal)(\"color-modal\", function (_ref2) {\n var modal = _ref2.modal,\n closeModal = _ref2.closeModal;\n\n function pickColor(color) {\n closeModal();\n callback(color);\n }\n\n _palette.paletteColors.forEach(function (color) {\n var button = document.createElement(\"button\");\n button.classList.add(\"colorbutton\");\n if (color === currentColor) {\n button.classList.add(\"active\");\n button.innerHTML = \"Selected\";\n button.style.color = textColor(color);\n }\n button.style.backgroundColor = color.toLowerCase();\n button.addEventListener(\"click\", function () {\n return pickColor(color);\n });\n modal.appendChild(button);\n });\n\n var eraser = document.createElement(\"button\");\n eraser.classList.add(\"eraser\");\n eraser.addEventListener(\"click\", function () {\n return pickColor(\"eraser\");\n });\n eraser.innerHTML = '' + (\"eraser\" === currentColor ? \"Eraser selected\" : \"Eraser\") + \"\";\n modal.appendChild(eraser);\n });\n}\n\nfunction setCursor(node, size, color) {\n var s = size < 4 ? 4 : size;\n var c = document.createElement(\"canvas\");\n c.width = c.height = s;\n var ctx = c.getContext(\"2d\");\n\n if (color == \"eraser\") drawEraser(ctx, s);else drawColorCircle(ctx, s, color);\n var cursor = c.toDataURL(\"image/png\");\n node.style.cursor = \"url(\" + cursor + \") \" + s / 2 + \" \" + s / 2 + \",auto\";\n}\n\nfunction drawColorCircle(ctx, s, color) {\n ctx.beginPath();\n ctx.arc(s / 2, s / 2, s / 2, 0, 2 * Math.PI, false);\n ctx.fillStyle = color;\n ctx.fill();\n}\n\nfunction drawEraser(ctx, s) {\n ctx.fillStyle = \"#da502d\";\n ctx.fillRect(0, 0, s * 2 / 3, s);\n ctx.fillStyle = \"#6584a5\";\n ctx.fillRect(s * 2 / 3 - 1, 0, s, s);\n ctx.globalCompositeOperation = \"destination-in\";\n drawColorCircle(ctx, s, \"white\");\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.colorToRGB = colorToRGB;\nexports.luminance = luminance;\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction colorToRGB(color) {\n var canvas = document.createElement(\"canvas\");\n canvas.width = canvas.height = 1;\n var ctx = canvas.getContext(\"2d\");\n ctx.clearRect(0, 0, 1, 1);\n ctx.fillStyle = color;\n ctx.fillRect(0, 0, 1, 1);\n return [].concat(_toConsumableArray(ctx.getImageData(0, 0, 1, 1).data)).slice(0, 3);\n}\n\nfunction luminance(color) {\n return colorToRGB(color).reduce(function (a, b) {\n return a + b;\n }, 0) / 3;\n}\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar paletteColors = exports.paletteColors = \"#000000,#FFFFFF,#F44336,#E91E63,#9C27B0,#673AB7,#3F51B5,#2196F3,#03A9F4,#00BCD4,#009688,#4CAF50,#8BC34A,#CDDC39,#FFEB3B,#FFC107,#FF9800,#FF5722,#795548,#9E9E9E,#607D8B\".split(\",\");\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createModal = createModal;\nvar modalZindex = 4;\nfunction createModal(className, callback) {\n var modal = document.createElement(\"div\");\n modal.classList.add(\"modal\");\n modal.classList.add(className);\n document.body.appendChild(modal);\n\n var backdrop = document.createElement(\"div\");\n backdrop.classList.add(\"modal-backdrop\");\n document.body.appendChild(backdrop);\n\n backdrop.style.zIndex = modalZindex;\n modal.style.zIndex = modalZindex + 1;\n backdrop.addEventListener(\"click\", closeModal);\n document.addEventListener(\"keyup\", closeOnEscape);\n function closeOnEscape(ev) {\n if (ev.which == 27 // escape key\n ) closeModal();\n }\n function closeModal() {\n modal.classList.add(\"closing\");\n backdrop.classList.add(\"closing\");\n setTimeout(function () {\n document.body.removeChild(modal);\n document.body.removeChild(backdrop);\n }, 300);\n document.removeEventListener(\"keyup\", closeOnEscape);\n }\n modalZindex += 2;\n return callback({ modal: modal, closeModal: closeModal });\n}\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (_ref) {\n var onImageCreated = _ref.onImageCreated,\n fileinput = _ref.fileinput,\n _ref$startTask = _ref.startTask,\n startTask = _ref$startTask === undefined ? function () {\n return null;\n } : _ref$startTask,\n _ref$endTask = _ref.endTask,\n endTask = _ref$endTask === undefined ? function () {\n return null;\n } : _ref$endTask;\n\n // Callbacks onImageCreated with img tag and filename\n var originalFileName = \"pasted-image\";\n var askingForImage = true;\n\n // Transforms the file input content to a real image\n function loadFile(fileToLoad) {\n startTask();\n var fileReader = new FileReader();\n fileReader.onload = function () {\n createImageWithFileContent(fileReader.result);\n endTask();\n };\n fileReader.onerror = endTask;\n fileReader.readAsDataURL(fileToLoad);\n }\n\n function createImageWithFileContent(result) {\n startTask();\n if (!askingForImage) return;\n var img = new Image();\n img.onload = function () {\n askingForImage = false;\n onImageCreated(img, originalFileName);\n endTask();\n };\n img.onerror = endTask;\n img.src = result;\n }\n\n // Setup of the welcome UI\n function askForImage() {\n fileinput && fileinput.addEventListener(\"change\", fileChanged);\n function fileChanged(changeEvent) {\n fileinput.removeEventListener(\"change\", fileChanged);\n originalFileName = fileinput.value.split(\"\\\\\").pop().split(\".\")[0] || \"image\";\n loadFile(changeEvent.target.files[0]);\n }\n }\n\n askForImage();\n\n window.addEventListener(\"paste\", function (ev) {\n handleDataTransferItems(ev.clipboardData.items);\n });\n\n document.body.addEventListener(\"dragover\", function (ev) {\n ev.preventDefault();\n ev.stopPropagation();\n });\n document.body.addEventListener(\"drop\", function (ev) {\n ev.preventDefault();\n ev.stopPropagation();\n handleDataTransferItems(ev.dataTransfer.items);\n });\n\n function handleDataTransferItems(items) {\n // Tries to paste an image\n var imageFile = Array.prototype.find.call(items, function (e) {\n return e.kind == \"file\" && e.type.match(\"image\");\n });\n originalFileName = \"pasted-image\";\n if (imageFile) {\n loadFile(imageFile.getAsFile());\n return;\n }\n // Tries to load a remote image given its adress\n var url = Array.prototype.find.call(items, function (e) {\n return e.kind == \"string\";\n });\n if (url) {\n url.getAsString(function (s) {\n return createImageWithFileContent(s);\n });\n }\n }\n};\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (background, _ref) {\n var onChange = _ref.onChange;\n\n function switchBackground() {\n currentMode++;\n localStorage.setItem(\"background\", currentMode);\n applyBackground();\n }\n var switchCount = 0;\n function applyBackground() {\n var options = [\"#DDD\", \"#333\"];\n var current = currentMode % options.length;\n background.style.backgroundColor = options[current];\n // let meta = document.getElementById(\"theme-color\");\n // meta && meta.setAttribute(\"content\", \"#fff\");\n onChange(current);\n\n var bclass = document.body.classList;\n options.forEach(function (color, index) {\n return bclass.remove(\"background_n_\" + index);\n });\n bclass.add(\"background_n_\" + current);\n // https://www.youtube.com/watch?v=Pr8ETbGz35Q\n if (switchCount < 8) {\n console.log(current == 0 ? \"jour !\" : \"nuit !\");\n switchCount++;\n } else {\n console.log(\"Monsieur Jacquouille, je vous en prie, à la longue, ça devient casse-pied !\");\n }\n }\n var currentMode = localStorage.getItem(\"background\") || 0;\n applyBackground();\n background.addEventListener(\"click\", switchBackground);\n};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (canvas, _ref) {\n var onMouseDown = _ref.onMouseDown,\n onMouseUp = _ref.onMouseUp,\n OrginalImage = _ref.OrginalImage;\n\n // We cache some zoom related data to avoid getting them all the time\n var scale = void 0,\n rect = void 0,\n lastUsedPXsize = void 0;\n\n function measureScale() {\n rect = canvas.getBoundingClientRect();\n scale = rect.width / canvas.width;\n if (lastUsedPXsize && ctx) {\n ctx.lineWidth = lastUsedPXsize / scale;\n }\n }\n measureScale();\n\n window.addEventListener(\"resize\", measureScale);\n\n var ctx = canvas.getContext(\"2d\");\n\n // To make the lines look slightly nicer\n ctx.lineCap = \"round\";\n\n // We cache the mouse position and previous mouse position.\n // Theay are defined by touch events, and used by the draw loop\n var mousePos = {\n x: 0,\n y: 0\n },\n lastPos = mousePos;\n\n canvas.addEventListener(\"mousedown\", function (e) {\n if (e.which == 3) {\n // We detected a right click on canvas, probably to save it.\n // We merge the content of the background image with the canvas\n (0, _canvasMergerAndDonwloaderLink.mergeCanvasAndImage)(canvas, OrginalImage);\n return;\n }\n mousePos = lastPos = getMousePos(e);\n startDrawLoop();\n onMouseDown();\n }, false);\n\n // Allow ctrl-c > pasting to word & co\n document.addEventListener(\"copy\", function (ev) {\n ev.preventDefault();\n (0, _canvasMergerAndDonwloaderLink.mergeCanvasAndImage)(canvas, OrginalImage);\n ev.clipboardData.setData(\"text/html\", '');\n });\n\n document.addEventListener(\"mouseup\", endDrawLoop, false);\n\n canvas.addEventListener(\"mousemove\", function (e) {\n mousePos = getMousePos(e);\n }, false);\n\n // Get the position of the mouse relative to the canvas\n function getMousePos(mouseEvent) {\n return {\n x: (mouseEvent.clientX - rect.left) / scale,\n y: (mouseEvent.clientY - rect.top) / scale\n };\n }\n\n // Drawing loop is separated from the events\n\n var isDrawing = false;\n\n function startDrawLoop() {\n if (isDrawing) return;\n isDrawing = true;\n ctx.beginPath();\n drawLoop();\n }\n function endDrawLoop() {\n isDrawing && onMouseUp();\n isDrawing = false;\n }\n\n function drawLoop() {\n if (isDrawing) {\n window.requestAnimationFrame(drawLoop);\n renderCanvas();\n }\n }\n function renderCanvas() {\n ctx.moveTo(lastPos.x, lastPos.y);\n ctx.lineTo(mousePos.x, mousePos.y);\n ctx.stroke();\n lastPos = mousePos;\n }\n\n // Proxy mobile events to their mouse counterpart\n function proxyTouchToMouse(touchEventName, mouseEventName) {\n var eventTarget = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : canvas;\n\n canvas.addEventListener(touchEventName, function (e) {\n e.preventDefault();\n\n var _ref2 = e.touches[0] || {},\n clientX = _ref2.clientX,\n clientY = _ref2.clientY;\n\n var mouseEvent = new MouseEvent(mouseEventName, {\n clientX: clientX,\n clientY: clientY\n });\n eventTarget.dispatchEvent(mouseEvent);\n }, false);\n }\n proxyTouchToMouse(\"touchstart\", \"mousedown\");\n proxyTouchToMouse(\"touchend\", \"mouseup\", document);\n proxyTouchToMouse(\"touchmove\", \"mousemove\");\n\n return {\n drawWithEraser: function drawWithEraser() {\n ctx.globalCompositeOperation = \"destination-out\";\n },\n drawWithColor: function drawWithColor(color) {\n ctx.globalCompositeOperation = \"source-over\";\n ctx.strokeStyle = color;\n },\n setPencilSize: function setPencilSize(pxSize) {\n lastUsedPXsize = pxSize;\n ctx.lineWidth = pxSize / scale;\n }\n };\n};\n\nvar _canvasMergerAndDonwloaderLink = __webpack_require__(0);\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (slider, _ref) {\n var onChange = _ref.onChange;\n\n // Sets draw size at load and style when the user interracts with the slider\n function onPencilSizeChange(pxSize) {\n slider.value = pxSize;\n localStorage.setItem(\"pensize\", pxSize);\n onChange(pxSize);\n }\n slider.addEventListener(\"input\", function (e) {\n return onPencilSizeChange(e.target.value);\n });\n onPencilSizeChange(parseInt(localStorage.getItem(\"pensize\")) || DEFAULTSIZE);\n};\n\nvar DEFAULTSIZE = 20;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (canvas, _ref) {\n var fitWindow = _ref.fitWindow;\n\n var ctx = void 0,\n w = void 0,\n h = void 0;\n var bgColor = \"#F44336\"; //randomColor(darkCoolColors);\n function reset() {\n if (fitWindow) {\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n }\n w = canvas.width;\n h = canvas.height;\n ctx = canvas.getContext(\"2d\");\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, w, h);\n ctx.lineCap = \"round\";\n randomizeInst();\n }\n\n var position = void 0,\n speed = void 0,\n acceleration = void 0,\n timeoutHandle = void 0,\n accelerationTimeoutHandle = void 0;\n function randomizeInst() {\n position = {\n // x: Math.random() * w,\n // y: Math.random() * h\n x: w / 2,\n y: h / 2\n };\n speed = {\n x: Math.random() * 10 - 5,\n y: Math.random() * 10 - 5\n };\n acceleration = {\n x: Math.random() * 10 - 5,\n y: Math.random() * 10 - 5\n };\n\n ctx.strokeStyle = randomColor(coolColors, bgColor);\n ctx.lineWidth = 20 + Math.random() * 40;\n ctx.beginPath();\n ctx.moveTo(position.x, position.y);\n }\n\n reset();\n window.addEventListener(\"resize\", reset);\n\n function randomAcceletation() {\n acceleration = {\n x: Math.random() * 2 - 1,\n y: Math.random() * 2 - 1\n };\n // speed.x*=0.2;\n // speed.y*=0.2;\n\n accelerationTimeoutHandle = setTimeout(randomAcceletation, 100 + Math.random() * 200);\n }\n randomAcceletation();\n function renderCanvas() {\n ctx.moveTo(position.x, position.y);\n speed.x *= 0.95;\n speed.y *= 0.95;\n\n speed.x += acceleration.x;\n speed.y += acceleration.y;\n position.x += speed.x;\n position.y += speed.y;\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n if (position.x < -50 || position.x > w + 50 || position.y < -50 || position.y > h + 50) randomizeInst();\n }\n\n var isDrawing = true;\n function drawLoop() {\n if (isDrawing) {\n window.requestAnimationFrame(drawLoop);\n renderCanvas();\n }\n }\n\n drawLoop();\n\n function stopAnim() {\n isDrawing = false;\n clearTimeout(accelerationTimeoutHandle);\n window.removeEventListener(\"resize\", reset);\n }\n\n return {\n stopAnim: stopAnim,\n bgColor: bgColor\n };\n};\n\nvar coolColors = \"#F44336,#E91E63,#9C27B0,#673AB7,#3F51B5,#2196F3,#03A9F4,#00BCD4,#009688,#4CAF50,#8BC34A,#CDDC39,#FFEB3B,#FFC107,#FF9800,#FF5722\".split(\",\");\n\n//import { luminance } from \"./colorToRGB.js\";\n// const darkCoolColors = coolColors.filter(c => luminance(c) < 150);\n\nfunction randomColor(colorPool) {\n var exception = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n\n var withoutEx = colorPool.filter(function (c) {\n return c != exception;\n });\n return withoutEx[Math.floor(Math.random() * withoutEx.length)];\n}\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.checkRunWithinWebview = checkRunWithinWebview;\nfunction checkRunWithinWebview() {\n if (navigator.userAgent.match(/Android/i)) {\n var JSONPcall = document.createElement(\"script\");\n JSONPcall.src = \"https://iswebview.herokuapp.com/?callback=JSONPcallback\";\n // JSONPcall.src = \"https://iswebview2repo-iswebview2.7e14.starter-us-west-2.openshiftapps.com/?callback=JSONPcallback\";\n document.body.appendChild(JSONPcall);\n }\n}\nwindow.JSONPcallback = function (result) {\n if (result.isWebView) {\n document.body.classList.add(\"runningWithinWebview\");\n document.body.innerHTML = \"\\n Please open minimage.tk with chrome,\\n it cannot work within another app.\\n\\n There may be an option in the menu above the page,\\n something like \\\"Open in Chrome\\\".\\n\\n \";\n }\n};\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.startTask = startTask;\nexports.endTask = endTask;\nexports.updateLook = updateLook;\nvar tasksInProgress = 0;\nfunction startTask() {\n tasksInProgress++;\n updateLook();\n}\n\nfunction endTask() {\n tasksInProgress--;\n setTimeout(updateLook);\n}\n\nfunction updateLook() {\n spinners.classList[tasksInProgress ? \"remove\" : \"add\"](\"hidden\");\n}\ndocument.addEventListener(\"DOMContentLoaded\", updateLook);\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.detectCtrlS = detectCtrlS;\n\nvar _canvasMergerAndDonwloaderLink = __webpack_require__(0);\n\nfunction detectCtrlS(_ref) {\n var canvas = _ref.canvas,\n OrginalImage = _ref.OrginalImage,\n originalFileName = _ref.originalFileName;\n\n window.addEventListener(\"keydown\", function (event) {\n if (event.ctrlKey || event.metaKey) {\n if (String.fromCharCode(event.which).toLowerCase() === \"s\") {\n event.preventDefault();\n (0, _canvasMergerAndDonwloaderLink.triggerDownload)(canvas, originalFileName, OrginalImage);\n }\n }\n });\n}\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\nvar appCacheIframe;\n\nfunction hasSW() {\n return 'serviceWorker' in navigator &&\n // This is how I block Chrome 40 and detect Chrome 41, because first has\n // bugs with history.pustState and/or hashchange\n (window.fetch || 'imageRendering' in document.documentElement.style) &&\n (window.location.protocol === 'https:' || window.location.hostname === 'localhost' || window.location.hostname.indexOf('127.') === 0)\n}\n\nfunction install(options) {\n options || (options = {});\n\n \n if (hasSW()) {\n var registration = navigator.serviceWorker\n .register(\n \"/sw.js\"\n \n );\n\n \n\n return;\n }\n \n\n \n if (window.applicationCache) {\n var directory = \"/appcache/\";\n var name = \"manifest\";\n\n var doLoad = function() {\n var page = directory + name + '.html';\n var iframe = document.createElement('iframe');\n\n \n\n iframe.src = page;\n iframe.style.display = 'none';\n\n appCacheIframe = iframe;\n document.body.appendChild(iframe);\n };\n\n if (document.readyState === 'complete') {\n setTimeout(doLoad);\n } else {\n window.addEventListener('load', doLoad);\n }\n\n return;\n }\n \n}\n\nfunction applyUpdate(callback, errback) {\n \n\n \n}\n\nfunction update() {\n \n if (hasSW()) {\n navigator.serviceWorker.getRegistration().then(function(registration) {\n if (!registration) return;\n return registration.update();\n });\n }\n \n\n \n if (appCacheIframe) {\n try {\n appCacheIframe.contentWindow.applicationCache.update();\n } catch (e) {}\n }\n \n}\n\n\n\nexports.install = install;\nexports.applyUpdate = applyUpdate;\nexports.update = update;\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// bundle.db4a3dd38e813528b682.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap db4a3dd38e813528b682"," \nexport function makeDownloadLink(\n link,\n { OrginalImage, canvas, originalFileName }\n) {\n // Download button\n function downloadImage(e) {\n e.preventDefault(); \n triggerDownload(canvas, originalFileName, OrginalImage);\n }\n link.addEventListener(\"click\", downloadImage);\n}\n\nfunction nope(e) {\n console.log(e);\n}\nvar downloadCounter = 0;\nexport function triggerDownload(\n canvas,\n originalFileName,\n OrginalImage,\n failed = nope,\n suceeded = nope\n) {\n let filename = originalFileName + \"-minimage-\" + downloadCounter + \".png\";\n mergeCanvasAndImage(canvas, OrginalImage, failed, suceeded);\n downloadCanvas(canvas, filename, failed, suceeded);\n\n downloadCounter++;\n}\n\nexport function mergeCanvasAndImage(canvas, img, failed, suceeded) {\n try {\n // Pastes the image as a canvas background\n var ctx = canvas.getContext(\"2d\");\n let oldComposite = ctx.globalCompositeOperation;\n ctx.globalCompositeOperation = \"destination-over\";\n\n // Draw the orignal image\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n ctx.globalCompositeOperation = oldComposite;\n suceeded && setTimeout(suceeded);\n return canvas;\n } catch (e) {\n failed && failed(e);\n }\n}\n\nfunction downloadCanvas(canvas, filename, failed, suceeded) {\n try {\n canvas.toBlob(function(blob) {\n try {\n if (window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveBlob(blob, filename);\n suceeded && setTimeout(suceeded);\n } else {\n let url = window.URL.createObjectURL(blob);\n let link = document.createElement(\"a\");\n document.body.appendChild(link);\n link.setAttribute(\"href\", url);\n link.setAttribute(\"download\", filename);\n link.click();\n suceeded && setTimeout(suceeded);\n setTimeout(() => {\n window.URL.revokeObjectURL(url);\n document.body.removeChild(link);\n }, 3000);\n }\n } catch (e) {\n failed && failed(e);\n }\n });\n } catch (e) {\n failed && failed(e);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/canvasMergerAndDonwloaderLink.js","/*\n\nSee the app in action here : https://minimage.tk\n\n*/\nimport \"./styles.less\";\nimport setupColorPicker from \"./colorPicker.js\";\nimport askForIMG from \"./getAnImage.js\";\nimport toggleAbleBackground from \"./toggleAbleBackground.js\";\nimport setupEditableCanvas from \"./editableCanvas.js\";\nimport { makeDownloadLink } from \"./canvasMergerAndDonwloaderLink.js\";\nimport pencilSizeSlider from \"./pencilSizeSlider.js\";\nimport welcomeAnim from \"./welcomeAnim.js\";\nimport { checkRunWithinWebview } from \"./checkRunWithinWebview.js\";\nimport { startTask, endTask } from \"./spinners.js\";\nconst byId = document.getElementById.bind(document);\nimport { detectCtrlS } from \"./detectCtrlS.js\";\n\nimport * as OfflinePluginRuntime from \"offline-plugin/runtime\";\nOfflinePluginRuntime.install();\n\ncheckRunWithinWebview();\nlet originalFileName, OrginalImage;\naskForIMG({\n fileinput: byId(\"fileinput\"),\n onImageCreated: (img, filename) => {\n originalFileName = filename;\n letUserDrawAndDownload(img);\n },\n startTask,\n endTask\n});\n\nlet { stopAnim, bgColor } = welcomeAnim(byId(\"welcome\"), { fitWindow: true });\nbyId(\"fileInputWrapper\").style.color = bgColor;\n\n// Lets the user draw on the loaded image\nfunction letUserDrawAndDownload(img) {\n OrginalImage = img;\n stopAnim();\n const canvas = byId(\"drawzone\"),\n drawzoneWrapper = byId(\"drawzoneWrapper\");\n\n // Switch to drawing mode\n byId(\"inputForAFile\").style.display = \"none\";\n byId(\"drawAndDownload\").style.display = \"\";\n\n console.log(img.width, img.height);\n let maxRes = Math.max(window.innerWidth, window.innerHeight) * 2;\n // Fits the canvas to screen\n let imgScale = Math.max(img.width / maxRes, img.height / maxRes, 1);\n img.width = canvas.width = img.width / imgScale;\n img.height = canvas.height = img.height / imgScale;\n drawzoneWrapper.style.maxWidth = img.width;\n drawzoneWrapper.style.maxHeight = img.height;\n\n // Needs to happen AFTER size measurements\n drawzoneWrapper.appendChild(img);\n\n let ctx = canvas.getContext(\"2d\");\n let hasDoneFirstDraw = false;\n let barClass = byId(\"topbar\").classList;\n\n let background = byId(\"background\");\n\n const {\n setColorDotSize,\n refreshColorPreviewBorder,\n clearColorPicker\n } = setupColorPicker(byId(\"pensizePreview\"), {\n canvasForCursor: canvas,\n onColorChange: setColor,\n elementToContrastWith: background\n });\n\n let {\n drawWithColor,\n drawWithEraser,\n setPencilSize\n } = setupEditableCanvas(canvas, {\n onMouseDown() {\n if (canvas.getClientRects()[0].height + 2 * 80 > window.innerHeight) {\n barClass.add(\"drawInProgress\");\n }\n },\n onMouseUp() {\n if (!hasDoneFirstDraw) {\n hasDoneFirstDraw = true;\n download.classList.add(\"usable\");\n }\n barClass.remove(\"drawInProgress\");\n },\n OrginalImage\n });\n\n // Sets draw color at load and when user clicks color input\n function setColor(color) {\n if (color == \"eraser\") {\n drawWithEraser();\n } else {\n drawWithColor(color);\n }\n }\n // Tap the background to switch its color (usefull for transparent images)\n toggleAbleBackground(background, { onChange: refreshColorPreviewBorder });\n\n pencilSizeSlider(byId(\"pensize\"), {\n onChange(pxSize) {\n setColorDotSize(pxSize);\n setPencilSize(pxSize);\n }\n });\n\n makeDownloadLink(byId(\"download\"), {\n OrginalImage,\n originalFileName,\n canvas\n });\n\n detectCtrlS({\n canvas,\n OrginalImage,\n originalFileName\n });\n\n function clear() {\n clearColorPicker();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app.js","const DEFAULTCOLOR = \"#2b76ce\";\nimport { luminance } from \"./colorToRGB.js\";\nimport { paletteColors } from \"./palette.js\";\nimport { createModal } from \"./modal.js\";\nexport default function(\n pensizePreview,\n { onColorChange, elementToContrastWith, canvasForCursor }\n) {\n const pensizePreviewDot = pensizePreview.children[0];\n const pensizePreviewBorder = pensizePreview.children[1];\n\n function refreshColorPreviewBorder() {\n pensizePreviewBorder.style.background = borderColor(\n currentColor,\n elementToContrastWith.style.backgroundColor\n );\n }\n\n let currentColor;\n function openInitializedColorPicker() {\n openColorPicker(currentColor, onColorPicked);\n }\n pensizePreview.addEventListener(\"click\", openInitializedColorPicker);\n let previousColor = localStorage.getItem(\"previousColor\") || \"eraser\";\n\n function onColorPicked(color) {\n console.log(\"onColorPicked\", color);\n if (currentColor && color !== currentColor) {\n // For toggling between last two colors\n previousColor = currentColor;\n }\n\n localStorage.setItem(\"previousColor\", previousColor);\n\n currentColor = color;\n setCursor(canvasForCursor, currentSize, currentColor);\n if (color == \"eraser\") {\n pensizePreviewDot.style.background = \"\";\n pensizePreviewDot.classList.add(\"eraser\");\n } else {\n pensizePreviewDot.classList.remove(\"eraser\");\n pensizePreviewDot.style.background = color;\n refreshColorPreviewBorder();\n }\n localStorage.setItem(\"color\", color);\n onColorChange(color);\n }\n let currentSize;\n // Should be 10\n const baseSize = pensizePreviewDot.getBoundingClientRect().width;\n\n window.addEventListener(\"keydown\", ev => {\n if (String.fromCharCode(ev.which).toLowerCase() === \"x\") {\n console.log(\"x switching to \" + previousColor);\n onColorPicked(previousColor);\n }\n });\n\n function setColorDotSize(pxSize) {\n currentSize = pxSize;\n setCursor(canvasForCursor, currentSize, currentColor);\n pensizePreviewDot.style.transform = \"scale(\" + pxSize / baseSize + \")\";\n pensizePreviewBorder.style.transform =\n \"scale(\" + (pxSize / baseSize + 1 / baseSize) + \")\";\n }\n\n setTimeout(() =>\n onColorPicked(localStorage.getItem(\"color\") || DEFAULTCOLOR)\n );\n\n return {\n clearColorPicker() {\n pensizePreview.removeEventListener(\"click\", openInitializedColorPicker);\n },\n setColorDotSize,\n refreshColorPreviewBorder\n };\n}\n\nfunction borderColor(foreground, background) {\n if (foreground == \"eraser\") return \"transparent\";\n let bgL = luminance(background);\n let fgL = luminance(foreground);\n if (bgL > 125 && fgL > 200) return \"black\";\n if (bgL < 125 && fgL < 25) return \"white\";\n return \"transparent\";\n}\n\nfunction textColor(background) {\n return luminance(background) > 255 / 2\n ? \"rgba(0,0,0,0.8)\"\n : \"rgba(255,255,255,0.8)\";\n}\n\nfunction openColorPicker(currentColor, callback) {\n createModal(\"color-modal\", ({ modal, closeModal }) => {\n function pickColor(color) {\n closeModal();\n callback(color);\n }\n\n paletteColors.forEach(color => {\n let button = document.createElement(\"button\");\n button.classList.add(\"colorbutton\");\n if (color === currentColor) {\n button.classList.add(\"active\");\n button.innerHTML = \"Selected\";\n button.style.color = textColor(color);\n }\n button.style.backgroundColor = color.toLowerCase();\n button.addEventListener(\"click\", () => pickColor(color));\n modal.appendChild(button);\n });\n\n let eraser = document.createElement(\"button\");\n eraser.classList.add(\"eraser\");\n eraser.addEventListener(\"click\", () => pickColor(\"eraser\"));\n eraser.innerHTML =\n '' +\n (\"eraser\" === currentColor ? \"Eraser selected\" : \"Eraser\") +\n \"\";\n modal.appendChild(eraser);\n });\n}\n\nfunction setCursor(node, size, color) {\n let s = size < 4 ? 4 : size;\n let c = document.createElement(\"canvas\");\n c.width = c.height = s;\n let ctx = c.getContext(\"2d\");\n\n if (color == \"eraser\") drawEraser(ctx, s);\n else drawColorCircle(ctx, s, color);\n let cursor = c.toDataURL(\"image/png\");\n node.style.cursor = `url(${cursor}) ${s / 2} ${s / 2},auto`;\n}\n\nfunction drawColorCircle(ctx, s, color) {\n ctx.beginPath();\n ctx.arc(s / 2, s / 2, s / 2, 0, 2 * Math.PI, false);\n ctx.fillStyle = color;\n ctx.fill();\n}\n\nfunction drawEraser(ctx, s) {\n ctx.fillStyle = \"#da502d\";\n ctx.fillRect(0, 0, s * 2 / 3, s);\n ctx.fillStyle = \"#6584a5\";\n ctx.fillRect(s * 2 / 3 - 1, 0, s, s);\n ctx.globalCompositeOperation = \"destination-in\";\n drawColorCircle(ctx, s, \"white\");\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/colorPicker.js","export function colorToRGB(color) {\n var canvas = document.createElement(\"canvas\");\n canvas.width = canvas.height = 1;\n var ctx = canvas.getContext(\"2d\");\n ctx.clearRect(0, 0, 1, 1);\n ctx.fillStyle = color;\n ctx.fillRect(0, 0, 1, 1);\n return [...ctx.getImageData(0, 0, 1, 1).data].slice(0, 3);\n}\n\nexport function luminance(color) {\n return colorToRGB(color).reduce((a, b) => a + b, 0) / 3;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/colorToRGB.js","export const paletteColors = \"#000000,#FFFFFF,#F44336,#E91E63,#9C27B0,#673AB7,#3F51B5,#2196F3,#03A9F4,#00BCD4,#009688,#4CAF50,#8BC34A,#CDDC39,#FFEB3B,#FFC107,#FF9800,#FF5722,#795548,#9E9E9E,#607D8B\".split(\n \",\"\n);\n\n\n\n// WEBPACK FOOTER //\n// ./src/palette.js","let modalZindex = 4;\nexport function createModal(className, callback) {\n let modal = document.createElement(\"div\");\n modal.classList.add(\"modal\");\n modal.classList.add(className);\n document.body.appendChild(modal);\n\n let backdrop = document.createElement(\"div\");\n backdrop.classList.add(\"modal-backdrop\");\n document.body.appendChild(backdrop);\n\n backdrop.style.zIndex = modalZindex;\n modal.style.zIndex = modalZindex + 1;\n backdrop.addEventListener(\"click\", closeModal);\n document.addEventListener(\"keyup\", closeOnEscape);\n function closeOnEscape(ev) {\n if (\n ev.which == 27 // escape key\n )\n closeModal();\n }\n function closeModal() {\n modal.classList.add(\"closing\");\n backdrop.classList.add(\"closing\");\n setTimeout(() => {\n document.body.removeChild(modal);\n document.body.removeChild(backdrop);\n }, 300);\n document.removeEventListener(\"keyup\", closeOnEscape);\n }\n modalZindex += 2;\n return callback({ modal, closeModal });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/modal.js","export default function({\n onImageCreated,\n fileinput,\n startTask = () => null,\n endTask = () => null\n}) {\n // Callbacks onImageCreated with img tag and filename\n let originalFileName = \"pasted-image\";\n let askingForImage = true;\n\n // Transforms the file input content to a real image\n function loadFile(fileToLoad) {\n startTask();\n let fileReader = new FileReader();\n fileReader.onload = () => {\n createImageWithFileContent(fileReader.result);\n endTask();\n };\n fileReader.onerror = endTask;\n fileReader.readAsDataURL(fileToLoad);\n }\n\n function createImageWithFileContent(result) {\n startTask();\n if (!askingForImage) return;\n let img = new Image();\n img.onload = () => {\n askingForImage = false;\n onImageCreated(img, originalFileName);\n endTask();\n };\n img.onerror = endTask;\n img.src = result;\n }\n\n // Setup of the welcome UI\n function askForImage() {\n fileinput && fileinput.addEventListener(\"change\", fileChanged);\n function fileChanged(changeEvent) {\n fileinput.removeEventListener(\"change\", fileChanged);\n originalFileName =\n fileinput.value.split(\"\\\\\").pop().split(\".\")[0] || \"image\";\n loadFile(changeEvent.target.files[0]);\n }\n }\n\n askForImage();\n\n window.addEventListener(\"paste\", function(ev) {\n handleDataTransferItems(ev.clipboardData.items);\n });\n\n document.body.addEventListener(\"dragover\", function(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n });\n document.body.addEventListener(\"drop\", function(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n handleDataTransferItems(ev.dataTransfer.items);\n });\n\n function handleDataTransferItems(items) {\n // Tries to paste an image\n let imageFile = Array.prototype.find.call(\n items,\n e => e.kind == \"file\" && e.type.match(\"image\")\n );\n originalFileName = \"pasted-image\";\n if (imageFile) {\n loadFile(imageFile.getAsFile());\n return;\n }\n // Tries to load a remote image given its adress\n let url = Array.prototype.find.call(items, e => e.kind == \"string\");\n if (url) {\n url.getAsString(s => createImageWithFileContent(s));\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/getAnImage.js","export default function(background, { onChange }) {\n function switchBackground() {\n currentMode++;\n localStorage.setItem(\"background\", currentMode);\n applyBackground();\n }\n let switchCount = 0;\n function applyBackground() {\n let options = [\"#DDD\", \"#333\"];\n let current = currentMode % options.length;\n background.style.backgroundColor = options[current];\n // let meta = document.getElementById(\"theme-color\");\n // meta && meta.setAttribute(\"content\", \"#fff\");\n onChange(current);\n\n let bclass = document.body.classList;\n options.forEach((color, index) => bclass.remove(\"background_n_\" + index));\n bclass.add(\"background_n_\" + current);\n // https://www.youtube.com/watch?v=Pr8ETbGz35Q\n if (switchCount < 8) {\n console.log(current == 0 ? \"jour !\" : \"nuit !\");\n switchCount++;\n } else {\n console.log(\n \"Monsieur Jacquouille, je vous en prie, à la longue, ça devient casse-pied !\"\n );\n }\n }\n let currentMode = localStorage.getItem(\"background\") || 0;\n applyBackground();\n background.addEventListener(\"click\", switchBackground);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/toggleAbleBackground.js","import { mergeCanvasAndImage } from \"./canvasMergerAndDonwloaderLink.js\";\n\nexport default function(canvas, { onMouseDown, onMouseUp, OrginalImage }) {\n // We cache some zoom related data to avoid getting them all the time\n let scale, rect, lastUsedPXsize;\n\n function measureScale() {\n rect = canvas.getBoundingClientRect();\n scale = rect.width / canvas.width;\n if (lastUsedPXsize && ctx) {\n ctx.lineWidth = lastUsedPXsize / scale;\n }\n }\n measureScale();\n\n window.addEventListener(\"resize\", measureScale);\n\n let ctx = canvas.getContext(\"2d\");\n\n // To make the lines look slightly nicer\n ctx.lineCap = \"round\";\n\n // We cache the mouse position and previous mouse position.\n // Theay are defined by touch events, and used by the draw loop\n let mousePos = {\n x: 0,\n y: 0\n },\n lastPos = mousePos;\n\n canvas.addEventListener(\n \"mousedown\",\n function(e) {\n if (e.which == 3) {\n // We detected a right click on canvas, probably to save it.\n // We merge the content of the background image with the canvas\n mergeCanvasAndImage(canvas, OrginalImage);\n return;\n }\n mousePos = lastPos = getMousePos(e);\n startDrawLoop();\n onMouseDown();\n },\n false\n );\n\n // Allow ctrl-c > pasting to word & co\n document.addEventListener(\"copy\", ev => {\n ev.preventDefault();\n mergeCanvasAndImage(canvas, OrginalImage);\n ev.clipboardData.setData(\n \"text/html\",\n ''\n );\n });\n\n document.addEventListener(\"mouseup\", endDrawLoop, false);\n\n canvas.addEventListener(\n \"mousemove\",\n function(e) {\n mousePos = getMousePos(e);\n },\n false\n );\n\n // Get the position of the mouse relative to the canvas\n function getMousePos(mouseEvent) {\n return {\n x: (mouseEvent.clientX - rect.left) / scale,\n y: (mouseEvent.clientY - rect.top) / scale\n };\n }\n\n // Drawing loop is separated from the events\n\n let isDrawing = false;\n\n function startDrawLoop() {\n if (isDrawing) return;\n isDrawing = true;\n ctx.beginPath();\n drawLoop();\n }\n function endDrawLoop() {\n isDrawing && onMouseUp();\n isDrawing = false;\n }\n\n function drawLoop() {\n if (isDrawing) {\n window.requestAnimationFrame(drawLoop);\n renderCanvas();\n }\n }\n function renderCanvas() {\n ctx.moveTo(lastPos.x, lastPos.y);\n ctx.lineTo(mousePos.x, mousePos.y);\n ctx.stroke();\n lastPos = mousePos;\n }\n\n // Proxy mobile events to their mouse counterpart\n function proxyTouchToMouse(\n touchEventName,\n mouseEventName,\n eventTarget = canvas\n ) {\n canvas.addEventListener(\n touchEventName,\n function(e) {\n e.preventDefault();\n let { clientX, clientY } = e.touches[0] || {};\n let mouseEvent = new MouseEvent(mouseEventName, {\n clientX,\n clientY\n });\n eventTarget.dispatchEvent(mouseEvent);\n },\n false\n );\n }\n proxyTouchToMouse(\"touchstart\", \"mousedown\");\n proxyTouchToMouse(\"touchend\", \"mouseup\", document);\n proxyTouchToMouse(\"touchmove\", \"mousemove\");\n\n return {\n drawWithEraser() {\n ctx.globalCompositeOperation = \"destination-out\";\n },\n drawWithColor(color) {\n ctx.globalCompositeOperation = \"source-over\";\n ctx.strokeStyle = color;\n },\n setPencilSize(pxSize) {\n lastUsedPXsize = pxSize;\n ctx.lineWidth = pxSize / scale;\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/editableCanvas.js","const DEFAULTSIZE = 20;\nexport default function(slider, { onChange }) {\n // Sets draw size at load and style when the user interracts with the slider\n function onPencilSizeChange(pxSize) {\n slider.value = pxSize;\n localStorage.setItem(\"pensize\", pxSize);\n onChange(pxSize);\n }\n slider.addEventListener(\"input\", e => onPencilSizeChange(e.target.value));\n onPencilSizeChange(parseInt(localStorage.getItem(\"pensize\")) || DEFAULTSIZE);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/pencilSizeSlider.js","const coolColors = \"#F44336,#E91E63,#9C27B0,#673AB7,#3F51B5,#2196F3,#03A9F4,#00BCD4,#009688,#4CAF50,#8BC34A,#CDDC39,#FFEB3B,#FFC107,#FF9800,#FF5722\".split(\n \",\"\n);\n\n//import { luminance } from \"./colorToRGB.js\";\n// const darkCoolColors = coolColors.filter(c => luminance(c) < 150);\n\nfunction randomColor(colorPool, exception = \"\") {\n let withoutEx = colorPool.filter(c => c != exception);\n return withoutEx[Math.floor(Math.random() * withoutEx.length)];\n}\n\nexport default function(canvas, { fitWindow }) {\n let ctx, w, h;\n let bgColor = \"#F44336\"; //randomColor(darkCoolColors);\n function reset() {\n if (fitWindow) {\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n }\n w = canvas.width;\n h = canvas.height;\n ctx = canvas.getContext(\"2d\");\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, w, h);\n ctx.lineCap = \"round\";\n randomizeInst();\n }\n\n let position, speed, acceleration, timeoutHandle, accelerationTimeoutHandle;\n function randomizeInst() {\n position = {\n // x: Math.random() * w,\n // y: Math.random() * h\n x: w / 2,\n y: h / 2\n };\n speed = {\n x: Math.random() * 10 - 5,\n y: Math.random() * 10 - 5\n };\n acceleration = {\n x: Math.random() * 10 - 5,\n y: Math.random() * 10 - 5\n };\n\n ctx.strokeStyle = randomColor(coolColors, bgColor);\n ctx.lineWidth = 20 + Math.random() * 40;\n ctx.beginPath();\n ctx.moveTo(position.x, position.y);\n }\n\n reset();\n window.addEventListener(\"resize\", reset);\n\n function randomAcceletation() {\n acceleration = {\n x: Math.random() * 2 - 1,\n y: Math.random() * 2 - 1\n };\n // speed.x*=0.2;\n // speed.y*=0.2;\n\n accelerationTimeoutHandle = setTimeout(\n randomAcceletation,\n 100 + Math.random() * 200\n );\n }\n randomAcceletation();\n function renderCanvas() {\n ctx.moveTo(position.x, position.y);\n speed.x *= 0.95;\n speed.y *= 0.95;\n\n speed.x += acceleration.x;\n speed.y += acceleration.y;\n position.x += speed.x;\n position.y += speed.y;\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n if (\n position.x < -50 ||\n position.x > w + 50 ||\n position.y < -50 ||\n position.y > h + 50\n )\n randomizeInst();\n }\n\n let isDrawing = true;\n function drawLoop() {\n if (isDrawing) {\n window.requestAnimationFrame(drawLoop);\n renderCanvas();\n }\n }\n\n drawLoop();\n\n function stopAnim() {\n isDrawing = false;\n clearTimeout(accelerationTimeoutHandle);\n window.removeEventListener(\"resize\", reset);\n }\n\n return {\n stopAnim,\n bgColor\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/welcomeAnim.js","export function checkRunWithinWebview() {\n if (navigator.userAgent.match(/Android/i)) {\n let JSONPcall = document.createElement(\"script\");\n JSONPcall.src = \"https://iswebview.herokuapp.com/?callback=JSONPcallback\";\n // JSONPcall.src = \"https://iswebview2repo-iswebview2.7e14.starter-us-west-2.openshiftapps.com/?callback=JSONPcallback\";\n document.body.appendChild(JSONPcall);\n }\n}\nwindow.JSONPcallback = function(result) {\n if (result.isWebView) {\n document.body.classList.add(\"runningWithinWebview\");\n document.body.innerHTML = `\n Please open minimage.tk with chrome,\n it cannot work within another app.\n\n There may be an option in the menu above the page,\n something like \"Open in Chrome\".\n\n `;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/checkRunWithinWebview.js","let tasksInProgress = 0;\nexport function startTask() {\n tasksInProgress++;\n updateLook();\n}\n\nexport function endTask() {\n tasksInProgress--;\n setTimeout(updateLook);\n}\n\nexport function updateLook() {\n spinners.classList[tasksInProgress ? \"remove\" : \"add\"](\"hidden\");\n}\ndocument.addEventListener(\"DOMContentLoaded\", updateLook);\n\n\n\n// WEBPACK FOOTER //\n// ./src/spinners.js","import { triggerDownload } from \"./canvasMergerAndDonwloaderLink.js\";\nexport function detectCtrlS({ canvas, OrginalImage, originalFileName }) {\n window.addEventListener(\"keydown\", event => {\n if (event.ctrlKey || event.metaKey) {\n if (String.fromCharCode(event.which).toLowerCase() === \"s\") {\n event.preventDefault();\n triggerDownload(canvas, originalFileName, OrginalImage);\n }\n }\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/detectCtrlS.js","var appCacheIframe;\n\nfunction hasSW() {\n return 'serviceWorker' in navigator &&\n // This is how I block Chrome 40 and detect Chrome 41, because first has\n // bugs with history.pustState and/or hashchange\n (window.fetch || 'imageRendering' in document.documentElement.style) &&\n (window.location.protocol === 'https:' || window.location.hostname === 'localhost' || window.location.hostname.indexOf('127.') === 0)\n}\n\nfunction install(options) {\n options || (options = {});\n\n \n if (hasSW()) {\n var registration = navigator.serviceWorker\n .register(\n \"/sw.js\"\n \n );\n\n \n\n return;\n }\n \n\n \n if (window.applicationCache) {\n var directory = \"/appcache/\";\n var name = \"manifest\";\n\n var doLoad = function() {\n var page = directory + name + '.html';\n var iframe = document.createElement('iframe');\n\n \n\n iframe.src = page;\n iframe.style.display = 'none';\n\n appCacheIframe = iframe;\n document.body.appendChild(iframe);\n };\n\n if (document.readyState === 'complete') {\n setTimeout(doLoad);\n } else {\n window.addEventListener('load', doLoad);\n }\n\n return;\n }\n \n}\n\nfunction applyUpdate(callback, errback) {\n \n\n \n}\n\nfunction update() {\n \n if (hasSW()) {\n navigator.serviceWorker.getRegistration().then(function(registration) {\n if (!registration) return;\n return registration.update();\n });\n }\n \n\n \n if (appCacheIframe) {\n try {\n appCacheIframe.contentWindow.applicationCache.update();\n } catch (e) {}\n }\n \n}\n\n\n\nexports.install = install;\nexports.applyUpdate = applyUpdate;\nexports.update = update;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/offline-plugin/runtime.js\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/index.html b/index.html index 11d320d..5c0bccd 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ - Minimage : minimal image editor
\ No newline at end of file + Minimage : minimal image editor
\ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a5258d7..ecabbe9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2,12 +2,17 @@ "name": "minimage", "version": "1.0.0", "lockfileVersion": 1, + "requires": true, "dependencies": { "accepts": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "dev": true + "dev": true, + "requires": { + "mime-types": "~2.1.11", + "negotiator": "0.6.1" + } }, "acorn": { "version": "5.1.1", @@ -20,6 +25,9 @@ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", "dev": true, + "requires": { + "acorn": "^4.0.3" + }, "dependencies": { "acorn": { "version": "4.0.13", @@ -34,7 +42,11 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, - "optional": true + "optional": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } }, "ajv-keywords": { "version": "2.1.0", @@ -46,7 +58,12 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } }, "alphanum-sort": { "version": "1.0.2", @@ -76,19 +93,29 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", - "dev": true + "dev": true, + "requires": { + "arrify": "^1.0.0", + "micromatch": "^2.1.5" + } }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } }, "arr-flatten": { "version": "1.0.3", @@ -112,7 +139,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } }, "array-uniq": { "version": "1.0.3", @@ -150,13 +180,21 @@ "version": "4.9.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", - "dev": true + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } }, "assert": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true + "dev": true, + "requires": { + "util": "0.10.3" + } }, "assert-plus": { "version": "0.2.0", @@ -175,7 +213,10 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true + "dev": true, + "requires": { + "lodash": "^4.14.0" + } }, "async-each": { "version": "1.0.1", @@ -195,12 +236,24 @@ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "dev": true, + "requires": { + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" + }, "dependencies": { "browserslist": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } } } }, @@ -209,12 +262,24 @@ "resolved": "https://registry.npmjs.org/autoprefixer-loader/-/autoprefixer-loader-3.2.0.tgz", "integrity": "sha1-Oae2ZGqCaYZQc9lYyX9IYVLCyEo=", "dev": true, + "requires": { + "autoprefixer": "^6.0.2", + "loader-utils": "^0.2.11", + "postcss": "^5.0.4", + "postcss-safe-parser": "^1.0.1" + }, "dependencies": { "loader-utils": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } } } }, @@ -236,43 +301,113 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.24.1.tgz", "integrity": "sha1-IHzXBbumFImy6kG1MSNBz2rKIoM=", - "dev": true + "dev": true, + "requires": { + "babel-core": "^6.24.1", + "babel-polyfill": "^6.23.0", + "babel-register": "^6.24.1", + "babel-runtime": "^6.22.0", + "chokidar": "^1.6.1", + "commander": "^2.8.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.0.0", + "glob": "^7.0.0", + "lodash": "^4.2.0", + "output-file-sync": "^1.1.0", + "path-is-absolute": "^1.0.0", + "slash": "^1.0.0", + "source-map": "^0.5.0", + "v8flags": "^2.0.10" + } }, "babel-code-frame": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true + "dev": true, + "requires": { + "chalk": "^1.1.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" + } }, "babel-core": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "^6.22.0", + "babel-generator": "^6.25.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.25.0", + "babel-traverse": "^6.25.0", + "babel-types": "^6.25.0", + "babylon": "^6.17.2", + "convert-source-map": "^1.1.0", + "debug": "^2.1.1", + "json5": "^0.5.0", + "lodash": "^4.2.0", + "minimatch": "^3.0.2", + "path-is-absolute": "^1.0.0", + "private": "^0.1.6", + "slash": "^1.0.0", + "source-map": "^0.5.0" + } }, "babel-generator": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", - "dev": true + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-types": "^6.25.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } }, "babel-helper-builder-binary-assignment-operator-visitor": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } }, "babel-helper-call-delegate": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } }, "babel-helper-define-map": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz", "integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA=", - "dev": true + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1", + "lodash": "^4.2.0" + } }, "babel-helper-evaluate-path": { "version": "0.1.0", @@ -284,7 +419,12 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } }, "babel-helper-flip-expressions": { "version": "0.1.2", @@ -296,19 +436,34 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true + "dev": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } }, "babel-helper-get-function-arity": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } }, "babel-helper-hoist-variables": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } }, "babel-helper-is-nodes-equiv": { "version": "0.0.1", @@ -332,19 +487,35 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } }, "babel-helper-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz", "integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1", + "lodash": "^4.2.0" + } }, "babel-helper-remap-async-to-generator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } }, "babel-helper-remove-or-void": { "version": "0.1.1", @@ -356,7 +527,15 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } }, "babel-helper-to-multiple-sequence-expressions": { "version": "0.1.1", @@ -368,55 +547,87 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } }, "babel-loader": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.1.tgz", "integrity": "sha1-uHE0yLEuPkwqlOBUYIW8aAorhIg=", - "dev": true + "dev": true, + "requires": { + "find-cache-dir": "^1.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1" + } }, "babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } }, "babel-plugin-check-es2015-constants": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } }, "babel-plugin-minify-builtins": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.1.3.tgz", "integrity": "sha1-TyGn3LUfkaBOpx1H/w6OOwX+wCE=", - "dev": true + "dev": true, + "requires": { + "babel-helper-evaluate-path": "^0.1.0" + } }, "babel-plugin-minify-constant-folding": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.1.3.tgz", "integrity": "sha1-V70XKt+LjXStfJlhLrlQQU6+o8o=", - "dev": true + "dev": true, + "requires": { + "babel-helper-evaluate-path": "^0.1.0" + } }, "babel-plugin-minify-dead-code-elimination": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.7.tgz", "integrity": "sha1-d09TbzR7mDk6J7qnF4cpaIE8NCw=", - "dev": true + "dev": true, + "requires": { + "babel-helper-mark-eval-scopes": "^0.1.1", + "babel-helper-remove-or-void": "^0.1.1", + "lodash.some": "^4.6.0" + } }, "babel-plugin-minify-flip-comparisons": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.1.2.tgz", "integrity": "sha1-4oa0C3WZsY3+oZUHHkJ5Rlz8GIQ=", - "dev": true + "dev": true, + "requires": { + "babel-helper-is-void-0": "^0.1.1" + } }, "babel-plugin-minify-guarded-expressions": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.1.2.tgz", "integrity": "sha1-38PUc7A2LZYF084KweIjKMYNEAc=", - "dev": true + "dev": true, + "requires": { + "babel-helper-flip-expressions": "^0.1.2" + } }, "babel-plugin-minify-infinity": { "version": "0.1.2", @@ -428,7 +639,10 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.1.3.tgz", "integrity": "sha1-v6JGYaZ5T7A4M1h+VYKLZUSeBv4=", - "dev": true + "dev": true, + "requires": { + "babel-helper-mark-eval-scopes": "^0.1.1" + } }, "babel-plugin-minify-numeric-literals": { "version": "0.1.1", @@ -446,13 +660,21 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.1.2.tgz", "integrity": "sha1-qWjxZY/esvx1noH+Mx2Jgp3w9rk=", - "dev": true + "dev": true, + "requires": { + "babel-helper-flip-expressions": "^0.1.2", + "babel-helper-is-nodes-equiv": "^0.0.1", + "babel-helper-to-multiple-sequence-expressions": "^0.1.1" + } }, "babel-plugin-minify-type-constructors": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.1.2.tgz", "integrity": "sha1-21PFt2y44vzUXYYvFxBMeHYTN+4=", - "dev": true + "dev": true, + "requires": { + "babel-helper-is-void-0": "^0.1.1" + } }, "babel-plugin-syntax-async-functions": { "version": "6.13.0", @@ -476,145 +698,257 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } }, "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } }, "babel-plugin-transform-es2015-block-scoped-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } }, "babel-plugin-transform-es2015-block-scoping": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz", "integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1", + "lodash": "^4.2.0" + } }, "babel-plugin-transform-es2015-classes": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true + "dev": true, + "requires": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } }, "babel-plugin-transform-es2015-computed-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } }, "babel-plugin-transform-es2015-destructuring": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } }, "babel-plugin-transform-es2015-duplicate-keys": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } }, "babel-plugin-transform-es2015-for-of": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } }, "babel-plugin-transform-es2015-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } }, "babel-plugin-transform-es2015-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } }, "babel-plugin-transform-es2015-modules-amd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } }, "babel-plugin-transform-es2015-modules-commonjs": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz", "integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-types": "^6.24.1" + } }, "babel-plugin-transform-es2015-modules-systemjs": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } }, "babel-plugin-transform-es2015-modules-umd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } }, "babel-plugin-transform-es2015-object-super": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true + "dev": true, + "requires": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } }, "babel-plugin-transform-es2015-parameters": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true + "dev": true, + "requires": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } }, "babel-plugin-transform-es2015-shorthand-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } }, "babel-plugin-transform-es2015-spread": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } }, "babel-plugin-transform-es2015-sticky-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } }, "babel-plugin-transform-es2015-template-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } }, "babel-plugin-transform-es2015-typeof-symbol": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } }, "babel-plugin-transform-es2015-unicode-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } }, "babel-plugin-transform-exponentiation-operator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } }, "babel-plugin-transform-inline-consecutive-adds": { "version": "0.1.2", @@ -644,13 +978,19 @@ "version": "6.8.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.4.tgz", "integrity": "sha1-atMREQuAoZKlbvtd30/jym96Ydo=", - "dev": true + "dev": true, + "requires": { + "esutils": "^2.0.2" + } }, "babel-plugin-transform-regenerator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz", "integrity": "sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg=", - "dev": true + "dev": true, + "requires": { + "regenerator-transform": "0.9.11" + } }, "babel-plugin-transform-regexp-constructors": { "version": "0.1.1", @@ -686,7 +1026,11 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } }, "babel-plugin-transform-undefined-to-void": { "version": "6.8.2", @@ -698,61 +1042,168 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "core-js": "^2.4.0", + "regenerator-runtime": "^0.10.0" + } }, "babel-preset-babili": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/babel-preset-babili/-/babel-preset-babili-0.1.4.tgz", "integrity": "sha1-rZ1mUQAvW8PwfKswB4EWf1RyS/I=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-minify-builtins": "^0.1.3", + "babel-plugin-minify-constant-folding": "^0.1.3", + "babel-plugin-minify-dead-code-elimination": "^0.1.7", + "babel-plugin-minify-flip-comparisons": "^0.1.2", + "babel-plugin-minify-guarded-expressions": "^0.1.2", + "babel-plugin-minify-infinity": "^0.1.2", + "babel-plugin-minify-mangle-names": "^0.1.3", + "babel-plugin-minify-numeric-literals": "^0.1.1", + "babel-plugin-minify-replace": "^0.1.2", + "babel-plugin-minify-simplify": "^0.1.2", + "babel-plugin-minify-type-constructors": "^0.1.2", + "babel-plugin-transform-inline-consecutive-adds": "^0.1.2", + "babel-plugin-transform-member-expression-literals": "^6.8.4", + "babel-plugin-transform-merge-sibling-variables": "^6.8.5", + "babel-plugin-transform-minify-booleans": "^6.8.2", + "babel-plugin-transform-property-literals": "^6.8.4", + "babel-plugin-transform-regexp-constructors": "^0.1.1", + "babel-plugin-transform-remove-console": "^6.8.4", + "babel-plugin-transform-remove-debugger": "^6.8.4", + "babel-plugin-transform-remove-undefined": "^0.1.2", + "babel-plugin-transform-simplify-comparison-operators": "^6.8.4", + "babel-plugin-transform-undefined-to-void": "^6.8.2", + "lodash.isplainobject": "^4.0.6" + } }, "babel-preset-env": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.0.tgz", "integrity": "sha512-OVgtQRuOZKckrILgMA5rvctvFZPv72Gua9Rt006AiPoB0DJKGN07UmaQA+qRrYgK71MVct8fFhT0EyNWYorVew==", - "dev": true + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^2.1.2", + "invariant": "^2.2.2", + "semver": "^5.3.0" + } }, "babel-preset-es2017": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz", "integrity": "sha1-WXvq37n38gi8/YoS6bKym4svFNE=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.24.1" + } }, "babel-register": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", - "dev": true + "dev": true, + "requires": { + "babel-core": "^6.24.1", + "babel-runtime": "^6.22.0", + "core-js": "^2.4.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.2" + } }, "babel-runtime": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", - "dev": true + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.10.0" + } }, "babel-template": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.25.0", + "babel-types": "^6.25.0", + "babylon": "^6.17.2", + "lodash": "^4.2.0" + } }, "babel-traverse": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "^6.22.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-types": "^6.25.0", + "babylon": "^6.17.2", + "debug": "^2.2.0", + "globals": "^9.0.0", + "invariant": "^2.2.0", + "lodash": "^4.2.0" + } }, "babel-types": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^1.0.1" + } }, "babili": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/babili/-/babili-0.1.4.tgz", "integrity": "sha1-Q7t2hmTTd96oS6l3q8WwG9WWbxE=", - "dev": true + "dev": true, + "requires": { + "babel-cli": "^6.24.1", + "babel-preset-babili": "^0.1.4" + } }, "babylon": { "version": "6.17.4", @@ -783,7 +1234,10 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "dev": true, - "optional": true + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } }, "big.js": { "version": "3.1.3", @@ -813,7 +1267,15 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } }, "boolbase": { "version": "1.0.0", @@ -825,19 +1287,31 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.x.x" + } }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } }, "brorand": { "version": "1.1.0", @@ -849,49 +1323,91 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", - "dev": true + "dev": true, + "requires": { + "buffer-xor": "^1.0.2", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "inherits": "^2.0.1" + } }, "browserify-cipher": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "dev": true + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } }, "browserify-des": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1" + } }, "browserify-rsa": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } }, "browserify-sign": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } }, "browserify-zlib": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true + "dev": true, + "requires": { + "pako": "~0.2.0" + } }, "browserslist": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.1.5.tgz", "integrity": "sha1-6IJVDfPRzW1IHBo+ADjyuvE6RxE=", - "dev": true + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000684", + "electron-to-chromium": "^1.3.14" + } }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } }, "buffer-indexof": { "version": "1.1.0", @@ -927,7 +1443,11 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } }, "camelcase": { "version": "1.2.1", @@ -940,6 +1460,10 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, "dependencies": { "camelcase": { "version": "2.1.1", @@ -954,12 +1478,22 @@ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "dev": true, + "requires": { + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + }, "dependencies": { "browserslist": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } } } }, @@ -986,43 +1520,80 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true + "dev": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + } }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } }, "clap": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.0.tgz", "integrity": "sha1-WckP4+E3EEdG/xlGmiemNP9oyFc=", - "dev": true + "dev": true, + "requires": { + "chalk": "^1.1.3" + } }, "clean-css": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.7.tgz", "integrity": "sha1-ua6k+FZ5iJzz6ui0A0nsTr390DI=", - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.x" + } }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + }, "dependencies": { "wordwrap": { "version": "0.0.2", @@ -1048,7 +1619,10 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dev": true + "dev": true, + "requires": { + "q": "^1.1.2" + } }, "code-point-at": { "version": "1.1.0", @@ -1060,13 +1634,21 @@ "version": "0.11.4", "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", - "dev": true + "dev": true, + "requires": { + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" + } }, "color-convert": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true + "dev": true, + "requires": { + "color-name": "^1.1.1" + } }, "color-name": { "version": "1.1.3", @@ -1078,13 +1660,21 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dev": true + "dev": true, + "requires": { + "color-name": "^1.0.0" + } }, "colormin": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", - "dev": true + "dev": true, + "requires": { + "color": "^0.11.0", + "css-color-names": "0.0.4", + "has": "^1.0.1" + } }, "colors": { "version": "1.1.2", @@ -1096,13 +1686,19 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } }, "commander": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.10.0.tgz", "integrity": "sha512-q/r9trjmuikWDRJNTBHAVnWhuU6w+z80KgBq7j9YDclik5E7X4xi0KnlZBNFA1zOQ+SH/vHMWd2mC9QTOz7GpA==", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } }, "commondir": { "version": "1.0.1", @@ -1114,13 +1710,25 @@ "version": "2.0.10", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.10.tgz", "integrity": "sha1-/tocf3YXkScyspv4zyYlKiC57s0=", - "dev": true + "dev": true, + "requires": { + "mime-db": ">= 1.27.0 < 2" + } }, "compression": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.0.tgz", "integrity": "sha1-AwyfGY8WQ6BX13anOOki2kNzAS0=", - "dev": true + "dev": true, + "requires": { + "accepts": "~1.3.3", + "bytes": "2.5.0", + "compressible": "~2.0.10", + "debug": "2.6.8", + "on-headers": "~1.0.1", + "safe-buffer": "5.1.1", + "vary": "~1.1.1" + } }, "concat-map": { "version": "0.0.1", @@ -1138,7 +1746,10 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true + "dev": true, + "requires": { + "date-now": "^0.1.4" + } }, "constants-browserify": { "version": "1.0.0", @@ -1192,32 +1803,65 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", - "dev": true + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } }, "create-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } }, "create-hmac": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } }, "cryptiles": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, - "optional": true + "optional": true, + "requires": { + "boom": "2.x.x" + } }, "crypto-browserify": { "version": "3.11.1", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", - "dev": true + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0" + } }, "css-color-names": { "version": "0.0.4", @@ -1229,25 +1873,57 @@ "version": "0.28.4", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.4.tgz", "integrity": "sha1-bPNXkZLONV6LONX0Ldeh8uyJjQ8=", - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "^6.11.0", + "css-selector-tokenizer": "^0.7.0", + "cssnano": ">=2.6.1 <4", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.0.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.0.0", + "postcss-modules-local-by-default": "^1.0.1", + "postcss-modules-scope": "^1.0.0", + "postcss-modules-values": "^1.1.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^0.1.7" + } }, "css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } }, "css-selector-tokenizer": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "dev": true, + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" + }, "dependencies": { "regexpu-core": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } } } }, @@ -1267,25 +1943,69 @@ "version": "3.10.0", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "dev": true + "dev": true, + "requires": { + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" + } }, "csso": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "dev": true + "dev": true, + "requires": { + "clap": "^1.0.9", + "source-map": "^0.5.3" + } }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } }, "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true + "dev": true, + "requires": { + "es5-ext": "^0.10.9" + } }, "dashdash": { "version": "1.14.1", @@ -1293,6 +2013,9 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "optional": true, + "requires": { + "assert-plus": "^1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1313,7 +2036,10 @@ "version": "2.6.8", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "decamelize": { "version": "1.2.0", @@ -1344,6 +2070,14 @@ "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, "dependencies": { "pify": { "version": "3.0.0", @@ -1369,7 +2103,11 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } }, "destroy": { "version": "1.0.4", @@ -1381,7 +2119,10 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true + "dev": true, + "requires": { + "repeating": "^2.0.0" + } }, "detect-node": { "version": "2.0.3", @@ -1393,7 +2134,12 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", - "dev": true + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } }, "dns-equal": { "version": "1.0.0", @@ -1405,19 +2151,29 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.1.1.tgz", "integrity": "sha1-I2nUUDivBF84mOb6VoYq7T9AKWw=", - "dev": true + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } }, "dns-txt": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } }, "dom-converter": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", "dev": true, + "requires": { + "utila": "~0.3" + }, "dependencies": { "utila": { "version": "0.3.3", @@ -1432,6 +2188,10 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, "dependencies": { "domelementtype": { "version": "1.1.3", @@ -1457,20 +2217,30 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", - "dev": true + "dev": true, + "requires": { + "domelementtype": "1" + } }, "domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } }, "ecc-jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } }, "ee-first": { "version": "1.1.1", @@ -1494,7 +2264,16 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } }, "emojis-list": { "version": "2.1.0", @@ -1512,7 +2291,13 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" + } }, "entities": { "version": "1.1.1", @@ -1524,55 +2309,99 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "dev": true + "dev": true, + "requires": { + "prr": "~0.0.0" + } }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } }, "es5-ext": { "version": "0.10.24", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.24.tgz", "integrity": "sha1-pVh3yZJLwMjZvTwsvhdJWsFwmxQ=", - "dev": true + "dev": true, + "requires": { + "es6-iterator": "2", + "es6-symbol": "~3.1" + } }, "es6-iterator": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", - "dev": true + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-symbol": "^3.1" + } }, "es6-map": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } }, "es6-set": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + } }, "es6-symbol": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } }, "es6-templates": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", - "dev": true + "dev": true, + "requires": { + "recast": "~0.11.12", + "through": "~2.3.6" + } }, "es6-weak-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } }, "escape-html": { "version": "1.0.3", @@ -1590,7 +2419,13 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } }, "esprima": { "version": "2.7.3", @@ -1602,7 +2437,11 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", - "dev": true + "dev": true, + "requires": { + "estraverse": "^4.1.0", + "object-assign": "^4.0.1" + } }, "estraverse": { "version": "4.2.0", @@ -1626,7 +2465,11 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } }, "eventemitter3": { "version": "1.2.0", @@ -1644,31 +2487,73 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", - "dev": true + "dev": true, + "requires": { + "original": ">=0.0.5" + } }, "evp_bytestokey": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", - "dev": true + "dev": true, + "requires": { + "create-hash": "^1.1.1" + } }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } }, "expand-range": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true + "dev": true, + "requires": { + "fill-range": "^2.1.0" + } }, "express": { "version": "4.15.3", "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", "dev": true, + "requires": { + "accepts": "~1.3.3", + "array-flatten": "1.1.1", + "content-disposition": "0.5.2", + "content-type": "~1.0.2", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.7", + "depd": "~1.1.0", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.0", + "finalhandler": "~1.0.3", + "fresh": "0.5.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.1", + "path-to-regexp": "0.1.7", + "proxy-addr": "~1.1.4", + "qs": "6.4.0", + "range-parser": "~1.2.0", + "send": "0.15.3", + "serve-static": "1.12.3", + "setprototypeof": "1.0.3", + "statuses": "~1.3.1", + "type-is": "~1.6.15", + "utils-merge": "1.0.0", + "vary": "~1.1.1" + }, "dependencies": { "array-flatten": { "version": "1.1.1", @@ -1680,7 +2565,10 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, @@ -1695,13 +2583,22 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } }, "extract-text-webpack-plugin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.0.tgz", "integrity": "sha1-kMqnkHvESfM1AF46x1MrQbAN5hI=", - "dev": true + "dev": true, + "requires": { + "async": "^2.4.1", + "loader-utils": "^1.1.0", + "schema-utils": "^0.3.0", + "webpack-sources": "^1.0.1" + } }, "extsprintf": { "version": "1.0.2", @@ -1725,7 +2622,10 @@ "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } }, "filename-regex": { "version": "2.0.1", @@ -1737,19 +2637,38 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } }, "finalhandler": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", "dev": true, + "requires": { + "debug": "2.6.7", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.1", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, "dependencies": { "debug": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, @@ -1757,13 +2676,21 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } }, "flatten": { "version": "1.0.2", @@ -1781,7 +2708,10 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true + "dev": true, + "requires": { + "for-in": "^1.0.1" + } }, "foreachasync": { "version": "3.0.0", @@ -1801,7 +2731,12 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "dev": true, - "optional": true + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } }, "forwarded": { "version": "0.1.0", @@ -1833,6 +2768,10 @@ "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", "dev": true, "optional": true, + "requires": { + "nan": "^2.3.0", + "node-pre-gyp": "^0.6.36" + }, "dependencies": { "abbrev": { "version": "1.1.0", @@ -1844,7 +2783,11 @@ "version": "4.11.8", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } }, "ansi-regex": { "version": "2.1.1", @@ -1861,7 +2804,11 @@ "version": "1.1.4", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } }, "asn1": { "version": "0.2.3", @@ -1902,22 +2849,35 @@ "version": "1.0.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } }, "block-stream": { "version": "0.0.9", "bundled": true, - "dev": true + "dev": true, + "requires": { + "inherits": "~2.0.0" + } }, "boom": { "version": "2.10.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "hoek": "2.x.x" + } }, "brace-expansion": { "version": "1.1.7", "bundled": true, - "dev": true + "dev": true, + "requires": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + } }, "buffer-shims": { "version": "1.0.0", @@ -1944,7 +2904,10 @@ "combined-stream": { "version": "1.0.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } }, "concat-map": { "version": "0.0.1", @@ -1965,13 +2928,19 @@ "version": "2.0.5", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "boom": "2.x.x" + } }, "dashdash": { "version": "1.14.1", "bundled": true, "dev": true, "optional": true, + "requires": { + "assert-plus": "^1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1985,7 +2954,10 @@ "version": "2.6.8", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "ms": "2.0.0" + } }, "deep-extend": { "version": "0.4.2", @@ -2008,7 +2980,10 @@ "version": "0.1.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } }, "extend": { "version": "3.0.1", @@ -2031,7 +3006,12 @@ "version": "2.1.4", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } }, "fs.realpath": { "version": "1.0.0", @@ -2041,25 +3021,49 @@ "fstream": { "version": "1.0.11", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } }, "fstream-ignore": { "version": "1.0.5", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" + } }, "gauge": { "version": "2.7.4", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } }, "getpass": { "version": "0.1.7", "bundled": true, "dev": true, "optional": true, + "requires": { + "assert-plus": "^1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -2072,7 +3076,15 @@ "glob": { "version": "7.1.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } }, "graceful-fs": { "version": "4.1.11", @@ -2089,7 +3101,11 @@ "version": "4.2.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + } }, "has-unicode": { "version": "2.0.1", @@ -2101,7 +3117,13 @@ "version": "3.1.3", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } }, "hoek": { "version": "2.16.3", @@ -2112,12 +3134,21 @@ "version": "1.1.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } }, "inflight": { "version": "1.0.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } }, "inherits": { "version": "2.0.3", @@ -2133,7 +3164,10 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } }, "is-typedarray": { "version": "1.0.0", @@ -2156,7 +3190,10 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } }, "jsbn": { "version": "0.1.1", @@ -2174,7 +3211,10 @@ "version": "1.0.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "jsonify": "~0.0.0" + } }, "json-stringify-safe": { "version": "5.0.1", @@ -2193,6 +3233,12 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -2210,12 +3256,18 @@ "mime-types": { "version": "2.1.15", "bundled": true, - "dev": true + "dev": true, + "requires": { + "mime-db": "~1.27.0" + } }, "minimatch": { "version": "3.0.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } }, "minimist": { "version": "0.0.8", @@ -2225,7 +3277,10 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "ms": { "version": "2.0.0", @@ -2237,19 +3292,40 @@ "version": "0.6.36", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "request": "^2.81.0", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^2.2.1", + "tar-pack": "^3.4.0" + } }, "nopt": { "version": "4.0.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } }, "npmlog": { "version": "4.1.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } }, "number-is-nan": { "version": "1.0.1", @@ -2271,7 +3347,10 @@ "once": { "version": "1.4.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "wrappy": "1" + } }, "os-homedir": { "version": "1.0.2", @@ -2289,7 +3368,11 @@ "version": "0.1.4", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } }, "path-is-absolute": { "version": "1.0.1", @@ -2324,6 +3407,12 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -2336,18 +3425,54 @@ "readable-stream": { "version": "2.2.9", "bundled": true, - "dev": true + "dev": true, + "requires": { + "buffer-shims": "~1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" + } }, "request": { "version": "2.81.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + } }, "rimraf": { "version": "2.6.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob": "^7.0.5" + } }, "safe-buffer": { "version": "5.0.1", @@ -2376,13 +3501,27 @@ "version": "1.0.9", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "hoek": "2.x.x" + } }, "sshpk": { "version": "1.13.0", "bundled": true, "dev": true, "optional": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jodid25519": "^1.0.0", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -2392,15 +3531,23 @@ } } }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, "string-width": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } }, "stringstream": { "version": "0.0.5", @@ -2411,7 +3558,10 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } }, "strip-json-comments": { "version": "2.0.1", @@ -2422,25 +3572,46 @@ "tar": { "version": "2.2.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } }, "tar-pack": { "version": "3.4.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" + } }, "tough-cookie": { "version": "2.3.2", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "punycode": "^1.4.1" + } }, "tunnel-agent": { "version": "0.6.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } }, "tweetnacl": { "version": "0.14.5", @@ -2469,13 +3640,19 @@ "version": "1.3.6", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } }, "wide-align": { "version": "1.1.2", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "string-width": "^1.0.2" + } }, "wrappy": { "version": "1.0.2", @@ -2508,6 +3685,9 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "optional": true, + "requires": { + "assert-plus": "^1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -2522,19 +3702,34 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + } }, "glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } }, "globals": { "version": "9.18.0", @@ -2546,7 +3741,14 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } }, "graceful-fs": { "version": "4.1.11", @@ -2578,19 +3780,29 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", "dev": true, - "optional": true + "optional": true, + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + } }, "has": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true + "dev": true, + "requires": { + "function-bind": "^1.0.2" + } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } }, "has-flag": { "version": "1.0.0", @@ -2602,20 +3814,33 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true + "dev": true, + "requires": { + "inherits": "^2.0.1" + } }, "hash.js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + } }, "hawk": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, - "optional": true + "optional": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } }, "he": { "version": "1.1.1", @@ -2627,7 +3852,12 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } }, "hoek": { "version": "2.16.3", @@ -2639,7 +3869,11 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } }, "hosted-git-info": { "version": "2.5.0", @@ -2651,7 +3885,13 @@ "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } }, "html-comment-regex": { "version": "1.1.1", @@ -2669,13 +3909,30 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.0.tgz", "integrity": "sha512-O7i3IXkoSXpXG5UnZyspVtcGp/o/sBg4mmqqgE6KGwlzGF8liqxMz90IuEE52ZoAoMGXgUIFcAQ8V9y2EkPZ8w==", - "dev": true + "dev": true, + "requires": { + "es6-templates": "^0.2.2", + "fastparse": "^1.1.1", + "html-minifier": "^3.0.1", + "loader-utils": "^1.0.2", + "object-assign": "^4.1.0" + } }, "html-minifier": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.3.tgz", "integrity": "sha512-iKRzQQDuTCsq0Ultbi/mfJJnR0D3AdZKTq966Gsp92xkmAPCV4Xi08qhJ0Dl3ZAWemSgJ7qZK+UsZc0gFqK6wg==", "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.1.x", + "commander": "2.11.x", + "he": "1.1.x", + "ncname": "1.0.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.0.x" + }, "dependencies": { "commander": { "version": "2.11.0", @@ -2687,7 +3944,11 @@ "version": "3.0.27", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.27.tgz", "integrity": "sha512-HD8CmxPXUI62v5tweiulMcP/apAtx1DXGcNZkhKQZyC+MTrTsoCBb8yPAwVrbvpgw3EpRU76bRe6axjIiCYcQg==", - "dev": true + "dev": true, + "requires": { + "commander": "~2.11.0", + "source-map": "~0.5.1" + } } } }, @@ -2696,12 +3957,26 @@ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.29.0.tgz", "integrity": "sha1-6Yf0IYU9O2k4yMTIFxhC5f0XryM=", "dev": true, + "requires": { + "bluebird": "^3.4.7", + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "toposort": "^1.0.0" + }, "dependencies": { "loader-utils": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } } } }, @@ -2710,12 +3985,21 @@ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", "dev": true, + "requires": { + "domelementtype": "1", + "domhandler": "2.1", + "domutils": "1.1", + "readable-stream": "1.0" + }, "dependencies": { "domutils": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true + "dev": true, + "requires": { + "domelementtype": "1" + } }, "isarray": { "version": "0.0.1", @@ -2727,7 +4011,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } }, "string_decoder": { "version": "0.10.31", @@ -2747,19 +4037,35 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", - "dev": true + "dev": true, + "requires": { + "depd": "1.1.0", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } }, "http-proxy": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", - "dev": true + "dev": true, + "requires": { + "eventemitter3": "1.x.x", + "requires-port": "1.x.x" + } }, "http-proxy-middleware": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", "dev": true, + "requires": { + "http-proxy": "^1.16.2", + "is-glob": "^3.1.0", + "lodash": "^4.17.2", + "micromatch": "^2.3.11" + }, "dependencies": { "is-extglob": { "version": "2.1.1", @@ -2771,7 +4077,10 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } } } }, @@ -2780,7 +4089,12 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "dev": true, - "optional": true + "optional": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } }, "https-browserify": { "version": "0.0.1", @@ -2799,18 +4113,29 @@ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, + "requires": { + "postcss": "^6.0.1" + }, "dependencies": { "ansi-styles": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, "chalk": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + } }, "has-flag": { "version": "2.0.0", @@ -2822,13 +4147,21 @@ "version": "6.0.8", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", - "dev": true + "dev": true, + "requires": { + "chalk": "^2.0.1", + "source-map": "^0.5.6", + "supports-color": "^4.2.0" + } }, "supports-color": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", - "dev": true + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } } } }, @@ -2849,7 +4182,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true + "dev": true, + "requires": { + "repeating": "^2.0.0" + } }, "indexes-of": { "version": "1.0.1", @@ -2867,7 +4203,11 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } }, "inherits": { "version": "2.0.3", @@ -2879,7 +4219,10 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", - "dev": true + "dev": true, + "requires": { + "meow": "^3.3.0" + } }, "interpret": { "version": "1.0.3", @@ -2891,7 +4234,10 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "dev": true + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } }, "invert-kv": { "version": "1.0.0", @@ -2927,7 +4273,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } }, "is-buffer": { "version": "1.1.5", @@ -2939,7 +4288,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } }, "is-dotfile": { "version": "1.0.3", @@ -2951,7 +4303,10 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } }, "is-extendable": { "version": "0.1.1", @@ -2969,25 +4324,37 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } }, "is-path-cwd": { "version": "1.0.0", @@ -2999,13 +4366,19 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } }, "is-path-inside": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } }, "is-plain-obj": { "version": "1.1.0", @@ -3029,7 +4402,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "dev": true + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } }, "is-typedarray": { "version": "1.0.0", @@ -3054,7 +4430,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true + "dev": true, + "requires": { + "isarray": "1.0.0" + } }, "isstream": { "version": "0.1.2", @@ -3079,7 +4458,11 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", - "dev": true + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^2.6.0" + } }, "jsbn": { "version": "0.1.1", @@ -3117,7 +4500,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } }, "json-stringify-safe": { "version": "5.0.1", @@ -3150,6 +4536,12 @@ "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", "dev": true, "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -3164,7 +4556,10 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } }, "lazy-cache": { "version": "1.0.4", @@ -3176,19 +4571,37 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } }, "less": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/less/-/less-2.7.2.tgz", "integrity": "sha1-No1sxz4fsDmBGDKAkYdDxdz5s98=", - "dev": true + "dev": true, + "requires": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "^2.72.0", + "source-map": "^0.5.3" + } }, "less-loader": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.0.5.tgz", "integrity": "sha1-rhVadAbKxqzSk9eFWH/P8PR4xN0=", "dev": true, + "requires": { + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^2.3.0" + }, "dependencies": { "clone": { "version": "2.1.1", @@ -3202,7 +4615,14 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } }, "loader-runner": { "version": "2.3.0", @@ -3214,13 +4634,22 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" + } }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } }, "lodash": { "version": "4.17.4", @@ -3274,13 +4703,20 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true + "dev": true, + "requires": { + "js-tokens": "^3.0.0" + } }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } }, "lower-case": { "version": "1.1.4", @@ -3298,7 +4734,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", - "dev": true + "dev": true, + "requires": { + "pify": "^2.3.0" + } }, "map-obj": { "version": "1.0.1", @@ -3322,13 +4761,29 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -3354,13 +4809,32 @@ "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } }, "miller-rabin": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", - "dev": true + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } }, "mime": { "version": "1.3.6", @@ -3378,7 +4852,10 @@ "version": "2.1.15", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true + "dev": true, + "requires": { + "mime-db": "~1.27.0" + } }, "minimalistic-assert": { "version": "1.0.0", @@ -3396,7 +4873,10 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } }, "minimist": { "version": "0.0.8", @@ -3408,7 +4888,10 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "ms": { "version": "2.0.0", @@ -3420,7 +4903,11 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.1.1.tgz", "integrity": "sha1-bn3oalcIcqsXBYrepxYLvsqBTd4=", - "dev": true + "dev": true, + "requires": { + "dns-packet": "^1.0.1", + "thunky": "^0.1.0" + } }, "multicast-dns-service-types": { "version": "1.1.0", @@ -3439,7 +4926,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", - "dev": true + "dev": true, + "requires": { + "xml-char-classes": "^1.0.0" + } }, "negotiator": { "version": "0.6.1", @@ -3451,7 +4941,10 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.1.tgz", "integrity": "sha1-euuhxzpSGEJlVUt9wDuvcg34AIE=", - "dev": true + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } }, "node-forge": { "version": "0.6.33", @@ -3464,6 +4957,31 @@ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.1.4", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "0.0.1", + "os-browserify": "^0.2.0", + "path-browserify": "0.0.0", + "process": "^0.11.0", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.0.5", + "stream-browserify": "^2.0.1", + "stream-http": "^2.3.1", + "string_decoder": "^0.10.25", + "timers-browserify": "^2.0.2", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.10.3", + "vm-browserify": "0.0.4" + }, "dependencies": { "string_decoder": { "version": "0.10.31", @@ -3477,13 +4995,22 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } }, "normalize-range": { "version": "0.1.2", @@ -3495,13 +5022,22 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } }, "nth-check": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } }, "num2fraction": { "version": "1.2.2", @@ -3532,7 +5068,11 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } }, "obuf": { "version": "1.1.1", @@ -3545,12 +5085,25 @@ "resolved": "https://registry.npmjs.org/offline-plugin/-/offline-plugin-4.8.3.tgz", "integrity": "sha1-npW9NC6irINrABuB8gTEBjhpTWw=", "dev": true, + "requires": { + "deep-extend": "^0.4.0", + "ejs": "^2.3.4", + "loader-utils": "0.2.x", + "minimatch": "^3.0.3", + "slash": "^1.0.0" + }, "dependencies": { "loader-utils": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } } } }, @@ -3558,7 +5111,10 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true + "dev": true, + "requires": { + "ee-first": "1.1.1" + } }, "on-headers": { "version": "1.0.1", @@ -3570,31 +5126,48 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true + "dev": true, + "requires": { + "wrappy": "1" + } }, "opn": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", - "dev": true + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } }, "optimist": { "version": "0.2.8", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz", "integrity": "sha1-6YGrfiaLRXlIWTtVZ0wJmoFcrDE=", - "dev": true + "dev": true, + "requires": { + "wordwrap": ">=0.0.1 <0.1.0" + } }, "original": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", "dev": true, + "requires": { + "url-parse": "1.0.x" + }, "dependencies": { "url-parse": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", - "dev": true + "dev": true, + "requires": { + "querystringify": "0.0.x", + "requires-port": "1.0.x" + } } } }, @@ -3614,7 +5187,10 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true + "dev": true, + "requires": { + "lcid": "^1.0.0" + } }, "os-tmpdir": { "version": "1.0.2", @@ -3626,7 +5202,12 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" + } }, "p-limit": { "version": "1.1.0", @@ -3638,7 +5219,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } }, "p-map": { "version": "1.1.1", @@ -3656,25 +5240,44 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true + "dev": true, + "requires": { + "no-case": "^2.2.0" + } }, "parse-asn1": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "dev": true + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" + } }, "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } }, "parseurl": { "version": "1.3.1", @@ -3716,13 +5319,25 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } }, "pbkdf2": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz", "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=", - "dev": true + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } }, "performance-now": { "version": "0.2.0", @@ -3747,19 +5362,30 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true + "dev": true, + "requires": { + "find-up": "^2.1.0" + } }, "portfinder": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", "dev": true, + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, "dependencies": { "async": { "version": "1.5.2", @@ -3774,12 +5400,21 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + }, "dependencies": { "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -3787,79 +5422,132 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" + } }, "postcss-colormin": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", - "dev": true + "dev": true, + "requires": { + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" + } }, "postcss-convert-values": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" + } }, "postcss-discard-comments": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.14" + } }, "postcss-discard-duplicates": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.4" + } }, "postcss-discard-empty": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.14" + } }, "postcss-discard-overridden": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.16" + } }, "postcss-discard-unused": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.14", + "uniqs": "^2.0.0" + } }, "postcss-filter-plugins": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.4", + "uniqid": "^4.0.0" + } }, "postcss-merge-idents": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "dev": true + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" + } }, "postcss-merge-longhand": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.4" + } }, "postcss-merge-rules": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "dev": true, + "requires": { + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" + }, "dependencies": { "browserslist": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } } } }, @@ -3873,43 +5561,75 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", - "dev": true + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + } }, "postcss-minify-gradients": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" + } }, "postcss-minify-params": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", - "dev": true + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" + } }, "postcss-minify-selectors": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", - "dev": true + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" + } }, "postcss-modules-extract-imports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", "dev": true, + "requires": { + "postcss": "^6.0.1" + }, "dependencies": { "ansi-styles": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, "chalk": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + } }, "has-flag": { "version": "2.0.0", @@ -3921,13 +5641,21 @@ "version": "6.0.8", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", - "dev": true + "dev": true, + "requires": { + "chalk": "^2.0.1", + "source-map": "^0.5.6", + "supports-color": "^4.2.0" + } }, "supports-color": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", - "dev": true + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } } } }, @@ -3936,18 +5664,30 @@ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, "dependencies": { "ansi-styles": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, "chalk": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + } }, "has-flag": { "version": "2.0.0", @@ -3959,13 +5699,21 @@ "version": "6.0.8", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", - "dev": true + "dev": true, + "requires": { + "chalk": "^2.0.1", + "source-map": "^0.5.6", + "supports-color": "^4.2.0" + } }, "supports-color": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", - "dev": true + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } } } }, @@ -3974,18 +5722,30 @@ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, "dependencies": { "ansi-styles": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, "chalk": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + } }, "has-flag": { "version": "2.0.0", @@ -3997,13 +5757,21 @@ "version": "6.0.8", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", - "dev": true + "dev": true, + "requires": { + "chalk": "^2.0.1", + "source-map": "^0.5.6", + "supports-color": "^4.2.0" + } }, "supports-color": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", - "dev": true + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } } } }, @@ -4012,18 +5780,30 @@ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + }, "dependencies": { "ansi-styles": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, "chalk": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + } }, "has-flag": { "version": "2.0.0", @@ -4035,13 +5815,21 @@ "version": "6.0.8", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", - "dev": true + "dev": true, + "requires": { + "chalk": "^2.0.1", + "source-map": "^0.5.6", + "supports-color": "^4.2.0" + } }, "supports-color": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", - "dev": true + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } } } }, @@ -4049,61 +5837,105 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.5" + } }, "postcss-normalize-url": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", - "dev": true + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" + } }, "postcss-ordered-values": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" + } }, "postcss-reduce-idents": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + } }, "postcss-reduce-initial": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.4" + } }, "postcss-reduce-transforms": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", - "dev": true + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" + } }, "postcss-safe-parser": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-1.0.7.tgz", "integrity": "sha1-Q70MjITV99hHTeglxpnk2ryscqg=", - "dev": true + "dev": true, + "requires": { + "postcss": "^5.0.18" + } }, "postcss-selector-parser": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true + "dev": true, + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } }, "postcss-svgo": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", - "dev": true + "dev": true, + "requires": { + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" + } }, "postcss-unique-selectors": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", - "dev": true + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + } }, "postcss-value-parser": { "version": "3.3.0", @@ -4115,7 +5947,12 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", - "dev": true + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + } }, "prepend-http": { "version": "1.0.4", @@ -4133,7 +5970,11 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true + "dev": true, + "requires": { + "renderkid": "^2.0.1", + "utila": "~0.4" + } }, "private": { "version": "0.1.7", @@ -4158,13 +5999,20 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dev": true, - "optional": true + "optional": true, + "requires": { + "asap": "~2.0.3" + } }, "proxy-addr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz", "integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=", - "dev": true + "dev": true, + "requires": { + "forwarded": "~0.1.0", + "ipaddr.js": "1.3.0" + } }, "prr": { "version": "0.0.0", @@ -4176,7 +6024,14 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "dev": true + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" + } }, "punycode": { "version": "1.4.1", @@ -4200,7 +6055,11 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } }, "querystring": { "version": "0.2.0", @@ -4225,18 +6084,28 @@ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, "dependencies": { "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, @@ -4244,7 +6113,10 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, @@ -4252,7 +6124,10 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } }, "range-parser": { "version": "1.2.0", @@ -4264,25 +6139,41 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } }, "read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, "dependencies": { "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } } } }, @@ -4290,19 +6181,40 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.0", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" + } }, "readdirp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" + } }, "recast": { "version": "0.11.23", "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" + }, "dependencies": { "esprima": { "version": "3.1.3", @@ -4316,13 +6228,22 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } }, "reduce-css-calc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, + "requires": { + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" + }, "dependencies": { "balanced-match": { "version": "0.4.2", @@ -4337,6 +6258,9 @@ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "dev": true, + "requires": { + "balanced-match": "^0.4.2" + }, "dependencies": { "balanced-match": { "version": "0.4.2", @@ -4362,19 +6286,33 @@ "version": "0.9.11", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.11.tgz", "integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } }, "regex-cache": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", - "dev": true + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3", + "is-primitive": "^2.0.0" + } }, "regexpu-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } }, "regjsgen": { "version": "0.2.0", @@ -4387,6 +6325,9 @@ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, "dependencies": { "jsesc": { "version": "0.5.0", @@ -4413,6 +6354,13 @@ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", "dev": true, + "requires": { + "css-select": "^1.1.0", + "dom-converter": "~0.1", + "htmlparser2": "~3.3.0", + "strip-ansi": "^3.0.0", + "utila": "~0.3" + }, "dependencies": { "utila": { "version": "0.3.3", @@ -4438,14 +6386,41 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } }, "request": { "version": "2.81.0", "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", "dev": true, - "optional": true + "optional": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + } }, "require-directory": { "version": "2.1.1", @@ -4469,19 +6444,29 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true + "dev": true, + "requires": { + "align-text": "^0.1.1" + } }, "rimraf": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true + "dev": true, + "requires": { + "glob": "^7.0.5" + } }, "ripemd160": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true + "dev": true, + "requires": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } }, "safe-buffer": { "version": "5.1.1", @@ -4500,12 +6485,21 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", "dev": true, + "requires": { + "ajv": "^5.0.0" + }, "dependencies": { "ajv": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz", "integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=", - "dev": true + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "json-schema-traverse": "^0.3.0", + "json-stable-stringify": "^1.0.1" + } } } }, @@ -4519,7 +6513,10 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.9.1.tgz", "integrity": "sha1-zdpEktcNSGVw+HxlVGAjVY4d+lo=", - "dev": true + "dev": true, + "requires": { + "node-forge": "0.6.33" + } }, "semver": { "version": "5.3.0", @@ -4532,12 +6529,30 @@ "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", "dev": true, + "requires": { + "debug": "2.6.7", + "depd": "~1.1.0", + "destroy": "~1.0.4", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.0", + "fresh": "0.5.0", + "http-errors": "~1.6.1", + "mime": "1.3.4", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.3.1" + }, "dependencies": { "debug": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "mime": { "version": "1.3.4", @@ -4551,13 +6566,28 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz", "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=", - "dev": true + "dev": true, + "requires": { + "accepts": "~1.3.3", + "batch": "0.6.1", + "debug": "2.6.8", + "escape-html": "~1.0.3", + "http-errors": "~1.6.1", + "mime-types": "~2.1.15", + "parseurl": "~1.3.1" + } }, "serve-static": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=", - "dev": true + "dev": true, + "requires": { + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "parseurl": "~1.3.1", + "send": "0.15.3" + } }, "set-blocking": { "version": "2.0.0", @@ -4587,7 +6617,10 @@ "version": "2.4.8", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", - "dev": true + "dev": true, + "requires": { + "inherits": "^2.0.1" + } }, "signal-exit": { "version": "3.0.2", @@ -4606,13 +6639,20 @@ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, - "optional": true + "optional": true, + "requires": { + "hoek": "2.x.x" + } }, "sockjs": { "version": "0.3.18", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^2.0.2" + }, "dependencies": { "uuid": { "version": "2.0.3", @@ -4627,12 +6667,23 @@ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", "dev": true, + "requires": { + "debug": "^2.6.6", + "eventsource": "0.1.6", + "faye-websocket": "~0.11.0", + "inherits": "^2.0.1", + "json3": "^3.3.2", + "url-parse": "^1.1.8" + }, "dependencies": { "faye-websocket": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "dev": true + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } } } }, @@ -4640,7 +6691,10 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } }, "source-list-map": { "version": "0.1.8", @@ -4658,13 +6712,19 @@ "version": "0.4.15", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", - "dev": true + "dev": true, + "requires": { + "source-map": "^0.5.6" + } }, "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true + "dev": true, + "requires": { + "spdx-license-ids": "^1.0.2" + } }, "spdx-expression-parse": { "version": "1.0.4", @@ -4682,13 +6742,30 @@ "version": "3.4.7", "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", - "dev": true + "dev": true, + "requires": { + "debug": "^2.6.8", + "handle-thing": "^1.2.5", + "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", + "select-hose": "^2.0.0", + "spdy-transport": "^2.0.18" + } }, "spdy-transport": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", - "dev": true + "dev": true, + "requires": { + "debug": "^2.6.8", + "detect-node": "^2.0.3", + "hpack.js": "^2.1.6", + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" + } }, "sprintf-js": { "version": "1.0.3", @@ -4702,6 +6779,16 @@ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", "dev": true, "optional": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -4722,13 +6809,24 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } }, "stream-http": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", - "dev": true + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.2.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } }, "strict-uri-encode": { "version": "1.1.0", @@ -4736,17 +6834,25 @@ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", "dev": true }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } }, "stringstream": { "version": "0.0.5", @@ -4759,25 +6865,38 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } }, "style-loader": { "version": "0.18.2", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.18.2.tgz", "integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==", - "dev": true + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^0.3.0" + } }, "supports-color": { "version": "2.0.0", @@ -4789,7 +6908,16 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", - "dev": true + "dev": true, + "requires": { + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" + } }, "tapable": { "version": "0.2.7", @@ -4813,7 +6941,10 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.2.tgz", "integrity": "sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=", - "dev": true + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } }, "to-arraybuffer": { "version": "1.0.1", @@ -4838,7 +6969,10 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", "dev": true, - "optional": true + "optional": true, + "requires": { + "punycode": "^1.4.1" + } }, "trim-newlines": { "version": "1.0.0", @@ -4863,7 +6997,10 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, - "optional": true + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } }, "tweetnacl": { "version": "0.14.5", @@ -4876,19 +7013,34 @@ "version": "1.6.15", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.15" + } }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, "dependencies": { "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } } } }, @@ -4903,7 +7055,12 @@ "version": "0.4.6", "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", - "dev": true + "dev": true, + "requires": { + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" + } }, "uniq": { "version": "1.0.1", @@ -4915,7 +7072,10 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", - "dev": true + "dev": true, + "requires": { + "macaddress": "^0.2.8" + } }, "uniqs": { "version": "2.0.0", @@ -4940,6 +7100,10 @@ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, "dependencies": { "punycode": { "version": "1.3.2", @@ -4954,6 +7118,10 @@ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz", "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=", "dev": true, + "requires": { + "querystringify": "~1.0.0", + "requires-port": "1.0.x" + }, "dependencies": { "querystringify": { "version": "1.0.0", @@ -4974,6 +7142,9 @@ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, + "requires": { + "inherits": "2.0.1" + }, "dependencies": { "inherits": { "version": "2.0.1", @@ -5012,13 +7183,20 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true + "dev": true, + "requires": { + "user-home": "^1.1.1" + } }, "validate-npm-package-license": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true + "dev": true, + "requires": { + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" + } }, "vary": { "version": "1.1.1", @@ -5037,55 +7215,110 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", "dev": true, - "optional": true + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true + "dev": true, + "requires": { + "indexof": "0.0.1" + } }, "walk": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.9.tgz", "integrity": "sha1-MbTbZnjyrgHDnqn7hyWpAx5Vins=", - "dev": true + "dev": true, + "requires": { + "foreachasync": "^3.0.0" + } }, "watch-less": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/watch-less/-/watch-less-0.0.4.tgz", "integrity": "sha1-EY10jXCwtm4wK2jcfmd4cM5Ci7U=", - "dev": true + "dev": true, + "requires": { + "less": ">=2.2.0 <3.0.0", + "optimist": ">=0.2.6 <0.3", + "walk": ">= 2.0.1 <3.0.0" + } }, "watchpack": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", - "dev": true + "dev": true, + "requires": { + "async": "^2.1.2", + "chokidar": "^1.7.0", + "graceful-fs": "^4.1.2" + } }, "wbuf": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", - "dev": true + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } }, "webpack": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.3.0.tgz", "integrity": "sha1-zi+eB2Vmq6kfdIhxM6iD/X2hh7w=", "dev": true, + "requires": { + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^5.1.5", + "ajv-keywords": "^2.0.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.3.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^3.1.0", + "tapable": "~0.2.5", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^6.0.0" + }, "dependencies": { "ajv": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz", "integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=", - "dev": true + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "json-schema-traverse": "^0.3.0", + "json-stable-stringify": "^1.0.1" + } }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -5093,19 +7326,52 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.11.0.tgz", "integrity": "sha1-CWkdCXOjCtH4Ksc6EuIIfwpHVPk=", - "dev": true + "dev": true, + "requires": { + "memory-fs": "~0.4.1", + "mime": "^1.3.4", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3" + } }, "webpack-dev-server": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.6.1.tgz", "integrity": "sha1-Cykqnaltr4CmWYj2n4e0Fm5d7+c=", "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^1.6.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "del": "^3.0.0", + "express": "^4.13.3", + "html-entities": "^1.2.0", + "http-proxy-middleware": "~0.17.4", + "internal-ip": "^1.2.0", + "loglevel": "^1.4.1", + "opn": "4.0.2", + "portfinder": "^1.0.9", + "selfsigned": "^1.9.1", + "serve-index": "^1.7.2", + "sockjs": "0.3.18", + "sockjs-client": "1.1.4", + "spdy": "^3.4.1", + "strip-ansi": "^3.0.0", + "supports-color": "^3.1.1", + "webpack-dev-middleware": "^1.11.0", + "yargs": "^6.0.0" + }, "dependencies": { "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -5114,6 +7380,10 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", "integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==", "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.5.3" + }, "dependencies": { "source-list-map": { "version": "2.0.0", @@ -5127,7 +7397,10 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "dev": true + "dev": true, + "requires": { + "websocket-extensions": ">=0.1.1" + } }, "websocket-extensions": { "version": "0.1.1", @@ -5163,7 +7436,11 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } }, "wrappy": { "version": "1.0.2", @@ -5194,6 +7471,21 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -5205,7 +7497,12 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } } } }, @@ -5214,6 +7511,9 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", "dev": true, + "requires": { + "camelcase": "^3.0.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", diff --git a/package.json b/package.json index 4efa2a7..d03f45b 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,13 @@ "type": "git", "url": "git+https://github.com/renanlecaro/minimage.git" }, - "keywords": ["canvas", "image", "mobile", "responsive", "minimal"], + "keywords": [ + "canvas", + "image", + "mobile", + "responsive", + "minimal" + ], "author": "Renan LE CARO", "license": "ISC", "bugs": { diff --git a/src/canvasMergerAndDonwloaderLink.js b/src/canvasMergerAndDonwloaderLink.js index 6898b94..d2c221e 100644 --- a/src/canvasMergerAndDonwloaderLink.js +++ b/src/canvasMergerAndDonwloaderLink.js @@ -1,14 +1,12 @@ -import { showDownloadOptions } from "./showDownloadOptions.js"; - + export function makeDownloadLink( link, { OrginalImage, canvas, originalFileName } ) { // Download button function downloadImage(e) { - e.preventDefault(); - let { failed, suceeded } = showDownloadOptions({}); - triggerDownload(canvas, originalFileName, OrginalImage, failed, suceeded); + e.preventDefault(); + triggerDownload(canvas, originalFileName, OrginalImage); } link.addEventListener("click", downloadImage); } diff --git a/src/index.html b/src/index.html index 5523858..81018a8 100644 --- a/src/index.html +++ b/src/index.html @@ -1,5 +1,6 @@ + Minimage : minimal image editor @@ -12,7 +13,7 @@ - + @@ -25,12 +26,7 @@ - +
diff --git a/src/showDownloadOptions.js b/src/showDownloadOptions.js deleted file mode 100644 index 370f698..0000000 --- a/src/showDownloadOptions.js +++ /dev/null @@ -1,95 +0,0 @@ -import { createModal } from "./modal.js"; - -// Start downloading in the background, show modal with some options -export function showDownloadOptions({}) { - return createModal("file-download", ({ modal, closeModal }) => { - modal.innerHTML = ` -

Your download is getting ready

- - ${addToHomeScreen()} - - - - - - This app is open source. See the source code on github. - - - - - -

Pressing "X" will switch between the last 2 used colors.

-

You can edit transparent pngs and keep them transparent

-

Clicking the background around the picture will switch between light and dark background

- -

You can paste an image in the page and it will be loaded

-

You can drop an image file in the page and it will be loaded

-

You can right click the canvas and copy its content

-

Pressing ctrl+s will trigger the download of the picture

- - - - - `; - function reportDLStatus(className, text) { - let p = document.getElementById("downloadIndicator"); - p.classList.add(className); - p.innerHTML = text; - } - - modal.addEventListener("click", ev => { - let targetClass = ev.target.getAttribute("class"); - - if (targetClass == "keepDrawing") return closeModal(); - - if (targetClass == "newPicture") return window.location.reload(); - - return console.log("unrecognized click ", ev); - }); - - let failed = false; - return { - failed(exeption) { - failed = true; - reportDLStatus( - "failed", - ` - It looks like the download failed, sorry about that. - It works best on google chrome. -
${exeption.stack}
- ` - ); - }, - suceeded() { - if (failed) return; - reportDLStatus( - "sucess", - ` -
Download started
- - - ` - ); - } - }; - }); -} - -function addToHomeScreen() { - // Show invitation to add to home screen if not already the - //case - - if (!navigator.userAgent.match(/Android/i)) return ""; - - if (window.location.search === "?fromHomeScreen") { - return ""; - } - - return ` -

You can add this app to your home screen and it will work - offline and in full screen. -

- `; -} diff --git a/sw.js b/sw.js index 50c28e7..2ce0350 100644 --- a/sw.js +++ b/sw.js @@ -1,3 +1,3 @@ -var __wpo = {"assets":{"main":["/bundle.c14f881344d79b6d5899.js","/bundle.c14f881344d79b6d5899.css","/"],"additional":[],"optional":[]},"externals":[],"hashesMap":{"fff89662214150964c9ed3c0a2260a3477f67dd1":"/bundle.c14f881344d79b6d5899.js","08e822cf9116acd1a8258924bf7588ba78e29d19":"/bundle.c14f881344d79b6d5899.css","397d9d1001d7b41ea5cb10a2ba9750be6a1ebffe":"/"},"strategy":"changed","responseStrategy":"network-first","version":"8/2/2017, 5:17:18 PM","name":"webpack-offline","pluginVersion":"4.8.3","relativePaths":false}; +var __wpo = {"assets":{"main":["/bundle.db4a3dd38e813528b682.js","/bundle.db4a3dd38e813528b682.css","/"],"additional":[],"optional":[]},"externals":[],"hashesMap":{"b998ec496fea5ca79f3017573bbac40636308b8a":"/bundle.db4a3dd38e813528b682.js","7c84cf643c9d7cf363dc91cdce42b24e0ea25eb2":"/bundle.db4a3dd38e813528b682.css","3d456ac43a22f807a35fcda9251307c7eee6109d":"/"},"strategy":"changed","responseStrategy":"network-first","version":"6/13/2018, 7:13:03 PM","name":"webpack-offline","pluginVersion":"4.8.3","relativePaths":false}; !function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var t={};n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="/",n(n.s=0)}([function(e,n,t){"use strict";function r(e,n){return caches.match(e,{cacheName:n}).then(function(t){return a()?t:c(t).then(function(t){return caches.open(n).then(function(n){return n.put(e,t)}).then(function(){return t})})}).catch(function(){})}function o(e,n){return e+(-1!==e.indexOf("?")?"&":"?")+"__uncache="+encodeURIComponent(n)}function i(e){return"navigate"===e.mode||e.headers.get("Upgrade-Insecure-Requests")||-1!==(e.headers.get("Accept")||"").indexOf("text/html")}function a(e){return!e||!e.redirected||!e.ok||"opaqueredirect"===e.type}function c(e){return a(e)?Promise.resolve(e):("body"in e?Promise.resolve(e.body):e.blob()).then(function(n){return new Response(n,{headers:e.headers,status:e.status})})}function s(e){return Object.keys(e).reduce(function(n,t){return n[t]=e[t],n},{})}function u(e,n){console.groupCollapsed("[SW]:",e),n.forEach(function(e){console.log("Asset:",e)}),console.groupEnd()}if(function(){var e=ExtendableEvent.prototype.waitUntil,n=FetchEvent.prototype.respondWith,t=new WeakMap;ExtendableEvent.prototype.waitUntil=function(n){var r=this,o=t.get(r);return o?void o.push(Promise.resolve(n)):(o=[Promise.resolve(n)],t.set(r,o),e.call(r,Promise.resolve().then(function e(){var n=o.length;return Promise.all(o.map(function(e){return e.catch(function(){})})).then(function(){return o.length!=n?e():(t.delete(r),Promise.all(o))})})))},FetchEvent.prototype.respondWith=function(e){return this.waitUntil(e),n.call(this,e)}}(),void 0===f)var f=!1;!function(e,n){function t(){if(!R.additional.length)return Promise.resolve();f&&console.log("[SW]:","Caching additional");var e=void 0;return e="changed"===b?l("additional"):a("additional"),e.catch(function(e){console.error("[SW]:","Cache section `additional` failed to load")})}function a(n){var t=R[n];return caches.open(E).then(function(n){return w(n,t,{bust:e.version,request:e.prefetchRequest})}).then(function(){u("Cached assets: "+n,t)}).catch(function(e){throw console.error(e),e})}function l(n){return d().then(function(t){if(!t)return a(n);var r=t[0],o=t[1],i=t[2],c=i.hashmap,s=i.version;if(!i.hashmap||s===e.version)return a(n);var f=Object.keys(c).map(function(e){return c[e]}),l=o.map(function(e){var n=new URL(e.url);return n.search="",n.hash="",n.toString()}),h=R[n],d=[],p=h.filter(function(e){return-1===l.indexOf(e)||-1===f.indexOf(e)});Object.keys(W).forEach(function(e){var n=W[e];if(-1!==h.indexOf(n)&&-1===p.indexOf(n)&&-1===d.indexOf(n)){var t=c[e];t&&-1!==l.indexOf(t)?d.push([t,n]):p.push(n)}}),u("Changed assets: "+n,p),u("Moved assets: "+n,d);var v=Promise.all(d.map(function(e){return r.match(e[0]).then(function(n){return[e[1],n]})}));return caches.open(E).then(function(n){var t=v.then(function(e){return Promise.all(e.map(function(e){return n.put(e[0],e[1])}))});return Promise.all([t,w(n,p,{bust:e.version,request:e.prefetchRequest})])})})}function h(){return caches.keys().then(function(e){var n=e.map(function(e){if(0===e.indexOf(P)&&0!==e.indexOf(E))return console.log("[SW]:","Delete cache:",e),caches.delete(e)});return Promise.all(n)})}function d(){return caches.keys().then(function(e){for(var n=e.length,t=void 0;n--&&(t=e[n],0!==t.indexOf(P)););if(t){var r=void 0;return caches.open(t).then(function(e){return r=e,e.match(new URL(j,location).toString())}).then(function(e){if(e)return Promise.all([r,r.keys(),e.json()])})}})}function p(){return caches.open(E).then(function(n){var t=new Response(JSON.stringify({version:e.version,hashmap:W}));return n.put(new URL(j,location).toString(),t)})}function v(e,n,t){return r(t,E).then(function(r){return r?(f&&console.log("[SW]:","URL ["+t+"]("+n+") from cache"),r):fetch(e.request).then(function(r){return r.ok?(f&&console.log("[SW]:","URL ["+n+"] from network"),t===n&&function(){var t=r.clone(),o=caches.open(E).then(function(e){return e.put(n,t)}).then(function(){console.log("[SW]:","Cache asset: "+n)});e.waitUntil(o)}(),r):(f&&console.log("[SW]:","URL ["+n+"] wrong response: ["+r.status+"] "+r.type),r)})})}function g(e,n,t){return fetch(e.request).then(function(e){if(e.ok)return f&&console.log("[SW]:","URL ["+n+"] from network"),e;throw new Error("Response is not ok")}).catch(function(){return f&&console.log("[SW]:","URL ["+n+"] from cache if possible"),r(t,E)})}function m(e){return e.catch(function(){}).then(function(e){var n=e&&e.ok,t=e&&"opaqueredirect"===e.type;return n||t&&!F?e:(f&&console.log("[SW]:","Loading navigation fallback ["+C+"] from cache"),r(C,E))})}function w(e,n,t){var r=!1!==t.allowLoaders,i=t&&t.bust,a=t.request||{credentials:"omit",mode:"cors"};return Promise.all(n.map(function(e){return i&&(e=o(e,i)),fetch(e,a).then(c)})).then(function(o){if(o.some(function(e){return!e.ok}))return Promise.reject(new Error("Wrong response status"));var i=[],a=o.map(function(t,o){return r&&i.push(y(n[o],t)),e.put(n[o],t)});return i.length?function(){var r=s(t);r.allowLoaders=!1;var o=a;a=Promise.all(i).then(function(t){var i=[].concat.apply([],t);return n.length&&(o=o.concat(w(e,i,r))),Promise.all(o)})}():a=Promise.all(a),a})}function y(e,n){var t=Object.keys(U).map(function(t){if(-1!==U[t].indexOf(e)&&O[t])return O[t](n.clone())}).filter(function(e){return!!e});return Promise.all(t).then(function(e){return[].concat.apply([],e)})}function x(e){var n=e.url,t=new URL(n),r=void 0;r="navigate"===e.mode?"navigate":t.origin===location.origin?"same-origin":"cross-origin";for(var o=0;o