2&&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 Keep drawing on that picture \n Start with a new picture \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 Keep drawing on that picture \\n Start with a new picture \\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 Keep drawing on that picture \n Start with a new picture \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":"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","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 This app requires javascript to be enabled, sorry.
\ No newline at end of file
+ Minimage : minimal image editor This app requires javascript to be enabled, sorry.
\ 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 @@
Pick a photo to draw on it
-
-
+
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()}
-
-
- Like our facebook page
-
-
-
-
- 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
- Keep drawing on that picture
- Start with a new picture
- `
- );
- }
- };
- });
-}
-
-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