diff options
-rw-r--r-- | .gitignore | 4 | ||||
-rw-r--r-- | .npmignore | 10 | ||||
-rw-r--r-- | dist/vanilla-yo-notification.js | 2 | ||||
-rw-r--r-- | dist/vanilla-yo-notification.js.map | 1 | ||||
-rw-r--r-- | karma.conf.js | 61 | ||||
-rw-r--r-- | package.json | 52 | ||||
-rw-r--r-- | src/config.interface.ts | 6 | ||||
-rw-r--r-- | src/index.html | 22 | ||||
-rw-r--r-- | src/index.spec.ts | 5 | ||||
-rw-r--r-- | src/index.ts | 3 | ||||
-rw-r--r-- | src/styles/style.css | 38 | ||||
-rw-r--r-- | src/vanilla.yo.notification.ts | 76 | ||||
-rw-r--r-- | src/vendor.ts | 4 | ||||
-rw-r--r-- | tests/unit/spec-bundle.js | 9 | ||||
-rw-r--r-- | tsconfig.json | 19 | ||||
-rw-r--r-- | tslint.json | 30 | ||||
-rw-r--r-- | typings.json | 7 | ||||
-rw-r--r-- | webpack.config.js | 66 |
18 files changed, 415 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49c90de --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +# dependencies +/node_modules + +package-lock.json
\ No newline at end of file diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..57220e4 --- /dev/null +++ b/.npmignore @@ -0,0 +1,10 @@ +# Build results +dist/ +typings/**/* + +# Others +~$* +*~ +node_modules/ +src/build/ +coverage/ diff --git a/dist/vanilla-yo-notification.js b/dist/vanilla-yo-notification.js new file mode 100644 index 0000000..c238021 --- /dev/null +++ b/dist/vanilla-yo-notification.js @@ -0,0 +1,2 @@ +!function(t){function n(o){if(e[o])return e[o].exports;var i=e[o]={i:o,l:!1,exports:{}};return t[o].call(i.exports,i,i.exports,n),i.l=!0,i.exports}var e={};n.m=t,n.c=e,n.d=function(t,e,o){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:o})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=0)}([function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var o=e(1);window.VanillaYoNotification=o.default},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),e(2);var o=function(){function t(){this.defaultConfig={content:"",footer:"",timeout:3e3,title:""},this.init()}return t.prototype.init=function(){this.buildContainers()},t.prototype.buildContainers=function(){var t=document.createElement("div");t.className="notif-mainContainer topRight",this.notifInner=document.createElement("div"),this.notifInner.className="notif-inner",t.appendChild(this.notifInner),document.body.appendChild(t)},t.prototype.show=function(t){var n=this,e=document.createElement("div");e.className="vanilla-yo-notification",this.notificationTemplate='\n <div class="notification_container">\n <div class="notification_header">\n '+(t.title?t.title:this.defaultConfig.title)+'\n </div>\n <div class="notification_body">\n '+(t.content?t.content:this.defaultConfig.content)+'\n </div>\n <div class="notification_footer">\n '+(t.footer?t.footer:this.defaultConfig.footer)+"\n </div>\n </div>\n ",e.innerHTML=this.notificationTemplate,this.notifInner.appendChild(e),setTimeout(function(){n.destroyNotification(e)},t.timeout?t.timeout:this.defaultConfig.timeout)},t.prototype.destroyNotification=function(t){this.notifInner.removeChild(t)},t}();n.default=o},function(t,n,e){var o=e(3);"string"==typeof o&&(o=[[t.i,o,""]]);var i={};i.transform=void 0;e(5)(o,i);o.locals&&(t.exports=o.locals)},function(t,n,e){n=t.exports=e(4)(void 0),n.push([t.i,'\n\n.notif-mainContainer {\n z-index: 999;\n position: fixed;\n width: 350px;\n max-width: 98%;\n font-family: "Segoe UI","Tahoma","Calibri","Verdana",sans-serif;\n color: #999;\n box-sizing: border-box;\n}\n\n.notif-mainContainer.topRight{\n top: 8px;\n right: 8px;\n}\n\n.notif-inner {\n display: flex;\n flex-direction: column;\n}\n\n.vanilla-yo-notification{\n width: 250px;\n background: #58a758;\n color: white;\n position: relative;\n cursor: pointer;\n padding: 8px;\n margin-bottom: 12px;\n display: flex;\n}\n\n\n.notification_header{\n\tfont-size: 15px;\n font-weight: bold\n}',""])},function(t,n){function e(t,n){var e=t[1]||"",i=t[3];if(!i)return e;if(n&&"function"==typeof btoa){var r=o(i);return[e].concat(i.sources.map(function(t){return"/*# sourceURL="+i.sourceRoot+t+" */"})).concat([r]).join("\n")}return[e].join("\n")}function o(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}t.exports=function(t){var n=[];return n.toString=function(){return this.map(function(n){var o=e(n,t);return n[2]?"@media "+n[2]+"{"+o+"}":o}).join("")},n.i=function(t,e){"string"==typeof t&&(t=[[null,t,""]]);for(var o={},i=0;i<this.length;i++){var r=this[i][0];"number"==typeof r&&(o[r]=!0)}for(i=0;i<t.length;i++){var a=t[i];"number"==typeof a[0]&&o[a[0]]||(e&&!a[2]?a[2]=e:e&&(a[2]="("+a[2]+") and ("+e+")"),n.push(a))}},n}},function(t,n,e){function o(t,n){for(var e=0;e<t.length;e++){var o=t[e],i=h[o.id];if(i){i.refs++;for(var r=0;r<i.parts.length;r++)i.parts[r](o.parts[r]);for(;r<o.parts.length;r++)i.parts.push(u(o.parts[r],n))}else{for(var a=[],r=0;r<o.parts.length;r++)a.push(u(o.parts[r],n));h[o.id]={id:o.id,refs:1,parts:a}}}}function i(t,n){for(var e=[],o={},i=0;i<t.length;i++){var r=t[i],a=n.base?r[0]+n.base:r[0],s=r[1],f=r[2],c=r[3],u={css:s,media:f,sourceMap:c};o[a]?o[a].parts.push(u):e.push(o[a]={id:a,parts:[u]})}return e}function r(t,n){var e=m(t.insertInto);if(!e)throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");var o=g[g.length-1];if("top"===t.insertAt)o?o.nextSibling?e.insertBefore(n,o.nextSibling):e.appendChild(n):e.insertBefore(n,e.firstChild),g.push(n);else{if("bottom"!==t.insertAt)throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");e.appendChild(n)}}function a(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t);var n=g.indexOf(t);n>=0&&g.splice(n,1)}function s(t){var n=document.createElement("style");return t.attrs.type="text/css",c(n,t.attrs),r(t,n),n}function f(t){var n=document.createElement("link");return t.attrs.type="text/css",t.attrs.rel="stylesheet",c(n,t.attrs),r(t,n),n}function c(t,n){Object.keys(n).forEach(function(e){t.setAttribute(e,n[e])})}function u(t,n){var e,o,i,r;if(n.transform&&t.css){if(!(r=n.transform(t.css)))return function(){};t.css=r}if(n.singleton){var c=y++;e=b||(b=s(n)),o=l.bind(null,e,c,!1),i=l.bind(null,e,c,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(e=f(n),o=p.bind(null,e,n),i=function(){a(e),e.href&&URL.revokeObjectURL(e.href)}):(e=s(n),o=d.bind(null,e),i=function(){a(e)});return o(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap)return;o(t=n)}else i()}}function l(t,n,e,o){var i=e?"":o.css;if(t.styleSheet)t.styleSheet.cssText=w(n,i);else{var r=document.createTextNode(i),a=t.childNodes;a[n]&&t.removeChild(a[n]),a.length?t.insertBefore(r,a[n]):t.appendChild(r)}}function d(t,n){var e=n.css,o=n.media;if(o&&t.setAttribute("media",o),t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}function p(t,n,e){var o=e.css,i=e.sourceMap,r=void 0===n.convertToAbsoluteUrls&&i;(n.convertToAbsoluteUrls||r)&&(o=x(o)),i&&(o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(i))))+" */");var a=new Blob([o],{type:"text/css"}),s=t.href;t.href=URL.createObjectURL(a),s&&URL.revokeObjectURL(s)}var h={},v=function(t){var n;return function(){return void 0===n&&(n=t.apply(this,arguments)),n}}(function(){return window&&document&&document.all&&!window.atob}),m=function(t){var n={};return function(e){return void 0===n[e]&&(n[e]=t.call(this,e)),n[e]}}(function(t){return document.querySelector(t)}),b=null,y=0,g=[],x=e(6);t.exports=function(t,n){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");n=n||{},n.attrs="object"==typeof n.attrs?n.attrs:{},n.singleton||(n.singleton=v()),n.insertInto||(n.insertInto="head"),n.insertAt||(n.insertAt="bottom");var e=i(t,n);return o(e,n),function(t){for(var r=[],a=0;a<e.length;a++){var s=e[a],f=h[s.id];f.refs--,r.push(f)}if(t){o(i(t,n),n)}for(var a=0;a<r.length;a++){var f=r[a];if(0===f.refs){for(var c=0;c<f.parts.length;c++)f.parts[c]();delete h[f.id]}}}};var w=function(){var t=[];return function(n,e){return t[n]=e,t.filter(Boolean).join("\n")}}()},function(t,n){t.exports=function(t){var n="undefined"!=typeof window&&window.location;if(!n)throw new Error("fixUrls requires window.location");if(!t||"string"!=typeof t)return t;var e=n.protocol+"//"+n.host,o=e+n.pathname.replace(/\/[^\/]*$/,"/");return t.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,function(t,n){var i=n.trim().replace(/^"(.*)"$/,function(t,n){return n}).replace(/^'(.*)'$/,function(t,n){return n});if(/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/)/i.test(i))return t;var r;return r=0===i.indexOf("//")?i:0===i.indexOf("/")?e+i:o+i.replace(/^\.\//,""),"url("+JSON.stringify(r)+")"})}}]); +//# sourceMappingURL=vanilla-yo-notification.js.map
\ No newline at end of file diff --git a/dist/vanilla-yo-notification.js.map b/dist/vanilla-yo-notification.js.map new file mode 100644 index 0000000..094b8ce --- /dev/null +++ b/dist/vanilla-yo-notification.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["file:///vanilla-yo-notification.js","file:///webpack/bootstrap a986a3597f839f5318b6","file:///C:\\Users\\InApp\\Desktop\\custom-notification\\src\\index.ts","file:///C:\\Users\\InApp\\Desktop\\custom-notification\\src\\vanilla.yo.notification.ts","webpack:///./styles/style.css?42e5","file:///C:\\Users\\InApp\\Desktop\\custom-notification\\src\\styles\\style.css","file:///C:\\Users\\InApp\\Desktop\\custom-notification\\node_modules\\css-loader\\lib\\css-base.js","file:///C:\\Users\\InApp\\Desktop\\custom-notification\\node_modules\\style-loader\\lib\\addStyles.js","file:///C:\\Users\\InApp\\Desktop\\custom-notification\\node_modules\\style-loader\\lib\\urls.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","value","vanilla_yo_notification_1","window","VanillaYoNotification","default","this","defaultConfig","content","footer","timeout","title","init","buildContainers","container","document","createElement","className","notifInner","appendChild","body","show","config","_this","notifContainer","notificationTemplate","innerHTML","setTimeout","destroyNotification","removeChild","options","transform","locals","undefined","push","cssWithMappingToString","item","useSourceMap","cssMapping","btoa","sourceMapping","toComment","concat","sources","map","source","sourceRoot","join","sourceMap","unescape","encodeURIComponent","JSON","stringify","list","toString","mediaQuery","alreadyImportedModules","length","id","addStylesToDom","styles","domStyle","stylesInDom","refs","j","parts","addStyle","listToStyles","newStyles","base","css","media","part","insertStyleElement","style","target","getElement","insertInto","Error","lastStyleElementInsertedAtTop","stylesInsertedAtTop","insertAt","nextSibling","insertBefore","firstChild","removeStyleElement","parentNode","idx","indexOf","splice","createStyleElement","attrs","type","addAttrs","createLinkElement","link","rel","el","keys","forEach","key","setAttribute","obj","update","remove","result","singleton","styleIndex","singletonCounter","applyToSingletonTag","bind","URL","createObjectURL","revokeObjectURL","Blob","updateLink","href","applyToTag","newObj","index","styleSheet","cssText","replaceText","cssNode","createTextNode","childNodes","autoFixUrls","convertToAbsoluteUrls","fixUrls","blob","oldSrc","isOldIE","fn","memo","apply","arguments","all","atob","selector","querySelector","DEBUG","newList","mayRemove","textStore","replacement","filter","Boolean","location","baseUrl","protocol","host","currentDir","pathname","replace","fullMatch","origUrl","unquotedOrigUrl","trim","$1","test","newUrl"],"mappings":"CAAS,SAAUA,GCInB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QAvBA,GAAAD,KA4BAF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,EAGAF,EAAAU,EAAA,SAAAP,EAAAQ,EAAAC,GACAZ,EAAAa,EAAAV,EAAAQ,IACAG,OAAAC,eAAAZ,EAAAQ,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAZ,EAAAmB,EAAA,SAAAf,GACA,GAAAQ,GAAAR,KAAAgB,WACA,WAA2B,MAAAhB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAAU,EAAAE,EAAA,IAAAA,GACAA,GAIAZ,EAAAa,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAGtDtB,EAAAyB,EAAA,GAGAzB,IAAA0B,EAAA,KDMM,SAAUtB,EAAQD,EAASH,GAEjC,YAEAc,QAAOC,eAAeZ,EAAS,cAAgBwB,OAAO,GEvEtD,IAAAC,GAAA5B,EAAA,EAEC6B,QAAeC,sBAAwBF,EAAAG,SF4ElC,SAAU3B,EAAQD,EAASH,GAEjC,YAEAc,QAAOC,eAAeZ,EAAS,cAAgBwB,OAAO,IGjFtD3B,EAAA,EAGA,IAAA8B,GAAA,WAMI,QAAAA,KACIE,KAAKC,eACDC,QAAS,GACTC,OAAQ,GACRC,QAAS,IACTC,MAAO,IAEXL,KAAKM,OAyDb,MAtDYR,GAAAP,UAAAe,KAAR,WAEIN,KAAKO,mBAKTT,EAAAP,UAAAgB,gBAAA,WACI,GAAIC,GAAYC,SAASC,cAAc,MACvCF,GAAUG,UAAY,+BAEtBX,KAAKY,WAAaH,SAASC,cAAc,OACzCV,KAAKY,WAAWD,UAAY,cAE5BH,EAAUK,YAAYb,KAAKY,YAC3BH,SAASK,KAAKD,YAAYL,IAI9BV,EAAAP,UAAAwB,KAAA,SAAKC,GAAL,GAAAC,GAAAjB,KAEQkB,EAAiBT,SAASC,cAAc,MAC5CQ,GAAeP,UAAY,0BAG3BX,KAAKmB,qBAAuB,+GAGtBH,EAAOX,MAAQW,EAAOX,MAAQL,KAAKC,cAAcI,OAAK,mFAGtDW,EAAOd,QAAUc,EAAOd,QAAUF,KAAKC,cAAcC,SAAO,qFAG5Dc,EAAOb,OAASa,EAAOb,OAASH,KAAKC,cAAcE,QAAM,iDAK/De,EAAeE,UAAapB,KAAyB,qBAErDA,KAAKY,WAAWC,YAAYK,GAG5BG,WAAW,WACPJ,EAAKK,oBAAoBJ,IACzBF,EAAOZ,QAAUY,EAAOZ,QAAUJ,KAAKC,cAAcG,UAKrDN,EAAAP,UAAA+B,oBAAR,SAA4Bd,GACxBR,KAAKY,WAAWW,YAAYf,IAEpCV,IHgDA3B,GAAQ4B,QAAUD,GAKZ,SAAU1B,EAAQD,EAASH,GI5HjC,GAAAkC,GAAAlC,EAAA,EACA,iBAAAkC,SAAA9B,EAAAC,EAAA6B,EAAA,KAEA,IAEAsB,KACAA,GAAAC,cAHAA,EAKAzD,GAAA,GAAAkC,EAAAsB,EACAtB,GAAAwB,SAAAtD,EAAAD,QAAA+B,EAAAwB,SJkJM,SAAUtD,EAAQD,EAASH,GK9JjCG,EAAAC,EAAAD,QAAAH,EAAA,OAAA2D,IAKAxD,EAAAyD,MAAAxD,EAAAC,EAAA,0oBAAyqB,MLuKnqB,SAAUD,EAAQD,GM3HxB,QAAA0D,GAAAC,EAAAC,GACA,GAAA7B,GAAA4B,EAAA,OACAE,EAAAF,EAAA,EACA,KAAAE,EACA,MAAA9B,EAGA,IAAA6B,GAAA,kBAAAE,MAAA,CACA,GAAAC,GAAAC,EAAAH,EAKA,QAAA9B,GAAAkC,OAJAJ,EAAAK,QAAAC,IAAA,SAAAC,GACA,uBAAAP,EAAAQ,WAAAD,EAAA,SAGAH,QAAAF,IAAAO,KAAA,MAGA,OAAAvC,GAAAuC,KAAA,MAIA,QAAAN,GAAAO,GAKA,yEAHAT,KAAAU,SAAAC,mBAAAC,KAAAC,UAAAJ,MAGA,MArEAtE,EAAAD,QAAA,SAAA4D,GACA,GAAAgB,KAwCA,OArCAA,GAAAC,SAAA,WACA,MAAAhD,MAAAsC,IAAA,SAAAR,GACA,GAAA5B,GAAA2B,EAAAC,EAAAC,EACA,OAAAD,GAAA,GACA,UAAAA,EAAA,OAAmC5B,EAAA,IAEnCA,IAEGuC,KAAA,KAIHM,EAAA1E,EAAA,SAAAN,EAAAkF,GACA,gBAAAlF,KACAA,IAAA,KAAAA,EAAA,KAEA,QADAmF,MACA7E,EAAA,EAAgBA,EAAA2B,KAAAmD,OAAiB9E,IAAA,CACjC,GAAA+E,GAAApD,KAAA3B,GAAA,EACA,iBAAA+E,KACAF,EAAAE,IAAA,GAEA,IAAA/E,EAAA,EAAYA,EAAAN,EAAAoF,OAAoB9E,IAAA,CAChC,GAAAyD,GAAA/D,EAAAM,EAKA,iBAAAyD,GAAA,IAAAoB,EAAApB,EAAA,MACAmB,IAAAnB,EAAA,GACAA,EAAA,GAAAmB,EACKA,IACLnB,EAAA,OAAAA,EAAA,aAAAmB,EAAA,KAEAF,EAAAnB,KAAAE,MAIAiB,INgNM,SAAU3E,EAAQD,EAASH,GO9JjC,QAAAqF,GAAAC,EAAA9B,GACA,OAAAnD,GAAA,EAAgBA,EAAAiF,EAAAH,OAAmB9E,IAAA,CACnC,GAAAyD,GAAAwB,EAAAjF,GACAkF,EAAAC,EAAA1B,EAAAsB,GAEA,IAAAG,EAAA,CACAA,EAAAE,MAEA,QAAAC,GAAA,EAAiBA,EAAAH,EAAAI,MAAAR,OAA2BO,IAC5CH,EAAAI,MAAAD,GAAA5B,EAAA6B,MAAAD,GAGA,MAAQA,EAAA5B,EAAA6B,MAAAR,OAAuBO,IAC/BH,EAAAI,MAAA/B,KAAAgC,EAAA9B,EAAA6B,MAAAD,GAAAlC,QAEG,CAGH,OAFAmC,MAEAD,EAAA,EAAiBA,EAAA5B,EAAA6B,MAAAR,OAAuBO,IACxCC,EAAA/B,KAAAgC,EAAA9B,EAAA6B,MAAAD,GAAAlC,GAGAgC,GAAA1B,EAAAsB,KAA2BA,GAAAtB,EAAAsB,GAAAK,KAAA,EAAAE,WAK3B,QAAAE,GAAAd,EAAAvB,GAIA,OAHA8B,MACAQ,KAEAzF,EAAA,EAAgBA,EAAA0E,EAAAI,OAAiB9E,IAAA,CACjC,GAAAyD,GAAAiB,EAAA1E,GACA+E,EAAA5B,EAAAuC,KAAAjC,EAAA,GAAAN,EAAAuC,KAAAjC,EAAA,GACAkC,EAAAlC,EAAA,GACAmC,EAAAnC,EAAA,GACAY,EAAAZ,EAAA,GACAoC,GAAcF,MAAAC,QAAAvB,YAEdoB,GAAAV,GACAU,EAAAV,GAAAO,MAAA/B,KAAAsC,GADAZ,EAAA1B,KAAAkC,EAAAV,IAAkDA,KAAAO,OAAAO,KAIlD,MAAAZ,GAGA,QAAAa,GAAA3C,EAAA4C,GACA,GAAAC,GAAAC,EAAA9C,EAAA+C,WAEA,KAAAF,EACA,SAAAG,OAAA,8GAGA,IAAAC,GAAAC,IAAAvB,OAAA,EAEA,YAAA3B,EAAAmD,SACAF,EAEGA,EAAAG,YACHP,EAAAQ,aAAAT,EAAAK,EAAAG,aAEAP,EAAAxD,YAAAuD,GAJAC,EAAAQ,aAAAT,EAAAC,EAAAS,YAMAJ,EAAA9C,KAAAwC,OACE,eAAA5C,EAAAmD,SAGF,SAAAH,OAAA,qEAFAH,GAAAxD,YAAAuD,IAMA,QAAAW,GAAAX,GACA,UAAAA,EAAAY,WAAA,QACAZ,GAAAY,WAAAzD,YAAA6C,EAEA,IAAAa,GAAAP,EAAAQ,QAAAd,EACAa,IAAA,GACAP,EAAAS,OAAAF,EAAA,GAIA,QAAAG,GAAA5D,GACA,GAAA4C,GAAA3D,SAAAC,cAAA,QAOA,OALAc,GAAA6D,MAAAC,KAAA,WAEAC,EAAAnB,EAAA5C,EAAA6D,OACAlB,EAAA3C,EAAA4C,GAEAA,EAGA,QAAAoB,GAAAhE,GACA,GAAAiE,GAAAhF,SAAAC,cAAA,OAQA,OANAc,GAAA6D,MAAAC,KAAA,WACA9D,EAAA6D,MAAAK,IAAA,aAEAH,EAAAE,EAAAjE,EAAA6D,OACAlB,EAAA3C,EAAAiE,GAEAA,EAGA,QAAAF,GAAAI,EAAAN,GACAvG,OAAA8G,KAAAP,GAAAQ,QAAA,SAAAC,GACAH,EAAAI,aAAAD,EAAAT,EAAAS,MAIA,QAAAlC,GAAAoC,EAAAxE,GACA,GAAA4C,GAAA6B,EAAAC,EAAAC,CAGA,IAAA3E,EAAAC,WAAAuE,EAAAhC,IAAA,CAGA,KAFAmC,EAAA3E,EAAAC,UAAAuE,EAAAhC,MASA,mBAJAgC,GAAAhC,IAAAmC,EAUA,GAAA3E,EAAA4E,UAAA,CACA,GAAAC,GAAAC,GAEAlC,GAAAgC,MAAAhB,EAAA5D,IAEAyE,EAAAM,EAAAC,KAAA,KAAApC,EAAAiC,GAAA,GACAH,EAAAK,EAAAC,KAAA,KAAApC,EAAAiC,GAAA,OAGAL,GAAAtD,WACA,kBAAA+D,MACA,kBAAAA,KAAAC,iBACA,kBAAAD,KAAAE,iBACA,kBAAAC,OACA,kBAAA3E,OAEAmC,EAAAoB,EAAAhE,GACAyE,EAAAY,EAAAL,KAAA,KAAApC,EAAA5C,GACA0E,EAAA,WACAnB,EAAAX,GAEAA,EAAA0C,MAAAL,IAAAE,gBAAAvC,EAAA0C,SAGA1C,EAAAgB,EAAA5D,GACAyE,EAAAc,EAAAP,KAAA,KAAApC,GACA8B,EAAA,WACAnB,EAAAX,IAMA,OAFA6B,GAAAD,GAEA,SAAAgB,GACA,GAAAA,EAAA,CACA,GACAA,EAAAhD,MAAAgC,EAAAhC,KACAgD,EAAA/C,QAAA+B,EAAA/B,OACA+C,EAAAtE,YAAAsD,EAAAtD,UAEA,MAGAuD,GAAAD,EAAAgB,OAEAd,MAeA,QAAAK,GAAAnC,EAAA6C,EAAAf,EAAAF,GACA,GAAAhC,GAAAkC,EAAA,GAAAF,EAAAhC,GAEA,IAAAI,EAAA8C,WACA9C,EAAA8C,WAAAC,QAAAC,EAAAH,EAAAjD,OACE,CACF,GAAAqD,GAAA5G,SAAA6G,eAAAtD,GACAuD,EAAAnD,EAAAmD,UAEAA,GAAAN,IAAA7C,EAAA7C,YAAAgG,EAAAN,IAEAM,EAAApE,OACAiB,EAAAS,aAAAwC,EAAAE,EAAAN,IAEA7C,EAAAvD,YAAAwG,IAKA,QAAAN,GAAA3C,EAAA4B,GACA,GAAAhC,GAAAgC,EAAAhC,IACAC,EAAA+B,EAAA/B,KAMA,IAJAA,GACAG,EAAA2B,aAAA,QAAA9B,GAGAG,EAAA8C,WACA9C,EAAA8C,WAAAC,QAAAnD,MACE,CACF,KAAAI,EAAAU,YACAV,EAAA7C,YAAA6C,EAAAU,WAGAV,GAAAvD,YAAAJ,SAAA6G,eAAAtD,KAIA,QAAA6C,GAAApB,EAAAjE,EAAAwE,GACA,GAAAhC,GAAAgC,EAAAhC,IACAtB,EAAAsD,EAAAtD,UAQA8E,MAAA7F,KAAAH,EAAAiG,uBAAA/E,GAEAlB,EAAAiG,uBAAAD,KACAxD,EAAA0D,EAAA1D,IAGAtB,IAEAsB,GAAA,uDAAuD/B,KAAAU,SAAAC,mBAAAC,KAAAC,UAAAJ,MAAA,MAGvD,IAAAiF,GAAA,GAAAf,OAAA5C,IAA6BsB,KAAA,aAE7BsC,EAAAnC,EAAAqB,IAEArB,GAAAqB,KAAAL,IAAAC,gBAAAiB,GAEAC,GAAAnB,IAAAE,gBAAAiB,GA1VA,GAAApE,MAWAqE,EATA,SAAAC,GACA,GAAAC,EAEA,mBAEA,WADA,KAAAA,MAAAD,EAAAE,MAAAhI,KAAAiI,YACAF,IAIA,WAMA,MAAAlI,SAAAY,mBAAAyH,MAAArI,OAAAsI,OAGA7D,EAAA,SAAAwD,GACA,GAAAC,KAEA,iBAAAK,GAKA,WAJA,KAAAL,EAAAK,KACAL,EAAAK,GAAAN,EAAAvJ,KAAAyB,KAAAoI,IAGAL,EAAAK,KAEC,SAAA/D,GACD,MAAA5D,UAAA4H,cAAAhE,KAGA+B,EAAA,KACAE,EAAA,EACA5B,KAEAgD,EAAA1J,EAAA,EAEAI,GAAAD,QAAA,SAAA4E,EAAAvB,GACA,sBAAA8G,eACA,gBAAA7H,UAAA,SAAA+D,OAAA,+DAGAhD,SAEAA,EAAA6D,MAAA,gBAAA7D,GAAA6D,MAAA7D,EAAA6D,SAIA7D,EAAA4E,YAAA5E,EAAA4E,UAAAyB,KAGArG,EAAA+C,aAAA/C,EAAA+C,WAAA,QAGA/C,EAAAmD,WAAAnD,EAAAmD,SAAA,SAEA,IAAArB,GAAAO,EAAAd,EAAAvB,EAIA,OAFA6B,GAAAC,EAAA9B,GAEA,SAAA+G,GAGA,OAFAC,MAEAnK,EAAA,EAAiBA,EAAAiF,EAAAH,OAAmB9E,IAAA,CACpC,GAAAyD,GAAAwB,EAAAjF,GACAkF,EAAAC,EAAA1B,EAAAsB,GAEAG,GAAAE,OACA+E,EAAA5G,KAAA2B,GAGA,GAAAgF,EAAA,CAEAlF,EADAQ,EAAA0E,EAAA/G,GACAA,GAGA,OAAAnD,GAAA,EAAiBA,EAAAmK,EAAArF,OAAsB9E,IAAA,CACvC,GAAAkF,GAAAiF,EAAAnK,EAEA,QAAAkF,EAAAE,KAAA,CACA,OAAAC,GAAA,EAAmBA,EAAAH,EAAAI,MAAAR,OAA2BO,IAAAH,EAAAI,MAAAD,WAE9CF,GAAAD,EAAAH,OA0LA,IAAAgE,GAAA,WACA,GAAAqB,KAEA,iBAAAxB,EAAAyB,GAGA,MAFAD,GAAAxB,GAAAyB,EAEAD,EAAAE,OAAAC,SAAAnG,KAAA,WP2UM,SAAUrE,EAAQD,GQvlBxBC,EAAAD,QAAA,SAAA6F,GAEA,GAAA6E,GAAA,mBAAAhJ,gBAAAgJ,QAEA,KAAAA,EACA,SAAArE,OAAA,mCAIA,KAAAR,GAAA,gBAAAA,GACA,MAAAA,EAGA,IAAA8E,GAAAD,EAAAE,SAAA,KAAAF,EAAAG,KACAC,EAAAH,EAAAD,EAAAK,SAAAC,QAAA,gBA2DA,OA/BAnF,GAAAmF,QAAA,+DAAAC,EAAAC,GAEA,GAAAC,GAAAD,EACAE,OACAJ,QAAA,oBAAAtK,EAAA2K,GAAwC,MAAAA,KACxCL,QAAA,oBAAAtK,EAAA2K,GAAwC,MAAAA,IAGxC,mDAAAC,KAAAH,GACA,MAAAF,EAIA,IAAAM,EAcA,OAVAA,GAFA,IAAAJ,EAAApE,QAAA,MAEAoE,EACG,IAAAA,EAAApE,QAAA,KAEH4D,EAAAQ,EAGAL,EAAAK,EAAAH,QAAA,YAIA,OAAAtG,KAAAC,UAAA4G,GAAA","file":"vanilla-yo-notification.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 = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar vanilla_yo_notification_1 = __webpack_require__(1);\r\nwindow.VanillaYoNotification = vanilla_yo_notification_1.default;\r\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n// Import stylesheets\r\n__webpack_require__(2);\r\nvar VanillaYoNotification = /** @class */ (function () {\r\n function VanillaYoNotification() {\r\n this.defaultConfig = {\r\n content: '',\r\n footer: '',\r\n timeout: 3000,\r\n title: ''\r\n };\r\n this.init();\r\n }\r\n VanillaYoNotification.prototype.init = function () {\r\n this.buildContainers();\r\n };\r\n VanillaYoNotification.prototype.buildContainers = function () {\r\n var container = document.createElement('div');\r\n container.className = \"notif-mainContainer topRight\";\r\n this.notifInner = document.createElement('div');\r\n this.notifInner.className = \"notif-inner\";\r\n container.appendChild(this.notifInner);\r\n document.body.appendChild(container);\r\n };\r\n VanillaYoNotification.prototype.show = function (config) {\r\n var _this = this;\r\n var notifContainer = document.createElement('div');\r\n notifContainer.className = \"vanilla-yo-notification\";\r\n this.notificationTemplate = \"\\n <div class=\\\"notification_container\\\">\\n <div class=\\\"notification_header\\\">\\n \" + (config.title ? config.title : this.defaultConfig.title) + \"\\n </div>\\n <div class=\\\"notification_body\\\">\\n \" + (config.content ? config.content : this.defaultConfig.content) + \"\\n </div>\\n <div class=\\\"notification_footer\\\">\\n \" + (config.footer ? config.footer : this.defaultConfig.footer) + \"\\n </div>\\n </div>\\n \";\r\n notifContainer.innerHTML = (this.notificationTemplate);\r\n this.notifInner.appendChild(notifContainer);\r\n setTimeout(function () {\r\n _this.destroyNotification(notifContainer);\r\n }, (config.timeout ? config.timeout : this.defaultConfig.timeout));\r\n };\r\n VanillaYoNotification.prototype.destroyNotification = function (container) {\r\n this.notifInner.removeChild(container);\r\n };\r\n return VanillaYoNotification;\r\n}());\r\nexports.default = VanillaYoNotification;\r\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(3);\nif(typeof content === 'string') content = [[module.i, content, '']];\n// Prepare cssTransformation\nvar transform;\n\nvar options = {}\noptions.transform = transform\n// add the styles to the DOM\nvar update = __webpack_require__(5)(content, options);\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(false) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\"!!../../node_modules/css-loader/index.js!./style.css\", function() {\n\t\t\tvar newContent = require(\"!!../../node_modules/css-loader/index.js!./style.css\");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports = module.exports = __webpack_require__(4)(undefined);\n// imports\n\n\n// module\nexports.push([module.i, \"\\n\\n.notif-mainContainer {\\n z-index: 999;\\n position: fixed;\\n width: 350px;\\n max-width: 98%;\\n font-family: \\\"Segoe UI\\\",\\\"Tahoma\\\",\\\"Calibri\\\",\\\"Verdana\\\",sans-serif;\\n color: #999;\\n box-sizing: border-box;\\n}\\n\\n.notif-mainContainer.topRight{\\n top: 8px;\\n right: 8px;\\n}\\n\\n.notif-inner {\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.vanilla-yo-notification{\\n width: 250px;\\n background: #58a758;\\n color: white;\\n position: relative;\\n cursor: pointer;\\n padding: 8px;\\n margin-bottom: 12px;\\n display: flex;\\n}\\n\\n\\n.notification_header{\\n\\tfont-size: 15px;\\n font-weight: bold\\n}\", \"\"]);\n\n// exports\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(selector) {\n\t\tif (typeof memo[selector] === \"undefined\") {\n\t\t\tmemo[selector] = fn.call(this, selector);\n\t\t}\n\n\t\treturn memo[selector]\n\t};\n})(function (target) {\n\treturn document.querySelector(target)\n});\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = __webpack_require__(6);\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton) options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n\tif (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else {\n\t\tthrow new Error(\"Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\toptions.attrs.type = \"text/css\";\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\toptions.attrs.type = \"text/css\";\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t result = options.transform(obj.css);\n\n\t if (result) {\n\t \t// If transform returns a value, use that instead of the original css.\n\t \t// This allows running runtime transformations on the css.\n\t \tobj.css = result;\n\t } else {\n\t \t// If the transform function returns a falsy value, don't add this css.\n\t \t// This allows conditional loading of css\n\t \treturn function() {\n\t \t\t// noop\n\t \t};\n\t }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default. Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== \"undefined\" && window.location;\n\n if (!location) {\n throw new Error(\"fixUrls requires window.location\");\n }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t return css;\n }\n\n var baseUrl = location.protocol + \"//\" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\( = Match on the word \"url\" with any whitespace after it and then a parens\n\t ( = Start a capturing group\n\t (?: = Start a non-capturing group\n\t [^)(] = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t (?: = Start another non-capturing groups\n\t [^)(]+ = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t [^)(]* = Match anything that isn't a parentheses\n\t \\) = Match a end parentheses\n\t ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n\t \\) = Match a close parens\n\n\t /gi = Get all matches, not the first. Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/)/i.test(unquotedOrigUrl)) {\n\t\t return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// vanilla-yo-notification.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 = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap a986a3597f839f5318b6","import VanillaYoNotification from \"./vanilla.yo.notification\";\n\n(window as any).VanillaYoNotification = VanillaYoNotification;\n\n\n// WEBPACK FOOTER //\n// ../node_modules/source-map-loader!./index.ts","// Import stylesheets\r\nimport './styles/style.css';\r\nimport { Config } from './config.interface';\r\n\r\nexport default class VanillaYoNotification {\r\n\r\n private notificationTemplate: string;\r\n private defaultConfig: Config;\r\n private notifInner: any;\r\n\r\n constructor() {\r\n this.defaultConfig = {\r\n content: '',\r\n footer: '',\r\n timeout: 3000,\r\n title: ''\r\n }\r\n this.init();\r\n }\r\n\r\n private init() {\r\n\r\n this.buildContainers();\r\n \r\n \r\n }\r\n\r\n buildContainers(){\r\n let container = document.createElement('div');\r\n container.className = \"notif-mainContainer topRight\";\r\n\r\n this.notifInner = document.createElement('div');\r\n this.notifInner.className = \"notif-inner\";\r\n\r\n container.appendChild(this.notifInner);\r\n document.body.appendChild(container); \r\n }\r\n\r\n\r\n show(config: Config) {\r\n\r\n let notifContainer = document.createElement('div');\r\n notifContainer.className = \"vanilla-yo-notification\";\r\n\r\n\r\n this.notificationTemplate = `\r\n <div class=\"notification_container\">\r\n <div class=\"notification_header\">\r\n ${config.title ? config.title : this.defaultConfig.title}\r\n </div>\r\n <div class=\"notification_body\">\r\n ${config.content ? config.content : this.defaultConfig.content}\r\n </div>\r\n <div class=\"notification_footer\">\r\n ${config.footer ? config.footer : this.defaultConfig.footer}\r\n </div>\r\n </div>\r\n `;\r\n\r\n notifContainer.innerHTML = (this.notificationTemplate);\r\n\r\n this.notifInner.appendChild(notifContainer);\r\n\r\n\r\n setTimeout(() => {\r\n this.destroyNotification(notifContainer);\r\n }, (config.timeout ? config.timeout : this.defaultConfig.timeout));\r\n\r\n \r\n }\r\n\r\n private destroyNotification(container: Node) {\r\n this.notifInner.removeChild(container);\r\n }\r\n}\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/source-map-loader!./vanilla.yo.notification.ts","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/index.js!./style.css\");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// Prepare cssTransformation\nvar transform;\n\nvar options = {}\noptions.transform = transform\n// add the styles to the DOM\nvar update = require(\"!../../node_modules/style-loader/lib/addStyles.js\")(content, options);\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\"!!../../node_modules/css-loader/index.js!./style.css\", function() {\n\t\t\tvar newContent = require(\"!!../../node_modules/css-loader/index.js!./style.css\");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./styles/style.css\n// module id = 2\n// module chunks = 0","exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")(undefined);\n// imports\n\n\n// module\nexports.push([module.id, \"\\n\\n.notif-mainContainer {\\n z-index: 999;\\n position: fixed;\\n width: 350px;\\n max-width: 98%;\\n font-family: \\\"Segoe UI\\\",\\\"Tahoma\\\",\\\"Calibri\\\",\\\"Verdana\\\",sans-serif;\\n color: #999;\\n box-sizing: border-box;\\n}\\n\\n.notif-mainContainer.topRight{\\n top: 8px;\\n right: 8px;\\n}\\n\\n.notif-inner {\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.vanilla-yo-notification{\\n width: 250px;\\n background: #58a758;\\n color: white;\\n position: relative;\\n cursor: pointer;\\n padding: 8px;\\n margin-bottom: 12px;\\n display: flex;\\n}\\n\\n\\n.notification_header{\\n\\tfont-size: 15px;\\n font-weight: bold\\n}\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/css-loader!./styles/style.css\n// module id = 3\n// module chunks = 0","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/css-loader/lib/css-base.js\n// module id = 4\n// module chunks = 0","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(selector) {\n\t\tif (typeof memo[selector] === \"undefined\") {\n\t\t\tmemo[selector] = fn.call(this, selector);\n\t\t}\n\n\t\treturn memo[selector]\n\t};\n})(function (target) {\n\treturn document.querySelector(target)\n});\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton) options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n\tif (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else {\n\t\tthrow new Error(\"Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\toptions.attrs.type = \"text/css\";\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\toptions.attrs.type = \"text/css\";\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t result = options.transform(obj.css);\n\n\t if (result) {\n\t \t// If transform returns a value, use that instead of the original css.\n\t \t// This allows running runtime transformations on the css.\n\t \tobj.css = result;\n\t } else {\n\t \t// If the transform function returns a falsy value, don't add this css.\n\t \t// This allows conditional loading of css\n\t \treturn function() {\n\t \t\t// noop\n\t \t};\n\t }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default. Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/style-loader/lib/addStyles.js\n// module id = 5\n// module chunks = 0","\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== \"undefined\" && window.location;\n\n if (!location) {\n throw new Error(\"fixUrls requires window.location\");\n }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t return css;\n }\n\n var baseUrl = location.protocol + \"//\" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\( = Match on the word \"url\" with any whitespace after it and then a parens\n\t ( = Start a capturing group\n\t (?: = Start a non-capturing group\n\t [^)(] = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t (?: = Start another non-capturing groups\n\t [^)(]+ = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t [^)(]* = Match anything that isn't a parentheses\n\t \\) = Match a end parentheses\n\t ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n\t \\) = Match a close parens\n\n\t /gi = Get all matches, not the first. Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/)/i.test(unquotedOrigUrl)) {\n\t\t return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/style-loader/lib/urls.js\n// module id = 6\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..5ebe9d0 --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,61 @@ +var webpackConf = require('./webpack.config.js'); +module.exports = function (config) { + config.set({ + basePath:'', + frameworks: ['jasmine'], + files: [{ pattern: './tests/unit/spec-bundle.js', watched: false }], + preprocessors: { './tests/unit/spec-bundle.js': ['coverage', 'webpack', 'sourcemap'] }, + webpack: { + module: webpackConf.module, + resolve: webpackConf.resolve + }, + webpackMiddleware: { + noInfo: true, + stats: 'errors-only' + }, + reporters: ['kjhtml', 'spec', 'coverage'], + // optionally, configure the reporter + coverageReporter: { + // specify a common output directory + dir: './tests/build/reports/coverage', + reporters: [ + // reporters not supporting the `file` property + { type: 'html', subdir: 'report-html' }, + { type: 'lcov', subdir: 'report-lcov' }, + // reporters supporting the `file` property, use `subdir` to directly + // output them in the `dir` directory + { type: 'cobertura', subdir: '.', file: 'cobertura.txt' }, + { type: 'lcovonly', subdir: '.', file: 'report-lcovonly.txt' }, + { type: 'teamcity', subdir: '.', file: 'teamcity.txt' }, + { type: 'text', subdir: '.', file: 'text.txt' }, + { type: 'text-summary', subdir: '.', file: 'text-summary.txt' }, + ] + }, + specReporter: { + maxLogLines: 5, // limit number of lines logged per test + suppressErrorSummary: true, // do not print error summary + suppressFailed: false, // do not print information about failed tests + suppressPassed: false, // do not print information about passed tests + suppressSkipped: true, // do not print information about skipped tests + showSpecTiming: false // print the time elapsed for each spec + }, + customLaunchers: { + Chrome_travis_ci: { + base: 'Chrome', + flags: ['--no-sandbox'] + } + }, + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: true, + concurrency: Infinity + }); + + + if (process.env.TRAVIS) { + config.browsers = ['Chrome_travis_ci']; + } +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..661e867 --- /dev/null +++ b/package.json @@ -0,0 +1,52 @@ +{ + "name": "vanilla-yo-notification", + "version": "0.0.1", + "main": "src/index.ts", + "scripts": { + "start": "npm run server:dev", + "server": "npm run server:dev", + "server:dev": "webpack-dashboard -- webpack-dev-server --config ./webpack.config.js --hot --inline --progress --watch --open", + "server:prod": "cross-env NODE_ENV=production webpack-dashboard -- webpack-dev-server --config ./webpack.config.js --port 3000 --host 0.0.0.0 --hot --inline --progress --profile --watch --open --content-base dist/", + "build": "npm run build:dev", + "build:dev": "webpack --config ./webpack.config.js --progress --profile --color --display-error-details --display-cached", + "build:prod": "cross-env NODE_ENV=production webpack --config ./webpack.config.js --progress --profile --color --display-error-details --display-cached --bail", + "clean": "npm cache clear && rimraf -- dist", + "test": "karma start" + }, + "license": "MIT", + "devDependencies": { + "@types/jasmine": "^2.5.53", + "@types/lodash": "^4.14.70", + "awesome-typescript-loader": "^3.2.1", + "cross-env": "^5.0.1", + "css-loader": "^0.28.4", + "ejs-loader": "^0.3.0", + "eslint": "^4.2.0", + "expose-loader": "^0.7.3", + "jasmine": "^2.6.0", + "jasmine-core": "^2.6.4", + "karma": "^1.7.0", + "karma-babel-preprocessor": "^6.0.1", + "karma-chrome-launcher": "^2.2.0", + "karma-coverage": "^1.1.1", + "karma-firefox-launcher": "^1.0.1", + "karma-jasmine": "^1.1.0", + "karma-jasmine-html-reporter": "^0.2.2", + "karma-phantomjs-launcher": "^1.0.4", + "karma-sourcemap-loader": "^0.3.7", + "karma-spec-reporter": "0.0.31", + "karma-webpack": "^2.0.4", + "rimraf": "^2.6.1", + "source-map-loader": "^0.2.1", + "style-loader": "^0.18.2", + "tslint": "^5.5.0", + "tslint-loader": "^3.5.3", + "typescript": "^2.4.1", + "webpack": "^3.3.0", + "webpack-dashboard": "^0.4.0", + "webpack-dev-server": "2.5.1" + }, + "dependencies": { + "lodash": "^4.17.4" + } +} diff --git a/src/config.interface.ts b/src/config.interface.ts new file mode 100644 index 0000000..178a309 --- /dev/null +++ b/src/config.interface.ts @@ -0,0 +1,6 @@ +export interface Config { + content: string; + timeout?: number; + title: string; + footer?: string; +}
\ No newline at end of file diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..15eaf96 --- /dev/null +++ b/src/index.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html lang=""> + +<head> + <meta charset="utf-8"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title> + <%= htmlWebpackPlugin.options.title %> + </title> + + <meta name="description" content="<%= htmlWebpackPlugin.options.title %>"> + +</head> + +<body> + <div> You have successfully started your Typescript application using Webpack. Open your console to see your printed message from the index.ts file </div> + <p>By <a href="https://twitter.com/renaudin_yann">@renaudin_yann</a> </p> +</body> + +</html>
\ No newline at end of file diff --git a/src/index.spec.ts b/src/index.spec.ts new file mode 100644 index 0000000..64b3e49 --- /dev/null +++ b/src/index.spec.ts @@ -0,0 +1,5 @@ +describe('TypeScript WebPack Starter Tests', () => { + it('A good way to start building an awesome lib is by doing Unit Tests 👌🏽', () => { + expect(true).toBe(true); + }); +})
\ No newline at end of file diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..bb3d67c --- /dev/null +++ b/src/index.ts @@ -0,0 +1,3 @@ +import VanillaYoNotification from "./vanilla.yo.notification"; + +(window as any).VanillaYoNotification = VanillaYoNotification;
\ No newline at end of file diff --git a/src/styles/style.css b/src/styles/style.css new file mode 100644 index 0000000..b941e56 --- /dev/null +++ b/src/styles/style.css @@ -0,0 +1,38 @@ + + +.notif-mainContainer { + z-index: 999; + position: fixed; + width: 350px; + max-width: 98%; + font-family: "Segoe UI","Tahoma","Calibri","Verdana",sans-serif; + color: #999; + box-sizing: border-box; +} + +.notif-mainContainer.topRight{ + top: 8px; + right: 8px; +} + +.notif-inner { + display: flex; + flex-direction: column; +} + +.vanilla-yo-notification{ + width: 250px; + background: #58a758; + color: white; + position: relative; + cursor: pointer; + padding: 8px; + margin-bottom: 12px; + display: flex; +} + + +.notification_header{ + font-size: 15px; + font-weight: bold +}
\ No newline at end of file diff --git a/src/vanilla.yo.notification.ts b/src/vanilla.yo.notification.ts new file mode 100644 index 0000000..7b50804 --- /dev/null +++ b/src/vanilla.yo.notification.ts @@ -0,0 +1,76 @@ +// Import stylesheets +import './styles/style.css'; +import { Config } from './config.interface'; + +export default class VanillaYoNotification { + + private notificationTemplate: string; + private defaultConfig: Config; + private notifInner: any; + + constructor() { + this.defaultConfig = { + content: '', + footer: '', + timeout: 3000, + title: '' + } + this.init(); + } + + private init() { + + this.buildContainers(); + + + } + + buildContainers(){ + let container = document.createElement('div'); + container.className = "notif-mainContainer topRight"; + + this.notifInner = document.createElement('div'); + this.notifInner.className = "notif-inner"; + + container.appendChild(this.notifInner); + document.body.appendChild(container); + } + + + show(config: Config) { + + let notifContainer = document.createElement('div'); + notifContainer.className = "vanilla-yo-notification"; + + + this.notificationTemplate = ` + <div class="notification_container"> + <div class="notification_header"> + ${config.title ? config.title : this.defaultConfig.title} + </div> + <div class="notification_body"> + ${config.content ? config.content : this.defaultConfig.content} + </div> + <div class="notification_footer"> + ${config.footer ? config.footer : this.defaultConfig.footer} + </div> + </div> + `; + + notifContainer.innerHTML = (this.notificationTemplate); + + this.notifInner.appendChild(notifContainer); + + + setTimeout(() => { + this.destroyNotification(notifContainer); + }, (config.timeout ? config.timeout : this.defaultConfig.timeout)); + + + } + + private destroyNotification(container: Node) { + this.notifInner.removeChild(container); + } +} + diff --git a/src/vendor.ts b/src/vendor.ts new file mode 100644 index 0000000..27f2cc1 --- /dev/null +++ b/src/vendor.ts @@ -0,0 +1,4 @@ +// Application Dependencies + +import 'lodash'; + diff --git a/tests/unit/spec-bundle.js b/tests/unit/spec-bundle.js new file mode 100644 index 0000000..964cf50 --- /dev/null +++ b/tests/unit/spec-bundle.js @@ -0,0 +1,9 @@ +Error.stackTraceLimit = Infinity; + +var testContext = require.context('./../../src', true, /\.spec\.ts/); + +function requireAll(requireContext) { + return requireContext.keys().map(requireContext); +} + +var modules = requireAll(testContext);
\ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e4239f8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": [ + "es2015", + "dom" + ], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true + }, + "exclude": [ + "node_modules", + "dist" + ] +}
\ No newline at end of file diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..d6fcfd2 --- /dev/null +++ b/tslint.json @@ -0,0 +1,30 @@ +{ + "rules": { + "class-name": true, + "comment-format": [true, "check-space"], + "indent": [true, "spaces"], + "no-duplicate-variable": true, + "no-eval": true, + "no-internal-module": true, + "no-trailing-whitespace": true, + "no-var-keyword": true, + "one-line": [true, "check-open-brace", "check-whitespace"], + "semicolon": false, + "triple-equals": [true, "allow-null-check"], + "typedef-whitespace": [true, { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }], + "variable-name": [true, "ban-keywords"], + "whitespace": [true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ] + } +} diff --git a/typings.json b/typings.json new file mode 100644 index 0000000..63eac50 --- /dev/null +++ b/typings.json @@ -0,0 +1,7 @@ +{ + "globalDependencies": { + }, + "dependencies": { + "lodash": "registry:npm/lodash#4.0.0+20160723033700" + } +} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..e88631d --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,66 @@ +const webpack = require("webpack"); +const path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const DashboardPlugin = require("webpack-dashboard/plugin"); +const nodeEnv = process.env.NODE_ENV || "development"; +const isProd = nodeEnv === "production"; + +var config = { + devtool: isProd ? "hidden-source-map" : "source-map", + context: path.resolve("./src"), + entry: { + app: "./index.ts" + }, + output: { + path: path.resolve("./dist"), + filename: "vanilla-yo-notification.js", + sourceMapFilename: "vanilla-yo-notification.js.map", + devtoolModuleFilenameTemplate: function (info) { + return "file:///" + info.absoluteResourcePath; + } + }, + module: { + rules: [ + { + enforce: "pre", + test: /\.ts?$/, + exclude: ["node_modules"], + use: ["awesome-typescript-loader", "source-map-loader"] + }, + { test: /\.css$/, loaders: ["style-loader", "css-loader"] } + ] + }, + resolve: { + extensions: [".ts", ".js"] + }, + plugins: [ + new webpack.DefinePlugin({ + "process.env": { + // eslint-disable-line quote-props + NODE_ENV: JSON.stringify(nodeEnv) + } + }), + new webpack.optimize.UglifyJsPlugin({ + compress: { warnings: false }, + output: { comments: false }, + sourceMap: true + }), + new DashboardPlugin(), + new webpack.LoaderOptionsPlugin({ + options: { + tslint: { + emitErrors: true, + failOnHint: true + } + } + }) + ], + devServer: { + contentBase: path.join(__dirname, "dist/"), + compress: true, + port: 3000, + hot: true + } +}; + +module.exports = config; |