From d8280d2c8f7d4b7a628c9f24fdfa95a679ffefa9 Mon Sep 17 00:00:00 2001 From: Matthias Manoukian Date: Fri, 6 Sep 2019 09:01:25 +0200 Subject: [PATCH] chore: build dist --- dist/lumx.js | 2 +- dist/lumx.min.js | 2 +- dist/lumx.min.js.map | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/lumx.js b/dist/lumx.js index 695ee1d6b..291a44a7b 100644 --- a/dist/lumx.js +++ b/dist/lumx.js @@ -19613,7 +19613,7 @@ function TextFieldDirective($timeout) { } }); - if (angular.isDefined(modelController.$$attr)) { + if (angular.isDefined(modelController) && angular.isDefined(modelController.$$attr)) { modelController.$$attr.$observe('disabled', function (isDisabled) { if (isDisabled) { el.addClass(_lumx_core_js_constants__WEBPACK_IMPORTED_MODULE_1__[/* CSS_PREFIX */ "a"] + "-text-field--is-disabled"); diff --git a/dist/lumx.min.js b/dist/lumx.min.js index 9e89d527c..26ff8016f 100644 --- a/dist/lumx.min.js +++ b/dist/lumx.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("official-lumx",[],t):"object"==typeof exports?exports["official-lumx"]=t():e.LumX=t()}(window,function(){return function(e){function t(i){if(n[i])return n[i].exports;var l=n[i]={i:i,l:!1,exports:{}};return e[i].call(l.exports,l,l.exports,t),l.l=!0,l.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:i})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var l in e)t.d(i,l,function(t){return e[t]}.bind(null,l));return i},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=104)}([function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n.d(t,"b",function(){return l}),n.d(t,"c",function(){return r}),n.d(t,"d",function(){return o}),n.d(t,"e",function(){return a}),n.d(t,"f",function(){return s});const i="lumx",l=40,r=13,o=27,a=9,s=38},function(e,t,n){(function(t){var n="object",i=function(e){return e&&e.Math==Math&&e};e.exports=i(typeof globalThis==n&&globalThis)||i(typeof window==n&&window)||i(typeof self==n&&self)||i(typeof t==n&&t)||Function("return this")()}).call(this,n(69))},function(e,t,n){var i=n(1),l=n(33).f,r=n(16),o=n(11),a=n(38),s=n(112),c=n(44);e.exports=function(e,t){var n,u,d,f,p,x,h=e.target,g=e.global,v=e.stat;if(u=g?i:v?i[h]||a(h,{}):(i[h]||{}).prototype,u)for(d in t){if(p=t[d],e.noTargetGet?(x=l(u,d),f=x&&x.value):f=u[d],n=c(g?d:h+(v?".":"#")+d,e.forced),!n&&void 0!==f){if(typeof p==typeof f)continue;s(p,f)}(e.sham||f&&f.sham)&&r(p,"sham",!0),o(u,d,p,e)}}},function(e,t,n){var i=n(1),l=n(28),r=n(75),o=n(115),a=i.Symbol,s=l("wks");e.exports=function(e){return s[e]||(s[e]=o&&a[e]||(o?a:r)("Symbol."+e))}},function(e,t,n){"use strict";n.d(t,"a",function(){return"M13,13H11V7H13M13,17H11V15H13M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z"}),n.d(t,"b",function(){return"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}),n.d(t,"c",function(){return"M12,2C17.52,2 22,6.48 22,12C22,17.52 17.52,22 12,22C6.48,22 2,17.52 2,12C2,6.48 6.48,2 12,2M11,16.5L18,9.5L16.59,8.09L11,13.67L7.91,10.59L6.5,12L11,16.5Z"}),n.d(t,"d",function(){return"M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z"}),n.d(t,"e",function(){return"M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z"}),n.d(t,"f",function(){return"M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"}),n.d(t,"g",function(){return"M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z"}),n.d(t,"h",function(){return"M9.5,3C13.09,3 16,5.91 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16C5.91,16 3,13.09 3,9.5C3,5.91 5.91,3 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z"}),n.d(t,"i",function(){return"M7,10L12,15L17,10H7Z"})},function(e,t,n){"use strict";var i=n(2),l=n(48).find,r=n(79),o=!0;"find"in[]&&Array(1).find(function(){o=!1}),i({target:"Array",proto:!0,forced:o},{find:function(e){return l(this,e,arguments.length>1?arguments[1]:void 0)}}),r("find")},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var i=n(8);e.exports=function(e){if(!i(e))throw TypeError(String(e)+" is not an object");return e}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){"use strict";var i=n(2),l=n(50);i({target:"RegExp",proto:!0,forced:/./.exec!==l},{exec:l})},function(e,t,n){var i=n(6);e.exports=!i(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,n){var i=n(1),l=n(28),r=n(16),o=n(18),a=n(38),s=n(72),c=n(73),u=c.get,d=c.enforce,f=String(s).split("toString");l("inspectSource",function(e){return s.call(e)}),(e.exports=function(e,t,n,l){var s=!!l&&!!l.unsafe,c=!!l&&!!l.enumerable,u=!!l&&!!l.noTargetGet;"function"==typeof n&&("string"!=typeof t||o(n,"name")||r(n,"name",t),d(n).source=f.join("string"==typeof t?t:"")),e!==i?(s?!u&&e[t]&&(c=!0):delete e[t],c?e[t]=n:r(e,t,n)):c?e[t]=n:a(t,n)})(Function.prototype,"toString",function(){return"function"==typeof this&&u(this).source||s.call(this)})},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var i=n(10),l=n(71),r=n(7),o=n(36),a=Object.defineProperty;t.f=i?a:function(e,t,n){if(r(e),t=o(t,!0),r(n),l)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var i=n(23),l=Math.min;e.exports=function(e){return e>0?l(i(e),9007199254740991):0}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var i=n(10),l=n(13),r=n(34);e.exports=i?function(e,t,n){return l.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var i=n(35),l=n(15);e.exports=function(e){return i(l(e))}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){"use strict";var i=n(2),l=n(42),r=n(23),o=n(14),a=n(25),s=n(45),c=n(47),u=n(30),d=Math.max,f=Math.min;i({target:"Array",proto:!0,forced:!u("splice")},{splice:function(e,t){var n,i,u,p,x,h,g=a(this),v=o(g.length),m=l(e,v),b=arguments.length;if(0===b?n=i=0:1===b?(n=0,i=v-m):(n=b-2,i=f(d(r(t),0),v-m)),v+n-i>9007199254740991)throw TypeError("Maximum allowed length exceeded");for(u=s(g,i),p=0;pv-i+n;p--)delete g[p-1]}else if(n>i)for(p=v-i;p>m;p--)x=p+i-1,h=p+n-1,x in g?g[h]=g[x]:delete g[h];for(p=0;p0?i:n)(e)}},function(e,t,n){"use strict";var i=n(2),l=n(41).indexOf,r=n(29),o=[].indexOf,a=!!o&&1/[1].indexOf(1,-0)<0,s=r("indexOf");i({target:"Array",proto:!0,forced:a||s},{indexOf:function(e){return a?o.apply(this,arguments)||0:l(this,e,arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){var i=n(15);e.exports=function(e){return Object(i(e))}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},function(e,t,n){var i=n(2),l=n(159);i({global:!0,forced:parseInt!=l},{parseInt:l})},function(e,t,n){var i=n(1),l=n(38),r=n(39),o=i["__core-js_shared__"]||l("__core-js_shared__",{});(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.2.1",mode:r?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t,n){"use strict";var i=n(6);e.exports=function(e,t){var n=[][e];return!n||!i(function(){n.call(null,t||function(){throw 1},1)})}},function(e,t,n){var i=n(6),l=n(3),r=l("species");e.exports=function(e){return!i(function(){var t=[],n=t.constructor={};return n[r]=function(){return{foo:1}},1!==t[e](Boolean).foo})}},function(e,t,n){"use strict";var i=n(88),l=n(7),r=n(25),o=n(14),a=n(23),s=n(15),c=n(89),u=n(90),d=Math.max,f=Math.min,p=Math.floor,x=/\$([$&'`]|\d\d?|<[^>]*>)/g,h=/\$([$&'`]|\d\d?)/g;i("replace",2,function(e,t,n){function i(e,n,i,l,o,a){var s=i+e.length,c=l.length,u=h;return void 0!==o&&(o=r(o),u=x),t.call(a,u,function(t,r){var a;switch(r.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,i);case"'":return n.slice(s);case"<":a=o[r.slice(1,-1)];break;default:var u=+r;if(0===u)return t;if(u>c){var d=p(u/10);return 0===d?t:d<=c?void 0===l[d-1]?r.charAt(1):l[d-1]+r.charAt(1):t}a=l[u-1]}return void 0===a?"":a})}return[function(n,i){var l=s(this),r=null==n?void 0:n[e];return void 0!==r?r.call(n,l,i):t.call(String(l),n,i)},function(e,r){var s=n(t,e,this,r);if(s.done)return s.value;var p=l(e),x=String(this),h="function"==typeof r;h||(r=String(r));var g=p.global;if(g){var v=p.unicode;p.lastIndex=0}for(var m=[];;){var b=u(p,x);if(null===b)break;if(m.push(b),!g)break;var y=String(b[0]);""===y&&(p.lastIndex=c(x,o(p.lastIndex),v))}for(var w,_="",k=0,C=0;C=k&&(_+=x.slice(k,D)+O,k=D+S.length)}return _+x.slice(k)}]})},function(e,t){e.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},function(e,t,n){var i=n(10),l=n(70),r=n(34),o=n(17),a=n(36),s=n(18),c=n(71),u=Object.getOwnPropertyDescriptor;t.f=i?u:function(e,t){if(e=o(e),t=a(t,!0),c)try{return u(e,t)}catch(e){}if(s(e,t))return r(!l.f.call(e,t),e[t])}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var i=n(6),l=n(12),r="".split;e.exports=i(function(){return!Object("z").propertyIsEnumerable(0)})?function(e){return"String"==l(e)?r.call(e,""):Object(e)}:Object},function(e,t,n){var i=n(8);e.exports=function(e,t){if(!i(e))return e;var n,l;if(t&&"function"==typeof(n=e.toString)&&!i(l=n.call(e)))return l;if("function"==typeof(n=e.valueOf)&&!i(l=n.call(e)))return l;if(!t&&"function"==typeof(n=e.toString)&&!i(l=n.call(e)))return l;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){var i=n(1),l=n(8),r=i.document,o=l(r)&&l(r.createElement);e.exports=function(e){return o?r.createElement(e):{}}},function(e,t,n){var i=n(1),l=n(16);e.exports=function(e,t){try{l(i,e,t)}catch(n){i[e]=t}return t}},function(e,t){e.exports=!1},function(e,t){e.exports={}},function(e,t,n){var i=n(17),l=n(14),r=n(42),o=function(e){return function(t,n,o){var a,s=i(t),c=l(s.length),u=r(o,c);if(e&&n!=n){for(;c>u;)if(a=s[u++],a!=a)return!0}else for(;c>u;u++)if((e||u in s)&&s[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:o(!0),indexOf:o(!1)}},function(e,t,n){var i=n(23),l=Math.max,r=Math.min;e.exports=function(e,t){var n=i(e);return n<0?l(n+t,0):r(n,t)}},function(e,t){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(e,t,n){var i=n(6),l=/#|\.prototype\./,r=function(e,t){var n=a[o(e)];return n==c||n!=s&&("function"==typeof t?i(t):!!t)},o=r.normalize=function(e){return String(e).replace(l,".").toLowerCase()},a=r.data={},s=r.NATIVE="N",c=r.POLYFILL="P";e.exports=r},function(e,t,n){var i=n(8),l=n(46),r=n(3),o=r("species");e.exports=function(e,t){var n;return l(e)&&(n=e.constructor,"function"!=typeof n||n!==Array&&!l(n.prototype)?i(n)&&(n=n[o],null===n&&(n=void 0)):n=void 0),new(void 0===n?Array:n)(0===t?0:t)}},function(e,t,n){var i=n(12);e.exports=Array.isArray||function(e){return"Array"==i(e)}},function(e,t,n){"use strict";var i=n(36),l=n(13),r=n(34);e.exports=function(e,t,n){var o=i(t);o in e?l.f(e,o,r(0,n)):e[o]=n}},function(e,t,n){var i=n(49),l=n(35),r=n(25),o=n(14),a=n(45),s=[].push,c=function(e){var t=1==e,n=2==e,c=3==e,u=4==e,d=6==e,f=5==e||d;return function(p,x,h,g){for(var v,m,b=r(p),y=l(b),w=i(x,h,3),_=o(y.length),k=0,C=g||a,S=t?C(p,_):n?C(p,0):void 0;_>k;k++)if((f||k in y)&&(v=y[k],m=w(v,k,b),e))if(t)S[k]=m;else if(m)switch(e){case 3:return!0;case 5:return v;case 6:return k;case 2:s.call(S,v)}else if(u)return!1;return d?-1:c||u?u:S}};e.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6)}},function(e,t,n){var i=n(26);e.exports=function(e,t,n){if(i(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,l){return e.call(t,n,i,l)}}return function(){return e.apply(t,arguments)}}},function(e,t,n){"use strict";var i,l,r=n(51),o=RegExp.prototype.exec,a=String.prototype.replace,s=o,c=(i=/a/,l=/b*/g,o.call(i,"a"),o.call(l,"a"),0!==i.lastIndex||0!==l.lastIndex),u=void 0!==/()??/.exec("")[1],d=c||u;d&&(s=function(e){var t,n,i,l,s=this;return u&&(n=new RegExp("^"+s.source+"$(?!\\s)",r.call(s))),c&&(t=s.lastIndex),i=o.call(s,e),c&&i&&(s.lastIndex=s.global?i.index+i[0].length:t),u&&i&&i.length>1&&a.call(i[0],n,function(){for(l=1;l1?arguments[1]:void 0)}})},function(e,t){var n='
';angular.module("lumx.checkbox").run(["$templateCache",function(e){e.put("checkbox.html",n)}]),e.exports=n},function(e,t){var n="
";angular.module("lumx.chip").run(["$templateCache",function(e){e.put("chip.html",n)}]),e.exports=n},function(e,t){var n="
";angular.module("lumx.dropdown").run(["$templateCache",function(e){e.put("dropdown.html",n)}]),e.exports=n},function(e,t){var n='';angular.module("lumx.icon").run(["$templateCache",function(e){e.put("icon.html",n)}]),e.exports=n},function(e,t){var n='
    ';angular.module("lumx.list").run(["$templateCache",function(e){e.put("list.html",n)}]),e.exports=n},function(e,t){var n="
  • ";angular.module("lumx.list").run(["$templateCache",function(e){e.put("list-item.html",n)}]),e.exports=n},function(e,t){var n="
    ";angular.module("lumx.popover").run(["$templateCache",function(e){e.put("popover.html",n)}]),e.exports=n},function(e,t){var n='
    ';angular.module("lumx.radio-button").run(["$templateCache",function(e){e.put("radio-button.html",n)}]),e.exports=n},function(e,t){var n='
    {{ lx.label }}
    {{ lx.placeholder }}
    {{ lx.label }} +{{ lx.viewValue.length - 1 }}
    {{ lx.helper }}
    ';angular.module("lumx.select").run(["$templateCache",function(e){e.put("select.html",n)}]),e.exports=n},function(e,t){var n="
      ";angular.module("lumx.side-navigation").run(["$templateCache",function(e){e.put("side-navigation.html",n)}]),e.exports=n},function(e,t){var n="
    • {{ lx.label }}
      • ";angular.module("lumx.side-navigation").run(["$templateCache",function(e){e.put("side-navigation-item.html",n)}]),e.exports=n},function(e,t){var n="
        ";angular.module("lumx.switch").run(["$templateCache",function(e){e.put("switch.html",n)}]),e.exports=n},function(e,t){var n="
        {{ lx.helper }}
        ";angular.module("lumx.text-field").run(["$templateCache",function(e){e.put("text-field.html",n)}]),e.exports=n},function(e,t,n){"use strict";var i=n(2),l=n(41).includes,r=n(79);i({target:"Array",proto:!0},{includes:function(e){return l(this,e,arguments.length>1?arguments[1]:void 0)}}),r("includes")},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";var i={}.propertyIsEnumerable,l=Object.getOwnPropertyDescriptor,r=l&&!i.call({1:2},1);t.f=r?function(e){var t=l(this,e);return!!t&&t.enumerable}:i},function(e,t,n){var i=n(10),l=n(6),r=n(37);e.exports=!i&&!l(function(){return 7!=Object.defineProperty(r("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var i=n(28);e.exports=i("native-function-to-string",Function.toString)},function(e,t,n){var i,l,r,o=n(111),a=n(1),s=n(8),c=n(16),u=n(18),d=n(74),f=n(40),p=a.WeakMap;if(o){var x=new p,h=x.get,g=x.has,v=x.set;i=function(e,t){return v.call(x,e,t),t},l=function(e){return h.call(x,e)||{}},r=function(e){return g.call(x,e)}}else{var m=d("state");f[m]=!0,i=function(e,t){return c(e,m,t),t},l=function(e){return u(e,m)?e[m]:{}},r=function(e){return u(e,m)}}e.exports={set:i,get:l,has:r,enforce:function(e){return r(e)?l(e):i(e,{})},getterFor:function(e){return function(t){var n;if(!s(t)||(n=l(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},function(e,t,n){var i=n(28),l=n(75),r=i("keys");e.exports=function(e){return r[e]||(r[e]=l(e))}},function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++n+i).toString(36)}},function(e,t,n){e.exports=n(1)},function(e,t,n){var i=n(78),l=n(43),r=l.concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return i(e,r)}},function(e,t,n){var i=n(18),l=n(17),r=n(41).indexOf,o=n(40);e.exports=function(e,t){var n,a=l(e),s=0,c=[];for(n in a)!i(o,n)&&i(a,n)&&c.push(n);for(;t.length>s;)i(a,n=t[s++])&&(~r(c,n)||c.push(n));return c}},function(e,t,n){var i=n(3),l=n(116),r=n(16),o=i("unscopables"),a=Array.prototype;null==a[o]&&r(a,o,l(null)),e.exports=function(e){a[o][e]=!0}},function(e,t,n){var i=n(78),l=n(43);e.exports=Object.keys||function(e){return i(e,l)}},function(e,t,n){var i=n(22);e.exports=i("document","documentElement")},function(e,t,n){var i=n(2),l=n(118).entries;i({target:"Object",stat:!0},{entries:function(e){return l(e)}})},function(e,t,n){var i=n(8),l=n(12),r=n(3),o=r("match");e.exports=function(e){var t;return i(e)&&(void 0!==(t=e[o])?!!t:"RegExp"==l(e))}},function(e,t,n){var i=n(11),l=Date.prototype,r=l.toString,o=l.getTime;new Date(NaN)+""!="Invalid Date"&&i(l,"toString",function(){var e=o.call(this);return e==e?r.call(this):"Invalid Date"})},function(e,t,n){var i=n(11),l=n(127),r=Object.prototype;l!==r.toString&&i(r,"toString",l,{unsafe:!0})},function(e,t,n){var i=n(12),l=n(3),r=l("toStringTag"),o="Arguments"==i(function(){return arguments}());e.exports=function(e){var t,n,l;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),r))?n:o?i(t):"Object"==(l=i(t))&&"function"==typeof t.callee?"Arguments":l}},function(e,t,n){"use strict";var i=n(11),l=n(7),r=n(6),o=n(51),a=RegExp.prototype,s=a.toString,c=r(function(){return"/a/b"!=s.call({source:"a",flags:"b"})}),u="toString"!=s.name;(c||u)&&i(RegExp.prototype,"toString",function(){var e=l(this),t=String(e.source),n=e.flags,i=String(void 0===n&&e instanceof RegExp&&!("flags"in a)?o.call(e):n);return"/"+t+"/"+i},{unsafe:!0})},function(e,t,n){"use strict";var i=n(16),l=n(11),r=n(6),o=n(3),a=n(50),s=o("species"),c=!r(function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")}),u=!r(function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]});e.exports=function(e,t,n,d){var f=o(e),p=!r(function(){var t={};return t[f]=function(){return 7},7!=""[e](t)}),x=p&&!r(function(){var t=!1,n=/a/;return n.exec=function(){return t=!0,null},"split"===e&&(n.constructor={},n.constructor[s]=function(){return n}),n[f](""),!t});if(!p||!x||"replace"===e&&!c||"split"===e&&!u){var h=/./[f],g=n(f,""[e],function(e,t,n,i,l){return t.exec===a?p&&!l?{done:!0,value:h.call(t,n,i)}:{done:!0,value:e.call(n,t,i)}:{done:!1}}),v=g[0],m=g[1];l(String.prototype,e,v),l(RegExp.prototype,f,2==t?function(e,t){return m.call(e,this,t)}:function(e){return m.call(e,this)}),d&&i(RegExp.prototype[f],"sham",!0)}}},function(e,t,n){"use strict";var i=n(128).charAt;e.exports=function(e,t,n){return t+(n?i(e,t).length:1)}},function(e,t,n){var i=n(12),l=n(50);e.exports=function(e,t){var n=e.exec;if("function"==typeof n){var r=n.call(e,t);if("object"!=typeof r)throw TypeError("RegExp exec method returned something other than an Object or null");return r}if("RegExp"!==i(e))throw TypeError("RegExp#exec called on incompatible receiver");return l.call(e,t)}},function(e,t,n){"use strict";var i=n(22),l=n(13),r=n(3),o=n(10),a=r("species");e.exports=function(e){var t=i(e),n=l.f;o&&t&&!t[a]&&n(t,a,{configurable:!0,get:function(){return this}})}},function(e,t,n){"use strict";var i=n(2),l=n(6),r=n(46),o=n(8),a=n(25),s=n(14),c=n(47),u=n(45),d=n(30),f=n(3),p=f("isConcatSpreadable"),x=!l(function(){var e=[];return e[p]=!1,e.concat()[0]!==e}),h=d("concat"),g=function(e){if(!o(e))return!1;var t=e[p];return void 0!==t?!!t:r(e)},v=!x||!h;i({target:"Array",proto:!0,forced:v},{concat:function(e){var t,n,i,l,r,o=a(this),d=u(o,0),f=0;for(t=-1,i=arguments.length;t9007199254740991)throw TypeError("Maximum allowed index exceeded");for(n=0;n=9007199254740991)throw TypeError("Maximum allowed index exceeded");c(d,f++,r)}return d.length=f,d}})},function(e,t,n){"use strict";var i=n(2),l=n(94);i({target:"Array",proto:!0,forced:[].forEach!=l},{forEach:l})},function(e,t,n){"use strict";var i=n(48).forEach,l=n(29);e.exports=l("forEach")?function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}:[].forEach},function(e,t,n){var i=n(1),l=n(168),r=n(94),o=n(16);for(var a in l){var s=i[a],c=s&&s.prototype;if(c&&c.forEach!==r)try{o(c,"forEach",r)}catch(e){c.forEach=r}}},function(e,t,n){var i=n(1);e.exports=i.Promise},function(e,t){e.exports={}},function(e,t,n){var i=n(7),l=n(26),r=n(3),o=r("species");e.exports=function(e,t){var n,r=i(e).constructor;return void 0===r||null==(n=i(r)[o])?t:l(n)}},function(e,t,n){var i,l,r,o=n(1),a=n(6),s=n(12),c=n(49),u=n(81),d=n(37),f=o.location,p=o.setImmediate,x=o.clearImmediate,h=o.process,g=o.MessageChannel,v=o.Dispatch,m=0,b={},y=function(e){if(b.hasOwnProperty(e)){var t=b[e];delete b[e],t()}},w=function(e){return function(){y(e)}},_=function(e){y(e.data)},k=function(e){o.postMessage(e+"",f.protocol+"//"+f.host)};p&&x||(p=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return b[++m]=function(){("function"==typeof e?e:Function(e)).apply(void 0,t)},i(m),m},x=function(e){delete b[e]},"process"==s(h)?i=function(e){h.nextTick(w(e))}:v&&v.now?i=function(e){v.now(w(e))}:g?(l=new g,r=l.port2,l.port1.onmessage=_,i=c(r.postMessage,r,1)):!o.addEventListener||"function"!=typeof postMessage||o.importScripts||a(k)?i="onreadystatechange"in d("script")?function(e){u.appendChild(d("script")).onreadystatechange=function(){u.removeChild(this),y(e)}}:function(e){setTimeout(w(e),0)}:(i=k,o.addEventListener("message",_,!1))),e.exports={set:p,clear:x}},function(e,t,n){var i=n(22);e.exports=i("navigator","userAgent")||""},function(e,t,n){var i=n(7),l=n(8),r=n(102);e.exports=function(e,t){if(i(e),l(t)&&t.constructor===e)return t;var n=r.f(e),o=n.resolve;return o(t),n.promise}},function(e,t,n){"use strict";var i=n(26),l=function(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=i(t),this.reject=i(n)};e.exports.f=function(e){return new l(e)}},function(e,t,n){"use strict";(function(e){function n(e){return e&&"[object Function]"==={}.toString.call(e)}function i(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.defaultView,i=n.getComputedStyle(e,null);return t?i[t]:i}function l(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function r(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=i(e),n=t.overflow,o=t.overflowX,a=t.overflowY;return/(auto|scroll|overlay)/.test(n+a+o)?e:r(l(e))}function o(e){return 11===e?W:10===e?Y:W||Y}function a(e){if(!e)return document.documentElement;for(var t=o(10)?document.body:null,n=e.offsetParent||null;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var l=n&&n.nodeName;return l&&"BODY"!==l&&"HTML"!==l?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===i(n,"position")?a(n):n:e?e.ownerDocument.documentElement:document.documentElement}function s(e){return null!==e.parentNode?s(e.parentNode):e}function c(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?e:t,l=n?t:e,r=document.createRange();r.setStart(i,0),r.setEnd(l,0);var o,u,d=r.commonAncestorContainer;if(e!==d&&t!==d||i.contains(l))return o=d,u=o.nodeName,"BODY"===u||"HTML"!==u&&a(o.firstElementChild)!==o?a(d):d;var f=s(e);return f.host?c(f.host,t):c(e,s(t).host)}function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===t?"scrollTop":"scrollLeft",i=e.nodeName;if("BODY"===i||"HTML"===i){var l=e.ownerDocument.documentElement,r=e.ownerDocument.scrollingElement||l;return r[n]}return e[n]}function d(e,t){var n="x"===t?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"],10)+parseFloat(e["border"+i+"Width"],10)}function f(e,t,n,i){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],o(10)?parseInt(n["offset"+e])+parseInt(i["margin"+("Height"===e?"Top":"Left")])+parseInt(i["margin"+("Height"===e?"Bottom":"Right")]):0)}function p(e){var t=e.body,n=e.documentElement,i=o(10)&&getComputedStyle(n);return{height:f("Height",t,n,i),width:f("Width",t,n,i)}}function x(e){return Z({},e,{right:e.left+e.width,bottom:e.top+e.height})}function h(e){var t={};try{if(o(10)){t=e.getBoundingClientRect();var n=u(e,"top"),l=u(e,"left");t.top+=n,t.left+=l,t.bottom+=n,t.right+=l}else t=e.getBoundingClientRect()}catch(e){}var r={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top},a="HTML"===e.nodeName?p(e.ownerDocument):{},s=a.width||e.clientWidth||r.right-r.left,c=a.height||e.clientHeight||r.bottom-r.top,f=e.offsetWidth-s,h=e.offsetHeight-c;if(f||h){var g=i(e);f-=d(g,"x"),h-=d(g,"y"),r.width-=f,r.height-=h}return x(r)}function g(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],l=o(10),a="HTML"===t.nodeName,s=h(e),c=h(t),d=r(e),f=i(t),p=parseFloat(f.borderTopWidth,10),g=parseFloat(f.borderLeftWidth,10);n&&a&&(c.top=Math.max(c.top,0),c.left=Math.max(c.left,0));var v=x({top:s.top-c.top-p,left:s.left-c.left-g,width:s.width,height:s.height});if(v.marginTop=0,v.marginLeft=0,!l&&a){var m=parseFloat(f.marginTop,10),b=parseFloat(f.marginLeft,10);v.top-=p-m,v.bottom-=p-m,v.left-=g-b,v.right-=g-b,v.marginTop=m,v.marginLeft=b}return(l&&!n?t.contains(d):t===d&&"BODY"!==d.nodeName)&&(v=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=u(t,"top"),l=u(t,"left"),r=n?-1:1;return e.top+=i*r,e.bottom+=i*r,e.left+=l*r,e.right+=l*r,e}(v,t)),v}function v(e){if(!e||!e.parentElement||o())return document.documentElement;for(var t=e.parentElement;t&&"none"===i(t,"transform");)t=t.parentElement;return t||document.documentElement}function m(e,t,n,o){var a=arguments.length>4&&void 0!==arguments[4]&&arguments[4],s={top:0,left:0},d=a?v(e):c(e,t);if("viewport"===o)s=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.ownerDocument.documentElement,i=g(e,n),l=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),o=t?0:u(n),a=t?0:u(n,"left"),s={top:o-i.top+i.marginTop,left:a-i.left+i.marginLeft,width:l,height:r};return x(s)}(d,a);else{var f=void 0;"scrollParent"===o?(f=r(l(t)),"BODY"===f.nodeName&&(f=e.ownerDocument.documentElement)):f="window"===o?e.ownerDocument.documentElement:o;var h=g(f,d,a);if("HTML"!==f.nodeName||function e(t){var n=t.nodeName;if("BODY"===n||"HTML"===n)return!1;if("fixed"===i(t,"position"))return!0;var r=l(t);return!!r&&e(r)}(d))s=h;else{var m=p(e.ownerDocument),b=m.height,y=m.width;s.top+=h.top-h.marginTop,s.bottom=b+h.top,s.left+=h.left-h.marginLeft,s.right=y+h.left}}n=n||0;var w="number"==typeof n;return s.left+=w?n:n.left||0,s.top+=w?n:n.top||0,s.right-=w?n:n.right||0,s.bottom-=w?n:n.bottom||0,s}function b(e,t,n,i,l){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var o=m(n,i,r,l),a={top:{width:o.width,height:t.top-o.top},right:{width:o.right-t.right,height:o.height},bottom:{width:o.width,height:o.bottom-t.bottom},left:{width:t.left-o.left,height:o.height}},s=Object.keys(a).map(function(e){return Z({key:e},a[e],{area:(t=a[e],n=t.width,i=t.height,n*i)});var t,n,i}).sort(function(e,t){return t.area-e.area}),c=s.filter(function(e){var t=e.width,i=e.height;return t>=n.clientWidth&&i>=n.clientHeight}),u=c.length>0?c[0].key:s[0].key,d=e.split("-")[1];return u+(d?"-"+d:"")}function y(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,l=i?v(t):c(t,n);return g(n,l,i)}function w(e){var t=e.ownerDocument.defaultView,n=t.getComputedStyle(e),i=parseFloat(n.marginTop||0)+parseFloat(n.marginBottom||0),l=parseFloat(n.marginLeft||0)+parseFloat(n.marginRight||0),r={width:e.offsetWidth+l,height:e.offsetHeight+i};return r}function _(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function k(e,t,n){n=n.split("-")[0];var i=w(e),l={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),o=r?"top":"left",a=r?"left":"top",s=r?"height":"width",c=r?"width":"height";return l[o]=t[o]+t[s]/2-i[s]/2,l[a]=n===a?t[a]-i[c]:t[_(a)],l}function C(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function S(e,t,i){var l=void 0===i?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===n});var i=C(e,function(e){return e[t]===n});return e.indexOf(i)}(e,"name",i));return l.forEach(function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var i=e.function||e.fn;e.enabled&&n(i)&&(t.offsets.popper=x(t.offsets.popper),t.offsets.reference=x(t.offsets.reference),t=i(t,e))}),t}function D(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=y(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=b(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=k(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=S(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function $(e,t){return e.some(function(e){var n=e.name,i=e.enabled;return i&&n===t})}function T(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),i=0;i1&&void 0!==arguments[1]&&arguments[1],n=J.indexOf(e),i=J.slice(n+1).concat(J.slice(0,n));return t?i.reverse():i}function j(e,t,n,i){var l=[0,0],r=-1!==["right","left"].indexOf(i),o=e.split(/(\+|\-)/).map(function(e){return e.trim()}),a=o.indexOf(C(o,function(e){return-1!==e.search(/,|\s/)}));o[a]&&-1===o[a].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var s=/\s*,\s*|\s+/,c=-1!==a?[o.slice(0,a).concat([o[a].split(s)[0]]),[o[a].split(s)[1]].concat(o.slice(a+1))]:[o];return c=c.map(function(e,i){var l=(1===i?!r:r)?"height":"width",o=!1;return e.reduce(function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,o=!0,e):o?(e[e.length-1]+=t,o=!1,e):e.concat(t)},[]).map(function(e){return function(e,t,n,i){var l=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+l[1],o=l[2];if(!r)return e;if(0===o.indexOf("%")){var a=void 0;switch(o){case"%p":a=n;break;case"%":case"%r":default:a=i}var s=x(a);return s[t]/100*r}if("vh"===o||"vw"===o){var c=void 0;return c="vh"===o?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0),c/100*r}return r}(e,l,t,n)})}),c.forEach(function(e,t){e.forEach(function(n,i){A(n)&&(l[t]+=n*("-"===e[i-1]?-1:1))})}),l}for(var U="undefined"!=typeof window&&"undefined"!=typeof document,H=["Edge","Trident","Firefox"],N=0,R=0;R=0){N=1;break}var z=U&&window.Promise,B=z?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},N))}},W=U&&!(!window.MSInputMethodContext||!document.documentMode),Y=U&&/MSIE 10/.test(navigator.userAgent),q=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},G=function(){function e(e,t){for(var n=0;nc[e]&&!t.escapeWithReference&&(i=Math.min(d[n],c[e]-("right"===e?d.width:d.height))),K({},n,i)}};return u.forEach(function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";d=Z({},d,f[t](e))}),e.offsets.popper=d,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,i=t.reference,l=e.placement.split("-")[0],r=Math.floor,o=-1!==["top","bottom"].indexOf(l),a=o?"right":"bottom",s=o?"left":"top",c=o?"width":"height";return n[a]r(i[a])&&(e.offsets.popper[s]=r(i[a])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!V(e.instance.modifiers,"arrow","keepTogether"))return e;var l=t.element;if("string"==typeof l){if(l=e.instance.popper.querySelector(l),!l)return e}else if(!e.instance.popper.contains(l))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var r=e.placement.split("-")[0],o=e.offsets,a=o.popper,s=o.reference,c=-1!==["left","right"].indexOf(r),u=c?"height":"width",d=c?"Top":"Left",f=d.toLowerCase(),p=c?"left":"top",h=c?"bottom":"right",g=w(l)[u];s[h]-ga[h]&&(e.offsets.popper[f]+=s[f]+g-a[h]),e.offsets.popper=x(e.offsets.popper);var v=s[f]+s[u]/2-g/2,m=i(e.instance.popper),b=parseFloat(m["margin"+d],10),y=parseFloat(m["border"+d+"Width"],10),_=v-e.offsets.popper[f]-b-y;return _=Math.max(Math.min(a[u]-g,_),0),e.arrowElement=l,e.offsets.arrow=(n={},K(n,f,Math.round(_)),K(n,p,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(e,t){if($(e.instance.modifiers,"inner"))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var n=m(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),i=e.placement.split("-")[0],l=_(i),r=e.placement.split("-")[1]||"",o=[];switch(t.behavior){case ee.FLIP:o=[i,l];break;case ee.CLOCKWISE:o=P(i);break;case ee.COUNTERCLOCKWISE:o=P(i,!0);break;default:o=t.behavior}return o.forEach(function(a,s){if(i!==a||o.length===s+1)return e;i=e.placement.split("-")[0],l=_(i);var c=e.offsets.popper,u=e.offsets.reference,d=Math.floor,f="left"===i&&d(c.right)>d(u.left)||"right"===i&&d(c.left)d(u.top)||"bottom"===i&&d(c.top)d(n.right),h=d(c.top)d(n.bottom),v="left"===i&&p||"right"===i&&x||"top"===i&&h||"bottom"===i&&g,m=-1!==["top","bottom"].indexOf(i),b=!!t.flipVariations&&(m&&"start"===r&&p||m&&"end"===r&&x||!m&&"start"===r&&h||!m&&"end"===r&&g),y=!!t.flipVariationsByContent&&(m&&"start"===r&&x||m&&"end"===r&&p||!m&&"start"===r&&g||!m&&"end"===r&&h),w=b||y;(f||v||w)&&(e.flipped=!0,(f||v)&&(i=o[s+1]),w&&(r=function(e){return"end"===e?"start":"start"===e?"end":e}(r)),e.placement=i+(r?"-"+r:""),e.offsets.popper=Z({},e.offsets.popper,k(e.instance.popper,e.offsets.reference,e.placement)),e=S(e.instance.modifiers,e,"flip"))}),e},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],i=e.offsets,l=i.popper,r=i.reference,o=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return l[o?"left":"top"]=r[n]-(a?l[o?"width":"height"]:0),e.placement=_(t),e.offsets.popper=x(l),e}},hide:{order:800,enabled:!0,fn:function(e){if(!V(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=C(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottomn.right||t.top>n.bottom||t.right2&&void 0!==arguments[2]?arguments[2]:{};q(this,e),this.scheduleUpdate=function(){return requestAnimationFrame(l.update)},this.update=B(this.update.bind(this)),this.options=Z({},e.Defaults,r),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=i&&i.jquery?i[0]:i,this.options.modifiers={},Object.keys(Z({},e.Defaults.modifiers,r.modifiers)).forEach(function(t){l.options.modifiers[t]=Z({},e.Defaults.modifiers[t]||{},r.modifiers?r.modifiers[t]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return Z({name:e},l.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(e){e.enabled&&n(e.onLoad)&&e.onLoad(l.reference,l.popper,l.options,e,l.state)}),this.update();var o=this.options.eventsEnabled;o&&this.enableEventListeners(),this.state.eventsEnabled=o}return G(e,[{key:"update",value:function(){return D.call(this)}},{key:"destroy",value:function(){return L.call(this)}},{key:"enableEventListeners",value:function(){return I.call(this)}},{key:"disableEventListeners",value:function(){return M.call(this)}}]),e}();ie.Utils=("undefined"!=typeof window?window:e).PopperUtils,ie.placements=Q,ie.Defaults=ne,t.a=ie}).call(this,n(69))},function(e,t,n){n(105),n(106),n(107),n(108),n(109),n(110),n(122),n(123),n(124),n(125),n(126),n(129),n(130),n(131),n(132),n(135),n(136),n(139),n(140),n(141),n(142),n(143),n(144),n(145),n(146),n(147),n(148),n(149),n(150),n(151),n(152),n(153),n(156),n(157),n(158),n(160),n(161),n(162),n(167),n(169),n(170),n(171),n(172),n(173),n(187),n(188),n(189),n(190),n(55),n(56),n(191),n(192),n(57),n(193),n(194),n(195),n(196),n(58),n(60),n(59),n(61),n(197),n(62),n(198),n(63),n(65),n(64),n(199),n(200),n(201),n(66),n(202),n(203),n(204),n(205),e.exports=n(67)},function(e,t,n){},function(e,t,n){},function(e,t){angular.module("lumx.utils.depth",[]),angular.module("lumx.utils.enter-keypress",[]),angular.module("lumx.utils.event-scheduler",[]),angular.module("lumx.utils.focus-on-init",[]),angular.module("lumx.utils.focus-trap",[]),angular.module("lumx.utils.stop-propagation",[]),angular.module("lumx.utils.transclude-replace",[]),angular.module("lumx.utils.utils",[]),angular.module("lumx.utils",["lumx.utils.depth","lumx.utils.enter-keypress","lumx.utils.event-scheduler","lumx.utils.focus-on-init","lumx.utils.focus-trap","lumx.utils.stop-propagation","lumx.utils.transclude-replace","lumx.utils.utils"]),angular.module("lumx.button",[]),angular.module("lumx.checkbox",[]),angular.module("lumx.chip",[]),angular.module("lumx.data-table",[]),angular.module("lumx.date-picker",[]),angular.module("lumx.dialog",["lumx.utils.event-scheduler"]),angular.module("lumx.dropdown",["lumx.utils.event-scheduler"]),angular.module("lumx.fab",[]),angular.module("lumx.file-input",[]),angular.module("lumx.grid",[]),angular.module("lumx.icon",[]),angular.module("lumx.list",[]),angular.module("lumx.notification",["lumx.utils.event-scheduler"]),angular.module("lumx.popover",[]),angular.module("lumx.progress",[]),angular.module("lumx.radio-button",[]),angular.module("lumx.ripple",[]),angular.module("lumx.search-filter",[]),angular.module("lumx.select",[]),angular.module("lumx.side-navigation",[]),angular.module("lumx.stepper",[]),angular.module("lumx.switch",[]),angular.module("lumx.tabs",[]),angular.module("lumx.text-field",[]),angular.module("lumx.tooltip",[]),angular.module("lumx",["lumx.button","lumx.checkbox","lumx.chip","lumx.data-table","lumx.date-picker","lumx.dialog","lumx.dropdown","lumx.fab","lumx.file-input","lumx.grid","lumx.icon","lumx.list","lumx.notification","lumx.popover","lumx.progress","lumx.radio-button","lumx.ripple","lumx.search-filter","lumx.select","lumx.side-navigation","lumx.stepper","lumx.switch","lumx.tabs","lumx.text-field","lumx.tooltip","lumx.utils"])},function(e,t,n){"use strict";function i(){function e(){return n}function t(){n++}var n=1e3;this.get=e,this.increase=t,this.getDepth=e,this.register=t}n.r(t),n.d(t,"DepthService",function(){return i}),angular.module("lumx.utils.depth").service("LxDepthService",i)},function(e,t,n){"use strict";function i(){return{link:function(e,t,n){t.on("keydown keypress",function(t){t.which===l.c&&(e.$apply(function(){e.$eval(n.lxEnterKeypress,{$event:t})}),t.preventDefault())})}}}n.r(t),n.d(t,"EnterKeypressDirective",function(){return i});var l=n(0);angular.module("lumx.utils.enter-keypress").directive("lxEnterKeypress",i)},function(e,t,n){"use strict";function i(e,t){function n(e){for(var t,n=0,i=Object.entries(l);n-1&&(l[o.eventName].splice(a,1),delete i[t],r=!0),0===l[o.eventName].length&&(delete l[o.eventName],e.off(o.eventName,n))}return r}}n.r(t),n.d(t,"EventSchedulerService",function(){return i});n(68),n(24),n(19),n(82),n(119);i.$inject=["$document","LxUtilsService"],angular.module("lumx.utils.event-scheduler").service("LxEventSchedulerService",i)},function(e,t,n){var i=n(1),l=n(72),r=i.WeakMap;e.exports="function"==typeof r&&/native code/.test(l.call(r))},function(e,t,n){var i=n(18),l=n(113),r=n(33),o=n(13);e.exports=function(e,t){for(var n=l(t),a=o.f,s=r.f,c=0;cdocument.F=Object<\/script>"),e.close(),f=e.F;n--;)delete f.prototype[r[n]];return f()};e.exports=Object.create||function(e,t){var n;return null!==e?(d.prototype=i(e),n=new d,d.prototype=null,n[u]=e):n=f(),void 0===t?n:l(n,t)},o[u]=!0},function(e,t,n){var i=n(10),l=n(13),r=n(7),o=n(80);e.exports=i?Object.defineProperties:function(e,t){r(e);for(var n,i=o(t),a=i.length,s=0;a>s;)l.f(e,n=i[s++],t[n]);return e}},function(e,t,n){var i=n(10),l=n(80),r=n(17),o=n(70).f,a=function(e){return function(t){for(var n,a=r(t),s=l(a),c=s.length,u=0,d=[];c>u;)n=s[u++],i&&!o.call(a,n)||d.push(e?[n,a[n]]:a[n]);return d}};e.exports={entries:a(!0),values:a(!1)}},function(e,t,n){"use strict";var i=n(2),l=n(120),r=n(15),o=n(121);i({target:"String",proto:!0,forced:!o("includes")},{includes:function(e){return!!~String(r(this)).indexOf(l(e),arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){var i=n(83);e.exports=function(e){if(i(e))throw TypeError("The method doesn't accept regular expressions");return e}},function(e,t,n){var i=n(3),l=i("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[l]=!1,"/./"[e](t)}catch(e){}}return!1}},function(e,t,n){"use strict";function i(e){return{link:function(t,n,i){angular.isDefined(i.lxFocusOnInit)&&i.lxFocusOnInit&&!t.$eval(i.lxFocusOnInit)||e(function(){n.focus()})}}}n.r(t),n.d(t,"FocusOnInitDirective",function(){return i}),i.$inject=["$timeout"],angular.module("lumx.utils.focus-on-init").directive("lxFocusOnInit",i)},function(e,t,n){"use strict";function i(){function e(e){if(e.keyCode===l.e){var n=t.find('a[href]:not([tabindex="-1"]), button:not([tabindex="-1"]), textarea:not([tabindex="-1"]), input[type="text"]:not([tabindex="-1"]), input[type="radio"]:not([tabindex="-1"]), input[type="checkbox"]:not([tabindex="-1"]), [tabindex]:not([tabindex="-1"])'),i=n[0],r=n[n.length-1];e.shiftKey?document.activeElement===i&&(r.focus(),e.preventDefault()):document.activeElement===r&&(i.focus(),e.preventDefault())}}var t;this.activate=function(n){t=n,t.on("keydown keypress",e)},this.disable=function(){t.off("keydown keypress",e),t=void 0}}n.r(t),n.d(t,"FocusTrapService",function(){return i});n(5);var l=n(0);angular.module("lumx.utils.focus-trap").service("LxFocusTrapService",i)},function(e,t,n){"use strict";function i(){return{link:function(e,t,n){t.on(n.lxStopPropagation,function(e){e.stopPropagation()})}}}n.r(t),n.d(t,"StopPropagationDirective",function(){return i}),angular.module("lumx.utils.stop-propagation").directive("lxStopPropagation",i)},function(e,t,n){"use strict";function i(){return{link:function(e,t,n,i,l){l&&l(function(e){e.length>0?t.replaceWith(e):t.remove()})},restrict:"EA",terminal:!0}}n.r(t),n.d(t,"TranscludeReplaceDirective",function(){return i}),angular.module("lumx.utils.transclude-replace").directive("ngTranscludeReplace",i)},function(e,t,n){"use strict";function i(e){this.debounce=function(e,t,n){var i,l,r,o,a,s=this,c=arguments;t=t||500;var u=function s(){var c=Date.now()-a;c=0?o=setTimeout(s,t-c):(o=null,n||(r=e.apply(l,i),o||(l=i=null)))},d=function(){l=s,i=c,a=Date.now();var d=n&&!o;return o||(o=setTimeout(u,t)),d&&(r=e.apply(l,i),l=i=null),r};return d.clear=function(){clearTimeout(o),o=l=i=null},d},this.disableBodyScroll=function(){e.$broadcast("lx-scroll__disable")},this.escapeRegexp=function(e){return e.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")},this.generateUUID=function(){var e=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var n=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"===t?n:3&n|8).toString(16)})},this.restoreBodyScroll=function(){e.$broadcast("lx-scroll__restore")}}n.r(t),n.d(t,"UtilsService",function(){return i});n(84),n(85),n(9),n(87),n(31);i.$inject=["$rootScope"],angular.module("lumx.utils.utils").service("LxUtilsService",i)},function(e,t,n){"use strict";var i=n(86),l=n(3),r=l("toStringTag"),o={};o[r]="z",e.exports="[object z]"!==String(o)?function(){return"[object "+i(this)+"]"}:o.toString},function(e,t,n){var i=n(23),l=n(15),r=function(e){return function(t,n){var r,o,a=String(l(t)),s=i(n),c=a.length;return s<0||s>=c?e?"":void 0:(r=a.charCodeAt(s),r<55296||r>56319||s+1===c||(o=a.charCodeAt(s+1))<56320||o>57343?e?a.charAt(s):r:e?a.slice(s,s+2):o-56320+(r-55296<<10)+65536)}};e.exports={codeAt:r(!1),charAt:r(!0)}},function(e,t,n){"use strict";function i(){return{link:function(e,t,n){if(!n.lxVariant&&!n.lxType||"button"===n.lxVariant||"raised"===n.lxType||"flat"===n.lxType){var i=t.find("i:first-child"),r=t.find("i:last-child"),o=t.find("span");i.length>0&&t.addClass(l.a+"-button--has-left-icon"),r.length>0&&t.addClass(l.a+"-button--has-right-icon"),0===o.length&&t.wrapInner("")}var a=!n.lxEmphasis||"high"===n.lxEmphasis,s=a?"primary":"dark",c="high",u="m",d="light",f="button";n.lxColor||t.addClass(l.a+"-button--color-"+s),n.$observe("lxColor",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*button--color-\S+/g)||[]).join(" ")}).addClass(l.a+"-button--color-"+e)}),n.lxEmphasis||t.addClass(l.a+"-button--emphasis-"+c),n.$observe("lxEmphasis",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*button--emphasis-\S+/g)||[]).join(" ")}).addClass(l.a+"-button--emphasis-"+e)}),n.lxSize||t.addClass(l.a+"-button--size-"+u),n.$observe("lxSize",function(e){if(e){t.removeClass(function(e,t){return(t.match(/(?:\S|-)*button--size-\S+/g)||[]).join(" ")}).addClass(l.a+"-button--size-"+{xs:"s",s:"s",m:"m",l:"m",xl:"m"}[e])}}),!n.lxTheme&&a&&t.addClass(l.a+"-button--theme-"+d),n.$observe("lxTheme",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*button--theme-\S+/g)||[]).join(" ")}).addClass(l.a+"-button--theme-"+e)}),n.lxVariant||t.addClass(l.a+"-button--variant-"+f),n.$observe("lxVariant",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*button--variant-\S+/g)||[]).join(" ")}).addClass(l.a+"-button--variant-"+e)}),n.$observe("lxType",function(e){if(e){t.removeClass(function(e,t){return(t.match(/(?:\S|-)*button--emphasis-\S+/g)||[]).join(" ")}).addClass(l.a+"-button--emphasis-"+{raised:"high",flat:"low",fab:"high",icon:"low"}[e]),"fab"!==e&&"icon"!==e||t.removeClass(function(e,t){return(t.match(/(?:\S|-)*button--variant-\S+/g)||[]).join(" ")}).addClass(l.a+"-button--variant-icon")}}),e.$watch(n.lxIsSelected,function(e){e?t.addClass(l.a+"-button--is-selected"):t.removeClass(l.a+"-button--is-selected")})},replace:!0,restrict:"E",template:function(e,t){return function(e){return angular.isDefined(e.href)||angular.isDefined(e.ngHref)||angular.isDefined(e.ngLink)||angular.isDefined(e.uiSref)}(t)?'':''},transclude:!0}}n.r(t),n.d(t,"ButtonDirective",function(){return i});n(5),n(20),n(9),n(21);var l=n(0);angular.module("lumx.button").directive("lxButton",i)},function(e,t,n){"use strict";function i(e){var t,n=this;n.checkboxId=e.generateUUID(),n.hasHelper=!1,n.hasLabel=!1,n.hasTranscluded=!1,n.icons={mdiCheck:o.b},n.viewValue=void 0,n.setModelController=function(e){t=e,t.$render=function(){n.viewValue=t.$viewValue}},n.updateViewValue=function(){angular.isUndefined(t)?n.viewValue=!n.viewValue:(t.$setViewValue(!t.$viewValue),t.$render())}}function l(){return{bindToController:!0,controller:i,controllerAs:"lx",link:function(e,t,n,i,l){i[1]&&i[0].setModelController(i[1]),l.isSlotFilled("label")&&(i[0].hasLabel=!0),l.isSlotFilled("helper")&&(i[0].hasHelper=!0),i[0].hasLabel||i[0].hasHelper||l(function(e){e.length>0&&(i[0].hasTranscluded=!0)}),n.$observe("disabled",function(e){t.find("input").attr("disabled",e),e?t.addClass(r.a+"-checkbox--is-disabled"):t.removeClass(r.a+"-checkbox--is-disabled")}),n.$observe("checked",function(e){t.find("input").attr("checked",e),i[0].viewValue=e})},replace:!0,require:["lxCheckbox","?ngModel"],restrict:"E",scope:{theme:"@?lxTheme"},template:s.a,transclude:{helper:"?lxCheckboxHelp",label:"?lxCheckboxLabel"}}}n.r(t),n.d(t,"CheckboxDirective",function(){return l});n(5);var r=n(0),o=n(4),a=n(55),s=n.n(a);i.$inject=["LxUtilsService"],angular.module("lumx.checkbox").directive("lxCheckbox",l)},function(e,t,n){"use strict";function i(){var e=this;e.hasAfter=!1,e.hasBefore=!1,e.hasLabel=!1,e.icons={mdiMenuDown:o.i},e.handleOnAfterClick=function(t){angular.isFunction(e.onAfterClick)&&(t.stopPropagation(),e.onAfterClick())},e.handleOnBeforeClick=function(t){angular.isFunction(e.onBeforeClick)&&(t.stopPropagation(),e.onBeforeClick())},e.handleOnClick=function(t){angular.isFunction(e.onClick)&&e.onClick({$event:t})}}function l(){return{bindToController:!0,controller:i,controllerAs:"lx",link:function(e,t,n,i,l){l.isSlotFilled("after")&&(i.hasAfter=!0),l.isSlotFilled("before")&&(i.hasBefore=!0),l.isSlotFilled("label")&&(i.hasLabel=!0),n.lxColor||t.addClass(r.a+"-chip--color-dark"),n.$observe("lxColor",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*chip--color-\S+/g)||[]).join(" ")}).addClass(r.a+"-chip--color-"+e)})},replace:!0,restrict:"E",scope:{color:"@?lxColor",hasDropdownIndicator:"=?lxHasDropdownIndicator",isDisabled:"=?ngDisabled",isSelected:"=?lxIsSelected",onAfterClick:"&?lxOnAfterClick",onBeforeClick:"&?lxOnBeforeClick",onClick:"&?lxOnClick",size:"@?lxSize",theme:"@?lxTheme"},template:s.a,transclude:{after:"?lxChipAfter",before:"?lxChipBefore",label:"lxChipLabel"}}}n.r(t),n.d(t,"ChipDirective",function(){return l});n(20),n(9),n(21);var r=n(0),o=n(4),a=n(56),s=n.n(a);angular.module("lumx.chip").directive("lxChip",l)},function(e,t,n){"use strict";n.r(t);n(24),n(133),n(19),n(134);!function(){function e(e,t,n){function i(){a.selectedRows.length=0;for(var t=0,n=a.tbody.length;t-1&&(a.selectedRows.splice(a.selectedRows.indexOf(t),1),a.allRowsSelected=!1,e.$broadcast("lx-data-table__unselected",a.id,a.selectedRows,t)))}var a=this;a.areAllRowsSelected=function(){for(var e=0,t=0,n=a.tbody.length;t0?n[0]:n)}),n.$on("lx-data-table__select-all",function(e,t){t===a.id&&i()}),n.$on("lx-data-table__unselect",function(e,t,n){t===a.id&&angular.isDefined(n)&&function(e){o(e,!1)}(angular.isArray(n)&&n.length>0?n[0]:n)}),n.$on("lx-data-table__unselect-all",function(e,t){t===a.id&&l()}),n.$on("lx-data-table__activate",function(e,t,n){t===a.id&&angular.isDefined(n)&&function(e){r(e,!0)}(angular.isArray(n)&&n.length>0?n[0]:n)}),n.$on("lx-data-table__deactivate",function(e,t,n){t===a.id&&angular.isDefined(n)&&function(e){r(e,!1)}(angular.isArray(n)&&n.length>0?n[0]:n)})}angular.module("lumx.data-table").directive("lxDataTable",function(){return{restrict:"E",templateUrl:"data-table.html",scope:{activable:"=?lxActivable",border:"=?lxBorder",bulk:"=?lxBulk",selectable:"=?lxSelectable",thumbnail:"=?lxThumbnail",tbody:"=lxTbody",thead:"=lxThead"},link:function(e,t,n,i){n.$observe("id",function(e){i.id=e})},controller:e,controllerAs:"lxDataTable",bindToController:!0,transclude:!0,replace:!0}}),e.$inject=["$rootScope","$sce","$scope"]}()},function(e,t,n){"use strict";var i=n(2),l=n(26),r=n(25),o=n(6),a=n(29),s=[].sort,c=[1,2,3],u=o(function(){c.sort(void 0)}),d=o(function(){c.sort(null)}),f=a("sort"),p=u||!d||f;i({target:"Array",proto:!0,forced:p},{sort:function(e){return void 0===e?s.call(r(this)):s.call(r(this),l(e))}})},function(e,t,n){var i=n(10),l=n(13).f,r=Function.prototype,o=r.toString,a=/^\s*function ([^ (]*)/;!i||"name"in r||l(r,"name",{configurable:!0,get:function(){try{return o.call(this).match(a)[1]}catch(e){return""}}})},function(e,t){!function(){"use strict";function e(e){this.select=function(t,n){e.$broadcast("lx-data-table__select",t,n)},this.selectAll=function(t){e.$broadcast("lx-data-table__select-all",t)},this.unselect=function(t,n){e.$broadcast("lx-data-table__unselect",t,n)},this.unselectAll=function(t){e.$broadcast("lx-data-table__unselect-all",t)},this.activate=function(t,n){e.$broadcast("lx-data-table__activate",t,n)},this.deactivate=function(t,n){e.$broadcast("lx-data-table__deactivate",t,n)}}angular.module("lumx.data-table").service("LxDataTableService",e),e.$inject=["$rootScope"]}()},function(e,t,n){"use strict";n.r(t);n(5),n(52),n(84),n(9),n(31),n(137);!function(){function e(e,n){return{restrict:"AE",templateUrl:"date-picker.html",scope:{autoClose:"=?lxAutoClose",callback:"&?lxCallback",color:"@?lxColor",escapeClose:"=?lxEscapeClose",inputFormat:"@?lxInputFormat",maxDate:"=?lxMaxDate",ngModel:"=",minDate:"=?lxMinDate",locale:"@lxLocale"},link:function(t,i,l){angular.isDefined(l.id)?l.$observe("id",function(n){t.lxDatePicker.pickerId=n,e.registerScope(t.lxDatePicker.pickerId,t)}):(t.lxDatePicker.pickerId=n.generateUUID(),e.registerScope(t.lxDatePicker.pickerId,t))},controller:t,controllerAs:"lxDatePicker",bindToController:!0,replace:!0,transclude:!0}}function t(e,t,n,i,l,r){function o(){p.days=[];var e=angular.copy(p.ngModelMoment).date(0),t=angular.copy(p.ngModelMoment).date(1),n=t.clone().endOf("month"),i=n.date();p.emptyFirstDays=[];for(var l=0===t.day()?6:t.day()-1;l>0;l--)p.emptyFirstDays.push({});for(var r=0;rs&&(o.disabled=!0)}p.days.push(o)}p.emptyLastDays=[];for(var c=7-(0===n.day()?7:n.day());c>0;c--)p.emptyLastDays.push({})}var a,s,c,u,d,f,p=this;p.closeDatePicker=function(){l.close(p.pickerId)},p.displayYearSelection=function(){p.yearSelection=!0,u=n(function(){var e=angular.element(".lx-date-picker__year-selector"),t=e.find(".lx-date-picker__year--is-active");e.scrollTop(e.scrollTop()+t.position().top-e.height()/2+t.height()/2)})},p.hideYearSelection=function(){p.yearSelection=!1},p.getDateFormatted=function(){var e=p.ngModelMoment.format("llll").replace(p.ngModelMoment.format("LT"),"").trim().replace(p.ngModelMoment.format("YYYY"),"").trim(),t=e.slice(-1);return","===t&&(e=e.slice(0,-1)),e},p.nextMonth=function(){p.ngModelMoment=p.ngModelMoment.add(1,"month"),o()},p.openDatePicker=function(){l.open(p.pickerId),o()},p.previousMonth=function(){p.ngModelMoment=p.ngModelMoment.subtract(1,"month"),o()},p.select=function(e){e.disabled||(p.ngModel=e.toDate(),p.ngModelMoment=angular.copy(e),angular.isDefined(p.callback)&&p.callback({newDate:p.ngModel}),angular.isDefined(s)&&p.inputFormat&&(s.$setViewValue(angular.copy(e).format(p.inputFormat)),s.$render()),o())},p.selectYear=function(e){p.yearSelection=!1,p.ngModelMoment=p.ngModelMoment.year(e),o()},p.autoClose=!angular.isDefined(p.autoClose)||p.autoClose,p.color=angular.isDefined(p.color)?p.color:"primary",p.element=e.find(".lx-date-picker"),p.escapeClose=!angular.isDefined(p.escapeClose)||p.escapeClose,p.isOpen=!1,p.moment=moment,p.yearSelection=!1,p.uuid=r.generateUUID(),i(function(i){i.length&&(p.hasInput=!0,c=n(function(){a=e.find(".lx-date-input input"),s=a.data("$ngModelController"),f=t.$watch(function(){return s.$viewValue},function(e,t){angular.isUndefined(e)&&(p.ngModel=void 0)})}))}),d=t.$watch(function(){return p.ngModel},function(){moment.locale(p.locale),p.ngModelMoment=angular.isDefined(p.ngModel)?moment(angular.copy(p.ngModel)):moment(),p.days=[],p.daysOfWeek=[moment.weekdaysMin(1),moment.weekdaysMin(2),moment.weekdaysMin(3),moment.weekdaysMin(4),moment.weekdaysMin(5),moment.weekdaysMin(6),moment.weekdaysMin(0)],p.years=[];for(var e=moment().year()-100;e<=moment().year()+100;e++)p.years.push(e);o()}),t.$on("$destroy",function(){n.cancel(c),n.cancel(u),angular.isFunction(d)&&d(),angular.isFunction(f)&&f()})}angular.module("lumx.date-picker").directive("lxDatePicker",e),e.$inject=["LxDatePickerService","LxUtilsService"],t.$inject=["$element","$scope","$timeout","$transclude","LxDatePickerService","LxUtilsService"]}()},function(e,t,n){"use strict";var i=n(2),l=n(53).trim,r=n(138);i({target:"String",proto:!0,forced:r("trim")},{trim:function(){return l(this)}})},function(e,t,n){var i=n(6),l=n(32);e.exports=function(e){return i(function(){return!!l[e]()||"​…᠎"!="​…᠎"[e]()||l[e].name!==e})}},function(e,t){!function(){"use strict";function e(e,t,n,i){function l(n){angular.isDefined(s)&&(i.unregister(s),s=void 0),o=void 0,e.$broadcast("lx-date-picker__close-start",n),a.removeClass("lx-date-picker-filter--is-shown"),c[n].element.removeClass("lx-date-picker--is-shown"),t(function(){angular.element("body").removeClass("no-scroll-date-picker-"+c[n].uuid),a.remove(),c[n].element.hide().appendTo(c[n].elementParent),c[n].isOpen=!1,e.$broadcast("lx-date-picker__close-end",n)},600)}function r(e){27==e.keyCode&&angular.isDefined(o)&&l(o),e.stopPropagation()}var o,a,s,c={};this.close=l,this.open=function(u){n.register(),o=u,angular.element("body").addClass("no-scroll-date-picker-"+c[u].uuid),a=angular.element("
        ",{class:"lx-date-picker-filter"}),a.css("z-index",n.getDepth()).appendTo("body"),c[o].autoClose&&a.on("click",function(){l(o)}),c[o].escapeClose&&(s=i.register("keyup",r)),c[o].element.css("z-index",n.getDepth()+1).appendTo("body").show(),t(function(){e.$broadcast("lx-date-picker__open-start",o),c[o].isOpen=!0,a.addClass("lx-date-picker-filter--is-shown"),c[o].element.addClass("lx-date-picker--is-shown")},100),t(function(){e.$broadcast("lx-date-picker__open-end",o)},700)},this.registerScope=function(e,t){c[e]=t.lxDatePicker}}angular.module("lumx.date-picker").service("LxDatePickerService",e),e.$inject=["$rootScope","$timeout","LxDepthService","LxEventSchedulerService"]}()},function(e,t,n){"use strict";n.r(t);n(5);!function(){function e(e,t,n,i,l,r,o,a,s){function c(){var t=e,n=t.find(".dialog__header"),i=t.find(".dialog__content"),l=t.find(".dialog__footer");if(l.length||(l=t.find(".dialog__actions")),!angular.isUndefined(n)){var o=60+n.outerHeight()+i.outerHeight()+l.outerHeight();x===o&&b===r.innerHeight||(x=o,b=r.innerHeight,o>=r.innerHeight?(t.addClass("dialog--is-fixed"),g.css({top:n.outerHeight(),bottom:l.outerHeight()}).off("scroll",d).on("scroll",d)):(t.removeClass("dialog--is-fixed"),g.removeAttr("style").off("scroll",d)))}}function u(){m&&l.cancel(m),m=l(function(){c()},200)}function d(){g.scrollTop()+g.innerHeight()>=g[0].scrollHeight&&(n.$broadcast("lx-dialog__scroll-end",y.id),g.off("scroll",d),l(function(){g.on("scroll",d)},500))}function f(e){27==e.keyCode&&p(!0),e.stopPropagation()}function p(i,o){y.isOpen&&(o=o||{},angular.isDefined(v)&&(a.unregister(v),v=void 0),angular.element(r).off("resize",u),e.find(".dialog__scrollable").off("scroll",d),n.$broadcast("lx-dialog__close-start",y.id,i,o),m&&l.cancel(m),t.cancel(h),w.removeClass("dialog-filter--is-shown"),e.removeClass("dialog--is-shown"),l(function(){angular.element("body").removeClass("no-scroll-dialog-"+y.uuid),w.remove(),e.hide().removeClass("dialog--is-fixed").appendTo(_),y.isOpen=!1,x=void 0,n.$broadcast("lx-dialog__close-end",y.id,i,o)},600))}var x,h,g,v,m,b,y=this,w=angular.element("
        ",{class:"dialog-filter"}),_=e.parent();y.autoClose=!angular.isDefined(y.autoClose)||y.autoClose,y.escapeClose=!angular.isDefined(y.escapeClose)||y.escapeClose,y.isOpen=!1,y.uuid=s.generateUUID(),i.$on("lx-dialog__open",function(i,s,d){var x;s===y.id&&(x=d,y.isOpen||(o.register(),angular.element("body").addClass("no-scroll-dialog-"+y.uuid),w.css("z-index",o.getDepth()).appendTo("body"),y.autoClose&&w.on("click",function(){p(!0)}),y.escapeClose&&(v=a.register("keyup",f)),e.css("z-index",o.getDepth()+1).appendTo("body").show(),l(function(){n.$broadcast("lx-dialog__open-start",y.id,x),y.isOpen=!0,w.addClass("dialog-filter--is-shown"),e.addClass("dialog--is-shown")},100),l(function(){0===e.find(".dialog__scrollable").length&&e.find(".dialog__content").wrap(angular.element("
        ",{class:"dialog__scrollable"})),g=e.find(".dialog__scrollable")},200),l(function(){n.$broadcast("lx-dialog__open-end",y.id,x)},700),h=t(function(){c()},500),angular.element(r).on("resize",u)))}),i.$on("lx-dialog__close",function(e,t,n,i){t!==y.id&&void 0!==t||p(n,i)}),i.$on("$destroy",function(){p(!0)})}function t(e){return{restrict:"A",link:function(t,n){n.on("click",function(){e.close(n.parents(".dialog").attr("id"),!0)}),t.$on("$destroy",function(){n.off()})}}}angular.module("lumx.dialog").directive("lxDialog",function(){return{restrict:"E",template:"
        ",scope:{autoClose:"=?lxAutoClose",escapeClose:"=?lxEscapeClose",size:"@?lxSize"},link:function(e,t,n,i){n.$observe("id",function(e){i.id=e})},controller:e,controllerAs:"lxDialog",bindToController:!0,replace:!0,transclude:!0}}).directive("lxDialogHeader",function(){return{restrict:"E",template:'
        ',replace:!0,transclude:!0}}).directive("lxDialogContent",function(){return{restrict:"E",template:'
        ',replace:!0,transclude:!0}}).directive("lxDialogFooter",function(){return{restrict:"E",template:'',replace:!0,transclude:!0}}).directive("lxDialogClose",t),e.$inject=["$element","$interval","$rootScope","$scope","$timeout","$window","LxDepthService","LxEventSchedulerService","LxUtilsService"],t.$inject=["LxDialogService"]}()},function(e,t){!function(){"use strict";function e(e){this.open=function(t,n){e.$broadcast("lx-dialog__open",t,n)},this.close=function(t,n,i){e.$broadcast("lx-dialog__close",t,n,i)}}angular.module("lumx.dialog").service("LxDialogService",e),e.$inject=["$rootScope"]}()},function(e,t,n){"use strict";function i(e,t,n,i,l,o,a,s,c){function u(e){angular.isDefined(k.escapeClose)&&!k.escapeClose||(e.stopPropagation(),a.closeLastDropdown())}function d(e){e.keyCode!==r.d&&e.stopPropagation()}function f(){y.scrollTop()+y.innerHeight()>=y[0].scrollHeight&&t.$broadcast("lx-dropdown__scroll-end",k.uuid)}function p(){k.isOpen=!1,a.unregisterDropdownId(k.uuid),c.restoreBodyScroll(),i(function(){y.removeAttr("style").hide().off("scroll",f).insertAfter(_),angular.isDefined(k.closeOnClick)&&!k.closeOnClick&&y.off("click keydown keypress",d),s.unregister(b),b=void 0,angular.isDefined(w)&&w.focus()})}function x(){var e={},t={height:_.outerHeight(),left:_.offset().left,width:_.outerWidth()},n=(l.innerHeight,l.innerWidth);angular.isDefined(k.width)?k.width.indexOf("%")>-1?e.minWidth=t.width*(k.width.slice(0,-1)/100):e.width=k.width:e.width="auto",k.position&&"left"!==k.position?"right"===k.position&&(e.left="auto",e.right=n-t.width-t.left):(e.left=t.left,e.right="auto"),y.css({left:e.left,right:e.right}),angular.isDefined(e.minWidth)?y.css({minWidth:e.minWidth}):y.css({width:e.width})}function h(){var e=function(){var e={},t={height:_.outerHeight(),top:_.offset().top-angular.element(l).scrollTop()},n=l.innerHeight;return k.overToggle?(e.above=t.top,e.below=n-t.top):(e.above=t.top,e.below=n-(t.top+t.height)),e}(),t={},n=l.innerHeight;e.below>e.above?k.overToggle?(t.top=e.above,t.maxHeight=e.below):(t.top=e.above+_.outerHeight()+~~k.offset,t.maxHeight=e.below):k.overToggle?(t.bottom=n-e.above-_.outerHeight(),t.maxHeight=e.above+_.outerHeight()):(t.bottom=n-e.above+~~k.offset,t.maxHeight=e.above),t.maxHeight-=C,y.css(t)}function g(){a.closeLastDropdown(!0),a.registerDropdownId(k.uuid),o.increase(),y.appendTo("body").show().css({position:"fixed",zIndex:o.get()}),i(function(){x(),h(),k.isOpen=!0,c.disableBodyScroll(),y.on("scroll",f),angular.isDefined(k.closeOnClick)&&!k.closeOnClick&&y.on("click keydown keypress",d),b=s.register("click keydown keypress",u)})}function v(e){w=e}function m(e){_=e}var b,y,w,_,k=this,C=16;k.hasToggle=!1,k.isOpen=!1,k.uuid=c.generateUUID(),k.registerMenu=function(e){y=e,y.hide()},k.registerToggle=m,k.toggle=function(e){angular.isDefined(e.target)&&v(angular.element(e.target)),k.isOpen?a.close(k.uuid):g()},n.$on("lx-dropdown__open",function(e,t,n){var i;t!==k.uuid||k.isOpen||(angular.isElement(n)?i=n:angular.isString(n)?i=angular.element(n):angular.isObject(n)&&(i=angular.element(n.target)),m(i),angular.isObject(n)&&angular.isDefined(n.source)?v(angular.element(n.source)):v(i),g())}),n.$on("lx-dropdown__close",function(e,t,n){if(t===k.uuid&&k.isOpen){if(n&&angular.isDefined(k.closeOnClick)&&!k.closeOnClick)return;p()}}),n.$on("lx-dropdown__update",function(){a.isOpen(k.uuid)&&(x(),h())}),n.$on("$destroy",function(){k.isOpen&&p()})}function l(){return{bindToController:!0,controller:i,controllerAs:"lx",link:function(e,t,n,i,l){i.registerToggle(t.find("."+r.a+"-dropdown__toggle")),i.registerMenu(t.find("."+r.a+"-dropdown__menu")),l.isSlotFilled("toggle")&&(i.hasToggle=!0),n.$observe("id",function(e){i.uuid=e})},replace:!0,restrict:"E",scope:{closeOnClick:"=?lxCloseOnClick",escapeClose:"=?lxEscapeClose",offset:"@?lxOffset",overToggle:"=?lxOverToggle",position:"@?lxPosition",width:"@?lxWidth"},template:a.a,transclude:{menu:"lxDropdownMenu",toggle:"?lxDropdownToggle"}}}n.r(t),n.d(t,"DropdownDirective",function(){return l});n(5),n(24),n(52);var r=n(0),o=n(57),a=n.n(o);i.$inject=["$document","$rootScope","$scope","$timeout","$window","LxDepthService","LxDropdownService","LxEventSchedulerService","LxUtilsService"],angular.module("lumx.dropdown").directive("lxDropdown",l)},function(e,t,n){"use strict";function i(e){function t(t,n){e.$broadcast("lx-dropdown__close",t,n)}var n=[];this.close=t,this.closeLastDropdown=function(e){n.length>0&&t(n[n.length-1],e)},this.getLastDropdownId=function(){return n[n.length-1]},this.isOpen=function(e){return n.includes(e)},this.open=function(t,n){e.$broadcast("lx-dropdown__open",t,n)},this.registerDropdownId=function(e){n.push(e)},this.unregisterDropdownId=function(e){n.splice(n.indexOf(e),1)},this.updateActiveDropdownPosition=function(){e.$broadcast("lx-dropdown__update")}}n.r(t),n.d(t,"DropdownService",function(){return i});n(68),n(24),n(19);i.$inject=["$rootScope"],angular.module("lumx.dropdown").service("LxDropdownService",i)},function(e,t){!function(){"use strict";function e(){var e=this;e.setFabDirection=function(t){e.lxDirection=t},e.setFabTriggerMethod=function(t){e.lxTriggerOnClick=t},e.toggleState=function(){e.lxTriggerOnClick&&(e.isOpen=!e.isOpen)},e.isOpen=!1}angular.module("lumx.fab").directive("lxFab",function(){return{restrict:"E",templateUrl:"fab.html",scope:!0,link:function(e,t,n,i){n.$observe("lxDirection",function(e){i.setFabDirection(e)}),n.$observe("lxTriggerOnClick",function(t){i.setFabTriggerMethod(e.$eval(t))})},controller:e,controllerAs:"lxFab",bindToController:!0,transclude:!0,replace:!0}}).directive("lxFabTrigger",function(){return{restrict:"E",require:"^lxFab",templateUrl:"fab-trigger.html",transclude:!0,replace:!0}}).directive("lxFabActions",function(){return{restrict:"E",require:"^lxFab",templateUrl:"fab-actions.html",link:function(e,t,n,i){e.parentCtrl=i},transclude:!0,replace:!0}})}()},function(e,t,n){"use strict";n.r(t);n(5),n(9),n(31);!function(){function e(e,t,n){function i(){o.val()?(r.fileName=o.val().replace(/C:\\fakepath\\/i,""),e.addClass("input-file--is-focus"),e.addClass("input-file--is-active")):(r.fileName=void 0,e.removeClass("input-file--is-active")),o.val(void 0)}var l,r=this,o=e.find("input");r.updateModel=function(){angular.isDefined(r.callback)&&r.callback({newFile:o[0].files[0]}),l=n(i)},t.$on("$destroy",function(){n.cancel(l)})}angular.module("lumx.file-input").directive("lxFileInput",function(){return{restrict:"E",templateUrl:"file-input.html",scope:{label:"@lxLabel",accept:"@lxAccept",callback:"&?lxCallback"},link:function(e,t,n,i){var l=t.find("input");l.on("change",i.updateModel).on("blur",function(){t.removeClass("input-file--is-focus")}),e.$on("$destroy",function(){l.off()})},controller:e,controllerAs:"lxFileInput",bindToController:!0,replace:!0}}),e.$inject=["$element","$scope","$timeout"]}()},function(e,t,n){"use strict";function i(){return{link:function(e,t,n){var i="horizontal",r="nowrap";n.lxOrientation||t.addClass(l.a+"-grid--orientation-"+i),n.$observe("lxOrientation",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--orientation-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid--orientation-"+e)}),n.lxWrap||t.addClass(l.a+"-grid--wrap-"+r),n.$observe("lxWrap",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--wrap-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid--wrap-"+e)}),n.$observe("lxHAlign",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--hAlign-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid--h-align-"+e)}),n.$observe("lxVAlign",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--vAlign-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid--v-align-"+e)}),n.$observe("lxGutter",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--gutter-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid--gutter-"+e)})},replace:!0,restrict:"E",template:'
        ',transclude:!0}}n.r(t),n.d(t,"GridDirective",function(){return i});n(20),n(9),n(21);var l=n(0);angular.module("lumx.grid").directive("lxGrid",i)},function(e,t,n){"use strict";function i(){return{link:function(e,t,n){n.$observe("lxAlign",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--align-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid-item--align-"+e)}),n.$observe("lxOrder",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--order-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid-item--order-"+e)}),n.$observe("lxWidth",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--width-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid-item--width-"+e)})},replace:!0,restrict:"E",template:'
        ',transclude:!0}}n.r(t),n.d(t,"GridItemDirective",function(){return i});n(20),n(9),n(21);var l=n(0);angular.module("lumx.grid").directive("lxGridItem",i)},function(e,t,n){"use strict";function i(){return{link:function(e,t,n){n.$observe("lxPath",function(e){t.addClass(l.a+"-icon--path"),t.find("path").attr("d",e)}),n.$observe("lxId",function(e){t.addClass(l.a+"-icon--font mdi mdi-"+e)}),n.$observe("lxColor",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*icon--color-\S+/g)||[]).join(" ")}).addClass(l.a+"-icon--color-"+e)}),n.$observe("lxColorVariant",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*icon--color-variant-\S+/g)||[]).join(" ")}).addClass(l.a+"-icon--color-variant-"+e)}),n.$observe("lxSize",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*icon--size-\S+/g)||[]).join(" ")}).addClass(l.a+"-icon--size-"+e)})},replace:!0,restrict:"E",template:o.a}}n.r(t),n.d(t,"IconDirective",function(){return i});n(5),n(20),n(9),n(21);var l=n(0),r=n(58),o=n.n(r);angular.module("lumx.icon").directive("lxIcon",i)},function(e,t,n){"use strict";function i(e,t){function n(n){var i,o;l.isClickable&&(n.keyCode===r.b?(o=e.find("."+r.a+"-list-item").eq(l.activeItemIndex+1),0===o.length?(l.activeItemIndex=0,o=e.find("."+r.a+"-list-item").eq(l.activeItemIndex).focus()):l.activeItemIndex++,o.focus(),t.$apply(),n.preventDefault(),n.stopPropagation()):n.keyCode===r.f?(i=e.find("."+r.a+"-list-item").eq(l.activeItemIndex-1),0===i.length?(l.activeItemIndex=e.find("."+r.a+"-list-item").length-1,i=e.find("."+r.a+"-list-item").eq(l.activeItemIndex).focus()):l.activeItemIndex--,i.focus(),t.$apply(),n.preventDefault(),n.stopPropagation()):n.keyCode===r.e&&(n.preventDefault(),n.stopPropagation()))}function i(){l.activeItemIndex=-1}var l=this;l.activeItemIndex=-1,e.on("keydown keypress",n).on("focus",i),t.$on("$destroy",function(){e.off("keydown keypress",n).off("focus",i)})}function l(){return{bindToController:!0,controller:i,controllerAs:"lx",replace:!0,restrict:"E",scope:{isClickable:"=?lxIsClickable"},template:a.a,transclude:!0}}n.r(t),n.d(t,"ListDirective",function(){return l});n(5);var r=n(0),o=n(59),a=n.n(o);i.$inject=["$element","$scope"],angular.module("lumx.list").directive("lxList",l)},function(e,t,n){"use strict";function i(){return{replace:!0,restrict:"E",template:'
      • '}}n.r(t),n.d(t,"ListDividerDirective",function(){return i});var l=n(0);angular.module("lumx.list").directive("lxListDivider",i)},function(e,t,n){"use strict";function i(e,t){function n(){angular.isUndefined(i.parentController)||(i.parentController.activeItemIndex=e.index("."+r.a+"-list-item"))}var i=this;i.hasAfter=!1,i.hasBefore=!1,i.hasContent=!1,i.parentController=void 0,e.on("focus",n),t.$on("$destroy",function(){e.off("focus",n)})}function l(){return{bindToController:!0,controller:i,controllerAs:"lx",link:function(e,t,n,i,l){l.isSlotFilled("before")&&(i[0].hasBefore=!0),l.isSlotFilled("content")&&(i[0].hasContent=!0),l.isSlotFilled("after")&&(i[0].hasAfter=!0),angular.isDefined(i[1])&&i[1]&&(i[0].parentController=i[1])},replace:!0,require:["lxListItem","?^lxList"],restrict:"E",scope:{isSelected:"=?lxIsSelected",size:"@?lxSize"},template:a.a,transclude:{after:"?lxListItemAfter",before:"?lxListItemBefore",content:"?lxListItemContent"}}}n.r(t),n.d(t,"ListItemDirective",function(){return l});var r=n(0),o=n(60),a=n.n(o);i.$inject=["$element","$scope"],angular.module("lumx.list").directive("lxListItem",l)},function(e,t,n){"use strict";function i(){return{replace:!0,restrict:"E",template:'
      • ',transclude:!0}}n.r(t),n.d(t,"ListSubheaderDirective",function(){return i});var l=n(0);angular.module("lumx.list").directive("lxListSubheader",i)},function(e,t,n){"use strict";n.r(t);n(24),n(52),n(19),n(154);!function(){function e(e,t,n,i,l){function r(e){return parseFloat(window.getComputedStyle(e,null).height)}function o(e,t){t=angular.isFunction(t)?t:angular.noop;for(var i=h.indexOf(e),l=angular.isDefined(h[i])?24+h[i].height:24,r=0;r1&&(h[r].margin-=l,h[r].elem.css("marginBottom",h[r].margin+"px"));e.elem.removeClass("notification--is-shown"),n(function(){e.elem.remove(),i=h.indexOf(e),-1!=i&&h.splice(i,1),t(g),g=!1},400)}function a(n,i,r){var o=e.get("$compile"),a=angular.element("
        ",{class:"dialog__footer"}),s=angular.element("'},transclude:!0}}n.r(t),n.d(t,"ButtonDirective",function(){return i});n(5),n(20),n(9),n(21);var l=n(0);angular.module("lumx.button").directive("lxButton",i)},function(e,t,n){"use strict";function i(e){var t,n=this;n.checkboxId=e.generateUUID(),n.hasHelper=!1,n.hasLabel=!1,n.hasTranscluded=!1,n.icons={mdiCheck:o.b},n.viewValue=void 0,n.setModelController=function(e){t=e,t.$render=function(){n.viewValue=t.$viewValue}},n.updateViewValue=function(){angular.isUndefined(t)?n.viewValue=!n.viewValue:(t.$setViewValue(!t.$viewValue),t.$render())}}function l(){return{bindToController:!0,controller:i,controllerAs:"lx",link:function(e,t,n,i,l){i[1]&&i[0].setModelController(i[1]),l.isSlotFilled("label")&&(i[0].hasLabel=!0),l.isSlotFilled("helper")&&(i[0].hasHelper=!0),i[0].hasLabel||i[0].hasHelper||l(function(e){e.length>0&&(i[0].hasTranscluded=!0)}),n.$observe("disabled",function(e){t.find("input").attr("disabled",e),e?t.addClass(r.a+"-checkbox--is-disabled"):t.removeClass(r.a+"-checkbox--is-disabled")}),n.$observe("checked",function(e){t.find("input").attr("checked",e),i[0].viewValue=e})},replace:!0,require:["lxCheckbox","?ngModel"],restrict:"E",scope:{theme:"@?lxTheme"},template:s.a,transclude:{helper:"?lxCheckboxHelp",label:"?lxCheckboxLabel"}}}n.r(t),n.d(t,"CheckboxDirective",function(){return l});n(5);var r=n(0),o=n(4),a=n(55),s=n.n(a);i.$inject=["LxUtilsService"],angular.module("lumx.checkbox").directive("lxCheckbox",l)},function(e,t,n){"use strict";function i(){var e=this;e.hasAfter=!1,e.hasBefore=!1,e.hasLabel=!1,e.icons={mdiMenuDown:o.i},e.handleOnAfterClick=function(t){angular.isFunction(e.onAfterClick)&&(t.stopPropagation(),e.onAfterClick())},e.handleOnBeforeClick=function(t){angular.isFunction(e.onBeforeClick)&&(t.stopPropagation(),e.onBeforeClick())},e.handleOnClick=function(t){angular.isFunction(e.onClick)&&e.onClick({$event:t})}}function l(){return{bindToController:!0,controller:i,controllerAs:"lx",link:function(e,t,n,i,l){l.isSlotFilled("after")&&(i.hasAfter=!0),l.isSlotFilled("before")&&(i.hasBefore=!0),l.isSlotFilled("label")&&(i.hasLabel=!0),n.lxColor||t.addClass(r.a+"-chip--color-dark"),n.$observe("lxColor",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*chip--color-\S+/g)||[]).join(" ")}).addClass(r.a+"-chip--color-"+e)})},replace:!0,restrict:"E",scope:{color:"@?lxColor",hasDropdownIndicator:"=?lxHasDropdownIndicator",isDisabled:"=?ngDisabled",isSelected:"=?lxIsSelected",onAfterClick:"&?lxOnAfterClick",onBeforeClick:"&?lxOnBeforeClick",onClick:"&?lxOnClick",size:"@?lxSize",theme:"@?lxTheme"},template:s.a,transclude:{after:"?lxChipAfter",before:"?lxChipBefore",label:"lxChipLabel"}}}n.r(t),n.d(t,"ChipDirective",function(){return l});n(20),n(9),n(21);var r=n(0),o=n(4),a=n(56),s=n.n(a);angular.module("lumx.chip").directive("lxChip",l)},function(e,t,n){"use strict";n.r(t);n(24),n(133),n(19),n(134);!function(){function e(e,t,n){function i(){a.selectedRows.length=0;for(var t=0,n=a.tbody.length;t-1&&(a.selectedRows.splice(a.selectedRows.indexOf(t),1),a.allRowsSelected=!1,e.$broadcast("lx-data-table__unselected",a.id,a.selectedRows,t)))}var a=this;a.areAllRowsSelected=function(){for(var e=0,t=0,n=a.tbody.length;t0?n[0]:n)}),n.$on("lx-data-table__select-all",function(e,t){t===a.id&&i()}),n.$on("lx-data-table__unselect",function(e,t,n){t===a.id&&angular.isDefined(n)&&function(e){o(e,!1)}(angular.isArray(n)&&n.length>0?n[0]:n)}),n.$on("lx-data-table__unselect-all",function(e,t){t===a.id&&l()}),n.$on("lx-data-table__activate",function(e,t,n){t===a.id&&angular.isDefined(n)&&function(e){r(e,!0)}(angular.isArray(n)&&n.length>0?n[0]:n)}),n.$on("lx-data-table__deactivate",function(e,t,n){t===a.id&&angular.isDefined(n)&&function(e){r(e,!1)}(angular.isArray(n)&&n.length>0?n[0]:n)})}angular.module("lumx.data-table").directive("lxDataTable",function(){return{restrict:"E",templateUrl:"data-table.html",scope:{activable:"=?lxActivable",border:"=?lxBorder",bulk:"=?lxBulk",selectable:"=?lxSelectable",thumbnail:"=?lxThumbnail",tbody:"=lxTbody",thead:"=lxThead"},link:function(e,t,n,i){n.$observe("id",function(e){i.id=e})},controller:e,controllerAs:"lxDataTable",bindToController:!0,transclude:!0,replace:!0}}),e.$inject=["$rootScope","$sce","$scope"]}()},function(e,t,n){"use strict";var i=n(2),l=n(26),r=n(25),o=n(6),a=n(29),s=[].sort,c=[1,2,3],u=o(function(){c.sort(void 0)}),d=o(function(){c.sort(null)}),f=a("sort"),p=u||!d||f;i({target:"Array",proto:!0,forced:p},{sort:function(e){return void 0===e?s.call(r(this)):s.call(r(this),l(e))}})},function(e,t,n){var i=n(10),l=n(13).f,r=Function.prototype,o=r.toString,a=/^\s*function ([^ (]*)/;!i||"name"in r||l(r,"name",{configurable:!0,get:function(){try{return o.call(this).match(a)[1]}catch(e){return""}}})},function(e,t){!function(){"use strict";function e(e){this.select=function(t,n){e.$broadcast("lx-data-table__select",t,n)},this.selectAll=function(t){e.$broadcast("lx-data-table__select-all",t)},this.unselect=function(t,n){e.$broadcast("lx-data-table__unselect",t,n)},this.unselectAll=function(t){e.$broadcast("lx-data-table__unselect-all",t)},this.activate=function(t,n){e.$broadcast("lx-data-table__activate",t,n)},this.deactivate=function(t,n){e.$broadcast("lx-data-table__deactivate",t,n)}}angular.module("lumx.data-table").service("LxDataTableService",e),e.$inject=["$rootScope"]}()},function(e,t,n){"use strict";n.r(t);n(5),n(52),n(84),n(9),n(31),n(137);!function(){function e(e,n){return{restrict:"AE",templateUrl:"date-picker.html",scope:{autoClose:"=?lxAutoClose",callback:"&?lxCallback",color:"@?lxColor",escapeClose:"=?lxEscapeClose",inputFormat:"@?lxInputFormat",maxDate:"=?lxMaxDate",ngModel:"=",minDate:"=?lxMinDate",locale:"@lxLocale"},link:function(t,i,l){angular.isDefined(l.id)?l.$observe("id",function(n){t.lxDatePicker.pickerId=n,e.registerScope(t.lxDatePicker.pickerId,t)}):(t.lxDatePicker.pickerId=n.generateUUID(),e.registerScope(t.lxDatePicker.pickerId,t))},controller:t,controllerAs:"lxDatePicker",bindToController:!0,replace:!0,transclude:!0}}function t(e,t,n,i,l,r){function o(){p.days=[];var e=angular.copy(p.ngModelMoment).date(0),t=angular.copy(p.ngModelMoment).date(1),n=t.clone().endOf("month"),i=n.date();p.emptyFirstDays=[];for(var l=0===t.day()?6:t.day()-1;l>0;l--)p.emptyFirstDays.push({});for(var r=0;rs&&(o.disabled=!0)}p.days.push(o)}p.emptyLastDays=[];for(var c=7-(0===n.day()?7:n.day());c>0;c--)p.emptyLastDays.push({})}var a,s,c,u,d,f,p=this;p.closeDatePicker=function(){l.close(p.pickerId)},p.displayYearSelection=function(){p.yearSelection=!0,u=n(function(){var e=angular.element(".lx-date-picker__year-selector"),t=e.find(".lx-date-picker__year--is-active");e.scrollTop(e.scrollTop()+t.position().top-e.height()/2+t.height()/2)})},p.hideYearSelection=function(){p.yearSelection=!1},p.getDateFormatted=function(){var e=p.ngModelMoment.format("llll").replace(p.ngModelMoment.format("LT"),"").trim().replace(p.ngModelMoment.format("YYYY"),"").trim(),t=e.slice(-1);return","===t&&(e=e.slice(0,-1)),e},p.nextMonth=function(){p.ngModelMoment=p.ngModelMoment.add(1,"month"),o()},p.openDatePicker=function(){l.open(p.pickerId),o()},p.previousMonth=function(){p.ngModelMoment=p.ngModelMoment.subtract(1,"month"),o()},p.select=function(e){e.disabled||(p.ngModel=e.toDate(),p.ngModelMoment=angular.copy(e),angular.isDefined(p.callback)&&p.callback({newDate:p.ngModel}),angular.isDefined(s)&&p.inputFormat&&(s.$setViewValue(angular.copy(e).format(p.inputFormat)),s.$render()),o())},p.selectYear=function(e){p.yearSelection=!1,p.ngModelMoment=p.ngModelMoment.year(e),o()},p.autoClose=!angular.isDefined(p.autoClose)||p.autoClose,p.color=angular.isDefined(p.color)?p.color:"primary",p.element=e.find(".lx-date-picker"),p.escapeClose=!angular.isDefined(p.escapeClose)||p.escapeClose,p.isOpen=!1,p.moment=moment,p.yearSelection=!1,p.uuid=r.generateUUID(),i(function(i){i.length&&(p.hasInput=!0,c=n(function(){a=e.find(".lx-date-input input"),s=a.data("$ngModelController"),f=t.$watch(function(){return s.$viewValue},function(e,t){angular.isUndefined(e)&&(p.ngModel=void 0)})}))}),d=t.$watch(function(){return p.ngModel},function(){moment.locale(p.locale),p.ngModelMoment=angular.isDefined(p.ngModel)?moment(angular.copy(p.ngModel)):moment(),p.days=[],p.daysOfWeek=[moment.weekdaysMin(1),moment.weekdaysMin(2),moment.weekdaysMin(3),moment.weekdaysMin(4),moment.weekdaysMin(5),moment.weekdaysMin(6),moment.weekdaysMin(0)],p.years=[];for(var e=moment().year()-100;e<=moment().year()+100;e++)p.years.push(e);o()}),t.$on("$destroy",function(){n.cancel(c),n.cancel(u),angular.isFunction(d)&&d(),angular.isFunction(f)&&f()})}angular.module("lumx.date-picker").directive("lxDatePicker",e),e.$inject=["LxDatePickerService","LxUtilsService"],t.$inject=["$element","$scope","$timeout","$transclude","LxDatePickerService","LxUtilsService"]}()},function(e,t,n){"use strict";var i=n(2),l=n(53).trim,r=n(138);i({target:"String",proto:!0,forced:r("trim")},{trim:function(){return l(this)}})},function(e,t,n){var i=n(6),l=n(32);e.exports=function(e){return i(function(){return!!l[e]()||"​…᠎"!="​…᠎"[e]()||l[e].name!==e})}},function(e,t){!function(){"use strict";function e(e,t,n,i){function l(n){angular.isDefined(s)&&(i.unregister(s),s=void 0),o=void 0,e.$broadcast("lx-date-picker__close-start",n),a.removeClass("lx-date-picker-filter--is-shown"),c[n].element.removeClass("lx-date-picker--is-shown"),t(function(){angular.element("body").removeClass("no-scroll-date-picker-"+c[n].uuid),a.remove(),c[n].element.hide().appendTo(c[n].elementParent),c[n].isOpen=!1,e.$broadcast("lx-date-picker__close-end",n)},600)}function r(e){27==e.keyCode&&angular.isDefined(o)&&l(o),e.stopPropagation()}var o,a,s,c={};this.close=l,this.open=function(u){n.register(),o=u,angular.element("body").addClass("no-scroll-date-picker-"+c[u].uuid),a=angular.element("
        ",{class:"lx-date-picker-filter"}),a.css("z-index",n.getDepth()).appendTo("body"),c[o].autoClose&&a.on("click",function(){l(o)}),c[o].escapeClose&&(s=i.register("keyup",r)),c[o].element.css("z-index",n.getDepth()+1).appendTo("body").show(),t(function(){e.$broadcast("lx-date-picker__open-start",o),c[o].isOpen=!0,a.addClass("lx-date-picker-filter--is-shown"),c[o].element.addClass("lx-date-picker--is-shown")},100),t(function(){e.$broadcast("lx-date-picker__open-end",o)},700)},this.registerScope=function(e,t){c[e]=t.lxDatePicker}}angular.module("lumx.date-picker").service("LxDatePickerService",e),e.$inject=["$rootScope","$timeout","LxDepthService","LxEventSchedulerService"]}()},function(e,t,n){"use strict";n.r(t);n(5);!function(){function e(e,t,n,i,l,r,o,a,s){function c(){var t=e,n=t.find(".dialog__header"),i=t.find(".dialog__content"),l=t.find(".dialog__footer");if(l.length||(l=t.find(".dialog__actions")),!angular.isUndefined(n)){var o=60+n.outerHeight()+i.outerHeight()+l.outerHeight();x===o&&b===r.innerHeight||(x=o,b=r.innerHeight,o>=r.innerHeight?(t.addClass("dialog--is-fixed"),g.css({top:n.outerHeight(),bottom:l.outerHeight()}).off("scroll",d).on("scroll",d)):(t.removeClass("dialog--is-fixed"),g.removeAttr("style").off("scroll",d)))}}function u(){m&&l.cancel(m),m=l(function(){c()},200)}function d(){g.scrollTop()+g.innerHeight()>=g[0].scrollHeight&&(n.$broadcast("lx-dialog__scroll-end",y.id),g.off("scroll",d),l(function(){g.on("scroll",d)},500))}function f(e){27==e.keyCode&&p(!0),e.stopPropagation()}function p(i,o){y.isOpen&&(o=o||{},angular.isDefined(v)&&(a.unregister(v),v=void 0),angular.element(r).off("resize",u),e.find(".dialog__scrollable").off("scroll",d),n.$broadcast("lx-dialog__close-start",y.id,i,o),m&&l.cancel(m),t.cancel(h),w.removeClass("dialog-filter--is-shown"),e.removeClass("dialog--is-shown"),l(function(){angular.element("body").removeClass("no-scroll-dialog-"+y.uuid),w.remove(),e.hide().removeClass("dialog--is-fixed").appendTo(_),y.isOpen=!1,x=void 0,n.$broadcast("lx-dialog__close-end",y.id,i,o)},600))}var x,h,g,v,m,b,y=this,w=angular.element("
        ",{class:"dialog-filter"}),_=e.parent();y.autoClose=!angular.isDefined(y.autoClose)||y.autoClose,y.escapeClose=!angular.isDefined(y.escapeClose)||y.escapeClose,y.isOpen=!1,y.uuid=s.generateUUID(),i.$on("lx-dialog__open",function(i,s,d){var x;s===y.id&&(x=d,y.isOpen||(o.register(),angular.element("body").addClass("no-scroll-dialog-"+y.uuid),w.css("z-index",o.getDepth()).appendTo("body"),y.autoClose&&w.on("click",function(){p(!0)}),y.escapeClose&&(v=a.register("keyup",f)),e.css("z-index",o.getDepth()+1).appendTo("body").show(),l(function(){n.$broadcast("lx-dialog__open-start",y.id,x),y.isOpen=!0,w.addClass("dialog-filter--is-shown"),e.addClass("dialog--is-shown")},100),l(function(){0===e.find(".dialog__scrollable").length&&e.find(".dialog__content").wrap(angular.element("
        ",{class:"dialog__scrollable"})),g=e.find(".dialog__scrollable")},200),l(function(){n.$broadcast("lx-dialog__open-end",y.id,x)},700),h=t(function(){c()},500),angular.element(r).on("resize",u)))}),i.$on("lx-dialog__close",function(e,t,n,i){t!==y.id&&void 0!==t||p(n,i)}),i.$on("$destroy",function(){p(!0)})}function t(e){return{restrict:"A",link:function(t,n){n.on("click",function(){e.close(n.parents(".dialog").attr("id"),!0)}),t.$on("$destroy",function(){n.off()})}}}angular.module("lumx.dialog").directive("lxDialog",function(){return{restrict:"E",template:"
        ",scope:{autoClose:"=?lxAutoClose",escapeClose:"=?lxEscapeClose",size:"@?lxSize"},link:function(e,t,n,i){n.$observe("id",function(e){i.id=e})},controller:e,controllerAs:"lxDialog",bindToController:!0,replace:!0,transclude:!0}}).directive("lxDialogHeader",function(){return{restrict:"E",template:'
        ',replace:!0,transclude:!0}}).directive("lxDialogContent",function(){return{restrict:"E",template:'
        ',replace:!0,transclude:!0}}).directive("lxDialogFooter",function(){return{restrict:"E",template:'',replace:!0,transclude:!0}}).directive("lxDialogClose",t),e.$inject=["$element","$interval","$rootScope","$scope","$timeout","$window","LxDepthService","LxEventSchedulerService","LxUtilsService"],t.$inject=["LxDialogService"]}()},function(e,t){!function(){"use strict";function e(e){this.open=function(t,n){e.$broadcast("lx-dialog__open",t,n)},this.close=function(t,n,i){e.$broadcast("lx-dialog__close",t,n,i)}}angular.module("lumx.dialog").service("LxDialogService",e),e.$inject=["$rootScope"]}()},function(e,t,n){"use strict";function i(e,t,n,i,l,o,a,s,c){function u(e){angular.isDefined(k.escapeClose)&&!k.escapeClose||(e.stopPropagation(),a.closeLastDropdown())}function d(e){e.keyCode!==r.d&&e.stopPropagation()}function f(){y.scrollTop()+y.innerHeight()>=y[0].scrollHeight&&t.$broadcast("lx-dropdown__scroll-end",k.uuid)}function p(){k.isOpen=!1,a.unregisterDropdownId(k.uuid),c.restoreBodyScroll(),i(function(){y.removeAttr("style").hide().off("scroll",f).insertAfter(_),angular.isDefined(k.closeOnClick)&&!k.closeOnClick&&y.off("click keydown keypress",d),s.unregister(b),b=void 0,angular.isDefined(w)&&w.focus()})}function x(){var e={},t={height:_.outerHeight(),left:_.offset().left,width:_.outerWidth()},n=(l.innerHeight,l.innerWidth);angular.isDefined(k.width)?k.width.indexOf("%")>-1?e.minWidth=t.width*(k.width.slice(0,-1)/100):e.width=k.width:e.width="auto",k.position&&"left"!==k.position?"right"===k.position&&(e.left="auto",e.right=n-t.width-t.left):(e.left=t.left,e.right="auto"),y.css({left:e.left,right:e.right}),angular.isDefined(e.minWidth)?y.css({minWidth:e.minWidth}):y.css({width:e.width})}function h(){var e=function(){var e={},t={height:_.outerHeight(),top:_.offset().top-angular.element(l).scrollTop()},n=l.innerHeight;return k.overToggle?(e.above=t.top,e.below=n-t.top):(e.above=t.top,e.below=n-(t.top+t.height)),e}(),t={},n=l.innerHeight;e.below>e.above?k.overToggle?(t.top=e.above,t.maxHeight=e.below):(t.top=e.above+_.outerHeight()+~~k.offset,t.maxHeight=e.below):k.overToggle?(t.bottom=n-e.above-_.outerHeight(),t.maxHeight=e.above+_.outerHeight()):(t.bottom=n-e.above+~~k.offset,t.maxHeight=e.above),t.maxHeight-=C,y.css(t)}function g(){a.closeLastDropdown(!0),a.registerDropdownId(k.uuid),o.increase(),y.appendTo("body").show().css({position:"fixed",zIndex:o.get()}),i(function(){x(),h(),k.isOpen=!0,c.disableBodyScroll(),y.on("scroll",f),angular.isDefined(k.closeOnClick)&&!k.closeOnClick&&y.on("click keydown keypress",d),b=s.register("click keydown keypress",u)})}function v(e){w=e}function m(e){_=e}var b,y,w,_,k=this,C=16;k.hasToggle=!1,k.isOpen=!1,k.uuid=c.generateUUID(),k.registerMenu=function(e){y=e,y.hide()},k.registerToggle=m,k.toggle=function(e){angular.isDefined(e.target)&&v(angular.element(e.target)),k.isOpen?a.close(k.uuid):g()},n.$on("lx-dropdown__open",function(e,t,n){var i;t!==k.uuid||k.isOpen||(angular.isElement(n)?i=n:angular.isString(n)?i=angular.element(n):angular.isObject(n)&&(i=angular.element(n.target)),m(i),angular.isObject(n)&&angular.isDefined(n.source)?v(angular.element(n.source)):v(i),g())}),n.$on("lx-dropdown__close",function(e,t,n){if(t===k.uuid&&k.isOpen){if(n&&angular.isDefined(k.closeOnClick)&&!k.closeOnClick)return;p()}}),n.$on("lx-dropdown__update",function(){a.isOpen(k.uuid)&&(x(),h())}),n.$on("$destroy",function(){k.isOpen&&p()})}function l(){return{bindToController:!0,controller:i,controllerAs:"lx",link:function(e,t,n,i,l){i.registerToggle(t.find("."+r.a+"-dropdown__toggle")),i.registerMenu(t.find("."+r.a+"-dropdown__menu")),l.isSlotFilled("toggle")&&(i.hasToggle=!0),n.$observe("id",function(e){i.uuid=e})},replace:!0,restrict:"E",scope:{closeOnClick:"=?lxCloseOnClick",escapeClose:"=?lxEscapeClose",offset:"@?lxOffset",overToggle:"=?lxOverToggle",position:"@?lxPosition",width:"@?lxWidth"},template:a.a,transclude:{menu:"lxDropdownMenu",toggle:"?lxDropdownToggle"}}}n.r(t),n.d(t,"DropdownDirective",function(){return l});n(5),n(24),n(52);var r=n(0),o=n(57),a=n.n(o);i.$inject=["$document","$rootScope","$scope","$timeout","$window","LxDepthService","LxDropdownService","LxEventSchedulerService","LxUtilsService"],angular.module("lumx.dropdown").directive("lxDropdown",l)},function(e,t,n){"use strict";function i(e){function t(t,n){e.$broadcast("lx-dropdown__close",t,n)}var n=[];this.close=t,this.closeLastDropdown=function(e){n.length>0&&t(n[n.length-1],e)},this.getLastDropdownId=function(){return n[n.length-1]},this.isOpen=function(e){return n.includes(e)},this.open=function(t,n){e.$broadcast("lx-dropdown__open",t,n)},this.registerDropdownId=function(e){n.push(e)},this.unregisterDropdownId=function(e){n.splice(n.indexOf(e),1)},this.updateActiveDropdownPosition=function(){e.$broadcast("lx-dropdown__update")}}n.r(t),n.d(t,"DropdownService",function(){return i});n(68),n(24),n(19);i.$inject=["$rootScope"],angular.module("lumx.dropdown").service("LxDropdownService",i)},function(e,t){!function(){"use strict";function e(){var e=this;e.setFabDirection=function(t){e.lxDirection=t},e.setFabTriggerMethod=function(t){e.lxTriggerOnClick=t},e.toggleState=function(){e.lxTriggerOnClick&&(e.isOpen=!e.isOpen)},e.isOpen=!1}angular.module("lumx.fab").directive("lxFab",function(){return{restrict:"E",templateUrl:"fab.html",scope:!0,link:function(e,t,n,i){n.$observe("lxDirection",function(e){i.setFabDirection(e)}),n.$observe("lxTriggerOnClick",function(t){i.setFabTriggerMethod(e.$eval(t))})},controller:e,controllerAs:"lxFab",bindToController:!0,transclude:!0,replace:!0}}).directive("lxFabTrigger",function(){return{restrict:"E",require:"^lxFab",templateUrl:"fab-trigger.html",transclude:!0,replace:!0}}).directive("lxFabActions",function(){return{restrict:"E",require:"^lxFab",templateUrl:"fab-actions.html",link:function(e,t,n,i){e.parentCtrl=i},transclude:!0,replace:!0}})}()},function(e,t,n){"use strict";n.r(t);n(5),n(9),n(31);!function(){function e(e,t,n){function i(){o.val()?(r.fileName=o.val().replace(/C:\\fakepath\\/i,""),e.addClass("input-file--is-focus"),e.addClass("input-file--is-active")):(r.fileName=void 0,e.removeClass("input-file--is-active")),o.val(void 0)}var l,r=this,o=e.find("input");r.updateModel=function(){angular.isDefined(r.callback)&&r.callback({newFile:o[0].files[0]}),l=n(i)},t.$on("$destroy",function(){n.cancel(l)})}angular.module("lumx.file-input").directive("lxFileInput",function(){return{restrict:"E",templateUrl:"file-input.html",scope:{label:"@lxLabel",accept:"@lxAccept",callback:"&?lxCallback"},link:function(e,t,n,i){var l=t.find("input");l.on("change",i.updateModel).on("blur",function(){t.removeClass("input-file--is-focus")}),e.$on("$destroy",function(){l.off()})},controller:e,controllerAs:"lxFileInput",bindToController:!0,replace:!0}}),e.$inject=["$element","$scope","$timeout"]}()},function(e,t,n){"use strict";function i(){return{link:function(e,t,n){var i="horizontal",r="nowrap";n.lxOrientation||t.addClass(l.a+"-grid--orientation-"+i),n.$observe("lxOrientation",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--orientation-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid--orientation-"+e)}),n.lxWrap||t.addClass(l.a+"-grid--wrap-"+r),n.$observe("lxWrap",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--wrap-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid--wrap-"+e)}),n.$observe("lxHAlign",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--hAlign-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid--h-align-"+e)}),n.$observe("lxVAlign",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--vAlign-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid--v-align-"+e)}),n.$observe("lxGutter",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--gutter-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid--gutter-"+e)})},replace:!0,restrict:"E",template:'
        ',transclude:!0}}n.r(t),n.d(t,"GridDirective",function(){return i});n(20),n(9),n(21);var l=n(0);angular.module("lumx.grid").directive("lxGrid",i)},function(e,t,n){"use strict";function i(){return{link:function(e,t,n){n.$observe("lxAlign",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--align-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid-item--align-"+e)}),n.$observe("lxOrder",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--order-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid-item--order-"+e)}),n.$observe("lxWidth",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*grid--width-\S+/g)||[]).join(" ")}).addClass(l.a+"-grid-item--width-"+e)})},replace:!0,restrict:"E",template:'
        ',transclude:!0}}n.r(t),n.d(t,"GridItemDirective",function(){return i});n(20),n(9),n(21);var l=n(0);angular.module("lumx.grid").directive("lxGridItem",i)},function(e,t,n){"use strict";function i(){return{link:function(e,t,n){n.$observe("lxPath",function(e){t.addClass(l.a+"-icon--path"),t.find("path").attr("d",e)}),n.$observe("lxId",function(e){t.addClass(l.a+"-icon--font mdi mdi-"+e)}),n.$observe("lxColor",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*icon--color-\S+/g)||[]).join(" ")}).addClass(l.a+"-icon--color-"+e)}),n.$observe("lxColorVariant",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*icon--color-variant-\S+/g)||[]).join(" ")}).addClass(l.a+"-icon--color-variant-"+e)}),n.$observe("lxSize",function(e){e&&t.removeClass(function(e,t){return(t.match(/(?:\S|-)*icon--size-\S+/g)||[]).join(" ")}).addClass(l.a+"-icon--size-"+e)})},replace:!0,restrict:"E",template:o.a}}n.r(t),n.d(t,"IconDirective",function(){return i});n(5),n(20),n(9),n(21);var l=n(0),r=n(58),o=n.n(r);angular.module("lumx.icon").directive("lxIcon",i)},function(e,t,n){"use strict";function i(e,t){function n(n){var i,o;l.isClickable&&(n.keyCode===r.b?(o=e.find("."+r.a+"-list-item").eq(l.activeItemIndex+1),0===o.length?(l.activeItemIndex=0,o=e.find("."+r.a+"-list-item").eq(l.activeItemIndex).focus()):l.activeItemIndex++,o.focus(),t.$apply(),n.preventDefault(),n.stopPropagation()):n.keyCode===r.f?(i=e.find("."+r.a+"-list-item").eq(l.activeItemIndex-1),0===i.length?(l.activeItemIndex=e.find("."+r.a+"-list-item").length-1,i=e.find("."+r.a+"-list-item").eq(l.activeItemIndex).focus()):l.activeItemIndex--,i.focus(),t.$apply(),n.preventDefault(),n.stopPropagation()):n.keyCode===r.e&&(n.preventDefault(),n.stopPropagation()))}function i(){l.activeItemIndex=-1}var l=this;l.activeItemIndex=-1,e.on("keydown keypress",n).on("focus",i),t.$on("$destroy",function(){e.off("keydown keypress",n).off("focus",i)})}function l(){return{bindToController:!0,controller:i,controllerAs:"lx",replace:!0,restrict:"E",scope:{isClickable:"=?lxIsClickable"},template:a.a,transclude:!0}}n.r(t),n.d(t,"ListDirective",function(){return l});n(5);var r=n(0),o=n(59),a=n.n(o);i.$inject=["$element","$scope"],angular.module("lumx.list").directive("lxList",l)},function(e,t,n){"use strict";function i(){return{replace:!0,restrict:"E",template:'
      • '}}n.r(t),n.d(t,"ListDividerDirective",function(){return i});var l=n(0);angular.module("lumx.list").directive("lxListDivider",i)},function(e,t,n){"use strict";function i(e,t){function n(){angular.isUndefined(i.parentController)||(i.parentController.activeItemIndex=e.index("."+r.a+"-list-item"))}var i=this;i.hasAfter=!1,i.hasBefore=!1,i.hasContent=!1,i.parentController=void 0,e.on("focus",n),t.$on("$destroy",function(){e.off("focus",n)})}function l(){return{bindToController:!0,controller:i,controllerAs:"lx",link:function(e,t,n,i,l){l.isSlotFilled("before")&&(i[0].hasBefore=!0),l.isSlotFilled("content")&&(i[0].hasContent=!0),l.isSlotFilled("after")&&(i[0].hasAfter=!0),angular.isDefined(i[1])&&i[1]&&(i[0].parentController=i[1])},replace:!0,require:["lxListItem","?^lxList"],restrict:"E",scope:{isSelected:"=?lxIsSelected",size:"@?lxSize"},template:a.a,transclude:{after:"?lxListItemAfter",before:"?lxListItemBefore",content:"?lxListItemContent"}}}n.r(t),n.d(t,"ListItemDirective",function(){return l});var r=n(0),o=n(60),a=n.n(o);i.$inject=["$element","$scope"],angular.module("lumx.list").directive("lxListItem",l)},function(e,t,n){"use strict";function i(){return{replace:!0,restrict:"E",template:'
      • ',transclude:!0}}n.r(t),n.d(t,"ListSubheaderDirective",function(){return i});var l=n(0);angular.module("lumx.list").directive("lxListSubheader",i)},function(e,t,n){"use strict";n.r(t);n(24),n(52),n(19),n(154);!function(){function e(e,t,n,i,l){function r(e){return parseFloat(window.getComputedStyle(e,null).height)}function o(e,t){t=angular.isFunction(t)?t:angular.noop;for(var i=h.indexOf(e),l=angular.isDefined(h[i])?24+h[i].height:24,r=0;r1&&(h[r].margin-=l,h[r].elem.css("marginBottom",h[r].margin+"px"));e.elem.removeClass("notification--is-shown"),n(function(){e.elem.remove(),i=h.indexOf(e),-1!=i&&h.splice(i,1),t(g),g=!1},400)}function a(n,i,r){var o=e.get("$compile"),a=angular.element("
        ",{class:"dialog__footer"}),s=angular.element("`;\n }\n\n function link(scope, el, attrs) {\n if (\n (!attrs.lxVariant && !attrs.lxType) ||\n attrs.lxVariant === 'button' ||\n attrs.lxType === 'raised' ||\n attrs.lxType === 'flat'\n ) {\n const leftIcon = el.find('i:first-child');\n const rightIcon = el.find('i:last-child');\n const label = el.find('span');\n\n if (leftIcon.length > 0) {\n el.addClass(`${CSS_PREFIX}-button--has-left-icon`);\n }\n\n if (rightIcon.length > 0) {\n el.addClass(`${CSS_PREFIX}-button--has-right-icon`);\n }\n\n if (label.length === 0) {\n el.wrapInner('');\n }\n }\n\n const isDefaultEmphasis = !attrs.lxEmphasis || attrs.lxEmphasis === 'high';\n\n const defaultProps = {\n color: isDefaultEmphasis ? 'primary' : 'dark',\n emphasis: 'high',\n size: 'm',\n theme: 'light',\n variant: 'button',\n };\n\n if (!attrs.lxColor) {\n el.addClass(`${CSS_PREFIX}-button--color-${defaultProps.color}`);\n }\n\n attrs.$observe('lxColor', (color) => {\n if (!color) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--color-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--color-${color}`);\n });\n\n if (!attrs.lxEmphasis) {\n el.addClass(`${CSS_PREFIX}-button--emphasis-${defaultProps.emphasis}`);\n }\n\n attrs.$observe('lxEmphasis', (emphasis) => {\n if (!emphasis) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--emphasis-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--emphasis-${emphasis}`);\n });\n\n if (!attrs.lxSize) {\n el.addClass(`${CSS_PREFIX}-button--size-${defaultProps.size}`);\n }\n\n attrs.$observe('lxSize', (size) => {\n if (!size) {\n return;\n }\n\n const sizeFallback = {\n xs: 's',\n s: 's',\n m: 'm',\n l: 'm',\n xl: 'm',\n };\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--size-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--size-${sizeFallback[size]}`);\n });\n\n if (!attrs.lxTheme && isDefaultEmphasis) {\n el.addClass(`${CSS_PREFIX}-button--theme-${defaultProps.theme}`);\n }\n\n attrs.$observe('lxTheme', (theme) => {\n if (!theme) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--theme-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--theme-${theme}`);\n });\n\n if (!attrs.lxVariant) {\n el.addClass(`${CSS_PREFIX}-button--variant-${defaultProps.variant}`);\n }\n\n attrs.$observe('lxVariant', (variant) => {\n if (!variant) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--variant-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--variant-${variant}`);\n });\n\n attrs.$observe('lxType', (type) => {\n if (!type) {\n return;\n }\n\n const emphasisFallback = {\n raised: 'high',\n flat: 'low',\n fab: 'high',\n icon: 'low',\n };\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--emphasis-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--emphasis-${emphasisFallback[type]}`);\n\n if (type === 'fab' || type === 'icon') {\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--variant-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--variant-icon`);\n }\n });\n\n scope.$watch(attrs.lxIsSelected, (isSelected) => {\n if (isSelected) {\n el.addClass(`${CSS_PREFIX}-button--is-selected`);\n } else {\n el.removeClass(`${CSS_PREFIX}-button--is-selected`);\n }\n });\n }\n\n return {\n link,\n replace: true,\n restrict: 'E',\n template: getTemplate,\n transclude: true,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.button').directive('lxButton', ButtonDirective);\n\n/////////////////////////////\n\nexport { ButtonDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\nimport { mdiCheck } from '@lumx/icons';\n\nimport template from '../views/checkbox.html';\n\n/////////////////////////////\n\nfunction CheckboxController(LxUtilsService) {\n 'ngInject';\n\n // eslint-disable-next-line consistent-this\n const lx = this;\n\n /////////////////////////////\n // //\n // Private attributes //\n // //\n /////////////////////////////\n\n /**\n * The model controller.\n *\n * @type {Object}\n */\n let _modelController;\n\n /////////////////////////////\n // //\n // Public attributes //\n // //\n /////////////////////////////\n\n /**\n * The checkbox id.\n *\n * @type {string}\n */\n lx.checkboxId = LxUtilsService.generateUUID();\n\n /**\n * Whether the directive has helper slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasHelper = false;\n\n /**\n * Whether the directive has label slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasLabel = false;\n\n /**\n * Whether the directive has transcluded content if no transclude slot.\n *\n * @type {boolean}\n */\n lx.hasTranscluded = false;\n\n /**\n * The checkbox icons.\n *\n * @type {Object}\n */\n lx.icons = {\n mdiCheck,\n };\n\n /**\n * The model view value.\n *\n * @type {string}\n */\n lx.viewValue = undefined;\n\n /////////////////////////////\n // //\n // Public functions //\n // //\n /////////////////////////////\n\n /**\n * Set the model controller.\n *\n * @param {Object} modelController The model controller.\n */\n function setModelController(modelController) {\n _modelController = modelController;\n\n _modelController.$render = function onModelRender() {\n lx.viewValue = _modelController.$viewValue;\n };\n }\n\n /**\n * Update model controller view value on checkbox click.\n */\n function updateViewValue() {\n if (angular.isUndefined(_modelController)) {\n lx.viewValue = !lx.viewValue;\n\n return;\n }\n\n _modelController.$setViewValue(!_modelController.$viewValue);\n _modelController.$render();\n }\n\n /////////////////////////////\n\n lx.setModelController = setModelController;\n lx.updateViewValue = updateViewValue;\n}\n\n/////////////////////////////\n\nfunction CheckboxDirective() {\n 'ngInject';\n\n function link(scope, el, attrs, ctrls, transclude) {\n if (ctrls[1]) {\n ctrls[0].setModelController(ctrls[1]);\n }\n\n if (transclude.isSlotFilled('label')) {\n ctrls[0].hasLabel = true;\n }\n\n if (transclude.isSlotFilled('helper')) {\n ctrls[0].hasHelper = true;\n }\n\n if (!ctrls[0].hasLabel && !ctrls[0].hasHelper) {\n transclude((clone) => {\n if (clone.length > 0) {\n ctrls[0].hasTranscluded = true;\n }\n });\n }\n\n attrs.$observe('disabled', (isDisabled) => {\n el.find('input').attr('disabled', isDisabled);\n\n if (isDisabled) {\n el.addClass(`${CSS_PREFIX}-checkbox--is-disabled`);\n } else {\n el.removeClass(`${CSS_PREFIX}-checkbox--is-disabled`);\n }\n });\n\n attrs.$observe('checked', (isChecked) => {\n el.find('input').attr('checked', isChecked);\n\n ctrls[0].viewValue = isChecked;\n });\n }\n\n return {\n bindToController: true,\n controller: CheckboxController,\n controllerAs: 'lx',\n link,\n replace: true,\n require: ['lxCheckbox', '?ngModel'],\n restrict: 'E',\n scope: {\n theme: '@?lxTheme',\n },\n template,\n transclude: {\n helper: '?lxCheckboxHelp',\n label: '?lxCheckboxLabel',\n },\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.checkbox').directive('lxCheckbox', CheckboxDirective);\n\n/////////////////////////////\n\nexport { CheckboxDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\nimport { mdiMenuDown } from '@lumx/icons';\n\nimport template from '../views/chip.html';\n\n/////////////////////////////\n\nfunction ChipController() {\n 'ngInject';\n\n // eslint-disable-next-line consistent-this\n const lx = this;\n\n /////////////////////////////\n // //\n // Public attributes //\n // //\n /////////////////////////////\n\n /**\n * Whether the directive has after slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasAfter = false;\n\n /**\n * Whether the directive has before slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasBefore = false;\n\n /**\n * Whether the directive has label slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasLabel = false;\n\n /**\n * The chip icons.\n *\n * @type {Object}\n */\n lx.icons = {\n mdiMenuDown,\n };\n\n /////////////////////////////\n // //\n // Public functions //\n // //\n /////////////////////////////\n\n /**\n * Handle given function on after area click.\n *\n * @param {Event} evt The click event.\n */\n function handleOnAfterClick(evt) {\n if (!angular.isFunction(lx.onAfterClick)) {\n return;\n }\n\n evt.stopPropagation();\n\n lx.onAfterClick();\n }\n\n /**\n * Handle given function on before area click.\n *\n * @param {Event} evt The click event.\n */\n function handleOnBeforeClick(evt) {\n if (!angular.isFunction(lx.onBeforeClick)) {\n return;\n }\n\n evt.stopPropagation();\n\n lx.onBeforeClick();\n }\n\n /**\n * Handle given function on the whole area click.\n *\n * @param {Event} evt The click event.\n */\n function handleOnClick(evt) {\n if (!angular.isFunction(lx.onClick)) {\n return;\n }\n\n lx.onClick({ $event: evt });\n }\n\n /////////////////////////////\n\n lx.handleOnAfterClick = handleOnAfterClick;\n lx.handleOnBeforeClick = handleOnBeforeClick;\n lx.handleOnClick = handleOnClick;\n}\n\n/////////////////////////////\n\nfunction ChipDirective() {\n 'ngInject';\n\n function link(scope, el, attrs, ctrl, transclude) {\n if (transclude.isSlotFilled('after')) {\n ctrl.hasAfter = true;\n }\n\n if (transclude.isSlotFilled('before')) {\n ctrl.hasBefore = true;\n }\n\n if (transclude.isSlotFilled('label')) {\n ctrl.hasLabel = true;\n }\n\n const defaultProps = {\n color: 'dark',\n };\n\n if (!attrs.lxColor) {\n el.addClass(`${CSS_PREFIX}-chip--color-${defaultProps.color}`);\n }\n\n attrs.$observe('lxColor', (color) => {\n if (!color) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*chip--color-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-chip--color-${color}`);\n });\n }\n\n return {\n bindToController: true,\n controller: ChipController,\n controllerAs: 'lx',\n link,\n replace: true,\n restrict: 'E',\n scope: {\n color: '@?lxColor',\n hasDropdownIndicator: '=?lxHasDropdownIndicator',\n isDisabled: '=?ngDisabled',\n isSelected: '=?lxIsSelected',\n onAfterClick: '&?lxOnAfterClick',\n onBeforeClick: '&?lxOnBeforeClick',\n onClick: '&?lxOnClick',\n size: '@?lxSize',\n theme: '@?lxTheme',\n },\n template,\n transclude: {\n after: '?lxChipAfter',\n before: '?lxChipBefore',\n label: 'lxChipLabel',\n },\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.chip').directive('lxChip', ChipDirective);\n\n/////////////////////////////\n\nexport { ChipDirective };\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.data-table')\n .directive('lxDataTable', lxDataTable);\n\n function lxDataTable()\n {\n return {\n restrict: 'E',\n templateUrl: 'data-table.html',\n scope:\n {\n activable: '=?lxActivable',\n border: '=?lxBorder',\n bulk: '=?lxBulk',\n selectable: '=?lxSelectable',\n thumbnail: '=?lxThumbnail',\n tbody: '=lxTbody',\n thead: '=lxThead'\n },\n link: link,\n controller: LxDataTableController,\n controllerAs: 'lxDataTable',\n bindToController: true,\n transclude: true,\n replace: true\n };\n\n function link(scope, element, attrs, ctrl)\n {\n attrs.$observe('id', function(_newId)\n {\n ctrl.id = _newId;\n });\n }\n }\n\n LxDataTableController.$inject = ['$rootScope', '$sce', '$scope'];\n\n function LxDataTableController($rootScope, $sce, $scope)\n {\n var lxDataTable = this;\n\n lxDataTable.areAllRowsSelected = areAllRowsSelected;\n lxDataTable.border = angular.isUndefined(lxDataTable.border) ? true : lxDataTable.border;\n lxDataTable.bulk = angular.isUndefined(lxDataTable.bulk) ? true : lxDataTable.bulk;\n lxDataTable.sort = sort;\n lxDataTable.toggleActivation = toggleActivation;\n lxDataTable.toggleAllSelected = toggleAllSelected;\n lxDataTable.toggleSelection = toggleSelection;\n\n lxDataTable.$sce = $sce;\n lxDataTable.allRowsSelected = false;\n lxDataTable.selectedRows = [];\n\n $scope.$on('lx-data-table__select', function(event, id, row)\n {\n if (id === lxDataTable.id && angular.isDefined(row))\n {\n _select((angular.isArray(row) && row.length > 0) ? row[0] : row);\n }\n });\n\n $scope.$on('lx-data-table__select-all', function(event, id)\n {\n if (id === lxDataTable.id)\n {\n _selectAll();\n }\n });\n\n $scope.$on('lx-data-table__unselect', function(event, id, row)\n {\n if (id === lxDataTable.id && angular.isDefined(row))\n {\n _unselect((angular.isArray(row) && row.length > 0) ? row[0] : row);\n }\n });\n\n $scope.$on('lx-data-table__unselect-all', function(event, id)\n {\n if (id === lxDataTable.id)\n {\n _unselectAll();\n }\n });\n\n $scope.$on('lx-data-table__activate', function(event, id, row)\n {\n if (id === lxDataTable.id && angular.isDefined(row))\n {\n _activate((angular.isArray(row) && row.length > 0) ? row[0] : row);\n }\n });\n\n $scope.$on('lx-data-table__deactivate', function(event, id, row)\n {\n if (id === lxDataTable.id && angular.isDefined(row))\n {\n _deactivate((angular.isArray(row) && row.length > 0) ? row[0] : row);\n }\n });\n\n ////////////\n\n function _activate(row)\n {\n toggleActivation(row, true);\n }\n\n function _deactivate(row)\n {\n toggleActivation(row, false);\n }\n\n function _select(row)\n {\n toggleSelection(row, true);\n }\n\n function _selectAll()\n {\n lxDataTable.selectedRows.length = 0;\n\n for (var i = 0, len = lxDataTable.tbody.length; i < len; i++)\n {\n if (!lxDataTable.tbody[i].lxDataTableDisabled)\n {\n lxDataTable.tbody[i].lxDataTableSelected = true;\n lxDataTable.selectedRows.push(lxDataTable.tbody[i]);\n }\n }\n\n lxDataTable.allRowsSelected = true;\n\n $rootScope.$broadcast('lx-data-table__unselected', lxDataTable.id, lxDataTable.selectedRows);\n }\n\n function _unselect(row)\n {\n toggleSelection(row, false);\n }\n\n function _unselectAll()\n {\n for (var i = 0, len = lxDataTable.tbody.length; i < len; i++)\n {\n if (!lxDataTable.tbody[i].lxDataTableDisabled)\n {\n lxDataTable.tbody[i].lxDataTableSelected = false;\n }\n }\n\n lxDataTable.allRowsSelected = false;\n lxDataTable.selectedRows.length = 0;\n\n $rootScope.$broadcast('lx-data-table__selected', lxDataTable.id, lxDataTable.selectedRows);\n }\n\n ////////////\n\n function areAllRowsSelected()\n {\n var displayedRows = 0;\n\n for (var i = 0, len = lxDataTable.tbody.length; i < len; i++)\n {\n if (!lxDataTable.tbody[i].lxDataTableDisabled)\n {\n displayedRows++;\n }\n }\n\n if (displayedRows === lxDataTable.selectedRows.length)\n {\n lxDataTable.allRowsSelected = true;\n }\n else\n {\n lxDataTable.allRowsSelected = false;\n }\n }\n\n function sort(_column)\n {\n if (!_column.sortable)\n {\n return;\n }\n\n for (var i = 0, len = lxDataTable.thead.length; i < len; i++)\n {\n if (lxDataTable.thead[i].sortable && lxDataTable.thead[i].name !== _column.name)\n {\n lxDataTable.thead[i].sort = undefined;\n }\n }\n\n if (!_column.sort || _column.sort === 'desc')\n {\n _column.sort = 'asc';\n }\n else\n {\n _column.sort = 'desc';\n }\n\n $rootScope.$broadcast('lx-data-table__sorted', lxDataTable.id, _column);\n }\n\n function toggleActivation(_row, _newActivatedStatus)\n {\n if (_row.lxDataTableDisabled || !lxDataTable.activable)\n {\n return;\n }\n\n for (var i = 0, len = lxDataTable.tbody.length; i < len; i++)\n {\n if (lxDataTable.tbody.indexOf(_row) !== i)\n {\n lxDataTable.tbody[i].lxDataTableActivated = false;\n }\n }\n\n _row.lxDataTableActivated = !_row.lxDataTableActivated;\n\n if (_row.lxDataTableActivated)\n {\n $rootScope.$broadcast('lx-data-table__activated', lxDataTable.id, _row);\n }\n else\n {\n $rootScope.$broadcast('lx-data-table__deactivated', lxDataTable.id, _row);\n }\n }\n\n function toggleAllSelected()\n {\n if (!lxDataTable.bulk)\n {\n return;\n }\n\n if (lxDataTable.allRowsSelected)\n {\n _unselectAll();\n }\n else\n {\n _selectAll();\n }\n }\n\n function toggleSelection(_row, _newSelectedStatus, _event)\n {\n if (_row.lxDataTableDisabled || !lxDataTable.selectable)\n {\n return;\n }\n\n if (angular.isDefined(_event)) {\n _event.stopPropagation();\n }\n\n _row.lxDataTableSelected = angular.isDefined(_newSelectedStatus) ? _newSelectedStatus : !_row.lxDataTableSelected;\n\n if (_row.lxDataTableSelected)\n {\n // Make sure it's not already in.\n if (lxDataTable.selectedRows.length === 0 || (lxDataTable.selectedRows.length && lxDataTable.selectedRows.indexOf(_row) === -1))\n {\n lxDataTable.selectedRows.push(_row);\n lxDataTable.areAllRowsSelected();\n\n $rootScope.$broadcast('lx-data-table__selected', lxDataTable.id, lxDataTable.selectedRows, _row);\n }\n }\n else\n {\n if (lxDataTable.selectedRows.length && lxDataTable.selectedRows.indexOf(_row) > -1)\n {\n lxDataTable.selectedRows.splice(lxDataTable.selectedRows.indexOf(_row), 1);\n lxDataTable.allRowsSelected = false;\n\n $rootScope.$broadcast('lx-data-table__unselected', lxDataTable.id, lxDataTable.selectedRows, _row);\n }\n }\n }\n }\n})();\n","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\nvar sloppyArrayMethod = require('../internals/sloppy-array-method');\n\nvar nativeSort = [].sort;\nvar test = [1, 2, 3];\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar SLOPPY_METHOD = sloppyArrayMethod('sort');\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || SLOPPY_METHOD;\n\n// `Array.prototype.sort` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? nativeSort.call(toObject(this))\n : nativeSort.call(toObject(this), aFunction(comparefn));\n }\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.github.io/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !(NAME in FunctionPrototype)) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return FunctionPrototypeToString.call(this).match(nameRE)[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.data-table')\n .service('LxDataTableService', LxDataTableService);\n\n LxDataTableService.$inject = ['$rootScope'];\n\n function LxDataTableService($rootScope)\n {\n var service = this;\n\n service.select = select;\n service.selectAll = selectAll;\n service.unselect = unselect;\n service.unselectAll = unselectAll;\n service.activate = activate;\n service.deactivate = deactivate;\n\n ////////////\n\n function select(_dataTableId, row)\n {\n $rootScope.$broadcast('lx-data-table__select', _dataTableId, row);\n }\n\n function selectAll(_dataTableId)\n {\n $rootScope.$broadcast('lx-data-table__select-all', _dataTableId);\n }\n\n function unselect(_dataTableId, row)\n {\n $rootScope.$broadcast('lx-data-table__unselect', _dataTableId, row);\n }\n\n function unselectAll(_dataTableId)\n {\n $rootScope.$broadcast('lx-data-table__unselect-all', _dataTableId);\n }\n\n function activate(_dataTableId, row)\n {\n $rootScope.$broadcast('lx-data-table__activate', _dataTableId, row);\n }\n\n function deactivate(_dataTableId, row)\n {\n $rootScope.$broadcast('lx-data-table__deactivate', _dataTableId, row);\n }\n }\n})();\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.date-picker')\n .directive('lxDatePicker', lxDatePicker);\n\n lxDatePicker.$inject = ['LxDatePickerService', 'LxUtilsService'];\n\n function lxDatePicker(LxDatePickerService, LxUtilsService)\n {\n return {\n restrict: 'AE',\n templateUrl: 'date-picker.html',\n scope:\n {\n autoClose: '=?lxAutoClose',\n callback: '&?lxCallback',\n color: '@?lxColor',\n escapeClose: '=?lxEscapeClose',\n inputFormat: '@?lxInputFormat',\n maxDate: '=?lxMaxDate',\n ngModel: '=',\n minDate: '=?lxMinDate',\n locale: '@lxLocale'\n },\n link: link,\n controller: LxDatePickerController,\n controllerAs: 'lxDatePicker',\n bindToController: true,\n replace: true,\n transclude: true\n };\n\n function link(scope, element, attrs)\n {\n if (angular.isDefined(attrs.id))\n {\n attrs.$observe('id', function(_newId)\n {\n scope.lxDatePicker.pickerId = _newId;\n LxDatePickerService.registerScope(scope.lxDatePicker.pickerId, scope);\n });\n }\n else\n {\n scope.lxDatePicker.pickerId = LxUtilsService.generateUUID();\n LxDatePickerService.registerScope(scope.lxDatePicker.pickerId, scope);\n }\n }\n }\n\n LxDatePickerController.$inject = ['$element', '$scope', '$timeout', '$transclude', 'LxDatePickerService', 'LxUtilsService'];\n\n function LxDatePickerController($element, $scope, $timeout, $transclude, LxDatePickerService, LxUtilsService)\n {\n var lxDatePicker = this;\n var input;\n var modelController;\n var timer1;\n var timer2;\n var watcher1;\n var watcher2;\n\n lxDatePicker.closeDatePicker = closeDatePicker;\n lxDatePicker.displayYearSelection = displayYearSelection;\n lxDatePicker.hideYearSelection = hideYearSelection;\n lxDatePicker.getDateFormatted = getDateFormatted;\n lxDatePicker.nextMonth = nextMonth;\n lxDatePicker.openDatePicker = openDatePicker;\n lxDatePicker.previousMonth = previousMonth;\n lxDatePicker.select = select;\n lxDatePicker.selectYear = selectYear;\n\n lxDatePicker.autoClose = angular.isDefined(lxDatePicker.autoClose) ? lxDatePicker.autoClose : true;\n lxDatePicker.color = angular.isDefined(lxDatePicker.color) ? lxDatePicker.color : 'primary';\n lxDatePicker.element = $element.find('.lx-date-picker');\n lxDatePicker.escapeClose = angular.isDefined(lxDatePicker.escapeClose) ? lxDatePicker.escapeClose : true;\n lxDatePicker.isOpen = false;\n lxDatePicker.moment = moment;\n lxDatePicker.yearSelection = false;\n lxDatePicker.uuid = LxUtilsService.generateUUID();\n\n $transclude(function(clone)\n {\n if (clone.length)\n {\n lxDatePicker.hasInput = true;\n\n timer1 = $timeout(function()\n {\n input = $element.find('.lx-date-input input');\n modelController = input.data('$ngModelController');\n\n watcher2 = $scope.$watch(function()\n {\n return modelController.$viewValue;\n }, function(newValue, oldValue)\n {\n if (angular.isUndefined(newValue))\n {\n lxDatePicker.ngModel = undefined;\n }\n });\n });\n }\n });\n\n watcher1 = $scope.$watch(function()\n {\n return lxDatePicker.ngModel;\n }, init);\n\n $scope.$on('$destroy', function()\n {\n $timeout.cancel(timer1);\n $timeout.cancel(timer2);\n\n if (angular.isFunction(watcher1))\n {\n watcher1();\n }\n\n if (angular.isFunction(watcher2))\n {\n watcher2();\n }\n });\n\n ////////////\n\n function closeDatePicker()\n {\n LxDatePickerService.close(lxDatePicker.pickerId);\n }\n\n function displayYearSelection()\n {\n lxDatePicker.yearSelection = true;\n\n timer2 = $timeout(function()\n {\n var yearSelector = angular.element('.lx-date-picker__year-selector');\n var activeYear = yearSelector.find('.lx-date-picker__year--is-active');\n\n yearSelector.scrollTop(yearSelector.scrollTop() + activeYear.position().top - yearSelector.height() / 2 + activeYear.height() / 2);\n });\n }\n\n function hideYearSelection()\n {\n lxDatePicker.yearSelection = false;\n }\n\n function generateCalendar()\n {\n lxDatePicker.days = [];\n\n var previousDay = angular.copy(lxDatePicker.ngModelMoment).date(0);\n var firstDayOfMonth = angular.copy(lxDatePicker.ngModelMoment).date(1);\n var lastDayOfMonth = firstDayOfMonth.clone().endOf('month');\n var maxDays = lastDayOfMonth.date();\n\n lxDatePicker.emptyFirstDays = [];\n\n for (var i = firstDayOfMonth.day() === 0 ? 6 : firstDayOfMonth.day() - 1; i > 0; i--)\n {\n lxDatePicker.emptyFirstDays.push(\n {});\n }\n\n for (var j = 0; j < maxDays; j++)\n {\n var date = angular.copy(previousDay.add(1, 'days'));\n\n date.selected = angular.isDefined(lxDatePicker.ngModel) && date.isSame(lxDatePicker.ngModel, 'day');\n date.today = date.isSame(moment(), 'day');\n\n if (angular.isDefined(lxDatePicker.minDate))\n {\n var minDate = (angular.isString(lxDatePicker.minDate)) ? new Date(lxDatePicker.minDate) : lxDatePicker.minDate;\n if (date.toDate() < minDate)\n {\n date.disabled = true;\n }\n }\n\n if (angular.isDefined(lxDatePicker.maxDate))\n {\n var maxDate = (angular.isString(lxDatePicker.maxDate)) ? new Date(lxDatePicker.maxDate) : lxDatePicker.maxDate;\n if (date.toDate() > maxDate)\n {\n date.disabled = true;\n }\n }\n\n lxDatePicker.days.push(date);\n }\n\n lxDatePicker.emptyLastDays = [];\n\n for (var k = 7 - (lastDayOfMonth.day() === 0 ? 7 : lastDayOfMonth.day()); k > 0; k--)\n {\n lxDatePicker.emptyLastDays.push(\n {});\n }\n }\n\n function getDateFormatted()\n {\n var dateFormatted = lxDatePicker.ngModelMoment.format('llll').replace(lxDatePicker.ngModelMoment.format('LT'), '').trim().replace(lxDatePicker.ngModelMoment.format('YYYY'), '').trim();\n var dateFormattedLastChar = dateFormatted.slice(-1);\n\n if (dateFormattedLastChar === ',')\n {\n dateFormatted = dateFormatted.slice(0, -1);\n }\n\n return dateFormatted;\n }\n\n function init()\n {\n moment.locale(lxDatePicker.locale);\n\n lxDatePicker.ngModelMoment = angular.isDefined(lxDatePicker.ngModel) ? moment(angular.copy(lxDatePicker.ngModel)) : moment();\n lxDatePicker.days = [];\n lxDatePicker.daysOfWeek = [moment.weekdaysMin(1), moment.weekdaysMin(2), moment.weekdaysMin(3), moment.weekdaysMin(4), moment.weekdaysMin(5), moment.weekdaysMin(6), moment.weekdaysMin(0)];\n lxDatePicker.years = [];\n\n for (var y = moment().year() - 100; y <= moment().year() + 100; y++)\n {\n lxDatePicker.years.push(y);\n }\n\n generateCalendar();\n }\n\n function nextMonth()\n {\n lxDatePicker.ngModelMoment = lxDatePicker.ngModelMoment.add(1, 'month');\n\n generateCalendar();\n }\n\n function openDatePicker()\n {\n LxDatePickerService.open(lxDatePicker.pickerId);\n\n generateCalendar();\n }\n\n function previousMonth()\n {\n lxDatePicker.ngModelMoment = lxDatePicker.ngModelMoment.subtract(1, 'month');\n\n generateCalendar();\n }\n\n function select(_day)\n {\n if (!_day.disabled)\n {\n lxDatePicker.ngModel = _day.toDate();\n lxDatePicker.ngModelMoment = angular.copy(_day);\n\n if (angular.isDefined(lxDatePicker.callback))\n {\n lxDatePicker.callback(\n {\n newDate: lxDatePicker.ngModel\n });\n }\n\n if (angular.isDefined(modelController) && lxDatePicker.inputFormat)\n {\n modelController.$setViewValue(angular.copy(_day).format(lxDatePicker.inputFormat));\n modelController.$render();\n }\n\n generateCalendar();\n }\n }\n\n function selectYear(_year)\n {\n lxDatePicker.yearSelection = false;\n\n lxDatePicker.ngModelMoment = lxDatePicker.ngModelMoment.year(_year);\n\n generateCalendar();\n }\n }\n})();\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/forced-string-trim-method');\n\n// `String.prototype.trim` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.date-picker')\n .service('LxDatePickerService', LxDatePickerService);\n\n LxDatePickerService.$inject = ['$rootScope', '$timeout', 'LxDepthService', 'LxEventSchedulerService'];\n\n function LxDatePickerService($rootScope, $timeout, LxDepthService, LxEventSchedulerService)\n {\n var service = this;\n var activeDatePickerId;\n var datePickerFilter;\n var idEventScheduler;\n var scopeMap = {};\n\n service.close = closeDatePicker;\n service.open = openDatePicker;\n service.registerScope = registerScope;\n\n ////////////\n\n function closeDatePicker(_datePickerId)\n {\n if (angular.isDefined(idEventScheduler))\n {\n LxEventSchedulerService.unregister(idEventScheduler);\n idEventScheduler = undefined;\n }\n\n activeDatePickerId = undefined;\n\n $rootScope.$broadcast('lx-date-picker__close-start', _datePickerId);\n\n datePickerFilter.removeClass('lx-date-picker-filter--is-shown');\n scopeMap[_datePickerId].element.removeClass('lx-date-picker--is-shown');\n\n $timeout(function()\n {\n angular.element('body').removeClass('no-scroll-date-picker-' + scopeMap[_datePickerId].uuid);\n\n datePickerFilter.remove();\n\n scopeMap[_datePickerId].element\n .hide()\n .appendTo(scopeMap[_datePickerId].elementParent);\n\n scopeMap[_datePickerId].isOpen = false;\n $rootScope.$broadcast('lx-date-picker__close-end', _datePickerId);\n }, 600);\n }\n\n function onKeyUp(_event)\n {\n if (_event.keyCode == 27 && angular.isDefined(activeDatePickerId))\n {\n closeDatePicker(activeDatePickerId);\n }\n\n _event.stopPropagation();\n }\n\n function openDatePicker(_datePickerId)\n {\n LxDepthService.register();\n\n activeDatePickerId = _datePickerId;\n\n angular.element('body').addClass('no-scroll-date-picker-' + scopeMap[_datePickerId].uuid);\n\n datePickerFilter = angular.element('
        ',\n {\n class: 'lx-date-picker-filter'\n });\n\n datePickerFilter\n .css('z-index', LxDepthService.getDepth())\n .appendTo('body');\n\n if (scopeMap[activeDatePickerId].autoClose)\n {\n datePickerFilter.on('click', function()\n {\n closeDatePicker(activeDatePickerId);\n });\n }\n\n if (scopeMap[activeDatePickerId].escapeClose)\n {\n idEventScheduler = LxEventSchedulerService.register('keyup', onKeyUp);\n }\n\n scopeMap[activeDatePickerId].element\n .css('z-index', LxDepthService.getDepth() + 1)\n .appendTo('body')\n .show();\n\n $timeout(function()\n {\n $rootScope.$broadcast('lx-date-picker__open-start', activeDatePickerId);\n\n scopeMap[activeDatePickerId].isOpen = true;\n\n datePickerFilter.addClass('lx-date-picker-filter--is-shown');\n scopeMap[activeDatePickerId].element.addClass('lx-date-picker--is-shown');\n }, 100);\n\n $timeout(function()\n {\n $rootScope.$broadcast('lx-date-picker__open-end', activeDatePickerId);\n }, 700);\n }\n\n function registerScope(_datePickerId, _datePickerScope)\n {\n scopeMap[_datePickerId] = _datePickerScope.lxDatePicker;\n }\n }\n})();","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.dialog')\n .directive('lxDialog', lxDialog)\n .directive('lxDialogHeader', lxDialogHeader)\n .directive('lxDialogContent', lxDialogContent)\n .directive('lxDialogFooter', lxDialogFooter)\n .directive('lxDialogClose', lxDialogClose);\n\n function lxDialog()\n {\n return {\n restrict: 'E',\n template: '
        ',\n scope:\n {\n autoClose: '=?lxAutoClose',\n escapeClose: '=?lxEscapeClose',\n size: '@?lxSize'\n },\n link: link,\n controller: LxDialogController,\n controllerAs: 'lxDialog',\n bindToController: true,\n replace: true,\n transclude: true\n };\n\n function link(scope, element, attrs, ctrl)\n {\n attrs.$observe('id', function(_newId)\n {\n ctrl.id = _newId;\n });\n }\n }\n\n LxDialogController.$inject = ['$element', '$interval', '$rootScope', '$scope', '$timeout', '$window', 'LxDepthService', 'LxEventSchedulerService', 'LxUtilsService'];\n\n function LxDialogController($element, $interval, $rootScope, $scope, $timeout, $window, LxDepthService, LxEventSchedulerService, LxUtilsService)\n {\n var lxDialog = this;\n var dialogFilter = angular.element('
        ',\n {\n class: 'dialog-filter'\n });\n var dialogHeight;\n var dialogInterval;\n var dialogScrollable;\n var elementParent = $element.parent();\n var idEventScheduler;\n var resizeDebounce;\n var windowHeight;\n\n lxDialog.autoClose = angular.isDefined(lxDialog.autoClose) ? lxDialog.autoClose : true;\n lxDialog.escapeClose = angular.isDefined(lxDialog.escapeClose) ? lxDialog.escapeClose : true;\n lxDialog.isOpen = false;\n lxDialog.uuid = LxUtilsService.generateUUID();\n\n $scope.$on('lx-dialog__open', function(event, id, params)\n {\n if (id === lxDialog.id)\n {\n open(params);\n }\n });\n\n $scope.$on('lx-dialog__close', function(event, id, canceled, params)\n {\n if (id === lxDialog.id || id === undefined)\n {\n close(canceled, params);\n }\n });\n\n $scope.$on('$destroy', function()\n {\n close(true);\n });\n\n ////////////\n\n function checkDialogHeight()\n {\n var dialog = $element;\n var dialogHeader = dialog.find('.dialog__header');\n var dialogContent = dialog.find('.dialog__content');\n var dialogFooter = dialog.find('.dialog__footer');\n\n if (!dialogFooter.length)\n {\n dialogFooter = dialog.find('.dialog__actions');\n }\n\n if (angular.isUndefined(dialogHeader))\n {\n return;\n }\n\n var heightToCheck = 60 + dialogHeader.outerHeight() + dialogContent.outerHeight() + dialogFooter.outerHeight();\n\n if (dialogHeight === heightToCheck && windowHeight === $window.innerHeight)\n {\n return;\n }\n\n dialogHeight = heightToCheck;\n windowHeight = $window.innerHeight;\n\n if (heightToCheck >= $window.innerHeight)\n {\n dialog.addClass('dialog--is-fixed');\n\n dialogScrollable\n .css(\n {\n top: dialogHeader.outerHeight(),\n bottom: dialogFooter.outerHeight()\n })\n .off('scroll', checkScrollEnd)\n .on('scroll', checkScrollEnd);\n }\n else\n {\n dialog.removeClass('dialog--is-fixed');\n\n dialogScrollable\n .removeAttr('style')\n .off('scroll', checkScrollEnd);\n }\n }\n\n function checkDialogHeightOnResize()\n {\n if (resizeDebounce)\n {\n $timeout.cancel(resizeDebounce);\n }\n\n resizeDebounce = $timeout(function()\n {\n checkDialogHeight();\n }, 200);\n }\n\n function checkScrollEnd()\n {\n if (dialogScrollable.scrollTop() + dialogScrollable.innerHeight() >= dialogScrollable[0].scrollHeight)\n {\n $rootScope.$broadcast('lx-dialog__scroll-end', lxDialog.id);\n\n dialogScrollable.off('scroll', checkScrollEnd);\n\n $timeout(function()\n {\n dialogScrollable.on('scroll', checkScrollEnd);\n }, 500);\n }\n }\n\n function onKeyUp(_event)\n {\n if (_event.keyCode == 27)\n {\n close(true);\n }\n\n _event.stopPropagation();\n }\n\n function open(_params)\n {\n if (lxDialog.isOpen)\n {\n return;\n }\n\n LxDepthService.register();\n\n angular.element('body').addClass('no-scroll-dialog-' + lxDialog.uuid);\n\n dialogFilter\n .css('z-index', LxDepthService.getDepth())\n .appendTo('body');\n\n if (lxDialog.autoClose)\n {\n dialogFilter.on('click', function()\n {\n close(true);\n });\n }\n\n if (lxDialog.escapeClose)\n {\n idEventScheduler = LxEventSchedulerService.register('keyup', onKeyUp);\n }\n\n $element\n .css('z-index', LxDepthService.getDepth() + 1)\n .appendTo('body')\n .show();\n\n $timeout(function()\n {\n $rootScope.$broadcast('lx-dialog__open-start', lxDialog.id, _params);\n\n lxDialog.isOpen = true;\n\n dialogFilter.addClass('dialog-filter--is-shown');\n $element.addClass('dialog--is-shown');\n }, 100);\n\n $timeout(function()\n {\n if ($element.find('.dialog__scrollable').length === 0)\n {\n $element.find('.dialog__content').wrap(angular.element('
        ',\n {\n class: 'dialog__scrollable'\n }));\n }\n\n dialogScrollable = $element.find('.dialog__scrollable');\n }, 200);\n\n $timeout(function()\n {\n $rootScope.$broadcast('lx-dialog__open-end', lxDialog.id, _params);\n }, 700);\n\n dialogInterval = $interval(function()\n {\n checkDialogHeight();\n }, 500);\n\n angular.element($window).on('resize', checkDialogHeightOnResize);\n }\n\n function close(_canceled, _params)\n {\n if (!lxDialog.isOpen)\n {\n return;\n }\n\n _params = _params || {};\n\n if (angular.isDefined(idEventScheduler))\n {\n LxEventSchedulerService.unregister(idEventScheduler);\n idEventScheduler = undefined;\n }\n\n angular.element($window).off('resize', checkDialogHeightOnResize);\n $element.find('.dialog__scrollable').off('scroll', checkScrollEnd);\n\n $rootScope.$broadcast('lx-dialog__close-start', lxDialog.id, _canceled, _params);\n\n if (resizeDebounce)\n {\n $timeout.cancel(resizeDebounce);\n }\n\n $interval.cancel(dialogInterval);\n\n dialogFilter.removeClass('dialog-filter--is-shown');\n $element.removeClass('dialog--is-shown');\n\n $timeout(function()\n {\n angular.element('body').removeClass('no-scroll-dialog-' + lxDialog.uuid);\n\n dialogFilter.remove();\n\n $element\n .hide()\n .removeClass('dialog--is-fixed')\n .appendTo(elementParent);\n\n lxDialog.isOpen = false;\n dialogHeight = undefined;\n $rootScope.$broadcast('lx-dialog__close-end', lxDialog.id, _canceled, _params);\n }, 600);\n }\n }\n\n function lxDialogHeader()\n {\n return {\n restrict: 'E',\n template: '
        ',\n replace: true,\n transclude: true\n };\n }\n\n function lxDialogContent()\n {\n return {\n restrict: 'E',\n template: '
        ',\n replace: true,\n transclude: true\n };\n }\n\n function lxDialogFooter()\n {\n return {\n restrict: 'E',\n template: '
        ',\n replace: true,\n transclude: true\n };\n }\n\n lxDialogClose.$inject = ['LxDialogService'];\n\n function lxDialogClose(LxDialogService)\n {\n return {\n restrict: 'A',\n link: function(scope, element)\n {\n element.on('click', function()\n {\n LxDialogService.close(element.parents('.dialog').attr('id'), true);\n });\n\n scope.$on('$destroy', function()\n {\n element.off();\n });\n }\n };\n }\n})();\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.dialog')\n .service('LxDialogService', LxDialogService);\n\n LxDialogService.$inject = ['$rootScope'];\n\n function LxDialogService($rootScope)\n {\n var service = this;\n\n service.open = open;\n service.close = close;\n\n ////////////\n\n function open(_dialogId, _params)\n {\n $rootScope.$broadcast('lx-dialog__open', _dialogId, _params);\n }\n\n function close(_dialogId, _canceled, _params)\n {\n $rootScope.$broadcast('lx-dialog__close', _dialogId, _canceled, _params);\n }\n }\n})();\n","import { CSS_PREFIX, ESCAPE_KEY_CODE } from '@lumx/core/js/constants';\n\nimport template from '../views/dropdown.html';\n\n/////////////////////////////\n\nfunction DropdownController(\n $document,\n $rootScope,\n $scope,\n $timeout,\n $window,\n LxDepthService,\n LxDropdownService,\n LxEventSchedulerService,\n LxUtilsService,\n) {\n 'ngInject';\n\n // eslint-disable-next-line consistent-this\n const lx = this;\n\n /////////////////////////////\n // //\n // Private attributes //\n // //\n /////////////////////////////\n\n /**\n * Offset from the edge of the view port if dropdown is higher.\n *\n * @type {number}\n * @constant\n * @readonly\n */\n const _OFFSET_FROM_EDGE = 16;\n\n /**\n * The event scheduler id.\n *\n * @type {string}\n */\n // eslint-disable-next-line one-var\n let _idEventScheduler;\n\n /**\n * The menu element.\n *\n * @type {element}\n */\n // eslint-disable-next-line one-var\n let _menuEl;\n\n /**\n * The source element.\n *\n * @type {element}\n */\n // eslint-disable-next-line one-var\n let _sourceEl;\n\n /**\n * The toggle element.\n *\n * @type {element}\n */\n // eslint-disable-next-line one-var\n let _toggleEl;\n\n /////////////////////////////\n // //\n // Public attributes //\n // //\n /////////////////////////////\n\n /**\n * Whether the directive has toggle slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasToggle = false;\n\n /**\n * Whether the dropdown is open or not.\n *\n * @type {boolean}\n */\n lx.isOpen = false;\n\n /**\n * The dropdown uuid.\n *\n * @type {string}\n */\n lx.uuid = LxUtilsService.generateUUID();\n\n /////////////////////////////\n // //\n // Private functions //\n // //\n /////////////////////////////\n\n /**\n * Close dropdown on document click/keydown/keypress.\n *\n * @param {Event} evt The click/keydown/keypress event.\n */\n function _onDocumentEvent(evt) {\n if (angular.isDefined(lx.escapeClose) && !lx.escapeClose) {\n return;\n }\n\n evt.stopPropagation();\n\n LxDropdownService.closeLastDropdown();\n }\n\n /**\n * Stop event propagation on menu click.\n *\n * @param {Event} evt The click event.\n */\n function _stopMenuPropagation(evt) {\n if (evt.keyCode === ESCAPE_KEY_CODE) {\n return;\n }\n\n evt.stopPropagation();\n }\n\n /**\n * Check if user has scrolled to the end of the dropdown.\n */\n function _checkScrollEnd() {\n if (_menuEl.scrollTop() + _menuEl.innerHeight() >= _menuEl[0].scrollHeight) {\n $rootScope.$broadcast('lx-dropdown__scroll-end', lx.uuid);\n }\n }\n\n /**\n * Close dropdown.\n */\n function _close() {\n lx.isOpen = false;\n\n LxDropdownService.unregisterDropdownId(lx.uuid);\n\n LxUtilsService.restoreBodyScroll();\n\n $timeout(() => {\n _menuEl\n .removeAttr('style')\n .hide()\n .off('scroll', _checkScrollEnd)\n .insertAfter(_toggleEl);\n\n if (angular.isDefined(lx.closeOnClick) && !lx.closeOnClick) {\n _menuEl.off('click keydown keypress', _stopMenuPropagation);\n }\n\n LxEventSchedulerService.unregister(_idEventScheduler);\n _idEventScheduler = undefined;\n\n if (angular.isDefined(_sourceEl)) {\n _sourceEl.focus();\n }\n });\n }\n\n /**\n * Get available height.\n *\n * @return {Object} Available height on top / bottom.\n */\n function _getAvailableHeight() {\n const availaibleHeight = {};\n const toggleProps = {\n height: _toggleEl.outerHeight(),\n top: _toggleEl.offset().top - angular.element($window).scrollTop(),\n };\n const windowProps = {\n height: $window.innerHeight,\n };\n\n if (lx.overToggle) {\n availaibleHeight.above = toggleProps.top;\n availaibleHeight.below = windowProps.height - toggleProps.top;\n } else {\n availaibleHeight.above = toggleProps.top;\n availaibleHeight.below = windowProps.height - (toggleProps.top + toggleProps.height);\n }\n\n return availaibleHeight;\n }\n\n /**\n * Initialize horizontal position.\n */\n function _initHorizontalPosition() {\n const menuProps = {};\n const toggleProps = {\n height: _toggleEl.outerHeight(),\n left: _toggleEl.offset().left,\n width: _toggleEl.outerWidth(),\n };\n const windowProps = {\n height: $window.innerHeight,\n width: $window.innerWidth,\n };\n\n if (angular.isDefined(lx.width)) {\n if (lx.width.indexOf('%') > -1) {\n // eslint-disable-next-line no-magic-numbers\n menuProps.minWidth = toggleProps.width * (lx.width.slice(0, -1) / 100);\n } else {\n menuProps.width = lx.width;\n }\n } else {\n menuProps.width = 'auto';\n }\n\n if (!lx.position || lx.position === 'left') {\n menuProps.left = toggleProps.left;\n menuProps.right = 'auto';\n } else if (lx.position === 'right') {\n menuProps.left = 'auto';\n menuProps.right = windowProps.width - toggleProps.width - toggleProps.left;\n }\n\n _menuEl.css({\n left: menuProps.left,\n right: menuProps.right,\n });\n\n if (angular.isDefined(menuProps.minWidth)) {\n _menuEl.css({\n minWidth: menuProps.minWidth,\n });\n } else {\n _menuEl.css({\n width: menuProps.width,\n });\n }\n }\n\n /**\n * Initialize vertical position.\n */\n function _initVerticalPosition() {\n const availaibleHeight = _getAvailableHeight();\n const menuProps = {};\n const windowProps = {\n height: $window.innerHeight,\n };\n\n if (availaibleHeight.below > availaibleHeight.above) {\n if (lx.overToggle) {\n menuProps.top = availaibleHeight.above;\n menuProps.maxHeight = availaibleHeight.below;\n } else {\n // eslint-disable-next-line no-bitwise\n menuProps.top = availaibleHeight.above + _toggleEl.outerHeight() + ~~lx.offset;\n menuProps.maxHeight = availaibleHeight.below;\n }\n } else if (lx.overToggle) {\n menuProps.bottom = windowProps.height - availaibleHeight.above - _toggleEl.outerHeight();\n menuProps.maxHeight = availaibleHeight.above + _toggleEl.outerHeight();\n } else {\n // eslint-disable-next-line no-bitwise\n menuProps.bottom = windowProps.height - availaibleHeight.above + ~~lx.offset;\n menuProps.maxHeight = availaibleHeight.above;\n }\n\n menuProps.maxHeight -= _OFFSET_FROM_EDGE;\n\n _menuEl.css(menuProps);\n }\n\n /**\n * Open dropdown.\n */\n function _open() {\n LxDropdownService.closeLastDropdown(true);\n LxDropdownService.registerDropdownId(lx.uuid);\n\n LxDepthService.increase();\n\n _menuEl\n .appendTo('body')\n .show()\n .css({ position: 'fixed', zIndex: LxDepthService.get() });\n\n $timeout(() => {\n _initHorizontalPosition();\n _initVerticalPosition();\n\n lx.isOpen = true;\n\n LxUtilsService.disableBodyScroll();\n\n _menuEl.on('scroll', _checkScrollEnd);\n\n if (angular.isDefined(lx.closeOnClick) && !lx.closeOnClick) {\n _menuEl.on('click keydown keypress', _stopMenuPropagation);\n }\n\n _idEventScheduler = LxEventSchedulerService.register('click keydown keypress', _onDocumentEvent);\n });\n }\n\n /**\n * Register the source element that triggered the dropdown.\n *\n * @param {element} sourceEl The source element that triggered the dropdown.\n */\n function _registerSource(sourceEl) {\n _sourceEl = sourceEl;\n }\n\n /////////////////////////////\n // //\n // Public functions //\n // //\n /////////////////////////////\n\n /**\n * Register menu.\n *\n * @param {element} menuEl The menu element.\n */\n function registerMenu(menuEl) {\n _menuEl = menuEl;\n _menuEl.hide();\n }\n\n /**\n * Register toggle.\n *\n * @param {element} toggleEl The toggle element.\n */\n function registerToggle(toggleEl) {\n _toggleEl = toggleEl;\n }\n\n /**\n * Toggle the dropdown on toggle click.\n *\n * @param {Event} evt The click event.\n */\n function toggle(evt) {\n if (angular.isDefined(evt.target)) {\n _registerSource(angular.element(evt.target));\n }\n\n if (lx.isOpen) {\n LxDropdownService.close(lx.uuid);\n } else {\n _open();\n }\n }\n\n /////////////////////////////\n\n lx.registerMenu = registerMenu;\n lx.registerToggle = registerToggle;\n lx.toggle = toggle;\n\n /////////////////////////////\n // //\n // Events //\n // //\n /////////////////////////////\n\n /**\n * Open a given dropdown.\n *\n * @param {Event} evt The dropdown open event.\n * @param {string} dropdownId The dropdown identifier.\n * @param {Object} params An optional object that holds extra parameters.\n */\n $scope.$on('lx-dropdown__open', (evt, dropdownId, params) => {\n if (dropdownId === lx.uuid && !lx.isOpen) {\n let toggleEl;\n\n if (angular.isElement(params)) {\n toggleEl = params;\n } else if (angular.isString(params)) {\n toggleEl = angular.element(params);\n } else if (angular.isObject(params)) {\n toggleEl = angular.element(params.target);\n }\n\n registerToggle(toggleEl);\n\n if (angular.isObject(params) && angular.isDefined(params.source)) {\n _registerSource(angular.element(params.source));\n } else {\n _registerSource(toggleEl);\n }\n\n _open();\n }\n });\n\n /**\n * Close a given dropdown.\n *\n * @param {Event} evt The dropdown open event.\n * @param {Object} dropdownId The dropdown identifier.\n * @param {boolean} onOpen Whether the order has been asked on dropdown open or not.\n */\n $scope.$on('lx-dropdown__close', (evt, dropdownId, onOpen) => {\n if (dropdownId === lx.uuid && lx.isOpen) {\n if (onOpen && angular.isDefined(lx.closeOnClick) && !lx.closeOnClick) {\n return;\n }\n\n _close();\n }\n });\n\n /**\n * Update the active dropdown position.\n */\n $scope.$on('lx-dropdown__update', () => {\n if (LxDropdownService.isOpen(lx.uuid)) {\n _initHorizontalPosition();\n _initVerticalPosition();\n }\n });\n\n /**\n * Close on destroy.\n */\n $scope.$on('$destroy', () => {\n if (!lx.isOpen) {\n return;\n }\n\n _close();\n });\n}\n\n/////////////////////////////\n\nfunction DropdownDirective() {\n 'ngInject';\n\n function link(scope, el, attrs, ctrl, transclude) {\n ctrl.registerToggle(el.find(`.${CSS_PREFIX}-dropdown__toggle`));\n ctrl.registerMenu(el.find(`.${CSS_PREFIX}-dropdown__menu`));\n\n if (transclude.isSlotFilled('toggle')) {\n ctrl.hasToggle = true;\n }\n\n attrs.$observe('id', (id) => {\n ctrl.uuid = id;\n });\n }\n\n return {\n bindToController: true,\n controller: DropdownController,\n controllerAs: 'lx',\n link,\n replace: true,\n restrict: 'E',\n scope: {\n closeOnClick: '=?lxCloseOnClick',\n escapeClose: '=?lxEscapeClose',\n offset: '@?lxOffset',\n overToggle: '=?lxOverToggle',\n position: '@?lxPosition',\n width: '@?lxWidth',\n },\n template,\n transclude: {\n menu: 'lxDropdownMenu',\n toggle: '?lxDropdownToggle',\n },\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.dropdown').directive('lxDropdown', DropdownDirective);\n\n/////////////////////////////\n\nexport { DropdownDirective };\n","function DropdownService($rootScope) {\n 'ngInject';\n\n const service = this;\n\n /////////////////////////////\n // //\n // Private attributes //\n // //\n /////////////////////////////\n\n /**\n * The active dropdown identifier.\n *\n * @type {string}\n */\n const _activeDropdownIds = [];\n\n /////////////////////////////\n // //\n // Public functions //\n // //\n /////////////////////////////\n\n /**\n * Close a given dropdown.\n *\n * @param {string} dropdownId The dropdown identifier.\n * @param {boolean} onOpen Whether the order has been asked on dropdown open or not.\n */\n function closeDropdown(dropdownId, onOpen) {\n $rootScope.$broadcast('lx-dropdown__close', dropdownId, onOpen);\n }\n\n /**\n * Close the last opened dropdown.\n *\n * @param {boolean} onOpen Whether the order has been asked on dropdown open or not.\n */\n function closeLastDropdown(onOpen) {\n if (_activeDropdownIds.length > 0) {\n closeDropdown(_activeDropdownIds[_activeDropdownIds.length - 1], onOpen);\n }\n }\n\n /**\n * Get last dropdown id.\n *\n * @return {string} The last dropdown id.\n */\n function getLastDropdownId() {\n return _activeDropdownIds[_activeDropdownIds.length - 1];\n }\n\n /**\n * Check if a given dropdown is open.\n *\n * @param {string} dropdownId The dropdown identifier.\n * @return {boolean} Whether the given dropdown is open or not.\n */\n function isOpen(dropdownId) {\n return _activeDropdownIds.includes(dropdownId);\n }\n\n /**\n * Open a given dropdown.\n *\n * @param {string} dropdownId The dropdown identifier.\n * @param {Object} params An optional object that holds extra parameters.\n */\n function openDropdown(dropdownId, params) {\n $rootScope.$broadcast('lx-dropdown__open', dropdownId, params);\n }\n\n /**\n * Register the given dropdown identifier.\n *\n * @param {string} dropdownId The dropdown identifier.\n */\n function registerDropdownId(dropdownId) {\n _activeDropdownIds.push(dropdownId);\n }\n\n /**\n * Unegister the given dropdown identifier.\n *\n * @param {string} dropdownId The dropdown identifier.\n */\n function unregisterDropdownId(dropdownId) {\n _activeDropdownIds.splice(_activeDropdownIds.indexOf(dropdownId), 1);\n }\n\n /**\n * Update the active dropdown position.\n */\n function updateActiveDropdownPosition() {\n $rootScope.$broadcast('lx-dropdown__update');\n }\n\n /////////////////////////////\n\n service.close = closeDropdown;\n service.closeLastDropdown = closeLastDropdown;\n service.getLastDropdownId = getLastDropdownId;\n service.isOpen = isOpen;\n service.open = openDropdown;\n service.registerDropdownId = registerDropdownId;\n service.unregisterDropdownId = unregisterDropdownId;\n service.updateActiveDropdownPosition = updateActiveDropdownPosition;\n}\n\n/////////////////////////////\n\nangular.module('lumx.dropdown').service('LxDropdownService', DropdownService);\n\n/////////////////////////////\n\nexport { DropdownService };\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.fab')\n .directive('lxFab', lxFab)\n .directive('lxFabTrigger', lxFabTrigger)\n .directive('lxFabActions', lxFabActions);\n\n function lxFab()\n {\n return {\n restrict: 'E',\n templateUrl: 'fab.html',\n scope: true,\n link: link,\n controller: LxFabController,\n controllerAs: 'lxFab',\n bindToController: true,\n transclude: true,\n replace: true\n };\n\n function link(scope, element, attrs, ctrl)\n {\n attrs.$observe('lxDirection', function(newDirection)\n {\n ctrl.setFabDirection(newDirection);\n });\n\n attrs.$observe('lxTriggerOnClick', function(isTriggeredOnClick)\n {\n ctrl.setFabTriggerMethod(scope.$eval(isTriggeredOnClick));\n });\n }\n }\n\n function LxFabController()\n {\n var lxFab = this;\n\n lxFab.setFabDirection = setFabDirection;\n lxFab.setFabTriggerMethod = setFabTriggerMethod;\n lxFab.toggleState = toggleState;\n\n lxFab.isOpen = false;\n\n ////////////\n\n function setFabDirection(_direction)\n {\n lxFab.lxDirection = _direction;\n }\n\n function setFabTriggerMethod(_isTriggeredOnClick)\n {\n lxFab.lxTriggerOnClick = _isTriggeredOnClick;\n }\n\n function toggleState()\n {\n if (lxFab.lxTriggerOnClick)\n {\n lxFab.isOpen = !lxFab.isOpen;\n }\n }\n }\n\n function lxFabTrigger()\n {\n return {\n restrict: 'E',\n require: '^lxFab',\n templateUrl: 'fab-trigger.html',\n transclude: true,\n replace: true\n };\n }\n\n function lxFabActions()\n {\n return {\n restrict: 'E',\n require: '^lxFab',\n templateUrl: 'fab-actions.html',\n link: link,\n transclude: true,\n replace: true\n };\n\n function link(scope, element, attrs, ctrl)\n {\n scope.parentCtrl = ctrl;\n }\n }\n})();\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.file-input')\n .directive('lxFileInput', lxFileInput);\n\n function lxFileInput()\n {\n return {\n restrict: 'E',\n templateUrl: 'file-input.html',\n scope:\n {\n label: '@lxLabel',\n accept: '@lxAccept',\n callback: '&?lxCallback'\n },\n link: link,\n controller: LxFileInputController,\n controllerAs: 'lxFileInput',\n bindToController: true,\n replace: true\n };\n\n function link(scope, element, attrs, ctrl)\n {\n var input = element.find('input');\n\n input\n .on('change', ctrl.updateModel)\n .on('blur', function()\n {\n element.removeClass('input-file--is-focus');\n });\n\n scope.$on('$destroy', function()\n {\n input.off();\n });\n }\n }\n\n LxFileInputController.$inject = ['$element', '$scope', '$timeout'];\n\n function LxFileInputController($element, $scope, $timeout)\n {\n var lxFileInput = this;\n var input = $element.find('input');\n var timer;\n\n lxFileInput.updateModel = updateModel;\n\n $scope.$on('$destroy', function()\n {\n $timeout.cancel(timer);\n });\n\n ////////////\n\n function setFileName()\n {\n if (input.val())\n {\n lxFileInput.fileName = input.val().replace(/C:\\\\fakepath\\\\/i, '');\n\n $element.addClass('input-file--is-focus');\n $element.addClass('input-file--is-active');\n }\n else\n {\n lxFileInput.fileName = undefined;\n\n $element.removeClass('input-file--is-active');\n }\n\n input.val(undefined);\n }\n\n function updateModel()\n {\n if (angular.isDefined(lxFileInput.callback))\n {\n lxFileInput.callback(\n {\n newFile: input[0].files[0]\n });\n }\n\n timer = $timeout(setFileName);\n }\n }\n})();","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\n/////////////////////////////\n\nfunction GridDirective() {\n 'ngInject';\n\n function link(scope, el, attrs) {\n const defaultProps = {\n orientation: 'horizontal',\n wrap: 'nowrap',\n };\n\n if (!attrs.lxOrientation) {\n el.addClass(`${CSS_PREFIX}-grid--orientation-${defaultProps.orientation}`);\n }\n\n attrs.$observe('lxOrientation', (orientation) => {\n if (!orientation) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--orientation-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid--orientation-${orientation}`);\n });\n\n if (!attrs.lxWrap) {\n el.addClass(`${CSS_PREFIX}-grid--wrap-${defaultProps.wrap}`);\n }\n\n attrs.$observe('lxWrap', (wrap) => {\n if (!wrap) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--wrap-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid--wrap-${wrap}`);\n });\n\n attrs.$observe('lxHAlign', (hAlign) => {\n if (!hAlign) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--hAlign-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid--h-align-${hAlign}`);\n });\n\n attrs.$observe('lxVAlign', (vAlign) => {\n if (!vAlign) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--vAlign-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid--v-align-${vAlign}`);\n });\n\n attrs.$observe('lxGutter', (gutter) => {\n if (!gutter) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--gutter-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid--gutter-${gutter}`);\n });\n }\n\n return {\n link,\n replace: true,\n restrict: 'E',\n template: '
        ',\n transclude: true,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.grid').directive('lxGrid', GridDirective);\n\n/////////////////////////////\n\nexport { GridDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\n/////////////////////////////\n\nfunction GridItemDirective() {\n 'ngInject';\n\n function link(scope, el, attrs) {\n attrs.$observe('lxAlign', (align) => {\n if (!align) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--align-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid-item--align-${align}`);\n });\n\n attrs.$observe('lxOrder', (order) => {\n if (!order) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--order-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid-item--order-${order}`);\n });\n\n attrs.$observe('lxWidth', (width) => {\n if (!width) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--width-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid-item--width-${width}`);\n });\n }\n\n return {\n link,\n replace: true,\n restrict: 'E',\n template: '
        ',\n transclude: true,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.grid').directive('lxGridItem', GridItemDirective);\n\n/////////////////////////////\n\nexport { GridItemDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\nimport template from '../views/icon.html';\n\n/////////////////////////////\n\nfunction IconDirective() {\n 'ngInject';\n\n function link(scope, el, attrs) {\n attrs.$observe('lxPath', (path) => {\n el.addClass(`${CSS_PREFIX}-icon--path`);\n el.find('path').attr('d', path);\n });\n\n attrs.$observe('lxId', (font) => {\n el.addClass(`${CSS_PREFIX}-icon--font mdi mdi-${font}`);\n });\n\n attrs.$observe('lxColor', (color) => {\n if (!color) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*icon--color-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-icon--color-${color}`);\n });\n\n attrs.$observe('lxColorVariant', (colorVariant) => {\n if (!colorVariant) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*icon--color-variant-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-icon--color-variant-${colorVariant}`);\n });\n\n attrs.$observe('lxSize', (size) => {\n if (!size) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*icon--size-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-icon--size-${size}`);\n });\n }\n\n return {\n link,\n replace: true,\n restrict: 'E',\n template,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.icon').directive('lxIcon', IconDirective);\n\n/////////////////////////////\n\nexport { IconDirective };\n","import { CSS_PREFIX, DOWN_KEY_CODE, TAB_KEY_CODE, UP_KEY_CODE } from '@lumx/core/js/constants';\n\nimport template from '../views/list.html';\n\n/////////////////////////////\n\nfunction ListController($element, $scope) {\n 'ngInject';\n\n // eslint-disable-next-line consistent-this, no-unused-vars\n const lx = this;\n\n /////////////////////////////\n // //\n // Public attributes //\n // //\n /////////////////////////////\n\n /**\n * The active item index useful when navigating with keybord arrow keys.\n *\n * @type {number}\n */\n lx.activeItemIndex = -1;\n\n /////////////////////////////\n // //\n // Private functions //\n // //\n /////////////////////////////\n\n /**\n * Increase active choice index on key down press.\n */\n function _nextItemOnKeyDown() {\n let nextItem = $element.find(`.${CSS_PREFIX}-list-item`).eq(lx.activeItemIndex + 1);\n\n if (nextItem.length === 0) {\n lx.activeItemIndex = 0;\n\n nextItem = $element\n .find(`.${CSS_PREFIX}-list-item`)\n .eq(lx.activeItemIndex)\n .focus();\n } else {\n lx.activeItemIndex++;\n }\n\n nextItem.focus();\n }\n\n /**\n * Decrease active choice index on key up press.\n */\n function _previousItemOnKeyUp() {\n let previousItem = $element.find(`.${CSS_PREFIX}-list-item`).eq(lx.activeItemIndex - 1);\n\n if (previousItem.length === 0) {\n lx.activeItemIndex = $element.find(`.${CSS_PREFIX}-list-item`).length - 1;\n\n previousItem = $element\n .find(`.${CSS_PREFIX}-list-item`)\n .eq(lx.activeItemIndex)\n .focus();\n } else {\n lx.activeItemIndex--;\n }\n\n previousItem.focus();\n }\n\n /**\n * Handle key events on list focus.\n *\n * @param {Event} evt The key event.\n */\n function _onKeyPress(evt) {\n if (!lx.isClickable) {\n return;\n }\n\n if (evt.keyCode === DOWN_KEY_CODE) {\n _nextItemOnKeyDown();\n $scope.$apply();\n\n evt.preventDefault();\n evt.stopPropagation();\n } else if (evt.keyCode === UP_KEY_CODE) {\n _previousItemOnKeyUp();\n $scope.$apply();\n\n evt.preventDefault();\n evt.stopPropagation();\n } else if (evt.keyCode === TAB_KEY_CODE) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n }\n\n /**\n * Reset active item index.\n */\n function _resetActiveItemIndex() {\n lx.activeItemIndex = -1;\n }\n\n /////////////////////////////\n // //\n // Events //\n // //\n /////////////////////////////\n\n /**\n * Navigate through items on up and down arrow key press.\n */\n $element.on('keydown keypress', _onKeyPress).on('focus', _resetActiveItemIndex);\n\n /**\n * Unbind event listeners on destroy.\n */\n $scope.$on('$destroy', () => {\n $element.off('keydown keypress', _onKeyPress).off('focus', _resetActiveItemIndex);\n });\n}\n\n/////////////////////////////\n\nfunction ListDirective() {\n return {\n bindToController: true,\n controller: ListController,\n controllerAs: 'lx',\n replace: true,\n restrict: 'E',\n scope: {\n isClickable: '=?lxIsClickable',\n },\n template,\n transclude: true,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.list').directive('lxList', ListDirective);\n\n/////////////////////////////\n\nexport { ListDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\n/////////////////////////////\n\nfunction ListDividerDirective() {\n 'ngInject';\n\n return {\n replace: true,\n restrict: 'E',\n template: `
      • `,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.list').directive('lxListDivider', ListDividerDirective);\n\n/////////////////////////////\n\nexport { ListDividerDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\nimport template from '../views/list-item.html';\n\n/////////////////////////////\n\nfunction ListItemController($element, $scope) {\n 'ngInject';\n\n // eslint-disable-next-line consistent-this\n const lx = this;\n\n /////////////////////////////\n // //\n // Public attributes //\n // //\n /////////////////////////////\n\n /**\n * Whether the directive has after slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasAfter = false;\n\n /**\n * Whether the directive has before slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasBefore = false;\n\n /**\n * Whether the directive has content slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasContent = false;\n\n /**\n * The parent controller (list).\n *\n * @type {Object}\n */\n lx.parentController = undefined;\n\n /////////////////////////////\n // //\n // Private functions //\n // //\n /////////////////////////////\n\n /**\n * Register item index as active index to the list.\n */\n function _registerIndex() {\n if (angular.isUndefined(lx.parentController)) {\n return;\n }\n\n lx.parentController.activeItemIndex = $element.index(`.${CSS_PREFIX}-list-item`);\n }\n\n /////////////////////////////\n // //\n // Events //\n // //\n /////////////////////////////\n\n /**\n * Register item index as active index to the list on focus.\n */\n $element.on('focus', _registerIndex);\n\n /**\n * Unbind event listener on destroy.\n */\n $scope.$on('$destroy', () => {\n $element.off('focus', _registerIndex);\n });\n}\n\n/////////////////////////////\n\nfunction ListItemDirective() {\n 'ngInject';\n\n function link(scope, el, attrs, ctrls, transclude) {\n if (transclude.isSlotFilled('before')) {\n ctrls[0].hasBefore = true;\n }\n\n if (transclude.isSlotFilled('content')) {\n ctrls[0].hasContent = true;\n }\n\n if (transclude.isSlotFilled('after')) {\n ctrls[0].hasAfter = true;\n }\n\n if (angular.isDefined(ctrls[1]) && ctrls[1]) {\n // eslint-disable-next-line prefer-destructuring\n ctrls[0].parentController = ctrls[1];\n }\n }\n\n return {\n bindToController: true,\n controller: ListItemController,\n controllerAs: 'lx',\n link,\n replace: true,\n require: ['lxListItem', '?^lxList'],\n restrict: 'E',\n scope: {\n isSelected: '=?lxIsSelected',\n size: '@?lxSize',\n },\n template,\n transclude: {\n after: '?lxListItemAfter',\n before: '?lxListItemBefore',\n content: '?lxListItemContent',\n },\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.list').directive('lxListItem', ListItemDirective);\n\n/////////////////////////////\n\nexport { ListItemDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\n/////////////////////////////\n\nfunction ListSubheaderDirective() {\n 'ngInject';\n\n return {\n replace: true,\n restrict: 'E',\n template: `
      • `,\n transclude: true,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.list').directive('lxListSubheader', ListSubheaderDirective);\n\n/////////////////////////////\n\nexport { ListSubheaderDirective };\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.notification')\n .service('LxNotificationService', LxNotificationService);\n\n LxNotificationService.$inject = ['$injector', '$rootScope', '$timeout', 'LxDepthService', 'LxEventSchedulerService'];\n\n function LxNotificationService($injector, $rootScope, $timeout, LxDepthService, LxEventSchedulerService)\n {\n var service = this;\n var dialogFilter;\n var dialog;\n var idEventScheduler;\n var notificationList = [];\n var actionClicked = false;\n\n service.alert = showAlertDialog;\n service.confirm = showConfirmDialog;\n service.error = notifyError;\n service.info = notifyInfo;\n service.notify = notify;\n service.success = notifySuccess;\n service.warning = notifyWarning;\n service.getNotificationList = getNotificationList;\n service.reComputeElementsPosition = reComputeElementsPosition;\n service.deleteNotification = deleteNotification;\n service.buildNotification = buildNotification;\n\n ////////////\n\n //\n // NOTIFICATION\n //\n\n function getElementHeight(_elem)\n {\n return parseFloat(window.getComputedStyle(_elem, null).height);\n }\n\n function moveNotificationUp()\n {\n var newNotifIndex = notificationList.length - 1;\n notificationList[newNotifIndex].height = getElementHeight(notificationList[newNotifIndex].elem[0]);\n\n var upOffset = 0;\n\n for (var idx = newNotifIndex; idx >= 0; idx--)\n {\n if (notificationList.length > 1 && idx !== newNotifIndex)\n {\n upOffset = 24 + notificationList[newNotifIndex].height;\n\n notificationList[idx].margin += upOffset;\n notificationList[idx].elem.css('marginBottom', notificationList[idx].margin + 'px');\n }\n }\n }\n\n function deleteNotification(_notification, _callback)\n {\n _callback = (!angular.isFunction(_callback)) ? angular.noop : _callback;\n\n var notifIndex = notificationList.indexOf(_notification);\n\n var dnOffset = angular.isDefined(notificationList[notifIndex]) ? 24 + notificationList[notifIndex].height : 24;\n\n for (var idx = 0; idx < notifIndex; idx++)\n {\n if (notificationList.length > 1)\n {\n notificationList[idx].margin -= dnOffset;\n notificationList[idx].elem.css('marginBottom', notificationList[idx].margin + 'px');\n }\n }\n\n _notification.elem.removeClass('notification--is-shown');\n\n $timeout(function()\n {\n _notification.elem.remove();\n\n // Find index again because notificationList may have changed\n notifIndex = notificationList.indexOf(_notification);\n\n if (notifIndex != -1)\n {\n notificationList.splice(notifIndex, 1);\n }\n\n _callback(actionClicked);\n actionClicked = false;\n }, 400);\n }\n\n /**\n * Compute the notification list element new position.\n * Usefull when the height change programmatically and you need other notifications to fit.\n */\n function reComputeElementsPosition()\n {\n var baseOffset = 0;\n\n for (var idx = notificationList.length -1; idx >= 0; idx--)\n {\n notificationList[idx].height = getElementHeight(notificationList[idx].elem[0]);\n notificationList[idx].margin = baseOffset;\n\n notificationList[idx].elem.css('marginBottom', notificationList[idx].margin + 'px');\n\n baseOffset += notificationList[idx].height + 24;\n }\n }\n\n function buildNotification(_text, _icon, _color, _action)\n {\n var notification = angular.element('
        ',\n {\n class: 'notification'\n });\n var notificationText = angular.element('',\n {\n class: 'notification__content',\n html: _text\n });\n\n if (angular.isDefined(_icon))\n {\n var notificationIcon = angular.element('',\n {\n class: 'notification__icon mdi mdi-' + _icon\n });\n\n notification\n .addClass('notification--has-icon')\n .append(notificationIcon);\n }\n\n if (angular.isDefined(_color))\n {\n notification.addClass('notification--' + _color);\n }\n\n notification.append(notificationText);\n\n if (angular.isDefined(_action))\n {\n var $compile = $injector.get('$compile');\n var notificationAction = angular.element('`;\n }\n\n function link(scope, el, attrs) {\n if (\n (!attrs.lxVariant && !attrs.lxType) ||\n attrs.lxVariant === 'button' ||\n attrs.lxType === 'raised' ||\n attrs.lxType === 'flat'\n ) {\n const leftIcon = el.find('i:first-child');\n const rightIcon = el.find('i:last-child');\n const label = el.find('span');\n\n if (leftIcon.length > 0) {\n el.addClass(`${CSS_PREFIX}-button--has-left-icon`);\n }\n\n if (rightIcon.length > 0) {\n el.addClass(`${CSS_PREFIX}-button--has-right-icon`);\n }\n\n if (label.length === 0) {\n el.wrapInner('');\n }\n }\n\n const isDefaultEmphasis = !attrs.lxEmphasis || attrs.lxEmphasis === 'high';\n\n const defaultProps = {\n color: isDefaultEmphasis ? 'primary' : 'dark',\n emphasis: 'high',\n size: 'm',\n theme: 'light',\n variant: 'button',\n };\n\n if (!attrs.lxColor) {\n el.addClass(`${CSS_PREFIX}-button--color-${defaultProps.color}`);\n }\n\n attrs.$observe('lxColor', (color) => {\n if (!color) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--color-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--color-${color}`);\n });\n\n if (!attrs.lxEmphasis) {\n el.addClass(`${CSS_PREFIX}-button--emphasis-${defaultProps.emphasis}`);\n }\n\n attrs.$observe('lxEmphasis', (emphasis) => {\n if (!emphasis) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--emphasis-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--emphasis-${emphasis}`);\n });\n\n if (!attrs.lxSize) {\n el.addClass(`${CSS_PREFIX}-button--size-${defaultProps.size}`);\n }\n\n attrs.$observe('lxSize', (size) => {\n if (!size) {\n return;\n }\n\n const sizeFallback = {\n xs: 's',\n s: 's',\n m: 'm',\n l: 'm',\n xl: 'm',\n };\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--size-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--size-${sizeFallback[size]}`);\n });\n\n if (!attrs.lxTheme && isDefaultEmphasis) {\n el.addClass(`${CSS_PREFIX}-button--theme-${defaultProps.theme}`);\n }\n\n attrs.$observe('lxTheme', (theme) => {\n if (!theme) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--theme-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--theme-${theme}`);\n });\n\n if (!attrs.lxVariant) {\n el.addClass(`${CSS_PREFIX}-button--variant-${defaultProps.variant}`);\n }\n\n attrs.$observe('lxVariant', (variant) => {\n if (!variant) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--variant-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--variant-${variant}`);\n });\n\n attrs.$observe('lxType', (type) => {\n if (!type) {\n return;\n }\n\n const emphasisFallback = {\n raised: 'high',\n flat: 'low',\n fab: 'high',\n icon: 'low',\n };\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--emphasis-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--emphasis-${emphasisFallback[type]}`);\n\n if (type === 'fab' || type === 'icon') {\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*button--variant-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-button--variant-icon`);\n }\n });\n\n scope.$watch(attrs.lxIsSelected, (isSelected) => {\n if (isSelected) {\n el.addClass(`${CSS_PREFIX}-button--is-selected`);\n } else {\n el.removeClass(`${CSS_PREFIX}-button--is-selected`);\n }\n });\n }\n\n return {\n link,\n replace: true,\n restrict: 'E',\n template: getTemplate,\n transclude: true,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.button').directive('lxButton', ButtonDirective);\n\n/////////////////////////////\n\nexport { ButtonDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\nimport { mdiCheck } from '@lumx/icons';\n\nimport template from '../views/checkbox.html';\n\n/////////////////////////////\n\nfunction CheckboxController(LxUtilsService) {\n 'ngInject';\n\n // eslint-disable-next-line consistent-this\n const lx = this;\n\n /////////////////////////////\n // //\n // Private attributes //\n // //\n /////////////////////////////\n\n /**\n * The model controller.\n *\n * @type {Object}\n */\n let _modelController;\n\n /////////////////////////////\n // //\n // Public attributes //\n // //\n /////////////////////////////\n\n /**\n * The checkbox id.\n *\n * @type {string}\n */\n lx.checkboxId = LxUtilsService.generateUUID();\n\n /**\n * Whether the directive has helper slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasHelper = false;\n\n /**\n * Whether the directive has label slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasLabel = false;\n\n /**\n * Whether the directive has transcluded content if no transclude slot.\n *\n * @type {boolean}\n */\n lx.hasTranscluded = false;\n\n /**\n * The checkbox icons.\n *\n * @type {Object}\n */\n lx.icons = {\n mdiCheck,\n };\n\n /**\n * The model view value.\n *\n * @type {string}\n */\n lx.viewValue = undefined;\n\n /////////////////////////////\n // //\n // Public functions //\n // //\n /////////////////////////////\n\n /**\n * Set the model controller.\n *\n * @param {Object} modelController The model controller.\n */\n function setModelController(modelController) {\n _modelController = modelController;\n\n _modelController.$render = function onModelRender() {\n lx.viewValue = _modelController.$viewValue;\n };\n }\n\n /**\n * Update model controller view value on checkbox click.\n */\n function updateViewValue() {\n if (angular.isUndefined(_modelController)) {\n lx.viewValue = !lx.viewValue;\n\n return;\n }\n\n _modelController.$setViewValue(!_modelController.$viewValue);\n _modelController.$render();\n }\n\n /////////////////////////////\n\n lx.setModelController = setModelController;\n lx.updateViewValue = updateViewValue;\n}\n\n/////////////////////////////\n\nfunction CheckboxDirective() {\n 'ngInject';\n\n function link(scope, el, attrs, ctrls, transclude) {\n if (ctrls[1]) {\n ctrls[0].setModelController(ctrls[1]);\n }\n\n if (transclude.isSlotFilled('label')) {\n ctrls[0].hasLabel = true;\n }\n\n if (transclude.isSlotFilled('helper')) {\n ctrls[0].hasHelper = true;\n }\n\n if (!ctrls[0].hasLabel && !ctrls[0].hasHelper) {\n transclude((clone) => {\n if (clone.length > 0) {\n ctrls[0].hasTranscluded = true;\n }\n });\n }\n\n attrs.$observe('disabled', (isDisabled) => {\n el.find('input').attr('disabled', isDisabled);\n\n if (isDisabled) {\n el.addClass(`${CSS_PREFIX}-checkbox--is-disabled`);\n } else {\n el.removeClass(`${CSS_PREFIX}-checkbox--is-disabled`);\n }\n });\n\n attrs.$observe('checked', (isChecked) => {\n el.find('input').attr('checked', isChecked);\n\n ctrls[0].viewValue = isChecked;\n });\n }\n\n return {\n bindToController: true,\n controller: CheckboxController,\n controllerAs: 'lx',\n link,\n replace: true,\n require: ['lxCheckbox', '?ngModel'],\n restrict: 'E',\n scope: {\n theme: '@?lxTheme',\n },\n template,\n transclude: {\n helper: '?lxCheckboxHelp',\n label: '?lxCheckboxLabel',\n },\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.checkbox').directive('lxCheckbox', CheckboxDirective);\n\n/////////////////////////////\n\nexport { CheckboxDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\nimport { mdiMenuDown } from '@lumx/icons';\n\nimport template from '../views/chip.html';\n\n/////////////////////////////\n\nfunction ChipController() {\n 'ngInject';\n\n // eslint-disable-next-line consistent-this\n const lx = this;\n\n /////////////////////////////\n // //\n // Public attributes //\n // //\n /////////////////////////////\n\n /**\n * Whether the directive has after slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasAfter = false;\n\n /**\n * Whether the directive has before slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasBefore = false;\n\n /**\n * Whether the directive has label slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasLabel = false;\n\n /**\n * The chip icons.\n *\n * @type {Object}\n */\n lx.icons = {\n mdiMenuDown,\n };\n\n /////////////////////////////\n // //\n // Public functions //\n // //\n /////////////////////////////\n\n /**\n * Handle given function on after area click.\n *\n * @param {Event} evt The click event.\n */\n function handleOnAfterClick(evt) {\n if (!angular.isFunction(lx.onAfterClick)) {\n return;\n }\n\n evt.stopPropagation();\n\n lx.onAfterClick();\n }\n\n /**\n * Handle given function on before area click.\n *\n * @param {Event} evt The click event.\n */\n function handleOnBeforeClick(evt) {\n if (!angular.isFunction(lx.onBeforeClick)) {\n return;\n }\n\n evt.stopPropagation();\n\n lx.onBeforeClick();\n }\n\n /**\n * Handle given function on the whole area click.\n *\n * @param {Event} evt The click event.\n */\n function handleOnClick(evt) {\n if (!angular.isFunction(lx.onClick)) {\n return;\n }\n\n lx.onClick({ $event: evt });\n }\n\n /////////////////////////////\n\n lx.handleOnAfterClick = handleOnAfterClick;\n lx.handleOnBeforeClick = handleOnBeforeClick;\n lx.handleOnClick = handleOnClick;\n}\n\n/////////////////////////////\n\nfunction ChipDirective() {\n 'ngInject';\n\n function link(scope, el, attrs, ctrl, transclude) {\n if (transclude.isSlotFilled('after')) {\n ctrl.hasAfter = true;\n }\n\n if (transclude.isSlotFilled('before')) {\n ctrl.hasBefore = true;\n }\n\n if (transclude.isSlotFilled('label')) {\n ctrl.hasLabel = true;\n }\n\n const defaultProps = {\n color: 'dark',\n };\n\n if (!attrs.lxColor) {\n el.addClass(`${CSS_PREFIX}-chip--color-${defaultProps.color}`);\n }\n\n attrs.$observe('lxColor', (color) => {\n if (!color) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*chip--color-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-chip--color-${color}`);\n });\n }\n\n return {\n bindToController: true,\n controller: ChipController,\n controllerAs: 'lx',\n link,\n replace: true,\n restrict: 'E',\n scope: {\n color: '@?lxColor',\n hasDropdownIndicator: '=?lxHasDropdownIndicator',\n isDisabled: '=?ngDisabled',\n isSelected: '=?lxIsSelected',\n onAfterClick: '&?lxOnAfterClick',\n onBeforeClick: '&?lxOnBeforeClick',\n onClick: '&?lxOnClick',\n size: '@?lxSize',\n theme: '@?lxTheme',\n },\n template,\n transclude: {\n after: '?lxChipAfter',\n before: '?lxChipBefore',\n label: 'lxChipLabel',\n },\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.chip').directive('lxChip', ChipDirective);\n\n/////////////////////////////\n\nexport { ChipDirective };\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.data-table')\n .directive('lxDataTable', lxDataTable);\n\n function lxDataTable()\n {\n return {\n restrict: 'E',\n templateUrl: 'data-table.html',\n scope:\n {\n activable: '=?lxActivable',\n border: '=?lxBorder',\n bulk: '=?lxBulk',\n selectable: '=?lxSelectable',\n thumbnail: '=?lxThumbnail',\n tbody: '=lxTbody',\n thead: '=lxThead'\n },\n link: link,\n controller: LxDataTableController,\n controllerAs: 'lxDataTable',\n bindToController: true,\n transclude: true,\n replace: true\n };\n\n function link(scope, element, attrs, ctrl)\n {\n attrs.$observe('id', function(_newId)\n {\n ctrl.id = _newId;\n });\n }\n }\n\n LxDataTableController.$inject = ['$rootScope', '$sce', '$scope'];\n\n function LxDataTableController($rootScope, $sce, $scope)\n {\n var lxDataTable = this;\n\n lxDataTable.areAllRowsSelected = areAllRowsSelected;\n lxDataTable.border = angular.isUndefined(lxDataTable.border) ? true : lxDataTable.border;\n lxDataTable.bulk = angular.isUndefined(lxDataTable.bulk) ? true : lxDataTable.bulk;\n lxDataTable.sort = sort;\n lxDataTable.toggleActivation = toggleActivation;\n lxDataTable.toggleAllSelected = toggleAllSelected;\n lxDataTable.toggleSelection = toggleSelection;\n\n lxDataTable.$sce = $sce;\n lxDataTable.allRowsSelected = false;\n lxDataTable.selectedRows = [];\n\n $scope.$on('lx-data-table__select', function(event, id, row)\n {\n if (id === lxDataTable.id && angular.isDefined(row))\n {\n _select((angular.isArray(row) && row.length > 0) ? row[0] : row);\n }\n });\n\n $scope.$on('lx-data-table__select-all', function(event, id)\n {\n if (id === lxDataTable.id)\n {\n _selectAll();\n }\n });\n\n $scope.$on('lx-data-table__unselect', function(event, id, row)\n {\n if (id === lxDataTable.id && angular.isDefined(row))\n {\n _unselect((angular.isArray(row) && row.length > 0) ? row[0] : row);\n }\n });\n\n $scope.$on('lx-data-table__unselect-all', function(event, id)\n {\n if (id === lxDataTable.id)\n {\n _unselectAll();\n }\n });\n\n $scope.$on('lx-data-table__activate', function(event, id, row)\n {\n if (id === lxDataTable.id && angular.isDefined(row))\n {\n _activate((angular.isArray(row) && row.length > 0) ? row[0] : row);\n }\n });\n\n $scope.$on('lx-data-table__deactivate', function(event, id, row)\n {\n if (id === lxDataTable.id && angular.isDefined(row))\n {\n _deactivate((angular.isArray(row) && row.length > 0) ? row[0] : row);\n }\n });\n\n ////////////\n\n function _activate(row)\n {\n toggleActivation(row, true);\n }\n\n function _deactivate(row)\n {\n toggleActivation(row, false);\n }\n\n function _select(row)\n {\n toggleSelection(row, true);\n }\n\n function _selectAll()\n {\n lxDataTable.selectedRows.length = 0;\n\n for (var i = 0, len = lxDataTable.tbody.length; i < len; i++)\n {\n if (!lxDataTable.tbody[i].lxDataTableDisabled)\n {\n lxDataTable.tbody[i].lxDataTableSelected = true;\n lxDataTable.selectedRows.push(lxDataTable.tbody[i]);\n }\n }\n\n lxDataTable.allRowsSelected = true;\n\n $rootScope.$broadcast('lx-data-table__unselected', lxDataTable.id, lxDataTable.selectedRows);\n }\n\n function _unselect(row)\n {\n toggleSelection(row, false);\n }\n\n function _unselectAll()\n {\n for (var i = 0, len = lxDataTable.tbody.length; i < len; i++)\n {\n if (!lxDataTable.tbody[i].lxDataTableDisabled)\n {\n lxDataTable.tbody[i].lxDataTableSelected = false;\n }\n }\n\n lxDataTable.allRowsSelected = false;\n lxDataTable.selectedRows.length = 0;\n\n $rootScope.$broadcast('lx-data-table__selected', lxDataTable.id, lxDataTable.selectedRows);\n }\n\n ////////////\n\n function areAllRowsSelected()\n {\n var displayedRows = 0;\n\n for (var i = 0, len = lxDataTable.tbody.length; i < len; i++)\n {\n if (!lxDataTable.tbody[i].lxDataTableDisabled)\n {\n displayedRows++;\n }\n }\n\n if (displayedRows === lxDataTable.selectedRows.length)\n {\n lxDataTable.allRowsSelected = true;\n }\n else\n {\n lxDataTable.allRowsSelected = false;\n }\n }\n\n function sort(_column)\n {\n if (!_column.sortable)\n {\n return;\n }\n\n for (var i = 0, len = lxDataTable.thead.length; i < len; i++)\n {\n if (lxDataTable.thead[i].sortable && lxDataTable.thead[i].name !== _column.name)\n {\n lxDataTable.thead[i].sort = undefined;\n }\n }\n\n if (!_column.sort || _column.sort === 'desc')\n {\n _column.sort = 'asc';\n }\n else\n {\n _column.sort = 'desc';\n }\n\n $rootScope.$broadcast('lx-data-table__sorted', lxDataTable.id, _column);\n }\n\n function toggleActivation(_row, _newActivatedStatus)\n {\n if (_row.lxDataTableDisabled || !lxDataTable.activable)\n {\n return;\n }\n\n for (var i = 0, len = lxDataTable.tbody.length; i < len; i++)\n {\n if (lxDataTable.tbody.indexOf(_row) !== i)\n {\n lxDataTable.tbody[i].lxDataTableActivated = false;\n }\n }\n\n _row.lxDataTableActivated = !_row.lxDataTableActivated;\n\n if (_row.lxDataTableActivated)\n {\n $rootScope.$broadcast('lx-data-table__activated', lxDataTable.id, _row);\n }\n else\n {\n $rootScope.$broadcast('lx-data-table__deactivated', lxDataTable.id, _row);\n }\n }\n\n function toggleAllSelected()\n {\n if (!lxDataTable.bulk)\n {\n return;\n }\n\n if (lxDataTable.allRowsSelected)\n {\n _unselectAll();\n }\n else\n {\n _selectAll();\n }\n }\n\n function toggleSelection(_row, _newSelectedStatus, _event)\n {\n if (_row.lxDataTableDisabled || !lxDataTable.selectable)\n {\n return;\n }\n\n if (angular.isDefined(_event)) {\n _event.stopPropagation();\n }\n\n _row.lxDataTableSelected = angular.isDefined(_newSelectedStatus) ? _newSelectedStatus : !_row.lxDataTableSelected;\n\n if (_row.lxDataTableSelected)\n {\n // Make sure it's not already in.\n if (lxDataTable.selectedRows.length === 0 || (lxDataTable.selectedRows.length && lxDataTable.selectedRows.indexOf(_row) === -1))\n {\n lxDataTable.selectedRows.push(_row);\n lxDataTable.areAllRowsSelected();\n\n $rootScope.$broadcast('lx-data-table__selected', lxDataTable.id, lxDataTable.selectedRows, _row);\n }\n }\n else\n {\n if (lxDataTable.selectedRows.length && lxDataTable.selectedRows.indexOf(_row) > -1)\n {\n lxDataTable.selectedRows.splice(lxDataTable.selectedRows.indexOf(_row), 1);\n lxDataTable.allRowsSelected = false;\n\n $rootScope.$broadcast('lx-data-table__unselected', lxDataTable.id, lxDataTable.selectedRows, _row);\n }\n }\n }\n }\n})();\n","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\nvar sloppyArrayMethod = require('../internals/sloppy-array-method');\n\nvar nativeSort = [].sort;\nvar test = [1, 2, 3];\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar SLOPPY_METHOD = sloppyArrayMethod('sort');\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || SLOPPY_METHOD;\n\n// `Array.prototype.sort` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? nativeSort.call(toObject(this))\n : nativeSort.call(toObject(this), aFunction(comparefn));\n }\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.github.io/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !(NAME in FunctionPrototype)) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return FunctionPrototypeToString.call(this).match(nameRE)[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.data-table')\n .service('LxDataTableService', LxDataTableService);\n\n LxDataTableService.$inject = ['$rootScope'];\n\n function LxDataTableService($rootScope)\n {\n var service = this;\n\n service.select = select;\n service.selectAll = selectAll;\n service.unselect = unselect;\n service.unselectAll = unselectAll;\n service.activate = activate;\n service.deactivate = deactivate;\n\n ////////////\n\n function select(_dataTableId, row)\n {\n $rootScope.$broadcast('lx-data-table__select', _dataTableId, row);\n }\n\n function selectAll(_dataTableId)\n {\n $rootScope.$broadcast('lx-data-table__select-all', _dataTableId);\n }\n\n function unselect(_dataTableId, row)\n {\n $rootScope.$broadcast('lx-data-table__unselect', _dataTableId, row);\n }\n\n function unselectAll(_dataTableId)\n {\n $rootScope.$broadcast('lx-data-table__unselect-all', _dataTableId);\n }\n\n function activate(_dataTableId, row)\n {\n $rootScope.$broadcast('lx-data-table__activate', _dataTableId, row);\n }\n\n function deactivate(_dataTableId, row)\n {\n $rootScope.$broadcast('lx-data-table__deactivate', _dataTableId, row);\n }\n }\n})();\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.date-picker')\n .directive('lxDatePicker', lxDatePicker);\n\n lxDatePicker.$inject = ['LxDatePickerService', 'LxUtilsService'];\n\n function lxDatePicker(LxDatePickerService, LxUtilsService)\n {\n return {\n restrict: 'AE',\n templateUrl: 'date-picker.html',\n scope:\n {\n autoClose: '=?lxAutoClose',\n callback: '&?lxCallback',\n color: '@?lxColor',\n escapeClose: '=?lxEscapeClose',\n inputFormat: '@?lxInputFormat',\n maxDate: '=?lxMaxDate',\n ngModel: '=',\n minDate: '=?lxMinDate',\n locale: '@lxLocale'\n },\n link: link,\n controller: LxDatePickerController,\n controllerAs: 'lxDatePicker',\n bindToController: true,\n replace: true,\n transclude: true\n };\n\n function link(scope, element, attrs)\n {\n if (angular.isDefined(attrs.id))\n {\n attrs.$observe('id', function(_newId)\n {\n scope.lxDatePicker.pickerId = _newId;\n LxDatePickerService.registerScope(scope.lxDatePicker.pickerId, scope);\n });\n }\n else\n {\n scope.lxDatePicker.pickerId = LxUtilsService.generateUUID();\n LxDatePickerService.registerScope(scope.lxDatePicker.pickerId, scope);\n }\n }\n }\n\n LxDatePickerController.$inject = ['$element', '$scope', '$timeout', '$transclude', 'LxDatePickerService', 'LxUtilsService'];\n\n function LxDatePickerController($element, $scope, $timeout, $transclude, LxDatePickerService, LxUtilsService)\n {\n var lxDatePicker = this;\n var input;\n var modelController;\n var timer1;\n var timer2;\n var watcher1;\n var watcher2;\n\n lxDatePicker.closeDatePicker = closeDatePicker;\n lxDatePicker.displayYearSelection = displayYearSelection;\n lxDatePicker.hideYearSelection = hideYearSelection;\n lxDatePicker.getDateFormatted = getDateFormatted;\n lxDatePicker.nextMonth = nextMonth;\n lxDatePicker.openDatePicker = openDatePicker;\n lxDatePicker.previousMonth = previousMonth;\n lxDatePicker.select = select;\n lxDatePicker.selectYear = selectYear;\n\n lxDatePicker.autoClose = angular.isDefined(lxDatePicker.autoClose) ? lxDatePicker.autoClose : true;\n lxDatePicker.color = angular.isDefined(lxDatePicker.color) ? lxDatePicker.color : 'primary';\n lxDatePicker.element = $element.find('.lx-date-picker');\n lxDatePicker.escapeClose = angular.isDefined(lxDatePicker.escapeClose) ? lxDatePicker.escapeClose : true;\n lxDatePicker.isOpen = false;\n lxDatePicker.moment = moment;\n lxDatePicker.yearSelection = false;\n lxDatePicker.uuid = LxUtilsService.generateUUID();\n\n $transclude(function(clone)\n {\n if (clone.length)\n {\n lxDatePicker.hasInput = true;\n\n timer1 = $timeout(function()\n {\n input = $element.find('.lx-date-input input');\n modelController = input.data('$ngModelController');\n\n watcher2 = $scope.$watch(function()\n {\n return modelController.$viewValue;\n }, function(newValue, oldValue)\n {\n if (angular.isUndefined(newValue))\n {\n lxDatePicker.ngModel = undefined;\n }\n });\n });\n }\n });\n\n watcher1 = $scope.$watch(function()\n {\n return lxDatePicker.ngModel;\n }, init);\n\n $scope.$on('$destroy', function()\n {\n $timeout.cancel(timer1);\n $timeout.cancel(timer2);\n\n if (angular.isFunction(watcher1))\n {\n watcher1();\n }\n\n if (angular.isFunction(watcher2))\n {\n watcher2();\n }\n });\n\n ////////////\n\n function closeDatePicker()\n {\n LxDatePickerService.close(lxDatePicker.pickerId);\n }\n\n function displayYearSelection()\n {\n lxDatePicker.yearSelection = true;\n\n timer2 = $timeout(function()\n {\n var yearSelector = angular.element('.lx-date-picker__year-selector');\n var activeYear = yearSelector.find('.lx-date-picker__year--is-active');\n\n yearSelector.scrollTop(yearSelector.scrollTop() + activeYear.position().top - yearSelector.height() / 2 + activeYear.height() / 2);\n });\n }\n\n function hideYearSelection()\n {\n lxDatePicker.yearSelection = false;\n }\n\n function generateCalendar()\n {\n lxDatePicker.days = [];\n\n var previousDay = angular.copy(lxDatePicker.ngModelMoment).date(0);\n var firstDayOfMonth = angular.copy(lxDatePicker.ngModelMoment).date(1);\n var lastDayOfMonth = firstDayOfMonth.clone().endOf('month');\n var maxDays = lastDayOfMonth.date();\n\n lxDatePicker.emptyFirstDays = [];\n\n for (var i = firstDayOfMonth.day() === 0 ? 6 : firstDayOfMonth.day() - 1; i > 0; i--)\n {\n lxDatePicker.emptyFirstDays.push(\n {});\n }\n\n for (var j = 0; j < maxDays; j++)\n {\n var date = angular.copy(previousDay.add(1, 'days'));\n\n date.selected = angular.isDefined(lxDatePicker.ngModel) && date.isSame(lxDatePicker.ngModel, 'day');\n date.today = date.isSame(moment(), 'day');\n\n if (angular.isDefined(lxDatePicker.minDate))\n {\n var minDate = (angular.isString(lxDatePicker.minDate)) ? new Date(lxDatePicker.minDate) : lxDatePicker.minDate;\n if (date.toDate() < minDate)\n {\n date.disabled = true;\n }\n }\n\n if (angular.isDefined(lxDatePicker.maxDate))\n {\n var maxDate = (angular.isString(lxDatePicker.maxDate)) ? new Date(lxDatePicker.maxDate) : lxDatePicker.maxDate;\n if (date.toDate() > maxDate)\n {\n date.disabled = true;\n }\n }\n\n lxDatePicker.days.push(date);\n }\n\n lxDatePicker.emptyLastDays = [];\n\n for (var k = 7 - (lastDayOfMonth.day() === 0 ? 7 : lastDayOfMonth.day()); k > 0; k--)\n {\n lxDatePicker.emptyLastDays.push(\n {});\n }\n }\n\n function getDateFormatted()\n {\n var dateFormatted = lxDatePicker.ngModelMoment.format('llll').replace(lxDatePicker.ngModelMoment.format('LT'), '').trim().replace(lxDatePicker.ngModelMoment.format('YYYY'), '').trim();\n var dateFormattedLastChar = dateFormatted.slice(-1);\n\n if (dateFormattedLastChar === ',')\n {\n dateFormatted = dateFormatted.slice(0, -1);\n }\n\n return dateFormatted;\n }\n\n function init()\n {\n moment.locale(lxDatePicker.locale);\n\n lxDatePicker.ngModelMoment = angular.isDefined(lxDatePicker.ngModel) ? moment(angular.copy(lxDatePicker.ngModel)) : moment();\n lxDatePicker.days = [];\n lxDatePicker.daysOfWeek = [moment.weekdaysMin(1), moment.weekdaysMin(2), moment.weekdaysMin(3), moment.weekdaysMin(4), moment.weekdaysMin(5), moment.weekdaysMin(6), moment.weekdaysMin(0)];\n lxDatePicker.years = [];\n\n for (var y = moment().year() - 100; y <= moment().year() + 100; y++)\n {\n lxDatePicker.years.push(y);\n }\n\n generateCalendar();\n }\n\n function nextMonth()\n {\n lxDatePicker.ngModelMoment = lxDatePicker.ngModelMoment.add(1, 'month');\n\n generateCalendar();\n }\n\n function openDatePicker()\n {\n LxDatePickerService.open(lxDatePicker.pickerId);\n\n generateCalendar();\n }\n\n function previousMonth()\n {\n lxDatePicker.ngModelMoment = lxDatePicker.ngModelMoment.subtract(1, 'month');\n\n generateCalendar();\n }\n\n function select(_day)\n {\n if (!_day.disabled)\n {\n lxDatePicker.ngModel = _day.toDate();\n lxDatePicker.ngModelMoment = angular.copy(_day);\n\n if (angular.isDefined(lxDatePicker.callback))\n {\n lxDatePicker.callback(\n {\n newDate: lxDatePicker.ngModel\n });\n }\n\n if (angular.isDefined(modelController) && lxDatePicker.inputFormat)\n {\n modelController.$setViewValue(angular.copy(_day).format(lxDatePicker.inputFormat));\n modelController.$render();\n }\n\n generateCalendar();\n }\n }\n\n function selectYear(_year)\n {\n lxDatePicker.yearSelection = false;\n\n lxDatePicker.ngModelMoment = lxDatePicker.ngModelMoment.year(_year);\n\n generateCalendar();\n }\n }\n})();\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/forced-string-trim-method');\n\n// `String.prototype.trim` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.date-picker')\n .service('LxDatePickerService', LxDatePickerService);\n\n LxDatePickerService.$inject = ['$rootScope', '$timeout', 'LxDepthService', 'LxEventSchedulerService'];\n\n function LxDatePickerService($rootScope, $timeout, LxDepthService, LxEventSchedulerService)\n {\n var service = this;\n var activeDatePickerId;\n var datePickerFilter;\n var idEventScheduler;\n var scopeMap = {};\n\n service.close = closeDatePicker;\n service.open = openDatePicker;\n service.registerScope = registerScope;\n\n ////////////\n\n function closeDatePicker(_datePickerId)\n {\n if (angular.isDefined(idEventScheduler))\n {\n LxEventSchedulerService.unregister(idEventScheduler);\n idEventScheduler = undefined;\n }\n\n activeDatePickerId = undefined;\n\n $rootScope.$broadcast('lx-date-picker__close-start', _datePickerId);\n\n datePickerFilter.removeClass('lx-date-picker-filter--is-shown');\n scopeMap[_datePickerId].element.removeClass('lx-date-picker--is-shown');\n\n $timeout(function()\n {\n angular.element('body').removeClass('no-scroll-date-picker-' + scopeMap[_datePickerId].uuid);\n\n datePickerFilter.remove();\n\n scopeMap[_datePickerId].element\n .hide()\n .appendTo(scopeMap[_datePickerId].elementParent);\n\n scopeMap[_datePickerId].isOpen = false;\n $rootScope.$broadcast('lx-date-picker__close-end', _datePickerId);\n }, 600);\n }\n\n function onKeyUp(_event)\n {\n if (_event.keyCode == 27 && angular.isDefined(activeDatePickerId))\n {\n closeDatePicker(activeDatePickerId);\n }\n\n _event.stopPropagation();\n }\n\n function openDatePicker(_datePickerId)\n {\n LxDepthService.register();\n\n activeDatePickerId = _datePickerId;\n\n angular.element('body').addClass('no-scroll-date-picker-' + scopeMap[_datePickerId].uuid);\n\n datePickerFilter = angular.element('
        ',\n {\n class: 'lx-date-picker-filter'\n });\n\n datePickerFilter\n .css('z-index', LxDepthService.getDepth())\n .appendTo('body');\n\n if (scopeMap[activeDatePickerId].autoClose)\n {\n datePickerFilter.on('click', function()\n {\n closeDatePicker(activeDatePickerId);\n });\n }\n\n if (scopeMap[activeDatePickerId].escapeClose)\n {\n idEventScheduler = LxEventSchedulerService.register('keyup', onKeyUp);\n }\n\n scopeMap[activeDatePickerId].element\n .css('z-index', LxDepthService.getDepth() + 1)\n .appendTo('body')\n .show();\n\n $timeout(function()\n {\n $rootScope.$broadcast('lx-date-picker__open-start', activeDatePickerId);\n\n scopeMap[activeDatePickerId].isOpen = true;\n\n datePickerFilter.addClass('lx-date-picker-filter--is-shown');\n scopeMap[activeDatePickerId].element.addClass('lx-date-picker--is-shown');\n }, 100);\n\n $timeout(function()\n {\n $rootScope.$broadcast('lx-date-picker__open-end', activeDatePickerId);\n }, 700);\n }\n\n function registerScope(_datePickerId, _datePickerScope)\n {\n scopeMap[_datePickerId] = _datePickerScope.lxDatePicker;\n }\n }\n})();","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.dialog')\n .directive('lxDialog', lxDialog)\n .directive('lxDialogHeader', lxDialogHeader)\n .directive('lxDialogContent', lxDialogContent)\n .directive('lxDialogFooter', lxDialogFooter)\n .directive('lxDialogClose', lxDialogClose);\n\n function lxDialog()\n {\n return {\n restrict: 'E',\n template: '
        ',\n scope:\n {\n autoClose: '=?lxAutoClose',\n escapeClose: '=?lxEscapeClose',\n size: '@?lxSize'\n },\n link: link,\n controller: LxDialogController,\n controllerAs: 'lxDialog',\n bindToController: true,\n replace: true,\n transclude: true\n };\n\n function link(scope, element, attrs, ctrl)\n {\n attrs.$observe('id', function(_newId)\n {\n ctrl.id = _newId;\n });\n }\n }\n\n LxDialogController.$inject = ['$element', '$interval', '$rootScope', '$scope', '$timeout', '$window', 'LxDepthService', 'LxEventSchedulerService', 'LxUtilsService'];\n\n function LxDialogController($element, $interval, $rootScope, $scope, $timeout, $window, LxDepthService, LxEventSchedulerService, LxUtilsService)\n {\n var lxDialog = this;\n var dialogFilter = angular.element('
        ',\n {\n class: 'dialog-filter'\n });\n var dialogHeight;\n var dialogInterval;\n var dialogScrollable;\n var elementParent = $element.parent();\n var idEventScheduler;\n var resizeDebounce;\n var windowHeight;\n\n lxDialog.autoClose = angular.isDefined(lxDialog.autoClose) ? lxDialog.autoClose : true;\n lxDialog.escapeClose = angular.isDefined(lxDialog.escapeClose) ? lxDialog.escapeClose : true;\n lxDialog.isOpen = false;\n lxDialog.uuid = LxUtilsService.generateUUID();\n\n $scope.$on('lx-dialog__open', function(event, id, params)\n {\n if (id === lxDialog.id)\n {\n open(params);\n }\n });\n\n $scope.$on('lx-dialog__close', function(event, id, canceled, params)\n {\n if (id === lxDialog.id || id === undefined)\n {\n close(canceled, params);\n }\n });\n\n $scope.$on('$destroy', function()\n {\n close(true);\n });\n\n ////////////\n\n function checkDialogHeight()\n {\n var dialog = $element;\n var dialogHeader = dialog.find('.dialog__header');\n var dialogContent = dialog.find('.dialog__content');\n var dialogFooter = dialog.find('.dialog__footer');\n\n if (!dialogFooter.length)\n {\n dialogFooter = dialog.find('.dialog__actions');\n }\n\n if (angular.isUndefined(dialogHeader))\n {\n return;\n }\n\n var heightToCheck = 60 + dialogHeader.outerHeight() + dialogContent.outerHeight() + dialogFooter.outerHeight();\n\n if (dialogHeight === heightToCheck && windowHeight === $window.innerHeight)\n {\n return;\n }\n\n dialogHeight = heightToCheck;\n windowHeight = $window.innerHeight;\n\n if (heightToCheck >= $window.innerHeight)\n {\n dialog.addClass('dialog--is-fixed');\n\n dialogScrollable\n .css(\n {\n top: dialogHeader.outerHeight(),\n bottom: dialogFooter.outerHeight()\n })\n .off('scroll', checkScrollEnd)\n .on('scroll', checkScrollEnd);\n }\n else\n {\n dialog.removeClass('dialog--is-fixed');\n\n dialogScrollable\n .removeAttr('style')\n .off('scroll', checkScrollEnd);\n }\n }\n\n function checkDialogHeightOnResize()\n {\n if (resizeDebounce)\n {\n $timeout.cancel(resizeDebounce);\n }\n\n resizeDebounce = $timeout(function()\n {\n checkDialogHeight();\n }, 200);\n }\n\n function checkScrollEnd()\n {\n if (dialogScrollable.scrollTop() + dialogScrollable.innerHeight() >= dialogScrollable[0].scrollHeight)\n {\n $rootScope.$broadcast('lx-dialog__scroll-end', lxDialog.id);\n\n dialogScrollable.off('scroll', checkScrollEnd);\n\n $timeout(function()\n {\n dialogScrollable.on('scroll', checkScrollEnd);\n }, 500);\n }\n }\n\n function onKeyUp(_event)\n {\n if (_event.keyCode == 27)\n {\n close(true);\n }\n\n _event.stopPropagation();\n }\n\n function open(_params)\n {\n if (lxDialog.isOpen)\n {\n return;\n }\n\n LxDepthService.register();\n\n angular.element('body').addClass('no-scroll-dialog-' + lxDialog.uuid);\n\n dialogFilter\n .css('z-index', LxDepthService.getDepth())\n .appendTo('body');\n\n if (lxDialog.autoClose)\n {\n dialogFilter.on('click', function()\n {\n close(true);\n });\n }\n\n if (lxDialog.escapeClose)\n {\n idEventScheduler = LxEventSchedulerService.register('keyup', onKeyUp);\n }\n\n $element\n .css('z-index', LxDepthService.getDepth() + 1)\n .appendTo('body')\n .show();\n\n $timeout(function()\n {\n $rootScope.$broadcast('lx-dialog__open-start', lxDialog.id, _params);\n\n lxDialog.isOpen = true;\n\n dialogFilter.addClass('dialog-filter--is-shown');\n $element.addClass('dialog--is-shown');\n }, 100);\n\n $timeout(function()\n {\n if ($element.find('.dialog__scrollable').length === 0)\n {\n $element.find('.dialog__content').wrap(angular.element('
        ',\n {\n class: 'dialog__scrollable'\n }));\n }\n\n dialogScrollable = $element.find('.dialog__scrollable');\n }, 200);\n\n $timeout(function()\n {\n $rootScope.$broadcast('lx-dialog__open-end', lxDialog.id, _params);\n }, 700);\n\n dialogInterval = $interval(function()\n {\n checkDialogHeight();\n }, 500);\n\n angular.element($window).on('resize', checkDialogHeightOnResize);\n }\n\n function close(_canceled, _params)\n {\n if (!lxDialog.isOpen)\n {\n return;\n }\n\n _params = _params || {};\n\n if (angular.isDefined(idEventScheduler))\n {\n LxEventSchedulerService.unregister(idEventScheduler);\n idEventScheduler = undefined;\n }\n\n angular.element($window).off('resize', checkDialogHeightOnResize);\n $element.find('.dialog__scrollable').off('scroll', checkScrollEnd);\n\n $rootScope.$broadcast('lx-dialog__close-start', lxDialog.id, _canceled, _params);\n\n if (resizeDebounce)\n {\n $timeout.cancel(resizeDebounce);\n }\n\n $interval.cancel(dialogInterval);\n\n dialogFilter.removeClass('dialog-filter--is-shown');\n $element.removeClass('dialog--is-shown');\n\n $timeout(function()\n {\n angular.element('body').removeClass('no-scroll-dialog-' + lxDialog.uuid);\n\n dialogFilter.remove();\n\n $element\n .hide()\n .removeClass('dialog--is-fixed')\n .appendTo(elementParent);\n\n lxDialog.isOpen = false;\n dialogHeight = undefined;\n $rootScope.$broadcast('lx-dialog__close-end', lxDialog.id, _canceled, _params);\n }, 600);\n }\n }\n\n function lxDialogHeader()\n {\n return {\n restrict: 'E',\n template: '
        ',\n replace: true,\n transclude: true\n };\n }\n\n function lxDialogContent()\n {\n return {\n restrict: 'E',\n template: '
        ',\n replace: true,\n transclude: true\n };\n }\n\n function lxDialogFooter()\n {\n return {\n restrict: 'E',\n template: '
        ',\n replace: true,\n transclude: true\n };\n }\n\n lxDialogClose.$inject = ['LxDialogService'];\n\n function lxDialogClose(LxDialogService)\n {\n return {\n restrict: 'A',\n link: function(scope, element)\n {\n element.on('click', function()\n {\n LxDialogService.close(element.parents('.dialog').attr('id'), true);\n });\n\n scope.$on('$destroy', function()\n {\n element.off();\n });\n }\n };\n }\n})();\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.dialog')\n .service('LxDialogService', LxDialogService);\n\n LxDialogService.$inject = ['$rootScope'];\n\n function LxDialogService($rootScope)\n {\n var service = this;\n\n service.open = open;\n service.close = close;\n\n ////////////\n\n function open(_dialogId, _params)\n {\n $rootScope.$broadcast('lx-dialog__open', _dialogId, _params);\n }\n\n function close(_dialogId, _canceled, _params)\n {\n $rootScope.$broadcast('lx-dialog__close', _dialogId, _canceled, _params);\n }\n }\n})();\n","import { CSS_PREFIX, ESCAPE_KEY_CODE } from '@lumx/core/js/constants';\n\nimport template from '../views/dropdown.html';\n\n/////////////////////////////\n\nfunction DropdownController(\n $document,\n $rootScope,\n $scope,\n $timeout,\n $window,\n LxDepthService,\n LxDropdownService,\n LxEventSchedulerService,\n LxUtilsService,\n) {\n 'ngInject';\n\n // eslint-disable-next-line consistent-this\n const lx = this;\n\n /////////////////////////////\n // //\n // Private attributes //\n // //\n /////////////////////////////\n\n /**\n * Offset from the edge of the view port if dropdown is higher.\n *\n * @type {number}\n * @constant\n * @readonly\n */\n const _OFFSET_FROM_EDGE = 16;\n\n /**\n * The event scheduler id.\n *\n * @type {string}\n */\n // eslint-disable-next-line one-var\n let _idEventScheduler;\n\n /**\n * The menu element.\n *\n * @type {element}\n */\n // eslint-disable-next-line one-var\n let _menuEl;\n\n /**\n * The source element.\n *\n * @type {element}\n */\n // eslint-disable-next-line one-var\n let _sourceEl;\n\n /**\n * The toggle element.\n *\n * @type {element}\n */\n // eslint-disable-next-line one-var\n let _toggleEl;\n\n /////////////////////////////\n // //\n // Public attributes //\n // //\n /////////////////////////////\n\n /**\n * Whether the directive has toggle slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasToggle = false;\n\n /**\n * Whether the dropdown is open or not.\n *\n * @type {boolean}\n */\n lx.isOpen = false;\n\n /**\n * The dropdown uuid.\n *\n * @type {string}\n */\n lx.uuid = LxUtilsService.generateUUID();\n\n /////////////////////////////\n // //\n // Private functions //\n // //\n /////////////////////////////\n\n /**\n * Close dropdown on document click/keydown/keypress.\n *\n * @param {Event} evt The click/keydown/keypress event.\n */\n function _onDocumentEvent(evt) {\n if (angular.isDefined(lx.escapeClose) && !lx.escapeClose) {\n return;\n }\n\n evt.stopPropagation();\n\n LxDropdownService.closeLastDropdown();\n }\n\n /**\n * Stop event propagation on menu click.\n *\n * @param {Event} evt The click event.\n */\n function _stopMenuPropagation(evt) {\n if (evt.keyCode === ESCAPE_KEY_CODE) {\n return;\n }\n\n evt.stopPropagation();\n }\n\n /**\n * Check if user has scrolled to the end of the dropdown.\n */\n function _checkScrollEnd() {\n if (_menuEl.scrollTop() + _menuEl.innerHeight() >= _menuEl[0].scrollHeight) {\n $rootScope.$broadcast('lx-dropdown__scroll-end', lx.uuid);\n }\n }\n\n /**\n * Close dropdown.\n */\n function _close() {\n lx.isOpen = false;\n\n LxDropdownService.unregisterDropdownId(lx.uuid);\n\n LxUtilsService.restoreBodyScroll();\n\n $timeout(() => {\n _menuEl\n .removeAttr('style')\n .hide()\n .off('scroll', _checkScrollEnd)\n .insertAfter(_toggleEl);\n\n if (angular.isDefined(lx.closeOnClick) && !lx.closeOnClick) {\n _menuEl.off('click keydown keypress', _stopMenuPropagation);\n }\n\n LxEventSchedulerService.unregister(_idEventScheduler);\n _idEventScheduler = undefined;\n\n if (angular.isDefined(_sourceEl)) {\n _sourceEl.focus();\n }\n });\n }\n\n /**\n * Get available height.\n *\n * @return {Object} Available height on top / bottom.\n */\n function _getAvailableHeight() {\n const availaibleHeight = {};\n const toggleProps = {\n height: _toggleEl.outerHeight(),\n top: _toggleEl.offset().top - angular.element($window).scrollTop(),\n };\n const windowProps = {\n height: $window.innerHeight,\n };\n\n if (lx.overToggle) {\n availaibleHeight.above = toggleProps.top;\n availaibleHeight.below = windowProps.height - toggleProps.top;\n } else {\n availaibleHeight.above = toggleProps.top;\n availaibleHeight.below = windowProps.height - (toggleProps.top + toggleProps.height);\n }\n\n return availaibleHeight;\n }\n\n /**\n * Initialize horizontal position.\n */\n function _initHorizontalPosition() {\n const menuProps = {};\n const toggleProps = {\n height: _toggleEl.outerHeight(),\n left: _toggleEl.offset().left,\n width: _toggleEl.outerWidth(),\n };\n const windowProps = {\n height: $window.innerHeight,\n width: $window.innerWidth,\n };\n\n if (angular.isDefined(lx.width)) {\n if (lx.width.indexOf('%') > -1) {\n // eslint-disable-next-line no-magic-numbers\n menuProps.minWidth = toggleProps.width * (lx.width.slice(0, -1) / 100);\n } else {\n menuProps.width = lx.width;\n }\n } else {\n menuProps.width = 'auto';\n }\n\n if (!lx.position || lx.position === 'left') {\n menuProps.left = toggleProps.left;\n menuProps.right = 'auto';\n } else if (lx.position === 'right') {\n menuProps.left = 'auto';\n menuProps.right = windowProps.width - toggleProps.width - toggleProps.left;\n }\n\n _menuEl.css({\n left: menuProps.left,\n right: menuProps.right,\n });\n\n if (angular.isDefined(menuProps.minWidth)) {\n _menuEl.css({\n minWidth: menuProps.minWidth,\n });\n } else {\n _menuEl.css({\n width: menuProps.width,\n });\n }\n }\n\n /**\n * Initialize vertical position.\n */\n function _initVerticalPosition() {\n const availaibleHeight = _getAvailableHeight();\n const menuProps = {};\n const windowProps = {\n height: $window.innerHeight,\n };\n\n if (availaibleHeight.below > availaibleHeight.above) {\n if (lx.overToggle) {\n menuProps.top = availaibleHeight.above;\n menuProps.maxHeight = availaibleHeight.below;\n } else {\n // eslint-disable-next-line no-bitwise\n menuProps.top = availaibleHeight.above + _toggleEl.outerHeight() + ~~lx.offset;\n menuProps.maxHeight = availaibleHeight.below;\n }\n } else if (lx.overToggle) {\n menuProps.bottom = windowProps.height - availaibleHeight.above - _toggleEl.outerHeight();\n menuProps.maxHeight = availaibleHeight.above + _toggleEl.outerHeight();\n } else {\n // eslint-disable-next-line no-bitwise\n menuProps.bottom = windowProps.height - availaibleHeight.above + ~~lx.offset;\n menuProps.maxHeight = availaibleHeight.above;\n }\n\n menuProps.maxHeight -= _OFFSET_FROM_EDGE;\n\n _menuEl.css(menuProps);\n }\n\n /**\n * Open dropdown.\n */\n function _open() {\n LxDropdownService.closeLastDropdown(true);\n LxDropdownService.registerDropdownId(lx.uuid);\n\n LxDepthService.increase();\n\n _menuEl\n .appendTo('body')\n .show()\n .css({ position: 'fixed', zIndex: LxDepthService.get() });\n\n $timeout(() => {\n _initHorizontalPosition();\n _initVerticalPosition();\n\n lx.isOpen = true;\n\n LxUtilsService.disableBodyScroll();\n\n _menuEl.on('scroll', _checkScrollEnd);\n\n if (angular.isDefined(lx.closeOnClick) && !lx.closeOnClick) {\n _menuEl.on('click keydown keypress', _stopMenuPropagation);\n }\n\n _idEventScheduler = LxEventSchedulerService.register('click keydown keypress', _onDocumentEvent);\n });\n }\n\n /**\n * Register the source element that triggered the dropdown.\n *\n * @param {element} sourceEl The source element that triggered the dropdown.\n */\n function _registerSource(sourceEl) {\n _sourceEl = sourceEl;\n }\n\n /////////////////////////////\n // //\n // Public functions //\n // //\n /////////////////////////////\n\n /**\n * Register menu.\n *\n * @param {element} menuEl The menu element.\n */\n function registerMenu(menuEl) {\n _menuEl = menuEl;\n _menuEl.hide();\n }\n\n /**\n * Register toggle.\n *\n * @param {element} toggleEl The toggle element.\n */\n function registerToggle(toggleEl) {\n _toggleEl = toggleEl;\n }\n\n /**\n * Toggle the dropdown on toggle click.\n *\n * @param {Event} evt The click event.\n */\n function toggle(evt) {\n if (angular.isDefined(evt.target)) {\n _registerSource(angular.element(evt.target));\n }\n\n if (lx.isOpen) {\n LxDropdownService.close(lx.uuid);\n } else {\n _open();\n }\n }\n\n /////////////////////////////\n\n lx.registerMenu = registerMenu;\n lx.registerToggle = registerToggle;\n lx.toggle = toggle;\n\n /////////////////////////////\n // //\n // Events //\n // //\n /////////////////////////////\n\n /**\n * Open a given dropdown.\n *\n * @param {Event} evt The dropdown open event.\n * @param {string} dropdownId The dropdown identifier.\n * @param {Object} params An optional object that holds extra parameters.\n */\n $scope.$on('lx-dropdown__open', (evt, dropdownId, params) => {\n if (dropdownId === lx.uuid && !lx.isOpen) {\n let toggleEl;\n\n if (angular.isElement(params)) {\n toggleEl = params;\n } else if (angular.isString(params)) {\n toggleEl = angular.element(params);\n } else if (angular.isObject(params)) {\n toggleEl = angular.element(params.target);\n }\n\n registerToggle(toggleEl);\n\n if (angular.isObject(params) && angular.isDefined(params.source)) {\n _registerSource(angular.element(params.source));\n } else {\n _registerSource(toggleEl);\n }\n\n _open();\n }\n });\n\n /**\n * Close a given dropdown.\n *\n * @param {Event} evt The dropdown open event.\n * @param {Object} dropdownId The dropdown identifier.\n * @param {boolean} onOpen Whether the order has been asked on dropdown open or not.\n */\n $scope.$on('lx-dropdown__close', (evt, dropdownId, onOpen) => {\n if (dropdownId === lx.uuid && lx.isOpen) {\n if (onOpen && angular.isDefined(lx.closeOnClick) && !lx.closeOnClick) {\n return;\n }\n\n _close();\n }\n });\n\n /**\n * Update the active dropdown position.\n */\n $scope.$on('lx-dropdown__update', () => {\n if (LxDropdownService.isOpen(lx.uuid)) {\n _initHorizontalPosition();\n _initVerticalPosition();\n }\n });\n\n /**\n * Close on destroy.\n */\n $scope.$on('$destroy', () => {\n if (!lx.isOpen) {\n return;\n }\n\n _close();\n });\n}\n\n/////////////////////////////\n\nfunction DropdownDirective() {\n 'ngInject';\n\n function link(scope, el, attrs, ctrl, transclude) {\n ctrl.registerToggle(el.find(`.${CSS_PREFIX}-dropdown__toggle`));\n ctrl.registerMenu(el.find(`.${CSS_PREFIX}-dropdown__menu`));\n\n if (transclude.isSlotFilled('toggle')) {\n ctrl.hasToggle = true;\n }\n\n attrs.$observe('id', (id) => {\n ctrl.uuid = id;\n });\n }\n\n return {\n bindToController: true,\n controller: DropdownController,\n controllerAs: 'lx',\n link,\n replace: true,\n restrict: 'E',\n scope: {\n closeOnClick: '=?lxCloseOnClick',\n escapeClose: '=?lxEscapeClose',\n offset: '@?lxOffset',\n overToggle: '=?lxOverToggle',\n position: '@?lxPosition',\n width: '@?lxWidth',\n },\n template,\n transclude: {\n menu: 'lxDropdownMenu',\n toggle: '?lxDropdownToggle',\n },\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.dropdown').directive('lxDropdown', DropdownDirective);\n\n/////////////////////////////\n\nexport { DropdownDirective };\n","function DropdownService($rootScope) {\n 'ngInject';\n\n const service = this;\n\n /////////////////////////////\n // //\n // Private attributes //\n // //\n /////////////////////////////\n\n /**\n * The active dropdown identifier.\n *\n * @type {string}\n */\n const _activeDropdownIds = [];\n\n /////////////////////////////\n // //\n // Public functions //\n // //\n /////////////////////////////\n\n /**\n * Close a given dropdown.\n *\n * @param {string} dropdownId The dropdown identifier.\n * @param {boolean} onOpen Whether the order has been asked on dropdown open or not.\n */\n function closeDropdown(dropdownId, onOpen) {\n $rootScope.$broadcast('lx-dropdown__close', dropdownId, onOpen);\n }\n\n /**\n * Close the last opened dropdown.\n *\n * @param {boolean} onOpen Whether the order has been asked on dropdown open or not.\n */\n function closeLastDropdown(onOpen) {\n if (_activeDropdownIds.length > 0) {\n closeDropdown(_activeDropdownIds[_activeDropdownIds.length - 1], onOpen);\n }\n }\n\n /**\n * Get last dropdown id.\n *\n * @return {string} The last dropdown id.\n */\n function getLastDropdownId() {\n return _activeDropdownIds[_activeDropdownIds.length - 1];\n }\n\n /**\n * Check if a given dropdown is open.\n *\n * @param {string} dropdownId The dropdown identifier.\n * @return {boolean} Whether the given dropdown is open or not.\n */\n function isOpen(dropdownId) {\n return _activeDropdownIds.includes(dropdownId);\n }\n\n /**\n * Open a given dropdown.\n *\n * @param {string} dropdownId The dropdown identifier.\n * @param {Object} params An optional object that holds extra parameters.\n */\n function openDropdown(dropdownId, params) {\n $rootScope.$broadcast('lx-dropdown__open', dropdownId, params);\n }\n\n /**\n * Register the given dropdown identifier.\n *\n * @param {string} dropdownId The dropdown identifier.\n */\n function registerDropdownId(dropdownId) {\n _activeDropdownIds.push(dropdownId);\n }\n\n /**\n * Unegister the given dropdown identifier.\n *\n * @param {string} dropdownId The dropdown identifier.\n */\n function unregisterDropdownId(dropdownId) {\n _activeDropdownIds.splice(_activeDropdownIds.indexOf(dropdownId), 1);\n }\n\n /**\n * Update the active dropdown position.\n */\n function updateActiveDropdownPosition() {\n $rootScope.$broadcast('lx-dropdown__update');\n }\n\n /////////////////////////////\n\n service.close = closeDropdown;\n service.closeLastDropdown = closeLastDropdown;\n service.getLastDropdownId = getLastDropdownId;\n service.isOpen = isOpen;\n service.open = openDropdown;\n service.registerDropdownId = registerDropdownId;\n service.unregisterDropdownId = unregisterDropdownId;\n service.updateActiveDropdownPosition = updateActiveDropdownPosition;\n}\n\n/////////////////////////////\n\nangular.module('lumx.dropdown').service('LxDropdownService', DropdownService);\n\n/////////////////////////////\n\nexport { DropdownService };\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.fab')\n .directive('lxFab', lxFab)\n .directive('lxFabTrigger', lxFabTrigger)\n .directive('lxFabActions', lxFabActions);\n\n function lxFab()\n {\n return {\n restrict: 'E',\n templateUrl: 'fab.html',\n scope: true,\n link: link,\n controller: LxFabController,\n controllerAs: 'lxFab',\n bindToController: true,\n transclude: true,\n replace: true\n };\n\n function link(scope, element, attrs, ctrl)\n {\n attrs.$observe('lxDirection', function(newDirection)\n {\n ctrl.setFabDirection(newDirection);\n });\n\n attrs.$observe('lxTriggerOnClick', function(isTriggeredOnClick)\n {\n ctrl.setFabTriggerMethod(scope.$eval(isTriggeredOnClick));\n });\n }\n }\n\n function LxFabController()\n {\n var lxFab = this;\n\n lxFab.setFabDirection = setFabDirection;\n lxFab.setFabTriggerMethod = setFabTriggerMethod;\n lxFab.toggleState = toggleState;\n\n lxFab.isOpen = false;\n\n ////////////\n\n function setFabDirection(_direction)\n {\n lxFab.lxDirection = _direction;\n }\n\n function setFabTriggerMethod(_isTriggeredOnClick)\n {\n lxFab.lxTriggerOnClick = _isTriggeredOnClick;\n }\n\n function toggleState()\n {\n if (lxFab.lxTriggerOnClick)\n {\n lxFab.isOpen = !lxFab.isOpen;\n }\n }\n }\n\n function lxFabTrigger()\n {\n return {\n restrict: 'E',\n require: '^lxFab',\n templateUrl: 'fab-trigger.html',\n transclude: true,\n replace: true\n };\n }\n\n function lxFabActions()\n {\n return {\n restrict: 'E',\n require: '^lxFab',\n templateUrl: 'fab-actions.html',\n link: link,\n transclude: true,\n replace: true\n };\n\n function link(scope, element, attrs, ctrl)\n {\n scope.parentCtrl = ctrl;\n }\n }\n})();\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.file-input')\n .directive('lxFileInput', lxFileInput);\n\n function lxFileInput()\n {\n return {\n restrict: 'E',\n templateUrl: 'file-input.html',\n scope:\n {\n label: '@lxLabel',\n accept: '@lxAccept',\n callback: '&?lxCallback'\n },\n link: link,\n controller: LxFileInputController,\n controllerAs: 'lxFileInput',\n bindToController: true,\n replace: true\n };\n\n function link(scope, element, attrs, ctrl)\n {\n var input = element.find('input');\n\n input\n .on('change', ctrl.updateModel)\n .on('blur', function()\n {\n element.removeClass('input-file--is-focus');\n });\n\n scope.$on('$destroy', function()\n {\n input.off();\n });\n }\n }\n\n LxFileInputController.$inject = ['$element', '$scope', '$timeout'];\n\n function LxFileInputController($element, $scope, $timeout)\n {\n var lxFileInput = this;\n var input = $element.find('input');\n var timer;\n\n lxFileInput.updateModel = updateModel;\n\n $scope.$on('$destroy', function()\n {\n $timeout.cancel(timer);\n });\n\n ////////////\n\n function setFileName()\n {\n if (input.val())\n {\n lxFileInput.fileName = input.val().replace(/C:\\\\fakepath\\\\/i, '');\n\n $element.addClass('input-file--is-focus');\n $element.addClass('input-file--is-active');\n }\n else\n {\n lxFileInput.fileName = undefined;\n\n $element.removeClass('input-file--is-active');\n }\n\n input.val(undefined);\n }\n\n function updateModel()\n {\n if (angular.isDefined(lxFileInput.callback))\n {\n lxFileInput.callback(\n {\n newFile: input[0].files[0]\n });\n }\n\n timer = $timeout(setFileName);\n }\n }\n})();","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\n/////////////////////////////\n\nfunction GridDirective() {\n 'ngInject';\n\n function link(scope, el, attrs) {\n const defaultProps = {\n orientation: 'horizontal',\n wrap: 'nowrap',\n };\n\n if (!attrs.lxOrientation) {\n el.addClass(`${CSS_PREFIX}-grid--orientation-${defaultProps.orientation}`);\n }\n\n attrs.$observe('lxOrientation', (orientation) => {\n if (!orientation) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--orientation-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid--orientation-${orientation}`);\n });\n\n if (!attrs.lxWrap) {\n el.addClass(`${CSS_PREFIX}-grid--wrap-${defaultProps.wrap}`);\n }\n\n attrs.$observe('lxWrap', (wrap) => {\n if (!wrap) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--wrap-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid--wrap-${wrap}`);\n });\n\n attrs.$observe('lxHAlign', (hAlign) => {\n if (!hAlign) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--hAlign-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid--h-align-${hAlign}`);\n });\n\n attrs.$observe('lxVAlign', (vAlign) => {\n if (!vAlign) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--vAlign-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid--v-align-${vAlign}`);\n });\n\n attrs.$observe('lxGutter', (gutter) => {\n if (!gutter) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--gutter-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid--gutter-${gutter}`);\n });\n }\n\n return {\n link,\n replace: true,\n restrict: 'E',\n template: '
        ',\n transclude: true,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.grid').directive('lxGrid', GridDirective);\n\n/////////////////////////////\n\nexport { GridDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\n/////////////////////////////\n\nfunction GridItemDirective() {\n 'ngInject';\n\n function link(scope, el, attrs) {\n attrs.$observe('lxAlign', (align) => {\n if (!align) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--align-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid-item--align-${align}`);\n });\n\n attrs.$observe('lxOrder', (order) => {\n if (!order) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--order-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid-item--order-${order}`);\n });\n\n attrs.$observe('lxWidth', (width) => {\n if (!width) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*grid--width-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-grid-item--width-${width}`);\n });\n }\n\n return {\n link,\n replace: true,\n restrict: 'E',\n template: '
        ',\n transclude: true,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.grid').directive('lxGridItem', GridItemDirective);\n\n/////////////////////////////\n\nexport { GridItemDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\nimport template from '../views/icon.html';\n\n/////////////////////////////\n\nfunction IconDirective() {\n 'ngInject';\n\n function link(scope, el, attrs) {\n attrs.$observe('lxPath', (path) => {\n el.addClass(`${CSS_PREFIX}-icon--path`);\n el.find('path').attr('d', path);\n });\n\n attrs.$observe('lxId', (font) => {\n el.addClass(`${CSS_PREFIX}-icon--font mdi mdi-${font}`);\n });\n\n attrs.$observe('lxColor', (color) => {\n if (!color) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*icon--color-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-icon--color-${color}`);\n });\n\n attrs.$observe('lxColorVariant', (colorVariant) => {\n if (!colorVariant) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*icon--color-variant-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-icon--color-variant-${colorVariant}`);\n });\n\n attrs.$observe('lxSize', (size) => {\n if (!size) {\n return;\n }\n\n el.removeClass((index, className) => {\n return (className.match(/(?:\\S|-)*icon--size-\\S+/g) || []).join(' ');\n }).addClass(`${CSS_PREFIX}-icon--size-${size}`);\n });\n }\n\n return {\n link,\n replace: true,\n restrict: 'E',\n template,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.icon').directive('lxIcon', IconDirective);\n\n/////////////////////////////\n\nexport { IconDirective };\n","import { CSS_PREFIX, DOWN_KEY_CODE, TAB_KEY_CODE, UP_KEY_CODE } from '@lumx/core/js/constants';\n\nimport template from '../views/list.html';\n\n/////////////////////////////\n\nfunction ListController($element, $scope) {\n 'ngInject';\n\n // eslint-disable-next-line consistent-this, no-unused-vars\n const lx = this;\n\n /////////////////////////////\n // //\n // Public attributes //\n // //\n /////////////////////////////\n\n /**\n * The active item index useful when navigating with keybord arrow keys.\n *\n * @type {number}\n */\n lx.activeItemIndex = -1;\n\n /////////////////////////////\n // //\n // Private functions //\n // //\n /////////////////////////////\n\n /**\n * Increase active choice index on key down press.\n */\n function _nextItemOnKeyDown() {\n let nextItem = $element.find(`.${CSS_PREFIX}-list-item`).eq(lx.activeItemIndex + 1);\n\n if (nextItem.length === 0) {\n lx.activeItemIndex = 0;\n\n nextItem = $element\n .find(`.${CSS_PREFIX}-list-item`)\n .eq(lx.activeItemIndex)\n .focus();\n } else {\n lx.activeItemIndex++;\n }\n\n nextItem.focus();\n }\n\n /**\n * Decrease active choice index on key up press.\n */\n function _previousItemOnKeyUp() {\n let previousItem = $element.find(`.${CSS_PREFIX}-list-item`).eq(lx.activeItemIndex - 1);\n\n if (previousItem.length === 0) {\n lx.activeItemIndex = $element.find(`.${CSS_PREFIX}-list-item`).length - 1;\n\n previousItem = $element\n .find(`.${CSS_PREFIX}-list-item`)\n .eq(lx.activeItemIndex)\n .focus();\n } else {\n lx.activeItemIndex--;\n }\n\n previousItem.focus();\n }\n\n /**\n * Handle key events on list focus.\n *\n * @param {Event} evt The key event.\n */\n function _onKeyPress(evt) {\n if (!lx.isClickable) {\n return;\n }\n\n if (evt.keyCode === DOWN_KEY_CODE) {\n _nextItemOnKeyDown();\n $scope.$apply();\n\n evt.preventDefault();\n evt.stopPropagation();\n } else if (evt.keyCode === UP_KEY_CODE) {\n _previousItemOnKeyUp();\n $scope.$apply();\n\n evt.preventDefault();\n evt.stopPropagation();\n } else if (evt.keyCode === TAB_KEY_CODE) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n }\n\n /**\n * Reset active item index.\n */\n function _resetActiveItemIndex() {\n lx.activeItemIndex = -1;\n }\n\n /////////////////////////////\n // //\n // Events //\n // //\n /////////////////////////////\n\n /**\n * Navigate through items on up and down arrow key press.\n */\n $element.on('keydown keypress', _onKeyPress).on('focus', _resetActiveItemIndex);\n\n /**\n * Unbind event listeners on destroy.\n */\n $scope.$on('$destroy', () => {\n $element.off('keydown keypress', _onKeyPress).off('focus', _resetActiveItemIndex);\n });\n}\n\n/////////////////////////////\n\nfunction ListDirective() {\n return {\n bindToController: true,\n controller: ListController,\n controllerAs: 'lx',\n replace: true,\n restrict: 'E',\n scope: {\n isClickable: '=?lxIsClickable',\n },\n template,\n transclude: true,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.list').directive('lxList', ListDirective);\n\n/////////////////////////////\n\nexport { ListDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\n/////////////////////////////\n\nfunction ListDividerDirective() {\n 'ngInject';\n\n return {\n replace: true,\n restrict: 'E',\n template: `
      • `,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.list').directive('lxListDivider', ListDividerDirective);\n\n/////////////////////////////\n\nexport { ListDividerDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\nimport template from '../views/list-item.html';\n\n/////////////////////////////\n\nfunction ListItemController($element, $scope) {\n 'ngInject';\n\n // eslint-disable-next-line consistent-this\n const lx = this;\n\n /////////////////////////////\n // //\n // Public attributes //\n // //\n /////////////////////////////\n\n /**\n * Whether the directive has after slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasAfter = false;\n\n /**\n * Whether the directive has before slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasBefore = false;\n\n /**\n * Whether the directive has content slot filled or not.\n *\n * @type {boolean}\n */\n lx.hasContent = false;\n\n /**\n * The parent controller (list).\n *\n * @type {Object}\n */\n lx.parentController = undefined;\n\n /////////////////////////////\n // //\n // Private functions //\n // //\n /////////////////////////////\n\n /**\n * Register item index as active index to the list.\n */\n function _registerIndex() {\n if (angular.isUndefined(lx.parentController)) {\n return;\n }\n\n lx.parentController.activeItemIndex = $element.index(`.${CSS_PREFIX}-list-item`);\n }\n\n /////////////////////////////\n // //\n // Events //\n // //\n /////////////////////////////\n\n /**\n * Register item index as active index to the list on focus.\n */\n $element.on('focus', _registerIndex);\n\n /**\n * Unbind event listener on destroy.\n */\n $scope.$on('$destroy', () => {\n $element.off('focus', _registerIndex);\n });\n}\n\n/////////////////////////////\n\nfunction ListItemDirective() {\n 'ngInject';\n\n function link(scope, el, attrs, ctrls, transclude) {\n if (transclude.isSlotFilled('before')) {\n ctrls[0].hasBefore = true;\n }\n\n if (transclude.isSlotFilled('content')) {\n ctrls[0].hasContent = true;\n }\n\n if (transclude.isSlotFilled('after')) {\n ctrls[0].hasAfter = true;\n }\n\n if (angular.isDefined(ctrls[1]) && ctrls[1]) {\n // eslint-disable-next-line prefer-destructuring\n ctrls[0].parentController = ctrls[1];\n }\n }\n\n return {\n bindToController: true,\n controller: ListItemController,\n controllerAs: 'lx',\n link,\n replace: true,\n require: ['lxListItem', '?^lxList'],\n restrict: 'E',\n scope: {\n isSelected: '=?lxIsSelected',\n size: '@?lxSize',\n },\n template,\n transclude: {\n after: '?lxListItemAfter',\n before: '?lxListItemBefore',\n content: '?lxListItemContent',\n },\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.list').directive('lxListItem', ListItemDirective);\n\n/////////////////////////////\n\nexport { ListItemDirective };\n","import { CSS_PREFIX } from '@lumx/core/js/constants';\n\n/////////////////////////////\n\nfunction ListSubheaderDirective() {\n 'ngInject';\n\n return {\n replace: true,\n restrict: 'E',\n template: `
      • `,\n transclude: true,\n };\n}\n\n/////////////////////////////\n\nangular.module('lumx.list').directive('lxListSubheader', ListSubheaderDirective);\n\n/////////////////////////////\n\nexport { ListSubheaderDirective };\n","(function()\n{\n 'use strict';\n\n angular\n .module('lumx.notification')\n .service('LxNotificationService', LxNotificationService);\n\n LxNotificationService.$inject = ['$injector', '$rootScope', '$timeout', 'LxDepthService', 'LxEventSchedulerService'];\n\n function LxNotificationService($injector, $rootScope, $timeout, LxDepthService, LxEventSchedulerService)\n {\n var service = this;\n var dialogFilter;\n var dialog;\n var idEventScheduler;\n var notificationList = [];\n var actionClicked = false;\n\n service.alert = showAlertDialog;\n service.confirm = showConfirmDialog;\n service.error = notifyError;\n service.info = notifyInfo;\n service.notify = notify;\n service.success = notifySuccess;\n service.warning = notifyWarning;\n service.getNotificationList = getNotificationList;\n service.reComputeElementsPosition = reComputeElementsPosition;\n service.deleteNotification = deleteNotification;\n service.buildNotification = buildNotification;\n\n ////////////\n\n //\n // NOTIFICATION\n //\n\n function getElementHeight(_elem)\n {\n return parseFloat(window.getComputedStyle(_elem, null).height);\n }\n\n function moveNotificationUp()\n {\n var newNotifIndex = notificationList.length - 1;\n notificationList[newNotifIndex].height = getElementHeight(notificationList[newNotifIndex].elem[0]);\n\n var upOffset = 0;\n\n for (var idx = newNotifIndex; idx >= 0; idx--)\n {\n if (notificationList.length > 1 && idx !== newNotifIndex)\n {\n upOffset = 24 + notificationList[newNotifIndex].height;\n\n notificationList[idx].margin += upOffset;\n notificationList[idx].elem.css('marginBottom', notificationList[idx].margin + 'px');\n }\n }\n }\n\n function deleteNotification(_notification, _callback)\n {\n _callback = (!angular.isFunction(_callback)) ? angular.noop : _callback;\n\n var notifIndex = notificationList.indexOf(_notification);\n\n var dnOffset = angular.isDefined(notificationList[notifIndex]) ? 24 + notificationList[notifIndex].height : 24;\n\n for (var idx = 0; idx < notifIndex; idx++)\n {\n if (notificationList.length > 1)\n {\n notificationList[idx].margin -= dnOffset;\n notificationList[idx].elem.css('marginBottom', notificationList[idx].margin + 'px');\n }\n }\n\n _notification.elem.removeClass('notification--is-shown');\n\n $timeout(function()\n {\n _notification.elem.remove();\n\n // Find index again because notificationList may have changed\n notifIndex = notificationList.indexOf(_notification);\n\n if (notifIndex != -1)\n {\n notificationList.splice(notifIndex, 1);\n }\n\n _callback(actionClicked);\n actionClicked = false;\n }, 400);\n }\n\n /**\n * Compute the notification list element new position.\n * Usefull when the height change programmatically and you need other notifications to fit.\n */\n function reComputeElementsPosition()\n {\n var baseOffset = 0;\n\n for (var idx = notificationList.length -1; idx >= 0; idx--)\n {\n notificationList[idx].height = getElementHeight(notificationList[idx].elem[0]);\n notificationList[idx].margin = baseOffset;\n\n notificationList[idx].elem.css('marginBottom', notificationList[idx].margin + 'px');\n\n baseOffset += notificationList[idx].height + 24;\n }\n }\n\n function buildNotification(_text, _icon, _color, _action)\n {\n var notification = angular.element('
        ',\n {\n class: 'notification'\n });\n var notificationText = angular.element('',\n {\n class: 'notification__content',\n html: _text\n });\n\n if (angular.isDefined(_icon))\n {\n var notificationIcon = angular.element('',\n {\n class: 'notification__icon mdi mdi-' + _icon\n });\n\n notification\n .addClass('notification--has-icon')\n .append(notificationIcon);\n }\n\n if (angular.isDefined(_color))\n {\n notification.addClass('notification--' + _color);\n }\n\n notification.append(notificationText);\n\n if (angular.isDefined(_action))\n {\n var $compile = $injector.get('$compile');\n var notificationAction = angular.element('