@materializecss/materialize 2.0.1-alpha → 2.0.3-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Gruntfile.js +5 -2
- package/dist/css/materialize.css +1510 -288
- package/dist/css/materialize.min.css +2 -2
- package/dist/js/materialize.js +2782 -2688
- package/dist/js/materialize.min.js +2 -8967
- package/dist/js/materialize.min.js.map +1 -1
- package/dist/src/autocomplete.d.ts +143 -0
- package/dist/src/autocomplete.d.ts.map +1 -0
- package/dist/src/bounding.d.ts +7 -0
- package/dist/src/bounding.d.ts.map +1 -0
- package/dist/src/buttons.d.ts +65 -0
- package/dist/src/buttons.d.ts.map +1 -0
- package/dist/src/cards.d.ts +4 -0
- package/dist/src/cards.d.ts.map +1 -0
- package/dist/src/carousel.d.ts +131 -0
- package/dist/src/carousel.d.ts.map +1 -0
- package/dist/src/characterCounter.d.ts +37 -0
- package/dist/src/characterCounter.d.ts.map +1 -0
- package/dist/src/chips.d.ts +131 -0
- package/dist/src/chips.d.ts.map +1 -0
- package/dist/src/collapsible.d.ts +74 -0
- package/dist/src/collapsible.d.ts.map +1 -0
- package/dist/src/component.d.ts +74 -0
- package/dist/src/component.d.ts.map +1 -0
- package/dist/src/datepicker.d.ts +248 -0
- package/dist/src/datepicker.d.ts.map +1 -0
- package/dist/src/dropdown.d.ts +148 -0
- package/dist/src/dropdown.d.ts.map +1 -0
- package/dist/src/edges.d.ts +7 -0
- package/dist/src/edges.d.ts.map +1 -0
- package/dist/src/forms.d.ts +12 -0
- package/dist/src/forms.d.ts.map +1 -0
- package/dist/src/global.d.ts +60 -0
- package/dist/src/global.d.ts.map +1 -0
- package/dist/src/index.d.ts +27 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/materialbox.d.ts +92 -0
- package/dist/src/materialbox.d.ts.map +1 -0
- package/dist/src/modal.d.ts +119 -0
- package/dist/src/modal.d.ts.map +1 -0
- package/dist/src/parallax.d.ts +40 -0
- package/dist/src/parallax.d.ts.map +1 -0
- package/dist/src/pushpin.d.ts +52 -0
- package/dist/src/pushpin.d.ts.map +1 -0
- package/dist/src/range.d.ts +41 -0
- package/dist/src/range.d.ts.map +1 -0
- package/dist/src/scrollspy.d.ts +62 -0
- package/dist/src/scrollspy.d.ts.map +1 -0
- package/dist/src/select.d.ts +77 -0
- package/dist/src/select.d.ts.map +1 -0
- package/dist/src/sidenav.d.ts +122 -0
- package/dist/src/sidenav.d.ts.map +1 -0
- package/dist/src/slider.d.ts +103 -0
- package/dist/src/slider.d.ts.map +1 -0
- package/dist/src/tabs.d.ts +80 -0
- package/dist/src/tabs.d.ts.map +1 -0
- package/dist/src/tapTarget.d.ts +59 -0
- package/dist/src/tapTarget.d.ts.map +1 -0
- package/dist/src/timepicker.d.ts +208 -0
- package/dist/src/timepicker.d.ts.map +1 -0
- package/dist/src/toasts.d.ts +90 -0
- package/dist/src/toasts.d.ts.map +1 -0
- package/dist/src/tooltip.d.ts +112 -0
- package/dist/src/tooltip.d.ts.map +1 -0
- package/dist/src/utils.d.ts +97 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/waves.d.ts +16 -0
- package/dist/src/waves.d.ts.map +1 -0
- package/package.json +4 -1
- package/sass/components/_cards.scss +1 -1
- package/sass/components/_collapsible.scss +0 -41
- package/sass/components/_global.scss +53 -2
- package/sass/components/_grid.scss +28 -47
- package/sass/components/_icons-material-design.scss +2 -1
- package/sass/components/_navbar.scss +30 -27
- package/sass/components/_pulse.scss +1 -0
- package/sass/components/_sidenav.scss +63 -45
- package/sass/components/_theme_variables.scss +29 -49
- package/sass/components/_typography.scss +2 -2
- package/sass/components/_variables.scss +2 -0
- package/sass/components/colors.module.scss +180 -0
- package/sass/components/forms/_input-fields.scss +4 -10
- package/sass/components/theme.dark.module.scss +32 -0
- package/sass/components/theme.light.module.scss +32 -0
- package/sass/components/tokens.module.scss +272 -0
- package/sass/components/typography.module.scss +150 -0
- package/sass/materialize.scss +6 -4
- package/src/autocomplete.ts +188 -94
- package/src/buttons.ts +225 -260
- package/src/cards.ts +5 -6
- package/src/carousel.ts +611 -542
- package/src/characterCounter.ts +50 -21
- package/src/chips.ts +152 -63
- package/src/collapsible.ts +97 -32
- package/src/component.ts +99 -10
- package/src/datepicker.ts +905 -726
- package/src/dropdown.ts +573 -484
- package/src/edges.ts +4 -4
- package/src/forms.ts +36 -24
- package/src/global.ts +57 -328
- package/src/index.ts +26 -0
- package/src/materialbox.ts +354 -298
- package/src/modal.ts +296 -211
- package/src/parallax.ts +129 -105
- package/src/pushpin.ts +148 -103
- package/src/range.ts +166 -150
- package/src/scrollspy.ts +214 -174
- package/src/select.ts +434 -398
- package/src/sidenav.ts +447 -381
- package/src/slider.ts +421 -362
- package/src/tabs.ts +276 -222
- package/src/tapTarget.ts +246 -213
- package/src/timepicker.ts +738 -614
- package/src/toasts.ts +254 -230
- package/src/tooltip.ts +315 -252
- package/src/utils.ts +271 -0
- package/src/waves.ts +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialize.min.js","mappings":"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AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,iBAAiB;AACjB,mBAAmB;AACnB,mBAAmB;AACnB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA,eAAe;AACf;;AAEA;AACA,6EAA6E;AAC7E,gFAAgF;AAChF;;AAEA;;AAEA;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gEAAgE;AAChE;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oGAAoG;AACpG,4DAA4D;AAC5D,uEAAuE;AACvE,0BAA0B;AAC1B;;AAEA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,SAAS,4BAA4B;AACrC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,yBAAyB;AACzB;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK,qDAAqD;AAC1D,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,iCAAiC;AACjC,yDAAyD;AACzD,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gEAAgE,oCAAoC;AACpG;;AAEA;AACA;AACA;AACA,YAAY,sDAAsD;AAClE,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,MAAM;AACN;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA,6BAA6B;AAC7B;AACA,gCAAgC;AAChC;AACA,GAAG,qBAAqB,mCAAmC;AAC3D;;;AAGA;AACA,8EAA8E,0BAA0B,mBAAmB,mBAAmB;AAC9I,2BAA2B,wBAAwB,aAAa,WAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,UAAU;AACV;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,kBAAkB,0BAA0B;AAC5C;AACA;;AAEA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,uCAAuC,yCAAyC;AAChF,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA,4BAA4B,wBAAwB;AACpD,kCAAkC,8BAA8B;AAChE,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA,uDAAuD,mCAAmC;AAC1F;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG,mBAAmB,oBAAoB;AAC1C;;AAEA;;AAEA;AACA;AACA,sCAAsC;AACtC;AACA,wFAAwF,2CAA2C;AACnI,qFAAqF,wCAAwC;AAC7H,2GAA2G,2DAA2D;AACtK;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA4C;;AAE5C;AACA;AACA;AACA,MAAM,OAAO;AACb;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA,sEAAsE,4BAA4B;AAClG;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4CAA4C;AACpF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA,sBAAsB,oBAAoB,OAAO;AACjD,MAAM;AACN,qCAAqC,MAAM,IAAI;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,2CAA2C,2BAA2B;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI,IAAI;AACzC,6GAA6G;AAC7G;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B;AAC5B,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,2BAA2B;;AAE3B;;AAEA;;AAEA;;AAEA;AACA,kCAAkC,IAAI;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,IAAI;AACpC;AACA;AACA;AACA,6DAA6D;AAC7D;AACA,gDAAgD;AAChD;;AAEA;AACA;AACA,uCAAuC,IAAI;AAC3C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","sources":["webpack://@materializecss/materialize/webpack/universalModuleDefinition","webpack://@materializecss/materialize/./node_modules/animejs/lib/anime.es.js","webpack://@materializecss/materialize/./src/autocomplete.ts","webpack://@materializecss/materialize/./src/buttons.ts","webpack://@materializecss/materialize/./src/cards.ts","webpack://@materializecss/materialize/./src/carousel.ts","webpack://@materializecss/materialize/./src/characterCounter.ts","webpack://@materializecss/materialize/./src/chips.ts","webpack://@materializecss/materialize/./src/collapsible.ts","webpack://@materializecss/materialize/./src/component.ts","webpack://@materializecss/materialize/./src/datepicker.ts","webpack://@materializecss/materialize/./src/dropdown.ts","webpack://@materializecss/materialize/./src/forms.ts","webpack://@materializecss/materialize/./src/global.ts","webpack://@materializecss/materialize/./src/materialbox.ts","webpack://@materializecss/materialize/./src/modal.ts","webpack://@materializecss/materialize/./src/parallax.ts","webpack://@materializecss/materialize/./src/pushpin.ts","webpack://@materializecss/materialize/./src/range.ts","webpack://@materializecss/materialize/./src/scrollspy.ts","webpack://@materializecss/materialize/./src/select.ts","webpack://@materializecss/materialize/./src/sidenav.ts","webpack://@materializecss/materialize/./src/slider.ts","webpack://@materializecss/materialize/./src/tabs.ts","webpack://@materializecss/materialize/./src/tapTarget.ts","webpack://@materializecss/materialize/./src/timepicker.ts","webpack://@materializecss/materialize/./src/toasts.ts","webpack://@materializecss/materialize/./src/tooltip.ts","webpack://@materializecss/materialize/./src/waves.ts","webpack://@materializecss/materialize/webpack/bootstrap","webpack://@materializecss/materialize/webpack/runtime/define property getters","webpack://@materializecss/materialize/webpack/runtime/hasOwnProperty shorthand","webpack://@materializecss/materialize/webpack/runtime/make namespace object","webpack://@materializecss/materialize/webpack/before-startup","webpack://@materializecss/materialize/webpack/startup","webpack://@materializecss/materialize/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, () => {\nreturn ","/*\n * anime.js v3.2.1\n * (c) 2020 Julian Garnier\n * Released under the MIT license\n * animejs.com\n */\n\n// Defaults\n\nvar defaultInstanceSettings = {\n update: null,\n begin: null,\n loopBegin: null,\n changeBegin: null,\n change: null,\n changeComplete: null,\n loopComplete: null,\n complete: null,\n loop: 1,\n direction: 'normal',\n autoplay: true,\n timelineOffset: 0\n};\n\nvar defaultTweenSettings = {\n duration: 1000,\n delay: 0,\n endDelay: 0,\n easing: 'easeOutElastic(1, .5)',\n round: 0\n};\n\nvar validTransforms = ['translateX', 'translateY', 'translateZ', 'rotate', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'perspective', 'matrix', 'matrix3d'];\n\n// Caching\n\nvar cache = {\n CSS: {},\n springs: {}\n};\n\n// Utils\n\nfunction minMax(val, min, max) {\n return Math.min(Math.max(val, min), max);\n}\n\nfunction stringContains(str, text) {\n return str.indexOf(text) > -1;\n}\n\nfunction applyArguments(func, args) {\n return func.apply(null, args);\n}\n\nvar is = {\n arr: function (a) { return Array.isArray(a); },\n obj: function (a) { return stringContains(Object.prototype.toString.call(a), 'Object'); },\n pth: function (a) { return is.obj(a) && a.hasOwnProperty('totalLength'); },\n svg: function (a) { return a instanceof SVGElement; },\n inp: function (a) { return a instanceof HTMLInputElement; },\n dom: function (a) { return a.nodeType || is.svg(a); },\n str: function (a) { return typeof a === 'string'; },\n fnc: function (a) { return typeof a === 'function'; },\n und: function (a) { return typeof a === 'undefined'; },\n nil: function (a) { return is.und(a) || a === null; },\n hex: function (a) { return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a); },\n rgb: function (a) { return /^rgb/.test(a); },\n hsl: function (a) { return /^hsl/.test(a); },\n col: function (a) { return (is.hex(a) || is.rgb(a) || is.hsl(a)); },\n key: function (a) { return !defaultInstanceSettings.hasOwnProperty(a) && !defaultTweenSettings.hasOwnProperty(a) && a !== 'targets' && a !== 'keyframes'; },\n};\n\n// Easings\n\nfunction parseEasingParameters(string) {\n var match = /\\(([^)]+)\\)/.exec(string);\n return match ? match[1].split(',').map(function (p) { return parseFloat(p); }) : [];\n}\n\n// Spring solver inspired by Webkit Copyright © 2016 Apple Inc. All rights reserved. https://webkit.org/demos/spring/spring.js\n\nfunction spring(string, duration) {\n\n var params = parseEasingParameters(string);\n var mass = minMax(is.und(params[0]) ? 1 : params[0], .1, 100);\n var stiffness = minMax(is.und(params[1]) ? 100 : params[1], .1, 100);\n var damping = minMax(is.und(params[2]) ? 10 : params[2], .1, 100);\n var velocity = minMax(is.und(params[3]) ? 0 : params[3], .1, 100);\n var w0 = Math.sqrt(stiffness / mass);\n var zeta = damping / (2 * Math.sqrt(stiffness * mass));\n var wd = zeta < 1 ? w0 * Math.sqrt(1 - zeta * zeta) : 0;\n var a = 1;\n var b = zeta < 1 ? (zeta * w0 + -velocity) / wd : -velocity + w0;\n\n function solver(t) {\n var progress = duration ? (duration * t) / 1000 : t;\n if (zeta < 1) {\n progress = Math.exp(-progress * zeta * w0) * (a * Math.cos(wd * progress) + b * Math.sin(wd * progress));\n } else {\n progress = (a + b * progress) * Math.exp(-progress * w0);\n }\n if (t === 0 || t === 1) { return t; }\n return 1 - progress;\n }\n\n function getDuration() {\n var cached = cache.springs[string];\n if (cached) { return cached; }\n var frame = 1/6;\n var elapsed = 0;\n var rest = 0;\n while(true) {\n elapsed += frame;\n if (solver(elapsed) === 1) {\n rest++;\n if (rest >= 16) { break; }\n } else {\n rest = 0;\n }\n }\n var duration = elapsed * frame * 1000;\n cache.springs[string] = duration;\n return duration;\n }\n\n return duration ? solver : getDuration;\n\n}\n\n// Basic steps easing implementation https://developer.mozilla.org/fr/docs/Web/CSS/transition-timing-function\n\nfunction steps(steps) {\n if ( steps === void 0 ) steps = 10;\n\n return function (t) { return Math.ceil((minMax(t, 0.000001, 1)) * steps) * (1 / steps); };\n}\n\n// BezierEasing https://github.com/gre/bezier-easing\n\nvar bezier = (function () {\n\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\n function A(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1 }\n function B(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1 }\n function C(aA1) { return 3.0 * aA1 }\n\n function calcBezier(aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT }\n function getSlope(aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1) }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) { aB = currentT; } else { aA = currentT; }\n } while (Math.abs(currentX) > 0.0000001 && ++i < 10);\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < 4; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) { return aGuessT; }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n\n function bezier(mX1, mY1, mX2, mY2) {\n\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) { return; }\n var sampleValues = new Float32Array(kSplineTableSize);\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n }\n\n function getTForX(aX) {\n\n var intervalStart = 0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample;\n\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= 0.001) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n\n }\n\n return function (x) {\n if (mX1 === mY1 && mX2 === mY2) { return x; }\n if (x === 0 || x === 1) { return x; }\n return calcBezier(getTForX(x), mY1, mY2);\n }\n\n }\n\n return bezier;\n\n})();\n\nvar penner = (function () {\n\n // Based on jQuery UI's implemenation of easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\n var eases = { linear: function () { return function (t) { return t; }; } };\n\n var functionEasings = {\n Sine: function () { return function (t) { return 1 - Math.cos(t * Math.PI / 2); }; },\n Circ: function () { return function (t) { return 1 - Math.sqrt(1 - t * t); }; },\n Back: function () { return function (t) { return t * t * (3 * t - 2); }; },\n Bounce: function () { return function (t) {\n var pow2, b = 4;\n while (t < (( pow2 = Math.pow(2, --b)) - 1) / 11) {}\n return 1 / Math.pow(4, 3 - b) - 7.5625 * Math.pow(( pow2 * 3 - 2 ) / 22 - t, 2)\n }; },\n Elastic: function (amplitude, period) {\n if ( amplitude === void 0 ) amplitude = 1;\n if ( period === void 0 ) period = .5;\n\n var a = minMax(amplitude, 1, 10);\n var p = minMax(period, .1, 2);\n return function (t) {\n return (t === 0 || t === 1) ? t : \n -a * Math.pow(2, 10 * (t - 1)) * Math.sin((((t - 1) - (p / (Math.PI * 2) * Math.asin(1 / a))) * (Math.PI * 2)) / p);\n }\n }\n };\n\n var baseEasings = ['Quad', 'Cubic', 'Quart', 'Quint', 'Expo'];\n\n baseEasings.forEach(function (name, i) {\n functionEasings[name] = function () { return function (t) { return Math.pow(t, i + 2); }; };\n });\n\n Object.keys(functionEasings).forEach(function (name) {\n var easeIn = functionEasings[name];\n eases['easeIn' + name] = easeIn;\n eases['easeOut' + name] = function (a, b) { return function (t) { return 1 - easeIn(a, b)(1 - t); }; };\n eases['easeInOut' + name] = function (a, b) { return function (t) { return t < 0.5 ? easeIn(a, b)(t * 2) / 2 : \n 1 - easeIn(a, b)(t * -2 + 2) / 2; }; };\n eases['easeOutIn' + name] = function (a, b) { return function (t) { return t < 0.5 ? (1 - easeIn(a, b)(1 - t * 2)) / 2 : \n (easeIn(a, b)(t * 2 - 1) + 1) / 2; }; };\n });\n\n return eases;\n\n})();\n\nfunction parseEasings(easing, duration) {\n if (is.fnc(easing)) { return easing; }\n var name = easing.split('(')[0];\n var ease = penner[name];\n var args = parseEasingParameters(easing);\n switch (name) {\n case 'spring' : return spring(easing, duration);\n case 'cubicBezier' : return applyArguments(bezier, args);\n case 'steps' : return applyArguments(steps, args);\n default : return applyArguments(ease, args);\n }\n}\n\n// Strings\n\nfunction selectString(str) {\n try {\n var nodes = document.querySelectorAll(str);\n return nodes;\n } catch(e) {\n return;\n }\n}\n\n// Arrays\n\nfunction filterArray(arr, callback) {\n var len = arr.length;\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n var result = [];\n for (var i = 0; i < len; i++) {\n if (i in arr) {\n var val = arr[i];\n if (callback.call(thisArg, val, i, arr)) {\n result.push(val);\n }\n }\n }\n return result;\n}\n\nfunction flattenArray(arr) {\n return arr.reduce(function (a, b) { return a.concat(is.arr(b) ? flattenArray(b) : b); }, []);\n}\n\nfunction toArray(o) {\n if (is.arr(o)) { return o; }\n if (is.str(o)) { o = selectString(o) || o; }\n if (o instanceof NodeList || o instanceof HTMLCollection) { return [].slice.call(o); }\n return [o];\n}\n\nfunction arrayContains(arr, val) {\n return arr.some(function (a) { return a === val; });\n}\n\n// Objects\n\nfunction cloneObject(o) {\n var clone = {};\n for (var p in o) { clone[p] = o[p]; }\n return clone;\n}\n\nfunction replaceObjectProps(o1, o2) {\n var o = cloneObject(o1);\n for (var p in o1) { o[p] = o2.hasOwnProperty(p) ? o2[p] : o1[p]; }\n return o;\n}\n\nfunction mergeObjects(o1, o2) {\n var o = cloneObject(o1);\n for (var p in o2) { o[p] = is.und(o1[p]) ? o2[p] : o1[p]; }\n return o;\n}\n\n// Colors\n\nfunction rgbToRgba(rgbValue) {\n var rgb = /rgb\\((\\d+,\\s*[\\d]+,\\s*[\\d]+)\\)/g.exec(rgbValue);\n return rgb ? (\"rgba(\" + (rgb[1]) + \",1)\") : rgbValue;\n}\n\nfunction hexToRgba(hexValue) {\n var rgx = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n var hex = hexValue.replace(rgx, function (m, r, g, b) { return r + r + g + g + b + b; } );\n var rgb = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n var r = parseInt(rgb[1], 16);\n var g = parseInt(rgb[2], 16);\n var b = parseInt(rgb[3], 16);\n return (\"rgba(\" + r + \",\" + g + \",\" + b + \",1)\");\n}\n\nfunction hslToRgba(hslValue) {\n var hsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.exec(hslValue) || /hsla\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*([\\d.]+)\\)/g.exec(hslValue);\n var h = parseInt(hsl[1], 10) / 360;\n var s = parseInt(hsl[2], 10) / 100;\n var l = parseInt(hsl[3], 10) / 100;\n var a = hsl[4] || 1;\n function hue2rgb(p, q, t) {\n if (t < 0) { t += 1; }\n if (t > 1) { t -= 1; }\n if (t < 1/6) { return p + (q - p) * 6 * t; }\n if (t < 1/2) { return q; }\n if (t < 2/3) { return p + (q - p) * (2/3 - t) * 6; }\n return p;\n }\n var r, g, b;\n if (s == 0) {\n r = g = b = l;\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n return (\"rgba(\" + (r * 255) + \",\" + (g * 255) + \",\" + (b * 255) + \",\" + a + \")\");\n}\n\nfunction colorToRgb(val) {\n if (is.rgb(val)) { return rgbToRgba(val); }\n if (is.hex(val)) { return hexToRgba(val); }\n if (is.hsl(val)) { return hslToRgba(val); }\n}\n\n// Units\n\nfunction getUnit(val) {\n var split = /[+-]?\\d*\\.?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(val);\n if (split) { return split[1]; }\n}\n\nfunction getTransformUnit(propName) {\n if (stringContains(propName, 'translate') || propName === 'perspective') { return 'px'; }\n if (stringContains(propName, 'rotate') || stringContains(propName, 'skew')) { return 'deg'; }\n}\n\n// Values\n\nfunction getFunctionValue(val, animatable) {\n if (!is.fnc(val)) { return val; }\n return val(animatable.target, animatable.id, animatable.total);\n}\n\nfunction getAttribute(el, prop) {\n return el.getAttribute(prop);\n}\n\nfunction convertPxToUnit(el, value, unit) {\n var valueUnit = getUnit(value);\n if (arrayContains([unit, 'deg', 'rad', 'turn'], valueUnit)) { return value; }\n var cached = cache.CSS[value + unit];\n if (!is.und(cached)) { return cached; }\n var baseline = 100;\n var tempEl = document.createElement(el.tagName);\n var parentEl = (el.parentNode && (el.parentNode !== document)) ? el.parentNode : document.body;\n parentEl.appendChild(tempEl);\n tempEl.style.position = 'absolute';\n tempEl.style.width = baseline + unit;\n var factor = baseline / tempEl.offsetWidth;\n parentEl.removeChild(tempEl);\n var convertedUnit = factor * parseFloat(value);\n cache.CSS[value + unit] = convertedUnit;\n return convertedUnit;\n}\n\nfunction getCSSValue(el, prop, unit) {\n if (prop in el.style) {\n var uppercasePropName = prop.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n var value = el.style[prop] || getComputedStyle(el).getPropertyValue(uppercasePropName) || '0';\n return unit ? convertPxToUnit(el, value, unit) : value;\n }\n}\n\nfunction getAnimationType(el, prop) {\n if (is.dom(el) && !is.inp(el) && (!is.nil(getAttribute(el, prop)) || (is.svg(el) && el[prop]))) { return 'attribute'; }\n if (is.dom(el) && arrayContains(validTransforms, prop)) { return 'transform'; }\n if (is.dom(el) && (prop !== 'transform' && getCSSValue(el, prop))) { return 'css'; }\n if (el[prop] != null) { return 'object'; }\n}\n\nfunction getElementTransforms(el) {\n if (!is.dom(el)) { return; }\n var str = el.style.transform || '';\n var reg = /(\\w+)\\(([^)]*)\\)/g;\n var transforms = new Map();\n var m; while (m = reg.exec(str)) { transforms.set(m[1], m[2]); }\n return transforms;\n}\n\nfunction getTransformValue(el, propName, animatable, unit) {\n var defaultVal = stringContains(propName, 'scale') ? 1 : 0 + getTransformUnit(propName);\n var value = getElementTransforms(el).get(propName) || defaultVal;\n if (animatable) {\n animatable.transforms.list.set(propName, value);\n animatable.transforms['last'] = propName;\n }\n return unit ? convertPxToUnit(el, value, unit) : value;\n}\n\nfunction getOriginalTargetValue(target, propName, unit, animatable) {\n switch (getAnimationType(target, propName)) {\n case 'transform': return getTransformValue(target, propName, animatable, unit);\n case 'css': return getCSSValue(target, propName, unit);\n case 'attribute': return getAttribute(target, propName);\n default: return target[propName] || 0;\n }\n}\n\nfunction getRelativeValue(to, from) {\n var operator = /^(\\*=|\\+=|-=)/.exec(to);\n if (!operator) { return to; }\n var u = getUnit(to) || 0;\n var x = parseFloat(from);\n var y = parseFloat(to.replace(operator[0], ''));\n switch (operator[0][0]) {\n case '+': return x + y + u;\n case '-': return x - y + u;\n case '*': return x * y + u;\n }\n}\n\nfunction validateValue(val, unit) {\n if (is.col(val)) { return colorToRgb(val); }\n if (/\\s/g.test(val)) { return val; }\n var originalUnit = getUnit(val);\n var unitLess = originalUnit ? val.substr(0, val.length - originalUnit.length) : val;\n if (unit) { return unitLess + unit; }\n return unitLess;\n}\n\n// getTotalLength() equivalent for circle, rect, polyline, polygon and line shapes\n// adapted from https://gist.github.com/SebLambla/3e0550c496c236709744\n\nfunction getDistance(p1, p2) {\n return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n}\n\nfunction getCircleLength(el) {\n return Math.PI * 2 * getAttribute(el, 'r');\n}\n\nfunction getRectLength(el) {\n return (getAttribute(el, 'width') * 2) + (getAttribute(el, 'height') * 2);\n}\n\nfunction getLineLength(el) {\n return getDistance(\n {x: getAttribute(el, 'x1'), y: getAttribute(el, 'y1')}, \n {x: getAttribute(el, 'x2'), y: getAttribute(el, 'y2')}\n );\n}\n\nfunction getPolylineLength(el) {\n var points = el.points;\n var totalLength = 0;\n var previousPos;\n for (var i = 0 ; i < points.numberOfItems; i++) {\n var currentPos = points.getItem(i);\n if (i > 0) { totalLength += getDistance(previousPos, currentPos); }\n previousPos = currentPos;\n }\n return totalLength;\n}\n\nfunction getPolygonLength(el) {\n var points = el.points;\n return getPolylineLength(el) + getDistance(points.getItem(points.numberOfItems - 1), points.getItem(0));\n}\n\n// Path animation\n\nfunction getTotalLength(el) {\n if (el.getTotalLength) { return el.getTotalLength(); }\n switch(el.tagName.toLowerCase()) {\n case 'circle': return getCircleLength(el);\n case 'rect': return getRectLength(el);\n case 'line': return getLineLength(el);\n case 'polyline': return getPolylineLength(el);\n case 'polygon': return getPolygonLength(el);\n }\n}\n\nfunction setDashoffset(el) {\n var pathLength = getTotalLength(el);\n el.setAttribute('stroke-dasharray', pathLength);\n return pathLength;\n}\n\n// Motion path\n\nfunction getParentSvgEl(el) {\n var parentEl = el.parentNode;\n while (is.svg(parentEl)) {\n if (!is.svg(parentEl.parentNode)) { break; }\n parentEl = parentEl.parentNode;\n }\n return parentEl;\n}\n\nfunction getParentSvg(pathEl, svgData) {\n var svg = svgData || {};\n var parentSvgEl = svg.el || getParentSvgEl(pathEl);\n var rect = parentSvgEl.getBoundingClientRect();\n var viewBoxAttr = getAttribute(parentSvgEl, 'viewBox');\n var width = rect.width;\n var height = rect.height;\n var viewBox = svg.viewBox || (viewBoxAttr ? viewBoxAttr.split(' ') : [0, 0, width, height]);\n return {\n el: parentSvgEl,\n viewBox: viewBox,\n x: viewBox[0] / 1,\n y: viewBox[1] / 1,\n w: width,\n h: height,\n vW: viewBox[2],\n vH: viewBox[3]\n }\n}\n\nfunction getPath(path, percent) {\n var pathEl = is.str(path) ? selectString(path)[0] : path;\n var p = percent || 100;\n return function(property) {\n return {\n property: property,\n el: pathEl,\n svg: getParentSvg(pathEl),\n totalLength: getTotalLength(pathEl) * (p / 100)\n }\n }\n}\n\nfunction getPathProgress(path, progress, isPathTargetInsideSVG) {\n function point(offset) {\n if ( offset === void 0 ) offset = 0;\n\n var l = progress + offset >= 1 ? progress + offset : 0;\n return path.el.getPointAtLength(l);\n }\n var svg = getParentSvg(path.el, path.svg);\n var p = point();\n var p0 = point(-1);\n var p1 = point(+1);\n var scaleX = isPathTargetInsideSVG ? 1 : svg.w / svg.vW;\n var scaleY = isPathTargetInsideSVG ? 1 : svg.h / svg.vH;\n switch (path.property) {\n case 'x': return (p.x - svg.x) * scaleX;\n case 'y': return (p.y - svg.y) * scaleY;\n case 'angle': return Math.atan2(p1.y - p0.y, p1.x - p0.x) * 180 / Math.PI;\n }\n}\n\n// Decompose value\n\nfunction decomposeValue(val, unit) {\n // const rgx = /-?\\d*\\.?\\d+/g; // handles basic numbers\n // const rgx = /[+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/g; // handles exponents notation\n var rgx = /[+-]?\\d*\\.?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/g; // handles exponents notation\n var value = validateValue((is.pth(val) ? val.totalLength : val), unit) + '';\n return {\n original: value,\n numbers: value.match(rgx) ? value.match(rgx).map(Number) : [0],\n strings: (is.str(val) || unit) ? value.split(rgx) : []\n }\n}\n\n// Animatables\n\nfunction parseTargets(targets) {\n var targetsArray = targets ? (flattenArray(is.arr(targets) ? targets.map(toArray) : toArray(targets))) : [];\n return filterArray(targetsArray, function (item, pos, self) { return self.indexOf(item) === pos; });\n}\n\nfunction getAnimatables(targets) {\n var parsed = parseTargets(targets);\n return parsed.map(function (t, i) {\n return {target: t, id: i, total: parsed.length, transforms: { list: getElementTransforms(t) } };\n });\n}\n\n// Properties\n\nfunction normalizePropertyTweens(prop, tweenSettings) {\n var settings = cloneObject(tweenSettings);\n // Override duration if easing is a spring\n if (/^spring/.test(settings.easing)) { settings.duration = spring(settings.easing); }\n if (is.arr(prop)) {\n var l = prop.length;\n var isFromTo = (l === 2 && !is.obj(prop[0]));\n if (!isFromTo) {\n // Duration divided by the number of tweens\n if (!is.fnc(tweenSettings.duration)) { settings.duration = tweenSettings.duration / l; }\n } else {\n // Transform [from, to] values shorthand to a valid tween value\n prop = {value: prop};\n }\n }\n var propArray = is.arr(prop) ? prop : [prop];\n return propArray.map(function (v, i) {\n var obj = (is.obj(v) && !is.pth(v)) ? v : {value: v};\n // Default delay value should only be applied to the first tween\n if (is.und(obj.delay)) { obj.delay = !i ? tweenSettings.delay : 0; }\n // Default endDelay value should only be applied to the last tween\n if (is.und(obj.endDelay)) { obj.endDelay = i === propArray.length - 1 ? tweenSettings.endDelay : 0; }\n return obj;\n }).map(function (k) { return mergeObjects(k, settings); });\n}\n\n\nfunction flattenKeyframes(keyframes) {\n var propertyNames = filterArray(flattenArray(keyframes.map(function (key) { return Object.keys(key); })), function (p) { return is.key(p); })\n .reduce(function (a,b) { if (a.indexOf(b) < 0) { a.push(b); } return a; }, []);\n var properties = {};\n var loop = function ( i ) {\n var propName = propertyNames[i];\n properties[propName] = keyframes.map(function (key) {\n var newKey = {};\n for (var p in key) {\n if (is.key(p)) {\n if (p == propName) { newKey.value = key[p]; }\n } else {\n newKey[p] = key[p];\n }\n }\n return newKey;\n });\n };\n\n for (var i = 0; i < propertyNames.length; i++) loop( i );\n return properties;\n}\n\nfunction getProperties(tweenSettings, params) {\n var properties = [];\n var keyframes = params.keyframes;\n if (keyframes) { params = mergeObjects(flattenKeyframes(keyframes), params); }\n for (var p in params) {\n if (is.key(p)) {\n properties.push({\n name: p,\n tweens: normalizePropertyTweens(params[p], tweenSettings)\n });\n }\n }\n return properties;\n}\n\n// Tweens\n\nfunction normalizeTweenValues(tween, animatable) {\n var t = {};\n for (var p in tween) {\n var value = getFunctionValue(tween[p], animatable);\n if (is.arr(value)) {\n value = value.map(function (v) { return getFunctionValue(v, animatable); });\n if (value.length === 1) { value = value[0]; }\n }\n t[p] = value;\n }\n t.duration = parseFloat(t.duration);\n t.delay = parseFloat(t.delay);\n return t;\n}\n\nfunction normalizeTweens(prop, animatable) {\n var previousTween;\n return prop.tweens.map(function (t) {\n var tween = normalizeTweenValues(t, animatable);\n var tweenValue = tween.value;\n var to = is.arr(tweenValue) ? tweenValue[1] : tweenValue;\n var toUnit = getUnit(to);\n var originalValue = getOriginalTargetValue(animatable.target, prop.name, toUnit, animatable);\n var previousValue = previousTween ? previousTween.to.original : originalValue;\n var from = is.arr(tweenValue) ? tweenValue[0] : previousValue;\n var fromUnit = getUnit(from) || getUnit(originalValue);\n var unit = toUnit || fromUnit;\n if (is.und(to)) { to = previousValue; }\n tween.from = decomposeValue(from, unit);\n tween.to = decomposeValue(getRelativeValue(to, from), unit);\n tween.start = previousTween ? previousTween.end : 0;\n tween.end = tween.start + tween.delay + tween.duration + tween.endDelay;\n tween.easing = parseEasings(tween.easing, tween.duration);\n tween.isPath = is.pth(tweenValue);\n tween.isPathTargetInsideSVG = tween.isPath && is.svg(animatable.target);\n tween.isColor = is.col(tween.from.original);\n if (tween.isColor) { tween.round = 1; }\n previousTween = tween;\n return tween;\n });\n}\n\n// Tween progress\n\nvar setProgressValue = {\n css: function (t, p, v) { return t.style[p] = v; },\n attribute: function (t, p, v) { return t.setAttribute(p, v); },\n object: function (t, p, v) { return t[p] = v; },\n transform: function (t, p, v, transforms, manual) {\n transforms.list.set(p, v);\n if (p === transforms.last || manual) {\n var str = '';\n transforms.list.forEach(function (value, prop) { str += prop + \"(\" + value + \") \"; });\n t.style.transform = str;\n }\n }\n};\n\n// Set Value helper\n\nfunction setTargetsValue(targets, properties) {\n var animatables = getAnimatables(targets);\n animatables.forEach(function (animatable) {\n for (var property in properties) {\n var value = getFunctionValue(properties[property], animatable);\n var target = animatable.target;\n var valueUnit = getUnit(value);\n var originalValue = getOriginalTargetValue(target, property, valueUnit, animatable);\n var unit = valueUnit || getUnit(originalValue);\n var to = getRelativeValue(validateValue(value, unit), originalValue);\n var animType = getAnimationType(target, property);\n setProgressValue[animType](target, property, to, animatable.transforms, true);\n }\n });\n}\n\n// Animations\n\nfunction createAnimation(animatable, prop) {\n var animType = getAnimationType(animatable.target, prop.name);\n if (animType) {\n var tweens = normalizeTweens(prop, animatable);\n var lastTween = tweens[tweens.length - 1];\n return {\n type: animType,\n property: prop.name,\n animatable: animatable,\n tweens: tweens,\n duration: lastTween.end,\n delay: tweens[0].delay,\n endDelay: lastTween.endDelay\n }\n }\n}\n\nfunction getAnimations(animatables, properties) {\n return filterArray(flattenArray(animatables.map(function (animatable) {\n return properties.map(function (prop) {\n return createAnimation(animatable, prop);\n });\n })), function (a) { return !is.und(a); });\n}\n\n// Create Instance\n\nfunction getInstanceTimings(animations, tweenSettings) {\n var animLength = animations.length;\n var getTlOffset = function (anim) { return anim.timelineOffset ? anim.timelineOffset : 0; };\n var timings = {};\n timings.duration = animLength ? Math.max.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.duration; })) : tweenSettings.duration;\n timings.delay = animLength ? Math.min.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.delay; })) : tweenSettings.delay;\n timings.endDelay = animLength ? timings.duration - Math.max.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.duration - anim.endDelay; })) : tweenSettings.endDelay;\n return timings;\n}\n\nvar instanceID = 0;\n\nfunction createNewInstance(params) {\n var instanceSettings = replaceObjectProps(defaultInstanceSettings, params);\n var tweenSettings = replaceObjectProps(defaultTweenSettings, params);\n var properties = getProperties(tweenSettings, params);\n var animatables = getAnimatables(params.targets);\n var animations = getAnimations(animatables, properties);\n var timings = getInstanceTimings(animations, tweenSettings);\n var id = instanceID;\n instanceID++;\n return mergeObjects(instanceSettings, {\n id: id,\n children: [],\n animatables: animatables,\n animations: animations,\n duration: timings.duration,\n delay: timings.delay,\n endDelay: timings.endDelay\n });\n}\n\n// Core\n\nvar activeInstances = [];\n\nvar engine = (function () {\n var raf;\n\n function play() {\n if (!raf && (!isDocumentHidden() || !anime.suspendWhenDocumentHidden) && activeInstances.length > 0) {\n raf = requestAnimationFrame(step);\n }\n }\n function step(t) {\n // memo on algorithm issue:\n // dangerous iteration over mutable `activeInstances`\n // (that collection may be updated from within callbacks of `tick`-ed animation instances)\n var activeInstancesLength = activeInstances.length;\n var i = 0;\n while (i < activeInstancesLength) {\n var activeInstance = activeInstances[i];\n if (!activeInstance.paused) {\n activeInstance.tick(t);\n i++;\n } else {\n activeInstances.splice(i, 1);\n activeInstancesLength--;\n }\n }\n raf = i > 0 ? requestAnimationFrame(step) : undefined;\n }\n\n function handleVisibilityChange() {\n if (!anime.suspendWhenDocumentHidden) { return; }\n\n if (isDocumentHidden()) {\n // suspend ticks\n raf = cancelAnimationFrame(raf);\n } else { // is back to active tab\n // first adjust animations to consider the time that ticks were suspended\n activeInstances.forEach(\n function (instance) { return instance ._onDocumentVisibility(); }\n );\n engine();\n }\n }\n if (typeof document !== 'undefined') {\n document.addEventListener('visibilitychange', handleVisibilityChange);\n }\n\n return play;\n})();\n\nfunction isDocumentHidden() {\n return !!document && document.hidden;\n}\n\n// Public Instance\n\nfunction anime(params) {\n if ( params === void 0 ) params = {};\n\n\n var startTime = 0, lastTime = 0, now = 0;\n var children, childrenLength = 0;\n var resolve = null;\n\n function makePromise(instance) {\n var promise = window.Promise && new Promise(function (_resolve) { return resolve = _resolve; });\n instance.finished = promise;\n return promise;\n }\n\n var instance = createNewInstance(params);\n var promise = makePromise(instance);\n\n function toggleInstanceDirection() {\n var direction = instance.direction;\n if (direction !== 'alternate') {\n instance.direction = direction !== 'normal' ? 'normal' : 'reverse';\n }\n instance.reversed = !instance.reversed;\n children.forEach(function (child) { return child.reversed = instance.reversed; });\n }\n\n function adjustTime(time) {\n return instance.reversed ? instance.duration - time : time;\n }\n\n function resetTime() {\n startTime = 0;\n lastTime = adjustTime(instance.currentTime) * (1 / anime.speed);\n }\n\n function seekChild(time, child) {\n if (child) { child.seek(time - child.timelineOffset); }\n }\n\n function syncInstanceChildren(time) {\n if (!instance.reversePlayback) {\n for (var i = 0; i < childrenLength; i++) { seekChild(time, children[i]); }\n } else {\n for (var i$1 = childrenLength; i$1--;) { seekChild(time, children[i$1]); }\n }\n }\n\n function setAnimationsProgress(insTime) {\n var i = 0;\n var animations = instance.animations;\n var animationsLength = animations.length;\n while (i < animationsLength) {\n var anim = animations[i];\n var animatable = anim.animatable;\n var tweens = anim.tweens;\n var tweenLength = tweens.length - 1;\n var tween = tweens[tweenLength];\n // Only check for keyframes if there is more than one tween\n if (tweenLength) { tween = filterArray(tweens, function (t) { return (insTime < t.end); })[0] || tween; }\n var elapsed = minMax(insTime - tween.start - tween.delay, 0, tween.duration) / tween.duration;\n var eased = isNaN(elapsed) ? 1 : tween.easing(elapsed);\n var strings = tween.to.strings;\n var round = tween.round;\n var numbers = [];\n var toNumbersLength = tween.to.numbers.length;\n var progress = (void 0);\n for (var n = 0; n < toNumbersLength; n++) {\n var value = (void 0);\n var toNumber = tween.to.numbers[n];\n var fromNumber = tween.from.numbers[n] || 0;\n if (!tween.isPath) {\n value = fromNumber + (eased * (toNumber - fromNumber));\n } else {\n value = getPathProgress(tween.value, eased * toNumber, tween.isPathTargetInsideSVG);\n }\n if (round) {\n if (!(tween.isColor && n > 2)) {\n value = Math.round(value * round) / round;\n }\n }\n numbers.push(value);\n }\n // Manual Array.reduce for better performances\n var stringsLength = strings.length;\n if (!stringsLength) {\n progress = numbers[0];\n } else {\n progress = strings[0];\n for (var s = 0; s < stringsLength; s++) {\n var a = strings[s];\n var b = strings[s + 1];\n var n$1 = numbers[s];\n if (!isNaN(n$1)) {\n if (!b) {\n progress += n$1 + ' ';\n } else {\n progress += n$1 + b;\n }\n }\n }\n }\n setProgressValue[anim.type](animatable.target, anim.property, progress, animatable.transforms);\n anim.currentValue = progress;\n i++;\n }\n }\n\n function setCallback(cb) {\n if (instance[cb] && !instance.passThrough) { instance[cb](instance); }\n }\n\n function countIteration() {\n if (instance.remaining && instance.remaining !== true) {\n instance.remaining--;\n }\n }\n\n function setInstanceProgress(engineTime) {\n var insDuration = instance.duration;\n var insDelay = instance.delay;\n var insEndDelay = insDuration - instance.endDelay;\n var insTime = adjustTime(engineTime);\n instance.progress = minMax((insTime / insDuration) * 100, 0, 100);\n instance.reversePlayback = insTime < instance.currentTime;\n if (children) { syncInstanceChildren(insTime); }\n if (!instance.began && instance.currentTime > 0) {\n instance.began = true;\n setCallback('begin');\n }\n if (!instance.loopBegan && instance.currentTime > 0) {\n instance.loopBegan = true;\n setCallback('loopBegin');\n }\n if (insTime <= insDelay && instance.currentTime !== 0) {\n setAnimationsProgress(0);\n }\n if ((insTime >= insEndDelay && instance.currentTime !== insDuration) || !insDuration) {\n setAnimationsProgress(insDuration);\n }\n if (insTime > insDelay && insTime < insEndDelay) {\n if (!instance.changeBegan) {\n instance.changeBegan = true;\n instance.changeCompleted = false;\n setCallback('changeBegin');\n }\n setCallback('change');\n setAnimationsProgress(insTime);\n } else {\n if (instance.changeBegan) {\n instance.changeCompleted = true;\n instance.changeBegan = false;\n setCallback('changeComplete');\n }\n }\n instance.currentTime = minMax(insTime, 0, insDuration);\n if (instance.began) { setCallback('update'); }\n if (engineTime >= insDuration) {\n lastTime = 0;\n countIteration();\n if (!instance.remaining) {\n instance.paused = true;\n if (!instance.completed) {\n instance.completed = true;\n setCallback('loopComplete');\n setCallback('complete');\n if (!instance.passThrough && 'Promise' in window) {\n resolve();\n promise = makePromise(instance);\n }\n }\n } else {\n startTime = now;\n setCallback('loopComplete');\n instance.loopBegan = false;\n if (instance.direction === 'alternate') {\n toggleInstanceDirection();\n }\n }\n }\n }\n\n instance.reset = function() {\n var direction = instance.direction;\n instance.passThrough = false;\n instance.currentTime = 0;\n instance.progress = 0;\n instance.paused = true;\n instance.began = false;\n instance.loopBegan = false;\n instance.changeBegan = false;\n instance.completed = false;\n instance.changeCompleted = false;\n instance.reversePlayback = false;\n instance.reversed = direction === 'reverse';\n instance.remaining = instance.loop;\n children = instance.children;\n childrenLength = children.length;\n for (var i = childrenLength; i--;) { instance.children[i].reset(); }\n if (instance.reversed && instance.loop !== true || (direction === 'alternate' && instance.loop === 1)) { instance.remaining++; }\n setAnimationsProgress(instance.reversed ? instance.duration : 0);\n };\n\n // internal method (for engine) to adjust animation timings before restoring engine ticks (rAF)\n instance._onDocumentVisibility = resetTime;\n\n // Set Value helper\n\n instance.set = function(targets, properties) {\n setTargetsValue(targets, properties);\n return instance;\n };\n\n instance.tick = function(t) {\n now = t;\n if (!startTime) { startTime = now; }\n setInstanceProgress((now + (lastTime - startTime)) * anime.speed);\n };\n\n instance.seek = function(time) {\n setInstanceProgress(adjustTime(time));\n };\n\n instance.pause = function() {\n instance.paused = true;\n resetTime();\n };\n\n instance.play = function() {\n if (!instance.paused) { return; }\n if (instance.completed) { instance.reset(); }\n instance.paused = false;\n activeInstances.push(instance);\n resetTime();\n engine();\n };\n\n instance.reverse = function() {\n toggleInstanceDirection();\n instance.completed = instance.reversed ? false : true;\n resetTime();\n };\n\n instance.restart = function() {\n instance.reset();\n instance.play();\n };\n\n instance.remove = function(targets) {\n var targetsArray = parseTargets(targets);\n removeTargetsFromInstance(targetsArray, instance);\n };\n\n instance.reset();\n\n if (instance.autoplay) { instance.play(); }\n\n return instance;\n\n}\n\n// Remove targets from animation\n\nfunction removeTargetsFromAnimations(targetsArray, animations) {\n for (var a = animations.length; a--;) {\n if (arrayContains(targetsArray, animations[a].animatable.target)) {\n animations.splice(a, 1);\n }\n }\n}\n\nfunction removeTargetsFromInstance(targetsArray, instance) {\n var animations = instance.animations;\n var children = instance.children;\n removeTargetsFromAnimations(targetsArray, animations);\n for (var c = children.length; c--;) {\n var child = children[c];\n var childAnimations = child.animations;\n removeTargetsFromAnimations(targetsArray, childAnimations);\n if (!childAnimations.length && !child.children.length) { children.splice(c, 1); }\n }\n if (!animations.length && !children.length) { instance.pause(); }\n}\n\nfunction removeTargetsFromActiveInstances(targets) {\n var targetsArray = parseTargets(targets);\n for (var i = activeInstances.length; i--;) {\n var instance = activeInstances[i];\n removeTargetsFromInstance(targetsArray, instance);\n }\n}\n\n// Stagger helpers\n\nfunction stagger(val, params) {\n if ( params === void 0 ) params = {};\n\n var direction = params.direction || 'normal';\n var easing = params.easing ? parseEasings(params.easing) : null;\n var grid = params.grid;\n var axis = params.axis;\n var fromIndex = params.from || 0;\n var fromFirst = fromIndex === 'first';\n var fromCenter = fromIndex === 'center';\n var fromLast = fromIndex === 'last';\n var isRange = is.arr(val);\n var val1 = isRange ? parseFloat(val[0]) : parseFloat(val);\n var val2 = isRange ? parseFloat(val[1]) : 0;\n var unit = getUnit(isRange ? val[1] : val) || 0;\n var start = params.start || 0 + (isRange ? val1 : 0);\n var values = [];\n var maxValue = 0;\n return function (el, i, t) {\n if (fromFirst) { fromIndex = 0; }\n if (fromCenter) { fromIndex = (t - 1) / 2; }\n if (fromLast) { fromIndex = t - 1; }\n if (!values.length) {\n for (var index = 0; index < t; index++) {\n if (!grid) {\n values.push(Math.abs(fromIndex - index));\n } else {\n var fromX = !fromCenter ? fromIndex%grid[0] : (grid[0]-1)/2;\n var fromY = !fromCenter ? Math.floor(fromIndex/grid[0]) : (grid[1]-1)/2;\n var toX = index%grid[0];\n var toY = Math.floor(index/grid[0]);\n var distanceX = fromX - toX;\n var distanceY = fromY - toY;\n var value = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\n if (axis === 'x') { value = -distanceX; }\n if (axis === 'y') { value = -distanceY; }\n values.push(value);\n }\n maxValue = Math.max.apply(Math, values);\n }\n if (easing) { values = values.map(function (val) { return easing(val / maxValue) * maxValue; }); }\n if (direction === 'reverse') { values = values.map(function (val) { return axis ? (val < 0) ? val * -1 : -val : Math.abs(maxValue - val); }); }\n }\n var spacing = isRange ? (val2 - val1) / maxValue : val1;\n return start + (spacing * (Math.round(values[i] * 100) / 100)) + unit;\n }\n}\n\n// Timeline\n\nfunction timeline(params) {\n if ( params === void 0 ) params = {};\n\n var tl = anime(params);\n tl.duration = 0;\n tl.add = function(instanceParams, timelineOffset) {\n var tlIndex = activeInstances.indexOf(tl);\n var children = tl.children;\n if (tlIndex > -1) { activeInstances.splice(tlIndex, 1); }\n function passThrough(ins) { ins.passThrough = true; }\n for (var i = 0; i < children.length; i++) { passThrough(children[i]); }\n var insParams = mergeObjects(instanceParams, replaceObjectProps(defaultTweenSettings, params));\n insParams.targets = insParams.targets || params.targets;\n var tlDuration = tl.duration;\n insParams.autoplay = false;\n insParams.direction = tl.direction;\n insParams.timelineOffset = is.und(timelineOffset) ? tlDuration : getRelativeValue(timelineOffset, tlDuration);\n passThrough(tl);\n tl.seek(insParams.timelineOffset);\n var ins = anime(insParams);\n passThrough(ins);\n children.push(ins);\n var timings = getInstanceTimings(children, params);\n tl.delay = timings.delay;\n tl.endDelay = timings.endDelay;\n tl.duration = timings.duration;\n tl.seek(0);\n tl.reset();\n if (tl.autoplay) { tl.play(); }\n return tl;\n };\n return tl;\n}\n\nanime.version = '3.2.1';\nanime.speed = 1;\n// TODO:#review: naming, documentation\nanime.suspendWhenDocumentHidden = true;\nanime.running = activeInstances;\nanime.remove = removeTargetsFromActiveInstances;\nanime.get = getOriginalTargetValue;\nanime.set = setTargetsValue;\nanime.convertPx = convertPxToUnit;\nanime.path = getPath;\nanime.setDashoffset = setDashoffset;\nanime.stagger = stagger;\nanime.timeline = timeline;\nanime.easing = parseEasings;\nanime.penner = penner;\nanime.random = function (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; };\n\nexport default anime;\n","import { Component } from \"./component\";\nimport { M } from \"./global\";\nimport { Dropdown } from \"./dropdown\";\n\nlet _defaults = {\n data: [], // Autocomplete data set\n onAutocomplete: null, // Callback for when autocompleted\n dropdownOptions: {\n // Default dropdown options\n autoFocus: false,\n closeOnClick: false,\n coverTrigger: false\n },\n minLength: 1, // Min characters before autocomplete starts\n isMultiSelect: false,\n onSearch: function(text, autocomplete) {\n const filteredData = autocomplete.options.data.filter(item => {\n return Object.keys(item)\n .map(key => item[key].toString().toLowerCase().indexOf(text.toLowerCase()) >= 0)\n .some(isMatch => isMatch);\n });\n autocomplete.setMenuItems(filteredData);\n },\n maxDropDownHeight: '300px',\n allowUnsafeHTML: false\n};\n\n\nexport class Autocomplete extends Component {\n el: HTMLInputElement;\n isOpen: boolean;\n count: number;\n activeIndex: number;\n private oldVal: any;\n private $inputField: any;\n private $active: HTMLElement|null;\n private _mousedown: boolean;\n private _handleInputBlurBound: any;\n private _handleInputKeyupAndFocusBound: any;\n private _handleInputKeydownBound: any;\n private _handleInputClickBound: any;\n private _handleContainerMousedownAndTouchstartBound: any;\n private _handleContainerMouseupAndTouchendBound: any;\n container: HTMLElement;\n dropdown: Dropdown;\n static _keydown: boolean;\n selectedValues: any[];\n menuItems: any[];\n\n\n constructor(el, options) {\n super(Autocomplete, el, options);\n (this.el as any).M_Autocomplete = this;\n this.options = {...Autocomplete.defaults, ...options};\n this.isOpen = false;\n this.count = 0;\n this.activeIndex = -1;\n this.oldVal;\n this.selectedValues = [];\n this.menuItems = [];\n this.$active = null;\n this._mousedown = false;\n this._setupDropdown();\n this._setupEventHandlers();\n }\n static get defaults() {\n return _defaults;\n }\n static init(els, options) {\n return super.init(this, els, options);\n }\n static getInstance(el) {\n let domElem = el.jquery ? el[0] : el;\n return domElem.M_Autocomplete;\n }\n\n destroy() {\n this._removeEventHandlers();\n this._removeDropdown();\n (this.el as any).M_Autocomplete = undefined;\n }\n\n _setupEventHandlers() {\n this._handleInputBlurBound = this._handleInputBlur.bind(this);\n this._handleInputKeyupAndFocusBound = this._handleInputKeyupAndFocus.bind(this);\n this._handleInputKeydownBound = this._handleInputKeydown.bind(this);\n this._handleInputClickBound = this._handleInputClick.bind(this);\n this._handleContainerMousedownAndTouchstartBound = this._handleContainerMousedownAndTouchstart.bind(\n this\n );\n this._handleContainerMouseupAndTouchendBound = this._handleContainerMouseupAndTouchend.bind(\n this\n );\n this.el.addEventListener('blur', this._handleInputBlurBound);\n this.el.addEventListener('keyup', this._handleInputKeyupAndFocusBound);\n this.el.addEventListener('focus', this._handleInputKeyupAndFocusBound);\n this.el.addEventListener('keydown', this._handleInputKeydownBound);\n this.el.addEventListener('click', this._handleInputClickBound);\n this.container.addEventListener(\n 'mousedown',\n this._handleContainerMousedownAndTouchstartBound\n );\n this.container.addEventListener('mouseup', this._handleContainerMouseupAndTouchendBound);\n if (typeof window.ontouchstart !== 'undefined') {\n this.container.addEventListener(\n 'touchstart',\n this._handleContainerMousedownAndTouchstartBound\n );\n this.container.addEventListener('touchend', this._handleContainerMouseupAndTouchendBound);\n }\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('blur', this._handleInputBlurBound);\n this.el.removeEventListener('keyup', this._handleInputKeyupAndFocusBound);\n this.el.removeEventListener('focus', this._handleInputKeyupAndFocusBound);\n this.el.removeEventListener('keydown', this._handleInputKeydownBound);\n this.el.removeEventListener('click', this._handleInputClickBound);\n this.container.removeEventListener(\n 'mousedown',\n this._handleContainerMousedownAndTouchstartBound\n );\n this.container.removeEventListener('mouseup', this._handleContainerMouseupAndTouchendBound);\n\n if (typeof window.ontouchstart !== 'undefined') {\n this.container.removeEventListener(\n 'touchstart',\n this._handleContainerMousedownAndTouchstartBound\n );\n this.container.removeEventListener(\n 'touchend',\n this._handleContainerMouseupAndTouchendBound\n );\n }\n }\n\n _setupDropdown() { \n this.container = document.createElement('ul');\n this.container.style.maxHeight = this.options.maxDropDownHeight;\n this.container.id = `autocomplete-options-${M.guid()}`;\n this.container.classList.add('autocomplete-content', 'dropdown-content');\n this.el.setAttribute('data-target', this.container.id);\n\n // ! Issue in Component Dropdown: _placeDropdown moves dom-position\n this.el.parentElement.appendChild(this.container); \n\n // Initialize dropdown\n let dropdownOptions = {\n ...Autocomplete.defaults.dropdownOptions,\n ...this.options.dropdownOptions\n };\n let userOnItemClick = dropdownOptions.onItemClick;\n // Ensuring the select Option call when user passes custom onItemClick function to dropdown\n dropdownOptions.onItemClick = (li) => {\n if (!li) return;\n const entryID = li.getAttribute('data-id');\n this.selectOption(entryID);\n // Handle user declared onItemClick if needed\n if (userOnItemClick && typeof userOnItemClick === 'function')\n userOnItemClick.call(this.dropdown, this.el);\n };\n this.dropdown = M.Dropdown.init(this.el, dropdownOptions);\n\n // ! Workaround for Label: move label up again\n // TODO: Just use PopperJS in future!\n const label = this.el.parentElement.querySelector('label');\n if (label) this.el.after(label);\n\n // Sketchy removal of dropdown click handler\n this.el.removeEventListener('click', this.dropdown._handleClickBound);\n // Set Value if already set in HTML\n if (this.el.value) this.selectOption(this.el.value);\n // Add StatusInfo\n const div = document.createElement('div');\n div.classList.add('status-info');\n div.setAttribute('style', 'position: absolute;right:0;top:0;');\n this.el.parentElement.appendChild(div); \n this._updateSelectedInfo();\n }\n\n _removeDropdown() {\n this.container.parentNode.removeChild(this.container);\n }\n\n _handleInputBlur() {\n if (!this._mousedown) {\n this.close();\n this._resetAutocomplete();\n }\n }\n\n _handleInputKeyupAndFocus(e) {\n if (e.type === 'keyup') Autocomplete._keydown = false;\n this.count = 0;\n const actualValue = this.el.value.toLowerCase();\n // Don't capture enter or arrow key usage.\n if (e.keyCode === 13 || e.keyCode === 38 || e.keyCode === 40) return;\n // Check if the input isn't empty\n // Check if focus triggered by tab\n if (this.oldVal !== actualValue && (M.tabPressed || e.type !== 'focus')) {\n this.open();\n }\n // Value has changed!\n if (this.oldVal !== actualValue) {\n this._setStatusLoading();\n this.options.onSearch(this.el.value, this);\n }\n // Reset Single-Select when Input cleared\n if (!this.options.isMultiSelect && this.el.value.length === 0) {\n this.selectedValues = [];\n this._triggerChanged();\n }\n this.oldVal = actualValue;\n }\n\n _handleInputKeydown(e) {\n Autocomplete._keydown = true;\n // Arrow keys and enter key usage\n const keyCode = e.keyCode;\n const numItems = this.container.querySelectorAll('li').length;\n // select element on Enter\n if (keyCode === M.keys.ENTER && this.activeIndex >= 0) {\n const liElement = this.container.querySelectorAll('li')[this.activeIndex];\n if (liElement) {\n this.selectOption(liElement.getAttribute('data-id'));\n e.preventDefault();\n }\n return;\n }\n // Capture up and down key\n if (keyCode === M.keys.ARROW_UP || keyCode === M.keys.ARROW_DOWN) {\n e.preventDefault();\n if (keyCode === M.keys.ARROW_UP && this.activeIndex > 0) this.activeIndex--;\n if (keyCode === M.keys.ARROW_DOWN && this.activeIndex < numItems - 1) this.activeIndex++;\n this.$active?.classList.remove('active');\n if (this.activeIndex >= 0) {\n this.$active = this.container.querySelectorAll('li')[this.activeIndex];\n this.$active?.classList.add('active');\n // Focus selected\n this.container.children[this.activeIndex].scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest'\n });\n }\n }\n }\n\n _handleInputClick(e) {\n this.open();\n }\n\n _handleContainerMousedownAndTouchstart(e) {\n this._mousedown = true;\n }\n\n _handleContainerMouseupAndTouchend(e) {\n this._mousedown = false;\n }\n\n _resetCurrentElementPosition() {\n this.activeIndex = -1;\n this.$active?.classList.remove('active');\n }\n\n _resetAutocomplete() {\n this.container.replaceChildren();\n this._resetCurrentElementPosition();\n this.oldVal = null;\n this.isOpen = false;\n this._mousedown = false;\n }\n\n _highlightPartialText(input, label) {\n const start = label.toLowerCase().indexOf('' + input.toLowerCase() + '');\n const end = start + input.length - 1;\n //custom filters may return results where the string does not match any part\n if (start == -1 || end == -1) {\n return [label, '', ''];\n }\n return [label.slice(0, start), label.slice(start, end + 1), label.slice(end + 1)];\n }\n\n _createDropdownItem(entry) {\n const item = document.createElement('li');\n item.setAttribute('data-id', entry.id);\n item.setAttribute(\n 'style',\n 'display:grid; grid-auto-flow: column; user-select: none; align-items: center;'\n );\n // Checkbox\n if (this.options.isMultiSelect) {\n item.innerHTML = `\n <div class=\"item-selection\" style=\"text-align:center;\">\n <input type=\"checkbox\"${\n this.selectedValues.some((sel) => sel.id === entry.id) ? ' checked=\"checked\"' : ''\n }><span style=\"padding-left:21px;\"></span>\n </div>`;\n }\n // Image\n if (entry.image) {\n const img = document.createElement('img');\n img.classList.add('circle');\n img.src = entry.image;\n item.appendChild(img);\n }\n\n // Text\n const inputText = this.el.value.toLowerCase();\n const parts = this._highlightPartialText(inputText, (entry.text || entry.id).toString());\n const div = document.createElement('div');\n div.setAttribute('style', 'line-height:1.2;font-weight:500;');\n if (this.options.allowUnsafeHTML) {\n div.innerHTML = parts[0] + '<span class=\"highlight\">' + parts[1] + '</span>' + parts[2];\n } else {\n div.appendChild(document.createTextNode(parts[0]));\n if (parts[1]) {\n const highlight = document.createElement('span');\n highlight.textContent = parts[1];\n highlight.classList.add('highlight');\n div.appendChild(highlight);\n div.appendChild(document.createTextNode(parts[2]));\n }\n }\n\n const itemText = document.createElement('div');\n itemText.classList.add('item-text');\n itemText.setAttribute('style', 'padding:5px;overflow:hidden;');\n item.appendChild(itemText);\n item.querySelector('.item-text').appendChild(div);\n // Description\n if (typeof entry.description === 'string' || (typeof entry.description === 'number' && !isNaN(entry.description))) {\n const description = document.createElement('small');\n description.setAttribute(\n 'style',\n 'line-height:1.3;color:grey;white-space:nowrap;text-overflow:ellipsis;display:block;width:90%;overflow:hidden;'\n );\n description.innerText = entry.description;\n item.querySelector('.item-text').appendChild(description);\n }\n // Set Grid\n const getGridConfig = () => {\n if (this.options.isMultiSelect) {\n if (entry.image) return '40px min-content auto'; // cb-img-txt\n return '40px auto'; // cb-txt\n }\n if (entry.image) return 'min-content auto'; // img-txt\n return 'auto'; // txt\n };\n item.style.gridTemplateColumns = getGridConfig();\n return item;\n }\n\n _renderDropdown() {\n this._resetAutocomplete();\n // Check if Data is empty\n if (this.menuItems.length === 0) {\n this.menuItems = this.selectedValues; // Show selected Items\n }\n for (let i = 0; i < this.menuItems.length; i++) {\n const item = this._createDropdownItem(this.menuItems[i]);\n this.container.append(item);\n }\n }\n\n _setStatusLoading() {\n this.el.parentElement.querySelector(\n '.status-info'\n ).innerHTML = `<div style=\"height:100%;width:50px;\"><svg version=\"1.1\" id=\"L4\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 100 100\" enable-background=\"new 0 0 0 0\" xml:space=\"preserve\">\n <circle fill=\"#888c\" stroke=\"none\" cx=\"6\" cy=\"50\" r=\"6\"><animate attributeName=\"opacity\" dur=\"1s\" values=\"0;1;0\" repeatCount=\"indefinite\" begin=\"0.1\"/></circle>\n <circle fill=\"#888c\" stroke=\"none\" cx=\"26\" cy=\"50\" r=\"6\"><animate attributeName=\"opacity\" dur=\"1s\" values=\"0;1;0\" repeatCount=\"indefinite\" begin=\"0.2\"/></circle>\n <circle fill=\"#888c\" stroke=\"none\" cx=\"46\" cy=\"50\" r=\"6\"><animate attributeName=\"opacity\" dur=\"1s\" values=\"0;1;0\" repeatCount=\"indefinite\" begin=\"0.3\"/></circle>\n </svg></div>`;\n }\n\n _updateSelectedInfo() {\n const statusElement = this.el.parentElement.querySelector('.status-info');\n if (statusElement) {\n if (this.options.isMultiSelect) statusElement.innerHTML = this.selectedValues.length.toString();\n else statusElement.innerHTML = '';\n }\n }\n\n _refreshInputText() {\n if (this.selectedValues.length === 1) {\n const entry = this.selectedValues[0];\n this.el.value = entry.text || entry.id; // Write Text to Input\n }\n }\n\n _triggerChanged() {\n this.el.dispatchEvent(new Event('change'));\n // Trigger Autocomplete Event\n if (typeof this.options.onAutocomplete === 'function')\n this.options.onAutocomplete.call(this, this.selectedValues);\n }\n\n open() {\n const inputText = this.el.value.toLowerCase();\n this._resetAutocomplete();\n if (inputText.length >= this.options.minLength) {\n this.isOpen = true;\n this._renderDropdown();\n }\n // Open dropdown\n if (!this.dropdown.isOpen) {\n setTimeout(() => {\n this.dropdown.open();\n }, 100);\n }\n else this.dropdown.recalculateDimensions(); // Recalculate dropdown when its already open\n }\n\n close() {\n this.dropdown.close();\n }\n\n setMenuItems(menuItems) {\n this.menuItems = menuItems;\n this.open();\n this._updateSelectedInfo();\n }\n\n setValues(entries) {\n this.selectedValues = entries;\n this._updateSelectedInfo();\n if (!this.options.isMultiSelect) {\n this._refreshInputText();\n }\n this._triggerChanged();\n }\n\n selectOption(id) {\n const entry = this.menuItems.find((item) => item.id == id);\n if (!entry) return;\n // Toggle Checkbox\n const li = this.container.querySelector('li[data-id=\"'+id+'\"]');\n if (!li) return;\n if (this.options.isMultiSelect) {\n const checkbox = <HTMLInputElement|null>li.querySelector('input[type=\"checkbox\"]');\n checkbox.checked = !checkbox.checked;\n if (checkbox.checked) this.selectedValues.push(entry);\n else\n this.selectedValues = this.selectedValues.filter(\n (selectedEntry) => selectedEntry.id !== entry.id\n );\n this.el.focus();\n } else {\n // Single-Select\n this.selectedValues = [entry];\n this._refreshInputText();\n this._resetAutocomplete();\n this.close();\n }\n this._updateSelectedInfo();\n this._triggerChanged();\n }\n}\n \n","import { Component } from \"./component\";\nimport anim from \"animejs\";\n\n let _defaults = {\n direction: 'top',\n hoverEnabled: true,\n toolbarEnabled: false\n };\n \n export class FloatingActionButton extends Component {\n el: HTMLElement;\n isOpen: boolean;\n private _anchor: HTMLAnchorElement;\n private _menu: HTMLElement|null;\n private _floatingBtns: HTMLElement[];\n private _floatingBtnsReverse: HTMLElement[];\n offsetY: number;\n offsetX: number;\n private _handleFABClickBound: any;\n private _handleOpenBound: any;\n private _handleCloseBound: any;\n private _handleDocumentClickBound: (this: HTMLElement, ev: MouseEvent) => any;\n btnBottom: number;\n btnLeft: number;\n btnWidth: number;\n\n constructor(el, options) {\n super(FloatingActionButton, el, options);\n\n (this.el as any).M_FloatingActionButton = this;\n\n this.options = {...FloatingActionButton.defaults, ...options};\n this.isOpen = false;\n this._anchor = this.el.querySelector('a');\n this._menu = this.el.querySelector('ul');\n this._floatingBtns = Array.from(this.el.querySelectorAll('ul .btn-floating'));\n this._floatingBtnsReverse = this._floatingBtns.reverse();\n this.offsetY = 0;\n this.offsetX = 0;\n\n this.el.classList.add(`direction-${this.options.direction}`);\n if (this.options.direction === 'top')\n this.offsetY = 40;\n else if (this.options.direction === 'right')\n this.offsetX = -40;\n else if (this.options.direction === 'bottom')\n this.offsetY = -40;\n else\n this.offsetX = 40;\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n let domElem = !!el.jquery ? el[0] : el;\n return domElem.M_FloatingActionButton;\n }\n\n destroy() {\n this._removeEventHandlers();\n (this.el as any).M_FloatingActionButton = undefined;\n }\n\n _setupEventHandlers() {\n this._handleFABClickBound = this._handleFABClick.bind(this);\n this._handleOpenBound = this.open.bind(this);\n this._handleCloseBound = this.close.bind(this);\n\n if (this.options.hoverEnabled && !this.options.toolbarEnabled) {\n this.el.addEventListener('mouseenter', this._handleOpenBound);\n this.el.addEventListener('mouseleave', this._handleCloseBound);\n } else {\n this.el.addEventListener('click', this._handleFABClickBound);\n }\n }\n\n _removeEventHandlers() {\n if (this.options.hoverEnabled && !this.options.toolbarEnabled) {\n this.el.removeEventListener('mouseenter', this._handleOpenBound);\n this.el.removeEventListener('mouseleave', this._handleCloseBound);\n } else {\n this.el.removeEventListener('click', this._handleFABClickBound);\n }\n }\n\n _handleFABClick() {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n _handleDocumentClick(e) {\n const elem = <HTMLElement>e.target;\n if (elem !== this._menu) this.close;\n /*\n if (!elem.closest(this.$menu)) {\n this.close();\n }*/\n }\n\n open() {\n if (this.isOpen) return;\n if (this.options.toolbarEnabled)\n this._animateInToolbar();\n else\n this._animateInFAB();\n this.isOpen = true;\n }\n\n close() {\n if (!this.isOpen) return;\n if (this.options.toolbarEnabled) {\n window.removeEventListener('scroll', this._handleCloseBound, true);\n document.body.removeEventListener('click', this._handleDocumentClickBound, true);\n this._animateOutToolbar();\n }\n else {\n this._animateOutFAB();\n }\n this.isOpen = false;\n }\n\n _animateInFAB() {\n this.el.classList.add('active');\n let time = 0;\n this._floatingBtnsReverse.forEach((el) => {\n anim({\n targets: el,\n opacity: 1,\n scale: [0.4, 1],\n translateY: [this.offsetY, 0],\n translateX: [this.offsetX, 0],\n duration: 275,\n delay: time,\n easing: 'easeInOutQuad'\n });\n time += 40;\n });\n }\n\n _animateOutFAB() {\n this._floatingBtnsReverse.forEach((el) => {\n anim.remove(el);\n anim({\n targets: el,\n opacity: 0,\n scale: 0.4,\n translateY: this.offsetY,\n translateX: this.offsetX,\n duration: 175,\n easing: 'easeOutQuad',\n complete: () => {\n this.el.classList.remove('active');\n }\n });\n });\n }\n\n _animateInToolbar() {\n let scaleFactor;\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n let btnRect = this.el.getBoundingClientRect();\n\n const backdrop = document.createElement('div');\n backdrop.classList.add('fab-backdrop'); // $('<div class=\"fab-backdrop\"></div>');\n\n const fabColor = getComputedStyle(this._anchor).backgroundColor; // css('background-color');\n\n this._anchor.append(backdrop);\n\n this.offsetX = btnRect.left - windowWidth / 2 + btnRect.width / 2;\n this.offsetY = windowHeight - btnRect.bottom;\n scaleFactor = windowWidth / backdrop[0].clientWidth;\n this.btnBottom = btnRect.bottom;\n this.btnLeft = btnRect.left;\n this.btnWidth = btnRect.width;\n\n // Set initial state\n this.el.classList.add('active');\n this.el.style.textAlign = 'center';\n this.el.style.width = '100%';\n this.el.style.bottom = '0';\n this.el.style.left = '0';\n this.el.style.transform = 'translateX(' + this.offsetX + 'px)';\n this.el.style.transition = 'none';\n\n this._anchor.style.transform = `translateY(${this.offsetY}px`;\n this._anchor.style.transition = 'none';\n\n (<HTMLElement>backdrop).style.backgroundColor = fabColor;\n\n setTimeout(() => {\n this.el.style.transform = '';\n this.el.style.transition = 'transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s';\n\n this._anchor.style.overflow = 'visible';\n this._anchor.style.transform = '';\n this._anchor.style.transition = 'transform .2s';\n\n setTimeout(() => {\n this.el.style.overflow = 'hidden';\n this.el.style.backgroundColor = fabColor;\n\n backdrop.style.transform = 'scale(' + scaleFactor + ')';\n backdrop.style.transition = 'transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)';\n\n this._menu.querySelectorAll('li > a').forEach((a: HTMLAnchorElement) => a.style.opacity = '1');\n\n // Scroll to close.\n this._handleDocumentClickBound = this._handleDocumentClick.bind(this);\n window.addEventListener('scroll', this._handleCloseBound, true);\n document.body.addEventListener('click', this._handleDocumentClickBound, true);\n }, 100);\n }, 0);\n }\n\n\n\n\n _animateOutToolbar() {\n return;\n /*\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n let backdrop = this.$el.find('.fab-backdrop');\n let fabColor = this.$anchor.css('background-color');\n\n this.offsetX = this.btnLeft - windowWidth / 2 + this.btnWidth / 2;\n this.offsetY = windowHeight - this.btnBottom;\n\n // Hide backdrop\n this.$el.removeClass('active');\n this.$el.css({\n 'background-color': 'transparent',\n transition: 'none'\n });\n // this.$anchor.css({\n // transition: 'none'\n // });\n backdrop.css({\n transform: 'scale(0)',\n 'background-color': fabColor\n });\n\n // this.$menu\n // .children('li')\n // .children('a')\n // .css({\n // opacity: ''\n // });\n\n setTimeout(() => {\n backdrop.remove();\n\n // Set initial state.\n this.$el.css({\n 'text-align': '',\n width: '',\n bottom: '',\n left: '',\n overflow: '',\n 'background-color': '',\n transform: 'translate3d(' + -this.offsetX + 'px,0,0)'\n });\n // this.$anchor.css({\n // overflow: '',\n // transform: 'translate3d(0,' + this.offsetY + 'px,0)'\n // });\n\n setTimeout(() => {\n this.$el.css({\n transform: 'translate3d(0,0,0)',\n transition: 'transform .2s'\n });\n // this.$anchor.css({\n // transform: 'translate3d(0,0,0)',\n // transition: 'transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)'\n // });\n }, 20);\n }, 200);\n */\n }\n }\n\n ","import anim from \"animejs\";\n\nexport class Cards {\n\n static Init() {\n\n document.addEventListener(\"DOMContentLoaded\", () => {\n document.body.addEventListener('click', e => {\n const trigger = <HTMLElement>e.target;\n\n const card: HTMLElement = trigger.closest('.card');\n if (!card) return;\n\n const cardReveal = <HTMLElement|null>Array.from(card.children).find(elem => elem.classList.contains('card-reveal'));\n if (!cardReveal) return;\n const initialOverflow = getComputedStyle(card).overflow;\n\n // Close Card \n const closeArea = cardReveal.querySelector('.card-reveal .card-title');\n if (trigger === closeArea || closeArea.contains(trigger)) {\n anim({\n targets: cardReveal,\n translateY: 0,\n duration: 225,\n easing: 'easeInOutQuad',\n complete: (anim) => {\n cardReveal.style.display = 'none';\n card.style.overflow = initialOverflow;\n }\n });\n };\n \n // Reveal Card\n const activators = card.querySelectorAll('.activator');\n activators.forEach(activator => {\n if (trigger === activator || activator.contains(trigger)) {\n card.style.overflow = 'hidden';\n cardReveal.style.display = 'block';\n anim({\n targets: cardReveal,\n translateY: '-100%',\n duration: 300,\n easing: 'easeInOutQuad'\n });\n }\n });\n \n\n }); \n });\n\n } \n}\n ","import { Component } from \"./component\";\nimport { M } from \"./global\";\n\n let _defaults = {\n duration: 200, // ms\n dist: -100, // zoom scale TODO: make this more intuitive as an option\n shift: 0, // spacing for center image\n padding: 0, // Padding between non center items\n numVisible: 5, // Number of visible items in carousel\n fullWidth: false, // Change to full width styles\n indicators: false, // Toggle indicators\n noWrap: false, // Don't wrap around and cycle through items.\n onCycleTo: null // Callback for when a new slide is cycled to.\n };\n\n export class Carousel extends Component {\n el: HTMLElement;\n hasMultipleSlides: boolean;\n showIndicators: boolean;\n noWrap: any;\n pressed: boolean;\n dragged: boolean;\n offset: number;\n target: number;\n images: HTMLElement[];\n itemWidth: any;\n itemHeight: any;\n dim: number;\n _autoScrollBound: any;\n _trackBound: any;\n _indicators: any;\n count: number;\n xform: string;\n private _handleCarouselTapBound: any;\n private _handleCarouselDragBound: any;\n private _handleCarouselReleaseBound: any;\n private _handleCarouselClickBound: any;\n _handleIndicatorClickBound: any;\n _handleThrottledResizeBound: any;\n verticalDragged: boolean;\n reference: any;\n referenceY: any;\n velocity: number;\n frame: number;\n timestamp: number;\n ticker: NodeJS.Timer;\n amplitude: number;\n center: number = 0;\n imageHeight: any;\n scrollingTimeout: any;\n oneTimeCallback: any;\n\n constructor(el: Element, options: Object) {\n super(Carousel, el, options);\n (this.el as any).M_Carousel = this;\n this.options = {...Carousel.defaults, ...options};\n\n // Setup\n this.hasMultipleSlides = this.el.querySelectorAll('.carousel-item').length > 1;\n this.showIndicators = this.options.indicators && this.hasMultipleSlides;\n this.noWrap = this.options.noWrap || !this.hasMultipleSlides;\n this.pressed = false;\n this.dragged = false;\n this.offset = this.target = 0;\n this.images = [];\n this.itemWidth = this.el.querySelector('.carousel-item').clientWidth;\n this.itemHeight = this.el.querySelector('.carousel-item').clientHeight;\n this.dim = this.itemWidth * 2 + this.options.padding || 1; // Make sure dim is non zero for divisions.\n this._autoScrollBound = this._autoScroll.bind(this);\n this._trackBound = this._track.bind(this);\n\n // Full Width carousel setup\n if (this.options.fullWidth) {\n this.options.dist = 0;\n this._setCarouselHeight();\n\n // Offset fixed items when indicators.\n if (this.showIndicators) {\n this.el.querySelector('.carousel-fixed-item')?.classList.add('with-indicators');\n }\n }\n\n // Iterate through slides\n this._indicators = document.createElement('ul');\n this._indicators.classList.add('indicators');\n\n this.el.querySelectorAll('.carousel-item').forEach((item: HTMLElement, i) => {\n this.images.push(item);\n if (this.showIndicators) {\n const indicator = document.createElement('li');\n indicator.classList.add('indicator-item');\n if (i === 0) {\n indicator.classList.add('active');\n }\n this._indicators.appendChild(indicator);\n }\n });\n\n if (this.showIndicators)\n this.el.appendChild(this._indicators);\n\n this.count = this.images.length;\n\n // Cap numVisible at count\n this.options.numVisible = Math.min(this.count, this.options.numVisible);\n\n // Setup cross browser string\n this.xform = 'transform';\n ['webkit', 'Moz', 'O', 'ms'].every((prefix) => {\n var e = prefix + 'Transform';\n if (typeof document.body.style[e] !== 'undefined') {\n this.xform = e;\n return false;\n }\n return true;\n });\n\n this._setupEventHandlers();\n this._scroll(this.offset);\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n let domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Carousel;\n }\n\n destroy() {\n this._removeEventHandlers();\n (this.el as any).M_Carousel = undefined;\n }\n\n _setupEventHandlers() {\n this._handleCarouselTapBound = this._handleCarouselTap.bind(this);\n this._handleCarouselDragBound = this._handleCarouselDrag.bind(this);\n this._handleCarouselReleaseBound = this._handleCarouselRelease.bind(this);\n this._handleCarouselClickBound = this._handleCarouselClick.bind(this);\n if (typeof window.ontouchstart !== 'undefined') {\n this.el.addEventListener('touchstart', this._handleCarouselTapBound);\n this.el.addEventListener('touchmove', this._handleCarouselDragBound);\n this.el.addEventListener('touchend', this._handleCarouselReleaseBound);\n }\n this.el.addEventListener('mousedown', this._handleCarouselTapBound);\n this.el.addEventListener('mousemove', this._handleCarouselDragBound);\n this.el.addEventListener('mouseup', this._handleCarouselReleaseBound);\n this.el.addEventListener('mouseleave', this._handleCarouselReleaseBound);\n this.el.addEventListener('click', this._handleCarouselClickBound);\n if (this.showIndicators && this._indicators) {\n this._handleIndicatorClickBound = this._handleIndicatorClick.bind(this);\n this._indicators.querySelectorAll('.indicator-item').forEach((el) => {\n el.addEventListener('click', this._handleIndicatorClickBound);\n });\n }\n // Resize\n let throttledResize = M.throttle(this._handleResize, 200, null);\n this._handleThrottledResizeBound = throttledResize.bind(this);\n window.addEventListener('resize', this._handleThrottledResizeBound);\n }\n\n _removeEventHandlers() {\n if (typeof window.ontouchstart !== 'undefined') {\n this.el.removeEventListener('touchstart', this._handleCarouselTapBound);\n this.el.removeEventListener('touchmove', this._handleCarouselDragBound);\n this.el.removeEventListener('touchend', this._handleCarouselReleaseBound);\n }\n this.el.removeEventListener('mousedown', this._handleCarouselTapBound);\n this.el.removeEventListener('mousemove', this._handleCarouselDragBound);\n this.el.removeEventListener('mouseup', this._handleCarouselReleaseBound);\n this.el.removeEventListener('mouseleave', this._handleCarouselReleaseBound);\n this.el.removeEventListener('click', this._handleCarouselClickBound);\n if (this.showIndicators && this._indicators) {\n this._indicators.querySelectorAll('.indicator-item').forEach((el) => {\n el.removeEventListener('click', this._handleIndicatorClickBound);\n });\n }\n window.removeEventListener('resize', this._handleThrottledResizeBound);\n }\n\n _handleCarouselTap(e) {\n // Fixes firefox draggable image bug\n if (e.type === 'mousedown' && (<HTMLElement>e.target).tagName === 'IMG') {\n e.preventDefault();\n }\n this.pressed = true;\n this.dragged = false;\n this.verticalDragged = false;\n this.reference = this._xpos(e);\n this.referenceY = this._ypos(e);\n\n this.velocity = this.amplitude = 0;\n this.frame = this.offset;\n this.timestamp = Date.now();\n clearInterval(this.ticker);\n this.ticker = setInterval(this._trackBound, 100);\n }\n\n _handleCarouselDrag(e) {\n let x, y, delta, deltaY;\n if (this.pressed) {\n x = this._xpos(e);\n y = this._ypos(e);\n delta = this.reference - x;\n deltaY = Math.abs(this.referenceY - y);\n if (deltaY < 30 && !this.verticalDragged) {\n // If vertical scrolling don't allow dragging.\n if (delta > 2 || delta < -2) {\n this.dragged = true;\n this.reference = x;\n this._scroll(this.offset + delta);\n }\n } else if (this.dragged) {\n // If dragging don't allow vertical scroll.\n e.preventDefault();\n e.stopPropagation();\n return false;\n } else {\n // Vertical scrolling.\n this.verticalDragged = true;\n }\n }\n if (this.dragged) {\n // If dragging don't allow vertical scroll.\n e.preventDefault();\n e.stopPropagation();\n return false;\n }\n }\n\n _handleCarouselRelease(e) {\n if (this.pressed) {\n this.pressed = false;\n } else {\n return;\n }\n clearInterval(this.ticker);\n this.target = this.offset;\n if (this.velocity > 10 || this.velocity < -10) {\n this.amplitude = 0.9 * this.velocity;\n this.target = this.offset + this.amplitude;\n }\n this.target = Math.round(this.target / this.dim) * this.dim;\n // No wrap of items.\n if (this.noWrap) {\n if (this.target >= this.dim * (this.count - 1)) {\n this.target = this.dim * (this.count - 1);\n } else if (this.target < 0) {\n this.target = 0;\n }\n }\n this.amplitude = this.target - this.offset;\n this.timestamp = Date.now();\n requestAnimationFrame(this._autoScrollBound);\n if (this.dragged) {\n e.preventDefault();\n e.stopPropagation();\n }\n return false;\n }\n\n _handleCarouselClick(e) {\n // Disable clicks if carousel was dragged.\n if (this.dragged) {\n e.preventDefault();\n e.stopPropagation();\n return false;\n }\n else if (!this.options.fullWidth) {\n const clickedElem = (<HTMLElement>e.target).closest('.carousel-item');\n const clickedIndex = [...clickedElem.parentNode.children].indexOf(clickedElem);\n const diff = this._wrap(this.center) - clickedIndex;\n // Disable clicks if carousel was shifted by click\n if (diff !== 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n // fixes https://github.com/materializecss/materialize/issues/180\n if (clickedIndex < 0) {\n // relative X position > center of carousel = clicked at the right part of the carousel\n if (e.clientX - e.target.getBoundingClientRect().left > this.el.clientWidth / 2) {\n this.next();\n } else {\n this.prev();\n }\n } else {\n this._cycleTo(clickedIndex);\n }\n }\n }\n\n _handleIndicatorClick(e: Event) {\n e.stopPropagation();\n const indicator = (<HTMLElement>e.target).closest('.indicator-item');\n if (indicator) {\n const index = [...indicator.parentNode.children].indexOf(indicator);\n this._cycleTo(index);\n }\n }\n\n _handleResize(e) {\n if (this.options.fullWidth) {\n this.itemWidth = this.el.querySelector('.carousel-item').clientWidth;\n this.imageHeight = this.el.querySelector('.carousel-item.active').clientHeight;\n this.dim = this.itemWidth * 2 + this.options.padding;\n this.offset = this.center * 2 * this.itemWidth;\n this.target = this.offset;\n this._setCarouselHeight(true);\n }\n else {\n this._scroll();\n }\n }\n\n _setCarouselHeight(imageOnly: boolean = false) {\n const firstSlide = this.el.querySelector('.carousel-item.active')\n ? this.el.querySelector('.carousel-item.active')\n : this.el.querySelector('.carousel-item');\n\n const firstImage = firstSlide.querySelector('img');\n if (firstImage) {\n if (firstImage.complete) {\n // If image won't trigger the load event\n const imageHeight = firstImage.clientHeight;\n if (imageHeight > 0) {\n this.el.style.height = imageHeight+'px';\n }\n else {\n // If image still has no height, use the natural dimensions to calculate\n const naturalWidth = firstImage.naturalWidth;\n const naturalHeight = firstImage.naturalHeight;\n const adjustedHeight = (this.el.clientWidth / naturalWidth) * naturalHeight;\n this.el.style.height = adjustedHeight+'px';\n }\n } else {\n // Get height when image is loaded normally\n firstImage.addEventListener('load', () => {\n this.el.style.height = firstImage.offsetHeight+'px';\n });\n }\n }\n else if (!imageOnly) {\n const slideHeight = firstSlide.clientHeight;\n this.el.style.height = slideHeight+'px';\n }\n }\n\n _xpos(e) {\n // touch event\n if (e.targetTouches && e.targetTouches.length >= 1) {\n return e.targetTouches[0].clientX;\n }\n // mouse event\n return e.clientX;\n }\n\n _ypos(e) {\n // touch event\n if (e.targetTouches && e.targetTouches.length >= 1) {\n return e.targetTouches[0].clientY;\n }\n // mouse event\n return e.clientY;\n }\n\n _wrap(x: number) {\n return x >= this.count\n ? x % this.count\n : x < 0\n ? this._wrap(this.count + (x % this.count))\n : x;\n }\n\n _track() {\n let now, elapsed, delta, v;\n now = Date.now();\n elapsed = now - this.timestamp;\n this.timestamp = now;\n delta = this.offset - this.frame;\n this.frame = this.offset;\n v = (1000 * delta) / (1 + elapsed);\n this.velocity = 0.8 * v + 0.2 * this.velocity;\n }\n\n _autoScroll() {\n let elapsed, delta;\n if (this.amplitude) {\n elapsed = Date.now() - this.timestamp;\n delta = this.amplitude * Math.exp(-elapsed / this.options.duration);\n if (delta > 2 || delta < -2) {\n this._scroll(this.target - delta);\n requestAnimationFrame(this._autoScrollBound);\n } else {\n this._scroll(this.target);\n }\n }\n }\n\n _scroll(x: number = 0) {\n // Track scrolling state\n if (!this.el.classList.contains('scrolling')) {\n this.el.classList.add('scrolling');\n }\n if (this.scrollingTimeout != null) {\n window.clearTimeout(this.scrollingTimeout);\n }\n this.scrollingTimeout = window.setTimeout(() => {\n this.el.classList.remove('scrolling');\n }, this.options.duration);\n\n // Start actual scroll\n let i,\n half,\n delta,\n dir,\n tween,\n el,\n alignment,\n zTranslation,\n tweenedOpacity,\n centerTweenedOpacity;\n let lastCenter = this.center;\n let numVisibleOffset = 1 / this.options.numVisible;\n\n this.offset = typeof x === 'number' ? x : this.offset;\n this.center = Math.floor((this.offset + this.dim / 2) / this.dim);\n\n delta = this.offset - this.center * this.dim;\n dir = delta < 0 ? 1 : -1;\n tween = (-dir * delta * 2) / this.dim;\n half = this.count >> 1;\n\n if (this.options.fullWidth) {\n alignment = 'translateX(0)';\n centerTweenedOpacity = 1;\n }\n else {\n alignment = 'translateX(' + (this.el.clientWidth - this.itemWidth) / 2 + 'px) ';\n alignment += 'translateY(' + (this.el.clientHeight - this.itemHeight) / 2 + 'px)';\n centerTweenedOpacity = 1 - numVisibleOffset * tween;\n }\n\n // Set indicator active\n if (this.showIndicators) {\n const diff = this.center % this.count;\n const activeIndicator = this._indicators.querySelector('.indicator-item.active');\n const activeIndicatorIndex = [...activeIndicator.parentNode.children].indexOf(activeIndicator);\n if (activeIndicatorIndex !== diff) {\n activeIndicator.classList.remove('active');\n const pos = diff < 0 ? this.count + diff : diff;\n this._indicators.querySelectorAll('.indicator-item')[pos].classList.add('active');\n }\n }\n\n // center\n // Don't show wrapped items.\n if (!this.noWrap || (this.center >= 0 && this.center < this.count)) {\n el = this.images[this._wrap(this.center)];\n\n // Add active class to center item.\n if (!el.classList.contains('active')) {\n this.el.querySelector('.carousel-item').classList.remove('active');\n el.classList.add('active');\n }\n\n let transformString = `${alignment} translateX(${-delta / 2}px) translateX(${dir *\n this.options.shift *\n tween *\n i}px) translateZ(${this.options.dist * tween}px)`;\n this._updateItemStyle(el, centerTweenedOpacity, 0, transformString);\n }\n\n for (i = 1; i <= half; ++i) {\n // right side\n if (this.options.fullWidth) {\n zTranslation = this.options.dist;\n tweenedOpacity = i === half && delta < 0 ? 1 - tween : 1;\n } else {\n zTranslation = this.options.dist * (i * 2 + tween * dir);\n tweenedOpacity = 1 - numVisibleOffset * (i * 2 + tween * dir);\n }\n // Don't show wrapped items.\n if (!this.noWrap || this.center + i < this.count) {\n el = this.images[this._wrap(this.center + i)];\n let transformString = `${alignment} translateX(${this.options.shift +\n (this.dim * i - delta) / 2}px) translateZ(${zTranslation}px)`;\n this._updateItemStyle(el, tweenedOpacity, -i, transformString);\n }\n // left side\n if (this.options.fullWidth) {\n zTranslation = this.options.dist;\n tweenedOpacity = i === half && delta > 0 ? 1 - tween : 1;\n } else {\n zTranslation = this.options.dist * (i * 2 - tween * dir);\n tweenedOpacity = 1 - numVisibleOffset * (i * 2 - tween * dir);\n }\n // Don't show wrapped items.\n if (!this.noWrap || this.center - i >= 0) {\n el = this.images[this._wrap(this.center - i)];\n let transformString = `${alignment} translateX(${-this.options.shift +\n (-this.dim * i - delta) / 2}px) translateZ(${zTranslation}px)`;\n this._updateItemStyle(el, tweenedOpacity, -i, transformString);\n }\n }\n // center\n // Don't show wrapped items.\n if (!this.noWrap || (this.center >= 0 && this.center < this.count)) {\n el = this.images[this._wrap(this.center)];\n let transformString = `${alignment} translateX(${-delta / 2}px) translateX(${dir *\n this.options.shift *\n tween}px) translateZ(${this.options.dist * tween}px)`;\n this._updateItemStyle(el, centerTweenedOpacity, 0, transformString);\n }\n // onCycleTo callback\n const _currItem = this.el.querySelectorAll('.carousel-item')[this._wrap(this.center)];\n\n if (lastCenter !== this.center && typeof this.options.onCycleTo === 'function') {\n this.options.onCycleTo.call(this, _currItem, this.dragged);\n }\n // One time callback\n if (typeof this.oneTimeCallback === 'function') {\n this.oneTimeCallback.call(this, _currItem, this.dragged);\n this.oneTimeCallback = null;\n }\n }\n\n _updateItemStyle(el: HTMLElement, opacity: number, zIndex: number, transform: string) {\n el.style[this.xform] = transform;\n el.style.zIndex = zIndex.toString();\n el.style.opacity = opacity.toString();\n el.style.visibility = 'visible';\n }\n\n _cycleTo(n: number, callback: Function = null) {\n let diff = (this.center % this.count) - n;\n // Account for wraparound.\n if (!this.noWrap) {\n if (diff < 0) {\n if (Math.abs(diff + this.count) < Math.abs(diff)) {\n diff += this.count;\n }\n } else if (diff > 0) {\n if (Math.abs(diff - this.count) < diff) {\n diff -= this.count;\n }\n }\n }\n this.target = this.dim * Math.round(this.offset / this.dim);\n // Next\n if (diff < 0) {\n this.target += this.dim * Math.abs(diff); \n } // Prev\n else if (diff > 0) {\n this.target -= this.dim * diff;\n }\n // Set one time callback\n if (typeof callback === 'function') {\n this.oneTimeCallback = callback;\n }\n // Scroll\n if (this.offset !== this.target) {\n this.amplitude = this.target - this.offset;\n this.timestamp = Date.now();\n requestAnimationFrame(this._autoScrollBound);\n }\n }\n\n next(n: number = 1) {\n if (n === undefined || isNaN(n)) {\n n = 1;\n }\n let index = this.center + n;\n if (index >= this.count || index < 0) {\n if (this.noWrap) return;\n index = this._wrap(index);\n }\n this._cycleTo(index);\n }\n\n prev(n: number = 1) {\n if (n === undefined || isNaN(n)) {\n n = 1;\n }\n let index = this.center - n;\n if (index >= this.count || index < 0) {\n if (this.noWrap) return;\n index = this._wrap(index);\n }\n this._cycleTo(index);\n }\n\n set(n: number, callback: Function) {\n if (n === undefined || isNaN(n)) {\n n = 0;\n }\n if (n > this.count || n < 0) {\n if (this.noWrap) return;\n n = this._wrap(n);\n }\n this._cycleTo(n, callback);\n }\n }","import { Component } from \"./component\";\n\nlet _defaults = {};\n\nexport class CharacterCounter extends Component {\n isInvalid: boolean;\n isValidLength: boolean;\n private _handleUpdateCounterBound: any;\n counterEl: HTMLSpanElement;\n\n constructor(el: Element, options: Object) {\n super(CharacterCounter, el, options);\n (this.el as any).M_CharacterCounter = this;\n this.options = {...CharacterCounter.defaults, ...options};\n this.isInvalid = false;\n this.isValidLength = false;\n this._setupCounter();\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n let domElem = !!el.jquery ? el[0] : el;\n return domElem.M_CharacterCounter;\n }\n\n destroy() {\n this._removeEventHandlers();\n (this.el as any).CharacterCounter = undefined;\n this._removeCounter();\n }\n\n _setupEventHandlers() {\n this._handleUpdateCounterBound = this.updateCounter.bind(this);\n this.el.addEventListener('focus', this._handleUpdateCounterBound, true);\n this.el.addEventListener('input', this._handleUpdateCounterBound, true);\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('focus', this._handleUpdateCounterBound, true);\n this.el.removeEventListener('input', this._handleUpdateCounterBound, true);\n }\n\n _setupCounter() {\n this.counterEl = document.createElement('span');\n this.counterEl.classList.add('character-counter');\n this.counterEl.style.float = 'right';\n this.counterEl.style.fontSize = '12px';\n this.counterEl.style.height = '1';\n this.el.parentElement.appendChild(this.counterEl);\n }\n\n _removeCounter() {\n this.counterEl.remove();\n }\n\n updateCounter() {\n let maxLength = parseInt(this.el.getAttribute('data-length')),\n actualLength = (this.el as HTMLInputElement).value.length;\n\n this.isValidLength = actualLength <= maxLength;\n let counterString = actualLength.toString();\n if (maxLength) {\n counterString += '/' + maxLength;\n this._validateInput();\n }\n this.counterEl.innerHTML = counterString;\n }\n\n _validateInput() {\n if (this.isValidLength && this.isInvalid) {\n this.isInvalid = false;\n this.el.classList.remove('invalid');\n }\n else if (!this.isValidLength && !this.isInvalid) {\n this.isInvalid = true;\n this.el.classList.remove('valid');\n this.el.classList.add('invalid');\n }\n }\n}\n","import { Component } from \"./component\";\nimport { M } from \"./global\";\nimport { Autocomplete } from \"./autocomplete\";\n\nlet _defaults = {\n data: [],\n placeholder: '',\n secondaryPlaceholder: '',\n autocompleteOptions: {},\n autocompleteOnly: false,\n limit: Infinity,\n onChipAdd: null,\n onChipSelect: null,\n onChipDelete: null\n};\n\ninterface DataBit {\n id: string, // required\n text?: string,\n image?: string,\n description?: string,\n}\n\nfunction gGetIndex(el: HTMLElement): number {\n return [...el.parentNode.children].indexOf(el);\n}\n\nexport class Chips extends Component {\n chipsData: DataBit[];\n hasAutocomplete: boolean;\n autocomplete: Autocomplete;\n _input: HTMLInputElement;\n _label: any;\n _chips: HTMLElement[];\n private _handleChipClickBound: any;\n private _handleInputKeydownBound: any;\n private _handleInputFocusBound: any;\n private _handleInputBlurBound: any;\n static _keydown: boolean;\n private _selectedChip: any;\n\n constructor(el, options) {\n super(Chips, el, options);\n (this.el as any).M_Chips = this;\n this.options = {...Chips.defaults, ...options};\n\n this.el.classList.add('chips', 'input-field');\n this.chipsData = [];\n this._chips = [];\n this._setupInput();\n this.hasAutocomplete = Object.keys(this.options.autocompleteOptions).length > 0;\n\n // Set input id\n if (!this._input.getAttribute('id'))\n this._input.setAttribute('id', M.guid());\n\n // Render initial chips\n if (this.options.data.length) {\n this.chipsData = this.options.data;\n this._renderChips();\n }\n // Setup autocomplete if needed\n if (this.hasAutocomplete) this._setupAutocomplete();\n this._setPlaceholder();\n this._setupLabel();\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n const domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Chips;\n }\n\n getData() {\n return this.chipsData;\n }\n\n destroy() {\n this._removeEventHandlers();\n this._chips.forEach(c => c.remove());\n this._chips = [];\n (this.el as any).M_Chips = undefined;\n }\n\n _setupEventHandlers() {\n this._handleChipClickBound = this._handleChipClick.bind(this);\n this._handleInputKeydownBound = this._handleInputKeydown.bind(this);\n this._handleInputFocusBound = this._handleInputFocus.bind(this);\n this._handleInputBlurBound = this._handleInputBlur.bind(this);\n this.el.addEventListener('click', this._handleChipClickBound);\n document.addEventListener('keydown', Chips._handleChipsKeydown);\n document.addEventListener('keyup', Chips._handleChipsKeyup);\n this.el.addEventListener('blur', Chips._handleChipsBlur, true);\n this._input.addEventListener('focus', this._handleInputFocusBound);\n this._input.addEventListener('blur', this._handleInputBlurBound);\n this._input.addEventListener('keydown', this._handleInputKeydownBound);\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('click', this._handleChipClickBound);\n document.removeEventListener('keydown', Chips._handleChipsKeydown);\n document.removeEventListener('keyup', Chips._handleChipsKeyup);\n this.el.removeEventListener('blur', Chips._handleChipsBlur, true);\n this._input.removeEventListener('focus', this._handleInputFocusBound);\n this._input.removeEventListener('blur', this._handleInputBlurBound);\n this._input.removeEventListener('keydown', this._handleInputKeydownBound);\n }\n\n _handleChipClick(e) {\n const _chip = (<HTMLElement>e.target).closest('.chip');\n const clickedClose = (<HTMLElement>e.target).classList.contains('close');\n if (_chip) {\n const index = [..._chip.parentNode.children].indexOf(_chip);\n if (clickedClose) {\n this.deleteChip(index);\n this._input.focus();\n }\n else {\n this.selectChip(index);\n }\n // Default handle click to focus on input\n }\n else {\n this._input.focus();\n }\n }\n\n static _handleChipsKeydown(e) {\n Chips._keydown = true;\n const chips = (<HTMLElement>e.target).closest('.chips');\n const chipsKeydown = e.target && chips;\n\n // Don't handle keydown inputs on input and textarea\n const tag = (<HTMLElement>e.target).tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || !chipsKeydown) return;\n \n const currChips: Chips = (chips as any).M_Chips;\n // backspace and delete\n if (e.keyCode === 8 || e.keyCode === 46) {\n e.preventDefault();\n let selectIndex = currChips.chipsData.length;\n if (currChips._selectedChip) {\n const index = gGetIndex(currChips._selectedChip);\n currChips.deleteChip(index);\n currChips._selectedChip = null;\n // Make sure selectIndex doesn't go negative\n selectIndex = Math.max(index - 1, 0);\n }\n if (currChips.chipsData.length)\n currChips.selectChip(selectIndex);\n else\n currChips._input.focus();\n }\n // left arrow key\n else if (e.keyCode === 37) {\n if (currChips._selectedChip) {\n const selectIndex = gGetIndex(currChips._selectedChip) - 1;\n if (selectIndex < 0) return;\n currChips.selectChip(selectIndex);\n }\n }\n // right arrow key\n else if (e.keyCode === 39) {\n if (currChips._selectedChip) {\n const selectIndex = gGetIndex(currChips._selectedChip) + 1;\n if (selectIndex >= currChips.chipsData.length)\n currChips._input.focus();\n else\n currChips.selectChip(selectIndex);\n }\n }\n }\n\n static _handleChipsKeyup(e) {\n Chips._keydown = false;\n }\n\n static _handleChipsBlur(e) {\n if (!Chips._keydown && document.hidden) {\n const chips = (<HTMLElement>e.target).closest('.chips');\n const currChips: Chips = (chips as any).M_Chips;\n currChips._selectedChip = null;\n }\n }\n\n _handleInputFocus() {\n this.el.classList.add('focus');\n }\n\n _handleInputBlur() {\n this.el.classList.remove('focus');\n }\n\n _handleInputKeydown(e) {\n Chips._keydown = true;\n // enter\n if (e.keyCode === 13) {\n // Override enter if autocompleting.\n if (this.hasAutocomplete && this.autocomplete && this.autocomplete.isOpen) {\n return;\n }\n e.preventDefault();\n if (!this.hasAutocomplete || (this.hasAutocomplete && !this.options.autocompleteOnly)) {\n this.addChip({id: this._input.value});\n }\n this._input.value = '';\n // delete or left\n }\n else if (\n (e.keyCode === 8 || e.keyCode === 37) &&\n this._input.value === '' &&\n this.chipsData.length\n ) {\n e.preventDefault();\n this.selectChip(this.chipsData.length - 1);\n }\n }\n\n _renderChip(chip: DataBit): HTMLDivElement {\n if (!chip.id) return;\n const renderedChip = document.createElement('div');\n renderedChip.classList.add('chip');\n renderedChip.innerText = chip.text || chip.id;\n renderedChip.setAttribute('tabindex', \"0\");\n const closeIcon = document.createElement('i');\n closeIcon.classList.add('material-icons', 'close');\n closeIcon.innerText = 'close';\n // attach image if needed\n if (chip.image) {\n const img = document.createElement('img');\n img.setAttribute('src', chip.image);\n renderedChip.insertBefore(img, renderedChip.firstChild);\n }\n renderedChip.appendChild(closeIcon);\n return renderedChip;\n }\n\n _renderChips() {\n this._chips = []; //.remove();\n for (let i = 0; i < this.chipsData.length; i++) {\n const chipElem = this._renderChip(this.chipsData[i]);\n this.el.appendChild(chipElem);\n this._chips.push(chipElem);\n }\n // move input to end\n this.el.append(this._input);\n }\n\n _setupAutocomplete() {\n this.options.autocompleteOptions.onAutocomplete = (items) => {\n if (items.length > 0) this.addChip(items[0]);\n this._input.value = '';\n this._input.focus();\n };\n this.autocomplete = Autocomplete.init(this._input, this.options.autocompleteOptions);\n }\n\n _setupInput() {\n this._input = this.el.querySelector('input');\n if (!this._input) {\n this._input = document.createElement('input');\n this.el.append(this._input);\n }\n this._input.classList.add('input');\n }\n\n _setupLabel() {\n this._label = this.el.querySelector('label');\n if (this._label) this._label.setAttribute('for', this._input.getAttribute('id'));\n }\n\n _setPlaceholder() {\n if (this.chipsData !== undefined && !this.chipsData.length && this.options.placeholder) {\n this._input.placeholder = this.options.placeholder;\n }\n else if (\n (this.chipsData === undefined || !!this.chipsData.length) &&\n this.options.secondaryPlaceholder\n ) {\n this._input.placeholder = this.options.secondaryPlaceholder;\n }\n }\n\n _isValidAndNotExist(chip: DataBit) {\n const isValid = !!chip.id;\n const doesNotExist = !this.chipsData.some(item => item.id == chip.id);\n return isValid && doesNotExist;\n }\n\n addChip(chip: DataBit) {\n if (!this._isValidAndNotExist(chip) || this.chipsData.length >= this.options.limit) return;\n const renderedChip = this._renderChip(chip);\n this._chips.push(renderedChip);\n this.chipsData.push(chip);\n //$(this._input).before(renderedChip);\n this._input.before(renderedChip);\n this._setPlaceholder();\n // fire chipAdd callback\n if (typeof this.options.onChipAdd === 'function') {\n this.options.onChipAdd(this.el, renderedChip);\n }\n }\n\n deleteChip(chipIndex: number) {\n const chip = this._chips[chipIndex];\n this._chips[chipIndex].remove();\n this._chips.splice(chipIndex, 1);\n this.chipsData.splice(chipIndex, 1);\n this._setPlaceholder();\n // fire chipDelete callback\n if (typeof this.options.onChipDelete === 'function') {\n this.options.onChipDelete(this.el, chip);\n }\n }\n\n selectChip(chipIndex: number) {\n const chip = this._chips[chipIndex];\n this._selectedChip = chip;\n chip.focus();\n // fire chipSelect callback\n if (typeof this.options.onChipSelect === 'function') {\n this.options.onChipSelect(this.el, chip);\n }\n }\n\n static Init(){\n document.addEventListener(\"DOMContentLoaded\", () => {\n // Handle removal of static chips.\n document.body.addEventListener('click', e => {\n if ((<HTMLElement>e.target).closest('.chip .close')) {\n const chips = (<HTMLElement>e.target).closest('.chips');\n if (chips && (chips as any).M_Chips == undefined) return;\n (<HTMLElement>e.target).closest('.chip').remove();\n }\n });\n });\n }\n\n static {\n Chips._keydown = false;\n }\n}\n","import { Component } from \"./component\";\nimport anim from \"animejs\";\n\nconst _defaults = {\n accordion: true,\n onOpenStart: undefined,\n onOpenEnd: undefined,\n onCloseStart: undefined,\n onCloseEnd: undefined,\n inDuration: 300,\n outDuration: 300\n};\n\nexport class Collapsible extends Component {\n private _headers: HTMLElement[];\n private _handleCollapsibleClickBound: any;\n private _handleCollapsibleKeydownBound: any;\n\n constructor(el, options) {\n super(Collapsible, el, options);\n (this.el as any).M_Collapsible = this;\n this.options = {...Collapsible.defaults, ...options};\n // Setup tab indices\n this._headers = Array.from(this.el.querySelectorAll('li > .collapsible-header'));\n this._headers.forEach(el => el.tabIndex = 0);\n this._setupEventHandlers();\n // Open first active\n const activeBodies: HTMLElement[] = Array.from(this.el.querySelectorAll('li.active > .collapsible-body'));\n if (this.options.accordion)\n if (activeBodies.length > 0)\n activeBodies[0].style.display = 'block'; // Accordion\n else \n activeBodies.forEach(el => el.style.display = 'block'); // Expandables\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n const domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Collapsible;\n }\n\n destroy() {\n this._removeEventHandlers();\n (this.el as any).M_Collapsible = undefined;\n }\n\n _setupEventHandlers() {\n this._handleCollapsibleClickBound = this._handleCollapsibleClick.bind(this);\n this._handleCollapsibleKeydownBound = this._handleCollapsibleKeydown.bind(this);\n this.el.addEventListener('click', this._handleCollapsibleClickBound);\n this._headers.forEach(header => header.addEventListener('keydown', this._handleCollapsibleKeydownBound));\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('click', this._handleCollapsibleClickBound);\n this._headers.forEach(header => header.removeEventListener('keydown', this._handleCollapsibleKeydownBound));\n }\n\n _handleCollapsibleClick(e) {\n const header = e.target.closest('.collapsible-header');\n if (e.target && header) {\n const collapsible = header.closest('.collapsible');\n if (collapsible !== this.el) return;\n\n const li = header.closest('li');\n const isActive = li.classList.contains('active');\n const index = [...li.parentNode.children].indexOf(li);\n\n if (isActive)\n this.close(index);\n else\n this.open(index);\n }\n }\n\n _handleCollapsibleKeydown(e) {\n if (e.keyCode === 13) {\n this._handleCollapsibleClickBound(e);\n }\n }\n\n _animateIn(index: number) {\n const li = this.el.children[index];\n if (!li) return;\n const body: HTMLElement = li.querySelector('.collapsible-body');\n anim.remove(body);\n body.style.display = 'block';\n body.style.overflow = 'hidden';\n body.style.height = '0';\n body.style.paddingTop = '';\n body.style.paddingBottom = '';\n const pTop = getComputedStyle(body).paddingTop; // . css('padding-top');\n const pBottom = getComputedStyle(body).paddingBottom; //body.css('padding-bottom');\n const finalHeight = body.scrollHeight;\n body.style.paddingTop = '0';\n body.style.paddingBottom = '0';\n anim({\n targets: body,\n height: finalHeight,\n paddingTop: pTop,\n paddingBottom: pBottom,\n duration: this.options.inDuration,\n easing: 'easeInOutCubic',\n complete: (anim) => {\n body.style.overflow = '';\n body.style.height = '';\n body.style.paddingTop = '';\n body.style.paddingBottom = '';\n // onOpenEnd callback\n if (typeof this.options.onOpenEnd === 'function') {\n this.options.onOpenEnd.call(this, li);\n }\n }\n });\n }\n\n _animateOut(index: number) {\n const li = this.el.children[index];\n if (!li) return;\n const body: HTMLElement = li.querySelector('.collapsible-body');\n anim.remove(body);\n body.style.overflow = 'hidden';\n anim({\n targets: body,\n height: 0,\n paddingTop: 0,\n paddingBottom: 0,\n duration: this.options.outDuration,\n easing: 'easeInOutCubic',\n complete: () => {\n body.style.overflow = '';\n body.style.height = '';\n body.style.padding = '';\n body.style.display = '';\n // onCloseEnd callback\n if (typeof this.options.onCloseEnd === 'function') {\n this.options.onCloseEnd.call(this, li);\n }\n }\n });\n }\n\n open(index: number) {\n const listItems = Array.from(this.el.children).filter(c => c.tagName === 'LI');\n const li = listItems[index];\n if (li && !li.classList.contains('active')) {\n // onOpenStart callback\n if (typeof this.options.onOpenStart === 'function') {\n this.options.onOpenStart.call(this, li);\n }\n // Handle accordion behavior\n if (this.options.accordion) {\n const activeLis = listItems.filter(li => li.classList.contains('active'));\n activeLis.forEach(activeLi => {\n const index = listItems.indexOf(activeLi);\n this.close(index);\n });\n }\n // Animate in\n li.classList.add('active');\n this._animateIn(index);\n }\n }\n\n close(index: number) {\n const li = Array.from(this.el.children).filter(c => c.tagName === 'LI')[index];\n if (li && li.classList.contains('active')) {\n // onCloseStart callback\n if (typeof this.options.onCloseStart === 'function') {\n this.options.onCloseStart.call(this, li);\n }\n // Animate out\n li.classList.remove('active');\n this._animateOut(index);\n }\n }\n}\n","\nexport class Component {\n\n constructor(classDef, protected el: Element, protected options) {\n // Display error if el is valid HTML Element\n if (!(el instanceof Element)) {\n console.error(Error(el + ' is not an HTML Element'));\n }\n // If exists, destroy and reinitialize in child\n let ins = classDef.getInstance(el);\n if (!!ins) {\n ins.destroy();\n }\n this.el = el;\n }\n\n static init(classDef, els, options) {\n let instances = null;\n if (els instanceof Element) {\n instances = new classDef(els, options);\n }\n else if (!!els && (els.jquery || els.cash || els instanceof NodeList || els instanceof HTMLCollection)) {\n let instancesArr = [];\n for (let i = 0; i < els.length; i++) {\n instancesArr.push(new classDef(els[i], options));\n }\n instances = instancesArr;\n }\n return instances;\n }\n}\n","import { Component } from \"./component\";\nimport { M } from \"./global\";\nimport { Modal } from \"./modal\";\nimport { FormSelect } from \"./select\";\n\nlet _defaults = {\n // Close when date is selected\n autoClose: false,\n // the default output format for the input field value\n format: 'mmm dd, yyyy',\n // Used to create date object from current input string\n parse: null,\n // The initial date to view when first opened\n defaultDate: null,\n // Make the `defaultDate` the initial selected value\n setDefaultDate: false,\n disableWeekends: false,\n disableDayFn: null,\n // First day of week (0: Sunday, 1: Monday etc)\n firstDay: 0,\n // The earliest date that can be selected\n minDate: null,\n // Thelatest date that can be selected\n maxDate: null,\n // Number of years either side, or array of upper/lower range\n yearRange: 10,\n // used internally (don't config outside)\n minYear: 0,\n maxYear: 9999,\n minMonth: undefined,\n maxMonth: undefined,\n startRange: null,\n endRange: null,\n isRTL: false,\n // Render the month after year in the calendar title\n showMonthAfterYear: false,\n // Render days of the calendar grid that fall in the next or previous month\n showDaysInNextAndPreviousMonths: false,\n // Specify a DOM element to render the calendar in\n container: null,\n // Show clear button\n showClearBtn: false,\n // internationalization\n i18n: {\n cancel: 'Cancel',\n clear: 'Clear',\n done: 'Ok',\n previousMonth: '‹',\n nextMonth: '›',\n months: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n monthsShort: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n weekdaysAbbrev: ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n },\n // events array\n events: [],\n // callback function\n onSelect: null,\n onOpen: null,\n onClose: null,\n onDraw: null\n};\n\n export class Datepicker extends Component {\n el: HTMLInputElement\n id: string;\n isOpen: boolean;\n modal: Modal;\n calendarEl: HTMLElement;\n clearBtn: HTMLElement;\n doneBtn: HTMLElement;\n cancelBtn: HTMLElement;\n modalEl: HTMLElement;\n yearTextEl: HTMLElement;\n dateTextEl: HTMLElement;\n date: any;\n formats: any;\n calendars: any;\n private _y: any;\n private _m: any;\n private _handleInputKeydownBound: any;\n private _handleInputClickBound: any;\n private _handleInputChangeBound: any;\n private _handleCalendarClickBound: any;\n private _finishSelectionBound: any;\n private _closeBound: any;\n private _handleClearClickBound: any;\n static _template: string;\n\n constructor(el, options) {\n super(Datepicker, el, options);\n (this.el as any).M_Datepicker = this;\n this.options = {...Datepicker.defaults, ...options};\n\n // make sure i18n defaults are not lost when only few i18n option properties are passed\n if (!!options && options.hasOwnProperty('i18n') && typeof options.i18n === 'object') {\n this.options.i18n = {...Datepicker.defaults.i18n, ...options.i18n};\n }\n\n // Remove time component from minDate and maxDate options\n if (this.options.minDate) this.options.minDate.setHours(0, 0, 0, 0);\n if (this.options.maxDate) this.options.maxDate.setHours(0, 0, 0, 0);\n\n this.id = M.guid();\n\n this._setupVariables();\n this._insertHTMLIntoDOM();\n this._setupModal();\n this._setupEventHandlers();\n\n if (!this.options.defaultDate) {\n this.options.defaultDate = new Date(Date.parse(this.el.value));\n }\n\n let defDate = this.options.defaultDate;\n if (Datepicker._isDate(defDate)) {\n if (this.options.setDefaultDate) {\n this.setDate(defDate, true);\n this.setInputValue();\n }\n else {\n this.gotoDate(defDate);\n }\n }\n else {\n this.gotoDate(new Date());\n }\n this.isOpen = false;\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static _isDate(obj) {\n return /Date/.test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n }\n\n static _isWeekend(date) {\n let day = date.getDay();\n return day === 0 || day === 6;\n }\n\n static _setToStartOfDay(date) {\n if (Datepicker._isDate(date)) date.setHours(0, 0, 0, 0);\n }\n\n static _getDaysInMonth(year, month) {\n return [31, Datepicker._isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][\n month\n ];\n }\n\n static _isLeapYear(year) {\n // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n static _compareDates(a, b) {\n // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n return a.getTime() === b.getTime();\n } \n\n static getInstance(el) {\n let domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Datepicker;\n }\n\n destroy() {\n this._removeEventHandlers();\n this.modal.destroy();\n this.modalEl.remove();\n this.destroySelects();\n (this.el as any).M_Datepicker = undefined;\n }\n\n destroySelects() {\n let oldYearSelect = this.calendarEl.querySelector('.orig-select-year');\n if (oldYearSelect) {\n FormSelect.getInstance(oldYearSelect).destroy();\n }\n let oldMonthSelect = this.calendarEl.querySelector('.orig-select-month');\n if (oldMonthSelect) {\n FormSelect.getInstance(oldMonthSelect).destroy();\n }\n }\n\n _insertHTMLIntoDOM() {\n if (this.options.showClearBtn) {\n this.clearBtn.style.visibility = '';\n this.clearBtn.innerText = this.options.i18n.clear;\n }\n this.doneBtn.innerText = this.options.i18n.done;\n this.cancelBtn.innerText = this.options.i18n.cancel;\n\n if (this.options.container) {\n const optEl = this.options.container;\n this.options.container =\n optEl instanceof HTMLElement ? optEl : document.querySelector(optEl);\n this.options.container.append(this.modalEl);\n }\n else {\n //this.modalEl.before(this.el);\n this.el.parentElement.appendChild(this.modalEl);\n }\n }\n\n _setupModal() {\n this.modalEl.id = 'modal-' + this.id;\n this.modal = Modal.init(this.modalEl, {\n onCloseEnd: () => {\n this.isOpen = false;\n }\n });\n }\n\n toString(format: string | ((d: Date) => string) = null): string {\n format = format || this.options.format;\n if (typeof format === 'function') return format(this.date);\n if (!Datepicker._isDate(this.date)) return '';\n // String Format\n const formatArray = format.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g);\n const formattedDate = formatArray\n .map(label => this.formats[label] ? this.formats[label]() : label)\n .join('');\n return formattedDate;\n }\n\n setDate(date, preventOnSelect: boolean = false) {\n if (!date) {\n this.date = null;\n this._renderDateDisplay();\n return this.draw();\n }\n if (typeof date === 'string') {\n date = new Date(Date.parse(date));\n }\n if (!Datepicker._isDate(date)) {\n return;\n }\n let min = this.options.minDate,\n max = this.options.maxDate;\n if (Datepicker._isDate(min) && date < min) {\n date = min;\n }\n else if (Datepicker._isDate(max) && date > max) {\n date = max;\n }\n this.date = new Date(date.getTime());\n this._renderDateDisplay();\n Datepicker._setToStartOfDay(this.date);\n this.gotoDate(this.date);\n if (!preventOnSelect && typeof this.options.onSelect === 'function') {\n this.options.onSelect.call(this, this.date);\n }\n }\n\n setInputValue() {\n this.el.value = this.toString();\n this.el.dispatchEvent(new CustomEvent('change', {detail: {firedBy: this}}));\n }\n\n _renderDateDisplay() {\n let displayDate = Datepicker._isDate(this.date) ? this.date : new Date();\n let i18n = this.options.i18n;\n let day = i18n.weekdaysShort[displayDate.getDay()];\n let month = i18n.monthsShort[displayDate.getMonth()];\n let date = displayDate.getDate();\n this.yearTextEl.innerHTML = displayDate.getFullYear();\n this.dateTextEl.innerHTML = `${day}, ${month} ${date}`;\n }\n\n gotoDate(date) {\n let newCalendar = true;\n if (!Datepicker._isDate(date)) {\n return;\n }\n if (this.calendars) {\n let firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n lastVisibleDate = new Date(\n this.calendars[this.calendars.length - 1].year,\n this.calendars[this.calendars.length - 1].month,\n 1\n ),\n visibleDate = date.getTime();\n // get the end of the month\n lastVisibleDate.setMonth(lastVisibleDate.getMonth() + 1);\n lastVisibleDate.setDate(lastVisibleDate.getDate() - 1);\n newCalendar =\n visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate;\n }\n if (newCalendar) {\n this.calendars = [\n {\n month: date.getMonth(),\n year: date.getFullYear()\n }\n ];\n }\n this.adjustCalendars();\n }\n\n adjustCalendars() {\n this.calendars[0] = this.adjustCalendar(this.calendars[0]);\n this.draw();\n }\n\n adjustCalendar(calendar) {\n if (calendar.month < 0) {\n calendar.year -= Math.ceil(Math.abs(calendar.month) / 12);\n calendar.month += 12;\n }\n if (calendar.month > 11) {\n calendar.year += Math.floor(Math.abs(calendar.month) / 12);\n calendar.month -= 12;\n }\n return calendar;\n }\n\n nextMonth() {\n this.calendars[0].month++;\n this.adjustCalendars();\n }\n\n prevMonth() {\n this.calendars[0].month--;\n this.adjustCalendars();\n }\n\n render(year, month, randId) {\n let opts = this.options,\n now = new Date(),\n days = Datepicker._getDaysInMonth(year, month),\n before = new Date(year, month, 1).getDay(),\n data = [],\n row = [];\n Datepicker._setToStartOfDay(now);\n if (opts.firstDay > 0) {\n before -= opts.firstDay;\n if (before < 0) {\n before += 7;\n }\n }\n let previousMonth = month === 0 ? 11 : month - 1,\n nextMonth = month === 11 ? 0 : month + 1,\n yearOfPreviousMonth = month === 0 ? year - 1 : year,\n yearOfNextMonth = month === 11 ? year + 1 : year,\n daysInPreviousMonth = Datepicker._getDaysInMonth(yearOfPreviousMonth, previousMonth);\n let cells = days + before,\n after = cells;\n while (after > 7) {\n after -= 7;\n }\n cells += 7 - after;\n let isWeekSelected = false;\n for (let i = 0, r = 0; i < cells; i++) {\n let day = new Date(year, month, 1 + (i - before)),\n isSelected = Datepicker._isDate(this.date)\n ? Datepicker._compareDates(day, this.date)\n : false,\n isToday = Datepicker._compareDates(day, now),\n hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n isEmpty = i < before || i >= days + before,\n dayNumber = 1 + (i - before),\n monthNumber = month,\n yearNumber = year,\n isStartRange = opts.startRange && Datepicker._compareDates(opts.startRange, day),\n isEndRange = opts.endRange && Datepicker._compareDates(opts.endRange, day),\n isInRange =\n opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n isDisabled =\n (opts.minDate && day < opts.minDate) ||\n (opts.maxDate && day > opts.maxDate) ||\n (opts.disableWeekends && Datepicker._isWeekend(day)) ||\n (opts.disableDayFn && opts.disableDayFn(day));\n\n if (isEmpty) {\n if (i < before) {\n dayNumber = daysInPreviousMonth + dayNumber;\n monthNumber = previousMonth;\n yearNumber = yearOfPreviousMonth;\n } else {\n dayNumber = dayNumber - days;\n monthNumber = nextMonth;\n yearNumber = yearOfNextMonth;\n }\n }\n\n let dayConfig = {\n day: dayNumber,\n month: monthNumber,\n year: yearNumber,\n hasEvent: hasEvent,\n isSelected: isSelected,\n isToday: isToday,\n isDisabled: isDisabled,\n isEmpty: isEmpty,\n isStartRange: isStartRange,\n isEndRange: isEndRange,\n isInRange: isInRange,\n showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths\n };\n\n row.push(this.renderDay(dayConfig));\n\n if (++r === 7) {\n data.push(this.renderRow(row, opts.isRTL, isWeekSelected));\n row = [];\n r = 0;\n isWeekSelected = false;\n }\n }\n return this.renderTable(opts, data, randId);\n }\n\n renderDay(opts) {\n let arr = [];\n let ariaSelected = 'false';\n if (opts.isEmpty) {\n if (opts.showDaysInNextAndPreviousMonths) {\n arr.push('is-outside-current-month');\n arr.push('is-selection-disabled');\n } else {\n return '<td class=\"is-empty\"></td>';\n }\n }\n if (opts.isDisabled) {\n arr.push('is-disabled');\n }\n\n if (opts.isToday) {\n arr.push('is-today');\n }\n if (opts.isSelected) {\n arr.push('is-selected');\n ariaSelected = 'true';\n }\n if (opts.hasEvent) {\n arr.push('has-event');\n }\n if (opts.isInRange) {\n arr.push('is-inrange');\n }\n if (opts.isStartRange) {\n arr.push('is-startrange');\n }\n if (opts.isEndRange) {\n arr.push('is-endrange');\n }\n return (\n `<td data-day=\"${opts.day}\" class=\"${arr.join(' ')}\" aria-selected=\"${ariaSelected}\">` +\n `<button class=\"datepicker-day-button\" type=\"button\" data-year=\"${opts.year}\" data-month=\"${opts.month}\" data-day=\"${opts.day}\">${opts.day}</button>` +\n '</td>'\n );\n }\n\n renderRow(days, isRTL, isRowSelected) {\n return (\n '<tr class=\"datepicker-row' +\n (isRowSelected ? ' is-selected' : '') +\n '\">' +\n (isRTL ? days.reverse() : days).join('') +\n '</tr>'\n );\n }\n\n renderTable(opts, data, randId) {\n return (\n '<div class=\"datepicker-table-wrapper\"><table cellpadding=\"0\" cellspacing=\"0\" class=\"datepicker-table\" role=\"grid\" aria-labelledby=\"' +\n randId +\n '\">' +\n this.renderHead(opts) +\n this.renderBody(data) +\n '</table></div>'\n );\n }\n\n renderHead(opts) {\n let i,\n arr = [];\n for (i = 0; i < 7; i++) {\n arr.push(\n `<th scope=\"col\"><abbr title=\"${this.renderDayName(opts, i)}\">${this.renderDayName(\n opts,\n i,\n true\n )}</abbr></th>`\n );\n }\n return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';\n }\n\n renderBody(rows) {\n return '<tbody>' + rows.join('') + '</tbody>';\n }\n\n renderTitle(instance, c, year, month, refYear, randId) {\n let i,\n j,\n arr,\n opts = this.options,\n isMinYear = year === opts.minYear,\n isMaxYear = year === opts.maxYear,\n html =\n '<div id=\"' +\n randId +\n '\" class=\"datepicker-controls\" role=\"heading\" aria-live=\"assertive\">',\n monthHtml,\n yearHtml,\n prev = true,\n next = true;\n\n for (arr = [], i = 0; i < 12; i++) {\n arr.push(\n '<option value=\"' +\n (year === refYear ? i - c : 12 + i - c) +\n '\"' +\n (i === month ? ' selected=\"selected\"' : '') +\n ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth)\n ? 'disabled=\"disabled\"'\n : '') +\n '>' +\n opts.i18n.months[i] +\n '</option>'\n );\n }\n\n monthHtml = '<select class=\"datepicker-select orig-select-month\" tabindex=\"-1\">'+arr.join('')+'</select>';\n\n if (Array.isArray(opts.yearRange)) {\n i = opts.yearRange[0];\n j = opts.yearRange[1] + 1;\n }\n else {\n i = year - opts.yearRange;\n j = 1 + year + opts.yearRange;\n }\n\n for (arr = []; i < j && i <= opts.maxYear; i++) {\n if (i >= opts.minYear) {\n arr.push(`<option value=\"${i}\" ${i === year ? 'selected=\"selected\"' : ''}>${i}</option>`);\n }\n }\n if (opts.yearRangeReverse) arr.reverse();\n\n yearHtml = `<select class=\"datepicker-select orig-select-year\" tabindex=\"-1\">${arr.join('')}</select>`;\n\n let leftArrow =\n '<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\"/><path d=\"M0-.5h24v24H0z\" fill=\"none\"/></svg>';\n html += `<button class=\"month-prev${\n prev ? '' : ' is-disabled'\n } btn-flat\" type=\"button\">${leftArrow}</button>`;\n\n html += '<div class=\"selects-container\">';\n if (opts.showMonthAfterYear) {\n html += yearHtml + monthHtml;\n } else {\n html += monthHtml + yearHtml;\n }\n html += '</div>';\n\n if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n prev = false;\n }\n\n if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n next = false;\n }\n\n let rightArrow =\n '<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\"/><path d=\"M0-.25h24v24H0z\" fill=\"none\"/></svg>';\n html += `<button class=\"month-next${\n next ? '' : ' is-disabled'\n } btn-flat\" type=\"button\">${rightArrow}</button>`;\n\n return (html += '</div>');\n }\n\n // refresh HTML\n draw(force: boolean = false) {\n if (!this.isOpen && !force) return;\n let opts = this.options,\n minYear = opts.minYear,\n maxYear = opts.maxYear,\n minMonth = opts.minMonth,\n maxMonth = opts.maxMonth,\n html = '',\n randId;\n\n if (this._y <= minYear) {\n this._y = minYear;\n if (!isNaN(minMonth) && this._m < minMonth) {\n this._m = minMonth;\n }\n }\n if (this._y >= maxYear) {\n this._y = maxYear;\n if (!isNaN(maxMonth) && this._m > maxMonth) {\n this._m = maxMonth;\n }\n }\n\n randId =\n 'datepicker-title-' +\n Math.random()\n .toString(36)\n .replace(/[^a-z]+/g, '')\n .substr(0, 2);\n\n for (let c = 0; c < 1; c++) {\n this._renderDateDisplay();\n html +=\n this.renderTitle(\n this,\n c,\n this.calendars[c].year,\n this.calendars[c].month,\n this.calendars[0].year,\n randId\n ) + this.render(this.calendars[c].year, this.calendars[c].month, randId);\n }\n\n this.destroySelects();\n\n this.calendarEl.innerHTML = html;\n\n // Init Materialize Select\n let yearSelect = this.calendarEl.querySelector('.orig-select-year');\n let monthSelect = this.calendarEl.querySelector('.orig-select-month');\n FormSelect.init(yearSelect, {\n classes: 'select-year',\n dropdownOptions: { container: document.body, constrainWidth: false }\n });\n FormSelect.init(monthSelect, {\n classes: 'select-month',\n dropdownOptions: { container: document.body, constrainWidth: false }\n });\n\n // Add change handlers for select\n yearSelect.addEventListener('change', this._handleYearChange.bind(this));\n monthSelect.addEventListener('change', this._handleMonthChange.bind(this));\n\n if (typeof this.options.onDraw === 'function') {\n this.options.onDraw(this);\n }\n }\n\n _setupEventHandlers() {\n this._handleInputKeydownBound = this._handleInputKeydown.bind(this);\n this._handleInputClickBound = this._handleInputClick.bind(this);\n this._handleInputChangeBound = this._handleInputChange.bind(this);\n this._handleCalendarClickBound = this._handleCalendarClick.bind(this);\n this._finishSelectionBound = this._finishSelection.bind(this);\n this._handleMonthChange = this._handleMonthChange.bind(this);\n this._closeBound = this.close.bind(this);\n\n this.el.addEventListener('click', this._handleInputClickBound);\n this.el.addEventListener('keydown', this._handleInputKeydownBound);\n this.el.addEventListener('change', this._handleInputChangeBound);\n this.calendarEl.addEventListener('click', this._handleCalendarClickBound);\n this.doneBtn.addEventListener('click', this._finishSelectionBound);\n this.cancelBtn.addEventListener('click', this._closeBound);\n\n if (this.options.showClearBtn) {\n this._handleClearClickBound = this._handleClearClick.bind(this);\n this.clearBtn.addEventListener('click', this._handleClearClickBound);\n }\n }\n\n _setupVariables() {\n const template = document.createElement('template');\n template.innerHTML = Datepicker._template.trim();\n this.modalEl = <HTMLElement>template.content.firstChild;\n\n this.calendarEl = this.modalEl.querySelector('.datepicker-calendar');\n this.yearTextEl = this.modalEl.querySelector('.year-text');\n this.dateTextEl = this.modalEl.querySelector('.date-text');\n if (this.options.showClearBtn) {\n this.clearBtn = this.modalEl.querySelector('.datepicker-clear');\n }\n this.doneBtn = this.modalEl.querySelector('.datepicker-done');\n this.cancelBtn = this.modalEl.querySelector('.datepicker-cancel');\n\n this.formats = {\n d: () => {\n return this.date.getDate();\n },\n dd: () => {\n let d = this.date.getDate();\n return (d < 10 ? '0' : '') + d;\n },\n ddd: () => {\n return this.options.i18n.weekdaysShort[this.date.getDay()];\n },\n dddd: () => {\n return this.options.i18n.weekdays[this.date.getDay()];\n },\n m: () => {\n return this.date.getMonth() + 1;\n },\n mm: () => {\n let m = this.date.getMonth() + 1;\n return (m < 10 ? '0' : '') + m;\n },\n mmm: () => {\n return this.options.i18n.monthsShort[this.date.getMonth()];\n },\n mmmm: () => {\n return this.options.i18n.months[this.date.getMonth()];\n },\n yy: () => {\n return ('' + this.date.getFullYear()).slice(2);\n },\n yyyy: () => {\n return this.date.getFullYear();\n }\n };\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('click', this._handleInputClickBound);\n this.el.removeEventListener('keydown', this._handleInputKeydownBound);\n this.el.removeEventListener('change', this._handleInputChangeBound);\n this.calendarEl.removeEventListener('click', this._handleCalendarClickBound);\n }\n\n _handleInputClick() {\n this.open();\n }\n\n _handleInputKeydown(e) {\n if (e.which === M.keys.ENTER) {\n e.preventDefault();\n this.open();\n }\n }\n\n _handleCalendarClick(e) {\n if (!this.isOpen) return;\n const target = <HTMLElement>(e.target);\n if (!target.classList.contains('is-disabled')) {\n if (\n target.classList.contains('datepicker-day-button') &&\n !target.classList.contains('is-empty') &&\n !target.parentElement.classList.contains('is-disabled')\n ) { \n this.setDate(\n new Date(\n e.target.getAttribute('data-year'),\n e.target.getAttribute('data-month'),\n e.target.getAttribute('data-day')\n )\n );\n if (this.options.autoClose) {\n this._finishSelection();\n }\n }\n else if (target.closest('.month-prev')) {\n this.prevMonth();\n }\n else if (target.closest('.month-next')) {\n this.nextMonth();\n }\n }\n }\n\n _handleClearClick() {\n this.date = null;\n this.setInputValue();\n this.close();\n }\n\n _handleMonthChange(e) {\n this.gotoMonth(e.target.value);\n }\n\n _handleYearChange(e) {\n this.gotoYear(e.target.value);\n }\n\n // change view to a specific month (zero-index, e.g. 0: January)\n gotoMonth(month) {\n if (!isNaN(month)) {\n this.calendars[0].month = parseInt(month, 10);\n this.adjustCalendars();\n }\n }\n\n // change view to a specific full year (e.g. \"2012\")\n gotoYear(year) {\n if (!isNaN(year)) {\n this.calendars[0].year = parseInt(year, 10);\n this.adjustCalendars();\n }\n }\n\n _handleInputChange(e: Event) {\n let date;\n // Prevent change event from being fired when triggered by the plugin\n if (e['detail']?.firedBy === this) return;\n if (this.options.parse) {\n date = this.options.parse(this.el.value, this.options.format);\n }\n else {\n date = new Date(Date.parse(this.el.value));\n }\n if (Datepicker._isDate(date)) this.setDate(date);\n }\n\n renderDayName(opts, day, abbr: boolean = false) {\n day += opts.firstDay;\n while (day >= 7) {\n day -= 7;\n }\n return abbr ? opts.i18n.weekdaysAbbrev[day] : opts.i18n.weekdays[day];\n }\n\n // Set input value to the selected date and close Datepicker\n _finishSelection() {\n this.setInputValue();\n this.close();\n }\n\n open() {\n if (this.isOpen) return;\n this.isOpen = true;\n if (typeof this.options.onOpen === 'function') {\n this.options.onOpen.call(this);\n }\n this.draw();\n this.modal.open(undefined);\n return this;\n }\n\n close() {\n if (!this.isOpen) return;\n this.isOpen = false;\n if (typeof this.options.onClose === 'function') {\n this.options.onClose.call(this);\n }\n this.modal.close();\n return this;\n }\n\n static {\n Datepicker._template = `\n <div class=\"modal datepicker-modal\">\n <div class=\"modal-content datepicker-container\">\n <div class=\"datepicker-date-display\">\n <span class=\"year-text\"></span>\n <span class=\"date-text\"></span>\n </div>\n <div class=\"datepicker-calendar-container\">\n <div class=\"datepicker-calendar\"></div>\n <div class=\"datepicker-footer\">\n <button class=\"btn-flat datepicker-clear waves-effect\" style=\"visibility: hidden;\" type=\"button\"></button>\n <div class=\"confirmation-btns\">\n <button class=\"btn-flat datepicker-cancel waves-effect\" type=\"button\"></button>\n <button class=\"btn-flat datepicker-done waves-effect\" type=\"button\"></button>\n </div>\n </div>\n </div>\n </div>\n </div>`;\n }\n } \n","import { Component } from \"./component\";\nimport { M } from \"./global\";\nimport anim from \"animejs\";\n\n const _defaults = {\n alignment: 'left',\n autoFocus: true,\n constrainWidth: true,\n container: null,\n coverTrigger: true,\n closeOnClick: true,\n hover: false,\n inDuration: 150,\n outDuration: 250,\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null,\n onCloseEnd: null,\n onItemClick: null\n };\n\n export class Dropdown extends Component {\n el: HTMLElement;\n static _dropdowns: Dropdown[] = [];\n id: string;\n dropdownEl: HTMLElement;\n isOpen: boolean;\n isScrollable: boolean;\n isTouchMoving: boolean;\n focusedIndex: number;\n filterQuery: any[];\n private _resetFilterQueryBound: any;\n private _handleDocumentClickBound: any;\n private _handleDocumentTouchmoveBound: any;\n private _handleDropdownClickBound: any;\n private _handleDropdownKeydownBound: any;\n private _handleTriggerKeydownBound: any;\n private _handleMouseEnterBound: any;\n private _handleMouseLeaveBound: any;\n _handleClickBound: any;\n filterTimeout: NodeJS.Timeout;\n\n constructor(el, options) {\n super(Dropdown, el, options);\n (this.el as any).M_Dropdown = this;\n Dropdown._dropdowns.push(this);\n this.id = M.getIdFromTrigger(el);\n this.dropdownEl = document.getElementById(this.id);\n //this.$dropdownEl = $(this.dropdownEl);\n this.options = {...Dropdown.defaults, ...options};\n\n this.isOpen = false;\n this.isScrollable = false;\n this.isTouchMoving = false;\n this.focusedIndex = -1;\n this.filterQuery = [];\n\n // Move dropdown-content after dropdown-trigger\n this._moveDropdown();\n this._makeDropdownFocusable();\n this._resetFilterQueryBound = this._resetFilterQuery.bind(this);\n this._handleDocumentClickBound = this._handleDocumentClick.bind(this);\n this._handleDocumentTouchmoveBound = this._handleDocumentTouchmove.bind(this);\n this._handleDropdownClickBound = this._handleDropdownClick.bind(this);\n this._handleDropdownKeydownBound = this._handleDropdownKeydown.bind(this);\n this._handleTriggerKeydownBound = this._handleTriggerKeydown.bind(this);\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n const domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Dropdown;\n }\n\n destroy() {\n this._resetDropdownStyles();\n this._removeEventHandlers();\n Dropdown._dropdowns.splice(Dropdown._dropdowns.indexOf(this), 1);\n (this.el as any).M_Dropdown = undefined;\n }\n\n _setupEventHandlers() {\n // Trigger keydown handler\n this.el.addEventListener('keydown', this._handleTriggerKeydownBound);\n // Item click handler\n this.dropdownEl?.addEventListener('click', this._handleDropdownClickBound);\n // Hover event handlers\n if (this.options.hover) {\n this._handleMouseEnterBound = this._handleMouseEnter.bind(this);\n this.el.addEventListener('mouseenter', this._handleMouseEnterBound);\n this._handleMouseLeaveBound = this._handleMouseLeave.bind(this);\n this.el.addEventListener('mouseleave', this._handleMouseLeaveBound);\n this.dropdownEl.addEventListener('mouseleave', this._handleMouseLeaveBound);\n // Click event handlers\n } else {\n this._handleClickBound = this._handleClick.bind(this);\n this.el.addEventListener('click', this._handleClickBound);\n }\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('keydown', this._handleTriggerKeydownBound);\n this.dropdownEl.removeEventListener('click', this._handleDropdownClickBound);\n if (this.options.hover) {\n this.el.removeEventListener('mouseenter', this._handleMouseEnterBound);\n this.el.removeEventListener('mouseleave', this._handleMouseLeaveBound);\n this.dropdownEl.removeEventListener('mouseleave', this._handleMouseLeaveBound);\n } else {\n this.el.removeEventListener('click', this._handleClickBound);\n }\n }\n\n _setupTemporaryEventHandlers() {\n // Use capture phase event handler to prevent click\n document.body.addEventListener('click', this._handleDocumentClickBound, true);\n document.body.addEventListener('touchmove', this._handleDocumentTouchmoveBound);\n this.dropdownEl.addEventListener('keydown', this._handleDropdownKeydownBound);\n }\n\n _removeTemporaryEventHandlers() {\n // Use capture phase event handler to prevent click\n document.body.removeEventListener('click', this._handleDocumentClickBound, true);\n document.body.removeEventListener('touchmove', this._handleDocumentTouchmoveBound);\n this.dropdownEl.removeEventListener('keydown', this._handleDropdownKeydownBound);\n }\n\n _handleClick(e) {\n e.preventDefault();\n this.open();\n }\n\n _handleMouseEnter() {\n this.open();\n }\n\n _handleMouseLeave(e) {\n const toEl = e.toElement || e.relatedTarget;\n const leaveToDropdownContent = !!toEl.closest('.dropdown-content');\n let leaveToActiveDropdownTrigger = false;\n const closestTrigger = toEl.closest('.dropdown-trigger');\n if (\n closestTrigger &&\n !!(<any>closestTrigger).M_Dropdown &&\n (<any>closestTrigger).M_Dropdown.isOpen\n ) {\n leaveToActiveDropdownTrigger = true;\n }\n // Close hover dropdown if mouse did not leave to either active dropdown-trigger or dropdown-content\n if (!leaveToActiveDropdownTrigger && !leaveToDropdownContent) {\n this.close();\n }\n }\n\n _handleDocumentClick(e) {\n const target = <HTMLElement>e.target;\n if (\n this.options.closeOnClick &&\n target.closest('.dropdown-content') &&\n !this.isTouchMoving\n ) {\n // isTouchMoving to check if scrolling on mobile.\n //setTimeout(() => {\n this.close();\n //}, 0);\n }\n else if (\n target.closest('.dropdown-trigger') ||\n !target.closest('.dropdown-content')\n ) {\n //setTimeout(() => {\n this.close();\n //}, 0);\n }\n this.isTouchMoving = false;\n }\n\n _handleTriggerKeydown(e) {\n // ARROW DOWN OR ENTER WHEN SELECT IS CLOSED - open Dropdown\n if ((e.which === M.keys.ARROW_DOWN || e.which === M.keys.ENTER) && !this.isOpen) {\n e.preventDefault();\n this.open();\n }\n }\n\n _handleDocumentTouchmove(e) {\n const target = <HTMLElement>e.target;\n if (target.closest('.dropdown-content')) {\n this.isTouchMoving = true;\n }\n }\n\n _handleDropdownClick(e) {\n // onItemClick callback\n if (typeof this.options.onItemClick === 'function') {\n const itemEl = <HTMLElement>e.target.closest('li');\n this.options.onItemClick.call(this, itemEl);\n }\n }\n\n _handleDropdownKeydown(e) {\n if (e.which === M.keys.TAB) {\n e.preventDefault();\n this.close();\n }\n // Navigate down dropdown list\n else if ((e.which === M.keys.ARROW_DOWN || e.which === M.keys.ARROW_UP) && this.isOpen) {\n e.preventDefault();\n const direction = e.which === M.keys.ARROW_DOWN ? 1 : -1;\n let newFocusedIndex = this.focusedIndex;\n let hasFoundNewIndex = false;\n do {\n newFocusedIndex = newFocusedIndex + direction;\n if (\n !!this.dropdownEl.children[newFocusedIndex] &&\n (<any>this.dropdownEl.children[newFocusedIndex]).tabIndex !== -1\n ) {\n hasFoundNewIndex = true;\n break;\n }\n } while (newFocusedIndex < this.dropdownEl.children.length && newFocusedIndex >= 0);\n\n if (hasFoundNewIndex) {\n // Remove active class from old element\n if (this.focusedIndex >= 0)\n this.dropdownEl.children[this.focusedIndex].classList.remove('active');\n this.focusedIndex = newFocusedIndex;\n this._focusFocusedItem();\n }\n }\n // ENTER selects choice on focused item\n else if (e.which === M.keys.ENTER && this.isOpen) {\n // Search for <a> and <button>\n const focusedElement = this.dropdownEl.children[this.focusedIndex];\n const activatableElement = <HTMLElement>focusedElement.querySelector('a, button');\n // Click a or button tag if exists, otherwise click li tag\n if (!!activatableElement) {\n activatableElement.click();\n }\n else if (!!focusedElement) {\n if (focusedElement instanceof HTMLElement) {\n focusedElement.click();\n } \n }\n }\n // Close dropdown on ESC\n else if (e.which === M.keys.ESC && this.isOpen) {\n e.preventDefault();\n this.close();\n }\n\n // CASE WHEN USER TYPE LETTERS\n const letter = String.fromCharCode(e.which).toLowerCase();\n const nonLetters = [9, 13, 27, 38, 40];\n if (letter && nonLetters.indexOf(e.which) === -1) {\n this.filterQuery.push(letter);\n const string = this.filterQuery.join('');\n const newOptionEl = Array.from(this.dropdownEl.querySelectorAll('li'))\n .find((el) => el.innerText.toLowerCase().indexOf(string) === 0);\n if (newOptionEl) {\n this.focusedIndex = [...newOptionEl.parentNode.children].indexOf(newOptionEl);\n this._focusFocusedItem();\n }\n }\n this.filterTimeout = setTimeout(this._resetFilterQueryBound, 1000);\n }\n\n _resetFilterQuery() {\n this.filterQuery = [];\n }\n\n _resetDropdownStyles() {\n this.dropdownEl.style.display = '';\n this.dropdownEl.style.width = '';\n this.dropdownEl.style.height = '';\n this.dropdownEl.style.left = '';\n this.dropdownEl.style.top = '';\n this.dropdownEl.style.transformOrigin = '';\n this.dropdownEl.style.transform = '';\n this.dropdownEl.style.opacity = '';\n }\n\n // Move dropdown after container or trigger\n _moveDropdown(containerEl = null) {\n if (!!this.options.container) {\n this.options.container.append(this.dropdownEl);\n }\n else if (containerEl) {\n if (!containerEl.contains(this.dropdownEl)) {\n containerEl.append(this.dropdownEl);\n }\n }\n else {\n this.el.after(this.dropdownEl);\n }\n }\n\n _makeDropdownFocusable() {\n if (!this.dropdownEl) return;\n // Needed for arrow key navigation\n this.dropdownEl.tabIndex = 0;\n // Only set tabindex if it hasn't been set by user\n Array.from(this.dropdownEl.children).forEach((el)=> {\n if (!el.getAttribute('tabindex')) \n el.setAttribute('tabindex', '0');\n });\n }\n\n _focusFocusedItem() {\n if (\n this.focusedIndex >= 0 &&\n this.focusedIndex < this.dropdownEl.children.length &&\n this.options.autoFocus\n ) {\n (this.dropdownEl.children[this.focusedIndex] as HTMLElement).focus({\n preventScroll: true\n });\n this.dropdownEl.children[this.focusedIndex].scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest'\n });\n }\n }\n\n _getDropdownPosition(closestOverflowParent) {\n const offsetParentBRect = this.el.offsetParent.getBoundingClientRect();\n const triggerBRect = this.el.getBoundingClientRect();\n const dropdownBRect = this.dropdownEl.getBoundingClientRect();\n\n let idealHeight = dropdownBRect.height;\n let idealWidth = dropdownBRect.width;\n let idealXPos = triggerBRect.left - dropdownBRect.left;\n let idealYPos = triggerBRect.top - dropdownBRect.top;\n\n const dropdownBounds = {\n left: idealXPos,\n top: idealYPos,\n height: idealHeight,\n width: idealWidth\n };\n\n const alignments = M.checkPossibleAlignments(\n this.el,\n closestOverflowParent,\n dropdownBounds,\n this.options.coverTrigger ? 0 : triggerBRect.height\n );\n\n let verticalAlignment = 'top';\n let horizontalAlignment = this.options.alignment;\n idealYPos += this.options.coverTrigger ? 0 : triggerBRect.height;\n\n // Reset isScrollable\n this.isScrollable = false;\n\n if (!alignments.top) {\n if (alignments.bottom) {\n verticalAlignment = 'bottom';\n\n if (!this.options.coverTrigger) {\n idealYPos -= triggerBRect.height;\n }\n } else {\n this.isScrollable = true;\n\n // Determine which side has most space and cutoff at correct height\n idealHeight -= 20; // Add padding when cutoff\n if (alignments.spaceOnTop > alignments.spaceOnBottom) {\n verticalAlignment = 'bottom';\n idealHeight += alignments.spaceOnTop;\n idealYPos -= this.options.coverTrigger\n ? alignments.spaceOnTop - 20\n : alignments.spaceOnTop - 20 + triggerBRect.height;\n } else {\n idealHeight += alignments.spaceOnBottom;\n }\n }\n }\n\n // If preferred horizontal alignment is possible\n if (!alignments[horizontalAlignment]) {\n const oppositeAlignment = horizontalAlignment === 'left' ? 'right' : 'left';\n if (alignments[oppositeAlignment]) {\n horizontalAlignment = oppositeAlignment;\n } else {\n // Determine which side has most space and cutoff at correct height\n if (alignments.spaceOnLeft > alignments.spaceOnRight) {\n horizontalAlignment = 'right';\n idealWidth += alignments.spaceOnLeft;\n idealXPos -= alignments.spaceOnLeft;\n } else {\n horizontalAlignment = 'left';\n idealWidth += alignments.spaceOnRight;\n }\n }\n }\n\n if (verticalAlignment === 'bottom') {\n idealYPos =\n idealYPos - dropdownBRect.height + (this.options.coverTrigger ? triggerBRect.height : 0);\n }\n if (horizontalAlignment === 'right') {\n idealXPos = idealXPos - dropdownBRect.width + triggerBRect.width;\n }\n return {\n x: idealXPos,\n y: idealYPos,\n verticalAlignment: verticalAlignment,\n horizontalAlignment: horizontalAlignment,\n height: idealHeight,\n width: idealWidth\n };\n }\n\n _animateIn() {\n anim.remove(this.dropdownEl);\n anim({\n targets: this.dropdownEl,\n opacity: {\n value: [0, 1],\n easing: 'easeOutQuad'\n },\n scaleX: [0.3, 1],\n scaleY: [0.3, 1],\n duration: this.options.inDuration,\n easing: 'easeOutQuint',\n complete: (anim) => {\n if (this.options.autoFocus) this.dropdownEl.focus();\n // onOpenEnd callback\n if (typeof this.options.onOpenEnd === 'function') {\n this.options.onOpenEnd.call(this, this.el);\n }\n }\n });\n }\n\n _animateOut() {\n anim.remove(this.dropdownEl);\n anim({\n targets: this.dropdownEl,\n opacity: {\n value: 0,\n easing: 'easeOutQuint'\n },\n scaleX: 0.3,\n scaleY: 0.3,\n duration: this.options.outDuration,\n easing: 'easeOutQuint',\n complete: (anim) => {\n this._resetDropdownStyles();\n // onCloseEnd callback\n if (typeof this.options.onCloseEnd === 'function') {\n this.options.onCloseEnd.call(this, this.el);\n }\n }\n });\n }\n\n private _getClosestAncestor(el: Element, condition: Function): Element {\n let ancestor = el.parentNode;\n while (ancestor !== null && ancestor !== document) {\n if (condition(ancestor)) {\n return <Element>ancestor;\n }\n ancestor = ancestor.parentNode;\n }\n return null;\n };\n\n _placeDropdown() {\n // Container here will be closest ancestor with overflow: hidden\n let closestOverflowParent: HTMLElement = <HTMLElement>this._getClosestAncestor(this.dropdownEl, (ancestor: HTMLElement) => {\n return !['HTML','BODY'].includes(ancestor.tagName) && getComputedStyle(ancestor).overflow !== 'visible';\n });\n // Fallback\n if (!closestOverflowParent) {\n closestOverflowParent = <HTMLElement>(!!this.dropdownEl.offsetParent\n ? this.dropdownEl.offsetParent\n : this.dropdownEl.parentNode);\n }\n\n if (getComputedStyle(closestOverflowParent).position === 'static')\n closestOverflowParent.style.position = 'relative';\n\n this._moveDropdown(closestOverflowParent);\n\n // Set width before calculating positionInfo\n const idealWidth = this.options.constrainWidth\n ? this.el.getBoundingClientRect().width\n : this.dropdownEl.getBoundingClientRect().width;\n this.dropdownEl.style.width = idealWidth + 'px';\n\n const positionInfo = this._getDropdownPosition(closestOverflowParent);\n this.dropdownEl.style.left = positionInfo.x + 'px';\n this.dropdownEl.style.top = positionInfo.y + 'px';\n this.dropdownEl.style.height = positionInfo.height + 'px';\n this.dropdownEl.style.width = positionInfo.width + 'px';\n this.dropdownEl.style.transformOrigin = `${\n positionInfo.horizontalAlignment === 'left' ? '0' : '100%'\n } ${positionInfo.verticalAlignment === 'top' ? '0' : '100%'}`;\n }\n\n open() {\n if (this.isOpen) return;\n this.isOpen = true;\n // onOpenStart callback\n if (typeof this.options.onOpenStart === 'function') {\n this.options.onOpenStart.call(this, this.el);\n }\n // Reset styles\n this._resetDropdownStyles();\n this.dropdownEl.style.display = 'block';\n this._placeDropdown();\n this._animateIn();\n this._setupTemporaryEventHandlers();\n }\n\n close() {\n if (!this.isOpen) return;\n this.isOpen = false;\n this.focusedIndex = -1;\n // onCloseStart callback\n if (typeof this.options.onCloseStart === 'function') {\n this.options.onCloseStart.call(this, this.el);\n }\n this._animateOut();\n this._removeTemporaryEventHandlers();\n if (this.options.autoFocus) {\n this.el.focus();\n }\n }\n\n recalculateDimensions() {\n if (this.isOpen) {\n this.dropdownEl.style.width = '';\n this.dropdownEl.style.height = '';\n this.dropdownEl.style.left = '';\n this.dropdownEl.style.top = '';\n this.dropdownEl.style.transformOrigin = '';\n this._placeDropdown();\n }\n }\n\n static {\n Dropdown._dropdowns = []; \n }\n }\n","import { M } from \"./global\";\n\nexport class Forms {\n\n static textareaAutoResize(textarea: HTMLTextAreaElement) {\n if (!textarea) {\n console.error('No textarea element found');\n return;\n }\n // Textarea Auto Resize\n let hiddenDiv: HTMLDivElement = document.querySelector('.hiddendiv');\n if (!hiddenDiv) {\n hiddenDiv = document.createElement('div');\n hiddenDiv.classList.add('hiddendiv', 'common');\n document.body.append(hiddenDiv);\n }\n const style = getComputedStyle(textarea);\n // Set font properties of hiddenDiv\n const fontFamily = style.fontFamily; //textarea.css('font-family');\n const fontSize = style.fontSize; //textarea.css('font-size');\n const lineHeight = style.lineHeight; //textarea.css('line-height');\n // Firefox can't handle padding shorthand.\n const paddingTop = style.paddingTop; //getComputedStyle(textarea).css('padding-top');\n const paddingRight = style.paddingRight; //textarea.css('padding-right');\n const paddingBottom = style.paddingBottom; //textarea.css('padding-bottom');\n const paddingLeft = style.paddingLeft; //textarea.css('padding-left');\n\n if (fontSize) hiddenDiv.style.fontSize = fontSize; //('font-size', fontSize);\n if (fontFamily) hiddenDiv.style.fontFamily = fontFamily; //css('font-family', fontFamily);\n if (lineHeight) hiddenDiv.style.lineHeight = lineHeight; //css('line-height', lineHeight); \n if (paddingTop) hiddenDiv.style.paddingTop = paddingTop; //ss('padding-top', paddingTop); \n if (paddingRight) hiddenDiv.style.paddingRight = paddingRight; //css('padding-right', paddingRight); \n if (paddingBottom) hiddenDiv.style.paddingBottom = paddingBottom; //css('padding-bottom', paddingBottom); \n if (paddingLeft) hiddenDiv.style.paddingLeft = paddingLeft; //css('padding-left', paddingLeft); \n\n // Set original-height, if none \n if (!textarea.hasAttribute('original-height'))\n textarea.setAttribute('original-height', textarea.getBoundingClientRect().height.toString());\n\n if (textarea.getAttribute('wrap') === 'off') {\n hiddenDiv.style.overflowWrap = 'normal'; // ('overflow-wrap', 'normal')\n hiddenDiv.style.whiteSpace = 'pre'; //.css('white-space', 'pre');\n }\n\n hiddenDiv.innerText = textarea.value + '\\n';\n\n const content = hiddenDiv.innerHTML.replace(/\\n/g, '<br>');\n hiddenDiv.innerHTML = content;\n\n // When textarea is hidden, width goes crazy.\n // Approximate with half of window size\n if (textarea.offsetWidth > 0 && textarea.offsetHeight > 0) {\n hiddenDiv.style.width = textarea.getBoundingClientRect().width +'px'; // ('width', textarea.width() + 'px');\n }\n else {\n hiddenDiv.style.width = (window.innerWidth / 2)+'px' //css('width', window.innerWidth / 2 + 'px');\n }\n\n // Resize if the new height is greater than the\n // original height of the textarea\n const originalHeight = parseInt(textarea.getAttribute('original-height'));\n const prevLength = parseInt(textarea.getAttribute('previous-length'));\n if (isNaN(originalHeight)) return;\n if (originalHeight <= hiddenDiv.clientHeight) {\n textarea.style.height = hiddenDiv.clientHeight+'px'; //css('height', hiddenDiv.innerHeight() + 'px');\n }\n else if (textarea.value.length < prevLength) {\n // In case the new height is less than original height, it\n // means the textarea has less text than before\n // So we set the height to the original one\n textarea.style.height = originalHeight+'px';\n }\n textarea.setAttribute('previous-length', textarea.value.length.toString());\n };\n\n static Init(){\n document.addEventListener(\"DOMContentLoaded\", () => {\n\n document.addEventListener('keyup', e => {\n const target = <HTMLInputElement>e.target;\n // Radio and Checkbox focus class\n if (target instanceof HTMLInputElement && ['radio','checkbox'].includes(target.type)) {\n // TAB, check if tabbing to radio or checkbox.\n if (e.which === M.keys.TAB) {\n target.classList.add('tabbed');\n target.addEventListener('blur', e => target.classList.remove('tabbed'), {once: true});\n }\n }\n });\n\n document.querySelectorAll('.materialize-textarea').forEach((textArea: HTMLTextAreaElement) => {\n // Save Data in Element\n textArea.setAttribute('original-height', textArea.getBoundingClientRect().height.toString());\n textArea.setAttribute('previous-length', textArea.value.length.toString());\n Forms.textareaAutoResize(textArea);\n\n textArea.addEventListener('keyup', e => Forms.textareaAutoResize(textArea));\n textArea.addEventListener('keydown', e => Forms.textareaAutoResize(textArea));\n });\n \n // File Input Path\n document.querySelectorAll('.file-field input[type=\"file\"]').forEach((fileInput: HTMLInputElement) => {\n fileInput.addEventListener('change', e => {\n const fileField = fileInput.closest('.file-field');\n const pathInput = <HTMLInputElement>fileField.querySelector('input.file-path');\n const files = fileInput.files;\n const filenames = [];\n for (let i = 0; i < files.length; i++) {\n filenames.push(files[i].name);\n }\n pathInput.value = filenames.join(', ');\n pathInput.dispatchEvent(new Event('change'));\n });\n });\n \n });\n }\n}\n\n ","import { Autocomplete } from './autocomplete';\nimport { Bounding } from './bounding';\nimport { FloatingActionButton } from './buttons';\nimport { Cards } from './cards';\nimport { Carousel } from './carousel';\nimport { CharacterCounter } from './characterCounter';\nimport { Chips } from './chips';\nimport { Collapsible } from './collapsible';\nimport { Datepicker } from './datepicker';\nimport { Dropdown } from './dropdown';\nimport { Edges } from './edges';\nimport { Forms } from './forms';\nimport { Materialbox } from './materialbox';\nimport { Modal } from './modal';\nimport { Parallax } from './parallax';\nimport { Pushpin } from './pushpin';\nimport { ScrollSpy } from './scrollspy';\nimport { FormSelect } from './select';\nimport { Sidenav } from './sidenav';\nimport { Slider } from './slider';\nimport { Tabs } from './tabs';\nimport { TapTarget } from './tapTarget';\nimport { Timepicker } from './timepicker';\nimport { Toast } from './toasts';\nimport { Tooltip } from './tooltip';\nimport { Waves } from './waves';\nimport { Range } from './range';\n\nexport class M {\n static version = '2.0.1-alpha';\n\n static keys = {\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n ARROW_UP: 38,\n ARROW_DOWN: 40\n };\n\n static Autocomplete: typeof Autocomplete = Autocomplete; \n static Tabs: typeof Tabs = Tabs; \n static Carousel: typeof Carousel = Carousel; \n static Dropdown: typeof Dropdown = Dropdown;\n static FloatingActionButton: typeof FloatingActionButton = FloatingActionButton;\n static Chips: typeof Chips = Chips;\n static Collapsible: typeof Collapsible = Collapsible;\n static Datepicker: typeof Datepicker = Datepicker;\n static CharacterCounter: typeof CharacterCounter = CharacterCounter;\n static FormSelect: typeof FormSelect = FormSelect;\n static Modal: typeof Modal = Modal;\n static Pushpin: typeof Pushpin = Pushpin;\n static Materialbox: typeof Materialbox = Materialbox;\n static Parallax: typeof Parallax = Parallax;\n static Slider: typeof Slider = Slider;\n static Timepicker: typeof Timepicker = Timepicker;\n static toast: (opt: any) => Toast = (opt) => new Toast(opt) ;\n static Tooltip: typeof Tooltip = Tooltip;\n static Sidenav: typeof Sidenav = Sidenav;\n static TapTarget: typeof TapTarget = TapTarget;\n static ScrollSpy: typeof ScrollSpy = ScrollSpy;\n static Range: typeof Range = Range;\n static Waves: typeof Waves = Waves;\n\n static tabPressed:boolean = false;\n static keyDown:boolean = false;\n\n static docHandleKeydown(e) {\n M.keyDown = true;\n if (e.which === M.keys.TAB || e.which === M.keys.ARROW_DOWN || e.which === M.keys.ARROW_UP) {\n M.tabPressed = true;\n }\n }\n\n static docHandleKeyup(e) {\n M.keyDown = false;\n if (e.which === M.keys.TAB || e.which === M.keys.ARROW_DOWN || e.which === M.keys.ARROW_UP) {\n M.tabPressed = false;\n }\n }\n\n static docHandleFocus(e) {\n if (M.keyDown) {\n document.body.classList.add('keyboard-focused');\n }\n }\n\n static docHandleBlur(e) {\n document.body.classList.remove('keyboard-focused');\n }\n\n static {\n document.addEventListener('keydown', this.docHandleKeydown, true);\n document.addEventListener('keyup', this.docHandleKeyup, true);\n document.addEventListener('focus', this.docHandleFocus, true);\n document.addEventListener('blur', this.docHandleBlur, true); \n this.initializeJqueryWrapper(Tabs, 'tabs', 'M_Tabs'); \n this.initializeJqueryWrapper(Carousel, 'carousel', 'M_Carousel');\n this.initializeJqueryWrapper(Autocomplete, 'autocomplete', 'M_Autocomplete');\n this.initializeJqueryWrapper(Dropdown, 'dropdown', 'M_Dropdown');\n this.initializeJqueryWrapper(FloatingActionButton, 'floatingActionButton', 'M_FloatingActionButton');\n M.initializeJqueryWrapper(Collapsible, 'collapsible', 'M_Collapsible');\n M.initializeJqueryWrapper(CharacterCounter, 'characterCounter', 'M_CharacterCounter');\n M.initializeJqueryWrapper(Datepicker, 'datepicker', 'M_Datepicker'); \n M.initializeJqueryWrapper(FormSelect, 'formSelect', 'M_FormSelect'); \n M.initializeJqueryWrapper(Modal, 'modal', 'M_Modal');\n M.initializeJqueryWrapper(Pushpin, 'pushpin', 'M_Pushpin');\n M.initializeJqueryWrapper(Materialbox, 'materialbox', 'M_Materialbox'); \n M.initializeJqueryWrapper(Parallax, 'parallax', 'M_Parallax');\n M.initializeJqueryWrapper(Slider, 'slider', 'M_Slider');\n M.initializeJqueryWrapper(Timepicker, 'timepicker', 'M_Timepicker');\n M.initializeJqueryWrapper(Tooltip, 'tooltip', 'M_Tooltip');\n M.initializeJqueryWrapper(TapTarget, 'tapTarget', 'M_TapTarget');\n M.initializeJqueryWrapper(Sidenav, 'sidenav', 'M_Sidenav');\n M.initializeJqueryWrapper(ScrollSpy, 'scrollSpy', 'M_ScrollSpy');\n M.initializeJqueryWrapper(Range, 'range', 'M_Range');\n M.initializeJqueryWrapper(Chips, 'chips', 'M_Chips');\n Cards.Init();\n Forms.Init();\n Chips.Init();\n Waves.Init();\n Range.Init();\n }\n\n //--- TODO: Remove!\n static jQueryLoaded(): boolean {\n return !!(<any>window).jQuery; \n }\n static initializeJqueryWrapper(plugin: any, pluginName: string, classRef: string) {\n if (!this.jQueryLoaded())\n return;\n var jq = (<any>window).jQuery;\n \n jq.fn[pluginName] = function(methodOrOptions) {\n // Call plugin method if valid method name is passed in\n if (plugin.prototype[methodOrOptions]) {\n let params = Array.prototype.slice.call(arguments, 1);\n // Getter methods\n if (methodOrOptions.slice(0, 3) === 'get') {\n let instance = this.first()[0][classRef];\n return instance[methodOrOptions].apply(instance, params);\n }\n // Void methods\n return this.each(function() {\n let instance = this[classRef];\n instance[methodOrOptions].apply(instance, params);\n });\n // Initialize plugin if options or no argument is passed in\n } else if (typeof methodOrOptions === 'object' || !methodOrOptions) {\n plugin.init(this, arguments[0]);\n return this;\n }\n // Return error if an unrecognized method name is passed in\n jq.error(`Method ${methodOrOptions} does not exist on jQuery.${pluginName}`);\n };\n }\n //---\n\n static AutoInit(context:Element = null) {\n let root = !!context ? context : document.body;\n let registry = {\n Autocomplete: root.querySelectorAll('.autocomplete:not(.no-autoinit)'),\n Carousel: root.querySelectorAll('.carousel:not(.no-autoinit)'),\n Chips: root.querySelectorAll('.chips:not(.no-autoinit)'),\n Collapsible: root.querySelectorAll('.collapsible:not(.no-autoinit)'),\n Datepicker: root.querySelectorAll('.datepicker:not(.no-autoinit)'),\n Dropdown: root.querySelectorAll('.dropdown-trigger:not(.no-autoinit)'),\n Materialbox: root.querySelectorAll('.materialboxed:not(.no-autoinit)'),\n Modal: root.querySelectorAll('.modal:not(.no-autoinit)'),\n Parallax: root.querySelectorAll('.parallax:not(.no-autoinit)'),\n Pushpin: root.querySelectorAll('.pushpin:not(.no-autoinit)'),\n ScrollSpy: root.querySelectorAll('.scrollspy:not(.no-autoinit)'),\n FormSelect: root.querySelectorAll('select:not(.no-autoinit)'),\n Sidenav: root.querySelectorAll('.sidenav:not(.no-autoinit)'),\n Tabs: root.querySelectorAll('.tabs:not(.no-autoinit)'),\n TapTarget: root.querySelectorAll('.tap-target:not(.no-autoinit)'),\n Timepicker: root.querySelectorAll('.timepicker:not(.no-autoinit)'),\n Tooltip: root.querySelectorAll('.tooltipped:not(.no-autoinit)'),\n FloatingActionButton: root.querySelectorAll('.fixed-action-btn:not(.no-autoinit)'),\n };\n M.Autocomplete.init(registry.Autocomplete, null);\n M.Carousel.init(registry.Carousel, null); \n M.Chips.init(registry.Chips, null); \n M.Collapsible.init(registry.Collapsible, null);\n M.Datepicker.init(registry.Datepicker, null);\n M.Dropdown.init(registry.Dropdown, null); \n M.Materialbox.init(registry.Materialbox, null);\n M.Modal.init(registry.Modal, null);\n M.Parallax.init(registry.Parallax, null);\n M.Pushpin.init(registry.Pushpin, null);\n M.ScrollSpy.init(registry.ScrollSpy, null);\n M.FormSelect.init(registry.FormSelect, null);\n M.Sidenav.init(registry.Sidenav, null);\n M.Tabs.init(registry.Tabs, null);\n M.TapTarget.init(registry.TapTarget, null);\n M.Timepicker.init(registry.Timepicker, null);\n M.Tooltip.init(registry.Tooltip, null);\n M.FloatingActionButton.init(registry.FloatingActionButton, null);\n }\n\n static objectSelectorString(obj: any): string {\n let tagStr = obj.prop('tagName') || '';\n let idStr = obj.attr('id') || '';\n let classStr = obj.attr('class') || '';\n return (tagStr + idStr + classStr).replace(/\\s/g, '');\n }\n\n static guid(): string {\n function s4():string {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n } \n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); \n }\n\n static checkWithinContainer(container: Element, bounding: Bounding, offset: number): Edges {\n let edges = {\n top: false,\n right: false,\n bottom: false,\n left: false\n };\n\n let containerRect = container.getBoundingClientRect();\n // If body element is smaller than viewport, use viewport height instead.\n let containerBottom =\n container === document.body\n ? Math.max(containerRect.bottom, window.innerHeight)\n : containerRect.bottom;\n\n let scrollLeft = container.scrollLeft;\n let scrollTop = container.scrollTop;\n\n let scrolledX = bounding.left - scrollLeft;\n let scrolledY = bounding.top - scrollTop;\n\n // Check for container and viewport for each edge\n if (scrolledX < containerRect.left + offset || scrolledX < offset) {\n edges.left = true;\n }\n\n if (\n scrolledX + bounding.width > containerRect.right - offset ||\n scrolledX + bounding.width > window.innerWidth - offset\n ) {\n edges.right = true;\n }\n\n if (scrolledY < containerRect.top + offset || scrolledY < offset) {\n edges.top = true;\n }\n\n if (\n scrolledY + bounding.height > containerBottom - offset ||\n scrolledY + bounding.height > window.innerHeight - offset\n ) {\n edges.bottom = true;\n }\n\n return edges;\n }\n\n static checkPossibleAlignments(el, container, bounding, offset) {\n let canAlign = {\n top: true,\n right: true,\n bottom: true,\n left: true,\n spaceOnTop: null,\n spaceOnRight: null,\n spaceOnBottom: null,\n spaceOnLeft: null\n };\n\n let containerAllowsOverflow = getComputedStyle(container).overflow === 'visible';\n let containerRect = container.getBoundingClientRect();\n let containerHeight = Math.min(containerRect.height, window.innerHeight);\n let containerWidth = Math.min(containerRect.width, window.innerWidth);\n let elOffsetRect = el.getBoundingClientRect();\n\n let scrollLeft = container.scrollLeft;\n let scrollTop = container.scrollTop;\n\n let scrolledX = bounding.left - scrollLeft;\n let scrolledYTopEdge = bounding.top - scrollTop;\n let scrolledYBottomEdge = bounding.top + elOffsetRect.height - scrollTop;\n\n // Check for container and viewport for left\n canAlign.spaceOnRight = !containerAllowsOverflow\n ? containerWidth - (scrolledX + bounding.width)\n : window.innerWidth - (elOffsetRect.left + bounding.width);\n if (canAlign.spaceOnRight < 0) {\n canAlign.left = false;\n }\n\n // Check for container and viewport for Right\n canAlign.spaceOnLeft = !containerAllowsOverflow\n ? scrolledX - bounding.width + elOffsetRect.width\n : elOffsetRect.right - bounding.width;\n if (canAlign.spaceOnLeft < 0) {\n canAlign.right = false;\n }\n\n // Check for container and viewport for Top\n canAlign.spaceOnBottom = !containerAllowsOverflow\n ? containerHeight - (scrolledYTopEdge + bounding.height + offset)\n : window.innerHeight - (elOffsetRect.top + bounding.height + offset);\n if (canAlign.spaceOnBottom < 0) {\n canAlign.top = false;\n }\n\n // Check for container and viewport for Bottom\n canAlign.spaceOnTop = !containerAllowsOverflow\n ? scrolledYBottomEdge - (bounding.height - offset)\n : elOffsetRect.bottom - (bounding.height + offset);\n if (canAlign.spaceOnTop < 0) {\n canAlign.bottom = false;\n }\n\n return canAlign;\n }\n\n static getOverflowParent(element) {\n if (element == null) {\n return null;\n }\n if (element === document.body || getComputedStyle(element).overflow !== 'visible') {\n return element;\n }\n return this.getOverflowParent(element.parentElement);\n }\n\n static getIdFromTrigger(trigger: Element): string {\n let id = trigger.getAttribute('data-target');\n if (!id) {\n id = trigger.getAttribute('href');\n if (id) {\n id = id.slice(1);\n } else {\n id = '';\n }\n }\n return id;\n }\n\n static getDocumentScrollTop(): number {\n return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n };\n\n static getDocumentScrollLeft(): number {\n return window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;\n }\n\n public static throttle(func, wait, options = null) {\n let context, args, result;\n let timeout = null;\n let previous = 0;\n options || (options = {});\n let later = function() {\n previous = options.leading === false ? 0 : new Date().getTime();\n timeout = null;\n result = func.apply(context, args);\n context = args = null;\n };\n return function() {\n let now = new Date().getTime();\n if (!previous && options.leading === false) previous = now;\n let remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n }\n}\n\nexport default M;","import { Component } from \"./component\";\nimport anim from \"animejs\";\nimport { M } from \"./global\";\n\nconst _defaults = {\n inDuration: 275,\n outDuration: 200,\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null,\n onCloseEnd: null\n};\n\n export class Materialbox extends Component {\n el: HTMLElement;\n overlayActive: boolean;\n doneAnimating: boolean;\n caption: string;\n originalWidth: number;\n originalHeight: number;\n private originInlineStyles: string;\n private placeholder: HTMLElement;\n private _changedAncestorList: HTMLElement[];\n private newHeight: number;\n private newWidth: number;\n private windowWidth: number;\n private windowHeight: number;\n private attrWidth: string;\n private attrHeight: string;\n private _overlay: HTMLElement;\n private _photoCaption: HTMLElement;\n private _handleMaterialboxClickBound: any;\n private _handleWindowScrollBound: any;\n private _handleWindowResizeBound: any;\n private _handleWindowEscapeBound: any;\n\n constructor(el, options) {\n super(Materialbox, el, options);\n (this.el as any).M_Materialbox = this;\n this.options = {...Materialbox.defaults, ...options};\n this.overlayActive = false;\n this.doneAnimating = true;\n this.placeholder = document.createElement('div');\n this.placeholder.classList.add('material-placeholder');\n this.originalWidth = 0;\n this.originalHeight = 0;\n this.originInlineStyles = this.el.getAttribute('style');\n this.caption = this.el.getAttribute('data-caption') || '';\n // Wrap\n this.el.before(this.placeholder);\n this.placeholder.append(this.el);\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n const domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Materialbox;\n }\n\n destroy() {\n this._removeEventHandlers();\n (this.el as any).M_Materialbox = undefined;\n // Unwrap image\n //this.placeholder.after(this.el).remove();\n this.placeholder.remove();\n this.el.removeAttribute('style');\n }\n\n _setupEventHandlers() {\n this._handleMaterialboxClickBound = this._handleMaterialboxClick.bind(this);\n this.el.addEventListener('click', this._handleMaterialboxClickBound);\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('click', this._handleMaterialboxClickBound);\n }\n\n _handleMaterialboxClick(e) {\n // If already modal, return to original\n if (this.doneAnimating === false || (this.overlayActive && this.doneAnimating))\n this.close();\n else\n this.open();\n }\n\n _handleWindowScroll() {\n if (this.overlayActive) this.close();\n }\n\n _handleWindowResize() {\n if (this.overlayActive) this.close();\n }\n\n _handleWindowEscape(e) {\n // ESC key\n if (e.keyCode === 27 && this.doneAnimating && this.overlayActive) this.close();\n }\n\n _makeAncestorsOverflowVisible() {\n this._changedAncestorList = [];\n let ancestor = this.placeholder.parentNode;\n while (ancestor !== null && ancestor !== document) {\n const curr = <HTMLElement>ancestor;\n if (curr.style.overflow !== 'visible') {\n curr.style.overflow = 'visible';\n this._changedAncestorList.push(curr);\n }\n ancestor = ancestor.parentNode;\n }\n }\n\n private _offset(el) {\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n return {\n top: box.top + window.pageYOffset - docElem.clientTop,\n left: box.left + window.pageXOffset - docElem.clientLeft\n };\n }\n\n _animateImageIn() { \n this.el.style.maxHeight = this.newHeight.toString()+'px';\n this.el.style.maxWidth = this.newWidth.toString()+'px';\n\n const animOptions = {\n targets: this.el, // image\n height: [this.originalHeight, this.newHeight],\n width: [this.originalWidth, this.newWidth],\n left:\n M.getDocumentScrollLeft() +\n this.windowWidth / 2 -\n this._offset(this.placeholder).left -\n this.newWidth / 2,\n top:\n M.getDocumentScrollTop() +\n this.windowHeight / 2 -\n this._offset(this.placeholder).top -\n this.newHeight / 2,\n duration: this.options.inDuration,\n easing: 'easeOutQuad',\n complete: () => {\n this.doneAnimating = true;\n // onOpenEnd callback\n if (typeof this.options.onOpenEnd === 'function') {\n this.options.onOpenEnd.call(this, this.el);\n }\n }\n };\n // Override max-width or max-height if needed\n //const elStyle = this.el.style;\n //console.log('mh', elStyle.maxHeight, '->', this.newHeight);\n //console.log('mw', elStyle.maxWidth, '->', this.newWidth);\n //if (elStyle.maxWidth !== 'none') animOptions.maxWidth = this.newWidth;\n //if (elStyle.maxHeight !== 'none') animOptions.maxHeight = this.newHeight;\n //console.log('>>> animate');\n //console.log(JSON.stringify(animOptions));\n anim(animOptions);\n }\n\n _animateImageOut() {\n const animOptions = {\n targets: this.el,\n width: this.originalWidth,\n height: this.originalHeight,\n left: 0,\n top: 0,\n duration: this.options.outDuration,\n easing: 'easeOutQuad',\n complete: () => {\n this.placeholder.style.height = '';\n this.placeholder.style.width = '';\n this.placeholder.style.position = '';\n this.placeholder.style.top = '';\n this.placeholder.style.left = '';\n // Revert to width or height attribute\n if (this.attrWidth) this.el.setAttribute('width', this.attrWidth.toString());\n if (this.attrHeight) this.el.setAttribute('height', this.attrHeight.toString());\n this.el.removeAttribute('style');\n this.originInlineStyles && this.el.setAttribute('style', this.originInlineStyles);\n // Remove class\n this.el.classList.remove('active');\n this.doneAnimating = true;\n // Remove overflow overrides on ancestors\n this._changedAncestorList.forEach(anchestor => anchestor.style.overflow = '');\n // onCloseEnd callback\n if (typeof this.options.onCloseEnd === 'function') {\n this.options.onCloseEnd.call(this, this.el);\n }\n }\n };\n anim(animOptions);\n }\n\n _updateVars() {\n this.windowWidth = window.innerWidth;\n this.windowHeight = window.innerHeight;\n this.caption = this.el.getAttribute('data-caption') || '';\n }\n\n open() {\n this._updateVars();\n this.originalWidth = this.el.getBoundingClientRect().width;\n this.originalHeight = this.el.getBoundingClientRect().height;\n // Set states\n this.doneAnimating = false;\n this.el.classList.add('active');\n this.overlayActive = true;\n // onOpenStart callback\n if (typeof this.options.onOpenStart === 'function') {\n this.options.onOpenStart.call(this, this.el);\n }\n // Set positioning for placeholder\n this.placeholder.style.width = this.placeholder.getBoundingClientRect().width+'px';\n this.placeholder.style.height = this.placeholder.getBoundingClientRect().height+'px';\n this.placeholder.style.position = 'relative';\n this.placeholder.style.top = '0';\n this.placeholder.style.left = '0';\n this._makeAncestorsOverflowVisible();\n // Set css on origin\n this.el.style.position = 'absolute';\n this.el.style.zIndex = '1000';\n this.el.style.willChange = 'left, top, width, height';\n // Change from width or height attribute to css\n this.attrWidth = this.el.getAttribute('width');\n this.attrHeight = this.el.getAttribute('height');\n if (this.attrWidth) {\n this.el.style.width = this.attrWidth+'px';\n this.el.removeAttribute('width');\n }\n if (this.attrHeight) {\n this.el.style.width = this.attrHeight+'px';\n this.el.removeAttribute('height');\n }\n // Add overlay\n this._overlay = document.createElement('div');\n this._overlay.id = 'materialbox-overlay';\n this._overlay.style.opacity = '0';\n this._overlay.addEventListener('click', e => {\n if (this.doneAnimating) this.close();\n }, {once: true});\n // Put before in origin image to preserve z-index layering.\n this.el.before(this._overlay);\n // Set dimensions if needed\n const overlayOffset = this._overlay.getBoundingClientRect();\n this._overlay.style.width = this.windowWidth+'px';\n this._overlay.style.height = this.windowHeight+'px';\n this._overlay.style.left = -1 * overlayOffset.left+'px';\n this._overlay.style.top = -1 * overlayOffset.top+'px';\n anim.remove(this.el);\n anim.remove(this._overlay);\n // Animate Overlay\n anim({\n targets: this._overlay,\n opacity: 1,\n duration: this.options.inDuration,\n easing: 'easeOutQuad'\n });\n // Add and animate caption if it exists\n if (this.caption !== '') { \n if (this._photoCaption) anim.remove(this._photoCaption);\n this._photoCaption = document.createElement('div');\n this._photoCaption.classList.add('materialbox-caption');\n this._photoCaption.innerText = this.caption;\n document.body.append(this._photoCaption);\n this._photoCaption.style.display = 'inline';\n anim({\n targets: this._photoCaption,\n opacity: 1,\n duration: this.options.inDuration,\n easing: 'easeOutQuad'\n });\n }\n\n // Resize Image\n const widthPercent = this.originalWidth / this.windowWidth;\n const heightPercent = this.originalHeight / this.windowHeight;\n this.newWidth = 0;\n this.newHeight = 0; \n if (widthPercent > heightPercent) {\n // Width first\n const ratio = this.originalHeight / this.originalWidth;\n this.newWidth = this.windowWidth * 0.9;\n this.newHeight = this.windowWidth * 0.9 * ratio;\n }\n else {\n // Height first\n const ratio = this.originalWidth / this.originalHeight;\n this.newWidth = this.windowHeight * 0.9 * ratio;\n this.newHeight = this.windowHeight * 0.9;\n }\n this._animateImageIn();\n\n // Handle Exit triggers\n this._handleWindowScrollBound = this._handleWindowScroll.bind(this);\n this._handleWindowResizeBound = this._handleWindowResize.bind(this);\n this._handleWindowEscapeBound = this._handleWindowEscape.bind(this);\n window.addEventListener('scroll', this._handleWindowScrollBound);\n window.addEventListener('resize', this._handleWindowResizeBound);\n window.addEventListener('keyup', this._handleWindowEscapeBound);\n }\n\n close() {\n this._updateVars();\n this.doneAnimating = false;\n // onCloseStart callback\n if (typeof this.options.onCloseStart === 'function') {\n this.options.onCloseStart.call(this, this.el);\n }\n anim.remove(this.el);\n anim.remove(this._overlay);\n if (this.caption !== '') anim.remove(this._photoCaption); \n // disable exit handlers\n window.removeEventListener('scroll', this._handleWindowScrollBound);\n window.removeEventListener('resize', this._handleWindowResizeBound);\n window.removeEventListener('keyup', this._handleWindowEscapeBound);\n anim({\n targets: this._overlay,\n opacity: 0,\n duration: this.options.outDuration,\n easing: 'easeOutQuad',\n complete: () => {\n this.overlayActive = false;\n this._overlay.remove();\n }\n });\n this._animateImageOut();\n // Remove Caption + reset css settings on image\n if (this.caption !== '') {\n anim({\n targets: this._photoCaption,\n opacity: 0,\n duration: this.options.outDuration,\n easing: 'easeOutQuad',\n complete: () => {\n this._photoCaption.remove();\n }\n });\n }\n }\n }\n","import { Component } from \"./component\";\nimport anim from \"animejs\";\nimport { M } from \"./global\";\n\nconst _defaults = {\n opacity: 0.5,\n inDuration: 250,\n outDuration: 250,\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null,\n onCloseEnd: null,\n preventScrolling: true,\n dismissible: true,\n startingTop: '4%',\n endingTop: '10%'\n};\n\n export class Modal extends Component {\n el: HTMLElement;\n static _modalsOpen: number;\n static _count: number;\n isOpen: boolean;\n id: string;\n private _openingTrigger: any;\n private _overlay: HTMLElement;\n private _nthModalOpened: number;\n private _handleOverlayClickBound: any;\n private _handleModalCloseClickBound: any;\n private _handleKeydownBound: any;\n private _handleFocusBound: any;\n\n constructor(el, options) {\n super(Modal, el, options);\n (this.el as any).M_Modal = this;\n this.options = {...Modal.defaults, ...options};\n this.isOpen = false;\n this.id = this.el.id;\n this._openingTrigger = undefined;\n this._overlay = document.createElement('div');\n this._overlay.classList.add('modal-overlay');\n this.el.tabIndex = 0;\n this._nthModalOpened = 0;\n Modal._count++;\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n const domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Modal;\n }\n\n destroy() {\n Modal._count--;\n this._removeEventHandlers();\n this.el.removeAttribute('style');\n this._overlay.remove();\n (this.el as any).M_Modal = undefined;\n }\n\n _setupEventHandlers() {\n this._handleOverlayClickBound = this._handleOverlayClick.bind(this);\n this._handleModalCloseClickBound = this._handleModalCloseClick.bind(this);\n if (Modal._count === 1) {\n document.body.addEventListener('click', this._handleTriggerClick);\n }\n this._overlay.addEventListener('click', this._handleOverlayClickBound);\n this.el.addEventListener('click', this._handleModalCloseClickBound);\n }\n\n _removeEventHandlers() {\n if (Modal._count === 0) {\n document.body.removeEventListener('click', this._handleTriggerClick);\n }\n this._overlay.removeEventListener('click', this._handleOverlayClickBound);\n this.el.removeEventListener('click', this._handleModalCloseClickBound);\n }\n\n _handleTriggerClick(e) {\n const trigger = e.target.closest('.modal-trigger');\n if (!trigger) return;\n const modalId = M.getIdFromTrigger(trigger);\n const modalInstance = (document.getElementById(modalId) as any).M_Modal;\n if (modalInstance) modalInstance.open(trigger);\n e.preventDefault();\n }\n\n _handleOverlayClick() {\n if (this.options.dismissible) this.close();\n }\n\n _handleModalCloseClick(e) {\n const closeTrigger = e.target.closest('.modal-close');\n if (closeTrigger) this.close();\n }\n\n _handleKeydown(e) {\n // ESC key\n if (e.keyCode === 27 && this.options.dismissible) this.close();\n }\n\n _handleFocus(e) {\n // Only trap focus if this modal is the last model opened (prevents loops in nested modals).\n if (!this.el.contains(e.target) && this._nthModalOpened === Modal._modalsOpen) {\n this.el.focus();\n }\n }\n\n _animateIn() {\n // Set initial styles \n this.el.style.display = 'block';\n this.el.style.opacity = '0';\n this._overlay.style.display = 'block';\n this._overlay.style.opacity = '0';\n // Animate overlay\n anim({\n targets: this._overlay,\n opacity: this.options.opacity,\n duration: this.options.inDuration,\n easing: 'easeOutQuad'\n });\n // Define modal animation options\n const enterAnimOptions = {\n targets: this.el,\n duration: this.options.inDuration,\n easing: 'easeOutCubic',\n // Handle modal onOpenEnd callback\n complete: () => {\n if (typeof this.options.onOpenEnd === 'function') {\n this.options.onOpenEnd.call(this, this.el, this._openingTrigger);\n }\n }\n };\n // Bottom sheet animation\n if (this.el.classList.contains('bottom-sheet')) {\n enterAnimOptions['bottom'] = 0;\n enterAnimOptions['opacity'] = 1;\n }\n // Normal modal animation\n else {\n enterAnimOptions['top'] = [this.options.startingTop, this.options.endingTop];\n enterAnimOptions['opacity'] = 1;\n enterAnimOptions['scaleX'] = [0.8, 1];\n enterAnimOptions['scaleY'] = [0.8, 1];\n }\n anim(enterAnimOptions);\n }\n\n _animateOut() {\n // Animate overlay\n anim({\n targets: this._overlay,\n opacity: 0,\n duration: this.options.outDuration,\n easing: 'easeOutQuart'\n });\n // Define modal animation options\n const exitAnimOptions = {\n targets: this.el,\n duration: this.options.outDuration,\n easing: 'easeOutCubic',\n // Handle modal ready callback\n complete: () => {\n this.el.style.display = 'none';\n this._overlay.remove();\n // Call onCloseEnd callback\n if (typeof this.options.onCloseEnd === 'function') {\n this.options.onCloseEnd.call(this, this.el);\n }\n }\n };\n // Bottom sheet animation\n if (this.el.classList.contains('bottom-sheet')) {\n exitAnimOptions['bottom'] = '-100%';\n exitAnimOptions['opacity'] = 0;\n }\n // Normal modal animation\n else {\n exitAnimOptions['top'] = [this.options.endingTop, this.options.startingTop];\n exitAnimOptions['opacity'] = 0;\n exitAnimOptions['scaleX'] = 0.8;\n exitAnimOptions['scaleY'] = 0.8;\n }\n anim(exitAnimOptions);\n }\n\n open(trigger: HTMLElement|undefined): Modal {\n if (this.isOpen) return;\n this.isOpen = true;\n Modal._modalsOpen++;\n this._nthModalOpened = Modal._modalsOpen;\n // Set Z-Index based on number of currently open modals\n this._overlay.style.zIndex = (1000 + Modal._modalsOpen * 2).toString();\n this.el.style.zIndex = (1000 + Modal._modalsOpen * 2 + 1).toString();\n // Set opening trigger, undefined indicates modal was opened by javascript\n this._openingTrigger = !!trigger ? trigger : undefined;\n // onOpenStart callback\n if (typeof this.options.onOpenStart === 'function') {\n this.options.onOpenStart.call(this, this.el, this._openingTrigger);\n }\n if (this.options.preventScrolling) {\n document.body.style.overflow = 'hidden';\n }\n this.el.classList.add('open');\n this.el.insertAdjacentElement('afterend', this._overlay);\n if (this.options.dismissible) {\n this._handleKeydownBound = this._handleKeydown.bind(this);\n this._handleFocusBound = this._handleFocus.bind(this);\n document.addEventListener('keydown', this._handleKeydownBound);\n document.addEventListener('focus', this._handleFocusBound, true);\n }\n anim.remove(this.el);\n anim.remove(this._overlay);\n this._animateIn();\n // Focus modal\n this.el.focus();\n return this;\n }\n\n close() {\n if (!this.isOpen) return;\n this.isOpen = false;\n Modal._modalsOpen--;\n this._nthModalOpened = 0;\n // Call onCloseStart callback\n if (typeof this.options.onCloseStart === 'function') {\n this.options.onCloseStart.call(this, this.el);\n }\n this.el.classList.remove('open');\n // Enable body scrolling only if there are no more modals open.\n if (Modal._modalsOpen === 0) {\n document.body.style.overflow = '';\n }\n if (this.options.dismissible) {\n document.removeEventListener('keydown', this._handleKeydownBound);\n document.removeEventListener('focus', this._handleFocusBound, true);\n }\n anim.remove(this.el);\n anim.remove(this._overlay);\n this._animateOut();\n return this;\n }\n\n static{\n Modal._modalsOpen = 0;\n Modal._count = 0;\n }\n }\n","import { Component } from \"./component\";\nimport { M } from \"./global\";\n\n let _defaults = {\n responsiveThreshold: 0 // breakpoint for swipeable\n };\n\n export class Parallax extends Component {\n private _enabled: boolean;\n private _img: HTMLImageElement;\n private _handleImageLoadBound: any;\n static _parallaxes: any;\n static _handleScrollThrottled: any;\n static _handleWindowResizeThrottled: () => any;\n\n constructor(el, options) {\n super(Parallax, el, options);\n (this.el as any).M_Parallax = this;\n this.options = {...Parallax.defaults, ...options};\n this._enabled = window.innerWidth > this.options.responsiveThreshold;\n this._img = this.el.querySelector('img'); \n this._updateParallax();\n this._setupEventHandlers();\n this._setupStyles();\n Parallax._parallaxes.push(this);\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n let domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Parallax;\n }\n\n destroy() {\n Parallax._parallaxes.splice(Parallax._parallaxes.indexOf(this), 1);\n this._img.style.transform = '';\n this._removeEventHandlers();\n (this.el as any).M_Parallax = undefined;\n }\n\n static _handleScroll() {\n for (let i = 0; i < Parallax._parallaxes.length; i++) {\n let parallaxInstance = Parallax._parallaxes[i];\n parallaxInstance._updateParallax.call(parallaxInstance);\n }\n }\n\n static _handleWindowResize() {\n for (let i = 0; i < Parallax._parallaxes.length; i++) {\n let parallaxInstance = Parallax._parallaxes[i];\n parallaxInstance._enabled =\n window.innerWidth > parallaxInstance.options.responsiveThreshold;\n }\n }\n\n _setupEventHandlers() {\n this._handleImageLoadBound = this._handleImageLoad.bind(this);\n this._img.addEventListener('load', this._handleImageLoadBound);\n if (Parallax._parallaxes.length === 0) {\n Parallax._handleScrollThrottled = M.throttle(Parallax._handleScroll, 5);\n window.addEventListener('scroll', Parallax._handleScrollThrottled);\n Parallax._handleWindowResizeThrottled = M.throttle(Parallax._handleWindowResize, 5);\n window.addEventListener('resize', Parallax._handleWindowResizeThrottled);\n }\n }\n\n _removeEventHandlers() {\n this._img.removeEventListener('load', this._handleImageLoadBound);\n if (Parallax._parallaxes.length === 0) {\n window.removeEventListener('scroll', Parallax._handleScrollThrottled);\n window.removeEventListener('resize', Parallax._handleWindowResizeThrottled);\n }\n }\n\n _setupStyles() {\n this._img.style.opacity = '1';\n }\n\n _handleImageLoad() {\n this._updateParallax();\n }\n\n private _offset(el: Element) {\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n return {\n top: box.top + window.pageYOffset - docElem.clientTop,\n left: box.left + window.pageXOffset - docElem.clientLeft\n };\n }\n\n _updateParallax() {\n const containerHeight = this.el.getBoundingClientRect().height > 0 ? (this.el.parentNode as any).offsetHeight : 500;\n const imgHeight = this._img.offsetHeight;\n const parallaxDist = imgHeight - containerHeight;\n const bottom = this._offset(this.el).top + containerHeight;\n const top = this._offset(this.el).top;\n const scrollTop = M.getDocumentScrollTop();\n const windowHeight = window.innerHeight;\n const windowBottom = scrollTop + windowHeight;\n const percentScrolled = (windowBottom - top) / (containerHeight + windowHeight);\n const parallax = parallaxDist * percentScrolled;\n \n if (!this._enabled) {\n this._img.style.transform = '';\n }\n else if (bottom > scrollTop && top < scrollTop + windowHeight) {\n this._img.style.transform = `translate3D(-50%, ${parallax}px, 0)`;\n }\n }\n\n static {\n Parallax._parallaxes = [];\n }\n }\n\n \n\n","import { Component } from \"./component\";\nimport { M } from \"./global\";\n\n let _defaults = {\n top: 0,\n bottom: Infinity,\n offset: 0,\n onPositionChange: null\n };\n\n export class Pushpin extends Component {\n static _pushpins: any[];\n originalOffset: any;\n\n constructor(el, options) {\n super(Pushpin, el, options);\n (this.el as any).M_Pushpin = this;\n this.options = {...Pushpin.defaults, ...options};\n this.originalOffset = (this.el as HTMLElement).offsetTop;\n Pushpin._pushpins.push(this);\n this._setupEventHandlers();\n this._updatePosition();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n let domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Pushpin;\n }\n\n destroy() {\n (this.el as HTMLElement).style.top = null;\n this._removePinClasses();\n // Remove pushpin Inst\n let index = Pushpin._pushpins.indexOf(this);\n Pushpin._pushpins.splice(index, 1);\n if (Pushpin._pushpins.length === 0) {\n this._removeEventHandlers();\n }\n (this.el as any).M_Pushpin = undefined;\n }\n\n static _updateElements() {\n for (let elIndex in Pushpin._pushpins) {\n let pInstance = Pushpin._pushpins[elIndex];\n pInstance._updatePosition();\n }\n }\n\n _setupEventHandlers() {\n document.addEventListener('scroll', Pushpin._updateElements);\n }\n\n _removeEventHandlers() {\n document.removeEventListener('scroll', Pushpin._updateElements);\n }\n\n _updatePosition() {\n let scrolled = M.getDocumentScrollTop() + this.options.offset;\n\n if (\n this.options.top <= scrolled &&\n this.options.bottom >= scrolled &&\n !this.el.classList.contains('pinned')\n ) {\n this._removePinClasses();\n (this.el as HTMLElement).style.top = `${this.options.offset}px`;\n this.el.classList.add('pinned');\n\n // onPositionChange callback\n if (typeof this.options.onPositionChange === 'function') {\n this.options.onPositionChange.call(this, 'pinned');\n }\n }\n\n // Add pin-top (when scrolled position is above top)\n if (scrolled < this.options.top && !this.el.classList.contains('pin-top')) {\n this._removePinClasses();\n (this.el as HTMLElement).style.top = '0';\n this.el.classList.add('pin-top');\n\n // onPositionChange callback\n if (typeof this.options.onPositionChange === 'function') {\n this.options.onPositionChange.call(this, 'pin-top');\n }\n }\n\n // Add pin-bottom (when scrolled position is below bottom)\n if (scrolled > this.options.bottom && !this.el.classList.contains('pin-bottom')) {\n this._removePinClasses();\n this.el.classList.add('pin-bottom');\n (this.el as HTMLElement).style.top = `${this.options.bottom - this.originalOffset}px`;\n\n // onPositionChange callback\n if (typeof this.options.onPositionChange === 'function') {\n this.options.onPositionChange.call(this, 'pin-bottom');\n }\n }\n }\n\n _removePinClasses() {\n // IE 11 bug (can't remove multiple classes in one line)\n this.el.classList.remove('pin-top');\n this.el.classList.remove('pinned');\n this.el.classList.remove('pin-bottom');\n }\n\n static {\n Pushpin._pushpins = [];\n }\n } \n\n ","import { Component } from \"./component\";\nimport anim from \"animejs\";\n\nconst _defaults = {};\n\n// TODO: !!!!!\n\n export class Range extends Component {\n el: HTMLInputElement;\n private _mousedown: boolean;\n private _handleRangeChangeBound: any;\n private _handleRangeMousedownTouchstartBound: any;\n private _handleRangeInputMousemoveTouchmoveBound: any;\n private _handleRangeMouseupTouchendBound: any;\n private _handleRangeBlurMouseoutTouchleaveBound: any;\n value: HTMLElement;\n thumb: HTMLElement;\n\n constructor(el, options) {\n super(Range, el, options);\n (this.el as any).M_Range = this;\n this.options = {...Range.defaults, ...options};\n this._mousedown = false;\n this._setupThumb();\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n const domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Range;\n }\n\n destroy() {\n this._removeEventHandlers();\n this._removeThumb();\n (this.el as any).M_Range = undefined;\n }\n\n _setupEventHandlers() {\n this._handleRangeChangeBound = this._handleRangeChange.bind(this);\n this._handleRangeMousedownTouchstartBound = this._handleRangeMousedownTouchstart.bind(this);\n this._handleRangeInputMousemoveTouchmoveBound = this._handleRangeInputMousemoveTouchmove.bind(this);\n this._handleRangeMouseupTouchendBound = this._handleRangeMouseupTouchend.bind(this);\n this._handleRangeBlurMouseoutTouchleaveBound = this._handleRangeBlurMouseoutTouchleave.bind(this);\n this.el.addEventListener('change', this._handleRangeChangeBound);\n this.el.addEventListener('mousedown', this._handleRangeMousedownTouchstartBound);\n this.el.addEventListener('touchstart', this._handleRangeMousedownTouchstartBound);\n this.el.addEventListener('input', this._handleRangeInputMousemoveTouchmoveBound);\n this.el.addEventListener('mousemove', this._handleRangeInputMousemoveTouchmoveBound);\n this.el.addEventListener('touchmove', this._handleRangeInputMousemoveTouchmoveBound);\n this.el.addEventListener('mouseup', this._handleRangeMouseupTouchendBound);\n this.el.addEventListener('touchend', this._handleRangeMouseupTouchendBound);\n this.el.addEventListener('blur', this._handleRangeBlurMouseoutTouchleaveBound);\n this.el.addEventListener('mouseout', this._handleRangeBlurMouseoutTouchleaveBound);\n this.el.addEventListener('touchleave', this._handleRangeBlurMouseoutTouchleaveBound);\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('change', this._handleRangeChangeBound);\n this.el.removeEventListener('mousedown', this._handleRangeMousedownTouchstartBound);\n this.el.removeEventListener('touchstart', this._handleRangeMousedownTouchstartBound);\n this.el.removeEventListener('input', this._handleRangeInputMousemoveTouchmoveBound);\n this.el.removeEventListener('mousemove', this._handleRangeInputMousemoveTouchmoveBound);\n this.el.removeEventListener('touchmove', this._handleRangeInputMousemoveTouchmoveBound);\n this.el.removeEventListener('mouseup', this._handleRangeMouseupTouchendBound);\n this.el.removeEventListener('touchend', this._handleRangeMouseupTouchendBound);\n this.el.removeEventListener('blur', this._handleRangeBlurMouseoutTouchleaveBound);\n this.el.removeEventListener('mouseout', this._handleRangeBlurMouseoutTouchleaveBound);\n this.el.removeEventListener('touchleave', this._handleRangeBlurMouseoutTouchleaveBound);\n }\n\n _handleRangeChange() {\n this.value.innerHTML = this.el.value;\n if (!this.thumb.classList.contains('active')) {\n this._showRangeBubble();\n }\n const offsetLeft = this._calcRangeOffset();\n this.thumb.classList.add('active');\n this.thumb.style.left = offsetLeft+'px';\n }\n\n _handleRangeMousedownTouchstart(e) {\n // Set indicator value\n this.value.innerHTML = this.el.value;\n this._mousedown = true;\n this.el.classList.add('active');\n if (!this.thumb.classList.contains('active')) {\n this._showRangeBubble();\n }\n if (e.type !== 'input') {\n const offsetLeft = this._calcRangeOffset();\n this.thumb.classList.add('active');\n this.thumb.style.left = offsetLeft+'px';\n }\n }\n\n _handleRangeInputMousemoveTouchmove() {\n if (this._mousedown) {\n if (!this.thumb.classList.contains('active')) {\n this._showRangeBubble();\n }\n const offsetLeft = this._calcRangeOffset();\n this.thumb.classList.add('active');\n this.thumb.style.left = offsetLeft+'px';\n this.value.innerHTML = this.el.value;\n }\n }\n\n _handleRangeMouseupTouchend() {\n this._mousedown = false;\n this.el.classList.remove('active');\n }\n\n _handleRangeBlurMouseoutTouchleave() {\n if (!this._mousedown) {\n const paddingLeft = parseInt(getComputedStyle(this.el).paddingLeft);\n const marginLeft = 7 + paddingLeft + 'px';\n if (this.thumb.classList.contains('active')) {\n anim.remove(this.thumb);\n anim({\n targets: this.thumb,\n height: 0,\n width: 0,\n top: 10,\n easing: 'easeOutQuad',\n marginLeft: marginLeft,\n duration: 100\n });\n }\n this.thumb.classList.remove('active');\n }\n }\n\n _setupThumb() {\n this.thumb = document.createElement('span');\n this.value = document.createElement('span');\n this.thumb.classList.add('thumb');\n this.value.classList.add('value');\n this.thumb.append(this.value);\n this.el.after(this.thumb);\n }\n\n _removeThumb() {\n this.thumb.remove();\n }\n\n _showRangeBubble() {\n const paddingLeft = parseInt(getComputedStyle(this.thumb.parentElement).paddingLeft);\n const marginLeft = -7 + paddingLeft + 'px'; // TODO: fix magic number?\n anim.remove(this.thumb);\n anim({\n targets: this.thumb,\n height: 30,\n width: 30,\n top: -30,\n marginLeft: marginLeft,\n duration: 300,\n easing: 'easeOutQuint'\n });\n }\n\n _calcRangeOffset(): number {\n const width = this.el.getBoundingClientRect().width - 15;\n const max = parseFloat(this.el.getAttribute('max')) || 100; // Range default max\n const min = parseFloat(this.el.getAttribute('min')) || 0; // Range default min \n const percent = (parseFloat(this.el.value) - min) / (max - min);\n return percent * width;\n }\n\n static Init(){\n Range.init(document.querySelectorAll('input[type=range]'), {});\n }\n }\n\n","import { Component } from \"./component\";\nimport { M } from \"./global\";\nimport anim from \"animejs\";\n\nlet _defaults = {\n throttle: 100,\n scrollOffset: 200, // offset - 200 allows elements near bottom of page to scroll\n activeClass: 'active',\n getActiveElement: (id: string): string => { return 'a[href=\"#'+id+'\"]'; }\n};\n\n export class ScrollSpy extends Component {\n el: HTMLElement;\n static _elements: ScrollSpy[];\n static _count: number;\n static _increment: number;\n tickId: number;\n id: any;\n static _elementsInView: ScrollSpy[];\n static _visibleElements: any[];\n private _handleThrottledResizeBound: any;\n private _handleWindowScrollBound: any;\n static _ticks: number;\n\n constructor(el, options) {\n super(ScrollSpy, el, options);\n (this.el as any).M_ScrollSpy = this;\n this.options = {...ScrollSpy.defaults, ...options};\n ScrollSpy._elements.push(this);\n ScrollSpy._count++;\n ScrollSpy._increment++;\n this.tickId = -1;\n this.id = ScrollSpy._increment;\n this._setupEventHandlers();\n this._handleWindowScroll();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n let domElem = !!el.jquery ? el[0] : el;\n return domElem.M_ScrollSpy;\n }\n\n destroy() {\n ScrollSpy._elements.splice(ScrollSpy._elements.indexOf(this), 1);\n ScrollSpy._elementsInView.splice(ScrollSpy._elementsInView.indexOf(this), 1);\n ScrollSpy._visibleElements.splice(ScrollSpy._visibleElements.indexOf(this.el), 1);\n ScrollSpy._count--;\n this._removeEventHandlers();\n const actElem = document.querySelector(this.options.getActiveElement(this.el.id));\n actElem.classList.remove(this.options.activeClass);\n (this.el as any).M_ScrollSpy = undefined;\n }\n\n _setupEventHandlers() {\n let throttledResize = M.throttle(this._handleWindowScroll, 200);\n this._handleThrottledResizeBound = throttledResize.bind(this);\n this._handleWindowScrollBound = this._handleWindowScroll.bind(this);\n if (ScrollSpy._count === 1) {\n window.addEventListener('scroll', this._handleWindowScrollBound);\n window.addEventListener('resize', this._handleThrottledResizeBound);\n document.body.addEventListener('click', this._handleTriggerClick);\n }\n }\n\n _removeEventHandlers() {\n if (ScrollSpy._count === 0) {\n window.removeEventListener('scroll', this._handleWindowScrollBound);\n window.removeEventListener('resize', this._handleThrottledResizeBound);\n document.body.removeEventListener('click', this._handleTriggerClick);\n }\n }\n\n _handleTriggerClick(e) {\n const trigger = e.target;\n for (let i = ScrollSpy._elements.length - 1; i >= 0; i--) {\n const scrollspy = ScrollSpy._elements[i];\n\n const x = document.querySelector('a[href=\"#'+scrollspy.el.id+'\"]');\n if (trigger === x) {\n e.preventDefault();\n const offset = ScrollSpy._offset(scrollspy.el).top + 1;\n\n anim({\n targets: [document.documentElement, document.body],\n scrollTop: offset - scrollspy.options.scrollOffset,\n duration: 400,\n easing: 'easeOutCubic'\n });\n\n break;\n }\n }\n }\n\n _handleWindowScroll() {\n // unique tick id\n ScrollSpy._ticks++;\n\n // viewport rectangle\n let top = M.getDocumentScrollTop(),\n left = M.getDocumentScrollLeft(),\n right = left + window.innerWidth,\n bottom = top + window.innerHeight;\n\n // determine which elements are in view\n let intersections = ScrollSpy._findElements(top, right, bottom, left);\n for (let i = 0; i < intersections.length; i++) {\n let scrollspy = intersections[i];\n let lastTick = scrollspy.tickId;\n if (lastTick < 0) {\n // entered into view\n scrollspy._enter();\n }\n\n // update tick id\n scrollspy.tickId = ScrollSpy._ticks;\n }\n\n for (let i = 0; i < ScrollSpy._elementsInView.length; i++) {\n let scrollspy = ScrollSpy._elementsInView[i];\n let lastTick = scrollspy.tickId;\n if (lastTick >= 0 && lastTick !== ScrollSpy._ticks) {\n // exited from view\n scrollspy._exit();\n scrollspy.tickId = -1;\n }\n }\n // remember elements in view for next tick\n ScrollSpy._elementsInView = intersections;\n }\n\n static _offset(el) {\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n return {\n top: box.top + window.pageYOffset - docElem.clientTop,\n left: box.left + window.pageXOffset - docElem.clientLeft\n };\n }\n\n static _findElements(top: number, right: number, bottom: number, left: number): ScrollSpy[] {\n let hits = [];\n for (let i = 0; i < ScrollSpy._elements.length; i++) {\n let scrollspy = ScrollSpy._elements[i];\n let currTop = top + scrollspy.options.scrollOffset || 200;\n\n if (scrollspy.el.getBoundingClientRect().height > 0) {\n let elTop = ScrollSpy._offset(scrollspy.el).top,\n elLeft = ScrollSpy._offset(scrollspy.el).left,\n elRight = elLeft + scrollspy.el.getBoundingClientRect().width,\n elBottom = elTop + scrollspy.el.getBoundingClientRect().height;\n\n let isIntersect = !(\n elLeft > right ||\n elRight < left ||\n elTop > bottom ||\n elBottom < currTop\n );\n\n if (isIntersect) {\n hits.push(scrollspy);\n }\n }\n }\n return hits;\n }\n\n _enter() {\n ScrollSpy._visibleElements = ScrollSpy._visibleElements.filter(value => value.getBoundingClientRect().height !== 0);\n\n if (ScrollSpy._visibleElements[0]) {\n const actElem = document.querySelector(this.options.getActiveElement(ScrollSpy._visibleElements[0].id));\n actElem?.classList.remove(this.options.activeClass);\n\n if (ScrollSpy._visibleElements[0].M_ScrollSpy && this.id < ScrollSpy._visibleElements[0].M_ScrollSpy.id) {\n ScrollSpy._visibleElements.unshift(this.el);\n }\n else {\n ScrollSpy._visibleElements.push(this.el);\n }\n }\n else {\n ScrollSpy._visibleElements.push(this.el);\n }\n const selector = this.options.getActiveElement(ScrollSpy._visibleElements[0].id);\n document.querySelector(selector)?.classList.add(this.options.activeClass);\n }\n\n _exit() {\n ScrollSpy._visibleElements = ScrollSpy._visibleElements.filter(value => value.getBoundingClientRect().height !== 0);\n\n if (ScrollSpy._visibleElements[0]) {\n const actElem = document.querySelector(this.options.getActiveElement(ScrollSpy._visibleElements[0].id));\n actElem?.classList.remove(this.options.activeClass);\n\n ScrollSpy._visibleElements = ScrollSpy._visibleElements.filter((x) => x.id != this.el.id);\n\n if (ScrollSpy._visibleElements[0]) {\n // Check if empty\n const selector = this.options.getActiveElement(ScrollSpy._visibleElements[0].id); \n document.querySelector(selector)?.classList.add(this.options.activeClass);\n }\n }\n }\n\n static {\n ScrollSpy._elements = [];\n ScrollSpy._elementsInView = [];\n ScrollSpy._visibleElements = []; // Array.<cash>\n ScrollSpy._count = 0;\n ScrollSpy._increment = 0;\n ScrollSpy._ticks = 0;\n }\n }\n ","import { Component } from \"./component\";\nimport { Dropdown } from \"./dropdown\";\nimport { M } from \"./global\";\n\nlet _defaults = {\n classes: '',\n dropdownOptions: {}\n};\n\ntype ValueStruct = {\n el: any,\n optionEl: HTMLOptionElement,\n}\n\n export class FormSelect extends Component {\n el: HTMLSelectElement;\n isMultiple: boolean;\n private _values: ValueStruct[];\n labelEl: HTMLLabelElement;\n //private _labelFor: boolean;\n dropdownOptions: HTMLUListElement;\n input: HTMLInputElement;\n dropdown: Dropdown;\n wrapper: HTMLDivElement;\n selectOptions: HTMLElement[];\n private _handleSelectChangeBound: any;\n private _handleOptionClickBound: any;\n private _handleInputClickBound: any;\n\n constructor(el, options) {\n super(FormSelect, el, options);\n if (this.el.classList.contains('browser-default')) return;\n (this.el as any).M_FormSelect = this;\n this.options = {...FormSelect.defaults, ...options};\n this.isMultiple = this.el.multiple;\n this.el.tabIndex = -1;\n this._values = [];\n //this.labelEl = null;\n //this._labelFor = false;\n this._setupDropdown();\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n let domElem = !!el.jquery ? el[0] : el;\n return domElem.M_FormSelect;\n }\n\n destroy() {\n // Returns label to its original owner\n //if (this._labelFor) this.labelEl.setAttribute(\"for\", this.el.id);\n this._removeEventHandlers();\n this._removeDropdown();\n (this.el as any).M_FormSelect = undefined;\n }\n\n _setupEventHandlers() {\n this._handleSelectChangeBound = this._handleSelectChange.bind(this);\n this._handleOptionClickBound = this._handleOptionClick.bind(this);\n this._handleInputClickBound = this._handleInputClick.bind(this);\n this.dropdownOptions.querySelectorAll('li:not(.optgroup)').forEach((el) => {\n el.addEventListener('click', this._handleOptionClickBound);\n el.addEventListener('keydown', (e: KeyboardEvent) => {\n if (e.key === \" \" || e.key === \"Enter\") this._handleOptionClickBound(e);\n });\n });\n this.el.addEventListener('change', this._handleSelectChangeBound);\n this.input.addEventListener('click', this._handleInputClickBound);\n }\n\n _removeEventHandlers() {\n this.dropdownOptions.querySelectorAll('li:not(.optgroup)').forEach((el) => {\n el.removeEventListener('click', this._handleOptionClickBound);\n });\n this.el.removeEventListener('change', this._handleSelectChangeBound);\n this.input.removeEventListener('click', this._handleInputClickBound);\n }\n\n _handleSelectChange(e) {\n this._setValueToInput();\n }\n\n _handleOptionClick(e) {\n e.preventDefault();\n const virtualOption = e.target.closest('li');\n this._selectOptionElement(virtualOption);\n e.stopPropagation();\n }\n\n _arraysEqual(a, b) {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; ++i) if (a[i] !== b[i]) return false;\n return true;\n }\n\n _selectOptionElement(virtualOption: HTMLElement) {\n if (!virtualOption.classList.contains('disabled') && !virtualOption.classList.contains('optgroup')) {\n const value = this._values.find((value) => value.optionEl === virtualOption);\n const previousSelectedValues = this.getSelectedValues();\n if (this.isMultiple) {\n // Multi-Select\n this._toggleEntryFromArray(value);\n }\n else {\n // Single-Select\n this._deselectAll();\n this._selectValue(value);\n }\n // Refresh Input-Text\n this._setValueToInput();\n // Trigger Change-Event only when data is different\n const actualSelectedValues = this.getSelectedValues();\n const selectionHasChanged = !this._arraysEqual(\n previousSelectedValues,\n actualSelectedValues\n );\n if (selectionHasChanged) this.el.dispatchEvent(new Event('change')); // trigger('change');\n }\n if (!this.isMultiple) this.dropdown.close();\n }\n\n _handleInputClick() {\n if (this.dropdown && this.dropdown.isOpen) { \n this._setValueToInput();\n this._setSelectedStates();\n }\n }\n\n _setupDropdown() {\n // Get Label\n this.labelEl = this.el.parentElement.querySelector('label');\n\n // Create Wrapper\n this.wrapper = document.createElement('div');\n this.wrapper.classList.add('select-wrapper', 'input-field');\n if (this.options.classes.length > 0) {\n this.wrapper.classList.add(this.options.classes.split(' '));\n }\n this.el.before(this.wrapper);\n\n // Move actual select element into overflow hidden wrapper\n const hideSelect = document.createElement('div');\n hideSelect.classList.add('hide-select');\n this.wrapper.append(hideSelect);\n hideSelect.appendChild(this.el);\n\n if (this.el.disabled) this.wrapper.classList.add('disabled');\n\n this.selectOptions = <HTMLElement[]>Array.from(this.el.children).filter(el => ['OPTION','OPTGROUP'].includes(el.tagName));\n \n // Create dropdown\n this.dropdownOptions = document.createElement('ul');\n this.dropdownOptions.id = `select-options-${M.guid()}`;\n this.dropdownOptions.classList.add('dropdown-content', 'select-dropdown');\n this.dropdownOptions.setAttribute('role', 'listbox');\n this.dropdownOptions.ariaMultiSelectable = this.isMultiple.toString();\n if (this.isMultiple) this.dropdownOptions.classList.add('multiple-select-dropdown');\n\n // Create dropdown structure\n if (this.selectOptions.length > 0) {\n this.selectOptions.forEach((realOption) => {\n if (realOption.tagName === 'OPTION') {\n // Option\n const virtualOption = this._createAndAppendOptionWithIcon(realOption, this.isMultiple ? 'multiple' : undefined);\n this._addOptionToValues(realOption, virtualOption);\n }\n else if (realOption.tagName === 'OPTGROUP') {\n // Optgroup \n const groupId = \"opt-group-\"+M.guid(); \n const groupParent = document.createElement('li');\n groupParent.classList.add('optgroup');\n groupParent.tabIndex = -1;\n groupParent.setAttribute('role', 'group');\n groupParent.setAttribute('aria-labelledby', groupId);\n groupParent.innerHTML = `<span id=\"${groupId}\" role=\"presentation\">${realOption.getAttribute('label')}</span>`;\n this.dropdownOptions.append(groupParent);\n \n const groupChildren = [];\n const selectOptions = <HTMLOptionElement[]>Array.from(realOption.children).filter(el => el.tagName === 'OPTION');\n selectOptions.forEach(realOption => {\n const virtualOption = this._createAndAppendOptionWithIcon(realOption, 'optgroup-option');\n const childId = \"opt-child-\"+M.guid();\n virtualOption.id = childId;\n groupChildren.push(childId);\n this._addOptionToValues(realOption, virtualOption);\n });\n groupParent.setAttribute(\"aria-owns\", groupChildren.join(\" \"));\n }\n });\n }\n this.wrapper.append(this.dropdownOptions);\n\n // Add input dropdown\n this.input = document.createElement('input');\n this.input.id = \"m_select-input-\" + M.guid();\n this.input.classList.add('select-dropdown', 'dropdown-trigger');\n this.input.type = 'text';\n this.input.readOnly = true;\n this.input.setAttribute('data-target', this.dropdownOptions.id);\n this.input.ariaReadOnly = 'true';\n this.input.ariaRequired = this.el.hasAttribute(\"required\").toString(); //setAttribute(\"aria-required\", this.el.hasAttribute(\"required\"));\n if (this.el.disabled) this.input.disabled = true; // 'true');\n\n // Place Label after input\n if (this.labelEl) {\n this.input.after(this.labelEl); \n this.labelEl.setAttribute('for', this.input.id);\n this.labelEl.id = \"m_select-label-\" + M.guid(); \n this.dropdownOptions.setAttribute(\"aria-labelledby\", this.labelEl.id);\n }\n\n // Makes new element to assume HTML's select label and aria-attributes, if exists\n /*\n if (this.el.hasAttribute(\"aria-labelledby\")){\n console.log(1);\n this.labelEl = <HTMLLabelElement>document.getElementById(this.el.getAttribute(\"aria-labelledby\"));\n }\n else if (this.el.id != \"\"){\n console.log(2);\n const label = document.createElement('label');\n label.setAttribute('for', this.el.id);\n if (label){\n this.labelEl = label;\n this.labelEl.removeAttribute(\"for\");\n this._labelFor = true;\n }\n }\n */\n // Tries to find a valid label in parent element\n // if (!this.labelEl) {\n // this.labelEl = this.el.parentElement.querySelector('label');\n // }\n // if (this.labelEl && this.labelEl.id == \"\") {\n // this.labelEl.id = \"m_select-label-\" + M.guid();\n // }\n // if (this.labelEl) {\n // this.labelEl.setAttribute(\"for\", this.input.id);\n // this.dropdownOptions.setAttribute(\"aria-labelledby\", this.labelEl.id);\n // }\n // else\n // this.dropdownOptions.ariaLabel = '';\n\n const attrs = this.el.attributes;\n for (let i = 0; i < attrs.length; ++i){\n const attr = attrs[i];\n if (attr.name.startsWith(\"aria-\"))\n this.input.setAttribute(attr.name, attr.value);\n }\n\n // Adds aria-attributes to input element\n this.input.setAttribute('role', 'combobox');\n this.input.ariaExpanded = 'false';\n this.input.setAttribute(\"aria-owns\", this.dropdownOptions.id);\n this.input.setAttribute(\"aria-controls\", this.dropdownOptions.id);\n this.input.placeholder = \" \";\n\n this.wrapper.prepend(this.input);\n this._setValueToInput();\n\n // Add caret\n const dropdownIcon = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); //document.createElement('svg')\n dropdownIcon.classList.add('caret');\n dropdownIcon.setAttribute('height', '24');\n dropdownIcon.setAttribute('width', '24');\n dropdownIcon.setAttribute('viewBox', '0 0 24 24');\n dropdownIcon.ariaHidden = 'true';\n dropdownIcon.innerHTML = `<path d=\"M7 10l5 5 5-5z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/>`;\n this.wrapper.prepend(dropdownIcon);\n\n // Initialize dropdown\n if (!this.el.disabled) {\n const dropdownOptions = {...this.options.dropdownOptions}; // TODO:\n dropdownOptions.coverTrigger = false;\n const userOnOpenEnd = dropdownOptions.onOpenEnd;\n const userOnCloseEnd = dropdownOptions.onCloseEnd;\n // Add callback for centering selected option when dropdown content is scrollable\n dropdownOptions.onOpenEnd = (el) => {\n const selectedOption = this.dropdownOptions.querySelector('.selected');\n if (selectedOption) {\n // Focus selected option in dropdown\n M.keyDown = true;\n this.dropdown.focusedIndex = [...selectedOption.parentNode.children].indexOf(selectedOption);\n this.dropdown._focusFocusedItem();\n M.keyDown = false;\n // Handle scrolling to selected option\n if (this.dropdown.isScrollable) {\n let scrollOffset =\n selectedOption.getBoundingClientRect().top -\n (this.dropdownOptions as HTMLElement).getBoundingClientRect().top; // scroll to selected option\n scrollOffset -= this.dropdownOptions.clientHeight / 2; // center in dropdown\n this.dropdownOptions.scrollTop = scrollOffset;\n }\n }\n this.input.ariaExpanded = 'true';\n // Handle user declared onOpenEnd if needed\n if (userOnOpenEnd && typeof userOnOpenEnd === 'function')\n userOnOpenEnd.call(this.dropdown, this.el);\n };\n // Add callback for reseting \"expanded\" state\n dropdownOptions.onCloseEnd = (el) => {\n this.input.ariaExpanded = 'false';\n // Handle user declared onOpenEnd if needed\n if (userOnCloseEnd && typeof userOnCloseEnd === 'function')\n userOnCloseEnd.call(this.dropdown, this.el);\n };\n // Prevent dropdown from closing too early\n dropdownOptions.closeOnClick = false;\n this.dropdown = M.Dropdown.init(this.input, dropdownOptions);\n }\n // Add initial selections\n this._setSelectedStates();\n\n // ! Workaround for Label: move label up again\n if (this.labelEl) this.input.after(this.labelEl);\n }\n\n _addOptionToValues(realOption, virtualOption) {\n this._values.push({ el: realOption, optionEl: virtualOption });\n }\n\n _removeDropdown() {\n this.wrapper.querySelector('.caret').remove();\n this.input.remove();\n this.dropdownOptions.remove();\n this.wrapper.before(this.el);\n this.wrapper.remove();\n }\n\n _createAndAppendOptionWithIcon(realOption, type: string) {\n const li = document.createElement('li');\n li.setAttribute('role', 'option');\n if (realOption.disabled){\n li.classList.add('disabled');\n li.ariaDisabled = 'true';\n }\n if (type === 'optgroup-option') li.classList.add(type);\n // Text / Checkbox\n const span = document.createElement('span');\n if (this.isMultiple)\n span.innerHTML = `<label><input type=\"checkbox\"${\n realOption.disabled ? ' disabled=\"disabled\"' : ''\n }><span>${realOption.innerHTML}</span></label>`;\n else\n span.innerHTML = realOption.innerHTML;\n li.appendChild(span);\n // add Icon\n const iconUrl = realOption.getAttribute('data-icon');\n const classes = realOption.getAttribute('class')?.split();\n if (iconUrl) {\n const img = document.createElement('img');\n if (classes) img.classList.add(classes);\n img.src = iconUrl;\n img.ariaHidden = 'true';\n li.prepend(img);\n }\n // Check for multiple type\n this.dropdownOptions.append(li);\n return li;\n }\n\n _selectValue(value) {\n value.el.selected = true;\n value.optionEl.classList.add('selected');\n value.optionEl.ariaSelected = 'true'; // setAttribute(\"aria-selected\", true);\n const checkbox = value.optionEl.querySelector('input[type=\"checkbox\"]');\n if (checkbox) checkbox.checked = true;\n }\n\n _deselectValue(value) {\n value.el.selected = false;\n value.optionEl.classList.remove('selected');\n value.optionEl.ariaSelected = 'false'; //setAttribute(\"aria-selected\", false);\n const checkbox = value.optionEl.querySelector('input[type=\"checkbox\"]');\n if (checkbox) checkbox.checked = false;\n }\n\n _deselectAll() {\n this._values.forEach(value => this._deselectValue(value));\n }\n\n _isValueSelected(value) {\n const realValues = this.getSelectedValues();\n return realValues.some((realValue) => realValue === value.el.value);\n }\n\n _toggleEntryFromArray(value) {\n if (this._isValueSelected(value))\n this._deselectValue(value);\n else\n this._selectValue(value);\n }\n\n _getSelectedOptions() {\n // remove null, false, ... values\n return Array.prototype.filter.call(this.el.selectedOptions, (realOption) => realOption);\n }\n\n _setValueToInput() {\n const realOptions = this._getSelectedOptions();\n const values = this._values.filter((value) => realOptions.indexOf(value.el) >= 0);\n const texts = values.map((value) => value.optionEl.querySelector('span').innerText.trim());\n // Set input-text to first Option with empty value which indicates a description like \"choose your option\"\n if (texts.length === 0) {\n const firstDisabledOption = <HTMLOptionElement>this.el.querySelector('option:disabled');\n if (firstDisabledOption && firstDisabledOption.value === '') {\n this.input.value = firstDisabledOption.innerText;\n return;\n }\n }\n this.input.value = texts.join(', ');\n }\n\n _setSelectedStates() {\n this._values.forEach((value) => {\n const optionIsSelected = value.el.selected;\n const cb = <HTMLInputElement>value.optionEl.querySelector('input[type=\"checkbox\"]');\n if (cb) cb.checked = optionIsSelected;\n if (optionIsSelected) {\n this._activateOption(this.dropdownOptions, value.optionEl);\n }\n else {\n value.optionEl.classList.remove('selected');\n value.optionEl.ariaSelected = 'false'; // attr(\"aria-selected\", 'false');\n }\n });\n }\n\n _activateOption(ul: HTMLElement, li: HTMLElement) {\n if (!li) return;\n if (!this.isMultiple) ul.querySelectorAll('li.selected').forEach(li => li.classList.remove('selected'));\n li.classList.add('selected');\n li.ariaSelected = 'true';\n }\n\n getSelectedValues() {\n return this._getSelectedOptions().map((realOption) => realOption.value);\n }\n }\n","import { Component } from \"./component\";\nimport { M } from \"./global\";\nimport anim from \"animejs\";\n\nconst _defaults = {\n edge: 'left',\n draggable: true,\n dragTargetWidth: '10px',\n inDuration: 250,\n outDuration: 200,\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null,\n onCloseEnd: null,\n preventScrolling: true\n};\n\n export class Sidenav extends Component {\n id: any;\n isOpen: boolean;\n isFixed: boolean;\n isDragged: boolean;\n lastWindowWidth: number;\n lastWindowHeight: number;\n static _sidenavs: any;\n private _overlay: HTMLElement;\n dragTarget: Element;\n private _closeBound: any;\n private _handleDragTargetDragBound: any;\n private _handleDragTargetReleaseBound: any;\n private _handleCloseDragBound: any;\n private _handleCloseReleaseBound: any;\n private _handleCloseTriggerClickBound: any;\n private _handleWindowResizeBound: any;\n private _startingXpos: number;\n private _xPos: number;\n private _time: number;\n private _width: number;\n private _initialScrollTop: number;\n private _verticallyScrolling: boolean;\n private deltaX: number; \n private velocityX: number;\n private percentOpen: number;\n\n constructor(el, options) {\n super(Sidenav, el, options);\n (this.el as any).M_Sidenav = this;\n this.id = this.el.id;\n this.options = {...Sidenav.defaults, ...options};\n this.isOpen = false;\n this.isFixed = this.el.classList.contains('sidenav-fixed');\n this.isDragged = false;\n // Window size variables for window resize checks\n this.lastWindowWidth = window.innerWidth;\n this.lastWindowHeight = window.innerHeight;\n this._createOverlay();\n this._createDragTarget();\n this._setupEventHandlers();\n this._setupClasses();\n this._setupFixed();\n Sidenav._sidenavs.push(this);\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n const domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Sidenav;\n }\n\n destroy() {\n this._removeEventHandlers();\n this._enableBodyScrolling();\n this._overlay.parentNode.removeChild(this._overlay);\n this.dragTarget.parentNode.removeChild(this.dragTarget);\n (this.el as any).M_Sidenav = undefined;\n (this.el as HTMLElement).style.transform = '';\n const index = Sidenav._sidenavs.indexOf(this);\n if (index >= 0) {\n Sidenav._sidenavs.splice(index, 1);\n }\n }\n\n _createOverlay() {\n this._overlay = document.createElement('div');\n this._closeBound = this.close.bind(this);\n this._overlay.classList.add('sidenav-overlay');\n this._overlay.addEventListener('click', this._closeBound);\n document.body.appendChild(this._overlay);\n }\n\n _setupEventHandlers() {\n if (Sidenav._sidenavs.length === 0) {\n document.body.addEventListener('click', this._handleTriggerClick);\n }\n this._handleDragTargetDragBound = this._handleDragTargetDrag.bind(this);\n this._handleDragTargetReleaseBound = this._handleDragTargetRelease.bind(this);\n this._handleCloseDragBound = this._handleCloseDrag.bind(this);\n this._handleCloseReleaseBound = this._handleCloseRelease.bind(this);\n this._handleCloseTriggerClickBound = this._handleCloseTriggerClick.bind(this);\n var passiveIfSupported: boolean = null;\n this.dragTarget.addEventListener('touchmove', this._handleDragTargetDragBound, passiveIfSupported);\n this.dragTarget.addEventListener('touchend', this._handleDragTargetReleaseBound);\n this._overlay.addEventListener('touchmove', this._handleCloseDragBound, passiveIfSupported);\n this._overlay.addEventListener('touchend', this._handleCloseReleaseBound);\n this.el.addEventListener('touchmove', this._handleCloseDragBound, passiveIfSupported);\n this.el.addEventListener('touchend', this._handleCloseReleaseBound);\n this.el.addEventListener('click', this._handleCloseTriggerClickBound);\n // Add resize for side nav fixed\n if (this.isFixed) {\n this._handleWindowResizeBound = this._handleWindowResize.bind(this);\n window.addEventListener('resize', this._handleWindowResizeBound);\n }\n }\n\n _removeEventHandlers() {\n if (Sidenav._sidenavs.length === 1) {\n document.body.removeEventListener('click', this._handleTriggerClick);\n }\n this.dragTarget.removeEventListener('touchmove', this._handleDragTargetDragBound);\n this.dragTarget.removeEventListener('touchend', this._handleDragTargetReleaseBound);\n this._overlay.removeEventListener('touchmove', this._handleCloseDragBound);\n this._overlay.removeEventListener('touchend', this._handleCloseReleaseBound);\n this.el.removeEventListener('touchmove', this._handleCloseDragBound);\n this.el.removeEventListener('touchend', this._handleCloseReleaseBound);\n this.el.removeEventListener('click', this._handleCloseTriggerClickBound);\n\n // Remove resize for side nav fixed\n if (this.isFixed) {\n window.removeEventListener('resize', this._handleWindowResizeBound);\n }\n }\n\n _handleTriggerClick(e) {\n const trigger = e.target.closest('.sidenav-trigger');\n if (e.target && trigger) {\n const sidenavId = M.getIdFromTrigger(trigger);\n const sidenavInstance = (document.getElementById(sidenavId) as any).M_Sidenav;\n if (sidenavInstance) {\n sidenavInstance.open(trigger);\n }\n e.preventDefault();\n }\n }\n\n // Set variables needed at the beginning of drag and stop any current transition.\n _startDrag(e) {\n const clientX = e.targetTouches[0].clientX;\n this.isDragged = true;\n this._startingXpos = clientX;\n this._xPos = this._startingXpos;\n this._time = Date.now();\n this._width = this.el.getBoundingClientRect().width;\n this._overlay.style.display = 'block';\n this._initialScrollTop = this.isOpen ? this.el.scrollTop : M.getDocumentScrollTop();\n this._verticallyScrolling = false;\n anim.remove(this.el);\n anim.remove(this._overlay);\n }\n\n //Set variables needed at each drag move update tick\n _dragMoveUpdate(e) {\n const clientX = e.targetTouches[0].clientX;\n const currentScrollTop = this.isOpen ? this.el.scrollTop : M.getDocumentScrollTop();\n this.deltaX = Math.abs(this._xPos - clientX);\n this._xPos = clientX;\n this.velocityX = this.deltaX / (Date.now() - this._time);\n this._time = Date.now();\n if (this._initialScrollTop !== currentScrollTop) {\n this._verticallyScrolling = true;\n }\n }\n\n _handleDragTargetDrag(e) {\n // Check if draggable\n if (!this.options.draggable || this._isCurrentlyFixed() || this._verticallyScrolling) {\n return;\n }\n // If not being dragged, set initial drag start variables\n if (!this.isDragged) {\n this._startDrag(e);\n }\n // Run touchmove updates\n this._dragMoveUpdate(e);\n // Calculate raw deltaX\n let totalDeltaX = this._xPos - this._startingXpos;\n // dragDirection is the attempted user drag direction\n const dragDirection = totalDeltaX > 0 ? 'right' : 'left';\n // Don't allow totalDeltaX to exceed Sidenav width or be dragged in the opposite direction\n totalDeltaX = Math.min(this._width, Math.abs(totalDeltaX));\n if (this.options.edge === dragDirection) {\n totalDeltaX = 0;\n }\n /**\n * transformX is the drag displacement\n * transformPrefix is the initial transform placement\n * Invert values if Sidenav is right edge\n */\n let transformX = totalDeltaX;\n let transformPrefix = 'translateX(-100%)';\n if (this.options.edge === 'right') {\n transformPrefix = 'translateX(100%)';\n transformX = -transformX;\n }\n // Calculate open/close percentage of sidenav, with open = 1 and close = 0\n this.percentOpen = Math.min(1, totalDeltaX / this._width);\n // Set transform and opacity styles\n (this.el as HTMLElement).style.transform = `${transformPrefix} translateX(${transformX}px)`;\n this._overlay.style.opacity = this.percentOpen.toString();\n }\n\n _handleDragTargetRelease() {\n if (this.isDragged) {\n if (this.percentOpen > 0.2) {\n this.open();\n } else {\n this._animateOut();\n }\n this.isDragged = false;\n this._verticallyScrolling = false;\n }\n }\n\n _handleCloseDrag(e) {\n if (this.isOpen) {\n // Check if draggable\n if (!this.options.draggable || this._isCurrentlyFixed() || this._verticallyScrolling) {\n return;\n }\n // If not being dragged, set initial drag start variables\n if (!this.isDragged) {\n this._startDrag(e);\n }\n // Run touchmove updates\n this._dragMoveUpdate(e);\n // Calculate raw deltaX\n let totalDeltaX = this._xPos - this._startingXpos;\n // dragDirection is the attempted user drag direction\n let dragDirection = totalDeltaX > 0 ? 'right' : 'left';\n // Don't allow totalDeltaX to exceed Sidenav width or be dragged in the opposite direction\n totalDeltaX = Math.min(this._width, Math.abs(totalDeltaX));\n if (this.options.edge !== dragDirection) {\n totalDeltaX = 0;\n }\n let transformX = -totalDeltaX;\n if (this.options.edge === 'right') {\n transformX = -transformX;\n }\n // Calculate open/close percentage of sidenav, with open = 1 and close = 0\n this.percentOpen = Math.min(1, 1 - totalDeltaX / this._width);\n // Set transform and opacity styles\n (this.el as HTMLElement).style.transform = `translateX(${transformX}px)`;\n this._overlay.style.opacity = this.percentOpen.toString();\n }\n }\n\n _handleCloseRelease() {\n if (this.isOpen && this.isDragged) {\n if (this.percentOpen > 0.8) {\n this._animateIn();\n } else {\n this.close();\n }\n this.isDragged = false;\n this._verticallyScrolling = false;\n }\n }\n\n // Handles closing of Sidenav when element with class .sidenav-close\n _handleCloseTriggerClick(e) {\n const closeTrigger = e.target.closest('.sidenav-close');\n if (closeTrigger && !this._isCurrentlyFixed()) {\n this.close();\n }\n }\n\n _handleWindowResize() {\n // Only handle horizontal resizes\n if (this.lastWindowWidth !== window.innerWidth) {\n if (window.innerWidth > 992) {\n this.open();\n } else {\n this.close();\n }\n }\n this.lastWindowWidth = window.innerWidth;\n this.lastWindowHeight = window.innerHeight;\n }\n\n _setupClasses() {\n if (this.options.edge === 'right') {\n this.el.classList.add('right-aligned');\n this.dragTarget.classList.add('right-aligned');\n }\n }\n\n _removeClasses() {\n this.el.classList.remove('right-aligned');\n this.dragTarget.classList.remove('right-aligned');\n }\n\n _setupFixed() {\n if (this._isCurrentlyFixed()) this.open();\n }\n\n _isCurrentlyFixed() {\n return this.isFixed && window.innerWidth > 992;\n }\n\n _createDragTarget() {\n const dragTarget = document.createElement('div');\n dragTarget.classList.add('drag-target');\n dragTarget.style.width = this.options.dragTargetWidth;\n document.body.appendChild(dragTarget);\n this.dragTarget = dragTarget;\n }\n\n _preventBodyScrolling() {\n document.body.style.overflow = 'hidden';\n }\n\n _enableBodyScrolling() {\n document.body.style.overflow = '';\n }\n\n open() {\n if (this.isOpen === true) return;\n this.isOpen = true;\n // Run onOpenStart callback\n if (typeof this.options.onOpenStart === 'function') {\n this.options.onOpenStart.call(this, this.el);\n }\n // Handle fixed Sidenav\n if (this._isCurrentlyFixed()) {\n anim.remove(this.el);\n anim({\n targets: this.el,\n translateX: 0,\n duration: 0,\n easing: 'easeOutQuad'\n });\n this._enableBodyScrolling();\n this._overlay.style.display = 'none';\n }\n // Handle non-fixed Sidenav\n else {\n if (this.options.preventScrolling) {\n this._preventBodyScrolling();\n }\n\n if (!this.isDragged || this.percentOpen != 1) {\n this._animateIn();\n }\n }\n }\n\n close() {\n if (this.isOpen === false) return;\n this.isOpen = false;\n // Run onCloseStart callback\n if (typeof this.options.onCloseStart === 'function') {\n this.options.onCloseStart.call(this, this.el);\n }\n // Handle fixed Sidenav\n if (this._isCurrentlyFixed()) {\n const transformX = this.options.edge === 'left' ? '-105%' : '105%';\n (this.el as HTMLElement).style.transform = `translateX(${transformX})`;\n }\n // Handle non-fixed Sidenav\n else {\n this._enableBodyScrolling();\n if (!this.isDragged || this.percentOpen != 0) {\n this._animateOut();\n } else {\n this._overlay.style.display = 'none';\n }\n }\n }\n\n _animateIn() {\n this._animateSidenavIn();\n this._animateOverlayIn();\n }\n\n _animateSidenavIn() {\n let slideOutPercent = this.options.edge === 'left' ? -1 : 1;\n if (this.isDragged) {\n slideOutPercent =\n this.options.edge === 'left'\n ? slideOutPercent + this.percentOpen\n : slideOutPercent - this.percentOpen;\n }\n anim.remove(this.el);\n anim({\n targets: this.el,\n translateX: [`${slideOutPercent * 100}%`, 0],\n duration: this.options.inDuration,\n easing: 'easeOutQuad',\n complete: () => {\n // Run onOpenEnd callback\n if (typeof this.options.onOpenEnd === 'function') {\n this.options.onOpenEnd.call(this, this.el);\n }\n }\n });\n }\n\n _animateOverlayIn() {\n let start = 0;\n if (this.isDragged) {\n start = this.percentOpen;\n }\n else {\n this._overlay.style.display = 'block';\n }\n anim.remove(this._overlay);\n anim({\n targets: this._overlay,\n opacity: [start, 1],\n duration: this.options.inDuration,\n easing: 'easeOutQuad'\n });\n }\n\n _animateOut() {\n this._animateSidenavOut();\n this._animateOverlayOut();\n }\n\n _animateSidenavOut() {\n const endPercent = this.options.edge === 'left' ? -1 : 1;\n let slideOutPercent = 0;\n if (this.isDragged) {\n slideOutPercent =\n this.options.edge === 'left'\n ? endPercent + this.percentOpen\n : endPercent - this.percentOpen;\n }\n\n anim.remove(this.el);\n anim({\n targets: this.el,\n translateX: [`${slideOutPercent * 100}%`, `${endPercent * 105}%`],\n duration: this.options.outDuration,\n easing: 'easeOutQuad',\n complete: () => {\n // Run onOpenEnd callback\n if (typeof this.options.onCloseEnd === 'function') {\n this.options.onCloseEnd.call(this, this.el);\n }\n }\n });\n }\n\n _animateOverlayOut() {\n anim.remove(this._overlay);\n anim({\n targets: this._overlay,\n opacity: 0,\n duration: this.options.outDuration,\n easing: 'easeOutQuad',\n complete: () => {\n this._overlay.style.display = 'none';\n }\n });\n }\n\n static {\n Sidenav._sidenavs = [];\n }\n }\n","import { Component } from \"./component\";\nimport { M } from \"./global\";\nimport anim from \"animejs\";\n\n let _defaults = {\n indicators: true,\n height: 400,\n duration: 500,\n interval: 6000,\n pauseOnFocus: true,\n pauseOnHover: true,\n indicatorLabelFunc: null // Function which will generate a label for the indicators (ARIA)\n };\n\n export class Slider extends Component {\n el: HTMLElement;\n _slider: HTMLUListElement;\n _slides: HTMLLIElement[];\n activeIndex: number;\n _activeSlide: HTMLLIElement;\n _indicators: HTMLLIElement[];\n private _handleIntervalBound: any;\n private _handleIndicatorClickBound: any;\n interval: string | number | NodeJS.Timeout;\n eventPause: any;\n _hovered: boolean;\n _focused: boolean;\n _focusCurrent: boolean;\n _sliderId: string;\n private _handleAutoPauseFocusBound: any;\n private _handleAutoStartFocusBound: any;\n private _handleAutoPauseHoverBound: any;\n private _handleAutoStartHoverBound: any;\n\n constructor(el, options) {\n super(Slider, el, options);\n (this.el as any).M_Slider = this;\n this.options = {...Slider.defaults, ...options};\n\n // init props\n this.interval = null;\n this.eventPause = false;\n this._hovered = false;\n this._focused = false;\n this._focusCurrent = false;\n\n // setup\n this._slider = this.el.querySelector('.slides');\n this._slides = Array.from(this._slider.querySelectorAll('li'));\n this.activeIndex = this._slides.findIndex(li => li.classList.contains('active'));\n\n if (this.activeIndex !== -1) {\n this._activeSlide = this._slides[this.activeIndex];\n }\n\n this._setSliderHeight();\n\n // Sets element id if it does not have one\n if (this._slider.hasAttribute('id'))\n this._sliderId = this._slider.getAttribute('id');\n else {\n this._sliderId = 'slider-' + M.guid();\n this._slider.setAttribute('id', this._sliderId);\n }\n\n const placeholderBase64 = 'data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n // Set initial positions of captions\n this._slides.forEach(slide => {\n // Caption\n //const caption = <HTMLElement|null>slide.querySelector('.caption');\n //if (caption) this._animateCaptionIn(caption, 0);\n // Set Images as Background Images\n const img = slide.querySelector('img');\n if (img) {\n if (img.src !== placeholderBase64) {\n img.style.backgroundImage = 'url('+ img.src +')';\n img.src = placeholderBase64;\n }\n }\n // Sets slide as focusable by code\n if (!slide.hasAttribute('tabindex'))\n slide.setAttribute('tabindex', '-1');\n // Removes initial visibility from \"inactive\" slides\n slide.style.visibility = 'hidden';\n });\n\n this._setupIndicators();\n\n // Show active slide\n if (this._activeSlide) {\n this._activeSlide.style.display = 'block';\n this._activeSlide.style.visibility = 'visible';\n }\n else {\n this.activeIndex = 0;\n this._slides[0].classList.add('active');\n this._slides[0].style.visibility = 'visible';\n this._activeSlide = this._slides[0];\n this._animateSlide(this._slides[0], true);\n /*anim({\n targets: this._slides[0],\n opacity: 1,\n duration: this.options.duration,\n easing: 'easeOutQuad'\n });\n */\n // Update indicators\n if (this.options.indicators) {\n this._indicators[this.activeIndex].children[0].classList.add('active');\n }\n }\n\n // Adjust height to current slide\n // TODO: ??? Code does not do what it says in comment\n /*\n this._activeSlide.querySelectorAll('img').forEach(el => {\n anim({\n targets: this._activeSlide.querySelector('.caption'),\n opacity: 1,\n translateX: 0,\n translateY: 0,\n duration: this.options.duration,\n easing: 'easeOutQuad'\n });\n });\n */\n \n this._setupEventHandlers();\n // auto scroll\n this.start();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n let domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Slider;\n }\n\n destroy() {\n this.pause();\n this._removeIndicators();\n this._removeEventHandlers();\n (this.el as any).M_Slider = undefined;\n }\n\n _setupEventHandlers() {\n this._handleIntervalBound = this._handleInterval.bind(this);\n this._handleIndicatorClickBound = this._handleIndicatorClick.bind(this);\n this._handleAutoPauseFocusBound = this._handleAutoPauseFocus.bind(this);\n this._handleAutoStartFocusBound = this._handleAutoStartFocus.bind(this);\n this._handleAutoPauseHoverBound = this._handleAutoPauseHover.bind(this);\n this._handleAutoStartHoverBound = this._handleAutoStartHover.bind(this);\n if (this.options.pauseOnFocus) {\n this.el.addEventListener('focusin', this._handleAutoPauseFocusBound);\n this.el.addEventListener('focusout', this._handleAutoStartFocusBound);\n }\n if (this.options.pauseOnHover) {\n this.el.addEventListener('mouseenter', this._handleAutoPauseHoverBound);\n this.el.addEventListener('mouseleave', this._handleAutoStartHoverBound);\n }\n if (this.options.indicators) {\n this._indicators.forEach((el) => {\n el.addEventListener('click', this._handleIndicatorClickBound);\n });\n }\n }\n\n _removeEventHandlers() {\n if (this.options.pauseOnFocus) {\n this.el.removeEventListener('focusin', this._handleAutoPauseFocusBound);\n this.el.removeEventListener('focusout', this._handleAutoStartFocusBound);\n }\n if (this.options.pauseOnHover) {\n this.el.removeEventListener('mouseenter', this._handleAutoPauseHoverBound);\n this.el.removeEventListener('mouseleave', this._handleAutoStartHoverBound);\n }\n if (this.options.indicators) {\n this._indicators.forEach((el) => {\n el.removeEventListener('click', this._handleIndicatorClickBound);\n });\n }\n }\n\n _handleIndicatorClick(e) {\n const el = (<HTMLElement>e.target).parentElement;\n const currIndex = [...el.parentNode.children].indexOf(el);\n this._focusCurrent = true;\n this.set(currIndex);\n }\n\n _handleAutoPauseHover() {\n this._hovered = true;\n if (this.interval != null) {\n this._pause(true);\n }\n }\n\n _handleAutoPauseFocus() {\n this._focused = true;\n if (this.interval != null) {\n this._pause(true);\n }\n }\n\n _handleAutoStartHover() {\n this._hovered = false;\n if (!(this.options.pauseOnFocus && this._focused) && this.eventPause) {\n this.start();\n }\n }\n\n _handleAutoStartFocus() {\n this._focused = false;\n if (!(this.options.pauseOnHover && this._hovered) && this.eventPause) {\n this.start();\n }\n }\n\n _handleInterval() {\n const activeElem = this._slider.querySelector('.active');\n let newActiveIndex = [...activeElem.parentNode.children].indexOf(activeElem);\n if (this._slides.length === newActiveIndex + 1)\n newActiveIndex = 0; // loop to start\n else\n newActiveIndex += 1;\n this.set(newActiveIndex);\n }\n\n _animateSlide(slide: HTMLElement, isDirectionIn: boolean): void {\n let dx = 0, dy = 0;\n anim({\n targets: slide,\n opacity: isDirectionIn ? [0, 1] : [1, 0],\n duration: this.options.duration,\n easing: 'easeOutQuad'\n });\n\n const caption = slide.querySelector('.caption');\n if (!caption) return;\n if (caption.classList.contains('center-align')) dy = -100;\n else if (caption.classList.contains('right-align')) dx = 100;\n else if (caption.classList.contains('left-align')) dx = -100;\n anim({\n targets: caption,\n opacity: isDirectionIn ? [0, 1] : [1, 0],\n translateX: isDirectionIn ? [dx, 0] : [0, dx],\n translateY: isDirectionIn ? [dy, 0] : [0, dy],\n duration: this.options.duration,\n delay: this.options.duration,\n easing: 'easeOutQuad'\n });\n }\n\n _setSliderHeight() {\n // If fullscreen, do nothing\n if (!this.el.classList.contains('fullscreen')) {\n if (this.options.indicators) {\n // Add height if indicators are present\n this.el.style.height = (this.options.height + 40)+'px'; //.css('height', this.options.height + 40 + 'px');\n }\n else {\n this.el.style.height = this.options.height+'px';\n }\n this._slider.style.height = this.options.height+'px';\n }\n }\n\n _setupIndicators() {\n if (this.options.indicators) {\n const ul = document.createElement('ul');\n ul.classList.add('indicators');\n\n const arrLi = [];\n this._slides.forEach((el, i) => {\n const label = this.options.indicatorLabelFunc\n ? this.options.indicatorLabelFunc.call(this, i + 1, i === 0)\n : `${i + 1}`;\n const li = document.createElement('li');\n li.classList.add('indicator-item');\n li.innerHTML = `<button type=\"button\" class=\"indicator-item-btn\" aria-label=\"${label}\" aria-controls=\"${this._sliderId}\"></button>`;\n arrLi.push(li);\n ul.append(li);\n }); \n\n this.el.append(ul);\n this._indicators = arrLi;\n }\n }\n\n _removeIndicators() {\n this.el.querySelector('ul.indicators').remove(); //find('ul.indicators').remove();\n }\n\n set(index: number) {\n // Wrap around indices.\n if (index >= this._slides.length) index = 0;\n else if (index < 0) index = this._slides.length - 1;\n\n // Only do if index changes\n if (this.activeIndex === index) return;\n\n this._activeSlide = this._slides[this.activeIndex];\n const _caption = <HTMLElement|null>this._activeSlide.querySelector('.caption');\n\n this._activeSlide.classList.remove('active');\n // Enables every slide\n this._slides.forEach(slide => slide.style.visibility = 'visible');\n\n //--- Hide active Slide + Caption\n // TODO: What does this do?\n anim({\n targets: this._activeSlide,\n opacity: 0,\n duration: this.options.duration,\n easing: 'easeOutQuad',\n complete: () => {\n this._slides.forEach(el => {\n if (el.classList.contains('active')) return; \n anim({\n targets: el,\n opacity: 0,\n translateX: 0,\n translateY: 0,\n duration: 0, // Animation with duration 0... why use anim at all then?\n easing: 'easeOutQuad'\n });\n // Disables invisible slides (for assistive technologies)\n el.style.visibility = 'hidden';\n });\n }\n });\n\n // Hide active Caption\n //this._animateCaptionIn(_caption, this.options.duration);\n _caption.style.opacity = '0';\n\n // Update indicators\n if (this.options.indicators) {\n const activeIndicator = this._indicators[this.activeIndex].children[0];\n const nextIndicator = this._indicators[index].children[0];\n activeIndicator.classList.remove('active');\n nextIndicator.classList.add('active');\n if (typeof this.options.indicatorLabelFunc === \"function\"){\n activeIndicator.ariaLabel = this.options.indicatorLabelFunc.call(this, this.activeIndex, false);\n nextIndicator.ariaLabel = this.options.indicatorLabelFunc.call(this, index, true);\n }\n }\n \n //--- Show new Slide + Caption\n this._animateSlide(this._slides[index], true);\n\n this._slides[index].classList.add('active');\n\n // TODO: Why focus? => causes uncontrollable page scroll\n /*\n if (this._focusCurrent) {\n this._slides[index].focus();\n this._focusCurrent = false;\n }\n */\n\n this.activeIndex = index;\n\n // Reset interval, if allowed. This check prevents autostart\n // when slider is paused, since it can be changed though indicators.\n if (this.interval != null) {\n this.start();\n }\n }\n\n _pause(fromEvent: boolean) {\n clearInterval(this.interval);\n this.eventPause = fromEvent;\n this.interval = null;\n }\n\n pause() {\n this._pause(false);\n }\n\n start() {\n clearInterval(this.interval);\n this.interval = setInterval(\n this._handleIntervalBound,\n this.options.duration + this.options.interval\n );\n this.eventPause = false;\n }\n\n next() {\n let newIndex = this.activeIndex + 1;\n // Wrap around indices.\n if (newIndex >= this._slides.length) newIndex = 0;\n else if (newIndex < 0) newIndex = this._slides.length - 1;\n this.set(newIndex);\n }\n\n prev() {\n let newIndex = this.activeIndex - 1;\n // Wrap around indices.\n if (newIndex >= this._slides.length) newIndex = 0;\n else if (newIndex < 0) newIndex = this._slides.length - 1;\n this.set(newIndex);\n }\n }\n \n\n \n","import { Component } from \"./component\";\nimport { Carousel } from \"./carousel\";\nimport anim from \"animejs\";\n\nlet _defaults = {\n duration: 300,\n onShow: null,\n swipeable: false,\n responsiveThreshold: Infinity, // breakpoint for swipeable\n};\n\nexport class Tabs extends Component {\n el: HTMLElement;\n _tabLinks: any;\n _index: number;\n _indicator: any;\n _handleWindowResizeBound: (this: Window, ev: UIEvent) => any;\n _handleTabClickBound: (this: Window, ev: UIEvent) => any;\n _tabWidth: number;\n _tabsWidth: number;\n _tabsCarousel: any;\n _activeTabLink: any;\n _content: any;\n\n constructor(el, options: any) {\n super(Tabs, el, options);\n (this.el as any).M_Tabs = this;\n\n this.options = {...Tabs.defaults, ...options};\n this._tabLinks = this.el.querySelectorAll('li.tab > a');\n this._index = 0;\n this._setupActiveTabLink();\n if (this.options.swipeable) {\n this._setupSwipeableTabs();\n } else {\n this._setupNormalTabs();\n }\n // Setup tabs indicator after content to ensure accurate widths\n this._setTabsAndTabWidth();\n this._createIndicator();\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n const domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Tabs;\n }\n\n destroy() {\n this._removeEventHandlers();\n this._indicator.parentNode.removeChild(this._indicator);\n if (this.options.swipeable) {\n this._teardownSwipeableTabs();\n }\n else {\n this._teardownNormalTabs();\n }\n (this.el as any).M_Tabs = undefined;\n }\n\n _setupEventHandlers() {\n this._handleWindowResizeBound = this._handleWindowResize.bind(this);\n window.addEventListener('resize', this._handleWindowResizeBound);\n this._handleTabClickBound = this._handleTabClick.bind(this);\n this.el.addEventListener('click', this._handleTabClickBound);\n }\n\n _removeEventHandlers() {\n window.removeEventListener('resize', this._handleWindowResizeBound);\n this.el.removeEventListener('click', this._handleTabClickBound);\n }\n\n _handleWindowResize() {\n this._setTabsAndTabWidth();\n if (this._tabWidth !== 0 && this._tabsWidth !== 0) {\n this._indicator.style.left = this._calcLeftPos(this._activeTabLink)+'px';\n this._indicator.style.right = this._calcRightPos(this._activeTabLink)+'px';\n }\n }\n\n _handleTabClick(e) {\n const tabLink = e.target;\n const tab = tabLink.parentElement; \n // Handle click on tab link only\n if (!tabLink || !tab.classList.contains('tab')) return;\n // is disabled?\n if (tab.classList.contains('disabled')) {\n e.preventDefault();\n return;\n }\n // Act as regular link if target attribute is specified.\n if (tabLink.hasAttribute('target')) return;\n // Make the old tab inactive.\n this._activeTabLink.classList.remove('active');\n const _oldContent = this._content; \n // Update the variables with the new link and content\n\n this._activeTabLink = tabLink;\n if (tabLink.hash)\n this._content = document.querySelector(tabLink.hash);\n this._tabLinks = this.el.querySelectorAll('li.tab > a');\n // Make the tab active\n this._activeTabLink.classList.add('active');\n const prevIndex = this._index;\n this._index = Math.max(Array.from(this._tabLinks).indexOf(tabLink), 0);\n\n // Swap content\n if (this.options.swipeable) {\n if (this._tabsCarousel) {\n this._tabsCarousel.set(this._index, () => {\n if (typeof this.options.onShow === 'function')\n this.options.onShow.call(this, this._content);\n });\n }\n } else {\n if (this._content) {\n this._content.style.display = 'block';\n this._content.classList.add('active');\n if (typeof this.options.onShow === 'function')\n this.options.onShow.call(this, this._content);\n if (_oldContent && _oldContent !== this._content) {\n _oldContent.style.display = 'none';\n _oldContent.classList.remove('active');\n }\n }\n }\n // Update widths after content is swapped (scrollbar bugfix)\n this._setTabsAndTabWidth();\n this._animateIndicator(prevIndex);\n e.preventDefault();\n }\n\n _createIndicator() {\n const indicator = document.createElement('li');\n indicator.classList.add('indicator');\n this.el.appendChild(indicator);\n this._indicator = indicator;\n this._indicator.style.left = this._calcLeftPos(this._activeTabLink)+'px';\n this._indicator.style.right = this._calcRightPos(this._activeTabLink)+'px';\n }\n\n _setupActiveTabLink() {\n // If the location.hash matches one of the links, use that as the active tab.\n this._activeTabLink = Array.from(this._tabLinks).find((a: HTMLAnchorElement) => a.getAttribute('href') === location.hash);\n // If no match is found, use the first link or any with class 'active' as the initial active tab.\n if (!this._activeTabLink) {\n this._activeTabLink = this.el.querySelector('li.tab a.active');\n }\n if (this._activeTabLink.length === 0) {\n this._activeTabLink = this.el.querySelector('li.tab a');\n }\n Array.from(this._tabLinks).forEach((a: HTMLAnchorElement) => a.classList.remove('active'));\n this._activeTabLink.classList.add('active');\n\n this._index = Math.max(Array.from(this._tabLinks).indexOf(this._activeTabLink), 0);\n if (this._activeTabLink && this._activeTabLink.hash) {\n this._content = document.querySelector(this._activeTabLink.hash);\n this._content.classList.add('active');\n }\n }\n\n _setupSwipeableTabs() {\n // Change swipeable according to responsive threshold\n if (window.innerWidth > this.options.responsiveThreshold)\n this.options.swipeable = false;\n\n const tabsContent = [];\n this._tabLinks.forEach(a => {\n if (a.hash) {\n const currContent = document.querySelector(a.hash);\n currContent.classList.add('carousel-item');\n tabsContent.push(currContent); \n }\n });\n\n // Create Carousel-Wrapper around Tab-Contents\n const tabsWrapper = document.createElement('div'); \n tabsWrapper.classList.add('tabs-content', 'carousel', 'carousel-slider');\n\n // Wrap around\n tabsContent[0].parentElement.insertBefore(tabsWrapper, tabsContent[0]);\n tabsContent.forEach(tabContent => {\n tabsWrapper.appendChild(tabContent);\n tabContent.style.display = '';\n });\n\n // Keep active tab index to set initial carousel slide\n const tab = this._activeTabLink.parentElement;\n const activeTabIndex = Array.from(tab.parentNode.children).indexOf(tab);\n\n this._tabsCarousel = Carousel.init(tabsWrapper, {\n fullWidth: true,\n noWrap: true,\n onCycleTo: (item) => {\n const prevIndex = this._index;\n this._index = Array.from(item.parentNode.children).indexOf(item);\n this._activeTabLink.classList.remove('active');\n this._activeTabLink = Array.from(this._tabLinks)[this._index];\n this._activeTabLink.classList.add('active');\n this._animateIndicator(prevIndex);\n if (typeof this.options.onShow === 'function')\n this.options.onShow.call(this, this._content);\n }\n });\n // Set initial carousel slide to active tab\n this._tabsCarousel.set(activeTabIndex);\n }\n\n _teardownSwipeableTabs() {\n const tabsWrapper = this._tabsCarousel.el;\n this._tabsCarousel.destroy();\n // Unwrap\n tabsWrapper.after(tabsWrapper.children);\n tabsWrapper.remove();\n }\n\n _setupNormalTabs() {\n // Hide Tabs Content\n Array.from(this._tabLinks).forEach(a => {\n if (a === this._activeTabLink) return;\n if ((<HTMLAnchorElement>a).hash) {\n const currContent = document.querySelector((<HTMLAnchorElement>a).hash);\n if (currContent) (<HTMLElement>currContent).style.display = 'none';\n }\n });\n }\n\n _teardownNormalTabs() {\n // show Tabs Content\n this._tabLinks.forEach(a => {\n if (a.hash) {\n const currContent = document.querySelector(a.hash);\n if (currContent) currContent.style.display = '';\n }\n });\n }\n\n _setTabsAndTabWidth() {\n this._tabsWidth = this.el.getBoundingClientRect().width;\n this._tabWidth = Math.max(this._tabsWidth, this.el.scrollWidth) / this._tabLinks.length;\n }\n\n _calcRightPos(el) {\n return Math.ceil(this._tabsWidth - el.offsetLeft - el.getBoundingClientRect().width);\n }\n\n _calcLeftPos(el) {\n return Math.floor(el.offsetLeft);\n }\n\n updateTabIndicator() {\n this._setTabsAndTabWidth();\n this._animateIndicator(this._index);\n }\n\n _animateIndicator(prevIndex) {\n let leftDelay = 0, rightDelay = 0;\n\n if (this._index - prevIndex >= 0)\n leftDelay = 90;\n else\n rightDelay = 90;\n\n const animOptions = {\n targets: this._indicator,\n left: {\n value: this._calcLeftPos(this._activeTabLink),\n delay: leftDelay\n },\n right: {\n value: this._calcRightPos(this._activeTabLink),\n delay: rightDelay\n },\n duration: this.options.duration,\n easing: 'easeOutQuad'\n };\n anim.remove(this._indicator);\n anim(animOptions);\n }\n\n select(tabId) {\n const tab = Array.from(this._tabLinks).find((a: HTMLAnchorElement) => a.getAttribute('href') === '#'+tabId);\n if (tab) (<HTMLAnchorElement>tab).click();\n }\n }\n","import { Component } from \"./component\";\nimport { M } from \"./global\";\n\nlet _defaults = {\n onOpen: undefined,\n onClose: undefined\n};\n\n export class TapTarget extends Component {\n el: HTMLElement\n isOpen: boolean;\n private wrapper: HTMLElement;\n private _handleDocumentClickBound: (this: HTMLElement, ev: MouseEvent) => any;\n private _origin: HTMLElement;\n private _handleTargetClickBound: EventListenerOrEventListenerObject;\n private originEl: HTMLElement;\n private _handleOriginClickBound: any;\n private _handleThrottledResizeBound: any;\n private waveEl: HTMLElement & Element & Node;\n private contentEl: HTMLElement;\n\n constructor(el, options) {\n super(TapTarget, el, options);\n (this.el as any).M_TapTarget = this;\n this.options = {...TapTarget.defaults, ...options};\n this.isOpen = false;\n // setup\n this._origin = document.querySelector('#'+this.el.getAttribute('data-target'));\n this._setup();\n this._calculatePositioning();\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n let domElem = !!el.jquery ? el[0] : el;\n return domElem.M_TapTarget;\n }\n\n destroy() {\n this._removeEventHandlers();\n (this.el as any).TapTarget = undefined;\n }\n\n _setupEventHandlers() {\n this._handleDocumentClickBound = this._handleDocumentClick.bind(this);\n this._handleTargetClickBound = this._handleTargetClick.bind(this);\n this._handleOriginClickBound = this._handleOriginClick.bind(this);\n this.el.addEventListener('click', this._handleTargetClickBound);\n this.originEl.addEventListener('click', this._handleOriginClickBound);\n // Resize\n let throttledResize = M.throttle(this._handleResize, 200);\n this._handleThrottledResizeBound = throttledResize.bind(this);\n window.addEventListener('resize', this._handleThrottledResizeBound);\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('click', this._handleTargetClickBound);\n this.originEl.removeEventListener('click', this._handleOriginClickBound);\n window.removeEventListener('resize', this._handleThrottledResizeBound);\n }\n\n _handleTargetClick(e) {\n this.open();\n }\n\n _handleOriginClick(e) {\n this.close();\n }\n\n _handleResize(e) {\n this._calculatePositioning();\n }\n\n _handleDocumentClick(e) {\n if (!e.target.closest('.tap-target-wrapper')) {\n this.close();\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n _setup() {\n // Creating tap target\n this.wrapper = this.el.parentElement;\n this.waveEl = this.wrapper.querySelector('.tap-target-wave');\n this.originEl = this.wrapper.querySelector('.tap-target-origin');\n this.contentEl = this.el.querySelector('.tap-target-content');\n // Creating wrapper\n if (!this.wrapper.classList.contains('.tap-target-wrapper')) {\n this.wrapper = document.createElement('div');\n this.wrapper.classList.add('tap-target-wrapper');\n this.el.before(this.wrapper);\n this.wrapper.append(this.el);\n }\n // Creating content\n if (!this.contentEl) {\n this.contentEl = document.createElement('div');\n this.contentEl.classList.add('tap-target-content');\n this.el.append(this.contentEl);\n }\n // Creating foreground wave\n if (!this.waveEl) {\n this.waveEl = document.createElement('div');\n this.waveEl.classList.add('tap-target-wave');\n // Creating origin\n if (!this.originEl) {\n this.originEl = <HTMLElement>this._origin.cloneNode(true); // .clone(true, true);\n this.originEl.classList.add('tap-target-origin');\n this.originEl.removeAttribute('id');\n this.originEl.removeAttribute('style');\n this.waveEl.append(this.originEl);\n }\n this.wrapper.append(this.waveEl);\n }\n }\n\n private _offset(el) {\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n return {\n top: box.top + window.pageYOffset - docElem.clientTop,\n left: box.left + window.pageXOffset - docElem.clientLeft\n };\n }\n\n _calculatePositioning() {\n // Element or parent is fixed position?\n let isFixed = getComputedStyle(this._origin).position === 'fixed';\n if (!isFixed) {\n\n let currentElem: any = this._origin;\n const parents = [];\n while ((currentElem = currentElem.parentNode) && currentElem !== document)\n parents.push(currentElem);\n \n for (let i = 0; i < parents.length; i++) {\n isFixed = getComputedStyle(parents[i]).position === 'fixed';\n if (isFixed) break;\n }\n }\n // Calculating origin\n const originWidth = this._origin.offsetWidth;\n const originHeight = this._origin.offsetHeight;\n const originTop = isFixed ? this._offset(this._origin).top - M.getDocumentScrollTop() : this._offset(this._origin).top;\n const originLeft = isFixed ? this._offset(this._origin).left - M.getDocumentScrollLeft() : this._offset(this._origin).left;\n\n // Calculating screen\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const scrollBarWidth = windowWidth - document.documentElement.clientWidth;\n const centerX = windowWidth / 2;\n const centerY = windowHeight / 2;\n const isLeft = originLeft <= centerX;\n const isRight = originLeft > centerX;\n const isTop = originTop <= centerY;\n const isBottom = originTop > centerY;\n const isCenterX = originLeft >= windowWidth * 0.25 && originLeft <= windowWidth * 0.75;\n\n // Calculating tap target\n const tapTargetWidth = this.el.offsetWidth;\n const tapTargetHeight = this.el.offsetHeight;\n const tapTargetTop = originTop + originHeight / 2 - tapTargetHeight / 2;\n const tapTargetLeft = originLeft + originWidth / 2 - tapTargetWidth / 2;\n const tapTargetPosition = isFixed ? 'fixed' : 'absolute';\n\n // Calculating content\n const tapTargetTextWidth = isCenterX ? tapTargetWidth : tapTargetWidth / 2 + originWidth;\n const tapTargetTextHeight = tapTargetHeight / 2;\n const tapTargetTextTop = isTop ? tapTargetHeight / 2 : 0;\n const tapTargetTextBottom = 0;\n const tapTargetTextLeft = isLeft && !isCenterX ? tapTargetWidth / 2 - originWidth : 0;\n const tapTargetTextRight = 0;\n const tapTargetTextPadding = originWidth;\n const tapTargetTextAlign = isBottom ? 'bottom' : 'top';\n\n // Calculating wave\n const tapTargetWaveWidth = originWidth > originHeight ? originWidth * 2 : originWidth * 2;\n const tapTargetWaveHeight = tapTargetWaveWidth;\n const tapTargetWaveTop = tapTargetHeight / 2 - tapTargetWaveHeight / 2;\n const tapTargetWaveLeft = tapTargetWidth / 2 - tapTargetWaveWidth / 2;\n\n // Setting tap target\n this.wrapper.style.top = isTop ? tapTargetTop + 'px' : '';\n this.wrapper.style.right = isRight ? windowWidth - tapTargetLeft - tapTargetWidth - scrollBarWidth + 'px' : '';\n this.wrapper.style.bottom = isBottom ? windowHeight - tapTargetTop - tapTargetHeight + 'px' : '';\n this.wrapper.style.left = isLeft ? tapTargetLeft + 'px' : '';\n this.wrapper.style.position = tapTargetPosition;\n\n // Setting content\n this.contentEl.style.width = tapTargetTextWidth + 'px';\n this.contentEl.style.height = tapTargetTextHeight + 'px';\n this.contentEl.style.top = tapTargetTextTop + 'px';\n this.contentEl.style.right = tapTargetTextRight + 'px';\n this.contentEl.style.bottom = tapTargetTextBottom + 'px';\n this.contentEl.style.left = tapTargetTextLeft + 'px';\n this.contentEl.style.padding = tapTargetTextPadding + 'px';\n this.contentEl.style.verticalAlign = tapTargetTextAlign;\n\n // Setting wave\n this.waveEl.style.top = tapTargetWaveTop+'px';\n this.waveEl.style.left = tapTargetWaveLeft+'px';\n this.waveEl.style.width = tapTargetWaveWidth+'px';\n this.waveEl.style.height = tapTargetWaveHeight+'px';\n }\n\n open() {\n if (this.isOpen) return;\n // onOpen callback\n if (typeof this.options.onOpen === 'function') {\n this.options.onOpen.call(this, this._origin);\n }\n this.isOpen = true;\n this.wrapper.classList.add('open');\n document.body.addEventListener('click', this._handleDocumentClickBound, true);\n document.body.addEventListener('touchend', this._handleDocumentClickBound);\n }\n\n close() {\n if (!this.isOpen) return;\n // onClose callback\n if (typeof this.options.onClose === 'function') {\n this.options.onClose.call(this, this._origin);\n }\n this.isOpen = false;\n this.wrapper.classList.remove('open');\n document.body.removeEventListener('click', this._handleDocumentClickBound, true);\n document.body.removeEventListener('touchend', this._handleDocumentClickBound);\n }\n }\n\n \n\n","import { Component } from \"./component\";\nimport { M } from \"./global\";\nimport { Modal } from \"./modal\";\n\nlet _defaults = {\n dialRadius: 135,\n outerRadius: 105,\n innerRadius: 70,\n tickRadius: 20,\n duration: 350,\n container: null,\n defaultTime: 'now', // default time, 'now' or '13:14' e.g.\n fromNow: 0, // Millisecond offset from the defaultTime\n showClearBtn: false,\n // internationalization\n i18n: {\n cancel: 'Cancel',\n clear: 'Clear',\n done: 'Ok'\n },\n autoClose: false, // auto close when minute is selected\n twelveHour: true, // change to 12 hour AM/PM clock from 24 hour\n vibrate: true, // vibrate the device when dragging clock hand\n // Callbacks\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null,\n onCloseEnd: null,\n onSelect: null\n};\n\ntype Point = {\n x: number,\n y: number\n};\n\n export class Timepicker extends Component {\n el: HTMLInputElement;\n id: string;\n modal: Modal;\n modalEl: HTMLElement;\n private _handleInputKeydownBound: any;\n private _handleInputClickBound: any;\n private _handleClockClickStartBound: any;\n private _handleDocumentClickMoveBound: any;\n private _handleDocumentClickEndBound: any;\n private _inputFromTextFieldBound: any;\n plate: any;\n digitalClock: any;\n inputHours: HTMLInputElement;\n inputMinutes: HTMLInputElement;\n x0: number;\n y0: number;\n moved: boolean;\n dx: number;\n dy: number;\n currentView: string;\n hand: any;\n minutesView: HTMLElement;\n hours: any;\n minutes: any;\n time: string;\n amOrPm: any;\n static _template: any;\n isOpen: boolean;\n vibrate: string;\n _canvas: HTMLElement;\n hoursView: any;\n spanAmPm: HTMLSpanElement;\n footer: HTMLElement;\n private _amBtn: HTMLElement;\n private _pmBtn: HTMLElement;\n bg: Element;\n bearing: Element;\n g: Element;\n toggleViewTimer: string | number | NodeJS.Timeout;\n canvas: any;\n vibrateTimer: any;\n\n constructor(el, options) {\n super(Timepicker, el, options);\n (this.el as any).M_Timepicker = this;\n this.options = {...Timepicker.defaults, ...options};\n this.id = M.guid();\n this._insertHTMLIntoDOM();\n this._setupModal();\n this._setupVariables();\n this._setupEventHandlers();\n this._clockSetup();\n this._pickerSetup();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static _addLeadingZero(num) {\n return (num < 10 ? '0' : '') + num;\n }\n\n static _createSVGEl(name) {\n let svgNS = 'http://www.w3.org/2000/svg';\n return document.createElementNS(svgNS, name);\n }\n\n static _Pos(e): Point {\n if (e.targetTouches && e.targetTouches.length >= 1) {\n return { x: e.targetTouches[0].clientX, y: e.targetTouches[0].clientY };\n }\n // mouse event\n return { x: e.clientX, y: e.clientY };\n }\n\n static getInstance(el) {\n const domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Timepicker;\n }\n\n destroy() {\n this._removeEventHandlers();\n this.modal.destroy();\n this.modalEl.remove();\n (this.el as any).M_Timepicker = undefined;\n }\n\n _setupEventHandlers() {\n this._handleInputKeydownBound = this._handleInputKeydown.bind(this);\n this._handleInputClickBound = this._handleInputClick.bind(this);\n this._handleClockClickStartBound = this._handleClockClickStart.bind(this);\n this._handleDocumentClickMoveBound = this._handleDocumentClickMove.bind(this);\n this._handleDocumentClickEndBound = this._handleDocumentClickEnd.bind(this);\n this._inputFromTextFieldBound = this._handleTimeInputEnterKey.bind(this);\n this.el.addEventListener('click', this._handleInputClickBound);\n this.el.addEventListener('keydown', this._handleInputKeydownBound);\n this.plate.addEventListener('mousedown', this._handleClockClickStartBound);\n this.plate.addEventListener('touchstart', this._handleClockClickStartBound);\n this.digitalClock.addEventListener('keyup', this._inputFromTextFieldBound);\n this.inputHours.addEventListener('click', this.showView.bind(this, 'hours'));\n this.inputMinutes.addEventListener('click', this.showView.bind(this, 'minutes'));\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('click', this._handleInputClickBound);\n this.el.removeEventListener('keydown', this._handleInputKeydownBound);\n }\n\n _handleInputClick() {\n this.open();\n }\n\n _handleInputKeydown(e) {\n if (e.which === M.keys.ENTER) {\n e.preventDefault();\n this.open();\n }\n }\n\n _handleTimeInputEnterKey(e) {\n if (e.which === M.keys.ENTER) {\n e.preventDefault();\n this._inputFromTextField();\n }\n }\n\n _handleClockClickStart(e) {\n e.preventDefault();\n let clockPlateBR = this.plate.getBoundingClientRect();\n let offset = { x: clockPlateBR.left, y: clockPlateBR.top };\n\n this.x0 = offset.x + this.options.dialRadius;\n this.y0 = offset.y + this.options.dialRadius;\n this.moved = false;\n let clickPos = Timepicker._Pos(e);\n this.dx = clickPos.x - this.x0;\n this.dy = clickPos.y - this.y0;\n\n // Set clock hands\n this.setHand(this.dx, this.dy, false);\n // Mousemove on document\n document.addEventListener('mousemove', this._handleDocumentClickMoveBound);\n document.addEventListener('touchmove', this._handleDocumentClickMoveBound);\n // Mouseup on document\n document.addEventListener('mouseup', this._handleDocumentClickEndBound);\n document.addEventListener('touchend', this._handleDocumentClickEndBound);\n }\n\n _handleDocumentClickMove(e) {\n e.preventDefault();\n let clickPos = Timepicker._Pos(e);\n let x = clickPos.x - this.x0;\n let y = clickPos.y - this.y0;\n this.moved = true;\n this.setHand(x, y, false);\n }\n\n _handleDocumentClickEnd(e) {\n e.preventDefault();\n document.removeEventListener('mouseup', this._handleDocumentClickEndBound);\n document.removeEventListener('touchend', this._handleDocumentClickEndBound);\n let clickPos = Timepicker._Pos(e);\n let x = clickPos.x - this.x0;\n let y = clickPos.y - this.y0;\n if (this.moved && x === this.dx && y === this.dy) {\n this.setHand(x, y);\n }\n if (this.currentView === 'hours') {\n this.showView('minutes', this.options.duration / 2);\n }\n else if (this.options.autoClose) {\n this.minutesView.classList.add('timepicker-dial-out');\n setTimeout(() => {\n this.done();\n }, this.options.duration / 2);\n }\n if (typeof this.options.onSelect === 'function') {\n this.options.onSelect.call(this, this.hours, this.minutes);\n }\n // Unbind mousemove event\n document.removeEventListener('mousemove', this._handleDocumentClickMoveBound);\n document.removeEventListener('touchmove', this._handleDocumentClickMoveBound);\n }\n\n _insertHTMLIntoDOM() {\n const template = document.createElement('template');\n template.innerHTML = Timepicker._template.trim();\n this.modalEl = <HTMLElement>template.content.firstChild;\n this.modalEl.id = 'modal-' + this.id;\n\n // Append popover to input by default\n const optEl = this.options.container;\n const containerEl = optEl instanceof HTMLElement ? optEl : document.querySelector(optEl);\n \n if (this.options.container && !!containerEl) {\n containerEl.append(this.modalEl);\n }\n else {\n this.el.parentElement.appendChild(this.modalEl);\n }\n }\n\n _setupModal() {\n this.modal = M.Modal.init(this.modalEl, {\n onOpenStart: this.options.onOpenStart,\n onOpenEnd: this.options.onOpenEnd,\n onCloseStart: this.options.onCloseStart,\n onCloseEnd: () => {\n if (typeof this.options.onCloseEnd === 'function') {\n this.options.onCloseEnd.call(this);\n }\n this.isOpen = false;\n }\n });\n }\n\n _setupVariables() {\n this.currentView = 'hours';\n this.vibrate = navigator.vibrate\n ? 'vibrate'\n : (navigator as any).webkitVibrate\n ? 'webkitVibrate'\n : null;\n this._canvas = this.modalEl.querySelector('.timepicker-canvas');\n this.plate = this.modalEl.querySelector('.timepicker-plate');\n this.digitalClock = this.modalEl.querySelector('.timepicker-display-column');\n this.hoursView = this.modalEl.querySelector('.timepicker-hours');\n this.minutesView = this.modalEl.querySelector('.timepicker-minutes');\n this.inputHours = this.modalEl.querySelector('.timepicker-input-hours');\n this.inputMinutes = this.modalEl.querySelector('.timepicker-input-minutes');\n this.spanAmPm = this.modalEl.querySelector('.timepicker-span-am-pm');\n this.footer = this.modalEl.querySelector('.timepicker-footer');\n this.amOrPm = 'PM';\n }\n\n private _createButton(text: string, visibility: string): HTMLButtonElement {\n const button = document.createElement('button');\n button.classList.add('btn-flat', 'waves-effect');\n button.style.visibility = visibility;\n button.type = 'button';\n button.tabIndex = this.options.twelveHour ? 3 : 1;\n button.innerText = text;\n return button;\n }\n\n _pickerSetup() {\n const clearButton = this._createButton(this.options.i18n.clear, this.options.showClearBtn ? '' : 'hidden');\n clearButton.classList.add('timepicker-clear');\n clearButton.addEventListener('click', this.clear.bind(this));\n this.footer.appendChild(clearButton);\n\n const confirmationBtnsContainer = document.createElement('div');\n confirmationBtnsContainer.classList.add('confirmation-btns');\n this.footer.append(confirmationBtnsContainer);\n\n const cancelButton = this._createButton(this.options.i18n.cancel, '');\n cancelButton.classList.add('timepicker-close');\n cancelButton.addEventListener('click', this.close.bind(this));\n confirmationBtnsContainer.appendChild(cancelButton);\n\n const doneButton = this._createButton(this.options.i18n.done, '');\n doneButton.classList.add('timepicker-close');\n doneButton.addEventListener('click', this.done.bind(this));\n confirmationBtnsContainer.appendChild(doneButton);\n }\n\n _clockSetup() {\n if (this.options.twelveHour) {\n // AM Button\n this._amBtn = document.createElement('div');\n this._amBtn.classList.add('am-btn');\n this._amBtn.innerText = 'AM';\n this._amBtn.addEventListener('click', this._handleAmPmClick.bind(this));\n this.spanAmPm.appendChild(this._amBtn);\n // PM Button\n this._pmBtn = document.createElement('div');\n this._pmBtn.classList.add('pm-btn');\n this._pmBtn.innerText = 'PM';\n this._pmBtn.addEventListener('click', this._handleAmPmClick.bind(this));\n this.spanAmPm.appendChild(this._pmBtn);\n }\n this._buildHoursView();\n this._buildMinutesView();\n this._buildSVGClock();\n }\n\n _buildSVGClock() {\n // Draw clock hands and others\n let dialRadius = this.options.dialRadius;\n let tickRadius = this.options.tickRadius;\n let diameter = dialRadius * 2;\n let svg = Timepicker._createSVGEl('svg');\n svg.setAttribute('class', 'timepicker-svg');\n svg.setAttribute('width', diameter.toString());\n svg.setAttribute('height', diameter.toString());\n let g = Timepicker._createSVGEl('g');\n g.setAttribute('transform', 'translate(' + dialRadius + ',' + dialRadius + ')');\n let bearing = Timepicker._createSVGEl('circle');\n bearing.setAttribute('class', 'timepicker-canvas-bearing');\n bearing.setAttribute('cx', '0');\n bearing.setAttribute('cy', '0');\n bearing.setAttribute('r', '4');\n let hand = Timepicker._createSVGEl('line');\n hand.setAttribute('x1', '0');\n hand.setAttribute('y1', '0');\n let bg = Timepicker._createSVGEl('circle');\n bg.setAttribute('class', 'timepicker-canvas-bg');\n bg.setAttribute('r', tickRadius);\n g.appendChild(hand);\n g.appendChild(bg);\n g.appendChild(bearing);\n svg.appendChild(g);\n this._canvas.appendChild(svg);\n this.hand = hand;\n this.bg = bg;\n this.bearing = bearing;\n this.g = g;\n }\n\n _buildHoursView() {\n const $tick = document.createElement('div');\n $tick.classList.add('timepicker-tick');\n // Hours view\n if (this.options.twelveHour) {\n for (let i = 1; i < 13; i += 1) {\n const tick = <HTMLElement>$tick.cloneNode(true);\n const radian = (i / 6) * Math.PI;\n const radius = this.options.outerRadius;\n tick.style.left = this.options.dialRadius + Math.sin(radian) * radius - this.options.tickRadius + 'px';\n tick.style.top = this.options.dialRadius - Math.cos(radian) * radius - this.options.tickRadius + 'px';\n tick.innerHTML = i === 0 ? '00' : i.toString();\n this.hoursView.appendChild(tick);\n // tick.on(mousedownEvent, mousedown);\n }\n }\n else {\n for (let i = 0; i < 24; i += 1) {\n const tick = <HTMLElement>$tick.cloneNode(true);\n const radian = (i / 6) * Math.PI;\n const inner = i > 0 && i < 13;\n const radius = inner ? this.options.innerRadius : this.options.outerRadius;\n tick.style.left = this.options.dialRadius + Math.sin(radian) * radius - this.options.tickRadius + 'px';\n tick.style.top = this.options.dialRadius - Math.cos(radian) * radius - this.options.tickRadius + 'px';\n tick.innerHTML = i === 0 ? '00' : i.toString();\n this.hoursView.appendChild(tick);\n // tick.on(mousedownEvent, mousedown);\n }\n }\n }\n\n _buildMinutesView() {\n const _tick = document.createElement('div');\n _tick.classList.add('timepicker-tick');\n // Minutes view\n for (let i = 0; i < 60; i += 5) {\n const tick = <HTMLElement>_tick.cloneNode(true);\n const radian = (i / 30) * Math.PI;\n tick.style.left = \n this.options.dialRadius +\n Math.sin(radian) * this.options.outerRadius -\n this.options.tickRadius +\n 'px';\n tick.style.top =\n this.options.dialRadius -\n Math.cos(radian) * this.options.outerRadius -\n this.options.tickRadius +\n 'px';\n tick.innerHTML = Timepicker._addLeadingZero(i);\n this.minutesView.appendChild(tick);\n }\n }\n\n _handleAmPmClick(e) {\n const btnClicked = <HTMLElement>e.target;\n this.amOrPm = btnClicked.classList.contains('am-btn') ? 'AM' : 'PM';\n this._updateAmPmView();\n }\n\n _updateAmPmView() {\n if (this.options.twelveHour) {\n if (this.amOrPm === 'PM') {\n this._amBtn.classList.remove('text-primary');\n this._pmBtn.classList.add('text-primary');\n }\n else if (this.amOrPm === 'AM') {\n this._amBtn.classList.add('text-primary');\n this._pmBtn.classList.remove('text-primary');\n }\n }\n }\n\n _updateTimeFromInput() {\n // Get the time\n let value = ((this.el.value || this.options.defaultTime || '') + '').split(':');\n if (this.options.twelveHour && !(typeof value[1] === 'undefined')) {\n if (value[1].toUpperCase().indexOf('AM') > 0) {\n this.amOrPm = 'AM';\n } else {\n this.amOrPm = 'PM';\n }\n value[1] = value[1].replace('AM', '').replace('PM', '');\n }\n if (value[0] === 'now') {\n let now = new Date(+new Date() + this.options.fromNow);\n value = [now.getHours().toString(), now.getMinutes().toString()];\n if (this.options.twelveHour) {\n this.amOrPm = parseInt(value[0]) >= 12 && parseInt(value[0]) < 24 ? 'PM' : 'AM';\n }\n }\n this.hours = +value[0] || 0;\n this.minutes = +value[1] || 0;\n this.inputHours.value = this.hours;\n this.inputMinutes.value = Timepicker._addLeadingZero(this.minutes);\n\n this._updateAmPmView();\n }\n\n showView(view, delay: number = null) {\n if (view === 'minutes' && getComputedStyle(this.hoursView).visibility === 'visible') {\n // raiseCallback(this.options.beforeHourSelect);\n }\n let isHours = view === 'hours',\n nextView = isHours ? this.hoursView : this.minutesView,\n hideView = isHours ? this.minutesView : this.hoursView;\n this.currentView = view;\n\n if (isHours) {\n this.inputHours.classList.add('text-primary');\n this.inputMinutes.classList.remove('text-primary');\n }\n else {\n this.inputHours.classList.remove('text-primary');\n this.inputMinutes.classList.add('text-primary');\n }\n\n // Transition view\n hideView.classList.add('timepicker-dial-out');\n\n nextView.style.visibility = 'visible';\n nextView.classList.remove('timepicker-dial-out');\n\n // Reset clock hand\n this.resetClock(delay);\n // After transitions ended\n clearTimeout(this.toggleViewTimer);\n this.toggleViewTimer = setTimeout(() => {\n hideView.style.visibility = 'hidden';\n }, this.options.duration);\n }\n\n resetClock(delay) {\n let view = this.currentView,\n value = this[view],\n isHours = view === 'hours',\n unit = Math.PI / (isHours ? 6 : 30),\n radian = value * unit,\n radius =\n isHours && value > 0 && value < 13 ? this.options.innerRadius : this.options.outerRadius,\n x = Math.sin(radian) * radius,\n y = -Math.cos(radian) * radius,\n self = this;\n\n if (delay) {\n this.canvas?.classList.add('timepicker-canvas-out');\n setTimeout(() => {\n self.canvas?.classList.remove('timepicker-canvas-out');\n self.setHand(x, y);\n }, delay);\n }\n else {\n this.setHand(x, y);\n }\n }\n\n _inputFromTextField() {\n const isHours = this.currentView === 'hours';\n if (isHours) {\n const value = parseInt(this.inputHours.value);\n if (value > 0 && value < 13) {\n this.drawClockFromTimeInput(value, isHours);\n this.showView('minutes', this.options.duration / 2);\n this.hours = value;\n this.inputMinutes.focus();\n }\n else {\n const hour = new Date().getHours();\n this.inputHours.value = (hour % 12).toString();\n }\n }\n else {\n const value = parseInt(this.inputMinutes.value);\n if (value >= 0 && value < 60) {\n this.inputMinutes.value = Timepicker._addLeadingZero(value);\n this.drawClockFromTimeInput(value, isHours);\n this.minutes = value;\n (<HTMLElement>this.modalEl.querySelector('.confirmation-btns :nth-child(2)')).focus();\n }\n else {\n const minutes = new Date().getMinutes();\n this.inputMinutes.value = Timepicker._addLeadingZero(minutes);\n }\n }\n }\n\n drawClockFromTimeInput(value, isHours) {\n const unit = Math.PI / (isHours ? 6 : 30);\n const radian = value * unit;\n let radius;\n if (this.options.twelveHour) {\n radius = this.options.outerRadius;\n }\n let cx1 = Math.sin(radian) * (radius - this.options.tickRadius),\n cy1 = -Math.cos(radian) * (radius - this.options.tickRadius),\n cx2 = Math.sin(radian) * radius,\n cy2 = -Math.cos(radian) * radius;\n this.hand.setAttribute('x2', cx1.toString());\n this.hand.setAttribute('y2', cy1.toString());\n this.bg.setAttribute('cx', cx2.toString());\n this.bg.setAttribute('cy', cy2.toString());\n }\n\n setHand(x, y, roundBy5: boolean = false) {\n let radian = Math.atan2(x, -y),\n isHours = this.currentView === 'hours',\n unit = Math.PI / (isHours || roundBy5 ? 6 : 30),\n z = Math.sqrt(x * x + y * y),\n inner = isHours && z < (this.options.outerRadius + this.options.innerRadius) / 2,\n radius = inner ? this.options.innerRadius : this.options.outerRadius;\n\n if (this.options.twelveHour) {\n radius = this.options.outerRadius;\n }\n\n // Radian should in range [0, 2PI]\n if (radian < 0) {\n radian = Math.PI * 2 + radian;\n }\n\n // Get the round value\n let value = Math.round(radian / unit);\n\n // Get the round radian\n radian = value * unit;\n\n // Correct the hours or minutes\n if (this.options.twelveHour) {\n if (isHours) {\n if (value === 0) value = 12;\n } else {\n if (roundBy5) value *= 5;\n if (value === 60) value = 0;\n }\n } else {\n if (isHours) {\n if (value === 12) {\n value = 0;\n }\n value = inner ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12;\n } else {\n if (roundBy5) {\n value *= 5;\n }\n if (value === 60) {\n value = 0;\n }\n }\n }\n\n // Once hours or minutes changed, vibrate the device\n if (this[this.currentView] !== value) {\n if (this.vibrate && this.options.vibrate) {\n // Do not vibrate too frequently\n if (!this.vibrateTimer) {\n navigator[this.vibrate](10);\n this.vibrateTimer = setTimeout(() => {\n this.vibrateTimer = null;\n }, 100);\n }\n }\n }\n\n this[this.currentView] = value;\n if (isHours) {\n this.inputHours.value = value.toString();\n }\n else {\n this.inputMinutes.value = Timepicker._addLeadingZero(value);\n }\n\n // Set clock hand and others' position\n let cx1 = Math.sin(radian) * (radius - this.options.tickRadius),\n cy1 = -Math.cos(radian) * (radius - this.options.tickRadius),\n cx2 = Math.sin(radian) * radius,\n cy2 = -Math.cos(radian) * radius;\n this.hand.setAttribute('x2', cx1.toString());\n this.hand.setAttribute('y2', cy1.toString());\n this.bg.setAttribute('cx', cx2.toString());\n this.bg.setAttribute('cy', cy2.toString());\n }\n\n open() {\n if (this.isOpen) return;\n this.isOpen = true;\n this._updateTimeFromInput();\n this.showView('hours');\n this.modal.open(undefined);\n }\n\n close() {\n if (!this.isOpen) return;\n this.isOpen = false;\n this.modal.close();\n }\n\n done(e = null, clearValue = null) {\n // Set input value\n let last = this.el.value;\n let value = clearValue\n ? ''\n : Timepicker._addLeadingZero(this.hours) + ':' + Timepicker._addLeadingZero(this.minutes);\n this.time = value;\n if (!clearValue && this.options.twelveHour) {\n value = `${value} ${this.amOrPm}`;\n }\n this.el.value = value;\n // Trigger change event\n if (value !== last) {\n this.el.dispatchEvent(new Event('change'));\n }\n this.close();\n this.el.focus();\n }\n\n clear() {\n this.done(null, true);\n }\n\n static {\n Timepicker._template = `\n <div class=\"modal timepicker-modal\">\n <div class=\"modal-content timepicker-container\">\n <div class=\"timepicker-digital-display\">\n <div class=\"timepicker-text-container\">\n <div class=\"timepicker-display-column\">\n <input type=\"text\" maxlength=\"2\" autofocus class=\"timepicker-input-hours text-primary\" />\n :\n <input type=\"text\" maxlength=\"2\" class=\"timepicker-input-minutes\" />\n </div>\n <div class=\"timepicker-display-column timepicker-display-am-pm\">\n <div class=\"timepicker-span-am-pm\"></div>\n </div>\n </div>\n </div>\n <div class=\"timepicker-analog-display\">\n <div class=\"timepicker-plate\">\n <div class=\"timepicker-canvas\"></div>\n <div class=\"timepicker-dial timepicker-hours\"></div>\n <div class=\"timepicker-dial timepicker-minutes timepicker-dial-out\"></div>\n </div>\n <div class=\"timepicker-footer\"></div>\n </div>\n </div>\n </div`;\n }\n }\n ","import anim from \"animejs\";\n\nlet _defaults = {\n text: '',\n displayLength: 4000,\n inDuration: 300,\n outDuration: 375,\n classes: '',\n completeCallback: null,\n activationPercent: 0.8\n };\n\n export class Toast {\n static _toasts: Toast[];\n static _container: any;\n static _draggedToast: Toast;\n options: any;\n message: string;\n panning: boolean;\n timeRemaining: number;\n el: HTMLDivElement;\n counterInterval: NodeJS.Timeout;\n wasSwiped: any;\n startingXPos: number;\n xPos: any;\n time: number;\n deltaX: number;\n velocityX: number;\n\n constructor(options: any) {\n this.options = {...Toast.defaults, ...options};\n //this.htmlMessage = this.options.html;\n // Warn when using html\n // if (!!this.options.html)\n // console.warn(\n // 'The html option is deprecated and will be removed in the future. See https://github.com/materializecss/materialize/pull/49'\n // );\n // If the new unsafeHTML is used, prefer that\n // if (!!this.options.unsafeHTML) {\n // this.htmlMessage = this.options.unsafeHTML;\n // }\n this.message = this.options.text;\n this.panning = false;\n this.timeRemaining = this.options.displayLength;\n if (Toast._toasts.length === 0) {\n Toast._createContainer();\n }\n // Create new toast\n Toast._toasts.push(this);\n let toastElement = this._createToast();\n (toastElement as any).M_Toast = this;\n this.el = toastElement;\n this._animateIn();\n this._setTimer();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static getInstance(el) {\n let domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Toast;\n }\n\n static _createContainer() {\n const container = document.createElement('div');\n container.setAttribute('id', 'toast-container');\n // Add event handler\n container.addEventListener('touchstart', Toast._onDragStart);\n container.addEventListener('touchmove', Toast._onDragMove);\n container.addEventListener('touchend', Toast._onDragEnd);\n container.addEventListener('mousedown', Toast._onDragStart);\n document.addEventListener('mousemove', Toast._onDragMove);\n document.addEventListener('mouseup', Toast._onDragEnd);\n document.body.appendChild(container);\n Toast._container = container;\n }\n\n static _removeContainer() {\n document.removeEventListener('mousemove', Toast._onDragMove);\n document.removeEventListener('mouseup', Toast._onDragEnd);\n Toast._container.remove();\n Toast._container = null;\n }\n\n static _onDragStart(e) {\n if (e.target && (<HTMLElement>e.target).closest('.toast')) {\n const toastElem = (<HTMLElement>e.target).closest('.toast');\n const toast: Toast = (toastElem as any).M_Toast;\n toast.panning = true;\n Toast._draggedToast = toast;\n toast.el.classList.add('panning');\n toast.el.style.transition = '';\n toast.startingXPos = Toast._xPos(e);\n toast.time = Date.now();\n toast.xPos = Toast._xPos(e);\n }\n }\n\n static _onDragMove(e) {\n if (!!Toast._draggedToast) {\n e.preventDefault();\n const toast = Toast._draggedToast;\n toast.deltaX = Math.abs(toast.xPos - Toast._xPos(e));\n toast.xPos = Toast._xPos(e);\n toast.velocityX = toast.deltaX / (Date.now() - toast.time);\n toast.time = Date.now();\n\n const totalDeltaX = toast.xPos - toast.startingXPos;\n const activationDistance = toast.el.offsetWidth * toast.options.activationPercent;\n toast.el.style.transform = `translateX(${totalDeltaX}px)`;\n toast.el.style.opacity = (1 - Math.abs(totalDeltaX / activationDistance)).toString();\n }\n }\n\n static _onDragEnd() {\n if (!!Toast._draggedToast) {\n let toast = Toast._draggedToast;\n toast.panning = false;\n toast.el.classList.remove('panning');\n\n let totalDeltaX = toast.xPos - toast.startingXPos;\n let activationDistance = toast.el.offsetWidth * toast.options.activationPercent;\n let shouldBeDismissed = Math.abs(totalDeltaX) > activationDistance || toast.velocityX > 1;\n\n // Remove toast\n if (shouldBeDismissed) {\n toast.wasSwiped = true;\n toast.dismiss();\n // Animate toast back to original position\n }\n else {\n toast.el.style.transition = 'transform .2s, opacity .2s';\n toast.el.style.transform = '';\n toast.el.style.opacity = '';\n }\n Toast._draggedToast = null;\n }\n }\n\n static _xPos(e) {\n if (e.targetTouches && e.targetTouches.length >= 1) {\n return e.targetTouches[0].clientX;\n }\n // mouse event\n return e.clientX;\n }\n\n static dismissAll() {\n for (let toastIndex in Toast._toasts) {\n Toast._toasts[toastIndex].dismiss();\n }\n }\n\n _createToast() {\n const toast = document.createElement('div');\n toast.classList.add('toast');\n toast.setAttribute('role', 'alert');\n toast.setAttribute('aria-live', 'assertive');\n toast.setAttribute('aria-atomic', 'true');\n\n // Add custom classes onto toast\n if (this.options.classes.length > 0) {\n toast.classList.add(...this.options.classes.split(' '));\n }\n\n // Set safe text content\n toast.innerText = this.message;\n\n // if (\n // typeof HTMLElement === 'object'\n // ? this.htmlMessage instanceof HTMLElement\n // : this.htmlMessage &&\n // typeof this.htmlMessage === 'object' &&\n // this.htmlMessage !== null &&\n // this.htmlMessage.nodeType === 1 &&\n // typeof this.htmlMessage.nodeName === 'string'\n // ) {\n // //if the htmlMessage is an HTML node, append it directly\n // toast.appendChild(this.htmlMessage);\n // }\n // else if (!!this.htmlMessage.jquery) {\n // // Check if it is jQuery object, append the node\n // $(toast).append(this.htmlMessage[0]);\n // }\n // else {\n // // Append as unsanitized html;\n // $(toast).append(this.htmlMessage);\n // }\n\n // Append toast\n Toast._container.appendChild(toast);\n return toast;\n }\n\n _animateIn() {\n // Animate toast in\n anim({\n targets: this.el,\n top: 0,\n opacity: 1,\n duration: this.options.inDuration,\n easing: 'easeOutCubic'\n });\n }\n\n /**\n * Create setInterval which automatically removes toast when timeRemaining >= 0\n * has been reached\n */\n _setTimer() {\n if (this.timeRemaining !== Infinity) {\n this.counterInterval = setInterval(() => {\n // If toast is not being dragged, decrease its time remaining\n if (!this.panning) {\n this.timeRemaining -= 20;\n }\n // Animate toast out\n if (this.timeRemaining <= 0) {\n this.dismiss();\n }\n }, 20);\n }\n }\n\n /**\n * Dismiss toast with animation\n */\n dismiss() {\n window.clearInterval(this.counterInterval);\n let activationDistance = this.el.offsetWidth * this.options.activationPercent;\n\n if (this.wasSwiped) {\n this.el.style.transition = 'transform .05s, opacity .05s';\n this.el.style.transform = `translateX(${activationDistance}px)`;\n this.el.style.opacity = '0';\n }\n\n anim({\n targets: this.el,\n opacity: 0,\n marginTop: -40,\n duration: this.options.outDuration,\n easing: 'easeOutExpo',\n complete: () => {\n // Call the optional callback\n if (typeof this.options.completeCallback === 'function') {\n this.options.completeCallback();\n }\n // Remove toast from DOM\n this.el.remove();\n Toast._toasts.splice(Toast._toasts.indexOf(this), 1);\n if (Toast._toasts.length === 0) {\n Toast._removeContainer();\n }\n }\n });\n }\n\n static { \n Toast._toasts = [];\n Toast._container = null;\n Toast._draggedToast = null;\n }\n }\n","import { Component } from \"./component\";\nimport { M } from \"./global\";\nimport anim from \"animejs\";\nimport { Bounding } from \"./bounding\";\n\n const _defaults = {\n exitDelay: 200,\n enterDelay: 0,\n //html: null,\n text: '',\n //unsafeHTML: null,\n margin: 5,\n inDuration: 250,\n outDuration: 200,\n position: 'bottom',\n transitionMovement: 10\n };\n\n export class Tooltip extends Component {\n isOpen: boolean;\n isHovered: boolean;\n isFocused: boolean;\n tooltipEl: HTMLElement;\n private _handleMouseEnterBound: any;\n private _handleMouseLeaveBound: any;\n private _handleFocusBound: any;\n private _handleBlurBound: any;\n private _exitDelayTimeout: string | number | NodeJS.Timeout;\n private _enterDelayTimeout: string | number | NodeJS.Timeout;\n xMovement: number;\n yMovement: number;\n\n constructor(el, options) {\n super(Tooltip, el, options);\n (this.el as any).M_Tooltip = this;\n this.options = {...Tooltip.defaults, ...options};\n this.isOpen = false;\n this.isHovered = false;\n this.isFocused = false;\n this._appendTooltipEl();\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static init(els, options) {\n return super.init(this, els, options);\n }\n\n static getInstance(el) {\n const domElem = !!el.jquery ? el[0] : el;\n return domElem.M_Tooltip;\n }\n\n destroy() {\n this.tooltipEl.remove();\n this._removeEventHandlers();\n (this.el as any).M_Tooltip = undefined;\n }\n\n _appendTooltipEl() {\n this.tooltipEl = document.createElement('div');\n this.tooltipEl.classList.add('material-tooltip');\n\n const tooltipContentEl = document.createElement('div');\n tooltipContentEl.classList.add('tooltip-content');\n this._setTooltipContent(tooltipContentEl);\n this.tooltipEl.appendChild(tooltipContentEl);\n document.body.appendChild(this.tooltipEl);\n }\n\n _setTooltipContent(tooltipContentEl: HTMLElement) {\n tooltipContentEl.innerText = this.options.text;\n /*\n if (!!this.options.html) {\n // Warn when using html\n console.warn(\n 'The html option is deprecated and will be removed in the future. See https://github.com/materializecss/materialize/pull/49'\n );\n $(tooltipContentEl).append(this.options.html);\n }\n if (!!this.options.unsafeHTML) {\n $(tooltipContentEl).append(this.options.unsafeHTML);\n }\n */\n }\n\n _updateTooltipContent() {\n this._setTooltipContent(this.tooltipEl.querySelector('.tooltip-content'));\n }\n\n _setupEventHandlers() {\n this._handleMouseEnterBound = this._handleMouseEnter.bind(this);\n this._handleMouseLeaveBound = this._handleMouseLeave.bind(this);\n this._handleFocusBound = this._handleFocus.bind(this);\n this._handleBlurBound = this._handleBlur.bind(this);\n this.el.addEventListener('mouseenter', this._handleMouseEnterBound);\n this.el.addEventListener('mouseleave', this._handleMouseLeaveBound);\n this.el.addEventListener('focus', this._handleFocusBound, true);\n this.el.addEventListener('blur', this._handleBlurBound, true);\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('mouseenter', this._handleMouseEnterBound);\n this.el.removeEventListener('mouseleave', this._handleMouseLeaveBound);\n this.el.removeEventListener('focus', this._handleFocusBound, true);\n this.el.removeEventListener('blur', this._handleBlurBound, true);\n }\n\n open(isManual) {\n if (this.isOpen) return;\n isManual = isManual === undefined ? true : undefined; // Default value true\n this.isOpen = true;\n // Update tooltip content with HTML attribute options\n this.options = {...this.options, ...this._getAttributeOptions()};\n this._updateTooltipContent();\n this._setEnterDelayTimeout(isManual);\n }\n\n close() {\n if (!this.isOpen) return;\n this.isHovered = false;\n this.isFocused = false;\n this.isOpen = false;\n this._setExitDelayTimeout();\n }\n\n _setExitDelayTimeout() {\n clearTimeout(this._exitDelayTimeout);\n this._exitDelayTimeout = setTimeout(() => {\n if (this.isHovered || this.isFocused) return;\n this._animateOut();\n }, this.options.exitDelay);\n }\n\n _setEnterDelayTimeout(isManual) {\n clearTimeout(this._enterDelayTimeout);\n this._enterDelayTimeout = setTimeout(() => {\n if (!this.isHovered && !this.isFocused && !isManual) return;\n this._animateIn();\n }, this.options.enterDelay);\n }\n\n _positionTooltip() {\n const tooltip: HTMLElement = this.tooltipEl;\n const origin = (this.el as HTMLElement),\n originHeight = origin.offsetHeight,\n originWidth = origin.offsetWidth,\n tooltipHeight = tooltip.offsetHeight,\n tooltipWidth = tooltip.offsetWidth,\n margin = this.options.margin;\n\n (this.xMovement = 0), (this.yMovement = 0);\n\n let targetTop = origin.getBoundingClientRect().top + M.getDocumentScrollTop();\n let targetLeft = origin.getBoundingClientRect().left + M.getDocumentScrollLeft();\n if (this.options.position === 'top') {\n targetTop += -tooltipHeight - margin;\n targetLeft += originWidth / 2 - tooltipWidth / 2;\n this.yMovement = -this.options.transitionMovement;\n } else if (this.options.position === 'right') {\n targetTop += originHeight / 2 - tooltipHeight / 2;\n targetLeft += originWidth + margin;\n this.xMovement = this.options.transitionMovement;\n } else if (this.options.position === 'left') {\n targetTop += originHeight / 2 - tooltipHeight / 2;\n targetLeft += -tooltipWidth - margin;\n this.xMovement = -this.options.transitionMovement;\n } else {\n targetTop += originHeight + margin;\n targetLeft += originWidth / 2 - tooltipWidth / 2;\n this.yMovement = this.options.transitionMovement;\n }\n\n const newCoordinates = this._repositionWithinScreen(\n targetLeft,\n targetTop,\n tooltipWidth,\n tooltipHeight\n );\n \n tooltip.style.top = newCoordinates.y+'px';\n tooltip.style.left = newCoordinates.x+'px';\n }\n\n _repositionWithinScreen(x, y, width, height) {\n const scrollLeft = M.getDocumentScrollLeft();\n const scrollTop = M.getDocumentScrollTop();\n let newX = x - scrollLeft;\n let newY = y - scrollTop;\n\n const bounding: Bounding = {\n left: newX,\n top: newY,\n width: width,\n height: height\n };\n const offset = this.options.margin + this.options.transitionMovement;\n const edges = M.checkWithinContainer(document.body, bounding, offset);\n\n if (edges.left) {\n newX = offset;\n } else if (edges.right) {\n newX -= newX + width - window.innerWidth;\n }\n if (edges.top) {\n newY = offset;\n } else if (edges.bottom) {\n newY -= newY + height - window.innerHeight;\n }\n return {\n x: newX + scrollLeft,\n y: newY + scrollTop\n };\n }\n\n _animateIn() {\n this._positionTooltip();\n this.tooltipEl.style.visibility = 'visible';\n anim.remove(this.tooltipEl);\n anim({\n targets: this.tooltipEl,\n opacity: this.options.opacity || 1,\n translateX: this.xMovement,\n translateY: this.yMovement,\n duration: this.options.inDuration,\n easing: 'easeOutCubic'\n });\n }\n\n _animateOut() {\n anim.remove(this.tooltipEl);\n anim({\n targets: this.tooltipEl,\n opacity: 0,\n translateX: 0,\n translateY: 0,\n duration: this.options.outDuration,\n easing: 'easeOutCubic'\n });\n }\n\n _handleMouseEnter() {\n this.isHovered = true;\n this.isFocused = false; // Allows close of tooltip when opened by focus.\n this.open(false);\n }\n\n _handleMouseLeave() {\n this.isHovered = false;\n this.isFocused = false; // Allows close of tooltip when opened by focus.\n this.close();\n }\n\n _handleFocus() {\n if (M.tabPressed) {\n this.isFocused = true;\n this.open(false);\n }\n }\n\n _handleBlur() {\n this.isFocused = false;\n this.close();\n }\n\n _getAttributeOptions() {\n const attributeOptions = {};\n const tooltipTextOption = this.el.getAttribute('data-tooltip');\n const positionOption = this.el.getAttribute('data-position');\n if (tooltipTextOption) {\n (attributeOptions as any).text = tooltipTextOption;\n }\n if (positionOption) {\n (attributeOptions as any).position = positionOption;\n }\n return attributeOptions;\n }\n }\n\n\n","type RGBColor = {\n r: number,\n g: number,\n b: number,\n}\n\ntype Position = {\n x: number,\n y: number,\n}\n\nexport class Waves {\n \n private static _offset(el) {\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n return {\n top: box.top + window.pageYOffset - docElem.clientTop,\n left: box.left + window.pageXOffset - docElem.clientLeft\n };\n }\n \n // https://phoenix-dx.com/css-techniques-for-material-ripple-effect/\n\n public static renderWaveEffect(targetElement: HTMLElement, position: Position|null = null, color: RGBColor|null = null): void {\n const isCentered = position === null;\n const duration = 500;\n let animationFrame, animationStart; \n const animationStep = function(timestamp) {\n if (!animationStart) {\n animationStart = timestamp;\n } \n const frame = timestamp - animationStart;\n if (frame < duration) {\n const easing = (frame/duration) * (2 - (frame/duration));\n const circle = isCentered ? 'circle at 50% 50%' : `circle at ${position.x}px ${position.y}px`;\n const waveColor = `rgba(${color?.r || 0}, ${color?.g || 0}, ${color?.b || 0}, ${ 0.3 * (1-easing) })`;\n const stop = 90 * easing + \"%\"; \n targetElement.style.backgroundImage = \"radial-gradient(\"+circle+\", \"+waveColor+\" \"+stop+\", transparent \"+stop+\")\"; \n animationFrame = window.requestAnimationFrame(animationStep);\n }\n else {\n targetElement.style.backgroundImage = 'none';\n window.cancelAnimationFrame(animationFrame);\n }\n };\n animationFrame = window.requestAnimationFrame(animationStep); \n }\n\n static Init() {\n document.addEventListener(\"DOMContentLoaded\", () => {\n document.body.addEventListener('click', e => {\n const trigger = <HTMLElement>e.target;\n const el = <HTMLElement>trigger.closest('.waves-effect');\n if (el && el.contains(trigger)) {\n const isCircular = el.classList.contains('waves-circle');\n const x = e.pageX - Waves._offset(el).left;\n const y = e.pageY - Waves._offset(el).top;\n\n let color = null;\n if (el.classList.contains('waves-light'))\n color = {r:255, g:255, b:255};\n \n Waves.renderWaveEffect(el, isCircular ? null : {x, y}, color);\n }\n });\n });\n\n }\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(238);\n",""],"names":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"materialize.min.js","mappings":"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","sources":["webpack://@materializecss/materialize/webpack/universalModuleDefinition","webpack://@materializecss/materialize/./node_modules/animejs/lib/anime.es.js","webpack://@materializecss/materialize/./src/autocomplete.ts","webpack://@materializecss/materialize/./src/buttons.ts","webpack://@materializecss/materialize/./src/cards.ts","webpack://@materializecss/materialize/./src/carousel.ts","webpack://@materializecss/materialize/./src/characterCounter.ts","webpack://@materializecss/materialize/./src/chips.ts","webpack://@materializecss/materialize/./src/collapsible.ts","webpack://@materializecss/materialize/./src/component.ts","webpack://@materializecss/materialize/./src/datepicker.ts","webpack://@materializecss/materialize/./src/dropdown.ts","webpack://@materializecss/materialize/./src/forms.ts","webpack://@materializecss/materialize/./src/materialbox.ts","webpack://@materializecss/materialize/./src/modal.ts","webpack://@materializecss/materialize/./src/parallax.ts","webpack://@materializecss/materialize/./src/pushpin.ts","webpack://@materializecss/materialize/./src/range.ts","webpack://@materializecss/materialize/./src/scrollspy.ts","webpack://@materializecss/materialize/./src/select.ts","webpack://@materializecss/materialize/./src/sidenav.ts","webpack://@materializecss/materialize/./src/slider.ts","webpack://@materializecss/materialize/./src/tabs.ts","webpack://@materializecss/materialize/./src/tapTarget.ts","webpack://@materializecss/materialize/./src/timepicker.ts","webpack://@materializecss/materialize/./src/toasts.ts","webpack://@materializecss/materialize/./src/tooltip.ts","webpack://@materializecss/materialize/./src/utils.ts","webpack://@materializecss/materialize/./src/waves.ts","webpack://@materializecss/materialize/webpack/bootstrap","webpack://@materializecss/materialize/webpack/runtime/define property getters","webpack://@materializecss/materialize/webpack/runtime/hasOwnProperty shorthand","webpack://@materializecss/materialize/webpack/runtime/make namespace object","webpack://@materializecss/materialize/./src/global.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, () => {\nreturn ","/*\n * anime.js v3.2.1\n * (c) 2020 Julian Garnier\n * Released under the MIT license\n * animejs.com\n */\n\n// Defaults\n\nvar defaultInstanceSettings = {\n update: null,\n begin: null,\n loopBegin: null,\n changeBegin: null,\n change: null,\n changeComplete: null,\n loopComplete: null,\n complete: null,\n loop: 1,\n direction: 'normal',\n autoplay: true,\n timelineOffset: 0\n};\n\nvar defaultTweenSettings = {\n duration: 1000,\n delay: 0,\n endDelay: 0,\n easing: 'easeOutElastic(1, .5)',\n round: 0\n};\n\nvar validTransforms = ['translateX', 'translateY', 'translateZ', 'rotate', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'perspective', 'matrix', 'matrix3d'];\n\n// Caching\n\nvar cache = {\n CSS: {},\n springs: {}\n};\n\n// Utils\n\nfunction minMax(val, min, max) {\n return Math.min(Math.max(val, min), max);\n}\n\nfunction stringContains(str, text) {\n return str.indexOf(text) > -1;\n}\n\nfunction applyArguments(func, args) {\n return func.apply(null, args);\n}\n\nvar is = {\n arr: function (a) { return Array.isArray(a); },\n obj: function (a) { return stringContains(Object.prototype.toString.call(a), 'Object'); },\n pth: function (a) { return is.obj(a) && a.hasOwnProperty('totalLength'); },\n svg: function (a) { return a instanceof SVGElement; },\n inp: function (a) { return a instanceof HTMLInputElement; },\n dom: function (a) { return a.nodeType || is.svg(a); },\n str: function (a) { return typeof a === 'string'; },\n fnc: function (a) { return typeof a === 'function'; },\n und: function (a) { return typeof a === 'undefined'; },\n nil: function (a) { return is.und(a) || a === null; },\n hex: function (a) { return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a); },\n rgb: function (a) { return /^rgb/.test(a); },\n hsl: function (a) { return /^hsl/.test(a); },\n col: function (a) { return (is.hex(a) || is.rgb(a) || is.hsl(a)); },\n key: function (a) { return !defaultInstanceSettings.hasOwnProperty(a) && !defaultTweenSettings.hasOwnProperty(a) && a !== 'targets' && a !== 'keyframes'; },\n};\n\n// Easings\n\nfunction parseEasingParameters(string) {\n var match = /\\(([^)]+)\\)/.exec(string);\n return match ? match[1].split(',').map(function (p) { return parseFloat(p); }) : [];\n}\n\n// Spring solver inspired by Webkit Copyright © 2016 Apple Inc. All rights reserved. https://webkit.org/demos/spring/spring.js\n\nfunction spring(string, duration) {\n\n var params = parseEasingParameters(string);\n var mass = minMax(is.und(params[0]) ? 1 : params[0], .1, 100);\n var stiffness = minMax(is.und(params[1]) ? 100 : params[1], .1, 100);\n var damping = minMax(is.und(params[2]) ? 10 : params[2], .1, 100);\n var velocity = minMax(is.und(params[3]) ? 0 : params[3], .1, 100);\n var w0 = Math.sqrt(stiffness / mass);\n var zeta = damping / (2 * Math.sqrt(stiffness * mass));\n var wd = zeta < 1 ? w0 * Math.sqrt(1 - zeta * zeta) : 0;\n var a = 1;\n var b = zeta < 1 ? (zeta * w0 + -velocity) / wd : -velocity + w0;\n\n function solver(t) {\n var progress = duration ? (duration * t) / 1000 : t;\n if (zeta < 1) {\n progress = Math.exp(-progress * zeta * w0) * (a * Math.cos(wd * progress) + b * Math.sin(wd * progress));\n } else {\n progress = (a + b * progress) * Math.exp(-progress * w0);\n }\n if (t === 0 || t === 1) { return t; }\n return 1 - progress;\n }\n\n function getDuration() {\n var cached = cache.springs[string];\n if (cached) { return cached; }\n var frame = 1/6;\n var elapsed = 0;\n var rest = 0;\n while(true) {\n elapsed += frame;\n if (solver(elapsed) === 1) {\n rest++;\n if (rest >= 16) { break; }\n } else {\n rest = 0;\n }\n }\n var duration = elapsed * frame * 1000;\n cache.springs[string] = duration;\n return duration;\n }\n\n return duration ? solver : getDuration;\n\n}\n\n// Basic steps easing implementation https://developer.mozilla.org/fr/docs/Web/CSS/transition-timing-function\n\nfunction steps(steps) {\n if ( steps === void 0 ) steps = 10;\n\n return function (t) { return Math.ceil((minMax(t, 0.000001, 1)) * steps) * (1 / steps); };\n}\n\n// BezierEasing https://github.com/gre/bezier-easing\n\nvar bezier = (function () {\n\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\n function A(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1 }\n function B(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1 }\n function C(aA1) { return 3.0 * aA1 }\n\n function calcBezier(aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT }\n function getSlope(aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1) }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) { aB = currentT; } else { aA = currentT; }\n } while (Math.abs(currentX) > 0.0000001 && ++i < 10);\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < 4; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) { return aGuessT; }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n\n function bezier(mX1, mY1, mX2, mY2) {\n\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) { return; }\n var sampleValues = new Float32Array(kSplineTableSize);\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n }\n\n function getTForX(aX) {\n\n var intervalStart = 0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample;\n\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= 0.001) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n\n }\n\n return function (x) {\n if (mX1 === mY1 && mX2 === mY2) { return x; }\n if (x === 0 || x === 1) { return x; }\n return calcBezier(getTForX(x), mY1, mY2);\n }\n\n }\n\n return bezier;\n\n})();\n\nvar penner = (function () {\n\n // Based on jQuery UI's implemenation of easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\n var eases = { linear: function () { return function (t) { return t; }; } };\n\n var functionEasings = {\n Sine: function () { return function (t) { return 1 - Math.cos(t * Math.PI / 2); }; },\n Circ: function () { return function (t) { return 1 - Math.sqrt(1 - t * t); }; },\n Back: function () { return function (t) { return t * t * (3 * t - 2); }; },\n Bounce: function () { return function (t) {\n var pow2, b = 4;\n while (t < (( pow2 = Math.pow(2, --b)) - 1) / 11) {}\n return 1 / Math.pow(4, 3 - b) - 7.5625 * Math.pow(( pow2 * 3 - 2 ) / 22 - t, 2)\n }; },\n Elastic: function (amplitude, period) {\n if ( amplitude === void 0 ) amplitude = 1;\n if ( period === void 0 ) period = .5;\n\n var a = minMax(amplitude, 1, 10);\n var p = minMax(period, .1, 2);\n return function (t) {\n return (t === 0 || t === 1) ? t : \n -a * Math.pow(2, 10 * (t - 1)) * Math.sin((((t - 1) - (p / (Math.PI * 2) * Math.asin(1 / a))) * (Math.PI * 2)) / p);\n }\n }\n };\n\n var baseEasings = ['Quad', 'Cubic', 'Quart', 'Quint', 'Expo'];\n\n baseEasings.forEach(function (name, i) {\n functionEasings[name] = function () { return function (t) { return Math.pow(t, i + 2); }; };\n });\n\n Object.keys(functionEasings).forEach(function (name) {\n var easeIn = functionEasings[name];\n eases['easeIn' + name] = easeIn;\n eases['easeOut' + name] = function (a, b) { return function (t) { return 1 - easeIn(a, b)(1 - t); }; };\n eases['easeInOut' + name] = function (a, b) { return function (t) { return t < 0.5 ? easeIn(a, b)(t * 2) / 2 : \n 1 - easeIn(a, b)(t * -2 + 2) / 2; }; };\n eases['easeOutIn' + name] = function (a, b) { return function (t) { return t < 0.5 ? (1 - easeIn(a, b)(1 - t * 2)) / 2 : \n (easeIn(a, b)(t * 2 - 1) + 1) / 2; }; };\n });\n\n return eases;\n\n})();\n\nfunction parseEasings(easing, duration) {\n if (is.fnc(easing)) { return easing; }\n var name = easing.split('(')[0];\n var ease = penner[name];\n var args = parseEasingParameters(easing);\n switch (name) {\n case 'spring' : return spring(easing, duration);\n case 'cubicBezier' : return applyArguments(bezier, args);\n case 'steps' : return applyArguments(steps, args);\n default : return applyArguments(ease, args);\n }\n}\n\n// Strings\n\nfunction selectString(str) {\n try {\n var nodes = document.querySelectorAll(str);\n return nodes;\n } catch(e) {\n return;\n }\n}\n\n// Arrays\n\nfunction filterArray(arr, callback) {\n var len = arr.length;\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n var result = [];\n for (var i = 0; i < len; i++) {\n if (i in arr) {\n var val = arr[i];\n if (callback.call(thisArg, val, i, arr)) {\n result.push(val);\n }\n }\n }\n return result;\n}\n\nfunction flattenArray(arr) {\n return arr.reduce(function (a, b) { return a.concat(is.arr(b) ? flattenArray(b) : b); }, []);\n}\n\nfunction toArray(o) {\n if (is.arr(o)) { return o; }\n if (is.str(o)) { o = selectString(o) || o; }\n if (o instanceof NodeList || o instanceof HTMLCollection) { return [].slice.call(o); }\n return [o];\n}\n\nfunction arrayContains(arr, val) {\n return arr.some(function (a) { return a === val; });\n}\n\n// Objects\n\nfunction cloneObject(o) {\n var clone = {};\n for (var p in o) { clone[p] = o[p]; }\n return clone;\n}\n\nfunction replaceObjectProps(o1, o2) {\n var o = cloneObject(o1);\n for (var p in o1) { o[p] = o2.hasOwnProperty(p) ? o2[p] : o1[p]; }\n return o;\n}\n\nfunction mergeObjects(o1, o2) {\n var o = cloneObject(o1);\n for (var p in o2) { o[p] = is.und(o1[p]) ? o2[p] : o1[p]; }\n return o;\n}\n\n// Colors\n\nfunction rgbToRgba(rgbValue) {\n var rgb = /rgb\\((\\d+,\\s*[\\d]+,\\s*[\\d]+)\\)/g.exec(rgbValue);\n return rgb ? (\"rgba(\" + (rgb[1]) + \",1)\") : rgbValue;\n}\n\nfunction hexToRgba(hexValue) {\n var rgx = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n var hex = hexValue.replace(rgx, function (m, r, g, b) { return r + r + g + g + b + b; } );\n var rgb = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n var r = parseInt(rgb[1], 16);\n var g = parseInt(rgb[2], 16);\n var b = parseInt(rgb[3], 16);\n return (\"rgba(\" + r + \",\" + g + \",\" + b + \",1)\");\n}\n\nfunction hslToRgba(hslValue) {\n var hsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.exec(hslValue) || /hsla\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*([\\d.]+)\\)/g.exec(hslValue);\n var h = parseInt(hsl[1], 10) / 360;\n var s = parseInt(hsl[2], 10) / 100;\n var l = parseInt(hsl[3], 10) / 100;\n var a = hsl[4] || 1;\n function hue2rgb(p, q, t) {\n if (t < 0) { t += 1; }\n if (t > 1) { t -= 1; }\n if (t < 1/6) { return p + (q - p) * 6 * t; }\n if (t < 1/2) { return q; }\n if (t < 2/3) { return p + (q - p) * (2/3 - t) * 6; }\n return p;\n }\n var r, g, b;\n if (s == 0) {\n r = g = b = l;\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n return (\"rgba(\" + (r * 255) + \",\" + (g * 255) + \",\" + (b * 255) + \",\" + a + \")\");\n}\n\nfunction colorToRgb(val) {\n if (is.rgb(val)) { return rgbToRgba(val); }\n if (is.hex(val)) { return hexToRgba(val); }\n if (is.hsl(val)) { return hslToRgba(val); }\n}\n\n// Units\n\nfunction getUnit(val) {\n var split = /[+-]?\\d*\\.?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(val);\n if (split) { return split[1]; }\n}\n\nfunction getTransformUnit(propName) {\n if (stringContains(propName, 'translate') || propName === 'perspective') { return 'px'; }\n if (stringContains(propName, 'rotate') || stringContains(propName, 'skew')) { return 'deg'; }\n}\n\n// Values\n\nfunction getFunctionValue(val, animatable) {\n if (!is.fnc(val)) { return val; }\n return val(animatable.target, animatable.id, animatable.total);\n}\n\nfunction getAttribute(el, prop) {\n return el.getAttribute(prop);\n}\n\nfunction convertPxToUnit(el, value, unit) {\n var valueUnit = getUnit(value);\n if (arrayContains([unit, 'deg', 'rad', 'turn'], valueUnit)) { return value; }\n var cached = cache.CSS[value + unit];\n if (!is.und(cached)) { return cached; }\n var baseline = 100;\n var tempEl = document.createElement(el.tagName);\n var parentEl = (el.parentNode && (el.parentNode !== document)) ? el.parentNode : document.body;\n parentEl.appendChild(tempEl);\n tempEl.style.position = 'absolute';\n tempEl.style.width = baseline + unit;\n var factor = baseline / tempEl.offsetWidth;\n parentEl.removeChild(tempEl);\n var convertedUnit = factor * parseFloat(value);\n cache.CSS[value + unit] = convertedUnit;\n return convertedUnit;\n}\n\nfunction getCSSValue(el, prop, unit) {\n if (prop in el.style) {\n var uppercasePropName = prop.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n var value = el.style[prop] || getComputedStyle(el).getPropertyValue(uppercasePropName) || '0';\n return unit ? convertPxToUnit(el, value, unit) : value;\n }\n}\n\nfunction getAnimationType(el, prop) {\n if (is.dom(el) && !is.inp(el) && (!is.nil(getAttribute(el, prop)) || (is.svg(el) && el[prop]))) { return 'attribute'; }\n if (is.dom(el) && arrayContains(validTransforms, prop)) { return 'transform'; }\n if (is.dom(el) && (prop !== 'transform' && getCSSValue(el, prop))) { return 'css'; }\n if (el[prop] != null) { return 'object'; }\n}\n\nfunction getElementTransforms(el) {\n if (!is.dom(el)) { return; }\n var str = el.style.transform || '';\n var reg = /(\\w+)\\(([^)]*)\\)/g;\n var transforms = new Map();\n var m; while (m = reg.exec(str)) { transforms.set(m[1], m[2]); }\n return transforms;\n}\n\nfunction getTransformValue(el, propName, animatable, unit) {\n var defaultVal = stringContains(propName, 'scale') ? 1 : 0 + getTransformUnit(propName);\n var value = getElementTransforms(el).get(propName) || defaultVal;\n if (animatable) {\n animatable.transforms.list.set(propName, value);\n animatable.transforms['last'] = propName;\n }\n return unit ? convertPxToUnit(el, value, unit) : value;\n}\n\nfunction getOriginalTargetValue(target, propName, unit, animatable) {\n switch (getAnimationType(target, propName)) {\n case 'transform': return getTransformValue(target, propName, animatable, unit);\n case 'css': return getCSSValue(target, propName, unit);\n case 'attribute': return getAttribute(target, propName);\n default: return target[propName] || 0;\n }\n}\n\nfunction getRelativeValue(to, from) {\n var operator = /^(\\*=|\\+=|-=)/.exec(to);\n if (!operator) { return to; }\n var u = getUnit(to) || 0;\n var x = parseFloat(from);\n var y = parseFloat(to.replace(operator[0], ''));\n switch (operator[0][0]) {\n case '+': return x + y + u;\n case '-': return x - y + u;\n case '*': return x * y + u;\n }\n}\n\nfunction validateValue(val, unit) {\n if (is.col(val)) { return colorToRgb(val); }\n if (/\\s/g.test(val)) { return val; }\n var originalUnit = getUnit(val);\n var unitLess = originalUnit ? val.substr(0, val.length - originalUnit.length) : val;\n if (unit) { return unitLess + unit; }\n return unitLess;\n}\n\n// getTotalLength() equivalent for circle, rect, polyline, polygon and line shapes\n// adapted from https://gist.github.com/SebLambla/3e0550c496c236709744\n\nfunction getDistance(p1, p2) {\n return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n}\n\nfunction getCircleLength(el) {\n return Math.PI * 2 * getAttribute(el, 'r');\n}\n\nfunction getRectLength(el) {\n return (getAttribute(el, 'width') * 2) + (getAttribute(el, 'height') * 2);\n}\n\nfunction getLineLength(el) {\n return getDistance(\n {x: getAttribute(el, 'x1'), y: getAttribute(el, 'y1')}, \n {x: getAttribute(el, 'x2'), y: getAttribute(el, 'y2')}\n );\n}\n\nfunction getPolylineLength(el) {\n var points = el.points;\n var totalLength = 0;\n var previousPos;\n for (var i = 0 ; i < points.numberOfItems; i++) {\n var currentPos = points.getItem(i);\n if (i > 0) { totalLength += getDistance(previousPos, currentPos); }\n previousPos = currentPos;\n }\n return totalLength;\n}\n\nfunction getPolygonLength(el) {\n var points = el.points;\n return getPolylineLength(el) + getDistance(points.getItem(points.numberOfItems - 1), points.getItem(0));\n}\n\n// Path animation\n\nfunction getTotalLength(el) {\n if (el.getTotalLength) { return el.getTotalLength(); }\n switch(el.tagName.toLowerCase()) {\n case 'circle': return getCircleLength(el);\n case 'rect': return getRectLength(el);\n case 'line': return getLineLength(el);\n case 'polyline': return getPolylineLength(el);\n case 'polygon': return getPolygonLength(el);\n }\n}\n\nfunction setDashoffset(el) {\n var pathLength = getTotalLength(el);\n el.setAttribute('stroke-dasharray', pathLength);\n return pathLength;\n}\n\n// Motion path\n\nfunction getParentSvgEl(el) {\n var parentEl = el.parentNode;\n while (is.svg(parentEl)) {\n if (!is.svg(parentEl.parentNode)) { break; }\n parentEl = parentEl.parentNode;\n }\n return parentEl;\n}\n\nfunction getParentSvg(pathEl, svgData) {\n var svg = svgData || {};\n var parentSvgEl = svg.el || getParentSvgEl(pathEl);\n var rect = parentSvgEl.getBoundingClientRect();\n var viewBoxAttr = getAttribute(parentSvgEl, 'viewBox');\n var width = rect.width;\n var height = rect.height;\n var viewBox = svg.viewBox || (viewBoxAttr ? viewBoxAttr.split(' ') : [0, 0, width, height]);\n return {\n el: parentSvgEl,\n viewBox: viewBox,\n x: viewBox[0] / 1,\n y: viewBox[1] / 1,\n w: width,\n h: height,\n vW: viewBox[2],\n vH: viewBox[3]\n }\n}\n\nfunction getPath(path, percent) {\n var pathEl = is.str(path) ? selectString(path)[0] : path;\n var p = percent || 100;\n return function(property) {\n return {\n property: property,\n el: pathEl,\n svg: getParentSvg(pathEl),\n totalLength: getTotalLength(pathEl) * (p / 100)\n }\n }\n}\n\nfunction getPathProgress(path, progress, isPathTargetInsideSVG) {\n function point(offset) {\n if ( offset === void 0 ) offset = 0;\n\n var l = progress + offset >= 1 ? progress + offset : 0;\n return path.el.getPointAtLength(l);\n }\n var svg = getParentSvg(path.el, path.svg);\n var p = point();\n var p0 = point(-1);\n var p1 = point(+1);\n var scaleX = isPathTargetInsideSVG ? 1 : svg.w / svg.vW;\n var scaleY = isPathTargetInsideSVG ? 1 : svg.h / svg.vH;\n switch (path.property) {\n case 'x': return (p.x - svg.x) * scaleX;\n case 'y': return (p.y - svg.y) * scaleY;\n case 'angle': return Math.atan2(p1.y - p0.y, p1.x - p0.x) * 180 / Math.PI;\n }\n}\n\n// Decompose value\n\nfunction decomposeValue(val, unit) {\n // const rgx = /-?\\d*\\.?\\d+/g; // handles basic numbers\n // const rgx = /[+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/g; // handles exponents notation\n var rgx = /[+-]?\\d*\\.?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/g; // handles exponents notation\n var value = validateValue((is.pth(val) ? val.totalLength : val), unit) + '';\n return {\n original: value,\n numbers: value.match(rgx) ? value.match(rgx).map(Number) : [0],\n strings: (is.str(val) || unit) ? value.split(rgx) : []\n }\n}\n\n// Animatables\n\nfunction parseTargets(targets) {\n var targetsArray = targets ? (flattenArray(is.arr(targets) ? targets.map(toArray) : toArray(targets))) : [];\n return filterArray(targetsArray, function (item, pos, self) { return self.indexOf(item) === pos; });\n}\n\nfunction getAnimatables(targets) {\n var parsed = parseTargets(targets);\n return parsed.map(function (t, i) {\n return {target: t, id: i, total: parsed.length, transforms: { list: getElementTransforms(t) } };\n });\n}\n\n// Properties\n\nfunction normalizePropertyTweens(prop, tweenSettings) {\n var settings = cloneObject(tweenSettings);\n // Override duration if easing is a spring\n if (/^spring/.test(settings.easing)) { settings.duration = spring(settings.easing); }\n if (is.arr(prop)) {\n var l = prop.length;\n var isFromTo = (l === 2 && !is.obj(prop[0]));\n if (!isFromTo) {\n // Duration divided by the number of tweens\n if (!is.fnc(tweenSettings.duration)) { settings.duration = tweenSettings.duration / l; }\n } else {\n // Transform [from, to] values shorthand to a valid tween value\n prop = {value: prop};\n }\n }\n var propArray = is.arr(prop) ? prop : [prop];\n return propArray.map(function (v, i) {\n var obj = (is.obj(v) && !is.pth(v)) ? v : {value: v};\n // Default delay value should only be applied to the first tween\n if (is.und(obj.delay)) { obj.delay = !i ? tweenSettings.delay : 0; }\n // Default endDelay value should only be applied to the last tween\n if (is.und(obj.endDelay)) { obj.endDelay = i === propArray.length - 1 ? tweenSettings.endDelay : 0; }\n return obj;\n }).map(function (k) { return mergeObjects(k, settings); });\n}\n\n\nfunction flattenKeyframes(keyframes) {\n var propertyNames = filterArray(flattenArray(keyframes.map(function (key) { return Object.keys(key); })), function (p) { return is.key(p); })\n .reduce(function (a,b) { if (a.indexOf(b) < 0) { a.push(b); } return a; }, []);\n var properties = {};\n var loop = function ( i ) {\n var propName = propertyNames[i];\n properties[propName] = keyframes.map(function (key) {\n var newKey = {};\n for (var p in key) {\n if (is.key(p)) {\n if (p == propName) { newKey.value = key[p]; }\n } else {\n newKey[p] = key[p];\n }\n }\n return newKey;\n });\n };\n\n for (var i = 0; i < propertyNames.length; i++) loop( i );\n return properties;\n}\n\nfunction getProperties(tweenSettings, params) {\n var properties = [];\n var keyframes = params.keyframes;\n if (keyframes) { params = mergeObjects(flattenKeyframes(keyframes), params); }\n for (var p in params) {\n if (is.key(p)) {\n properties.push({\n name: p,\n tweens: normalizePropertyTweens(params[p], tweenSettings)\n });\n }\n }\n return properties;\n}\n\n// Tweens\n\nfunction normalizeTweenValues(tween, animatable) {\n var t = {};\n for (var p in tween) {\n var value = getFunctionValue(tween[p], animatable);\n if (is.arr(value)) {\n value = value.map(function (v) { return getFunctionValue(v, animatable); });\n if (value.length === 1) { value = value[0]; }\n }\n t[p] = value;\n }\n t.duration = parseFloat(t.duration);\n t.delay = parseFloat(t.delay);\n return t;\n}\n\nfunction normalizeTweens(prop, animatable) {\n var previousTween;\n return prop.tweens.map(function (t) {\n var tween = normalizeTweenValues(t, animatable);\n var tweenValue = tween.value;\n var to = is.arr(tweenValue) ? tweenValue[1] : tweenValue;\n var toUnit = getUnit(to);\n var originalValue = getOriginalTargetValue(animatable.target, prop.name, toUnit, animatable);\n var previousValue = previousTween ? previousTween.to.original : originalValue;\n var from = is.arr(tweenValue) ? tweenValue[0] : previousValue;\n var fromUnit = getUnit(from) || getUnit(originalValue);\n var unit = toUnit || fromUnit;\n if (is.und(to)) { to = previousValue; }\n tween.from = decomposeValue(from, unit);\n tween.to = decomposeValue(getRelativeValue(to, from), unit);\n tween.start = previousTween ? previousTween.end : 0;\n tween.end = tween.start + tween.delay + tween.duration + tween.endDelay;\n tween.easing = parseEasings(tween.easing, tween.duration);\n tween.isPath = is.pth(tweenValue);\n tween.isPathTargetInsideSVG = tween.isPath && is.svg(animatable.target);\n tween.isColor = is.col(tween.from.original);\n if (tween.isColor) { tween.round = 1; }\n previousTween = tween;\n return tween;\n });\n}\n\n// Tween progress\n\nvar setProgressValue = {\n css: function (t, p, v) { return t.style[p] = v; },\n attribute: function (t, p, v) { return t.setAttribute(p, v); },\n object: function (t, p, v) { return t[p] = v; },\n transform: function (t, p, v, transforms, manual) {\n transforms.list.set(p, v);\n if (p === transforms.last || manual) {\n var str = '';\n transforms.list.forEach(function (value, prop) { str += prop + \"(\" + value + \") \"; });\n t.style.transform = str;\n }\n }\n};\n\n// Set Value helper\n\nfunction setTargetsValue(targets, properties) {\n var animatables = getAnimatables(targets);\n animatables.forEach(function (animatable) {\n for (var property in properties) {\n var value = getFunctionValue(properties[property], animatable);\n var target = animatable.target;\n var valueUnit = getUnit(value);\n var originalValue = getOriginalTargetValue(target, property, valueUnit, animatable);\n var unit = valueUnit || getUnit(originalValue);\n var to = getRelativeValue(validateValue(value, unit), originalValue);\n var animType = getAnimationType(target, property);\n setProgressValue[animType](target, property, to, animatable.transforms, true);\n }\n });\n}\n\n// Animations\n\nfunction createAnimation(animatable, prop) {\n var animType = getAnimationType(animatable.target, prop.name);\n if (animType) {\n var tweens = normalizeTweens(prop, animatable);\n var lastTween = tweens[tweens.length - 1];\n return {\n type: animType,\n property: prop.name,\n animatable: animatable,\n tweens: tweens,\n duration: lastTween.end,\n delay: tweens[0].delay,\n endDelay: lastTween.endDelay\n }\n }\n}\n\nfunction getAnimations(animatables, properties) {\n return filterArray(flattenArray(animatables.map(function (animatable) {\n return properties.map(function (prop) {\n return createAnimation(animatable, prop);\n });\n })), function (a) { return !is.und(a); });\n}\n\n// Create Instance\n\nfunction getInstanceTimings(animations, tweenSettings) {\n var animLength = animations.length;\n var getTlOffset = function (anim) { return anim.timelineOffset ? anim.timelineOffset : 0; };\n var timings = {};\n timings.duration = animLength ? Math.max.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.duration; })) : tweenSettings.duration;\n timings.delay = animLength ? Math.min.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.delay; })) : tweenSettings.delay;\n timings.endDelay = animLength ? timings.duration - Math.max.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.duration - anim.endDelay; })) : tweenSettings.endDelay;\n return timings;\n}\n\nvar instanceID = 0;\n\nfunction createNewInstance(params) {\n var instanceSettings = replaceObjectProps(defaultInstanceSettings, params);\n var tweenSettings = replaceObjectProps(defaultTweenSettings, params);\n var properties = getProperties(tweenSettings, params);\n var animatables = getAnimatables(params.targets);\n var animations = getAnimations(animatables, properties);\n var timings = getInstanceTimings(animations, tweenSettings);\n var id = instanceID;\n instanceID++;\n return mergeObjects(instanceSettings, {\n id: id,\n children: [],\n animatables: animatables,\n animations: animations,\n duration: timings.duration,\n delay: timings.delay,\n endDelay: timings.endDelay\n });\n}\n\n// Core\n\nvar activeInstances = [];\n\nvar engine = (function () {\n var raf;\n\n function play() {\n if (!raf && (!isDocumentHidden() || !anime.suspendWhenDocumentHidden) && activeInstances.length > 0) {\n raf = requestAnimationFrame(step);\n }\n }\n function step(t) {\n // memo on algorithm issue:\n // dangerous iteration over mutable `activeInstances`\n // (that collection may be updated from within callbacks of `tick`-ed animation instances)\n var activeInstancesLength = activeInstances.length;\n var i = 0;\n while (i < activeInstancesLength) {\n var activeInstance = activeInstances[i];\n if (!activeInstance.paused) {\n activeInstance.tick(t);\n i++;\n } else {\n activeInstances.splice(i, 1);\n activeInstancesLength--;\n }\n }\n raf = i > 0 ? requestAnimationFrame(step) : undefined;\n }\n\n function handleVisibilityChange() {\n if (!anime.suspendWhenDocumentHidden) { return; }\n\n if (isDocumentHidden()) {\n // suspend ticks\n raf = cancelAnimationFrame(raf);\n } else { // is back to active tab\n // first adjust animations to consider the time that ticks were suspended\n activeInstances.forEach(\n function (instance) { return instance ._onDocumentVisibility(); }\n );\n engine();\n }\n }\n if (typeof document !== 'undefined') {\n document.addEventListener('visibilitychange', handleVisibilityChange);\n }\n\n return play;\n})();\n\nfunction isDocumentHidden() {\n return !!document && document.hidden;\n}\n\n// Public Instance\n\nfunction anime(params) {\n if ( params === void 0 ) params = {};\n\n\n var startTime = 0, lastTime = 0, now = 0;\n var children, childrenLength = 0;\n var resolve = null;\n\n function makePromise(instance) {\n var promise = window.Promise && new Promise(function (_resolve) { return resolve = _resolve; });\n instance.finished = promise;\n return promise;\n }\n\n var instance = createNewInstance(params);\n var promise = makePromise(instance);\n\n function toggleInstanceDirection() {\n var direction = instance.direction;\n if (direction !== 'alternate') {\n instance.direction = direction !== 'normal' ? 'normal' : 'reverse';\n }\n instance.reversed = !instance.reversed;\n children.forEach(function (child) { return child.reversed = instance.reversed; });\n }\n\n function adjustTime(time) {\n return instance.reversed ? instance.duration - time : time;\n }\n\n function resetTime() {\n startTime = 0;\n lastTime = adjustTime(instance.currentTime) * (1 / anime.speed);\n }\n\n function seekChild(time, child) {\n if (child) { child.seek(time - child.timelineOffset); }\n }\n\n function syncInstanceChildren(time) {\n if (!instance.reversePlayback) {\n for (var i = 0; i < childrenLength; i++) { seekChild(time, children[i]); }\n } else {\n for (var i$1 = childrenLength; i$1--;) { seekChild(time, children[i$1]); }\n }\n }\n\n function setAnimationsProgress(insTime) {\n var i = 0;\n var animations = instance.animations;\n var animationsLength = animations.length;\n while (i < animationsLength) {\n var anim = animations[i];\n var animatable = anim.animatable;\n var tweens = anim.tweens;\n var tweenLength = tweens.length - 1;\n var tween = tweens[tweenLength];\n // Only check for keyframes if there is more than one tween\n if (tweenLength) { tween = filterArray(tweens, function (t) { return (insTime < t.end); })[0] || tween; }\n var elapsed = minMax(insTime - tween.start - tween.delay, 0, tween.duration) / tween.duration;\n var eased = isNaN(elapsed) ? 1 : tween.easing(elapsed);\n var strings = tween.to.strings;\n var round = tween.round;\n var numbers = [];\n var toNumbersLength = tween.to.numbers.length;\n var progress = (void 0);\n for (var n = 0; n < toNumbersLength; n++) {\n var value = (void 0);\n var toNumber = tween.to.numbers[n];\n var fromNumber = tween.from.numbers[n] || 0;\n if (!tween.isPath) {\n value = fromNumber + (eased * (toNumber - fromNumber));\n } else {\n value = getPathProgress(tween.value, eased * toNumber, tween.isPathTargetInsideSVG);\n }\n if (round) {\n if (!(tween.isColor && n > 2)) {\n value = Math.round(value * round) / round;\n }\n }\n numbers.push(value);\n }\n // Manual Array.reduce for better performances\n var stringsLength = strings.length;\n if (!stringsLength) {\n progress = numbers[0];\n } else {\n progress = strings[0];\n for (var s = 0; s < stringsLength; s++) {\n var a = strings[s];\n var b = strings[s + 1];\n var n$1 = numbers[s];\n if (!isNaN(n$1)) {\n if (!b) {\n progress += n$1 + ' ';\n } else {\n progress += n$1 + b;\n }\n }\n }\n }\n setProgressValue[anim.type](animatable.target, anim.property, progress, animatable.transforms);\n anim.currentValue = progress;\n i++;\n }\n }\n\n function setCallback(cb) {\n if (instance[cb] && !instance.passThrough) { instance[cb](instance); }\n }\n\n function countIteration() {\n if (instance.remaining && instance.remaining !== true) {\n instance.remaining--;\n }\n }\n\n function setInstanceProgress(engineTime) {\n var insDuration = instance.duration;\n var insDelay = instance.delay;\n var insEndDelay = insDuration - instance.endDelay;\n var insTime = adjustTime(engineTime);\n instance.progress = minMax((insTime / insDuration) * 100, 0, 100);\n instance.reversePlayback = insTime < instance.currentTime;\n if (children) { syncInstanceChildren(insTime); }\n if (!instance.began && instance.currentTime > 0) {\n instance.began = true;\n setCallback('begin');\n }\n if (!instance.loopBegan && instance.currentTime > 0) {\n instance.loopBegan = true;\n setCallback('loopBegin');\n }\n if (insTime <= insDelay && instance.currentTime !== 0) {\n setAnimationsProgress(0);\n }\n if ((insTime >= insEndDelay && instance.currentTime !== insDuration) || !insDuration) {\n setAnimationsProgress(insDuration);\n }\n if (insTime > insDelay && insTime < insEndDelay) {\n if (!instance.changeBegan) {\n instance.changeBegan = true;\n instance.changeCompleted = false;\n setCallback('changeBegin');\n }\n setCallback('change');\n setAnimationsProgress(insTime);\n } else {\n if (instance.changeBegan) {\n instance.changeCompleted = true;\n instance.changeBegan = false;\n setCallback('changeComplete');\n }\n }\n instance.currentTime = minMax(insTime, 0, insDuration);\n if (instance.began) { setCallback('update'); }\n if (engineTime >= insDuration) {\n lastTime = 0;\n countIteration();\n if (!instance.remaining) {\n instance.paused = true;\n if (!instance.completed) {\n instance.completed = true;\n setCallback('loopComplete');\n setCallback('complete');\n if (!instance.passThrough && 'Promise' in window) {\n resolve();\n promise = makePromise(instance);\n }\n }\n } else {\n startTime = now;\n setCallback('loopComplete');\n instance.loopBegan = false;\n if (instance.direction === 'alternate') {\n toggleInstanceDirection();\n }\n }\n }\n }\n\n instance.reset = function() {\n var direction = instance.direction;\n instance.passThrough = false;\n instance.currentTime = 0;\n instance.progress = 0;\n instance.paused = true;\n instance.began = false;\n instance.loopBegan = false;\n instance.changeBegan = false;\n instance.completed = false;\n instance.changeCompleted = false;\n instance.reversePlayback = false;\n instance.reversed = direction === 'reverse';\n instance.remaining = instance.loop;\n children = instance.children;\n childrenLength = children.length;\n for (var i = childrenLength; i--;) { instance.children[i].reset(); }\n if (instance.reversed && instance.loop !== true || (direction === 'alternate' && instance.loop === 1)) { instance.remaining++; }\n setAnimationsProgress(instance.reversed ? instance.duration : 0);\n };\n\n // internal method (for engine) to adjust animation timings before restoring engine ticks (rAF)\n instance._onDocumentVisibility = resetTime;\n\n // Set Value helper\n\n instance.set = function(targets, properties) {\n setTargetsValue(targets, properties);\n return instance;\n };\n\n instance.tick = function(t) {\n now = t;\n if (!startTime) { startTime = now; }\n setInstanceProgress((now + (lastTime - startTime)) * anime.speed);\n };\n\n instance.seek = function(time) {\n setInstanceProgress(adjustTime(time));\n };\n\n instance.pause = function() {\n instance.paused = true;\n resetTime();\n };\n\n instance.play = function() {\n if (!instance.paused) { return; }\n if (instance.completed) { instance.reset(); }\n instance.paused = false;\n activeInstances.push(instance);\n resetTime();\n engine();\n };\n\n instance.reverse = function() {\n toggleInstanceDirection();\n instance.completed = instance.reversed ? false : true;\n resetTime();\n };\n\n instance.restart = function() {\n instance.reset();\n instance.play();\n };\n\n instance.remove = function(targets) {\n var targetsArray = parseTargets(targets);\n removeTargetsFromInstance(targetsArray, instance);\n };\n\n instance.reset();\n\n if (instance.autoplay) { instance.play(); }\n\n return instance;\n\n}\n\n// Remove targets from animation\n\nfunction removeTargetsFromAnimations(targetsArray, animations) {\n for (var a = animations.length; a--;) {\n if (arrayContains(targetsArray, animations[a].animatable.target)) {\n animations.splice(a, 1);\n }\n }\n}\n\nfunction removeTargetsFromInstance(targetsArray, instance) {\n var animations = instance.animations;\n var children = instance.children;\n removeTargetsFromAnimations(targetsArray, animations);\n for (var c = children.length; c--;) {\n var child = children[c];\n var childAnimations = child.animations;\n removeTargetsFromAnimations(targetsArray, childAnimations);\n if (!childAnimations.length && !child.children.length) { children.splice(c, 1); }\n }\n if (!animations.length && !children.length) { instance.pause(); }\n}\n\nfunction removeTargetsFromActiveInstances(targets) {\n var targetsArray = parseTargets(targets);\n for (var i = activeInstances.length; i--;) {\n var instance = activeInstances[i];\n removeTargetsFromInstance(targetsArray, instance);\n }\n}\n\n// Stagger helpers\n\nfunction stagger(val, params) {\n if ( params === void 0 ) params = {};\n\n var direction = params.direction || 'normal';\n var easing = params.easing ? parseEasings(params.easing) : null;\n var grid = params.grid;\n var axis = params.axis;\n var fromIndex = params.from || 0;\n var fromFirst = fromIndex === 'first';\n var fromCenter = fromIndex === 'center';\n var fromLast = fromIndex === 'last';\n var isRange = is.arr(val);\n var val1 = isRange ? parseFloat(val[0]) : parseFloat(val);\n var val2 = isRange ? parseFloat(val[1]) : 0;\n var unit = getUnit(isRange ? val[1] : val) || 0;\n var start = params.start || 0 + (isRange ? val1 : 0);\n var values = [];\n var maxValue = 0;\n return function (el, i, t) {\n if (fromFirst) { fromIndex = 0; }\n if (fromCenter) { fromIndex = (t - 1) / 2; }\n if (fromLast) { fromIndex = t - 1; }\n if (!values.length) {\n for (var index = 0; index < t; index++) {\n if (!grid) {\n values.push(Math.abs(fromIndex - index));\n } else {\n var fromX = !fromCenter ? fromIndex%grid[0] : (grid[0]-1)/2;\n var fromY = !fromCenter ? Math.floor(fromIndex/grid[0]) : (grid[1]-1)/2;\n var toX = index%grid[0];\n var toY = Math.floor(index/grid[0]);\n var distanceX = fromX - toX;\n var distanceY = fromY - toY;\n var value = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\n if (axis === 'x') { value = -distanceX; }\n if (axis === 'y') { value = -distanceY; }\n values.push(value);\n }\n maxValue = Math.max.apply(Math, values);\n }\n if (easing) { values = values.map(function (val) { return easing(val / maxValue) * maxValue; }); }\n if (direction === 'reverse') { values = values.map(function (val) { return axis ? (val < 0) ? val * -1 : -val : Math.abs(maxValue - val); }); }\n }\n var spacing = isRange ? (val2 - val1) / maxValue : val1;\n return start + (spacing * (Math.round(values[i] * 100) / 100)) + unit;\n }\n}\n\n// Timeline\n\nfunction timeline(params) {\n if ( params === void 0 ) params = {};\n\n var tl = anime(params);\n tl.duration = 0;\n tl.add = function(instanceParams, timelineOffset) {\n var tlIndex = activeInstances.indexOf(tl);\n var children = tl.children;\n if (tlIndex > -1) { activeInstances.splice(tlIndex, 1); }\n function passThrough(ins) { ins.passThrough = true; }\n for (var i = 0; i < children.length; i++) { passThrough(children[i]); }\n var insParams = mergeObjects(instanceParams, replaceObjectProps(defaultTweenSettings, params));\n insParams.targets = insParams.targets || params.targets;\n var tlDuration = tl.duration;\n insParams.autoplay = false;\n insParams.direction = tl.direction;\n insParams.timelineOffset = is.und(timelineOffset) ? tlDuration : getRelativeValue(timelineOffset, tlDuration);\n passThrough(tl);\n tl.seek(insParams.timelineOffset);\n var ins = anime(insParams);\n passThrough(ins);\n children.push(ins);\n var timings = getInstanceTimings(children, params);\n tl.delay = timings.delay;\n tl.endDelay = timings.endDelay;\n tl.duration = timings.duration;\n tl.seek(0);\n tl.reset();\n if (tl.autoplay) { tl.play(); }\n return tl;\n };\n return tl;\n}\n\nanime.version = '3.2.1';\nanime.speed = 1;\n// TODO:#review: naming, documentation\nanime.suspendWhenDocumentHidden = true;\nanime.running = activeInstances;\nanime.remove = removeTargetsFromActiveInstances;\nanime.get = getOriginalTargetValue;\nanime.set = setTargetsValue;\nanime.convertPx = convertPxToUnit;\nanime.path = getPath;\nanime.setDashoffset = setDashoffset;\nanime.stagger = stagger;\nanime.timeline = timeline;\nanime.easing = parseEasings;\nanime.penner = penner;\nanime.random = function (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; };\n\nexport default anime;\n","import { Utils } from \"./utils\";\nimport { Dropdown, DropdownOptions } from \"./dropdown\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface AutocompleteData {\n /** \n * A primitive value that can be converted to string.\n * If \"text\" is not provided, it will also be used as \"option text\" as well\n */\n id: string | number;\n /**\n * This optional attribute is used as \"display value\" for the current entry.\n * When provided, it will also be taken into consideration by the standard search function.\n */\n text?: string;\n /**\n * This optional attribute is used to provide a valid image URL to the current option.\n */\n image?: string;\n /**\n * Optional attributes which describes the option.\n */\n description?: string;\n}\n\nexport interface AutocompleteOptions extends BaseOptions {\n /**\n * Data object defining autocomplete options with\n * optional icon strings.\n */\n data: AutocompleteData[];\n /**\n * Flag which can be set if multiple values can be selected. The Result will be an Array.\n * @default false\n */\n isMultiSelect: boolean;\n /**\n * Callback for when autocompleted.\n */\n onAutocomplete: (entries: AutocompleteData[]) => void;\n /**\n * Minimum number of characters before autocomplete starts.\n * @default 1\n */\n minLength: number;\n /**\n * The height of the Menu which can be set via css-property.\n * @default '300px'\n */\n maxDropDownHeight: string;\n /**\n * Function is called when the input text is altered and data can also be loaded asynchronously.\n * If the results are collected the items in the list can be updated via the function setMenuItems(collectedItems).\n * @param text Searched text.\n * @param autocomplete Current autocomplete instance.\n */\n onSearch: (text: string, autocomplete: Autocomplete) => void;\n /**\n * If true will render the key from each item directly as HTML.\n * User input MUST be properly sanitized first.\n * @default false\n */\n allowUnsafeHTML: boolean;\n /**\n * Pass options object to select dropdown initialization.\n * @default {}\n */\n dropdownOptions: Partial<DropdownOptions>;\n};\n\nlet _defaults: AutocompleteOptions = {\n data: [], // Autocomplete data set\n onAutocomplete: null, // Callback for when autocompleted\n dropdownOptions: {\n // Default dropdown options\n autoFocus: false,\n closeOnClick: false,\n coverTrigger: false\n },\n minLength: 1, // Min characters before autocomplete starts\n isMultiSelect: false,\n onSearch: (text: string, autocomplete: Autocomplete) => {\n const normSearch = text.toLocaleLowerCase();\n autocomplete.setMenuItems(\n autocomplete.options.data.filter((option) => \n option.id.toString().toLocaleLowerCase().includes(normSearch)\n || option.text?.toLocaleLowerCase().includes(normSearch)\n )\n );\n },\n maxDropDownHeight: '300px',\n allowUnsafeHTML: false\n};\n\n\nexport class Autocomplete extends Component<AutocompleteOptions> {\n declare el: HTMLInputElement;\n /** If the autocomplete is open. */\n isOpen: boolean;\n /** Number of matching autocomplete options. */\n count: number;\n /** Index of the current selected option. */\n activeIndex: number;\n private oldVal: string;\n private $active: HTMLElement|null;\n private _mousedown: boolean;\n container: HTMLElement;\n /** Instance of the dropdown plugin for this autocomplete. */\n dropdown: Dropdown;\n static _keydown: boolean;\n selectedValues: AutocompleteData[];\n menuItems: AutocompleteData[];\n\n\n constructor(el: HTMLInputElement, options: Partial<AutocompleteOptions>) {\n super(el, options, Autocomplete);\n (this.el as any).M_Autocomplete = this;\n\n this.options = {\n ...Autocomplete.defaults,\n ...options\n };\n \n this.isOpen = false;\n this.count = 0;\n this.activeIndex = -1;\n this.oldVal = \"\";\n this.selectedValues = [];\n this.menuItems = [];\n this.$active = null;\n this._mousedown = false;\n this._setupDropdown();\n this._setupEventHandlers();\n }\n\n static get defaults(): AutocompleteOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Autocomplete.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLInputElement, options?: Partial<AutocompleteOptions>): Autocomplete;\n /**\n * Initializes instances of Autocomplete.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<HTMLInputElement | MElement>, options?: Partial<AutocompleteOptions>): Autocomplete[];\n /**\n * Initializes instances of Autocomplete.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLInputElement | InitElements<HTMLInputElement | MElement>, options: Partial<AutocompleteOptions> = {}): Autocomplete | Autocomplete[] {\n return super.init(els, options, Autocomplete);\n }\n\n static getInstance(el: HTMLElement): Autocomplete {\n return (el as any).M_Autocomplete;\n }\n\n destroy() {\n this._removeEventHandlers();\n this._removeDropdown();\n (this.el as any).M_Autocomplete = undefined;\n }\n\n _setupEventHandlers() {\n this.el.addEventListener('blur', this._handleInputBlur);\n this.el.addEventListener('keyup', this._handleInputKeyupAndFocus);\n this.el.addEventListener('focus', this._handleInputKeyupAndFocus);\n this.el.addEventListener('keydown', this._handleInputKeydown);\n this.el.addEventListener('click', this._handleInputClick);\n this.container.addEventListener(\n 'mousedown',\n this._handleContainerMousedownAndTouchstart\n );\n this.container.addEventListener('mouseup', this._handleContainerMouseupAndTouchend);\n if (typeof window.ontouchstart !== 'undefined') {\n this.container.addEventListener(\n 'touchstart',\n this._handleContainerMousedownAndTouchstart\n );\n this.container.addEventListener('touchend', this._handleContainerMouseupAndTouchend);\n }\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('blur', this._handleInputBlur);\n this.el.removeEventListener('keyup', this._handleInputKeyupAndFocus);\n this.el.removeEventListener('focus', this._handleInputKeyupAndFocus);\n this.el.removeEventListener('keydown', this._handleInputKeydown);\n this.el.removeEventListener('click', this._handleInputClick);\n this.container.removeEventListener(\n 'mousedown',\n this._handleContainerMousedownAndTouchstart\n );\n this.container.removeEventListener('mouseup', this._handleContainerMouseupAndTouchend);\n\n if (typeof window.ontouchstart !== 'undefined') {\n this.container.removeEventListener(\n 'touchstart',\n this._handleContainerMousedownAndTouchstart\n );\n this.container.removeEventListener(\n 'touchend',\n this._handleContainerMouseupAndTouchend\n );\n }\n }\n\n _setupDropdown() {\n this.container = document.createElement('ul');\n this.container.style.maxHeight = this.options.maxDropDownHeight;\n this.container.id = `autocomplete-options-${Utils.guid()}`;\n this.container.classList.add('autocomplete-content', 'dropdown-content');\n this.el.setAttribute('data-target', this.container.id);\n\n // ! Issue in Component Dropdown: _placeDropdown moves dom-position\n this.el.parentElement.appendChild(this.container);\n\n // Initialize dropdown\n let dropdownOptions = {\n ...Autocomplete.defaults.dropdownOptions,\n ...this.options.dropdownOptions\n };\n let userOnItemClick = dropdownOptions.onItemClick;\n // Ensuring the select Option call when user passes custom onItemClick function to dropdown\n dropdownOptions.onItemClick = (li) => {\n if (!li) return;\n const entryID = li.getAttribute('data-id');\n this.selectOption(entryID);\n // Handle user declared onItemClick if needed\n if (userOnItemClick && typeof userOnItemClick === 'function')\n userOnItemClick.call(this.dropdown, this.el);\n };\n this.dropdown = Dropdown.init(this.el, dropdownOptions);\n\n // ! Workaround for Label: move label up again\n // TODO: Just use PopperJS in future!\n const label = this.el.parentElement.querySelector('label');\n if (label) this.el.after(label);\n\n // Sketchy removal of dropdown click handler\n this.el.removeEventListener('click', this.dropdown._handleClick);\n // Set Value if already set in HTML\n if (this.el.value) this.selectOption(this.el.value);\n // Add StatusInfo\n const div = document.createElement('div');\n div.classList.add('status-info');\n div.setAttribute('style', 'position: absolute;right:0;top:0;');\n this.el.parentElement.appendChild(div);\n this._updateSelectedInfo();\n }\n\n _removeDropdown() {\n this.container.parentNode.removeChild(this.container);\n }\n\n _handleInputBlur = () => {\n if (!this._mousedown) {\n this.close();\n this._resetAutocomplete();\n }\n }\n\n _handleInputKeyupAndFocus = (e: KeyboardEvent) => {\n if (e.type === 'keyup') Autocomplete._keydown = false;\n this.count = 0;\n const actualValue = this.el.value.toLocaleLowerCase();\n // Don't capture enter or arrow key usage.\n if (Utils.keys.ENTER.includes(e.key) || Utils.keys.ARROW_UP.includes(e.key) || Utils.keys.ARROW_DOWN.includes(e.key)) return;\n // Check if the input isn't empty\n // Check if focus triggered by tab\n if (this.oldVal !== actualValue && (Utils.tabPressed || e.type !== 'focus')) {\n this.open();\n }\n // Value has changed!\n if (this.oldVal !== actualValue) {\n this._setStatusLoading();\n this.options.onSearch(this.el.value, this);\n }\n // Reset Single-Select when Input cleared\n if (!this.options.isMultiSelect && this.el.value.length === 0) {\n this.selectedValues = [];\n this._triggerChanged();\n }\n this.oldVal = actualValue;\n }\n\n _handleInputKeydown = (e: KeyboardEvent) => {\n Autocomplete._keydown = true;\n // Arrow keys and enter key usage\n const numItems = this.container.querySelectorAll('li').length;\n // select element on Enter\n if (Utils.keys.ENTER.includes(e.key) && this.activeIndex >= 0) {\n const liElement = this.container.querySelectorAll('li')[this.activeIndex];\n if (liElement) {\n this.selectOption(liElement.getAttribute('data-id'));\n e.preventDefault();\n }\n return;\n }\n // Capture up and down key\n if (Utils.keys.ARROW_UP.includes(e.key) || Utils.keys.ARROW_DOWN.includes(e.key)) {\n e.preventDefault();\n if (Utils.keys.ARROW_UP.includes(e.key) && this.activeIndex > 0) this.activeIndex--;\n if (Utils.keys.ARROW_DOWN.includes(e.key) && this.activeIndex < numItems - 1) this.activeIndex++;\n this.$active?.classList.remove('active');\n if (this.activeIndex >= 0) {\n this.$active = this.container.querySelectorAll('li')[this.activeIndex];\n this.$active?.classList.add('active');\n // Focus selected\n this.container.children[this.activeIndex].scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest'\n });\n }\n }\n }\n\n _handleInputClick = () => {\n this.open();\n }\n\n _handleContainerMousedownAndTouchstart = () => {\n this._mousedown = true;\n }\n\n _handleContainerMouseupAndTouchend = () => {\n this._mousedown = false;\n }\n\n _resetCurrentElementPosition() {\n this.activeIndex = -1;\n this.$active?.classList.remove('active');\n }\n\n _resetAutocomplete() {\n this.container.replaceChildren();\n this._resetCurrentElementPosition();\n this.oldVal = null;\n this.isOpen = false;\n this._mousedown = false;\n }\n\n _highlightPartialText(input: string, label: string) {\n const start = label.toLocaleLowerCase().indexOf('' + input.toLocaleLowerCase() + '');\n const end = start + input.length - 1;\n //custom filters may return results where the string does not match any part\n if (start == -1 || end == -1) {\n return [label, '', ''];\n }\n return [label.slice(0, start), label.slice(start, end + 1), label.slice(end + 1)];\n }\n\n _createDropdownItem(entry: AutocompleteData) {\n const item = document.createElement('li');\n item.setAttribute('data-id', <string>entry.id);\n item.setAttribute(\n 'style',\n 'display:grid; grid-auto-flow: column; user-select: none; align-items: center;'\n );\n // Checkbox\n if (this.options.isMultiSelect) {\n item.innerHTML = `\n <div class=\"item-selection\" style=\"text-align:center;\">\n <input type=\"checkbox\"${\n this.selectedValues.some((sel) => sel.id === entry.id) ? ' checked=\"checked\"' : ''\n }><span style=\"padding-left:21px;\"></span>\n </div>`;\n }\n // Image\n if (entry.image) {\n const img = document.createElement('img');\n img.classList.add('circle');\n img.src = entry.image;\n item.appendChild(img);\n }\n\n // Text\n const inputText = this.el.value.toLocaleLowerCase();\n const parts = this._highlightPartialText(inputText, (entry.text || entry.id).toString());\n const div = document.createElement('div');\n div.setAttribute('style', 'line-height:1.2;font-weight:500;');\n if (this.options.allowUnsafeHTML) {\n div.innerHTML = parts[0] + '<span class=\"highlight\">' + parts[1] + '</span>' + parts[2];\n } else {\n div.appendChild(document.createTextNode(parts[0]));\n if (parts[1]) {\n const highlight = document.createElement('span');\n highlight.textContent = parts[1];\n highlight.classList.add('highlight');\n div.appendChild(highlight);\n div.appendChild(document.createTextNode(parts[2]));\n }\n }\n\n const itemText = document.createElement('div');\n itemText.classList.add('item-text');\n itemText.setAttribute('style', 'padding:5px;overflow:hidden;');\n item.appendChild(itemText);\n item.querySelector('.item-text').appendChild(div);\n // Description\n if (typeof entry.description === 'string' || (typeof entry.description === 'number' && !isNaN(entry.description))) {\n const description = document.createElement('small');\n description.setAttribute(\n 'style',\n 'line-height:1.3;color:grey;white-space:nowrap;text-overflow:ellipsis;display:block;width:90%;overflow:hidden;'\n );\n description.innerText = entry.description;\n item.querySelector('.item-text').appendChild(description);\n }\n // Set Grid\n const getGridConfig = () => {\n if (this.options.isMultiSelect) {\n if (entry.image) return '40px min-content auto'; // cb-img-txt\n return '40px auto'; // cb-txt\n }\n if (entry.image) return 'min-content auto'; // img-txt\n return 'auto'; // txt\n };\n item.style.gridTemplateColumns = getGridConfig();\n return item;\n }\n\n _renderDropdown() {\n this._resetAutocomplete();\n // Check if Data is empty\n if (this.menuItems.length === 0) {\n this.menuItems = this.selectedValues; // Show selected Items\n }\n for (let i = 0; i < this.menuItems.length; i++) {\n const item = this._createDropdownItem(this.menuItems[i]);\n this.container.append(item);\n }\n }\n\n _setStatusLoading() {\n this.el.parentElement.querySelector(\n '.status-info'\n ).innerHTML = `<div style=\"height:100%;width:50px;\"><svg version=\"1.1\" id=\"L4\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 100 100\" enable-background=\"new 0 0 0 0\" xml:space=\"preserve\">\n <circle fill=\"#888c\" stroke=\"none\" cx=\"6\" cy=\"50\" r=\"6\"><animate attributeName=\"opacity\" dur=\"1s\" values=\"0;1;0\" repeatCount=\"indefinite\" begin=\"0.1\"/></circle>\n <circle fill=\"#888c\" stroke=\"none\" cx=\"26\" cy=\"50\" r=\"6\"><animate attributeName=\"opacity\" dur=\"1s\" values=\"0;1;0\" repeatCount=\"indefinite\" begin=\"0.2\"/></circle>\n <circle fill=\"#888c\" stroke=\"none\" cx=\"46\" cy=\"50\" r=\"6\"><animate attributeName=\"opacity\" dur=\"1s\" values=\"0;1;0\" repeatCount=\"indefinite\" begin=\"0.3\"/></circle>\n </svg></div>`;\n }\n\n _updateSelectedInfo() {\n const statusElement = this.el.parentElement.querySelector('.status-info');\n if (statusElement) {\n if (this.options.isMultiSelect) statusElement.innerHTML = this.selectedValues.length.toString();\n else statusElement.innerHTML = '';\n }\n }\n\n _refreshInputText() {\n if (this.selectedValues.length === 1) {\n const entry = this.selectedValues[0];\n this.el.value = entry.text || <string>entry.id; // Write Text to Input\n }\n }\n\n _triggerChanged() {\n this.el.dispatchEvent(new Event('change'));\n // Trigger Autocomplete Event\n if (typeof this.options.onAutocomplete === 'function')\n this.options.onAutocomplete.call(this, this.selectedValues);\n }\n\n /**\n * Show autocomplete.\n */\n open = () => {\n const inputText = this.el.value.toLocaleLowerCase();\n this._resetAutocomplete();\n if (inputText.length >= this.options.minLength) {\n this.isOpen = true;\n this._renderDropdown();\n }\n // Open dropdown\n if (!this.dropdown.isOpen) {\n setTimeout(() => {\n this.dropdown.open();\n }, 100);\n }\n else this.dropdown.recalculateDimensions(); // Recalculate dropdown when its already open\n }\n\n /**\n * Hide autocomplete.\n */\n close = () => {\n this.dropdown.close();\n }\n\n /**\n * Updates the visible or selectable items shown in the menu.\n * @param menuItems Items to be available.\n */\n setMenuItems(menuItems: AutocompleteData[]) {\n this.menuItems = menuItems;\n this.open();\n this._updateSelectedInfo();\n }\n\n /**\n * Sets selected values.\n * @param entries\n */\n setValues(entries: AutocompleteData[]) {\n this.selectedValues = entries;\n this._updateSelectedInfo();\n if (!this.options.isMultiSelect) {\n this._refreshInputText();\n }\n this._triggerChanged();\n }\n\n /**\n * Select a specific autocomplete option via id-property.\n * @param id The id of a data-entry.\n */\n selectOption(id: number | string) {\n const entry = this.menuItems.find((item) => item.id == id);\n if (!entry) return;\n // Toggle Checkbox\n const li = this.container.querySelector('li[data-id=\"'+id+'\"]');\n if (!li) return;\n if (this.options.isMultiSelect) {\n const checkbox = <HTMLInputElement|null>li.querySelector('input[type=\"checkbox\"]');\n checkbox.checked = !checkbox.checked;\n if (checkbox.checked) this.selectedValues.push(entry);\n else\n this.selectedValues = this.selectedValues.filter(\n (selectedEntry) => selectedEntry.id !== entry.id\n );\n this.el.focus();\n } else {\n // Single-Select\n this.selectedValues = [entry];\n this._refreshInputText();\n this._resetAutocomplete();\n this.close();\n }\n this._updateSelectedInfo();\n this._triggerChanged();\n }\n}\n","import anim from \"animejs\";\n\nimport { Component, BaseOptions, InitElements, MElement, Openable } from \"./component\";\n\nexport interface FloatingActionButtonOptions extends BaseOptions {\n /**\n * Direction FAB menu opens.\n * @default \"top\"\n */\n direction: \"top\" | \"right\" | \"bottom\" | \"left\";\n /**\n * true: FAB menu appears on hover, false: FAB menu appears on click.\n * @default true\n */\n hoverEnabled: boolean;\n /**\n * Enable transit the FAB into a toolbar on click.\n * @default false\n */\n toolbarEnabled: boolean;\n};\n\nlet _defaults: FloatingActionButtonOptions = {\n direction: 'top',\n hoverEnabled: true,\n toolbarEnabled: false\n};\n\nexport class FloatingActionButton extends Component<FloatingActionButtonOptions> implements Openable {\n /**\n * Describes open/close state of FAB.\n */\n isOpen: boolean;\n\n private _anchor: HTMLAnchorElement;\n private _menu: HTMLElement|null;\n private _floatingBtns: HTMLElement[];\n private _floatingBtnsReverse: HTMLElement[];\n\n offsetY: number;\n offsetX: number;\n btnBottom: number;\n btnLeft: number;\n btnWidth: number;\n\n constructor(el: HTMLElement, options: Partial<FloatingActionButtonOptions>) {\n super(el, options, FloatingActionButton);\n (this.el as any).M_FloatingActionButton = this;\n\n this.options = {\n ...FloatingActionButton.defaults,\n ...options\n };\n\n this.isOpen = false;\n this._anchor = this.el.querySelector('a');\n this._menu = this.el.querySelector('ul');\n this._floatingBtns = Array.from(this.el.querySelectorAll('ul .btn-floating'));\n this._floatingBtnsReverse = this._floatingBtns.reverse();\n this.offsetY = 0;\n this.offsetX = 0;\n\n this.el.classList.add(`direction-${this.options.direction}`);\n if (this.options.direction === 'top')\n this.offsetY = 40;\n else if (this.options.direction === 'right')\n this.offsetX = -40;\n else if (this.options.direction === 'bottom')\n this.offsetY = -40;\n else\n this.offsetX = 40;\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n /**\n * Initializes instance of FloatingActionButton.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<FloatingActionButtonOptions>): FloatingActionButton\n /**\n * Initializes instances of FloatingActionButton.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<FloatingActionButtonOptions>): FloatingActionButton[];\n /**\n * Initializes instances of FloatingActionButton.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<FloatingActionButtonOptions> = {}): FloatingActionButton | FloatingActionButton[] {\n return super.init(els, options, FloatingActionButton);\n }\n\n static getInstance(el: HTMLElement): FloatingActionButton {\n return (el as any).M_FloatingActionButton;\n }\n\n destroy() {\n this._removeEventHandlers();\n (this.el as any).M_FloatingActionButton = undefined;\n }\n\n _setupEventHandlers() {\n if (this.options.hoverEnabled && !this.options.toolbarEnabled) {\n this.el.addEventListener('mouseenter', this.open);\n this.el.addEventListener('mouseleave', this.close);\n } else {\n this.el.addEventListener('click', this._handleFABClick);\n }\n }\n\n _removeEventHandlers() {\n if (this.options.hoverEnabled && !this.options.toolbarEnabled) {\n this.el.removeEventListener('mouseenter', this.open);\n this.el.removeEventListener('mouseleave', this.close);\n } else {\n this.el.removeEventListener('click', this._handleFABClick);\n }\n }\n\n _handleFABClick = () => {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n _handleDocumentClick = (e: MouseEvent) => {\n const elem = e.target;\n if (elem !== this._menu) this.close;\n }\n\n /**\n * Open FAB.\n */\n open = (): void => {\n if (this.isOpen) return;\n if (this.options.toolbarEnabled)\n this._animateInToolbar();\n else\n this._animateInFAB();\n this.isOpen = true;\n }\n\n /**\n * Close FAB.\n */\n close = (): void => {\n if (!this.isOpen) return;\n if (this.options.toolbarEnabled) {\n window.removeEventListener('scroll', this.close, true);\n document.body.removeEventListener('click', this._handleDocumentClick, true);\n }\n else {\n this._animateOutFAB();\n }\n this.isOpen = false;\n }\n\n _animateInFAB() {\n this.el.classList.add('active');\n let time = 0;\n this._floatingBtnsReverse.forEach((el) => {\n anim({\n targets: el,\n opacity: 1,\n scale: [0.4, 1],\n translateY: [this.offsetY, 0],\n translateX: [this.offsetX, 0],\n duration: 275,\n delay: time,\n easing: 'easeInOutQuad'\n });\n time += 40;\n });\n }\n\n _animateOutFAB() {\n this._floatingBtnsReverse.forEach((el) => {\n anim.remove(el);\n anim({\n targets: el,\n opacity: 0,\n scale: 0.4,\n translateY: this.offsetY,\n translateX: this.offsetX,\n duration: 175,\n easing: 'easeOutQuad',\n complete: () => {\n this.el.classList.remove('active');\n }\n });\n });\n }\n\n _animateInToolbar() {\n let scaleFactor;\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n let btnRect = this.el.getBoundingClientRect();\n\n const backdrop = document.createElement('div');\n backdrop.classList.add('fab-backdrop'); // $('<div class=\"fab-backdrop\"></div>');\n\n const fabColor = getComputedStyle(this._anchor).backgroundColor; // css('background-color');\n\n this._anchor.append(backdrop);\n\n this.offsetX = btnRect.left - windowWidth / 2 + btnRect.width / 2;\n this.offsetY = windowHeight - btnRect.bottom;\n scaleFactor = windowWidth / backdrop[0].clientWidth;\n this.btnBottom = btnRect.bottom;\n this.btnLeft = btnRect.left;\n this.btnWidth = btnRect.width;\n\n // Set initial state\n this.el.classList.add('active');\n this.el.style.textAlign = 'center';\n this.el.style.width = '100%';\n this.el.style.bottom = '0';\n this.el.style.left = '0';\n this.el.style.transform = 'translateX(' + this.offsetX + 'px)';\n this.el.style.transition = 'none';\n\n this._anchor.style.transform = `translateY(${this.offsetY}px`;\n this._anchor.style.transition = 'none';\n\n backdrop.style.backgroundColor = fabColor;\n\n setTimeout(() => {\n this.el.style.transform = '';\n this.el.style.transition = 'transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s';\n\n this._anchor.style.overflow = 'visible';\n this._anchor.style.transform = '';\n this._anchor.style.transition = 'transform .2s';\n\n setTimeout(() => {\n this.el.style.overflow = 'hidden';\n this.el.style.backgroundColor = fabColor;\n\n backdrop.style.transform = 'scale(' + scaleFactor + ')';\n backdrop.style.transition = 'transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)';\n\n this._menu.querySelectorAll('li > a').forEach((a: HTMLAnchorElement) => a.style.opacity = '1');\n\n // Scroll to close.\n window.addEventListener('scroll', this.close, true);\n document.body.addEventListener('click', this._handleDocumentClick, true);\n }, 100);\n }, 0);\n }\n}\n","import anim from \"animejs\";\n\nexport class Cards {\n\n static Init() {\n\n document.addEventListener(\"DOMContentLoaded\", () => {\n document.body.addEventListener('click', e => {\n const trigger = <HTMLElement>e.target;\n\n const card: HTMLElement = trigger.closest('.card');\n if (!card) return;\n\n const cardReveal = <HTMLElement|null>Array.from(card.children).find(elem => elem.classList.contains('card-reveal'));\n if (!cardReveal) return;\n const initialOverflow = getComputedStyle(card).overflow;\n\n // Close Card\n const closeArea = cardReveal.querySelector('.card-reveal .card-title');\n if (trigger === closeArea || closeArea.contains(trigger)) {\n anim({\n targets: cardReveal,\n translateY: 0,\n duration: 225,\n easing: 'easeInOutQuad',\n complete: (anim) => {\n cardReveal.style.display = 'none';\n card.style.overflow = initialOverflow;\n }\n });\n };\n\n // Reveal Card\n const activators = card.querySelectorAll('.activator');\n activators.forEach(activator => {\n if (trigger === activator || activator.contains(trigger)) {\n card.style.overflow = 'hidden';\n cardReveal.style.display = 'block';\n anim({\n targets: cardReveal,\n translateY: '-100%',\n duration: 300,\n easing: 'easeInOutQuad'\n });\n }\n });\n\n\n });\n });\n\n }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface CarouselOptions extends BaseOptions{\n /**\n * Transition duration in milliseconds.\n * @default 200\n */\n duration: number;\n /**\n * Perspective zoom. If 0, all items are the same size.\n * @default -100\n */\n dist: number;\n /**\n * Set the spacing of the center item.\n * @default 0\n */\n shift: number;\n /**\n * Set the padding between non center items.\n * @default 0\n */\n padding: number;\n /**\n * Set the number of visible items.\n * @default 5\n */\n numVisible: number;\n /**\n * Make the carousel a full width slider like the second example.\n * @default false\n */\n fullWidth: boolean;\n /**\n * Set to true to show indicators.\n * @default false\n */\n indicators: boolean;\n /**\n * Don't wrap around and cycle through items.\n * @default false\n */\n noWrap: boolean;\n /**\n * Callback for when a new slide is cycled to.\n * @default null\n */\n onCycleTo: (current: Element, dragged: boolean) => void;\n}\n\nlet _defaults: CarouselOptions = {\n duration: 200, // ms\n dist: -100, // zoom scale TODO: make this more intuitive as an option\n shift: 0, // spacing for center image\n padding: 0, // Padding between non center items\n numVisible: 5, // Number of visible items in carousel\n fullWidth: false, // Change to full width styles\n indicators: false, // Toggle indicators\n noWrap: false, // Don't wrap around and cycle through items.\n onCycleTo: null // Callback for when a new slide is cycled to.\n};\n\nexport class Carousel extends Component<CarouselOptions> {\n hasMultipleSlides: boolean;\n showIndicators: boolean;\n noWrap: boolean;\n /** If the carousel is being clicked or tapped. */\n pressed: boolean;\n /** If the carousel is currently being dragged. */\n dragged: boolean;\n offset: number;\n target: number;\n images: HTMLElement[];\n itemWidth: any;\n itemHeight: any;\n dim: number;\n _indicators: any;\n count: number;\n xform: string;\n verticalDragged: boolean;\n reference: any;\n referenceY: any;\n velocity: number;\n frame: number;\n timestamp: number;\n ticker: string | number | NodeJS.Timeout;\n amplitude: number;\n /** The index of the center carousel item. */\n center: number = 0;\n imageHeight: any;\n scrollingTimeout: any;\n oneTimeCallback: any;\n\n constructor(el: HTMLElement, options: Partial<CarouselOptions>) {\n super(el, options, Carousel);\n (this.el as any).M_Carousel = this;\n\n this.options = {\n ...Carousel.defaults,\n ...options\n };\n\n // Setup\n this.hasMultipleSlides = this.el.querySelectorAll('.carousel-item').length > 1;\n this.showIndicators = this.options.indicators && this.hasMultipleSlides;\n this.noWrap = this.options.noWrap || !this.hasMultipleSlides;\n this.pressed = false;\n this.dragged = false;\n this.offset = this.target = 0;\n this.images = [];\n this.itemWidth = this.el.querySelector('.carousel-item').clientWidth;\n this.itemHeight = this.el.querySelector('.carousel-item').clientHeight;\n this.dim = this.itemWidth * 2 + this.options.padding || 1; // Make sure dim is non zero for divisions.\n\n // Full Width carousel setup\n if (this.options.fullWidth) {\n this.options.dist = 0;\n this._setCarouselHeight();\n\n // Offset fixed items when indicators.\n if (this.showIndicators) {\n this.el.querySelector('.carousel-fixed-item')?.classList.add('with-indicators');\n }\n }\n\n // Iterate through slides\n this._indicators = document.createElement('ul');\n this._indicators.classList.add('indicators');\n\n this.el.querySelectorAll('.carousel-item').forEach((item: HTMLElement, i) => {\n this.images.push(item);\n if (this.showIndicators) {\n const indicator = document.createElement('li');\n indicator.classList.add('indicator-item');\n if (i === 0) {\n indicator.classList.add('active');\n }\n this._indicators.appendChild(indicator);\n }\n });\n\n if (this.showIndicators)\n this.el.appendChild(this._indicators);\n\n this.count = this.images.length;\n\n // Cap numVisible at count\n this.options.numVisible = Math.min(this.count, this.options.numVisible);\n\n // Setup cross browser string\n this.xform = 'transform';\n ['webkit', 'Moz', 'O', 'ms'].every((prefix) => {\n var e = prefix + 'Transform';\n if (typeof document.body.style[e] !== 'undefined') {\n this.xform = e;\n return false;\n }\n return true;\n });\n\n this._setupEventHandlers();\n this._scroll(this.offset);\n }\n\n static get defaults(): CarouselOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Carousel.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<CarouselOptions>): Carousel;\n /**\n * Initializes instances of Carousel.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<CarouselOptions>): Carousel[];\n /**\n * Initializes instances of Carousel.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<CarouselOptions> = {}): Carousel | Carousel[] {\n return super.init(els, options, Carousel);\n }\n\n static getInstance(el: HTMLElement): Carousel {\n return (el as any).M_Carousel;\n }\n\n destroy() {\n this._removeEventHandlers();\n (this.el as any).M_Carousel = undefined;\n }\n\n _setupEventHandlers() {\n if (typeof window.ontouchstart !== 'undefined') {\n this.el.addEventListener('touchstart', this._handleCarouselTap);\n this.el.addEventListener('touchmove', this._handleCarouselDrag);\n this.el.addEventListener('touchend', this._handleCarouselRelease);\n }\n this.el.addEventListener('mousedown', this._handleCarouselTap);\n this.el.addEventListener('mousemove', this._handleCarouselDrag);\n this.el.addEventListener('mouseup', this._handleCarouselRelease);\n this.el.addEventListener('mouseleave', this._handleCarouselRelease);\n this.el.addEventListener('click', this._handleCarouselClick);\n if (this.showIndicators && this._indicators) {\n this._indicators.querySelectorAll('.indicator-item').forEach((el) => {\n el.addEventListener('click', this._handleIndicatorClick);\n });\n }\n // Resize\n window.addEventListener('resize', this._handleThrottledResize);\n }\n\n _removeEventHandlers() {\n if (typeof window.ontouchstart !== 'undefined') {\n this.el.removeEventListener('touchstart', this._handleCarouselTap);\n this.el.removeEventListener('touchmove', this._handleCarouselDrag);\n this.el.removeEventListener('touchend', this._handleCarouselRelease);\n }\n this.el.removeEventListener('mousedown', this._handleCarouselTap);\n this.el.removeEventListener('mousemove', this._handleCarouselDrag);\n this.el.removeEventListener('mouseup', this._handleCarouselRelease);\n this.el.removeEventListener('mouseleave', this._handleCarouselRelease);\n this.el.removeEventListener('click', this._handleCarouselClick);\n if (this.showIndicators && this._indicators) {\n this._indicators.querySelectorAll('.indicator-item').forEach((el) => {\n el.removeEventListener('click', this._handleIndicatorClick);\n });\n }\n window.removeEventListener('resize', this._handleThrottledResize);\n }\n\n _handleThrottledResize: () => void = Utils.throttle(function(){ this._handleResize(); }, 200, null).bind(this);\n\n _handleCarouselTap = (e: MouseEvent | TouchEvent) => {\n // Fixes firefox draggable image bug\n if (e.type === 'mousedown' && (<HTMLElement>e.target).tagName === 'IMG') {\n e.preventDefault();\n }\n this.pressed = true;\n this.dragged = false;\n this.verticalDragged = false;\n this.reference = this._xpos(e);\n this.referenceY = this._ypos(e);\n\n this.velocity = this.amplitude = 0;\n this.frame = this.offset;\n this.timestamp = Date.now();\n clearInterval(this.ticker);\n this.ticker = setInterval(this._track, 100);\n }\n\n _handleCarouselDrag = (e: MouseEvent | TouchEvent) => {\n let x: number, y: number, delta: number, deltaY: number;\n if (this.pressed) {\n x = this._xpos(e);\n y = this._ypos(e);\n delta = this.reference - x;\n deltaY = Math.abs(this.referenceY - y);\n if (deltaY < 30 && !this.verticalDragged) {\n // If vertical scrolling don't allow dragging.\n if (delta > 2 || delta < -2) {\n this.dragged = true;\n this.reference = x;\n this._scroll(this.offset + delta);\n }\n } else if (this.dragged) {\n // If dragging don't allow vertical scroll.\n e.preventDefault();\n e.stopPropagation();\n return false;\n } else {\n // Vertical scrolling.\n this.verticalDragged = true;\n }\n }\n if (this.dragged) {\n // If dragging don't allow vertical scroll.\n e.preventDefault();\n e.stopPropagation();\n return false;\n }\n }\n\n _handleCarouselRelease = (e: MouseEvent | TouchEvent) => {\n if (this.pressed) {\n this.pressed = false;\n } else {\n return;\n }\n clearInterval(this.ticker);\n this.target = this.offset;\n if (this.velocity > 10 || this.velocity < -10) {\n this.amplitude = 0.9 * this.velocity;\n this.target = this.offset + this.amplitude;\n }\n this.target = Math.round(this.target / this.dim) * this.dim;\n // No wrap of items.\n if (this.noWrap) {\n if (this.target >= this.dim * (this.count - 1)) {\n this.target = this.dim * (this.count - 1);\n } else if (this.target < 0) {\n this.target = 0;\n }\n }\n this.amplitude = this.target - this.offset;\n this.timestamp = Date.now();\n requestAnimationFrame(this._autoScroll);\n if (this.dragged) {\n e.preventDefault();\n e.stopPropagation();\n }\n return false;\n }\n\n _handleCarouselClick = (e: MouseEvent | TouchEvent) => {\n // Disable clicks if carousel was dragged.\n if (this.dragged) {\n e.preventDefault();\n e.stopPropagation();\n return false;\n }\n else if (!this.options.fullWidth) {\n const clickedElem = (<HTMLElement>e.target).closest('.carousel-item');\n if (!clickedElem) return;\n const clickedIndex = [...clickedElem.parentNode.children].indexOf(clickedElem);\n const diff = this._wrap(this.center) - clickedIndex;\n // Disable clicks if carousel was shifted by click\n if (diff !== 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n // fixes https://github.com/materializecss/materialize/issues/180\n if (clickedIndex < 0) {\n // relative X position > center of carousel = clicked at the right part of the carousel\n if ((e as MouseEvent).clientX - (e.target as HTMLElement).getBoundingClientRect().left > this.el.clientWidth / 2) {\n this.next();\n } else {\n this.prev();\n }\n } else {\n this._cycleTo(clickedIndex);\n }\n }\n }\n\n _handleIndicatorClick = (e: Event) => {\n e.stopPropagation();\n const indicator = (<HTMLElement>e.target).closest('.indicator-item');\n if (indicator) {\n const index = [...indicator.parentNode.children].indexOf(indicator);\n this._cycleTo(index);\n }\n }\n\n _handleResize = () => {\n if (this.options.fullWidth) {\n this.itemWidth = this.el.querySelector('.carousel-item').clientWidth;\n this.imageHeight = this.el.querySelector('.carousel-item.active').clientHeight;\n this.dim = this.itemWidth * 2 + this.options.padding;\n this.offset = this.center * 2 * this.itemWidth;\n this.target = this.offset;\n this._setCarouselHeight(true);\n }\n else {\n this._scroll();\n }\n }\n\n _setCarouselHeight(imageOnly: boolean = false) {\n const firstSlide = this.el.querySelector('.carousel-item.active')\n ? this.el.querySelector('.carousel-item.active')\n : this.el.querySelector('.carousel-item');\n\n const firstImage = firstSlide.querySelector('img');\n if (firstImage) {\n if (firstImage.complete) {\n // If image won't trigger the load event\n const imageHeight = firstImage.clientHeight;\n if (imageHeight > 0) {\n this.el.style.height = imageHeight+'px';\n }\n else {\n // If image still has no height, use the natural dimensions to calculate\n const naturalWidth = firstImage.naturalWidth;\n const naturalHeight = firstImage.naturalHeight;\n const adjustedHeight = (this.el.clientWidth / naturalWidth) * naturalHeight;\n this.el.style.height = adjustedHeight+'px';\n }\n } else {\n // Get height when image is loaded normally\n firstImage.addEventListener('load', () => {\n this.el.style.height = firstImage.offsetHeight+'px';\n });\n }\n }\n else if (!imageOnly) {\n const slideHeight = firstSlide.clientHeight;\n this.el.style.height = slideHeight+'px';\n }\n }\n\n _xpos(e: MouseEvent | TouchEvent) {\n // touch event\n if (e.type.startsWith(\"touch\") && (e as TouchEvent).targetTouches.length >= 1) {\n return (e as TouchEvent).targetTouches[0].clientX;\n }\n // mouse event\n return (e as MouseEvent).clientX;\n }\n\n _ypos(e: MouseEvent | TouchEvent) {\n // touch event\n if (e.type.startsWith(\"touch\") && (e as TouchEvent).targetTouches.length >= 1) {\n return (e as TouchEvent).targetTouches[0].clientY;\n }\n // mouse event\n return (e as MouseEvent).clientY;\n }\n\n _wrap(x: number) {\n return x >= this.count\n ? x % this.count\n : x < 0\n ? this._wrap(this.count + (x % this.count))\n : x;\n }\n\n _track = () => {\n let now: number, elapsed: number, delta: number, v: number;\n now = Date.now();\n elapsed = now - this.timestamp;\n this.timestamp = now;\n delta = this.offset - this.frame;\n this.frame = this.offset;\n v = (1000 * delta) / (1 + elapsed);\n this.velocity = 0.8 * v + 0.2 * this.velocity;\n }\n\n _autoScroll = () => {\n let elapsed: number, delta: number;\n if (this.amplitude) {\n elapsed = Date.now() - this.timestamp;\n delta = this.amplitude * Math.exp(-elapsed / this.options.duration);\n if (delta > 2 || delta < -2) {\n this._scroll(this.target - delta);\n requestAnimationFrame(this._autoScroll);\n } else {\n this._scroll(this.target);\n }\n }\n }\n\n _scroll(x: number = 0) {\n // Track scrolling state\n if (!this.el.classList.contains('scrolling')) {\n this.el.classList.add('scrolling');\n }\n if (this.scrollingTimeout != null) {\n window.clearTimeout(this.scrollingTimeout);\n }\n this.scrollingTimeout = window.setTimeout(() => {\n this.el.classList.remove('scrolling');\n }, this.options.duration);\n\n // Start actual scroll\n let i: number,\n half: number,\n delta: number,\n dir: number,\n tween: number,\n el: HTMLElement,\n alignment: string,\n zTranslation: number,\n tweenedOpacity: number,\n centerTweenedOpacity: number;\n let lastCenter = this.center;\n let numVisibleOffset = 1 / this.options.numVisible;\n\n this.offset = typeof x === 'number' ? x : this.offset;\n this.center = Math.floor((this.offset + this.dim / 2) / this.dim);\n\n delta = this.offset - this.center * this.dim;\n dir = delta < 0 ? 1 : -1;\n tween = (-dir * delta * 2) / this.dim;\n half = this.count >> 1;\n\n if (this.options.fullWidth) {\n alignment = 'translateX(0)';\n centerTweenedOpacity = 1;\n }\n else {\n alignment = 'translateX(' + (this.el.clientWidth - this.itemWidth) / 2 + 'px) ';\n alignment += 'translateY(' + (this.el.clientHeight - this.itemHeight) / 2 + 'px)';\n centerTweenedOpacity = 1 - numVisibleOffset * tween;\n }\n\n // Set indicator active\n if (this.showIndicators) {\n const diff = this.center % this.count;\n const activeIndicator = this._indicators.querySelector('.indicator-item.active');\n const activeIndicatorIndex = [...activeIndicator.parentNode.children].indexOf(activeIndicator);\n if (activeIndicatorIndex !== diff) {\n activeIndicator.classList.remove('active');\n const pos = diff < 0 ? this.count + diff : diff;\n this._indicators.querySelectorAll('.indicator-item')[pos].classList.add('active');\n }\n }\n\n // center\n // Don't show wrapped items.\n if (!this.noWrap || (this.center >= 0 && this.center < this.count)) {\n el = this.images[this._wrap(this.center)];\n\n // Add active class to center item.\n if (!el.classList.contains('active')) {\n this.el.querySelector('.carousel-item').classList.remove('active');\n el.classList.add('active');\n }\n\n let transformString = `${alignment} translateX(${-delta / 2}px) translateX(${dir *\n this.options.shift *\n tween *\n i}px) translateZ(${this.options.dist * tween}px)`;\n this._updateItemStyle(el, centerTweenedOpacity, 0, transformString);\n }\n\n for (i = 1; i <= half; ++i) {\n // right side\n if (this.options.fullWidth) {\n zTranslation = this.options.dist;\n tweenedOpacity = i === half && delta < 0 ? 1 - tween : 1;\n } else {\n zTranslation = this.options.dist * (i * 2 + tween * dir);\n tweenedOpacity = 1 - numVisibleOffset * (i * 2 + tween * dir);\n }\n // Don't show wrapped items.\n if (!this.noWrap || this.center + i < this.count) {\n el = this.images[this._wrap(this.center + i)];\n let transformString = `${alignment} translateX(${this.options.shift +\n (this.dim * i - delta) / 2}px) translateZ(${zTranslation}px)`;\n this._updateItemStyle(el, tweenedOpacity, -i, transformString);\n }\n // left side\n if (this.options.fullWidth) {\n zTranslation = this.options.dist;\n tweenedOpacity = i === half && delta > 0 ? 1 - tween : 1;\n } else {\n zTranslation = this.options.dist * (i * 2 - tween * dir);\n tweenedOpacity = 1 - numVisibleOffset * (i * 2 - tween * dir);\n }\n // Don't show wrapped items.\n if (!this.noWrap || this.center - i >= 0) {\n el = this.images[this._wrap(this.center - i)];\n let transformString = `${alignment} translateX(${-this.options.shift +\n (-this.dim * i - delta) / 2}px) translateZ(${zTranslation}px)`;\n this._updateItemStyle(el, tweenedOpacity, -i, transformString);\n }\n }\n // center\n // Don't show wrapped items.\n if (!this.noWrap || (this.center >= 0 && this.center < this.count)) {\n el = this.images[this._wrap(this.center)];\n let transformString = `${alignment} translateX(${-delta / 2}px) translateX(${dir *\n this.options.shift *\n tween}px) translateZ(${this.options.dist * tween}px)`;\n this._updateItemStyle(el, centerTweenedOpacity, 0, transformString);\n }\n // onCycleTo callback\n const _currItem = this.el.querySelectorAll('.carousel-item')[this._wrap(this.center)];\n\n if (lastCenter !== this.center && typeof this.options.onCycleTo === 'function') {\n this.options.onCycleTo.call(this, _currItem, this.dragged);\n }\n // One time callback\n if (typeof this.oneTimeCallback === 'function') {\n this.oneTimeCallback.call(this, _currItem, this.dragged);\n this.oneTimeCallback = null;\n }\n }\n\n _updateItemStyle(el: HTMLElement, opacity: number, zIndex: number, transform: string) {\n el.style[this.xform] = transform;\n el.style.zIndex = zIndex.toString();\n el.style.opacity = opacity.toString();\n el.style.visibility = 'visible';\n }\n\n _cycleTo(n: number, callback: CarouselOptions[\"onCycleTo\"] = null) {\n let diff = (this.center % this.count) - n;\n // Account for wraparound.\n if (!this.noWrap) {\n if (diff < 0) {\n if (Math.abs(diff + this.count) < Math.abs(diff)) {\n diff += this.count;\n }\n } else if (diff > 0) {\n if (Math.abs(diff - this.count) < diff) {\n diff -= this.count;\n }\n }\n }\n this.target = this.dim * Math.round(this.offset / this.dim);\n // Next\n if (diff < 0) {\n this.target += this.dim * Math.abs(diff);\n } // Prev\n else if (diff > 0) {\n this.target -= this.dim * diff;\n }\n // Set one time callback\n if (typeof callback === 'function') {\n this.oneTimeCallback = callback;\n }\n // Scroll\n if (this.offset !== this.target) {\n this.amplitude = this.target - this.offset;\n this.timestamp = Date.now();\n requestAnimationFrame(this._autoScroll);\n }\n }\n\n /**\n * Move carousel to next slide or go forward a given amount of slides.\n * @param n How many times the carousel slides.\n */\n next(n: number = 1) {\n if (n === undefined || isNaN(n)) {\n n = 1;\n }\n let index = this.center + n;\n if (index >= this.count || index < 0) {\n if (this.noWrap) return;\n index = this._wrap(index);\n }\n this._cycleTo(index);\n }\n\n /**\n * Move carousel to previous slide or go back a given amount of slides.\n * @param n How many times the carousel slides.\n */\n prev(n: number = 1) {\n if (n === undefined || isNaN(n)) {\n n = 1;\n }\n let index = this.center - n;\n if (index >= this.count || index < 0) {\n if (this.noWrap) return;\n index = this._wrap(index);\n }\n this._cycleTo(index);\n }\n\n /**\n * Move carousel to nth slide.\n * @param n Index of slide.\n * @param callback \"onCycleTo\" optional callback.\n */\n set(n: number, callback?: CarouselOptions[\"onCycleTo\"]) {\n if (n === undefined || isNaN(n)) {\n n = 0;\n }\n if (n > this.count || n < 0) {\n if (this.noWrap) return;\n n = this._wrap(n);\n }\n this._cycleTo(n, callback);\n }\n}\n","import { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface CharacterCounterOptions extends BaseOptions {};\n\nconst _defaults = Object.freeze({});\n\ntype InputElement = HTMLInputElement | HTMLTextAreaElement;\n\nexport class CharacterCounter extends Component<{}> {\n \n declare el: InputElement;\n /** Stores the reference to the counter HTML element. */\n counterEl: HTMLSpanElement;\n /** Specifies whether the input is valid or not. */\n isInvalid: boolean;\n /** Specifies whether the input text has valid length or not. */\n isValidLength: boolean;\n\n constructor(el: HTMLInputElement | HTMLTextAreaElement, options: Partial<CharacterCounterOptions>) {\n super(el, {}, CharacterCounter);\n (this.el as any).M_CharacterCounter = this;\n\n this.options = {\n ...CharacterCounter.defaults,\n ...options\n };\n\n this.isInvalid = false;\n this.isValidLength = false;\n \n this._setupCounter();\n this._setupEventHandlers();\n }\n\n static get defaults(): CharacterCounterOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of CharacterCounter.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: InputElement, options?: Partial<CharacterCounterOptions>): CharacterCounter;\n /**\n * Initializes instances of CharacterCounter.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<InputElement | MElement>, options?: Partial<CharacterCounterOptions>): CharacterCounter[];\n /**\n * Initializes instances of CharacterCounter.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InputElement | InitElements<InputElement | MElement>, options: Partial<CharacterCounterOptions> = {}): CharacterCounter | CharacterCounter[] {\n return super.init(els, options, CharacterCounter);\n }\n\n static getInstance(el: InputElement): CharacterCounter {\n return (el as any).M_CharacterCounter;\n }\n\n destroy() {\n this._removeEventHandlers();\n (this.el as any).CharacterCounter = undefined;\n this._removeCounter();\n }\n\n _setupEventHandlers() {\n this.el.addEventListener('focus', this.updateCounter, true);\n this.el.addEventListener('input', this.updateCounter, true);\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('focus', this.updateCounter, true);\n this.el.removeEventListener('input', this.updateCounter, true);\n }\n\n _setupCounter() {\n this.counterEl = document.createElement('span');\n this.counterEl.classList.add('character-counter');\n this.counterEl.style.float = 'right';\n this.counterEl.style.fontSize = '12px';\n this.counterEl.style.height = '1';\n this.el.parentElement.appendChild(this.counterEl);\n }\n\n _removeCounter() {\n this.counterEl.remove();\n }\n\n updateCounter = () => {\n let maxLength = parseInt(this.el.getAttribute('maxlength')),\n actualLength = (this.el as HTMLInputElement).value.length;\n\n this.isValidLength = actualLength <= maxLength;\n let counterString = actualLength.toString();\n if (maxLength) {\n counterString += '/' + maxLength;\n this._validateInput();\n }\n this.counterEl.innerHTML = counterString;\n }\n\n _validateInput() {\n if (this.isValidLength && this.isInvalid) {\n this.isInvalid = false;\n this.el.classList.remove('invalid');\n }\n else if (!this.isValidLength && !this.isInvalid) {\n this.isInvalid = true;\n this.el.classList.remove('valid');\n this.el.classList.add('invalid');\n }\n }\n}\n","import { Utils } from \"./utils\";\nimport { Autocomplete, AutocompleteOptions } from \"./autocomplete\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface ChipData {\n /**\n * Unique identifier.\n */\n id: number|string;\n /**\n * Chip text. If not specified, \"id\" will be used.\n */\n text?: string;\n /**\n * Chip image (URL).\n */\n image?: string;\n}\n\nexport interface ChipsOptions extends BaseOptions{\n /**\n * Set the chip data.\n * @default []\n */\n data: ChipData[];\n /**\n * Set first placeholder when there are no tags.\n * @default \"\"\n */\n placeholder: string;\n /**\n * Set second placeholder when adding additional tags.\n * @default \"\"\n */\n secondaryPlaceholder: string;\n /**\n * Set autocomplete options.\n * @default {}\n */\n autocompleteOptions: Partial<AutocompleteOptions>;\n /**\n * Toggles abililty to add custom value not in autocomplete list.\n * @default false\n */\n autocompleteOnly: boolean;\n /**\n * Set chips limit.\n * @default Infinity\n */\n limit: number;\n /**\n * Specifies class to be used in \"close\" button (useful when working with Material Symbols icon set).\n * @default 'material-icons'\n */\n closeIconClass: string;\n /**\n * Callback for chip add.\n * @default null\n */\n onChipAdd: (element: HTMLElement, chip: HTMLElement) => void;\n /**\n * Callback for chip select.\n * @default null\n */\n onChipSelect: (element: HTMLElement, chip: HTMLElement) => void;\n /**\n * Callback for chip delete.\n * @default null\n */\n onChipDelete: (element: HTMLElement, chip: HTMLElement) => void;\n}\n\nlet _defaults: ChipsOptions = {\n data: [],\n placeholder: '',\n secondaryPlaceholder: '',\n closeIconClass: 'material-icons',\n autocompleteOptions: {},\n autocompleteOnly: false,\n limit: Infinity,\n onChipAdd: null,\n onChipSelect: null,\n onChipDelete: null\n};\n\nfunction gGetIndex(el: HTMLElement): number {\n return [...el.parentNode.children].indexOf(el);\n}\n\nexport class Chips extends Component<ChipsOptions> {\n /** Array of the current chips data. */\n chipsData: ChipData[];\n /** If the chips has autocomplete enabled. */\n hasAutocomplete: boolean;\n /** Autocomplete instance, if any. */\n autocomplete: Autocomplete;\n _input: HTMLInputElement;\n _label: any;\n _chips: HTMLElement[];\n static _keydown: boolean;\n private _selectedChip: any;\n\n constructor(el: HTMLElement, options: Partial<ChipsOptions>) {\n super(el, options, Chips);\n (this.el as any).M_Chips = this;\n\n this.options = {\n ...Chips.defaults,\n ...options\n };\n\n this.el.classList.add('chips', 'input-field');\n this.chipsData = [];\n this._chips = [];\n this._setupInput();\n this.hasAutocomplete = Object.keys(this.options.autocompleteOptions).length > 0;\n\n // Set input id\n if (!this._input.getAttribute('id'))\n this._input.setAttribute('id', Utils.guid());\n\n // Render initial chips\n if (this.options.data.length) {\n this.chipsData = this.options.data;\n this._renderChips();\n }\n // Setup autocomplete if needed\n if (this.hasAutocomplete) this._setupAutocomplete();\n this._setPlaceholder();\n this._setupLabel();\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n /**\n * Initializes instance of Chips.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: InitElements<MElement>, options?: Partial<ChipsOptions>): Chips;\n /**\n * Initializes instances of Chips.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<ChipsOptions>): Chips[];\n /**\n * Initializes instances of Chips.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<ChipsOptions> = {}): Chips | Chips[] {\n return super.init(els, options, Chips);\n }\n\n static getInstance(el: HTMLElement): Chips {\n return (el as any).M_Chips;\n }\n\n getData() {\n return this.chipsData;\n }\n\n destroy() {\n this._removeEventHandlers();\n this._chips.forEach(c => c.remove());\n this._chips = [];\n (this.el as any).M_Chips = undefined;\n }\n\n _setupEventHandlers() {\n this.el.addEventListener('click', this._handleChipClick);\n document.addEventListener('keydown', Chips._handleChipsKeydown);\n document.addEventListener('keyup', Chips._handleChipsKeyup);\n this.el.addEventListener('blur', Chips._handleChipsBlur, true);\n this._input.addEventListener('focus', this._handleInputFocus);\n this._input.addEventListener('blur', this._handleInputBlur);\n this._input.addEventListener('keydown', this._handleInputKeydown);\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('click', this._handleChipClick);\n document.removeEventListener('keydown', Chips._handleChipsKeydown);\n document.removeEventListener('keyup', Chips._handleChipsKeyup);\n this.el.removeEventListener('blur', Chips._handleChipsBlur, true);\n this._input.removeEventListener('focus', this._handleInputFocus);\n this._input.removeEventListener('blur', this._handleInputBlur);\n this._input.removeEventListener('keydown', this._handleInputKeydown);\n }\n\n _handleChipClick = (e: MouseEvent) => {\n const _chip = (<HTMLElement>e.target).closest('.chip');\n const clickedClose = (<HTMLElement>e.target).classList.contains('close');\n if (_chip) {\n const index = [..._chip.parentNode.children].indexOf(_chip);\n if (clickedClose) {\n this.deleteChip(index);\n this._input.focus();\n }\n else {\n this.selectChip(index);\n }\n // Default handle click to focus on input\n }\n else {\n this._input.focus();\n }\n }\n\n static _handleChipsKeydown(e: KeyboardEvent) {\n Chips._keydown = true;\n const chips = (<HTMLElement>e.target).closest('.chips');\n const chipsKeydown = e.target && chips;\n\n // Don't handle keydown inputs on input and textarea\n const tag = (<HTMLElement>e.target).tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || !chipsKeydown) return;\n\n const currChips: Chips = (chips as any).M_Chips;\n\n if (Utils.keys.BACKSPACE.includes(e.key) || Utils.keys.DELETE.includes(e.key)) {\n e.preventDefault();\n let selectIndex = currChips.chipsData.length;\n if (currChips._selectedChip) {\n const index = gGetIndex(currChips._selectedChip);\n currChips.deleteChip(index);\n currChips._selectedChip = null;\n // Make sure selectIndex doesn't go negative\n selectIndex = Math.max(index - 1, 0);\n }\n if (currChips.chipsData.length)\n currChips.selectChip(selectIndex);\n else\n currChips._input.focus();\n }\n else if (Utils.keys.ARROW_LEFT.includes(e.key)) {\n if (currChips._selectedChip) {\n const selectIndex = gGetIndex(currChips._selectedChip) - 1;\n if (selectIndex < 0) return;\n currChips.selectChip(selectIndex);\n }\n }\n else if (Utils.keys.ARROW_RIGHT.includes(e.key)) {\n if (currChips._selectedChip) {\n const selectIndex = gGetIndex(currChips._selectedChip) + 1;\n if (selectIndex >= currChips.chipsData.length)\n currChips._input.focus();\n else\n currChips.selectChip(selectIndex);\n }\n }\n }\n\n static _handleChipsKeyup(e: Event) {\n Chips._keydown = false;\n }\n\n static _handleChipsBlur(e: Event) {\n if (!Chips._keydown && document.hidden) {\n const chips = (<HTMLElement>e.target).closest('.chips');\n const currChips: Chips = (chips as any).M_Chips;\n currChips._selectedChip = null;\n }\n }\n\n _handleInputFocus = () => {\n this.el.classList.add('focus');\n }\n\n _handleInputBlur = () => {\n this.el.classList.remove('focus');\n }\n\n _handleInputKeydown = (e: KeyboardEvent) => {\n Chips._keydown = true;\n if (Utils.keys.ENTER.includes(e.key)) {\n // Override enter if autocompleting.\n if (this.hasAutocomplete && this.autocomplete && this.autocomplete.isOpen) {\n return;\n }\n e.preventDefault();\n if (!this.hasAutocomplete || (this.hasAutocomplete && !this.options.autocompleteOnly)) {\n this.addChip({id: this._input.value});\n }\n this._input.value = '';\n }\n else if ( \n (Utils.keys.BACKSPACE.includes(e.key) || Utils.keys.ARROW_LEFT.includes(e.key)) &&\n this._input.value === '' &&\n this.chipsData.length\n ) {\n e.preventDefault();\n this.selectChip(this.chipsData.length - 1);\n }\n }\n\n _renderChip(chip: ChipData): HTMLDivElement {\n if (!chip.id) return;\n const renderedChip = document.createElement('div');\n renderedChip.classList.add('chip');\n renderedChip.innerText = chip.text || <string>chip.id;\n renderedChip.setAttribute('tabindex', \"0\");\n const closeIcon = document.createElement('i');\n closeIcon.classList.add(this.options.closeIconClass, 'close');\n closeIcon.innerText = 'close';\n // attach image if needed\n if (chip.image) {\n const img = document.createElement('img');\n img.setAttribute('src', chip.image);\n renderedChip.insertBefore(img, renderedChip.firstChild);\n }\n renderedChip.appendChild(closeIcon);\n return renderedChip;\n }\n\n _renderChips() {\n this._chips = []; //.remove();\n for (let i = 0; i < this.chipsData.length; i++) {\n const chipElem = this._renderChip(this.chipsData[i]);\n this.el.appendChild(chipElem);\n this._chips.push(chipElem);\n }\n // move input to end\n this.el.append(this._input);\n }\n\n _setupAutocomplete() {\n this.options.autocompleteOptions.onAutocomplete = (items) => {\n if (items.length > 0) this.addChip({\n id: items[0].id,\n text: items[0].text,\n image: items[0].image\n });\n this._input.value = '';\n this._input.focus();\n };\n this.autocomplete = Autocomplete.init(this._input, this.options.autocompleteOptions);\n }\n\n _setupInput() {\n this._input = this.el.querySelector('input');\n if (!this._input) {\n this._input = document.createElement('input');\n this.el.append(this._input);\n }\n this._input.classList.add('input');\n }\n\n _setupLabel() {\n this._label = this.el.querySelector('label');\n if (this._label) this._label.setAttribute('for', this._input.getAttribute('id'));\n }\n\n _setPlaceholder() {\n if (this.chipsData !== undefined && !this.chipsData.length && this.options.placeholder) {\n this._input.placeholder = this.options.placeholder;\n }\n else if (\n (this.chipsData === undefined || !!this.chipsData.length) &&\n this.options.secondaryPlaceholder\n ) {\n this._input.placeholder = this.options.secondaryPlaceholder;\n }\n }\n\n _isValidAndNotExist(chip: ChipData) {\n const isValid = !!chip.id;\n const doesNotExist = !this.chipsData.some(item => item.id == chip.id);\n return isValid && doesNotExist;\n }\n\n /**\n * Add chip to input.\n * @param chip Chip data object\n */\n addChip(chip: ChipData) {\n if (!this._isValidAndNotExist(chip) || this.chipsData.length >= this.options.limit) return;\n const renderedChip = this._renderChip(chip);\n this._chips.push(renderedChip);\n this.chipsData.push(chip);\n //$(this._input).before(renderedChip);\n this._input.before(renderedChip);\n this._setPlaceholder();\n // fire chipAdd callback\n if (typeof this.options.onChipAdd === 'function') {\n this.options.onChipAdd(this.el, renderedChip);\n }\n }\n\n /**\n * Delete nth chip.\n * @param chipIndex Index of chip\n */\n deleteChip(chipIndex: number) {\n const chip = this._chips[chipIndex];\n this._chips[chipIndex].remove();\n this._chips.splice(chipIndex, 1);\n this.chipsData.splice(chipIndex, 1);\n this._setPlaceholder();\n // fire chipDelete callback\n if (typeof this.options.onChipDelete === 'function') {\n this.options.onChipDelete(this.el, chip);\n }\n }\n\n /**\n * Select nth chip.\n * @param chipIndex Index of chip\n */\n selectChip(chipIndex: number) {\n const chip = this._chips[chipIndex];\n this._selectedChip = chip;\n chip.focus();\n // fire chipSelect callback\n if (typeof this.options.onChipSelect === 'function') {\n this.options.onChipSelect(this.el, chip);\n }\n }\n\n static Init(){\n document.addEventListener(\"DOMContentLoaded\", () => {\n // Handle removal of static chips.\n document.body.addEventListener('click', e => {\n if ((<HTMLElement>e.target).closest('.chip .close')) {\n const chips = (<HTMLElement>e.target).closest('.chips');\n if (chips && (chips as any).M_Chips == undefined) return;\n (<HTMLElement>e.target).closest('.chip').remove();\n }\n });\n });\n }\n\n static {\n Chips._keydown = false;\n }\n}\n","import anim from \"animejs\";\n\nimport { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface CollapsibleOptions extends BaseOptions {\n /**\n * If accordion versus collapsible.\n * @default true\n */\n accordion: boolean;\n /**\n * Transition in duration in milliseconds.\n * @default 300\n */\n inDuration: number;\n /**\n * Transition out duration in milliseconds.\n * @default 300\n */\n outDuration: number;\n /**\n * Callback function called before collapsible is opened.\n * @default null\n */\n onOpenStart: (el: Element) => void;\n /**\n * Callback function called after collapsible is opened.\n * @default null\n */\n onOpenEnd: (el: Element) => void;\n /**\n * Callback function called before collapsible is closed.\n * @default null\n */\n onCloseStart: (el: Element) => void;\n /**\n * Callback function called after collapsible is closed.\n * @default null\n */\n onCloseEnd: (el: Element) => void;\n}\n\nconst _defaults: CollapsibleOptions = {\n accordion: true,\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null, \n onCloseEnd: null,\n inDuration: 300,\n outDuration: 300\n};\n\nexport class Collapsible extends Component<CollapsibleOptions> {\n private _headers: HTMLElement[];\n\n constructor(el: HTMLElement, options: Partial<CollapsibleOptions>) {\n super(el, options, Collapsible);\n (this.el as any).M_Collapsible = this;\n\n this.options = {\n ...Collapsible.defaults,\n ...options\n };\n\n // Setup tab indices\n this._headers = Array.from(this.el.querySelectorAll('li > .collapsible-header'));\n this._headers.forEach(el => el.tabIndex = 0);\n this._setupEventHandlers();\n // Open first active\n const activeBodies: HTMLElement[] = Array.from(this.el.querySelectorAll('li.active > .collapsible-body'));\n if (this.options.accordion)\n if (activeBodies.length > 0)\n activeBodies[0].style.display = 'block'; // Accordion\n else\n activeBodies.forEach(el => el.style.display = 'block'); // Expandables\n }\n\n static get defaults(): CollapsibleOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Collapsible.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<CollapsibleOptions>): Collapsible;\n /**\n * Initializes instances of Collapsible.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<CollapsibleOptions>): Collapsible[];\n /**\n * Initializes instances of Collapsible.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<CollapsibleOptions> = {}): Collapsible | Collapsible[] {\n return super.init(els, options, Collapsible);\n }\n\n static getInstance(el: HTMLElement): Collapsible {\n return (el as any).M_Collapsible;\n }\n\n destroy() {\n this._removeEventHandlers();\n (this.el as any).M_Collapsible = undefined;\n }\n\n _setupEventHandlers() {\n this.el.addEventListener('click', this._handleCollapsibleClick);\n this._headers.forEach(header => header.addEventListener('keydown', this._handleCollapsibleKeydown));\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('click', this._handleCollapsibleClick);\n this._headers.forEach(header => header.removeEventListener('keydown', this._handleCollapsibleKeydown));\n }\n\n _handleCollapsibleClick = (e: MouseEvent | KeyboardEvent) => {\n const header = (e.target as HTMLElement).closest('.collapsible-header');\n if (e.target && header) {\n const collapsible = header.closest('.collapsible');\n if (collapsible !== this.el) return;\n\n const li = header.closest('li');\n const isActive = li.classList.contains('active');\n const index = [...li.parentNode.children].indexOf(li);\n\n if (isActive)\n this.close(index);\n else\n this.open(index);\n }\n }\n\n _handleCollapsibleKeydown = (e: KeyboardEvent) => {\n if (Utils.keys.ENTER.includes(e.key)) {\n this._handleCollapsibleClick(e);\n }\n }\n\n _animateIn(index: number) {\n const li = this.el.children[index];\n if (!li) return;\n const body: HTMLElement = li.querySelector('.collapsible-body');\n anim.remove(body);\n body.style.display = 'block';\n body.style.overflow = 'hidden';\n body.style.height = '0';\n body.style.paddingTop = '';\n body.style.paddingBottom = '';\n const pTop = getComputedStyle(body).paddingTop; // . css('padding-top');\n const pBottom = getComputedStyle(body).paddingBottom; //body.css('padding-bottom');\n const finalHeight = body.scrollHeight;\n body.style.paddingTop = '0';\n body.style.paddingBottom = '0';\n anim({\n targets: body,\n height: finalHeight,\n paddingTop: pTop,\n paddingBottom: pBottom,\n duration: this.options.inDuration,\n easing: 'easeInOutCubic',\n complete: (anim) => {\n body.style.overflow = '';\n body.style.height = '';\n body.style.paddingTop = '';\n body.style.paddingBottom = '';\n // onOpenEnd callback\n if (typeof this.options.onOpenEnd === 'function') {\n this.options.onOpenEnd.call(this, li);\n }\n }\n });\n }\n\n _animateOut(index: number) {\n const li = this.el.children[index];\n if (!li) return;\n const body: HTMLElement = li.querySelector('.collapsible-body');\n anim.remove(body);\n body.style.overflow = 'hidden';\n anim({\n targets: body,\n height: 0,\n paddingTop: 0,\n paddingBottom: 0,\n duration: this.options.outDuration,\n easing: 'easeInOutCubic',\n complete: () => {\n body.style.overflow = '';\n body.style.height = '';\n body.style.padding = '';\n body.style.display = '';\n // onCloseEnd callback\n if (typeof this.options.onCloseEnd === 'function') {\n this.options.onCloseEnd.call(this, li);\n }\n }\n });\n }\n\n /**\n * Open collapsible section.\n * @param n Nth section to open.\n */\n open = (index: number) => {\n const listItems = Array.from(this.el.children).filter(c => c.tagName === 'LI');\n const li = listItems[index];\n if (li && !li.classList.contains('active')) {\n // onOpenStart callback\n if (typeof this.options.onOpenStart === 'function') {\n this.options.onOpenStart.call(this, li);\n }\n // Handle accordion behavior\n if (this.options.accordion) {\n const activeLis = listItems.filter(li => li.classList.contains('active'));\n activeLis.forEach(activeLi => {\n const index = listItems.indexOf(activeLi);\n this.close(index);\n });\n }\n // Animate in\n li.classList.add('active');\n this._animateIn(index);\n }\n }\n\n /**\n * Close collapsible section.\n * @param n Nth section to close.\n */\n close = (index: number) => {\n const li = Array.from(this.el.children).filter(c => c.tagName === 'LI')[index];\n if (li && li.classList.contains('active')) {\n // onCloseStart callback\n if (typeof this.options.onCloseStart === 'function') {\n this.options.onCloseStart.call(this, li);\n }\n // Animate out\n li.classList.remove('active');\n this._animateOut(index);\n }\n }\n}\n","/**\n * Base options for component initialization.\n */\nexport interface BaseOptions {};\n\nexport type MElement = HTMLElement | Element;\nexport type InitElements<T extends MElement> = NodeListOf<T> | HTMLCollectionOf<T>;\ntype ComponentConstructor<T extends Component<O>, O extends BaseOptions> = {\n new (el: HTMLElement, options: Partial<O>): T\n};\ntype ComponentType<C extends Component<O>, O extends BaseOptions> = ComponentConstructor<C, O> & typeof Component<O>;\n\nexport interface I18nOptions {\n cancel: string;\n clear: string;\n done: string;\n}\n\nexport interface Openable {\n isOpen: boolean;\n open(): void;\n close(): void;\n};\n\n/**\n * Base class implementation for Materialize components.\n */\nexport class Component<O extends BaseOptions>{\n /**\n * The DOM element the plugin was initialized with.\n */\n el: HTMLElement;\n /**\n * The options the instance was initialized with.\n */\n options: O;\n\n /**\n * Constructs component instance and set everything up.\n */\n constructor(el: HTMLElement, options: Partial<O>, classDef: ComponentType<Component<O>, O>){\n // Display error if el is not a valid HTML Element\n if (!(el instanceof HTMLElement)) {\n console.error(Error(el + ' is not an HTML Element'));\n }\n // If exists, destroy and reinitialize in child\n let ins = classDef.getInstance(el);\n if (!!ins) {\n ins.destroy();\n }\n this.el = el;\n }\n\n /**\n * Initializes component instance.\n * @param el HTML element.\n * @param options Component options.\n * @param classDef Class definition.\n */\n protected static init<\n I extends HTMLElement, O extends BaseOptions, C extends Component<O>\n >(el: I, options: O, classDef: ComponentType<C, O>): C;\n /**\n * Initializes component instances.\n * @param els HTML elements.\n * @param options Component options.\n * @param classDef Class definition.\n */\n protected static init<\n I extends MElement, O extends BaseOptions, C extends Component<O>\n >(els: InitElements<I>, options: Partial<O>, classDef: ComponentType<C, O>): C[];\n /**\n * Initializes component instances.\n * @param els HTML elements.\n * @param options Component options.\n * @param classDef Class definition.\n */\n protected static init<\n I extends MElement, O extends BaseOptions, C extends Component<O>\n >(els: I | InitElements<I>, options: Partial<O>, classDef: ComponentType<C, O>): C | C[];\n /**\n * Initializes component instances.\n * @param els HTML elements.\n * @param options Component options.\n * @param classDef Class definition.\n */\n protected static init<\n I extends MElement, O extends BaseOptions, C extends Component<O>\n >(els: I | InitElements<I>, options: Partial<O>, classDef: ComponentType<C, O>): C | C[] {\n let instances = null;\n if (els instanceof Element) {\n instances = new classDef(<HTMLElement>els, options);\n }\n else if (!!els && els.length) {\n instances = [];\n for (let i = 0; i < els.length; i++) {\n instances.push(new classDef(<HTMLElement>els[i], options));\n }\n }\n return instances;\n }\n\n /**\n * @returns default options for component instance.\n */\n static get defaults(): BaseOptions{ return {}; }\n\n /**\n * Retrieves component instance for the given element.\n * @param el Associated HTML Element.\n */\n static getInstance(el: HTMLElement): Component<BaseOptions> {\n throw new Error(\"This method must be implemented.\");\n }\n\n /**\n * Destroy plugin instance and teardown.\n */\n destroy(): void { throw new Error(\"This method must be implemented.\"); }\n}\n","import { Modal } from \"./modal\";\nimport { Utils } from \"./utils\";\nimport { FormSelect } from \"./select\";\nimport { BaseOptions, Component, InitElements, MElement, I18nOptions } from \"./component\";\n\nexport interface DateI18nOptions extends I18nOptions {\n previousMonth: string;\n nextMonth: string;\n months: string[];\n monthsShort: string[];\n weekdays: string[];\n weekdaysShort: string[];\n weekdaysAbbrev: string[];\n};\n\nexport interface DatepickerOptions extends BaseOptions {\n /**\n * Automatically close picker when date is selected.\n * @default false\n */\n autoClose: boolean;\n /**\n * The date output format for the input field value\n * or a function taking the date and outputting the\n * formatted date string.\n * @default 'mmm dd, yyyy'\n */\n format: string | ((d: Date) => string);\n /**\n * Used to create date object from current input string.\n * @default null\n */\n parse: ((value: string, format: string) => Date) | null;\n /**\n * The initial date to view when first opened.\n * @default null\n */\n defaultDate: Date | null;\n /**\n * Make the `defaultDate` the initial selected value.\n * @default false\n */\n setDefaultDate: boolean;\n /**\n * Prevent selection of any date on the weekend.\n * @default false\n */\n disableWeekends: boolean;\n /**\n * Custom function to disable certain days.\n * @default null\n */\n disableDayFn: ((day: Date) => boolean) | null;\n /**\n * First day of week (0: Sunday, 1: Monday etc).\n * @default 0\n */\n firstDay: number;\n /**\n * The earliest date that can be selected.\n * @default null\n */\n minDate: Date | null;\n /**\n * The latest date that can be selected.\n * @default null\n */\n maxDate: Date | null;\n /**\n * Number of years either side, or array of upper/lower range.\n * @default 10\n */\n yearRange: number | number[];\n /**\n * Sort year range in reverse order.\n * @default false\n */\n yearRangeReverse: boolean;\n /**\n * Changes Datepicker to RTL.\n * @default false\n */\n isRTL: boolean;\n /**\n * Show month after year in Datepicker title.\n * @default false\n */\n showMonthAfterYear: boolean;\n /**\n * Render days of the calendar grid that fall in the next\n * or previous month.\n * @default false\n */\n showDaysInNextAndPreviousMonths: boolean;\n /**\n * Specify a DOM element OR selector for a DOM element to render\n * the calendar in, by default it will be placed before the input.\n * @default null\n */\n container: HTMLElement | string | null;\n /**\n * Show the clear button in the datepicker.\n * @default false\n */\n showClearBtn: boolean;\n /**\n * Internationalization options.\n */\n i18n: Partial<DateI18nOptions>;\n /**\n * An array of string returned by `Date.toDateString()`,\n * indicating there are events in the specified days.\n * @default []\n */\n events: string[];\n /**\n * Callback function when date is selected,\n * first parameter is the newly selected date.\n * @default null\n */\n onSelect: ((selectedDate: Date) => void) | null;\n /**\n * Callback function when Datepicker is opened.\n * @default null\n */\n onOpen: (() => void) | null;\n /**\n * Callback function when Datepicker is closed.\n * @default null\n */\n onClose: (() => void) | null;\n /**\n * Callback function when Datepicker HTML is refreshed.\n * @default null\n */\n onDraw: (() => void) | null;\n \n /** Field used for internal calculations DO NOT CHANGE IT */\n minYear?: any;\n /** Field used for internal calculations DO NOT CHANGE IT */\n maxYear?: any;\n /** Field used for internal calculations DO NOT CHANGE IT */\n minMonth?: any;\n /** Field used for internal calculations DO NOT CHANGE IT */\n maxMonth?: any;\n /** Field used for internal calculations DO NOT CHANGE IT */\n startRange?: any;\n /** Field used for internal calculations DO NOT CHANGE IT */\n endRange?: any;\n}\n\nlet _defaults: DatepickerOptions = {\n // Close when date is selected\n autoClose: false,\n // the default output format for the input field value\n format: 'mmm dd, yyyy',\n // Used to create date object from current input string\n parse: null,\n // The initial date to view when first opened\n defaultDate: null,\n // Make the `defaultDate` the initial selected value\n setDefaultDate: false,\n disableWeekends: false,\n disableDayFn: null,\n // First day of week (0: Sunday, 1: Monday etc)\n firstDay: 0,\n // The earliest date that can be selected\n minDate: null,\n // Thelatest date that can be selected\n maxDate: null,\n // Number of years either side, or array of upper/lower range\n yearRange: 10,\n // used internally (don't config outside)\n minYear: 0,\n maxYear: 9999,\n minMonth: undefined,\n maxMonth: undefined,\n startRange: null,\n endRange: null,\n isRTL: false,\n yearRangeReverse: false,\n // Render the month after year in the calendar title\n showMonthAfterYear: false,\n // Render days of the calendar grid that fall in the next or previous month\n showDaysInNextAndPreviousMonths: false,\n // Specify a DOM element to render the calendar in\n container: null,\n // Show clear button\n showClearBtn: false,\n // internationalization\n i18n: {\n cancel: 'Cancel',\n clear: 'Clear',\n done: 'Ok',\n previousMonth: '‹',\n nextMonth: '›',\n months: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n monthsShort: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n weekdaysAbbrev: ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n },\n // events array\n events: [],\n // callback function\n onSelect: null,\n onOpen: null,\n onClose: null,\n onDraw: null\n};\n\nexport class Datepicker extends Component<DatepickerOptions> {\n declare el: HTMLInputElement\n id: string;\n /** If the picker is open. */\n isOpen: boolean;\n modal: Modal;\n calendarEl: HTMLElement;\n /** CLEAR button instance. */\n clearBtn: HTMLElement;\n /** DONE button instance */\n doneBtn: HTMLElement;\n cancelBtn: HTMLElement;\n modalEl: HTMLElement;\n yearTextEl: HTMLElement;\n dateTextEl: HTMLElement;\n /** The selected Date. */\n date: Date;\n formats: any;\n calendars: any;\n private _y: any;\n private _m: any;\n static _template: string;\n\n constructor(el: HTMLInputElement, options: Partial<DatepickerOptions>) {\n super(el, options, Datepicker);\n (this.el as any).M_Datepicker = this;\n \n this.options = {\n ...Datepicker.defaults,\n ...options\n };\n\n // make sure i18n defaults are not lost when only few i18n option properties are passed\n if (!!options && options.hasOwnProperty('i18n') && typeof options.i18n === 'object') {\n this.options.i18n = {...Datepicker.defaults.i18n, ...options.i18n};\n }\n\n // Remove time component from minDate and maxDate options\n if (this.options.minDate) this.options.minDate.setHours(0, 0, 0, 0);\n if (this.options.maxDate) this.options.maxDate.setHours(0, 0, 0, 0);\n\n this.id = Utils.guid();\n\n this._setupVariables();\n this._insertHTMLIntoDOM();\n this._setupModal();\n this._setupEventHandlers();\n\n if (!this.options.defaultDate) {\n this.options.defaultDate = new Date(Date.parse(this.el.value));\n }\n\n let defDate = this.options.defaultDate;\n if (Datepicker._isDate(defDate)) {\n if (this.options.setDefaultDate) {\n this.setDate(defDate, true);\n this.setInputValue();\n }\n else {\n this.gotoDate(defDate);\n }\n }\n else {\n this.gotoDate(new Date());\n }\n this.isOpen = false;\n }\n\n static get defaults() {\n return _defaults;\n }\n\n /**\n * Initializes instance of Datepicker.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLInputElement, options?: Partial<DatepickerOptions>): Datepicker;\n /**\n * Initializes instances of Datepicker.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<HTMLInputElement | MElement>, options?: Partial<DatepickerOptions>): Datepicker[];\n /**\n * Initializes instances of Datepicker.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLInputElement | InitElements<HTMLInputElement | MElement>, options: Partial<DatepickerOptions> = {}): Datepicker | Datepicker[] {\n return super.init(els, options, Datepicker);\n }\n\n static _isDate(obj) {\n return /Date/.test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n }\n\n static _isWeekend(date) {\n let day = date.getDay();\n return day === 0 || day === 6;\n }\n\n static _setToStartOfDay(date) {\n if (Datepicker._isDate(date)) date.setHours(0, 0, 0, 0);\n }\n\n static _getDaysInMonth(year, month) {\n return [31, Datepicker._isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][\n month\n ];\n }\n\n static _isLeapYear(year) {\n // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n static _compareDates(a, b) {\n // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n return a.getTime() === b.getTime();\n }\n\n static getInstance(el: HTMLElement): Datepicker {\n return (el as any).M_Datepicker;\n }\n\n destroy() {\n this._removeEventHandlers();\n this.modal.destroy();\n this.modalEl.remove();\n this.destroySelects();\n (this.el as any).M_Datepicker = undefined;\n }\n\n destroySelects() {\n let oldYearSelect = this.calendarEl.querySelector('.orig-select-year');\n if (oldYearSelect) {\n FormSelect.getInstance(oldYearSelect as HTMLElement).destroy();\n }\n let oldMonthSelect = this.calendarEl.querySelector('.orig-select-month');\n if (oldMonthSelect) {\n FormSelect.getInstance(oldMonthSelect as HTMLElement).destroy();\n }\n }\n\n _insertHTMLIntoDOM() {\n if (this.options.showClearBtn) {\n this.clearBtn.style.visibility = '';\n this.clearBtn.innerText = this.options.i18n.clear;\n }\n this.doneBtn.innerText = this.options.i18n.done;\n this.cancelBtn.innerText = this.options.i18n.cancel;\n\n if (this.options.container) {\n const optEl = this.options.container;\n this.options.container =\n optEl instanceof HTMLElement ? optEl : document.querySelector(optEl) as HTMLElement;\n this.options.container.append(this.modalEl);\n }\n else {\n //this.modalEl.before(this.el);\n this.el.parentElement.appendChild(this.modalEl);\n }\n }\n\n _setupModal() {\n this.modalEl.id = 'modal-' + this.id;\n this.modal = Modal.init(this.modalEl, {\n onCloseEnd: () => {\n this.isOpen = false;\n }\n });\n }\n\n /**\n * Gets a string representation of the selected date.\n */\n toString(format: string | ((d: Date) => string) = null): string {\n format = format || this.options.format;\n if (typeof format === 'function') return format(this.date);\n if (!Datepicker._isDate(this.date)) return '';\n // String Format\n const formatArray = format.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g);\n const formattedDate = formatArray\n .map(label => this.formats[label] ? this.formats[label]() : label)\n .join('');\n return formattedDate;\n }\n\n /**\n * Set a date on the datepicker.\n * @param date Date to set on the datepicker.\n * @param preventOnSelect Undocumented as of 5 March 2018.\n */\n setDate(date: Date | string = null, preventOnSelect: boolean = false) {\n if (!date) {\n this.date = null;\n this._renderDateDisplay();\n return this.draw();\n }\n if (typeof date === 'string') {\n date = new Date(Date.parse(date));\n }\n if (!Datepicker._isDate(date)) {\n return;\n }\n let min = this.options.minDate,\n max = this.options.maxDate;\n if (Datepicker._isDate(min) && date < min) {\n date = min;\n }\n else if (Datepicker._isDate(max) && date > max) {\n date = max;\n }\n this.date = new Date(date.getTime());\n this._renderDateDisplay();\n Datepicker._setToStartOfDay(this.date);\n this.gotoDate(this.date);\n if (!preventOnSelect && typeof this.options.onSelect === 'function') {\n this.options.onSelect.call(this, this.date);\n }\n }\n\n /**\n * Sets current date as the input value.\n */\n setInputValue() {\n this.el.value = this.toString();\n this.el.dispatchEvent(new CustomEvent('change', {bubbles:true, cancelable:true, composed:true, detail: {firedBy: this}}));\n }\n\n _renderDateDisplay() {\n let displayDate = Datepicker._isDate(this.date) ? this.date : new Date();\n let i18n = this.options.i18n;\n let day = i18n.weekdaysShort[displayDate.getDay()];\n let month = i18n.monthsShort[displayDate.getMonth()];\n let date = displayDate.getDate();\n this.yearTextEl.innerHTML = displayDate.getFullYear().toString();\n this.dateTextEl.innerHTML = `${day}, ${month} ${date}`;\n }\n\n /**\n * Change date view to a specific date on the datepicker.\n * @param date Date to show on the datepicker.\n */\n gotoDate(date: Date) {\n let newCalendar = true;\n if (!Datepicker._isDate(date)) {\n return;\n }\n if (this.calendars) {\n let firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n lastVisibleDate = new Date(\n this.calendars[this.calendars.length - 1].year,\n this.calendars[this.calendars.length - 1].month,\n 1\n ),\n visibleDate = date.getTime();\n // get the end of the month\n lastVisibleDate.setMonth(lastVisibleDate.getMonth() + 1);\n lastVisibleDate.setDate(lastVisibleDate.getDate() - 1);\n newCalendar =\n visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate;\n }\n if (newCalendar) {\n this.calendars = [\n {\n month: date.getMonth(),\n year: date.getFullYear()\n }\n ];\n }\n this.adjustCalendars();\n }\n\n adjustCalendars() {\n this.calendars[0] = this.adjustCalendar(this.calendars[0]);\n this.draw();\n }\n\n adjustCalendar(calendar) {\n if (calendar.month < 0) {\n calendar.year -= Math.ceil(Math.abs(calendar.month) / 12);\n calendar.month += 12;\n }\n if (calendar.month > 11) {\n calendar.year += Math.floor(Math.abs(calendar.month) / 12);\n calendar.month -= 12;\n }\n return calendar;\n }\n\n nextMonth() {\n this.calendars[0].month++;\n this.adjustCalendars();\n }\n\n prevMonth() {\n this.calendars[0].month--;\n this.adjustCalendars();\n }\n\n render(year, month, randId) {\n let opts = this.options,\n now = new Date(),\n days = Datepicker._getDaysInMonth(year, month),\n before = new Date(year, month, 1).getDay(),\n data = [],\n row = [];\n Datepicker._setToStartOfDay(now);\n if (opts.firstDay > 0) {\n before -= opts.firstDay;\n if (before < 0) {\n before += 7;\n }\n }\n let previousMonth = month === 0 ? 11 : month - 1,\n nextMonth = month === 11 ? 0 : month + 1,\n yearOfPreviousMonth = month === 0 ? year - 1 : year,\n yearOfNextMonth = month === 11 ? year + 1 : year,\n daysInPreviousMonth = Datepicker._getDaysInMonth(yearOfPreviousMonth, previousMonth);\n let cells = days + before,\n after = cells;\n while (after > 7) {\n after -= 7;\n }\n cells += 7 - after;\n let isWeekSelected = false;\n for (let i = 0, r = 0; i < cells; i++) {\n let day = new Date(year, month, 1 + (i - before)),\n isSelected = Datepicker._isDate(this.date)\n ? Datepicker._compareDates(day, this.date)\n : false,\n isToday = Datepicker._compareDates(day, now),\n hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n isEmpty = i < before || i >= days + before,\n dayNumber = 1 + (i - before),\n monthNumber = month,\n yearNumber = year,\n isStartRange = opts.startRange && Datepicker._compareDates(opts.startRange, day),\n isEndRange = opts.endRange && Datepicker._compareDates(opts.endRange, day),\n isInRange =\n opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n isDisabled =\n (opts.minDate && day < opts.minDate) ||\n (opts.maxDate && day > opts.maxDate) ||\n (opts.disableWeekends && Datepicker._isWeekend(day)) ||\n (opts.disableDayFn && opts.disableDayFn(day));\n\n if (isEmpty) {\n if (i < before) {\n dayNumber = daysInPreviousMonth + dayNumber;\n monthNumber = previousMonth;\n yearNumber = yearOfPreviousMonth;\n } else {\n dayNumber = dayNumber - days;\n monthNumber = nextMonth;\n yearNumber = yearOfNextMonth;\n }\n }\n\n let dayConfig = {\n day: dayNumber,\n month: monthNumber,\n year: yearNumber,\n hasEvent: hasEvent,\n isSelected: isSelected,\n isToday: isToday,\n isDisabled: isDisabled,\n isEmpty: isEmpty,\n isStartRange: isStartRange,\n isEndRange: isEndRange,\n isInRange: isInRange,\n showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths\n };\n\n row.push(this.renderDay(dayConfig));\n\n if (++r === 7) {\n data.push(this.renderRow(row, opts.isRTL, isWeekSelected));\n row = [];\n r = 0;\n isWeekSelected = false;\n }\n }\n return this.renderTable(opts, data, randId);\n }\n\n renderDay(opts) {\n let arr = [];\n let ariaSelected = 'false';\n if (opts.isEmpty) {\n if (opts.showDaysInNextAndPreviousMonths) {\n arr.push('is-outside-current-month');\n arr.push('is-selection-disabled');\n } else {\n return '<td class=\"is-empty\"></td>';\n }\n }\n if (opts.isDisabled) {\n arr.push('is-disabled');\n }\n\n if (opts.isToday) {\n arr.push('is-today');\n }\n if (opts.isSelected) {\n arr.push('is-selected');\n ariaSelected = 'true';\n }\n if (opts.hasEvent) {\n arr.push('has-event');\n }\n if (opts.isInRange) {\n arr.push('is-inrange');\n }\n if (opts.isStartRange) {\n arr.push('is-startrange');\n }\n if (opts.isEndRange) {\n arr.push('is-endrange');\n }\n return (\n `<td data-day=\"${opts.day}\" class=\"${arr.join(' ')}\" aria-selected=\"${ariaSelected}\">` +\n `<button class=\"datepicker-day-button\" type=\"button\" data-year=\"${opts.year}\" data-month=\"${opts.month}\" data-day=\"${opts.day}\">${opts.day}</button>` +\n '</td>'\n );\n }\n\n renderRow(days, isRTL, isRowSelected) {\n return (\n '<tr class=\"datepicker-row' +\n (isRowSelected ? ' is-selected' : '') +\n '\">' +\n (isRTL ? days.reverse() : days).join('') +\n '</tr>'\n );\n }\n\n renderTable(opts, data, randId) {\n return (\n '<div class=\"datepicker-table-wrapper\"><table cellpadding=\"0\" cellspacing=\"0\" class=\"datepicker-table\" role=\"grid\" aria-labelledby=\"' +\n randId +\n '\">' +\n this.renderHead(opts) +\n this.renderBody(data) +\n '</table></div>'\n );\n }\n\n renderHead(opts) {\n let i,\n arr = [];\n for (i = 0; i < 7; i++) {\n arr.push(\n `<th scope=\"col\"><abbr title=\"${this.renderDayName(opts, i)}\">${this.renderDayName(\n opts,\n i,\n true\n )}</abbr></th>`\n );\n }\n return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';\n }\n\n renderBody(rows) {\n return '<tbody>' + rows.join('') + '</tbody>';\n }\n\n renderTitle(instance, c, year, month, refYear, randId) {\n let i,\n j,\n arr,\n opts = this.options,\n isMinYear = year === opts.minYear,\n isMaxYear = year === opts.maxYear,\n html =\n '<div id=\"' +\n randId +\n '\" class=\"datepicker-controls\" role=\"heading\" aria-live=\"assertive\">',\n monthHtml,\n yearHtml,\n prev = true,\n next = true;\n\n for (arr = [], i = 0; i < 12; i++) {\n arr.push(\n '<option value=\"' +\n (year === refYear ? i - c : 12 + i - c) +\n '\"' +\n (i === month ? ' selected=\"selected\"' : '') +\n ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth)\n ? 'disabled=\"disabled\"'\n : '') +\n '>' +\n opts.i18n.months[i] +\n '</option>'\n );\n }\n\n monthHtml = '<select class=\"datepicker-select orig-select-month\" tabindex=\"-1\">'+arr.join('')+'</select>';\n\n if (Array.isArray(opts.yearRange)) {\n i = opts.yearRange[0];\n j = opts.yearRange[1] + 1;\n }\n else {\n i = year - opts.yearRange;\n j = 1 + year + opts.yearRange;\n }\n\n for (arr = []; i < j && i <= opts.maxYear; i++) {\n if (i >= opts.minYear) {\n arr.push(`<option value=\"${i}\" ${i === year ? 'selected=\"selected\"' : ''}>${i}</option>`);\n }\n }\n if (opts.yearRangeReverse) arr.reverse();\n\n yearHtml = `<select class=\"datepicker-select orig-select-year\" tabindex=\"-1\">${arr.join('')}</select>`;\n\n let leftArrow =\n '<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\"/><path d=\"M0-.5h24v24H0z\" fill=\"none\"/></svg>';\n html += `<button class=\"month-prev${\n prev ? '' : ' is-disabled'\n } btn-flat\" type=\"button\">${leftArrow}</button>`;\n\n html += '<div class=\"selects-container\">';\n if (opts.showMonthAfterYear) {\n html += yearHtml + monthHtml;\n } else {\n html += monthHtml + yearHtml;\n }\n html += '</div>';\n\n if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n prev = false;\n }\n\n if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n next = false;\n }\n\n let rightArrow =\n '<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\"/><path d=\"M0-.25h24v24H0z\" fill=\"none\"/></svg>';\n html += `<button class=\"month-next${\n next ? '' : ' is-disabled'\n } btn-flat\" type=\"button\">${rightArrow}</button>`;\n\n return (html += '</div>');\n }\n\n // refresh HTML\n draw(force: boolean = false) {\n if (!this.isOpen && !force) return;\n let opts = this.options,\n minYear = opts.minYear,\n maxYear = opts.maxYear,\n minMonth = opts.minMonth,\n maxMonth = opts.maxMonth,\n html = '',\n randId;\n\n if (this._y <= minYear) {\n this._y = minYear;\n if (!isNaN(minMonth) && this._m < minMonth) {\n this._m = minMonth;\n }\n }\n if (this._y >= maxYear) {\n this._y = maxYear;\n if (!isNaN(maxMonth) && this._m > maxMonth) {\n this._m = maxMonth;\n }\n }\n\n randId =\n 'datepicker-title-' +\n Math.random()\n .toString(36)\n .replace(/[^a-z]+/g, '')\n .substr(0, 2);\n\n for (let c = 0; c < 1; c++) {\n this._renderDateDisplay();\n html +=\n this.renderTitle(\n this,\n c,\n this.calendars[c].year,\n this.calendars[c].month,\n this.calendars[0].year,\n randId\n ) + this.render(this.calendars[c].year, this.calendars[c].month, randId);\n }\n\n this.destroySelects();\n\n this.calendarEl.innerHTML = html;\n\n // Init Materialize Select\n let yearSelect = this.calendarEl.querySelector('.orig-select-year') as HTMLSelectElement;\n let monthSelect = this.calendarEl.querySelector('.orig-select-month') as HTMLSelectElement;\n FormSelect.init(yearSelect, {\n classes: 'select-year',\n dropdownOptions: { container: document.body, constrainWidth: false }\n });\n FormSelect.init(monthSelect, {\n classes: 'select-month',\n dropdownOptions: { container: document.body, constrainWidth: false }\n });\n\n // Add change handlers for select\n yearSelect.addEventListener('change', () => this._handleYearChange);\n monthSelect.addEventListener('change', () => this._handleMonthChange);\n\n if (typeof this.options.onDraw === 'function') {\n this.options.onDraw.call(this);\n }\n }\n\n _setupEventHandlers() {\n this.el.addEventListener('click', this._handleInputClick);\n this.el.addEventListener('keydown', this._handleInputKeydown);\n this.el.addEventListener('change', this._handleInputChange);\n this.calendarEl.addEventListener('click', this._handleCalendarClick);\n this.doneBtn.addEventListener('click', this._finishSelection);\n this.cancelBtn.addEventListener('click', this.close);\n\n if (this.options.showClearBtn) {\n this.clearBtn.addEventListener('click', this._handleClearClick);\n }\n }\n\n _setupVariables() {\n const template = document.createElement('template');\n template.innerHTML = Datepicker._template.trim();\n this.modalEl = <HTMLElement>template.content.firstChild;\n\n this.calendarEl = this.modalEl.querySelector('.datepicker-calendar');\n this.yearTextEl = this.modalEl.querySelector('.year-text');\n this.dateTextEl = this.modalEl.querySelector('.date-text');\n if (this.options.showClearBtn) {\n this.clearBtn = this.modalEl.querySelector('.datepicker-clear');\n }\n this.doneBtn = this.modalEl.querySelector('.datepicker-done');\n this.cancelBtn = this.modalEl.querySelector('.datepicker-cancel');\n\n this.formats = {\n d: () => {\n return this.date.getDate();\n },\n dd: () => {\n let d = this.date.getDate();\n return (d < 10 ? '0' : '') + d;\n },\n ddd: () => {\n return this.options.i18n.weekdaysShort[this.date.getDay()];\n },\n dddd: () => {\n return this.options.i18n.weekdays[this.date.getDay()];\n },\n m: () => {\n return this.date.getMonth() + 1;\n },\n mm: () => {\n let m = this.date.getMonth() + 1;\n return (m < 10 ? '0' : '') + m;\n },\n mmm: () => {\n return this.options.i18n.monthsShort[this.date.getMonth()];\n },\n mmmm: () => {\n return this.options.i18n.months[this.date.getMonth()];\n },\n yy: () => {\n return ('' + this.date.getFullYear()).slice(2);\n },\n yyyy: () => {\n return this.date.getFullYear();\n }\n };\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('click', this._handleInputClick);\n this.el.removeEventListener('keydown', this._handleInputKeydown);\n this.el.removeEventListener('change', this._handleInputChange);\n this.calendarEl.removeEventListener('click', this._handleCalendarClick);\n }\n\n _handleInputClick = () => {\n this.open();\n }\n\n _handleInputKeydown = (e: KeyboardEvent) => {\n if (Utils.keys.ENTER.includes(e.key)) {\n e.preventDefault();\n this.open();\n }\n }\n\n _handleCalendarClick = (e) => {\n if (!this.isOpen) return;\n const target = <HTMLElement>(e.target);\n if (!target.classList.contains('is-disabled')) {\n if (\n target.classList.contains('datepicker-day-button') &&\n !target.classList.contains('is-empty') &&\n !target.parentElement.classList.contains('is-disabled')\n ) {\n this.setDate(\n new Date(\n e.target.getAttribute('data-year'),\n e.target.getAttribute('data-month'),\n e.target.getAttribute('data-day')\n )\n );\n if (this.options.autoClose) {\n this._finishSelection();\n }\n }\n else if (target.closest('.month-prev')) {\n this.prevMonth();\n }\n else if (target.closest('.month-next')) {\n this.nextMonth();\n }\n }\n }\n\n _handleClearClick = () => {\n this.date = null;\n this.setInputValue();\n this.close();\n }\n\n _handleMonthChange = (e) => {\n this.gotoMonth(e.target.value);\n }\n\n _handleYearChange = (e) => {\n this.gotoYear(e.target.value);\n }\n\n // change view to a specific month (zero-index, e.g. 0: January)\n gotoMonth(month) {\n if (!isNaN(month)) {\n this.calendars[0].month = parseInt(month, 10);\n this.adjustCalendars();\n }\n }\n\n // change view to a specific full year (e.g. \"2012\")\n gotoYear(year) {\n if (!isNaN(year)) {\n this.calendars[0].year = parseInt(year, 10);\n this.adjustCalendars();\n }\n }\n\n _handleInputChange = (e: Event) => {\n let date;\n // Prevent change event from being fired when triggered by the plugin\n if (e['detail']?.firedBy === this) return;\n if (this.options.parse) {\n date = this.options.parse(this.el.value,\n typeof this.options.format === \"function\"\n ? this.options.format(new Date(this.el.value))\n : this.options.format);\n }\n else {\n date = new Date(Date.parse(this.el.value));\n }\n if (Datepicker._isDate(date)) this.setDate(date);\n }\n\n renderDayName(opts, day, abbr: boolean = false) {\n day += opts.firstDay;\n while (day >= 7) {\n day -= 7;\n }\n return abbr ? opts.i18n.weekdaysAbbrev[day] : opts.i18n.weekdays[day];\n }\n\n // Set input value to the selected date and close Datepicker\n _finishSelection = () => {\n this.setInputValue();\n this.close();\n }\n\n /**\n * Open datepicker.\n */\n open = () => {\n if (this.isOpen) return;\n this.isOpen = true;\n if (typeof this.options.onOpen === 'function') {\n this.options.onOpen.call(this);\n }\n this.draw();\n this.modal.open(undefined);\n return this;\n }\n\n /**\n * Close datepicker.\n */\n close = () => {\n if (!this.isOpen) return;\n this.isOpen = false;\n if (typeof this.options.onClose === 'function') {\n this.options.onClose.call(this);\n }\n this.modal.close();\n return this;\n }\n\n static {\n Datepicker._template = `\n <div class=\"modal datepicker-modal\">\n <div class=\"modal-content datepicker-container\">\n <div class=\"datepicker-date-display\">\n <span class=\"year-text\"></span>\n <span class=\"date-text\"></span>\n </div>\n <div class=\"datepicker-calendar-container\">\n <div class=\"datepicker-calendar\"></div>\n <div class=\"datepicker-footer\">\n <button class=\"btn-flat datepicker-clear waves-effect\" style=\"visibility: hidden;\" type=\"button\"></button>\n <div class=\"confirmation-btns\">\n <button class=\"btn-flat datepicker-cancel waves-effect\" type=\"button\"></button>\n <button class=\"btn-flat datepicker-done waves-effect\" type=\"button\"></button>\n </div>\n </div>\n </div>\n </div>\n </div>`;\n }\n}\n","import anim from \"animejs\";\n\nimport { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement, Openable } from \"./component\";\n\nexport interface DropdownOptions extends BaseOptions {\n /**\n * Defines the edge the menu is aligned to.\n * @default 'left'\n */\n alignment: 'left' | 'right';\n /**\n * If true, automatically focus dropdown el for keyboard.\n * @default true\n */\n autoFocus: boolean;\n /**\n * If true, constrainWidth to the size of the dropdown activator.\n * @default true\n */\n constrainWidth: boolean;\n /**\n * Provide an element that will be the bounding container of the dropdown.\n * @default null\n */\n container: Element;\n /**\n * If false, the dropdown will show below the trigger.\n * @default true\n */\n coverTrigger: boolean;\n /**\n * If true, close dropdown on item click.\n * @default true\n */\n closeOnClick: boolean;\n /**\n * If true, the dropdown will open on hover.\n * @default false\n */\n hover: boolean;\n /**\n * The duration of the transition enter in milliseconds.\n * @default 150\n */\n inDuration: number;\n /**\n * The duration of the transition out in milliseconds.\n * @default 250\n */\n outDuration: number;\n /**\n * Function called when dropdown starts entering.\n * @default null\n */\n onOpenStart: (el: HTMLElement) => void;\n /**\n * Function called when dropdown finishes entering.\n * @default null\n */\n onOpenEnd: (el: HTMLElement) => void;\n /**\n * Function called when dropdown starts exiting.\n * @default null\n */\n onCloseStart: (el: HTMLElement) => void;\n /**\n * Function called when dropdown finishes exiting.\n * @default null\n */\n onCloseEnd: (el: HTMLElement) => void;\n /**\n * Function called when item is clicked.\n * @default null\n */\n onItemClick: (el: HTMLLIElement) => void;\n};\n\nconst _defaults: DropdownOptions = {\n alignment: 'left',\n autoFocus: true,\n constrainWidth: true,\n container: null,\n coverTrigger: true,\n closeOnClick: true,\n hover: false,\n inDuration: 150,\n outDuration: 250,\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null,\n onCloseEnd: null,\n onItemClick: null\n};\n\nexport class Dropdown extends Component<DropdownOptions> implements Openable {\n static _dropdowns: Dropdown[] = [];\n /** ID of the dropdown element. */\n id: string;\n /** The DOM element of the dropdown. */\n dropdownEl: HTMLElement;\n /** If the dropdown is open. */\n isOpen: boolean;\n /** If the dropdown content is scrollable. */\n isScrollable: boolean;\n isTouchMoving: boolean;\n /** The index of the item focused. */\n focusedIndex: number;\n filterQuery: any[];\n filterTimeout: NodeJS.Timeout;\n\n constructor(el: HTMLElement, options: Partial<DropdownOptions>) {\n super(el, options, Dropdown);\n (this.el as any).M_Dropdown = this;\n\n Dropdown._dropdowns.push(this);\n this.id = Utils.getIdFromTrigger(el);\n this.dropdownEl = document.getElementById(this.id);\n\n this.options = {\n ...Dropdown.defaults,\n ...options\n };\n\n this.isOpen = false;\n this.isScrollable = false;\n this.isTouchMoving = false;\n this.focusedIndex = -1;\n this.filterQuery = [];\n\n // Move dropdown-content after dropdown-trigger\n this._moveDropdown();\n this._makeDropdownFocusable();\n this._setupEventHandlers();\n }\n\n static get defaults(): DropdownOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Dropdown.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<DropdownOptions>): Dropdown;\n /**\n * Initializes instances of Dropdown.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<DropdownOptions>): Dropdown[];\n /**\n * Initializes instances of Dropdown.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<DropdownOptions> = {}): Dropdown | Dropdown[] {\n return super.init(els, options, Dropdown);\n }\n\n static getInstance(el: HTMLElement): Dropdown {\n return (el as any).M_Dropdown;\n }\n\n destroy() {\n this._resetDropdownStyles();\n this._removeEventHandlers();\n Dropdown._dropdowns.splice(Dropdown._dropdowns.indexOf(this), 1);\n (this.el as any).M_Dropdown = undefined;\n }\n\n _setupEventHandlers() {\n // Trigger keydown handler\n this.el.addEventListener('keydown', this._handleTriggerKeydown);\n // Item click handler\n this.dropdownEl?.addEventListener('click', this._handleDropdownClick);\n // Hover event handlers\n if (this.options.hover) {\n this.el.addEventListener('mouseenter', this._handleMouseEnter);\n this.el.addEventListener('mouseleave', this._handleMouseLeave);\n this.dropdownEl.addEventListener('mouseleave', this._handleMouseLeave);\n // Click event handlers\n } else {\n this.el.addEventListener('click', this._handleClick);\n }\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('keydown', this._handleTriggerKeydown);\n this.dropdownEl.removeEventListener('click', this._handleDropdownClick);\n if (this.options.hover) {\n this.el.removeEventListener('mouseenter', this._handleMouseEnter);\n this.el.removeEventListener('mouseleave', this._handleMouseLeave);\n this.dropdownEl.removeEventListener('mouseleave', this._handleMouseLeave);\n } else {\n this.el.removeEventListener('click', this._handleClick);\n }\n }\n\n _setupTemporaryEventHandlers() {\n // Use capture phase event handler to prevent click\n document.body.addEventListener('click', this._handleDocumentClick, true);\n document.body.addEventListener('touchmove', this._handleDocumentTouchmove);\n this.dropdownEl.addEventListener('keydown', this._handleDropdownKeydown);\n }\n\n _removeTemporaryEventHandlers() {\n // Use capture phase event handler to prevent click\n document.body.removeEventListener('click', this._handleDocumentClick, true);\n document.body.removeEventListener('touchmove', this._handleDocumentTouchmove);\n this.dropdownEl.removeEventListener('keydown', this._handleDropdownKeydown);\n }\n\n _handleClick = (e: MouseEvent) => {\n e.preventDefault();\n this.open();\n }\n\n _handleMouseEnter = () => {\n this.open();\n }\n\n _handleMouseLeave = (e: MouseEvent) => {\n const toEl = e.relatedTarget as HTMLElement;\n const leaveToDropdownContent = !!toEl.closest('.dropdown-content');\n let leaveToActiveDropdownTrigger = false;\n const closestTrigger = toEl.closest('.dropdown-trigger');\n if (\n closestTrigger &&\n !!(<any>closestTrigger).M_Dropdown &&\n (<any>closestTrigger).M_Dropdown.isOpen\n ) {\n leaveToActiveDropdownTrigger = true;\n }\n // Close hover dropdown if mouse did not leave to either active dropdown-trigger or dropdown-content\n if (!leaveToActiveDropdownTrigger && !leaveToDropdownContent) {\n this.close();\n }\n }\n\n _handleDocumentClick = (e: MouseEvent) => {\n const target = <HTMLElement>e.target;\n if (\n this.options.closeOnClick &&\n target.closest('.dropdown-content') &&\n !this.isTouchMoving\n ) {\n // isTouchMoving to check if scrolling on mobile.\n //setTimeout(() => {\n this.close();\n //}, 0);\n }\n else if (\n target.closest('.dropdown-trigger') ||\n !target.closest('.dropdown-content')\n ) {\n //setTimeout(() => {\n this.close();\n //}, 0);\n }\n this.isTouchMoving = false;\n }\n\n _handleTriggerKeydown = (e: KeyboardEvent) => {\n // ARROW DOWN OR ENTER WHEN SELECT IS CLOSED - open Dropdown\n const arrowDownOrEnter = Utils.keys.ARROW_DOWN.includes(e.key) || Utils.keys.ENTER.includes(e.key);\n if (arrowDownOrEnter && !this.isOpen) {\n e.preventDefault();\n this.open();\n }\n }\n\n _handleDocumentTouchmove = (e: TouchEvent) => {\n const target = <HTMLElement>e.target;\n if (target.closest('.dropdown-content')) {\n this.isTouchMoving = true;\n }\n }\n\n _handleDropdownClick = (e: MouseEvent) => {\n // onItemClick callback\n if (typeof this.options.onItemClick === 'function') {\n const itemEl = (<HTMLElement>e.target).closest('li');\n this.options.onItemClick.call(this, itemEl);\n }\n }\n\n _handleDropdownKeydown = (e: KeyboardEvent) => {\n const arrowUpOrDown = Utils.keys.ARROW_DOWN.includes(e.key) || Utils.keys.ARROW_UP.includes(e.key);\n if (Utils.keys.TAB.includes(e.key)) {\n e.preventDefault();\n this.close();\n }\n // Navigate down dropdown list\n else if (arrowUpOrDown && this.isOpen) {\n e.preventDefault();\n const direction = Utils.keys.ARROW_DOWN.includes(e.key) ? 1 : -1;\n let newFocusedIndex = this.focusedIndex;\n let hasFoundNewIndex = false;\n do {\n newFocusedIndex = newFocusedIndex + direction;\n if (\n !!this.dropdownEl.children[newFocusedIndex] &&\n (<any>this.dropdownEl.children[newFocusedIndex]).tabIndex !== -1\n ) {\n hasFoundNewIndex = true;\n break;\n }\n } while (newFocusedIndex < this.dropdownEl.children.length && newFocusedIndex >= 0);\n\n if (hasFoundNewIndex) {\n // Remove active class from old element\n if (this.focusedIndex >= 0)\n this.dropdownEl.children[this.focusedIndex].classList.remove('active');\n this.focusedIndex = newFocusedIndex;\n this._focusFocusedItem();\n }\n }\n // ENTER selects choice on focused item\n else if (Utils.keys.ENTER.includes(e.key) && this.isOpen) {\n // Search for <a> and <button>\n const focusedElement = this.dropdownEl.children[this.focusedIndex];\n const activatableElement = <HTMLElement>focusedElement.querySelector('a, button');\n // Click a or button tag if exists, otherwise click li tag\n if (!!activatableElement) {\n activatableElement.click();\n }\n else if (!!focusedElement) {\n if (focusedElement instanceof HTMLElement) {\n focusedElement.click();\n }\n }\n }\n // Close dropdown on ESC\n else if (Utils.keys.ESC.includes(e.key) && this.isOpen) {\n e.preventDefault();\n this.close();\n }\n\n // CASE WHEN USER TYPE LTTERS\n const keyText = e.key.toLowerCase();\n const isLetter = /[a-zA-Z0-9-_]/.test(keyText);\n const specialKeys = [...Utils.keys.ARROW_DOWN, ...Utils.keys.ARROW_UP, ...Utils.keys.ENTER, ...Utils.keys.ESC, ...Utils.keys.TAB];\n if (isLetter && !specialKeys.includes(e.key)) {\n this.filterQuery.push(keyText);\n const string = this.filterQuery.join('');\n const newOptionEl = Array.from(this.dropdownEl.querySelectorAll('li'))\n .find((el) => el.innerText.toLowerCase().indexOf(string) === 0);\n if (newOptionEl) {\n this.focusedIndex = [...newOptionEl.parentNode.children].indexOf(newOptionEl);\n this._focusFocusedItem();\n }\n }\n this.filterTimeout = setTimeout(this._resetFilterQuery, 1000);\n }\n\n _resetFilterQuery = () => {\n this.filterQuery = [];\n }\n\n _resetDropdownStyles() {\n this.dropdownEl.style.display = '';\n this.dropdownEl.style.width = '';\n this.dropdownEl.style.height = '';\n this.dropdownEl.style.left = '';\n this.dropdownEl.style.top = '';\n this.dropdownEl.style.transformOrigin = '';\n this.dropdownEl.style.transform = '';\n this.dropdownEl.style.opacity = '';\n }\n\n // Move dropdown after container or trigger\n _moveDropdown(containerEl: HTMLElement = null) {\n if (!!this.options.container) {\n this.options.container.append(this.dropdownEl);\n }\n else if (containerEl) {\n if (!containerEl.contains(this.dropdownEl)) {\n containerEl.append(this.dropdownEl);\n }\n }\n else {\n this.el.after(this.dropdownEl);\n }\n }\n\n _makeDropdownFocusable() {\n if (!this.dropdownEl) return;\n // Needed for arrow key navigation\n this.dropdownEl.tabIndex = 0;\n // Only set tabindex if it hasn't been set by user\n Array.from(this.dropdownEl.children).forEach((el)=> {\n if (!el.getAttribute('tabindex'))\n el.setAttribute('tabindex', '0');\n });\n }\n\n _focusFocusedItem() {\n if (\n this.focusedIndex >= 0 &&\n this.focusedIndex < this.dropdownEl.children.length &&\n this.options.autoFocus\n ) {\n (this.dropdownEl.children[this.focusedIndex] as HTMLElement).focus({\n preventScroll: true\n });\n this.dropdownEl.children[this.focusedIndex].scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest'\n });\n }\n }\n\n _getDropdownPosition(closestOverflowParent: HTMLElement) {\n const offsetParentBRect = this.el.offsetParent.getBoundingClientRect();\n const triggerBRect = this.el.getBoundingClientRect();\n const dropdownBRect = this.dropdownEl.getBoundingClientRect();\n\n let idealHeight = dropdownBRect.height;\n let idealWidth = dropdownBRect.width;\n let idealXPos = triggerBRect.left - dropdownBRect.left;\n let idealYPos = triggerBRect.top - dropdownBRect.top;\n\n const dropdownBounds = {\n left: idealXPos,\n top: idealYPos,\n height: idealHeight,\n width: idealWidth\n };\n\n const alignments = Utils.checkPossibleAlignments(\n this.el,\n closestOverflowParent,\n dropdownBounds,\n this.options.coverTrigger ? 0 : triggerBRect.height\n );\n\n let verticalAlignment = 'top';\n let horizontalAlignment = this.options.alignment;\n idealYPos += this.options.coverTrigger ? 0 : triggerBRect.height;\n\n // Reset isScrollable\n this.isScrollable = false;\n\n if (!alignments.top) {\n if (alignments.bottom) {\n verticalAlignment = 'bottom';\n\n if (!this.options.coverTrigger) {\n idealYPos -= triggerBRect.height;\n }\n } else {\n this.isScrollable = true;\n\n // Determine which side has most space and cutoff at correct height\n idealHeight -= 20; // Add padding when cutoff\n if (alignments.spaceOnTop > alignments.spaceOnBottom) {\n verticalAlignment = 'bottom';\n idealHeight += alignments.spaceOnTop;\n idealYPos -= this.options.coverTrigger\n ? alignments.spaceOnTop - 20\n : alignments.spaceOnTop - 20 + triggerBRect.height;\n } else {\n idealHeight += alignments.spaceOnBottom;\n }\n }\n }\n\n // If preferred horizontal alignment is possible\n if (!alignments[horizontalAlignment]) {\n const oppositeAlignment = horizontalAlignment === 'left' ? 'right' : 'left';\n if (alignments[oppositeAlignment]) {\n horizontalAlignment = oppositeAlignment;\n } else {\n // Determine which side has most space and cutoff at correct height\n if (alignments.spaceOnLeft > alignments.spaceOnRight) {\n horizontalAlignment = 'right';\n idealWidth += alignments.spaceOnLeft;\n idealXPos -= alignments.spaceOnLeft;\n } else {\n horizontalAlignment = 'left';\n idealWidth += alignments.spaceOnRight;\n }\n }\n }\n\n if (verticalAlignment === 'bottom') {\n idealYPos =\n idealYPos - dropdownBRect.height + (this.options.coverTrigger ? triggerBRect.height : 0);\n }\n if (horizontalAlignment === 'right') {\n idealXPos = idealXPos - dropdownBRect.width + triggerBRect.width;\n }\n return {\n x: idealXPos,\n y: idealYPos,\n verticalAlignment: verticalAlignment,\n horizontalAlignment: horizontalAlignment,\n height: idealHeight,\n width: idealWidth\n };\n }\n\n _animateIn() {\n anim.remove(this.dropdownEl);\n anim({\n targets: this.dropdownEl,\n opacity: {\n value: [0, 1],\n easing: 'easeOutQuad'\n },\n scaleX: [0.3, 1],\n scaleY: [0.3, 1],\n duration: this.options.inDuration,\n easing: 'easeOutQuint',\n complete: (anim) => {\n if (this.options.autoFocus) this.dropdownEl.focus();\n // onOpenEnd callback\n if (typeof this.options.onOpenEnd === 'function') {\n this.options.onOpenEnd.call(this, this.el);\n }\n }\n });\n }\n\n _animateOut() {\n anim.remove(this.dropdownEl);\n anim({\n targets: this.dropdownEl,\n opacity: {\n value: 0,\n easing: 'easeOutQuint'\n },\n scaleX: 0.3,\n scaleY: 0.3,\n duration: this.options.outDuration,\n easing: 'easeOutQuint',\n complete: (anim) => {\n this._resetDropdownStyles();\n // onCloseEnd callback\n if (typeof this.options.onCloseEnd === 'function') {\n this.options.onCloseEnd.call(this, this.el);\n }\n }\n });\n }\n\n private _getClosestAncestor(el: HTMLElement, condition: Function): HTMLElement {\n let ancestor = el.parentNode;\n while (ancestor !== null && ancestor !== document) {\n if (condition(ancestor)) {\n return <HTMLElement>ancestor;\n }\n ancestor = ancestor.parentElement;\n }\n return null;\n };\n\n _placeDropdown() {\n // Container here will be closest ancestor with overflow: hidden\n let closestOverflowParent: HTMLElement = this._getClosestAncestor(this.dropdownEl, (ancestor: HTMLElement) => {\n return !['HTML','BODY'].includes(ancestor.tagName) && getComputedStyle(ancestor).overflow !== 'visible';\n });\n // Fallback\n if (!closestOverflowParent) {\n closestOverflowParent = <HTMLElement>(!!this.dropdownEl.offsetParent\n ? this.dropdownEl.offsetParent\n : this.dropdownEl.parentNode);\n }\n\n if (getComputedStyle(closestOverflowParent).position === 'static')\n closestOverflowParent.style.position = 'relative';\n\n this._moveDropdown(closestOverflowParent);\n\n // Set width before calculating positionInfo\n const idealWidth = this.options.constrainWidth\n ? this.el.getBoundingClientRect().width\n : this.dropdownEl.getBoundingClientRect().width;\n this.dropdownEl.style.width = idealWidth + 'px';\n\n const positionInfo = this._getDropdownPosition(closestOverflowParent);\n this.dropdownEl.style.left = positionInfo.x + 'px';\n this.dropdownEl.style.top = positionInfo.y + 'px';\n this.dropdownEl.style.height = positionInfo.height + 'px';\n this.dropdownEl.style.width = positionInfo.width + 'px';\n this.dropdownEl.style.transformOrigin = `${\n positionInfo.horizontalAlignment === 'left' ? '0' : '100%'\n } ${positionInfo.verticalAlignment === 'top' ? '0' : '100%'}`;\n }\n\n /**\n * Open dropdown.\n */\n open = () => {\n if (this.isOpen) return;\n this.isOpen = true;\n // onOpenStart callback\n if (typeof this.options.onOpenStart === 'function') {\n this.options.onOpenStart.call(this, this.el);\n }\n // Reset styles\n this._resetDropdownStyles();\n this.dropdownEl.style.display = 'block';\n this._placeDropdown();\n this._animateIn();\n this._setupTemporaryEventHandlers();\n }\n\n /**\n * Close dropdown.\n */\n close = () => {\n if (!this.isOpen) return;\n this.isOpen = false;\n this.focusedIndex = -1;\n // onCloseStart callback\n if (typeof this.options.onCloseStart === 'function') {\n this.options.onCloseStart.call(this, this.el);\n }\n this._animateOut();\n this._removeTemporaryEventHandlers();\n if (this.options.autoFocus) {\n this.el.focus();\n }\n }\n\n /**\n * While dropdown is open, you can recalculate its dimensions if its contents have changed.\n */\n recalculateDimensions = () => {\n if (this.isOpen) {\n this.dropdownEl.style.width = '';\n this.dropdownEl.style.height = '';\n this.dropdownEl.style.left = '';\n this.dropdownEl.style.top = '';\n this.dropdownEl.style.transformOrigin = '';\n this._placeDropdown();\n }\n }\n\n}\n","import { Utils } from \"./utils\";\n\nexport class Forms {\n\n /**\n * Resizes the given TextArea after updating the\n * value content dynamically.\n * @param textarea TextArea to be resized\n */\n static textareaAutoResize(textarea: HTMLTextAreaElement){\n if (!textarea) {\n console.error('No textarea element found');\n return;\n }\n // Textarea Auto Resize\n let hiddenDiv: HTMLDivElement = document.querySelector('.hiddendiv');\n if (!hiddenDiv) {\n hiddenDiv = document.createElement('div');\n hiddenDiv.classList.add('hiddendiv', 'common');\n document.body.append(hiddenDiv);\n }\n const style = getComputedStyle(textarea);\n // Set font properties of hiddenDiv\n const fontFamily = style.fontFamily; //textarea.css('font-family');\n const fontSize = style.fontSize; //textarea.css('font-size');\n const lineHeight = style.lineHeight; //textarea.css('line-height');\n // Firefox can't handle padding shorthand.\n const paddingTop = style.paddingTop; //getComputedStyle(textarea).css('padding-top');\n const paddingRight = style.paddingRight; //textarea.css('padding-right');\n const paddingBottom = style.paddingBottom; //textarea.css('padding-bottom');\n const paddingLeft = style.paddingLeft; //textarea.css('padding-left');\n\n if (fontSize) hiddenDiv.style.fontSize = fontSize; //('font-size', fontSize);\n if (fontFamily) hiddenDiv.style.fontFamily = fontFamily; //css('font-family', fontFamily);\n if (lineHeight) hiddenDiv.style.lineHeight = lineHeight; //css('line-height', lineHeight);\n if (paddingTop) hiddenDiv.style.paddingTop = paddingTop; //ss('padding-top', paddingTop);\n if (paddingRight) hiddenDiv.style.paddingRight = paddingRight; //css('padding-right', paddingRight);\n if (paddingBottom) hiddenDiv.style.paddingBottom = paddingBottom; //css('padding-bottom', paddingBottom);\n if (paddingLeft) hiddenDiv.style.paddingLeft = paddingLeft; //css('padding-left', paddingLeft);\n\n // Set original-height, if none\n if (!textarea.hasAttribute('original-height'))\n textarea.setAttribute('original-height', textarea.getBoundingClientRect().height.toString());\n\n if (textarea.getAttribute('wrap') === 'off') {\n hiddenDiv.style.overflowWrap = 'normal'; // ('overflow-wrap', 'normal')\n hiddenDiv.style.whiteSpace = 'pre'; //.css('white-space', 'pre');\n }\n\n hiddenDiv.innerText = textarea.value + '\\n';\n\n const content = hiddenDiv.innerHTML.replace(/\\n/g, '<br>');\n hiddenDiv.innerHTML = content;\n\n // When textarea is hidden, width goes crazy.\n // Approximate with half of window size\n if (textarea.offsetWidth > 0 && textarea.offsetHeight > 0) {\n hiddenDiv.style.width = textarea.getBoundingClientRect().width +'px'; // ('width', textarea.width() + 'px');\n }\n else {\n hiddenDiv.style.width = (window.innerWidth / 2)+'px' //css('width', window.innerWidth / 2 + 'px');\n }\n\n // Resize if the new height is greater than the\n // original height of the textarea\n const originalHeight = parseInt(textarea.getAttribute('original-height'));\n const prevLength = parseInt(textarea.getAttribute('previous-length'));\n if (isNaN(originalHeight)) return;\n if (originalHeight <= hiddenDiv.clientHeight) {\n textarea.style.height = hiddenDiv.clientHeight+'px'; //css('height', hiddenDiv.innerHeight() + 'px');\n }\n else if (textarea.value.length < prevLength) {\n // In case the new height is less than original height, it\n // means the textarea has less text than before\n // So we set the height to the original one\n textarea.style.height = originalHeight+'px';\n }\n textarea.setAttribute('previous-length', textarea.value.length.toString());\n };\n\n static Init(){\n document.addEventListener(\"DOMContentLoaded\", () => {\n\n document.addEventListener('keyup', (e: KeyboardEvent) => {\n const target = <HTMLInputElement>e.target;\n // Radio and Checkbox focus class\n if (target instanceof HTMLInputElement && ['radio','checkbox'].includes(target.type)) {\n // TAB, check if tabbing to radio or checkbox.\n if (Utils.keys.TAB.includes(e.key)) {\n target.classList.add('tabbed');\n target.addEventListener('blur', e => target.classList.remove('tabbed'), {once: true});\n }\n }\n });\n\n document.querySelectorAll('.materialize-textarea').forEach((textArea: HTMLTextAreaElement) => {\n Forms.textareaAutoResize(textArea);\n });\n\n // File Input Path\n document.querySelectorAll('.file-field input[type=\"file\"]').forEach((fileInput: HTMLInputElement) => {\n Forms.InitFileInputPath(fileInput);\n });\n\n });\n }\n\n static InitTextarea(textarea: HTMLTextAreaElement){\n // Save Data in Element\n textarea.setAttribute('original-height', textarea.getBoundingClientRect().height.toString());\n textarea.setAttribute('previous-length', textarea.value.length.toString());\n Forms.textareaAutoResize(textarea);\n\n textarea.addEventListener('keyup', e => Forms.textareaAutoResize(textarea));\n textarea.addEventListener('keydown', e => Forms.textareaAutoResize(textarea));\n }\n\n static InitFileInputPath(fileInput: HTMLInputElement){\n fileInput.addEventListener('change', e => {\n const fileField = fileInput.closest('.file-field');\n const pathInput = <HTMLInputElement>fileField.querySelector('input.file-path');\n const files = fileInput.files;\n const filenames = [];\n for (let i = 0; i < files.length; i++) {\n filenames.push(files[i].name);\n }\n pathInput.value = filenames.join(', ');\n pathInput.dispatchEvent(new Event('change',{bubbles:true, cancelable:true, composed:true}));\n });\n }\n \n}\n","import anim from \"animejs\";\n\nimport { Utils } from \"./utils\";\nimport { BaseOptions, Component, InitElements, MElement } from \"./component\";\n\nexport interface MaterialboxOptions extends BaseOptions {\n /**\n * Transition in duration in milliseconds.\n * @default 275\n */\n inDuration: number;\n /**\n * Transition out duration in milliseconds.\n * @default 200\n */\n outDuration: number;\n /**\n * Callback function called before materialbox is opened.\n * @default null\n */\n onOpenStart: (el: Element) => void;\n /**\n * Callback function called after materialbox is opened.\n * @default null\n */\n onOpenEnd: (el: Element) => void;\n /**\n * Callback function called before materialbox is closed.\n * @default null\n */\n onCloseStart: (el: Element) => void;\n /**\n * Callback function called after materialbox is closed.\n * @default null\n */\n onCloseEnd: (el: Element) => void;\n}\n\nconst _defaults: MaterialboxOptions = {\n inDuration: 275,\n outDuration: 200,\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null,\n onCloseEnd: null\n};\n\nexport class Materialbox extends Component<MaterialboxOptions> {\n /** If the materialbox overlay is showing. */\n overlayActive: boolean;\n /** If the materialbox is no longer being animated. */\n doneAnimating: boolean;\n /** Caption, if specified. */\n caption: string;\n /** Original width of image. */\n originalWidth: number;\n /** Original height of image. */\n originalHeight: number;\n private originInlineStyles: string;\n private placeholder: HTMLElement;\n private _changedAncestorList: HTMLElement[];\n private newHeight: number;\n private newWidth: number;\n private windowWidth: number;\n private windowHeight: number;\n private attrWidth: string;\n private attrHeight: string;\n private _overlay: HTMLElement;\n private _photoCaption: HTMLElement;\n\n constructor(el: HTMLElement, options: Partial<MaterialboxOptions>) {\n super(el, options, Materialbox);\n (this.el as any).M_Materialbox = this;\n\n this.options = {\n ...Materialbox.defaults,\n ...options\n };\n \n this.overlayActive = false;\n this.doneAnimating = true;\n this.placeholder = document.createElement('div');\n this.placeholder.classList.add('material-placeholder');\n this.originalWidth = 0;\n this.originalHeight = 0;\n this.originInlineStyles = this.el.getAttribute('style');\n this.caption = this.el.getAttribute('data-caption') || '';\n // Wrap\n this.el.before(this.placeholder);\n this.placeholder.append(this.el);\n this._setupEventHandlers();\n }\n\n static get defaults(): MaterialboxOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of MaterialBox.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<MaterialboxOptions>): Materialbox;\n /**\n * Initializes instances of MaterialBox.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<MaterialboxOptions>): Materialbox[];\n /**\n * Initializes instances of MaterialBox.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<MaterialboxOptions> = {}): Materialbox | Materialbox[]{\n return super.init(els, options, Materialbox);\n }\n\n static getInstance(el: HTMLElement): Materialbox {\n return (el as any).M_Materialbox;\n }\n\n destroy() {\n this._removeEventHandlers();\n (this.el as any).M_Materialbox = undefined;\n // Unwrap image\n //this.placeholder.after(this.el).remove();\n this.placeholder.remove();\n this.el.removeAttribute('style');\n }\n\n _setupEventHandlers() {\n this.el.addEventListener('click', this._handleMaterialboxClick);\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('click', this._handleMaterialboxClick);\n }\n\n _handleMaterialboxClick = () => {\n // If already modal, return to original\n if (this.doneAnimating === false || (this.overlayActive && this.doneAnimating))\n this.close();\n else\n this.open();\n }\n\n _handleWindowScroll = () => {\n if (this.overlayActive) this.close();\n }\n\n _handleWindowResize = () => {\n if (this.overlayActive) this.close();\n }\n\n _handleWindowEscape = (e: KeyboardEvent) => {\n if (Utils.keys.ESC.includes(e.key) && this.doneAnimating && this.overlayActive) this.close();\n }\n\n _makeAncestorsOverflowVisible() {\n this._changedAncestorList = [];\n let ancestor = this.placeholder.parentNode;\n while (ancestor !== null && ancestor !== document) {\n const curr = <HTMLElement>ancestor;\n if (curr.style.overflow !== 'visible') {\n curr.style.overflow = 'visible';\n this._changedAncestorList.push(curr);\n }\n ancestor = ancestor.parentNode;\n }\n }\n\n private _offset(el: HTMLElement) {\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n return {\n top: box.top + window.pageYOffset - docElem.clientTop,\n left: box.left + window.pageXOffset - docElem.clientLeft\n };\n }\n\n _animateImageIn() {\n this.el.style.maxHeight = this.newHeight.toString()+'px';\n this.el.style.maxWidth = this.newWidth.toString()+'px';\n\n const animOptions = {\n targets: this.el, // image\n height: [this.originalHeight, this.newHeight],\n width: [this.originalWidth, this.newWidth],\n left:\n Utils.getDocumentScrollLeft() +\n this.windowWidth / 2 -\n this._offset(this.placeholder).left -\n this.newWidth / 2,\n top:\n Utils.getDocumentScrollTop() +\n this.windowHeight / 2 -\n this._offset(this.placeholder).top -\n this.newHeight / 2,\n duration: this.options.inDuration,\n easing: 'easeOutQuad',\n complete: () => {\n this.doneAnimating = true;\n // onOpenEnd callback\n if (typeof this.options.onOpenEnd === 'function') {\n this.options.onOpenEnd.call(this, this.el);\n }\n }\n };\n // Override max-width or max-height if needed\n //const elStyle = this.el.style;\n //console.log('mh', elStyle.maxHeight, '->', this.newHeight);\n //console.log('mw', elStyle.maxWidth, '->', this.newWidth);\n //if (elStyle.maxWidth !== 'none') animOptions.maxWidth = this.newWidth;\n //if (elStyle.maxHeight !== 'none') animOptions.maxHeight = this.newHeight;\n //console.log('>>> animate');\n //console.log(JSON.stringify(animOptions));\n anim(animOptions);\n }\n\n _animateImageOut() {\n const animOptions = {\n targets: this.el,\n width: this.originalWidth,\n height: this.originalHeight,\n left: 0,\n top: 0,\n duration: this.options.outDuration,\n easing: 'easeOutQuad',\n complete: () => {\n this.placeholder.style.height = '';\n this.placeholder.style.width = '';\n this.placeholder.style.position = '';\n this.placeholder.style.top = '';\n this.placeholder.style.left = '';\n // Revert to width or height attribute\n if (this.attrWidth) this.el.setAttribute('width', this.attrWidth.toString());\n if (this.attrHeight) this.el.setAttribute('height', this.attrHeight.toString());\n this.el.removeAttribute('style');\n this.originInlineStyles && this.el.setAttribute('style', this.originInlineStyles);\n // Remove class\n this.el.classList.remove('active');\n this.doneAnimating = true;\n // Remove overflow overrides on ancestors\n this._changedAncestorList.forEach(anchestor => anchestor.style.overflow = '');\n // onCloseEnd callback\n if (typeof this.options.onCloseEnd === 'function') {\n this.options.onCloseEnd.call(this, this.el);\n }\n }\n };\n anim(animOptions);\n }\n\n _updateVars() {\n this.windowWidth = window.innerWidth;\n this.windowHeight = window.innerHeight;\n this.caption = this.el.getAttribute('data-caption') || '';\n }\n\n /**\n * Open materialbox.\n */\n open = () => {\n this._updateVars();\n this.originalWidth = this.el.getBoundingClientRect().width;\n this.originalHeight = this.el.getBoundingClientRect().height;\n // Set states\n this.doneAnimating = false;\n this.el.classList.add('active');\n this.overlayActive = true;\n // onOpenStart callback\n if (typeof this.options.onOpenStart === 'function') {\n this.options.onOpenStart.call(this, this.el);\n }\n // Set positioning for placeholder\n this.placeholder.style.width = this.placeholder.getBoundingClientRect().width+'px';\n this.placeholder.style.height = this.placeholder.getBoundingClientRect().height+'px';\n this.placeholder.style.position = 'relative';\n this.placeholder.style.top = '0';\n this.placeholder.style.left = '0';\n this._makeAncestorsOverflowVisible();\n // Set css on origin\n this.el.style.position = 'absolute';\n this.el.style.zIndex = '1000';\n this.el.style.willChange = 'left, top, width, height';\n // Change from width or height attribute to css\n this.attrWidth = this.el.getAttribute('width');\n this.attrHeight = this.el.getAttribute('height');\n if (this.attrWidth) {\n this.el.style.width = this.attrWidth+'px';\n this.el.removeAttribute('width');\n }\n if (this.attrHeight) {\n this.el.style.width = this.attrHeight+'px';\n this.el.removeAttribute('height');\n }\n // Add overlay\n this._overlay = document.createElement('div');\n this._overlay.id = 'materialbox-overlay';\n this._overlay.style.opacity = '0';\n this._overlay.addEventListener('click', e => {\n if (this.doneAnimating) this.close();\n }, {once: true});\n // Put before in origin image to preserve z-index layering.\n this.el.before(this._overlay);\n // Set dimensions if needed\n const overlayOffset = this._overlay.getBoundingClientRect();\n this._overlay.style.width = this.windowWidth+'px';\n this._overlay.style.height = this.windowHeight+'px';\n this._overlay.style.left = -1 * overlayOffset.left+'px';\n this._overlay.style.top = -1 * overlayOffset.top+'px';\n anim.remove(this.el);\n anim.remove(this._overlay);\n // Animate Overlay\n anim({\n targets: this._overlay,\n opacity: 1,\n duration: this.options.inDuration,\n easing: 'easeOutQuad'\n });\n // Add and animate caption if it exists\n if (this.caption !== '') {\n if (this._photoCaption) anim.remove(this._photoCaption);\n this._photoCaption = document.createElement('div');\n this._photoCaption.classList.add('materialbox-caption');\n this._photoCaption.innerText = this.caption;\n document.body.append(this._photoCaption);\n this._photoCaption.style.display = 'inline';\n anim({\n targets: this._photoCaption,\n opacity: 1,\n duration: this.options.inDuration,\n easing: 'easeOutQuad'\n });\n }\n\n // Resize Image\n const widthPercent = this.originalWidth / this.windowWidth;\n const heightPercent = this.originalHeight / this.windowHeight;\n this.newWidth = 0;\n this.newHeight = 0;\n if (widthPercent > heightPercent) {\n // Width first\n const ratio = this.originalHeight / this.originalWidth;\n this.newWidth = this.windowWidth * 0.9;\n this.newHeight = this.windowWidth * 0.9 * ratio;\n }\n else {\n // Height first\n const ratio = this.originalWidth / this.originalHeight;\n this.newWidth = this.windowHeight * 0.9 * ratio;\n this.newHeight = this.windowHeight * 0.9;\n }\n this._animateImageIn();\n\n // Handle Exit triggers\n window.addEventListener('scroll', this._handleWindowScroll);\n window.addEventListener('resize', this._handleWindowResize);\n window.addEventListener('keyup', this._handleWindowEscape);\n }\n\n /**\n * Close materialbox.\n */\n close = () => {\n this._updateVars();\n this.doneAnimating = false;\n // onCloseStart callback\n if (typeof this.options.onCloseStart === 'function') {\n this.options.onCloseStart.call(this, this.el);\n }\n anim.remove(this.el);\n anim.remove(this._overlay);\n if (this.caption !== '') anim.remove(this._photoCaption);\n // disable exit handlers\n window.removeEventListener('scroll', this._handleWindowScroll);\n window.removeEventListener('resize', this._handleWindowResize);\n window.removeEventListener('keyup', this._handleWindowEscape);\n anim({\n targets: this._overlay,\n opacity: 0,\n duration: this.options.outDuration,\n easing: 'easeOutQuad',\n complete: () => {\n this.overlayActive = false;\n this._overlay.remove();\n }\n });\n this._animateImageOut();\n // Remove Caption + reset css settings on image\n if (this.caption !== '') {\n anim({\n targets: this._photoCaption,\n opacity: 0,\n duration: this.options.outDuration,\n easing: 'easeOutQuad',\n complete: () => {\n this._photoCaption.remove();\n }\n });\n }\n }\n}\n","import anim from \"animejs\";\n\nimport { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface ModalOptions extends BaseOptions {\n /**\n * Opacity of the modal overlay.\n * @default 0.5\n */\n opacity: number;\n /**\n * Transition in duration in milliseconds.\n * @default 250\n */\n inDuration: number;\n /**\n * Transition out duration in milliseconds.\n * @default 250\n */\n outDuration: number;\n /**\n * Prevent page from scrolling while modal is open.\n * @default true\n */\n preventScrolling: boolean;\n /**\n * Callback function called before modal is opened.\n * @default null\n */\n onOpenStart: (this: Modal, el: HTMLElement) => void;\n /**\n * Callback function called after modal is opened.\n * @default null\n */\n onOpenEnd: (this: Modal, el: HTMLElement) => void;\n /**\n * Callback function called before modal is closed.\n * @default null\n */\n onCloseStart: (el: HTMLElement) => void;\n /**\n * Callback function called after modal is closed.\n * @default null\n */\n onCloseEnd: (el: HTMLElement) => void;\n /**\n * Allow modal to be dismissed by keyboard or overlay click.\n * @default true\n */\n dismissible: boolean;\n /**\n * Starting top offset.\n * @default '4%'\n */\n startingTop: string;\n /**\n * Ending top offset.\n * @default '10%'\n */\n endingTop: string;\n}\n\nconst _defaults = {\n opacity: 0.5,\n inDuration: 250,\n outDuration: 250,\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null,\n onCloseEnd: null,\n preventScrolling: true,\n dismissible: true,\n startingTop: '4%',\n endingTop: '10%'\n};\n\nexport class Modal extends Component<ModalOptions> {\n\n static _modalsOpen: number;\n static _count: number;\n \n /**\n * ID of the modal element.\n */\n id: string;\n /**\n * If the modal is open.\n */\n isOpen: boolean;\n \n private _openingTrigger: any;\n private _overlay: HTMLElement;\n private _nthModalOpened: number;\n\n constructor(el: HTMLElement, options: Partial<ModalOptions>) {\n super(el, options, Modal);\n (this.el as any).M_Modal = this;\n\n this.options = {\n ...Modal.defaults,\n ...options\n };\n \n this.isOpen = false;\n this.id = this.el.id;\n this._openingTrigger = undefined;\n this._overlay = document.createElement('div');\n this._overlay.classList.add('modal-overlay');\n this.el.tabIndex = 0;\n this._nthModalOpened = 0;\n Modal._count++;\n this._setupEventHandlers();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n /**\n * Initializes instance of Modal.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<ModalOptions>): Modal;\n /**\n * Initializes instances of Modal.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<ModalOptions>): Modal[];\n /**\n * Initializes instances of Modal.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<ModalOptions> = {}): Modal | Modal[] {\n return super.init(els, options, Modal);\n }\n\n static getInstance(el: HTMLElement): Modal {\n return (el as any).M_Modal;\n }\n\n destroy() {\n Modal._count--;\n this._removeEventHandlers();\n this.el.removeAttribute('style');\n this._overlay.remove();\n (this.el as any).M_Modal = undefined;\n }\n\n _setupEventHandlers() {\n if (Modal._count === 1) {\n document.body.addEventListener('click', this._handleTriggerClick);\n }\n this._overlay.addEventListener('click', this._handleOverlayClick);\n this.el.addEventListener('click', this._handleModalCloseClick);\n }\n\n _removeEventHandlers() {\n if (Modal._count === 0) {\n document.body.removeEventListener('click', this._handleTriggerClick);\n }\n this._overlay.removeEventListener('click', this._handleOverlayClick);\n this.el.removeEventListener('click', this._handleModalCloseClick);\n }\n\n _handleTriggerClick = (e: MouseEvent) => {\n const trigger = (e.target as HTMLElement).closest('.modal-trigger');\n if (!trigger) return;\n const modalId = Utils.getIdFromTrigger(trigger as HTMLElement);\n const modalInstance = (document.getElementById(modalId) as any).M_Modal;\n if (modalInstance) modalInstance.open(trigger);\n e.preventDefault();\n }\n\n _handleOverlayClick = () => {\n if (this.options.dismissible) this.close();\n }\n\n _handleModalCloseClick = (e: MouseEvent) => {\n const closeTrigger = (e.target as HTMLElement).closest('.modal-close');\n if (closeTrigger) this.close();\n }\n\n _handleKeydown = (e: KeyboardEvent) => {\n if (Utils.keys.ESC.includes(e.key) && this.options.dismissible) this.close();\n }\n\n _handleFocus = (e: FocusEvent) => {\n // Only trap focus if this modal is the last model opened (prevents loops in nested modals).\n if (!this.el.contains(e.target as HTMLElement) && this._nthModalOpened === Modal._modalsOpen) {\n this.el.focus();\n }\n }\n\n _animateIn() {\n // Set initial styles\n this.el.style.display = 'block';\n this.el.style.opacity = '0';\n this._overlay.style.display = 'block';\n this._overlay.style.opacity = '0';\n // Animate overlay\n anim({\n targets: this._overlay,\n opacity: this.options.opacity,\n duration: this.options.inDuration,\n easing: 'easeOutQuad'\n });\n // Define modal animation options\n const enterAnimOptions = {\n targets: this.el,\n duration: this.options.inDuration,\n easing: 'easeOutCubic',\n // Handle modal onOpenEnd callback\n complete: () => {\n if (typeof this.options.onOpenEnd === 'function') {\n this.options.onOpenEnd.call(this, this.el, this._openingTrigger);\n }\n }\n };\n // Bottom sheet animation\n if (this.el.classList.contains('bottom-sheet')) {\n enterAnimOptions['bottom'] = 0;\n enterAnimOptions['opacity'] = 1;\n }\n // Normal modal animation\n else {\n enterAnimOptions['top'] = [this.options.startingTop, this.options.endingTop];\n enterAnimOptions['opacity'] = 1;\n enterAnimOptions['scaleX'] = [0.8, 1];\n enterAnimOptions['scaleY'] = [0.8, 1];\n }\n anim(enterAnimOptions);\n }\n\n _animateOut() {\n // Animate overlay\n anim({\n targets: this._overlay,\n opacity: 0,\n duration: this.options.outDuration,\n easing: 'easeOutQuart'\n });\n // Define modal animation options\n const exitAnimOptions = {\n targets: this.el,\n duration: this.options.outDuration,\n easing: 'easeOutCubic',\n // Handle modal ready callback\n complete: () => {\n this.el.style.display = 'none';\n this._overlay.remove();\n // Call onCloseEnd callback\n if (typeof this.options.onCloseEnd === 'function') {\n this.options.onCloseEnd.call(this, this.el);\n }\n }\n };\n // Bottom sheet animation\n if (this.el.classList.contains('bottom-sheet')) {\n exitAnimOptions['bottom'] = '-100%';\n exitAnimOptions['opacity'] = 0;\n }\n // Normal modal animation\n else {\n exitAnimOptions['top'] = [this.options.endingTop, this.options.startingTop];\n exitAnimOptions['opacity'] = 0;\n exitAnimOptions['scaleX'] = 0.8;\n exitAnimOptions['scaleY'] = 0.8;\n }\n anim(exitAnimOptions);\n }\n\n /**\n * Open modal.\n */\n open = (trigger?: HTMLElement): Modal => {\n if (this.isOpen) return;\n this.isOpen = true;\n Modal._modalsOpen++;\n this._nthModalOpened = Modal._modalsOpen;\n // Set Z-Index based on number of currently open modals\n this._overlay.style.zIndex = (1000 + Modal._modalsOpen * 2).toString();\n this.el.style.zIndex = (1000 + Modal._modalsOpen * 2 + 1).toString();\n // Set opening trigger, undefined indicates modal was opened by javascript\n this._openingTrigger = !!trigger ? trigger : undefined;\n // onOpenStart callback\n if (typeof this.options.onOpenStart === 'function') {\n this.options.onOpenStart.call(this, this.el, this._openingTrigger);\n }\n if (this.options.preventScrolling) {\n document.body.style.overflow = 'hidden';\n }\n this.el.classList.add('open');\n this.el.insertAdjacentElement('afterend', this._overlay);\n if (this.options.dismissible) {\n document.addEventListener('keydown', this._handleKeydown);\n document.addEventListener('focus', this._handleFocus, true);\n }\n anim.remove(this.el);\n anim.remove(this._overlay);\n this._animateIn();\n // Focus modal\n this.el.focus();\n return this;\n }\n\n /**\n * Close modal.\n */\n close = () => {\n if (!this.isOpen) return;\n this.isOpen = false;\n Modal._modalsOpen--;\n this._nthModalOpened = 0;\n // Call onCloseStart callback\n if (typeof this.options.onCloseStart === 'function') {\n this.options.onCloseStart.call(this, this.el);\n }\n this.el.classList.remove('open');\n // Enable body scrolling only if there are no more modals open.\n if (Modal._modalsOpen === 0) {\n document.body.style.overflow = '';\n }\n if (this.options.dismissible) {\n document.removeEventListener('keydown', this._handleKeydown);\n document.removeEventListener('focus', this._handleFocus, true);\n }\n anim.remove(this.el);\n anim.remove(this._overlay);\n this._animateOut();\n return this;\n }\n\n static{\n Modal._modalsOpen = 0;\n Modal._count = 0;\n }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface ParallaxOptions extends BaseOptions {\n /**\n * The minimum width of the screen, in pixels, where the parallax functionality starts working.\n * @default 0\n */\n responsiveThreshold: number;\n}\n\nlet _defaults: ParallaxOptions = {\n responsiveThreshold: 0 // breakpoint for swipeable\n};\n\nexport class Parallax extends Component<ParallaxOptions> {\n private _enabled: boolean;\n private _img: HTMLImageElement;\n static _parallaxes: Parallax[] = [];\n static _handleScrollThrottled: () => any;\n static _handleWindowResizeThrottled: () => any;\n\n constructor(el: HTMLElement, options: Partial<ParallaxOptions>) {\n super(el, options, Parallax);\n (this.el as any).M_Parallax = this;\n\n this.options = {\n ...Parallax.defaults,\n ...options\n };\n \n this._enabled = window.innerWidth > this.options.responsiveThreshold;\n this._img = this.el.querySelector('img');\n this._updateParallax();\n this._setupEventHandlers();\n this._setupStyles();\n Parallax._parallaxes.push(this);\n }\n\n static get defaults(): ParallaxOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Parallax.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<ParallaxOptions>): Parallax;\n /**\n * Initializes instances of Parallax.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<ParallaxOptions>): Parallax[];\n /**\n * Initializes instances of Parallax.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<ParallaxOptions> = {}): Parallax | Parallax[] {\n return super.init(els, options, Parallax);\n }\n\n static getInstance(el: HTMLElement): Parallax {\n return (el as any).M_Parallax;\n }\n\n destroy() {\n Parallax._parallaxes.splice(Parallax._parallaxes.indexOf(this), 1);\n this._img.style.transform = '';\n this._removeEventHandlers();\n (this.el as any).M_Parallax = undefined;\n }\n\n static _handleScroll() {\n for (let i = 0; i < Parallax._parallaxes.length; i++) {\n let parallaxInstance = Parallax._parallaxes[i];\n parallaxInstance._updateParallax.call(parallaxInstance);\n }\n }\n\n static _handleWindowResize() {\n for (let i = 0; i < Parallax._parallaxes.length; i++) {\n let parallaxInstance = Parallax._parallaxes[i];\n parallaxInstance._enabled =\n window.innerWidth > parallaxInstance.options.responsiveThreshold;\n }\n }\n\n _setupEventHandlers() {\n this._img.addEventListener('load', this._handleImageLoad);\n if (Parallax._parallaxes.length === 0) {\n if (!Parallax._handleScrollThrottled){\n Parallax._handleScrollThrottled = Utils.throttle(Parallax._handleScroll, 5);\n }\n if (!Parallax._handleWindowResizeThrottled){\n Parallax._handleWindowResizeThrottled = Utils.throttle(Parallax._handleWindowResize, 5);\n }\n window.addEventListener('scroll', Parallax._handleScrollThrottled);\n window.addEventListener('resize', Parallax._handleWindowResizeThrottled);\n }\n }\n\n _removeEventHandlers() {\n this._img.removeEventListener('load', this._handleImageLoad);\n if (Parallax._parallaxes.length === 0) {\n window.removeEventListener('scroll', Parallax._handleScrollThrottled);\n window.removeEventListener('resize', Parallax._handleWindowResizeThrottled);\n }\n }\n\n _setupStyles() {\n this._img.style.opacity = '1';\n }\n\n _handleImageLoad = () => {\n this._updateParallax();\n }\n\n private _offset(el: Element) {\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n return {\n top: box.top + window.pageYOffset - docElem.clientTop,\n left: box.left + window.pageXOffset - docElem.clientLeft\n };\n }\n\n _updateParallax() {\n const containerHeight = this.el.getBoundingClientRect().height > 0 ? (this.el.parentNode as any).offsetHeight : 500;\n const imgHeight = this._img.offsetHeight;\n const parallaxDist = imgHeight - containerHeight;\n const bottom = this._offset(this.el).top + containerHeight;\n const top = this._offset(this.el).top;\n const scrollTop = Utils.getDocumentScrollTop();\n const windowHeight = window.innerHeight;\n const windowBottom = scrollTop + windowHeight;\n const percentScrolled = (windowBottom - top) / (containerHeight + windowHeight);\n const parallax = parallaxDist * percentScrolled;\n\n if (!this._enabled) {\n this._img.style.transform = '';\n }\n else if (bottom > scrollTop && top < scrollTop + windowHeight) {\n this._img.style.transform = `translate3D(-50%, ${parallax}px, 0)`;\n }\n }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface PushpinOptions extends BaseOptions {\n /**\n * The distance in pixels from the top of the page where\n * the element becomes fixed.\n * @default 0\n */\n top: number;\n /**\n * The distance in pixels from the top of the page where\n * the elements stops being fixed.\n * @default Infinity\n */\n bottom: number;\n /**\n * The offset from the top the element will be fixed at.\n * @default 0\n */\n offset: number;\n /**\n * Callback function called when pushpin position changes.\n * You are provided with a position string.\n * @default null\n */\n onPositionChange: (position: \"pinned\" | \"pin-top\" | \"pin-bottom\") => void;\n}\n\nlet _defaults = {\n top: 0,\n bottom: Infinity,\n offset: 0,\n onPositionChange: null\n};\n\nexport class Pushpin extends Component<PushpinOptions> {\n static _pushpins: any[];\n originalOffset: any;\n\n constructor(el: HTMLElement, options: Partial<PushpinOptions>) {\n super(el, options, Pushpin);\n (this.el as any).M_Pushpin = this;\n\n this.options = {\n ...Pushpin.defaults,\n ...options\n };\n\n this.originalOffset = (this.el as HTMLElement).offsetTop;\n Pushpin._pushpins.push(this);\n this._setupEventHandlers();\n this._updatePosition();\n }\n\n static get defaults(): PushpinOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Pushpin.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<PushpinOptions>): Pushpin;\n /**\n * Initializes instances of Pushpin.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<PushpinOptions>): Pushpin[];\n /**\n * Initializes instances of Pushpin.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<PushpinOptions> = {}): Pushpin | Pushpin[] {\n return super.init(els, options, Pushpin);\n }\n\n static getInstance(el: HTMLElement): Pushpin {\n return (el as any).M_Pushpin;\n }\n\n destroy() {\n (this.el as HTMLElement).style.top = null;\n this._removePinClasses();\n // Remove pushpin Inst\n let index = Pushpin._pushpins.indexOf(this);\n Pushpin._pushpins.splice(index, 1);\n if (Pushpin._pushpins.length === 0) {\n this._removeEventHandlers();\n }\n (this.el as any).M_Pushpin = undefined;\n }\n\n static _updateElements() {\n for (let elIndex in Pushpin._pushpins) {\n let pInstance = Pushpin._pushpins[elIndex];\n pInstance._updatePosition();\n }\n }\n\n _setupEventHandlers() {\n document.addEventListener('scroll', Pushpin._updateElements);\n }\n\n _removeEventHandlers() {\n document.removeEventListener('scroll', Pushpin._updateElements);\n }\n\n _updatePosition() {\n let scrolled = Utils.getDocumentScrollTop() + this.options.offset;\n\n if (\n this.options.top <= scrolled &&\n this.options.bottom >= scrolled &&\n !this.el.classList.contains('pinned')\n ) {\n this._removePinClasses();\n (this.el as HTMLElement).style.top = `${this.options.offset}px`;\n this.el.classList.add('pinned');\n\n // onPositionChange callback\n if (typeof this.options.onPositionChange === 'function') {\n this.options.onPositionChange.call(this, 'pinned');\n }\n }\n\n // Add pin-top (when scrolled position is above top)\n if (scrolled < this.options.top && !this.el.classList.contains('pin-top')) {\n this._removePinClasses();\n (this.el as HTMLElement).style.top = '0';\n this.el.classList.add('pin-top');\n\n // onPositionChange callback\n if (typeof this.options.onPositionChange === 'function') {\n this.options.onPositionChange.call(this, 'pin-top');\n }\n }\n\n // Add pin-bottom (when scrolled position is below bottom)\n if (scrolled > this.options.bottom && !this.el.classList.contains('pin-bottom')) {\n this._removePinClasses();\n this.el.classList.add('pin-bottom');\n (this.el as HTMLElement).style.top = `${this.options.bottom - this.originalOffset}px`;\n\n // onPositionChange callback\n if (typeof this.options.onPositionChange === 'function') {\n this.options.onPositionChange.call(this, 'pin-bottom');\n }\n }\n }\n\n _removePinClasses() {\n // IE 11 bug (can't remove multiple classes in one line)\n this.el.classList.remove('pin-top');\n this.el.classList.remove('pinned');\n this.el.classList.remove('pin-bottom');\n }\n\n static {\n Pushpin._pushpins = [];\n }\n}\n","import anim from \"animejs\";\n\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface RangeOptions extends BaseOptions {};\n\nconst _defaults: RangeOptions = {};\n\n// TODO: !!!!!\n\nexport class Range extends Component<RangeOptions> {\n declare el: HTMLInputElement;\n private _mousedown: boolean;\n value: HTMLElement;\n thumb: HTMLElement;\n\n constructor(el: HTMLInputElement, options: Partial<RangeOptions>) {\n super(el, options, Range);\n (this.el as any).M_Range = this;\n\n this.options = {\n ...Range.defaults,\n ...options\n };\n\n this._mousedown = false;\n this._setupThumb();\n this._setupEventHandlers();\n }\n\n static get defaults(): RangeOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Range.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLInputElement, options?: Partial<RangeOptions>): Range;\n /**\n * Initializes instances of Range.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<HTMLInputElement | MElement>, options?: Partial<RangeOptions>): Range[];\n /**\n * Initializes instances of Range.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLInputElement | InitElements<HTMLInputElement | MElement>, options: Partial<RangeOptions> = {}): Range | Range[] {\n return super.init(els, options, Range);\n }\n\n static getInstance(el: HTMLInputElement): Range {\n return (el as any).M_Range;\n }\n\n destroy() {\n this._removeEventHandlers();\n this._removeThumb();\n (this.el as any).M_Range = undefined;\n }\n\n _setupEventHandlers() {\n this.el.addEventListener('change', this._handleRangeChange);\n this.el.addEventListener('mousedown', this._handleRangeMousedownTouchstart);\n this.el.addEventListener('touchstart', this._handleRangeMousedownTouchstart);\n this.el.addEventListener('input', this._handleRangeInputMousemoveTouchmove);\n this.el.addEventListener('mousemove', this._handleRangeInputMousemoveTouchmove);\n this.el.addEventListener('touchmove', this._handleRangeInputMousemoveTouchmove);\n this.el.addEventListener('mouseup', this._handleRangeMouseupTouchend);\n this.el.addEventListener('touchend', this._handleRangeMouseupTouchend);\n this.el.addEventListener('blur', this._handleRangeBlurMouseoutTouchleave);\n this.el.addEventListener('mouseout', this._handleRangeBlurMouseoutTouchleave);\n this.el.addEventListener('touchleave', this._handleRangeBlurMouseoutTouchleave);\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('change', this._handleRangeChange);\n this.el.removeEventListener('mousedown', this._handleRangeMousedownTouchstart);\n this.el.removeEventListener('touchstart', this._handleRangeMousedownTouchstart);\n this.el.removeEventListener('input', this._handleRangeInputMousemoveTouchmove);\n this.el.removeEventListener('mousemove', this._handleRangeInputMousemoveTouchmove);\n this.el.removeEventListener('touchmove', this._handleRangeInputMousemoveTouchmove);\n this.el.removeEventListener('mouseup', this._handleRangeMouseupTouchend);\n this.el.removeEventListener('touchend', this._handleRangeMouseupTouchend);\n this.el.removeEventListener('blur', this._handleRangeBlurMouseoutTouchleave);\n this.el.removeEventListener('mouseout', this._handleRangeBlurMouseoutTouchleave);\n this.el.removeEventListener('touchleave', this._handleRangeBlurMouseoutTouchleave);\n }\n\n _handleRangeChange = () => {\n this.value.innerHTML = this.el.value;\n if (!this.thumb.classList.contains('active')) {\n this._showRangeBubble();\n }\n const offsetLeft = this._calcRangeOffset();\n this.thumb.classList.add('active');\n this.thumb.style.left = offsetLeft+'px';\n }\n\n _handleRangeMousedownTouchstart = (e: MouseEvent | TouchEvent) => {\n // Set indicator value\n this.value.innerHTML = this.el.value;\n this._mousedown = true;\n this.el.classList.add('active');\n if (!this.thumb.classList.contains('active')) {\n this._showRangeBubble();\n }\n if (e.type !== 'input') {\n const offsetLeft = this._calcRangeOffset();\n this.thumb.classList.add('active');\n this.thumb.style.left = offsetLeft+'px';\n }\n }\n\n _handleRangeInputMousemoveTouchmove = () => {\n if (this._mousedown) {\n if (!this.thumb.classList.contains('active')) {\n this._showRangeBubble();\n }\n const offsetLeft = this._calcRangeOffset();\n this.thumb.classList.add('active');\n this.thumb.style.left = offsetLeft+'px';\n this.value.innerHTML = this.el.value;\n }\n }\n\n _handleRangeMouseupTouchend = () => {\n this._mousedown = false;\n this.el.classList.remove('active');\n }\n\n _handleRangeBlurMouseoutTouchleave = () => {\n if (!this._mousedown) {\n const paddingLeft = parseInt(getComputedStyle(this.el).paddingLeft);\n const marginLeft = 7 + paddingLeft + 'px';\n if (this.thumb.classList.contains('active')) {\n anim.remove(this.thumb);\n anim({\n targets: this.thumb,\n height: 0,\n width: 0,\n top: 10,\n easing: 'easeOutQuad',\n marginLeft: marginLeft,\n duration: 100\n });\n }\n this.thumb.classList.remove('active');\n }\n }\n\n _setupThumb() {\n this.thumb = document.createElement('span');\n this.value = document.createElement('span');\n this.thumb.classList.add('thumb');\n this.value.classList.add('value');\n this.thumb.append(this.value);\n this.el.after(this.thumb);\n }\n\n _removeThumb() {\n this.thumb.remove();\n }\n\n _showRangeBubble() {\n const paddingLeft = parseInt(getComputedStyle(this.thumb.parentElement).paddingLeft);\n const marginLeft = -7 + paddingLeft + 'px'; // TODO: fix magic number?\n anim.remove(this.thumb);\n anim({\n targets: this.thumb,\n height: 30,\n width: 30,\n top: -30,\n marginLeft: marginLeft,\n duration: 300,\n easing: 'easeOutQuint'\n });\n }\n\n _calcRangeOffset(): number {\n const width = this.el.getBoundingClientRect().width - 15;\n const max = parseFloat(this.el.getAttribute('max')) || 100; // Range default max\n const min = parseFloat(this.el.getAttribute('min')) || 0; // Range default min\n const percent = (parseFloat(this.el.value) - min) / (max - min);\n return percent * width;\n }\n\n /**\n * Initializes every range input in the current document.\n */\n static Init(){\n Range.init((document.querySelectorAll('input[type=range]')) as NodeListOf<HTMLInputElement>, {});\n }\n}\n","import anim from \"animejs\";\n\nimport { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface ScrollSpyOptions extends BaseOptions {\n /**\n * Throttle of scroll handler.\n * @default 100\n */\n throttle: number;\n /**\n * Offset for centering element when scrolled to.\n * @default 200\n */\n scrollOffset: number;\n /**\n * Class applied to active elements.\n * @default 'active'\n */\n activeClass: string;\n /**\n * Used to find active element.\n * @default id => 'a[href=\"#' + id + '\"]'\n */\n getActiveElement: (id: string) => string;\n};\n\nlet _defaults: ScrollSpyOptions = {\n throttle: 100,\n scrollOffset: 200, // offset - 200 allows elements near bottom of page to scroll\n activeClass: 'active',\n getActiveElement: (id: string): string => { return 'a[href=\"#'+id+'\"]'; }\n};\n\nexport class ScrollSpy extends Component<ScrollSpyOptions> {\n static _elements: ScrollSpy[];\n static _count: number;\n static _increment: number;\n tickId: number;\n id: any;\n static _elementsInView: ScrollSpy[];\n static _visibleElements: any[];\n static _ticks: number;\n\n constructor(el: HTMLElement, options: Partial<ScrollSpyOptions>) {\n super(el, options, ScrollSpy);\n (this.el as any).M_ScrollSpy = this;\n\n this.options = {\n ...ScrollSpy.defaults,\n ...options\n };\n\n ScrollSpy._elements.push(this);\n ScrollSpy._count++;\n ScrollSpy._increment++;\n this.tickId = -1;\n this.id = ScrollSpy._increment;\n this._setupEventHandlers();\n this._handleWindowScroll();\n }\n\n static get defaults(): ScrollSpyOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of ScrollSpy.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<ScrollSpyOptions>): ScrollSpy;\n /**\n * Initializes instances of ScrollSpy.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<ScrollSpyOptions>): ScrollSpy[];\n /**\n * Initializes instances of ScrollSpy.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<ScrollSpyOptions> = {}): ScrollSpy | ScrollSpy[] {\n return super.init(els, options, ScrollSpy);\n }\n\n static getInstance(el: HTMLElement): ScrollSpy {\n return (el as any).M_ScrollSpy;\n }\n\n destroy() {\n ScrollSpy._elements.splice(ScrollSpy._elements.indexOf(this), 1);\n ScrollSpy._elementsInView.splice(ScrollSpy._elementsInView.indexOf(this), 1);\n ScrollSpy._visibleElements.splice(ScrollSpy._visibleElements.indexOf(this.el), 1);\n ScrollSpy._count--;\n this._removeEventHandlers();\n const actElem = document.querySelector(this.options.getActiveElement(this.el.id));\n actElem.classList.remove(this.options.activeClass);\n (this.el as any).M_ScrollSpy = undefined;\n }\n\n _setupEventHandlers() {\n if (ScrollSpy._count === 1) {\n window.addEventListener('scroll', this._handleWindowScroll);\n window.addEventListener('resize', this._handleThrottledResize);\n document.body.addEventListener('click', this._handleTriggerClick);\n }\n }\n\n _removeEventHandlers() {\n if (ScrollSpy._count === 0) {\n window.removeEventListener('scroll', this._handleWindowScroll);\n window.removeEventListener('resize', this._handleThrottledResize);\n document.body.removeEventListener('click', this._handleTriggerClick);\n }\n }\n\n _handleThrottledResize: () => void = Utils.throttle(function(){ this._handleWindowScroll(); }, 200).bind(this); \n\n _handleTriggerClick = (e: MouseEvent) => {\n const trigger = e.target;\n for (let i = ScrollSpy._elements.length - 1; i >= 0; i--) {\n const scrollspy = ScrollSpy._elements[i];\n\n const x = document.querySelector('a[href=\"#'+scrollspy.el.id+'\"]');\n if (trigger === x) {\n e.preventDefault();\n const offset = ScrollSpy._offset(scrollspy.el).top + 1;\n\n anim({\n targets: [document.documentElement, document.body],\n scrollTop: offset - scrollspy.options.scrollOffset,\n duration: 400,\n easing: 'easeOutCubic'\n });\n\n break;\n }\n }\n }\n\n _handleWindowScroll = () => {\n // unique tick id\n ScrollSpy._ticks++;\n\n // viewport rectangle\n let top = Utils.getDocumentScrollTop(),\n left = Utils.getDocumentScrollLeft(),\n right = left + window.innerWidth,\n bottom = top + window.innerHeight;\n\n // determine which elements are in view\n let intersections = ScrollSpy._findElements(top, right, bottom, left);\n for (let i = 0; i < intersections.length; i++) {\n let scrollspy = intersections[i];\n let lastTick = scrollspy.tickId;\n if (lastTick < 0) {\n // entered into view\n scrollspy._enter();\n }\n\n // update tick id\n scrollspy.tickId = ScrollSpy._ticks;\n }\n\n for (let i = 0; i < ScrollSpy._elementsInView.length; i++) {\n let scrollspy = ScrollSpy._elementsInView[i];\n let lastTick = scrollspy.tickId;\n if (lastTick >= 0 && lastTick !== ScrollSpy._ticks) {\n // exited from view\n scrollspy._exit();\n scrollspy.tickId = -1;\n }\n }\n // remember elements in view for next tick\n ScrollSpy._elementsInView = intersections;\n }\n\n static _offset(el) {\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n return {\n top: box.top + window.pageYOffset - docElem.clientTop,\n left: box.left + window.pageXOffset - docElem.clientLeft\n };\n }\n\n static _findElements(top: number, right: number, bottom: number, left: number): ScrollSpy[] {\n let hits = [];\n for (let i = 0; i < ScrollSpy._elements.length; i++) {\n let scrollspy = ScrollSpy._elements[i];\n let currTop = top + scrollspy.options.scrollOffset || 200;\n\n if (scrollspy.el.getBoundingClientRect().height > 0) {\n let elTop = ScrollSpy._offset(scrollspy.el).top,\n elLeft = ScrollSpy._offset(scrollspy.el).left,\n elRight = elLeft + scrollspy.el.getBoundingClientRect().width,\n elBottom = elTop + scrollspy.el.getBoundingClientRect().height;\n\n let isIntersect = !(\n elLeft > right ||\n elRight < left ||\n elTop > bottom ||\n elBottom < currTop\n );\n\n if (isIntersect) {\n hits.push(scrollspy);\n }\n }\n }\n return hits;\n }\n\n _enter() {\n ScrollSpy._visibleElements = ScrollSpy._visibleElements.filter(value => value.getBoundingClientRect().height !== 0);\n\n if (ScrollSpy._visibleElements[0]) {\n const actElem = document.querySelector(this.options.getActiveElement(ScrollSpy._visibleElements[0].id));\n actElem?.classList.remove(this.options.activeClass);\n\n if (ScrollSpy._visibleElements[0].M_ScrollSpy && this.id < ScrollSpy._visibleElements[0].M_ScrollSpy.id) {\n ScrollSpy._visibleElements.unshift(this.el);\n }\n else {\n ScrollSpy._visibleElements.push(this.el);\n }\n }\n else {\n ScrollSpy._visibleElements.push(this.el);\n }\n const selector = this.options.getActiveElement(ScrollSpy._visibleElements[0].id);\n document.querySelector(selector)?.classList.add(this.options.activeClass);\n }\n\n _exit() {\n ScrollSpy._visibleElements = ScrollSpy._visibleElements.filter(value => value.getBoundingClientRect().height !== 0);\n\n if (ScrollSpy._visibleElements[0]) {\n const actElem = document.querySelector(this.options.getActiveElement(ScrollSpy._visibleElements[0].id));\n actElem?.classList.remove(this.options.activeClass);\n\n ScrollSpy._visibleElements = ScrollSpy._visibleElements.filter((x) => x.id != this.el.id);\n\n if (ScrollSpy._visibleElements[0]) {\n // Check if empty\n const selector = this.options.getActiveElement(ScrollSpy._visibleElements[0].id);\n document.querySelector(selector)?.classList.add(this.options.activeClass);\n }\n }\n }\n\n static {\n ScrollSpy._elements = [];\n ScrollSpy._elementsInView = [];\n ScrollSpy._visibleElements = []; // Array.<cash>\n ScrollSpy._count = 0;\n ScrollSpy._increment = 0;\n ScrollSpy._ticks = 0;\n }\n}\n","import { Utils } from \"./utils\";\nimport { Dropdown, DropdownOptions } from \"./dropdown\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface FormSelectOptions extends BaseOptions {\n /**\n * Classes to be added to the select wrapper element.\n * @default \"\"\n */\n classes: string;\n /**\n * Pass options object to select dropdown initialization.\n * @default {}\n */\n dropdownOptions: Partial<DropdownOptions>;\n}\n\nlet _defaults: FormSelectOptions = {\n classes: '',\n dropdownOptions: {}\n};\n\ntype ValueStruct = {\n el: HTMLOptionElement,\n optionEl: HTMLElement,\n}\n\nexport class FormSelect extends Component<FormSelectOptions> {\n declare el: HTMLSelectElement;\n /** If this is a multiple select. */\n isMultiple: boolean;\n /**\n * Label associated with the current select element.\n * Is \"null\", if not detected.\n */\n labelEl: HTMLLabelElement;\n /** Dropdown UL element. */\n dropdownOptions: HTMLUListElement;\n /** Text input that shows current selected option. */\n input: HTMLInputElement;\n /** Instance of the dropdown plugin for this select. */\n dropdown: Dropdown;\n /** The select wrapper element. */\n wrapper: HTMLDivElement;\n selectOptions: (HTMLOptionElement|HTMLOptGroupElement)[];\n private _values: ValueStruct[];\n\n constructor(el: HTMLSelectElement, options: FormSelectOptions) {\n super(el, options, FormSelect);\n if (this.el.classList.contains('browser-default')) return;\n (this.el as any).M_FormSelect = this;\n\n this.options = {\n ...FormSelect.defaults,\n ...options\n };\n \n this.isMultiple = this.el.multiple;\n this.el.tabIndex = -1;\n this._values = [];\n //this.labelEl = null;\n //this._labelFor = false;\n this._setupDropdown();\n this._setupEventHandlers();\n }\n\n static get defaults(): FormSelectOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of FormSelect.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLSelectElement, options?: Partial<FormSelectOptions>): FormSelect;\n /**\n * Initializes instances of FormSelect.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<HTMLSelectElement | MElement>, options?: Partial<FormSelectOptions>): FormSelect[];\n /**\n * Initializes instances of FormSelect.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLSelectElement | InitElements<HTMLSelectElement | MElement>, options: Partial<FormSelectOptions> = {}): FormSelect | FormSelect[] {\n return super.init(els, options, FormSelect);\n }\n\n static getInstance(el: HTMLElement): FormSelect {\n return (el as any).M_FormSelect;\n }\n\n destroy() {\n // Returns label to its original owner\n //if (this._labelFor) this.labelEl.setAttribute(\"for\", this.el.id);\n this._removeEventHandlers();\n this._removeDropdown();\n (this.el as any).M_FormSelect = undefined;\n }\n\n _setupEventHandlers() {\n this.dropdownOptions.querySelectorAll('li:not(.optgroup)').forEach((el) => {\n el.addEventListener('click', this._handleOptionClick);\n el.addEventListener('keydown', (e: KeyboardEvent) => {\n if (e.key === \" \" || e.key === \"Enter\") this._handleOptionClick(e);\n });\n });\n this.el.addEventListener('change', this._handleSelectChange);\n this.input.addEventListener('click', this._handleInputClick);\n }\n\n _removeEventHandlers() {\n this.dropdownOptions.querySelectorAll('li:not(.optgroup)').forEach((el) => {\n el.removeEventListener('click', this._handleOptionClick);\n });\n this.el.removeEventListener('change', this._handleSelectChange);\n this.input.removeEventListener('click', this._handleInputClick);\n }\n\n _handleSelectChange = () => {\n this._setValueToInput();\n }\n\n _handleOptionClick = (e: MouseEvent | KeyboardEvent) => {\n e.preventDefault();\n const virtualOption = (e.target as HTMLLIElement).closest('li');\n this._selectOptionElement(virtualOption);\n e.stopPropagation();\n }\n\n _arraysEqual<T, E>(a: T[], b: (E|T)[]) {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; ++i) if (a[i] !== b[i]) return false;\n return true;\n }\n\n _selectOptionElement(virtualOption: HTMLElement) {\n if (!virtualOption.classList.contains('disabled') && !virtualOption.classList.contains('optgroup')) {\n const value = this._values.find((value) => value.optionEl === virtualOption);\n const previousSelectedValues = this.getSelectedValues();\n if (this.isMultiple) {\n // Multi-Select\n this._toggleEntryFromArray(value);\n }\n else {\n // Single-Select\n this._deselectAll();\n this._selectValue(value);\n }\n // Refresh Input-Text\n this._setValueToInput();\n // Trigger Change-Event only when data is different\n const actualSelectedValues = this.getSelectedValues();\n const selectionHasChanged = !this._arraysEqual(\n previousSelectedValues,\n actualSelectedValues\n );\n if (selectionHasChanged) this.el.dispatchEvent(new Event('change',{bubbles:true, cancelable:true, composed:true})); // trigger('change');\n }\n if (!this.isMultiple) this.dropdown.close();\n }\n\n _handleInputClick = () => {\n if (this.dropdown && this.dropdown.isOpen) {\n this._setValueToInput();\n this._setSelectedStates();\n }\n }\n\n _setupDropdown() {\n // Get Label\n this.labelEl = this.el.parentElement.querySelector('label');\n\n // Create Wrapper\n this.wrapper = document.createElement('div');\n this.wrapper.classList.add('select-wrapper', 'input-field');\n if (this.options.classes.length > 0) {\n this.wrapper.classList.add(...this.options.classes.split(' '));\n }\n this.el.before(this.wrapper);\n\n // Move actual select element into overflow hidden wrapper\n const hideSelect = document.createElement('div');\n hideSelect.classList.add('hide-select');\n this.wrapper.append(hideSelect);\n hideSelect.appendChild(this.el);\n\n if (this.el.disabled) this.wrapper.classList.add('disabled');\n\n this.selectOptions = <(HTMLOptGroupElement|HTMLOptionElement)[]>Array.from(this.el.children).filter(el => ['OPTION','OPTGROUP'].includes(el.tagName));\n\n // Create dropdown\n this.dropdownOptions = document.createElement('ul');\n this.dropdownOptions.id = `select-options-${Utils.guid()}`;\n this.dropdownOptions.classList.add('dropdown-content', 'select-dropdown');\n this.dropdownOptions.setAttribute('role', 'listbox');\n this.dropdownOptions.ariaMultiSelectable = this.isMultiple.toString();\n if (this.isMultiple) this.dropdownOptions.classList.add('multiple-select-dropdown');\n\n // Create dropdown structure\n if (this.selectOptions.length > 0) {\n this.selectOptions.forEach((realOption) => {\n if (realOption.tagName === 'OPTION') {\n // Option\n const virtualOption = this._createAndAppendOptionWithIcon(realOption, this.isMultiple ? 'multiple' : undefined);\n this._addOptionToValues(realOption as HTMLOptionElement, virtualOption);\n }\n else if (realOption.tagName === 'OPTGROUP') {\n // Optgroup\n const groupId = \"opt-group-\"+Utils.guid();\n const groupParent = document.createElement('li');\n groupParent.classList.add('optgroup');\n groupParent.tabIndex = -1;\n groupParent.setAttribute('role', 'group');\n groupParent.setAttribute('aria-labelledby', groupId);\n groupParent.innerHTML = `<span id=\"${groupId}\" role=\"presentation\">${realOption.getAttribute('label')}</span>`;\n this.dropdownOptions.append(groupParent);\n\n const groupChildren = [];\n const selectOptions = <HTMLOptionElement[]>Array.from(realOption.children).filter(el => el.tagName === 'OPTION');\n selectOptions.forEach(realOption => {\n const virtualOption = this._createAndAppendOptionWithIcon(realOption, 'optgroup-option');\n const childId = \"opt-child-\"+Utils.guid();\n virtualOption.id = childId;\n groupChildren.push(childId);\n this._addOptionToValues(realOption, virtualOption);\n });\n groupParent.setAttribute(\"aria-owns\", groupChildren.join(\" \"));\n }\n });\n }\n this.wrapper.append(this.dropdownOptions);\n\n // Add input dropdown\n this.input = document.createElement('input');\n this.input.id = \"m_select-input-\" + Utils.guid();\n this.input.classList.add('select-dropdown', 'dropdown-trigger');\n this.input.type = 'text';\n this.input.readOnly = true;\n this.input.setAttribute('data-target', this.dropdownOptions.id);\n this.input.ariaReadOnly = 'true';\n this.input.ariaRequired = this.el.hasAttribute(\"required\").toString(); //setAttribute(\"aria-required\", this.el.hasAttribute(\"required\"));\n if (this.el.disabled) this.input.disabled = true; // 'true');\n\n // Place Label after input\n if (this.labelEl) {\n this.input.after(this.labelEl);\n this.labelEl.setAttribute('for', this.input.id);\n this.labelEl.id = \"m_select-label-\" + Utils.guid();\n this.dropdownOptions.setAttribute(\"aria-labelledby\", this.labelEl.id);\n }\n\n // Makes new element to assume HTML's select label and aria-attributes, if exists\n /*\n if (this.el.hasAttribute(\"aria-labelledby\")){\n console.log(1);\n this.labelEl = <HTMLLabelElement>document.getElementById(this.el.getAttribute(\"aria-labelledby\"));\n }\n else if (this.el.id != \"\"){\n console.log(2);\n const label = document.createElement('label');\n label.setAttribute('for', this.el.id);\n if (label){\n this.labelEl = label;\n this.labelEl.removeAttribute(\"for\");\n this._labelFor = true;\n }\n }\n */\n // Tries to find a valid label in parent element\n // if (!this.labelEl) {\n // this.labelEl = this.el.parentElement.querySelector('label');\n // }\n // if (this.labelEl && this.labelEl.id == \"\") {\n // this.labelEl.id = \"m_select-label-\" + Utils.guid();\n // }\n // if (this.labelEl) {\n // this.labelEl.setAttribute(\"for\", this.input.id);\n // this.dropdownOptions.setAttribute(\"aria-labelledby\", this.labelEl.id);\n // }\n // else\n // this.dropdownOptions.ariaLabel = '';\n\n const attrs = this.el.attributes;\n for (let i = 0; i < attrs.length; ++i){\n const attr = attrs[i];\n if (attr.name.startsWith(\"aria-\"))\n this.input.setAttribute(attr.name, attr.value);\n }\n\n // Adds aria-attributes to input element\n this.input.setAttribute('role', 'combobox');\n this.input.ariaExpanded = 'false';\n this.input.setAttribute(\"aria-owns\", this.dropdownOptions.id);\n this.input.setAttribute(\"aria-controls\", this.dropdownOptions.id);\n this.input.placeholder = \" \";\n\n this.wrapper.prepend(this.input);\n this._setValueToInput();\n\n // Add caret\n const dropdownIcon = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); //document.createElement('svg')\n dropdownIcon.classList.add('caret');\n dropdownIcon.setAttribute('height', '24');\n dropdownIcon.setAttribute('width', '24');\n dropdownIcon.setAttribute('viewBox', '0 0 24 24');\n dropdownIcon.ariaHidden = 'true';\n dropdownIcon.innerHTML = `<path d=\"M7 10l5 5 5-5z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/>`;\n this.wrapper.prepend(dropdownIcon);\n\n // Initialize dropdown\n if (!this.el.disabled) {\n const dropdownOptions = {...this.options.dropdownOptions}; // TODO:\n dropdownOptions.coverTrigger = false;\n const userOnOpenEnd = dropdownOptions.onOpenEnd;\n const userOnCloseEnd = dropdownOptions.onCloseEnd;\n // Add callback for centering selected option when dropdown content is scrollable\n dropdownOptions.onOpenEnd = (el) => {\n const selectedOption = this.dropdownOptions.querySelector('.selected');\n if (selectedOption) {\n // Focus selected option in dropdown\n Utils.keyDown = true;\n this.dropdown.focusedIndex = [...selectedOption.parentNode.children].indexOf(selectedOption);\n this.dropdown._focusFocusedItem();\n Utils.keyDown = false;\n // Handle scrolling to selected option\n if (this.dropdown.isScrollable) {\n let scrollOffset =\n selectedOption.getBoundingClientRect().top -\n (this.dropdownOptions as HTMLElement).getBoundingClientRect().top; // scroll to selected option\n scrollOffset -= this.dropdownOptions.clientHeight / 2; // center in dropdown\n this.dropdownOptions.scrollTop = scrollOffset;\n }\n }\n this.input.ariaExpanded = 'true';\n // Handle user declared onOpenEnd if needed\n if (userOnOpenEnd && typeof userOnOpenEnd === 'function')\n userOnOpenEnd.call(this.dropdown, this.el);\n };\n // Add callback for reseting \"expanded\" state\n dropdownOptions.onCloseEnd = (el) => {\n this.input.ariaExpanded = 'false';\n // Handle user declared onOpenEnd if needed\n if (userOnCloseEnd && typeof userOnCloseEnd === 'function')\n userOnCloseEnd.call(this.dropdown, this.el);\n };\n // Prevent dropdown from closing too early\n dropdownOptions.closeOnClick = false;\n this.dropdown = Dropdown.init(this.input, dropdownOptions);\n }\n // Add initial selections\n this._setSelectedStates();\n\n // ! Workaround for Label: move label up again\n if (this.labelEl) this.input.after(this.labelEl);\n }\n\n _addOptionToValues(realOption: HTMLOptionElement, virtualOption: HTMLElement) {\n this._values.push({ el: realOption, optionEl: virtualOption });\n }\n\n _removeDropdown() {\n this.wrapper.querySelector('.caret').remove();\n this.input.remove();\n this.dropdownOptions.remove();\n this.wrapper.before(this.el);\n this.wrapper.remove();\n }\n\n _createAndAppendOptionWithIcon(realOption, type: string) {\n const li = document.createElement('li');\n li.setAttribute('role', 'option');\n if (realOption.disabled){\n li.classList.add('disabled');\n li.ariaDisabled = 'true';\n }\n if (type === 'optgroup-option') li.classList.add(type);\n // Text / Checkbox\n const span = document.createElement('span');\n if (this.isMultiple)\n span.innerHTML = `<label><input type=\"checkbox\"${\n realOption.disabled ? ' disabled=\"disabled\"' : ''\n }><span>${realOption.innerHTML}</span></label>`;\n else\n span.innerHTML = realOption.innerHTML;\n li.appendChild(span);\n // add Icon\n const iconUrl = realOption.getAttribute('data-icon');\n const classes = realOption.getAttribute('class')?.split();\n if (iconUrl) {\n const img = document.createElement('img');\n if (classes) img.classList.add(classes);\n img.src = iconUrl;\n img.ariaHidden = 'true';\n li.prepend(img);\n }\n // Check for multiple type\n this.dropdownOptions.append(li);\n return li;\n }\n\n _selectValue(value: ValueStruct) {\n value.el.selected = true;\n value.optionEl.classList.add('selected');\n value.optionEl.ariaSelected = 'true'; // setAttribute(\"aria-selected\", true);\n const checkbox = <HTMLInputElement>value.optionEl.querySelector('input[type=\"checkbox\"]');\n if (checkbox) checkbox.checked = true;\n }\n\n _deselectValue(value: ValueStruct) {\n value.el.selected = false;\n value.optionEl.classList.remove('selected');\n value.optionEl.ariaSelected = 'false'; //setAttribute(\"aria-selected\", false);\n const checkbox = <HTMLInputElement>value.optionEl.querySelector('input[type=\"checkbox\"]');\n if (checkbox) checkbox.checked = false;\n }\n\n _deselectAll() {\n this._values.forEach(value => this._deselectValue(value));\n }\n\n _isValueSelected(value: ValueStruct) {\n const realValues = this.getSelectedValues();\n return realValues.some((realValue) => realValue === value.el.value);\n }\n\n _toggleEntryFromArray(value: ValueStruct) {\n if (this._isValueSelected(value))\n this._deselectValue(value);\n else\n this._selectValue(value);\n }\n\n _getSelectedOptions(): HTMLOptionElement[] {\n // remove null, false, ... values\n return Array.prototype.filter.call(this.el.selectedOptions, (realOption: HTMLOptionElement) => realOption);\n }\n\n _setValueToInput() {\n const realOptions = this._getSelectedOptions();\n const values = this._values.filter((value) => realOptions.indexOf(value.el) >= 0);\n const texts = values.map((value) => value.optionEl.querySelector('span').innerText.trim());\n // Set input-text to first Option with empty value which indicates a description like \"choose your option\"\n if (texts.length === 0) {\n const firstDisabledOption = <HTMLOptionElement>this.el.querySelector('option:disabled');\n if (firstDisabledOption && firstDisabledOption.value === '') {\n this.input.value = firstDisabledOption.innerText;\n return;\n }\n }\n this.input.value = texts.join(', ');\n }\n\n _setSelectedStates() {\n this._values.forEach((value) => {\n const optionIsSelected = value.el.selected;\n const cb = <HTMLInputElement>value.optionEl.querySelector('input[type=\"checkbox\"]');\n if (cb) cb.checked = optionIsSelected;\n if (optionIsSelected) {\n this._activateOption(this.dropdownOptions, value.optionEl);\n }\n else {\n value.optionEl.classList.remove('selected');\n value.optionEl.ariaSelected = 'false'; // attr(\"aria-selected\", 'false');\n }\n });\n }\n\n _activateOption(ul: HTMLElement, li: HTMLElement) {\n if (!li) return;\n if (!this.isMultiple) ul.querySelectorAll('li.selected').forEach(li => li.classList.remove('selected'));\n li.classList.add('selected');\n li.ariaSelected = 'true';\n }\n\n getSelectedValues() {\n return this._getSelectedOptions().map((realOption) => realOption.value);\n }\n}\n","import anim from \"animejs\";\n\nimport { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement, Openable } from \"./component\";\n\nexport interface SidenavOptions extends BaseOptions {\n /**\n * Side of screen on which Sidenav appears.\n * @default 'left'\n */\n edge: 'left' | 'right';\n /**\n * Allow swipe gestures to open/close Sidenav.\n * @default true\n */\n draggable: boolean;\n /**\n * Width of the area where you can start dragging.\n * @default '10px'\n */\n dragTargetWidth: string;\n /**\n * Length in ms of enter transition.\n * @default 250\n */\n inDuration: number;\n /**\n * Length in ms of exit transition.\n * @default 200\n */\n outDuration: number;\n /**\n * Prevent page from scrolling while sidenav is open.\n * @default true\n */\n preventScrolling: boolean;\n /**\n * Function called when sidenav starts entering.\n */\n onOpenStart: (elem: HTMLElement) => void;\n /**\n * Function called when sidenav finishes entering.\n */\n onOpenEnd: (elem: HTMLElement) => void;\n /**\n * Function called when sidenav starts exiting.\n */\n onCloseStart: (elem: HTMLElement) => void;\n /**\n * Function called when sidenav finishes exiting.\n */\n onCloseEnd: (elem: HTMLElement) => void;\n}\n\nconst _defaults: SidenavOptions = {\n edge: 'left',\n draggable: true,\n dragTargetWidth: '10px',\n inDuration: 250,\n outDuration: 200,\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null,\n onCloseEnd: null,\n preventScrolling: true\n};\n\nexport class Sidenav extends Component<SidenavOptions> implements Openable {\n id: string;\n /** Describes open/close state of Sidenav. */\n isOpen: boolean;\n /** Describes if sidenav is fixed. */\n isFixed: boolean;\n /** Describes if Sidenav is being dragged. */\n isDragged: boolean;\n lastWindowWidth: number;\n lastWindowHeight: number;\n static _sidenavs: Sidenav[];\n private _overlay: HTMLElement;\n dragTarget: Element;\n private _startingXpos: number;\n private _xPos: number;\n private _time: number;\n private _width: number;\n private _initialScrollTop: number;\n private _verticallyScrolling: boolean;\n private deltaX: number;\n private velocityX: number;\n private percentOpen: number;\n\n constructor(el: HTMLElement, options: Partial<SidenavOptions>) {\n super(el, options, Sidenav);\n (this.el as any).M_Sidenav = this;\n\n this.options = {\n ...Sidenav.defaults,\n ...options\n };\n\n this.id = this.el.id;\n this.isOpen = false;\n this.isFixed = this.el.classList.contains('sidenav-fixed');\n this.isDragged = false;\n // Window size variables for window resize checks\n this.lastWindowWidth = window.innerWidth;\n this.lastWindowHeight = window.innerHeight;\n this._createOverlay();\n this._createDragTarget();\n this._setupEventHandlers();\n this._setupClasses();\n this._setupFixed();\n Sidenav._sidenavs.push(this);\n }\n\n static get defaults(): SidenavOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Sidenav.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<SidenavOptions>): Sidenav;\n /**\n * Initializes instances of Sidenav.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<SidenavOptions>): Sidenav[];\n /**\n * Initializes instances of Sidenav.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<SidenavOptions> = {}): Sidenav | Sidenav[] {\n return super.init(els, options, Sidenav);\n }\n\n static getInstance(el: HTMLElement): Sidenav {\n return (el as any).M_Sidenav;\n }\n\n destroy() {\n this._removeEventHandlers();\n this._enableBodyScrolling();\n this._overlay.parentNode.removeChild(this._overlay);\n this.dragTarget.parentNode.removeChild(this.dragTarget);\n (this.el as any).M_Sidenav = undefined;\n (this.el as HTMLElement).style.transform = '';\n const index = Sidenav._sidenavs.indexOf(this);\n if (index >= 0) {\n Sidenav._sidenavs.splice(index, 1);\n }\n }\n\n _createOverlay() {\n this._overlay = document.createElement('div');\n this._overlay.classList.add('sidenav-overlay');\n this._overlay.addEventListener('click', this.close);\n document.body.appendChild(this._overlay);\n }\n\n _setupEventHandlers() {\n if (Sidenav._sidenavs.length === 0) {\n document.body.addEventListener('click', this._handleTriggerClick);\n }\n var passiveIfSupported: boolean = null;\n this.dragTarget.addEventListener('touchmove', this._handleDragTargetDrag, passiveIfSupported);\n this.dragTarget.addEventListener('touchend', this._handleDragTargetRelease);\n this._overlay.addEventListener('touchmove', this._handleCloseDrag, passiveIfSupported);\n this._overlay.addEventListener('touchend', this._handleCloseRelease);\n this.el.addEventListener('touchmove', this._handleCloseDrag, passiveIfSupported);\n this.el.addEventListener('touchend', this._handleCloseRelease);\n this.el.addEventListener('click', this._handleCloseTriggerClick);\n // Add resize for side nav fixed\n if (this.isFixed) {\n window.addEventListener('resize', this._handleWindowResize);\n }\n }\n\n _removeEventHandlers() {\n if (Sidenav._sidenavs.length === 1) {\n document.body.removeEventListener('click', this._handleTriggerClick);\n }\n this.dragTarget.removeEventListener('touchmove', this._handleDragTargetDrag);\n this.dragTarget.removeEventListener('touchend', this._handleDragTargetRelease);\n this._overlay.removeEventListener('touchmove', this._handleCloseDrag);\n this._overlay.removeEventListener('touchend', this._handleCloseRelease);\n this.el.removeEventListener('touchmove', this._handleCloseDrag);\n this.el.removeEventListener('touchend', this._handleCloseRelease);\n this.el.removeEventListener('click', this._handleCloseTriggerClick);\n\n // Remove resize for side nav fixed\n if (this.isFixed) {\n window.removeEventListener('resize', this._handleWindowResize);\n }\n }\n\n _handleTriggerClick(e) {\n const trigger = e.target.closest('.sidenav-trigger');\n if (e.target && trigger) {\n const sidenavId = Utils.getIdFromTrigger(trigger);\n const sidenavInstance = (document.getElementById(sidenavId) as any).M_Sidenav;\n if (sidenavInstance) {\n sidenavInstance.open(trigger);\n }\n e.preventDefault();\n }\n }\n\n // Set variables needed at the beginning of drag and stop any current transition.\n _startDrag(e) {\n const clientX = e.targetTouches[0].clientX;\n this.isDragged = true;\n this._startingXpos = clientX;\n this._xPos = this._startingXpos;\n this._time = Date.now();\n this._width = this.el.getBoundingClientRect().width;\n this._overlay.style.display = 'block';\n this._initialScrollTop = this.isOpen ? this.el.scrollTop : Utils.getDocumentScrollTop();\n this._verticallyScrolling = false;\n anim.remove(this.el);\n anim.remove(this._overlay);\n }\n\n //Set variables needed at each drag move update tick\n _dragMoveUpdate(e) {\n const clientX = e.targetTouches[0].clientX;\n const currentScrollTop = this.isOpen ? this.el.scrollTop : Utils.getDocumentScrollTop();\n this.deltaX = Math.abs(this._xPos - clientX);\n this._xPos = clientX;\n this.velocityX = this.deltaX / (Date.now() - this._time);\n this._time = Date.now();\n if (this._initialScrollTop !== currentScrollTop) {\n this._verticallyScrolling = true;\n }\n }\n\n _handleDragTargetDrag = (e) => {\n // Check if draggable\n if (!this.options.draggable || this._isCurrentlyFixed() || this._verticallyScrolling) {\n return;\n }\n // If not being dragged, set initial drag start variables\n if (!this.isDragged) {\n this._startDrag(e);\n }\n // Run touchmove updates\n this._dragMoveUpdate(e);\n // Calculate raw deltaX\n let totalDeltaX = this._xPos - this._startingXpos;\n // dragDirection is the attempted user drag direction\n const dragDirection = totalDeltaX > 0 ? 'right' : 'left';\n // Don't allow totalDeltaX to exceed Sidenav width or be dragged in the opposite direction\n totalDeltaX = Math.min(this._width, Math.abs(totalDeltaX));\n if (this.options.edge === dragDirection) {\n totalDeltaX = 0;\n }\n /**\n * transformX is the drag displacement\n * transformPrefix is the initial transform placement\n * Invert values if Sidenav is right edge\n */\n let transformX = totalDeltaX;\n let transformPrefix = 'translateX(-100%)';\n if (this.options.edge === 'right') {\n transformPrefix = 'translateX(100%)';\n transformX = -transformX;\n }\n // Calculate open/close percentage of sidenav, with open = 1 and close = 0\n this.percentOpen = Math.min(1, totalDeltaX / this._width);\n // Set transform and opacity styles\n (this.el as HTMLElement).style.transform = `${transformPrefix} translateX(${transformX}px)`;\n this._overlay.style.opacity = this.percentOpen.toString();\n }\n\n _handleDragTargetRelease = () => {\n if (this.isDragged) {\n if (this.percentOpen > 0.2) {\n this.open();\n } else {\n this._animateOut();\n }\n this.isDragged = false;\n this._verticallyScrolling = false;\n }\n }\n\n _handleCloseDrag = (e) => {\n if (this.isOpen) {\n // Check if draggable\n if (!this.options.draggable || this._isCurrentlyFixed() || this._verticallyScrolling) {\n return;\n }\n // If not being dragged, set initial drag start variables\n if (!this.isDragged) {\n this._startDrag(e);\n }\n // Run touchmove updates\n this._dragMoveUpdate(e);\n // Calculate raw deltaX\n let totalDeltaX = this._xPos - this._startingXpos;\n // dragDirection is the attempted user drag direction\n let dragDirection = totalDeltaX > 0 ? 'right' : 'left';\n // Don't allow totalDeltaX to exceed Sidenav width or be dragged in the opposite direction\n totalDeltaX = Math.min(this._width, Math.abs(totalDeltaX));\n if (this.options.edge !== dragDirection) {\n totalDeltaX = 0;\n }\n let transformX = -totalDeltaX;\n if (this.options.edge === 'right') {\n transformX = -transformX;\n }\n // Calculate open/close percentage of sidenav, with open = 1 and close = 0\n this.percentOpen = Math.min(1, 1 - totalDeltaX / this._width);\n // Set transform and opacity styles\n (this.el as HTMLElement).style.transform = `translateX(${transformX}px)`;\n this._overlay.style.opacity = this.percentOpen.toString();\n }\n }\n\n _handleCloseRelease = () => {\n if (this.isOpen && this.isDragged) {\n if (this.percentOpen > 0.8) {\n this._animateIn();\n } else {\n this.close();\n }\n this.isDragged = false;\n this._verticallyScrolling = false;\n }\n }\n\n // Handles closing of Sidenav when element with class .sidenav-close\n _handleCloseTriggerClick = (e) => {\n const closeTrigger = e.target.closest('.sidenav-close');\n if (closeTrigger && !this._isCurrentlyFixed()) {\n this.close();\n }\n }\n\n _handleWindowResize = () => {\n // Only handle horizontal resizes\n if (this.lastWindowWidth !== window.innerWidth) {\n if (window.innerWidth > 992) {\n this.open();\n } else {\n this.close();\n }\n }\n this.lastWindowWidth = window.innerWidth;\n this.lastWindowHeight = window.innerHeight;\n }\n\n _setupClasses() {\n if (this.options.edge === 'right') {\n this.el.classList.add('right-aligned');\n this.dragTarget.classList.add('right-aligned');\n }\n }\n\n _removeClasses() {\n this.el.classList.remove('right-aligned');\n this.dragTarget.classList.remove('right-aligned');\n }\n\n _setupFixed() {\n if (this._isCurrentlyFixed()) this.open();\n }\n\n _isCurrentlyFixed() {\n return this.isFixed && window.innerWidth > 992;\n }\n\n _createDragTarget() {\n const dragTarget = document.createElement('div');\n dragTarget.classList.add('drag-target');\n dragTarget.style.width = this.options.dragTargetWidth;\n document.body.appendChild(dragTarget);\n this.dragTarget = dragTarget;\n }\n\n _preventBodyScrolling() {\n document.body.style.overflow = 'hidden';\n }\n\n _enableBodyScrolling() {\n document.body.style.overflow = '';\n }\n\n /**\n * Opens Sidenav.\n */\n open = () => {\n if (this.isOpen === true) return;\n this.isOpen = true;\n // Run onOpenStart callback\n if (typeof this.options.onOpenStart === 'function') {\n this.options.onOpenStart.call(this, this.el);\n }\n // Handle fixed Sidenav\n if (this._isCurrentlyFixed()) {\n anim.remove(this.el);\n anim({\n targets: this.el,\n translateX: 0,\n duration: 0,\n easing: 'easeOutQuad'\n });\n this._enableBodyScrolling();\n this._overlay.style.display = 'none';\n }\n // Handle non-fixed Sidenav\n else {\n if (this.options.preventScrolling) {\n this._preventBodyScrolling();\n }\n\n if (!this.isDragged || this.percentOpen != 1) {\n this._animateIn();\n }\n }\n }\n\n /**\n * Closes Sidenav.\n */\n close = () => {\n if (this.isOpen === false) return;\n this.isOpen = false;\n // Run onCloseStart callback\n if (typeof this.options.onCloseStart === 'function') {\n this.options.onCloseStart.call(this, this.el);\n }\n // Handle fixed Sidenav\n if (this._isCurrentlyFixed()) {\n const transformX = this.options.edge === 'left' ? '-105%' : '105%';\n (this.el as HTMLElement).style.transform = `translateX(${transformX})`;\n }\n // Handle non-fixed Sidenav\n else {\n this._enableBodyScrolling();\n if (!this.isDragged || this.percentOpen != 0) {\n this._animateOut();\n } else {\n this._overlay.style.display = 'none';\n }\n }\n }\n\n _animateIn() {\n this._animateSidenavIn();\n this._animateOverlayIn();\n }\n\n _animateSidenavIn() {\n let slideOutPercent = this.options.edge === 'left' ? -1 : 1;\n if (this.isDragged) {\n slideOutPercent =\n this.options.edge === 'left'\n ? slideOutPercent + this.percentOpen\n : slideOutPercent - this.percentOpen;\n }\n anim.remove(this.el);\n anim({\n targets: this.el,\n translateX: [`${slideOutPercent * 100}%`, 0],\n duration: this.options.inDuration,\n easing: 'easeOutQuad',\n complete: () => {\n // Run onOpenEnd callback\n if (typeof this.options.onOpenEnd === 'function') {\n this.options.onOpenEnd.call(this, this.el);\n }\n }\n });\n }\n\n _animateOverlayIn() {\n let start = 0;\n if (this.isDragged) {\n start = this.percentOpen;\n }\n else {\n this._overlay.style.display = 'block';\n }\n anim.remove(this._overlay);\n anim({\n targets: this._overlay,\n opacity: [start, 1],\n duration: this.options.inDuration,\n easing: 'easeOutQuad'\n });\n }\n\n _animateOut() {\n this._animateSidenavOut();\n this._animateOverlayOut();\n }\n\n _animateSidenavOut() {\n const endPercent = this.options.edge === 'left' ? -1 : 1;\n let slideOutPercent = 0;\n if (this.isDragged) {\n slideOutPercent =\n this.options.edge === 'left'\n ? endPercent + this.percentOpen\n : endPercent - this.percentOpen;\n }\n\n anim.remove(this.el);\n anim({\n targets: this.el,\n translateX: [`${slideOutPercent * 100}%`, `${endPercent * 105}%`],\n duration: this.options.outDuration,\n easing: 'easeOutQuad',\n complete: () => {\n // Run onOpenEnd callback\n if (typeof this.options.onCloseEnd === 'function') {\n this.options.onCloseEnd.call(this, this.el);\n }\n }\n });\n }\n\n _animateOverlayOut() {\n anim.remove(this._overlay);\n anim({\n targets: this._overlay,\n opacity: 0,\n duration: this.options.outDuration,\n easing: 'easeOutQuad',\n complete: () => {\n this._overlay.style.display = 'none';\n }\n });\n }\n\n static {\n Sidenav._sidenavs = [];\n }\n}\n","import anim from \"animejs\";\n\nimport { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface SliderOptions extends BaseOptions {\n /**\n * Set to false to hide slide indicators.\n * @default true\n */\n indicators: boolean;\n /**\n * Set height of slider.\n * @default 400\n */\n height: number;\n /**\n * Set the duration of the transition animation in ms.\n * @default 500\n */\n duration: number;\n /**\n * Set the duration between transitions in ms.\n * @default 6000\n */\n interval: number;\n /**\n * If slider should pause when keyboard focus is received.\n * @default true\n */\n pauseOnFocus: boolean;\n /**\n * If slider should pause when is hovered by a pointer.\n * @default true\n */\n pauseOnHover: boolean;\n /**\n * Optional function used to generate ARIA label to indicators (for accessibility purposes).\n * @param index Current index, starting from \"1\".\n * @param current A which indicates whether it is the current element or not\n * @returns a string to be used as label indicator.\n * @default null\n */\n indicatorLabelFunc: (index: number, current: boolean) => string\n}\n\nlet _defaults: SliderOptions = {\n indicators: true,\n height: 400,\n duration: 500,\n interval: 6000,\n pauseOnFocus: true,\n pauseOnHover: true,\n indicatorLabelFunc: null // Function which will generate a label for the indicators (ARIA)\n};\n\nexport class Slider extends Component<SliderOptions> {\n /** Index of current slide. */\n activeIndex: number;\n interval: string | number | NodeJS.Timeout;\n eventPause: any;\n _slider: HTMLUListElement;\n _slides: HTMLLIElement[];\n _activeSlide: HTMLLIElement;\n _indicators: HTMLLIElement[];\n _hovered: boolean;\n _focused: boolean;\n _focusCurrent: boolean;\n _sliderId: string;\n\n constructor(el: HTMLElement, options: Partial<SliderOptions>) {\n super(el, options, Slider);\n (this.el as any).M_Slider = this;\n\n this.options = {\n ...Slider.defaults,\n ...options\n };\n\n // init props\n this.interval = null;\n this.eventPause = false;\n this._hovered = false;\n this._focused = false;\n this._focusCurrent = false;\n\n // setup\n this._slider = this.el.querySelector('.slides');\n this._slides = Array.from(this._slider.querySelectorAll('li'));\n this.activeIndex = this._slides.findIndex(li => li.classList.contains('active'));\n\n if (this.activeIndex !== -1) {\n this._activeSlide = this._slides[this.activeIndex];\n }\n\n this._setSliderHeight();\n\n // Sets element id if it does not have one\n if (this._slider.hasAttribute('id'))\n this._sliderId = this._slider.getAttribute('id');\n else {\n this._sliderId = 'slider-' + Utils.guid();\n this._slider.setAttribute('id', this._sliderId);\n }\n\n const placeholderBase64 = 'data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n // Set initial positions of captions\n this._slides.forEach(slide => {\n // Caption\n //const caption = <HTMLElement|null>slide.querySelector('.caption');\n //if (caption) this._animateCaptionIn(caption, 0);\n // Set Images as Background Images\n const img = slide.querySelector('img');\n if (img) {\n if (img.src !== placeholderBase64) {\n img.style.backgroundImage = 'url('+ img.src +')';\n img.src = placeholderBase64;\n }\n }\n // Sets slide as focusable by code\n if (!slide.hasAttribute('tabindex'))\n slide.setAttribute('tabindex', '-1');\n // Removes initial visibility from \"inactive\" slides\n slide.style.visibility = 'hidden';\n });\n\n this._setupIndicators();\n\n // Show active slide\n if (this._activeSlide) {\n this._activeSlide.style.display = 'block';\n this._activeSlide.style.visibility = 'visible';\n }\n else {\n this.activeIndex = 0;\n this._slides[0].classList.add('active');\n this._slides[0].style.visibility = 'visible';\n this._activeSlide = this._slides[0];\n this._animateSlide(this._slides[0], true);\n /*anim({\n targets: this._slides[0],\n opacity: 1,\n duration: this.options.duration,\n easing: 'easeOutQuad'\n });\n */\n // Update indicators\n if (this.options.indicators) {\n this._indicators[this.activeIndex].children[0].classList.add('active');\n }\n }\n\n // Adjust height to current slide\n // TODO: ??? Code does not do what it says in comment\n /*\n this._activeSlide.querySelectorAll('img').forEach(el => {\n anim({\n targets: this._activeSlide.querySelector('.caption'),\n opacity: 1,\n translateX: 0,\n translateY: 0,\n duration: this.options.duration,\n easing: 'easeOutQuad'\n });\n });\n */\n\n this._setupEventHandlers();\n // auto scroll\n this.start();\n }\n\n static get defaults() {\n return _defaults;\n }\n\n /**\n * Initializes instance of Slider.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<SliderOptions>): Slider;\n /**\n * Initializes instances of Slider.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<SliderOptions>): Slider[];\n /**\n * Initializes instances of Slider.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<SliderOptions> = {}): Slider | Slider[] {\n return super.init(els, options, Slider);\n }\n\n static getInstance(el: HTMLElement): Slider {\n return (el as any).M_Slider;\n }\n\n destroy() {\n this.pause();\n this._removeIndicators();\n this._removeEventHandlers();\n (this.el as any).M_Slider = undefined;\n }\n\n _setupEventHandlers() {\n if (this.options.pauseOnFocus) {\n this.el.addEventListener('focusin', this._handleAutoPauseFocus);\n this.el.addEventListener('focusout', this._handleAutoStartFocus);\n }\n if (this.options.pauseOnHover) {\n this.el.addEventListener('mouseenter', this._handleAutoPauseHover);\n this.el.addEventListener('mouseleave', this._handleAutoStartHover);\n }\n if (this.options.indicators) {\n this._indicators.forEach((el) => {\n el.addEventListener('click', this._handleIndicatorClick);\n });\n }\n }\n\n _removeEventHandlers() {\n if (this.options.pauseOnFocus) {\n this.el.removeEventListener('focusin', this._handleAutoPauseFocus);\n this.el.removeEventListener('focusout', this._handleAutoStartFocus);\n }\n if (this.options.pauseOnHover) {\n this.el.removeEventListener('mouseenter', this._handleAutoPauseHover);\n this.el.removeEventListener('mouseleave', this._handleAutoStartHover);\n }\n if (this.options.indicators) {\n this._indicators.forEach((el) => {\n el.removeEventListener('click', this._handleIndicatorClick);\n });\n }\n }\n\n _handleIndicatorClick = (e: MouseEvent) => {\n const el = (<HTMLElement>e.target).parentElement;\n const currIndex = [...el.parentNode.children].indexOf(el);\n this._focusCurrent = true;\n this.set(currIndex);\n }\n\n _handleAutoPauseHover = () => {\n this._hovered = true;\n if (this.interval != null) {\n this._pause(true);\n }\n }\n\n _handleAutoPauseFocus = () => {\n this._focused = true;\n if (this.interval != null) {\n this._pause(true);\n }\n }\n\n _handleAutoStartHover = () => {\n this._hovered = false;\n if (!(this.options.pauseOnFocus && this._focused) && this.eventPause) {\n this.start();\n }\n }\n\n _handleAutoStartFocus = () => {\n this._focused = false;\n if (!(this.options.pauseOnHover && this._hovered) && this.eventPause) {\n this.start();\n }\n }\n\n _handleInterval = () => {\n const activeElem = this._slider.querySelector('.active');\n let newActiveIndex = [...activeElem.parentNode.children].indexOf(activeElem);\n if (this._slides.length === newActiveIndex + 1)\n newActiveIndex = 0; // loop to start\n else\n newActiveIndex += 1;\n this.set(newActiveIndex);\n }\n\n _animateSlide(slide: HTMLElement, isDirectionIn: boolean): void {\n let dx = 0, dy = 0;\n anim({\n targets: slide,\n opacity: isDirectionIn ? [0, 1] : [1, 0],\n duration: this.options.duration,\n easing: 'easeOutQuad'\n });\n\n const caption = slide.querySelector('.caption');\n if (!caption) return;\n if (caption.classList.contains('center-align')) dy = -100;\n else if (caption.classList.contains('right-align')) dx = 100;\n else if (caption.classList.contains('left-align')) dx = -100;\n anim({\n targets: caption,\n opacity: isDirectionIn ? [0, 1] : [1, 0],\n translateX: isDirectionIn ? [dx, 0] : [0, dx],\n translateY: isDirectionIn ? [dy, 0] : [0, dy],\n duration: this.options.duration,\n delay: this.options.duration,\n easing: 'easeOutQuad'\n });\n }\n\n _setSliderHeight() {\n // If fullscreen, do nothing\n if (!this.el.classList.contains('fullscreen')) {\n if (this.options.indicators) {\n // Add height if indicators are present\n this.el.style.height = (this.options.height + 40)+'px'; //.css('height', this.options.height + 40 + 'px');\n }\n else {\n this.el.style.height = this.options.height+'px';\n }\n this._slider.style.height = this.options.height+'px';\n }\n }\n\n _setupIndicators() {\n if (this.options.indicators) {\n const ul = document.createElement('ul');\n ul.classList.add('indicators');\n\n const arrLi = [];\n this._slides.forEach((el, i) => {\n const label = this.options.indicatorLabelFunc\n ? this.options.indicatorLabelFunc.call(this, i + 1, i === 0)\n : `${i + 1}`;\n const li = document.createElement('li');\n li.classList.add('indicator-item');\n li.innerHTML = `<button type=\"button\" class=\"indicator-item-btn\" aria-label=\"${label}\" aria-controls=\"${this._sliderId}\"></button>`;\n arrLi.push(li);\n ul.append(li);\n });\n\n this.el.append(ul);\n this._indicators = arrLi;\n }\n }\n\n _removeIndicators() {\n this.el.querySelector('ul.indicators').remove(); //find('ul.indicators').remove();\n }\n\n set(index: number) {\n // Wrap around indices.\n if (index >= this._slides.length) index = 0;\n else if (index < 0) index = this._slides.length - 1;\n\n // Only do if index changes\n if (this.activeIndex === index) return;\n\n this._activeSlide = this._slides[this.activeIndex];\n const _caption = <HTMLElement|null>this._activeSlide.querySelector('.caption');\n\n this._activeSlide.classList.remove('active');\n // Enables every slide\n this._slides.forEach(slide => slide.style.visibility = 'visible');\n\n //--- Hide active Slide + Caption\n // TODO: What does this do?\n anim({\n targets: this._activeSlide,\n opacity: 0,\n duration: this.options.duration,\n easing: 'easeOutQuad',\n complete: () => {\n this._slides.forEach(el => {\n if (el.classList.contains('active')) return;\n anim({\n targets: el,\n opacity: 0,\n translateX: 0,\n translateY: 0,\n duration: 0, // Animation with duration 0... why use anim at all then?\n easing: 'easeOutQuad'\n });\n // Disables invisible slides (for assistive technologies)\n el.style.visibility = 'hidden';\n });\n }\n });\n\n // Hide active Caption\n //this._animateCaptionIn(_caption, this.options.duration);\n _caption.style.opacity = '0';\n\n // Update indicators\n if (this.options.indicators) {\n const activeIndicator = this._indicators[this.activeIndex].children[0];\n const nextIndicator = this._indicators[index].children[0];\n activeIndicator.classList.remove('active');\n nextIndicator.classList.add('active');\n if (typeof this.options.indicatorLabelFunc === \"function\"){\n activeIndicator.ariaLabel = this.options.indicatorLabelFunc.call(this, this.activeIndex, false);\n nextIndicator.ariaLabel = this.options.indicatorLabelFunc.call(this, index, true);\n }\n }\n\n //--- Show new Slide + Caption\n this._animateSlide(this._slides[index], true);\n\n this._slides[index].classList.add('active');\n\n // TODO: Why focus? => causes uncontrollable page scroll\n /*\n if (this._focusCurrent) {\n this._slides[index].focus();\n this._focusCurrent = false;\n }\n */\n\n this.activeIndex = index;\n\n // Reset interval, if allowed. This check prevents autostart\n // when slider is paused, since it can be changed though indicators.\n if (this.interval != null) {\n this.start();\n }\n }\n\n _pause(fromEvent: boolean) {\n clearInterval(this.interval);\n this.eventPause = fromEvent;\n this.interval = null;\n }\n\n /**\n * Pause slider autoslide.\n */\n pause = () => {\n this._pause(false);\n }\n\n /**\n * Start slider autoslide.\n */\n start = () => {\n clearInterval(this.interval);\n this.interval = setInterval(\n this._handleInterval,\n this.options.duration + this.options.interval\n );\n this.eventPause = false;\n }\n\n /**\n * Move to next slider.\n */\n next = () => {\n let newIndex = this.activeIndex + 1;\n // Wrap around indices.\n if (newIndex >= this._slides.length) newIndex = 0;\n else if (newIndex < 0) newIndex = this._slides.length - 1;\n this.set(newIndex);\n }\n\n /**\n * Move to prev slider.\n */\n prev = () => {\n let newIndex = this.activeIndex - 1;\n // Wrap around indices.\n if (newIndex >= this._slides.length) newIndex = 0;\n else if (newIndex < 0) newIndex = this._slides.length - 1;\n this.set(newIndex);\n }\n}\n","import anim from \"animejs\";\n\nimport { Carousel } from \"./carousel\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface TabsOptions extends BaseOptions {\n /**\n * Transition duration in milliseconds.\n * @default 300\n */\n duration: number;\n /**\n * Callback for when a new tab content is shown.\n * @default null\n */\n onShow: (newContent: Element) => void;\n /**\n * Set to true to enable swipeable tabs.\n * This also uses the responsiveThreshold option.\n * @default false\n */\n swipeable: boolean;\n /**\n * The maximum width of the screen, in pixels,\n * where the swipeable functionality initializes.\n * @default infinity\n */\n responsiveThreshold: number;\n};\n\nlet _defaults: TabsOptions = {\n duration: 300,\n onShow: null,\n swipeable: false,\n responsiveThreshold: Infinity // breakpoint for swipeable\n};\n\nexport class Tabs extends Component<TabsOptions> {\n _tabLinks: NodeListOf<HTMLAnchorElement>;\n _index: number;\n _indicator: any;\n _tabWidth: number;\n _tabsWidth: number;\n _tabsCarousel: any;\n _activeTabLink: any;\n _content: any;\n\n constructor(el: HTMLElement, options: Partial<TabsOptions>) {\n super(el, options, Tabs);\n (this.el as any).M_Tabs = this;\n\n this.options = {\n ...Tabs.defaults,\n ...options\n };\n\n this._tabLinks = this.el.querySelectorAll('li.tab > a');\n this._index = 0;\n this._setupActiveTabLink();\n if (this.options.swipeable) {\n this._setupSwipeableTabs();\n } else {\n this._setupNormalTabs();\n }\n // Setup tabs indicator after content to ensure accurate widths\n this._setTabsAndTabWidth();\n this._createIndicator();\n this._setupEventHandlers();\n }\n\n static get defaults(): TabsOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Tabs.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<TabsOptions>): Tabs;\n /**\n * Initializes instances of Tabs.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<TabsOptions>): Tabs[];\n /**\n * Initializes instances of Tabs.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<TabsOptions> = {}): Tabs | Tabs[] {\n return super.init(els, options, Tabs);\n }\n\n static getInstance(el: HTMLElement): Tabs {\n return (el as any).M_Tabs;\n }\n\n destroy() {\n this._removeEventHandlers();\n this._indicator.parentNode.removeChild(this._indicator);\n if (this.options.swipeable) {\n this._teardownSwipeableTabs();\n }\n else {\n this._teardownNormalTabs();\n }\n (this.el as any).M_Tabs = undefined;\n }\n\n /**\n * The index of tab that is currently shown.\n */\n get index(){ return this._index; }\n\n _setupEventHandlers() {\n window.addEventListener('resize', this._handleWindowResize);\n this.el.addEventListener('click', this._handleTabClick);\n }\n\n _removeEventHandlers() {\n window.removeEventListener('resize', this._handleWindowResize);\n this.el.removeEventListener('click', this._handleTabClick);\n }\n\n _handleWindowResize = () => {\n this._setTabsAndTabWidth();\n if (this._tabWidth !== 0 && this._tabsWidth !== 0) {\n this._indicator.style.left = this._calcLeftPos(this._activeTabLink)+'px';\n this._indicator.style.right = this._calcRightPos(this._activeTabLink)+'px';\n }\n }\n\n _handleTabClick = (e: MouseEvent) => {\n const tabLink = e.target as HTMLAnchorElement;\n const tab = tabLink.parentElement;\n // Handle click on tab link only\n if (!tabLink || !tab.classList.contains('tab')) return;\n // is disabled?\n if (tab.classList.contains('disabled')) {\n e.preventDefault();\n return;\n }\n // Act as regular link if target attribute is specified.\n if (tabLink.hasAttribute('target')) return;\n // Make the old tab inactive.\n this._activeTabLink.classList.remove('active');\n const _oldContent = this._content;\n // Update the variables with the new link and content\n\n this._activeTabLink = tabLink;\n if (tabLink.hash)\n this._content = document.querySelector(tabLink.hash);\n this._tabLinks = this.el.querySelectorAll('li.tab > a');\n // Make the tab active\n this._activeTabLink.classList.add('active');\n const prevIndex = this._index;\n this._index = Math.max(Array.from(this._tabLinks).indexOf(tabLink), 0);\n\n // Swap content\n if (this.options.swipeable) {\n if (this._tabsCarousel) {\n this._tabsCarousel.set(this._index, () => {\n if (typeof this.options.onShow === 'function')\n this.options.onShow.call(this, this._content);\n });\n }\n } else {\n if (this._content) {\n this._content.style.display = 'block';\n this._content.classList.add('active');\n if (typeof this.options.onShow === 'function')\n this.options.onShow.call(this, this._content);\n if (_oldContent && _oldContent !== this._content) {\n _oldContent.style.display = 'none';\n _oldContent.classList.remove('active');\n }\n }\n }\n // Update widths after content is swapped (scrollbar bugfix)\n this._setTabsAndTabWidth();\n this._animateIndicator(prevIndex);\n e.preventDefault();\n }\n\n _createIndicator() {\n const indicator = document.createElement('li');\n indicator.classList.add('indicator');\n this.el.appendChild(indicator);\n this._indicator = indicator;\n this._indicator.style.left = this._calcLeftPos(this._activeTabLink)+'px';\n this._indicator.style.right = this._calcRightPos(this._activeTabLink)+'px';\n }\n\n _setupActiveTabLink() {\n // If the location.hash matches one of the links, use that as the active tab.\n this._activeTabLink = Array.from(this._tabLinks).find((a: HTMLAnchorElement) => a.getAttribute('href') === location.hash);\n // If no match is found, use the first link or any with class 'active' as the initial active tab.\n if (!this._activeTabLink) {\n this._activeTabLink = this.el.querySelector('li.tab a.active');\n }\n if (this._activeTabLink.length === 0) {\n this._activeTabLink = this.el.querySelector('li.tab a');\n }\n Array.from(this._tabLinks).forEach((a: HTMLAnchorElement) => a.classList.remove('active'));\n this._activeTabLink.classList.add('active');\n\n this._index = Math.max(Array.from(this._tabLinks).indexOf(this._activeTabLink), 0);\n if (this._activeTabLink && this._activeTabLink.hash) {\n this._content = document.querySelector(this._activeTabLink.hash);\n this._content.classList.add('active');\n }\n }\n\n _setupSwipeableTabs() {\n // Change swipeable according to responsive threshold\n if (window.innerWidth > this.options.responsiveThreshold)\n this.options.swipeable = false;\n\n const tabsContent = [];\n this._tabLinks.forEach(a => {\n if (a.hash) {\n const currContent = document.querySelector(a.hash);\n currContent.classList.add('carousel-item');\n tabsContent.push(currContent); \n }\n });\n\n // Create Carousel-Wrapper around Tab-Contents\n const tabsWrapper = document.createElement('div');\n tabsWrapper.classList.add('tabs-content', 'carousel', 'carousel-slider');\n\n // Wrap around\n tabsContent[0].parentElement.insertBefore(tabsWrapper, tabsContent[0]);\n tabsContent.forEach(tabContent => {\n tabsWrapper.appendChild(tabContent);\n tabContent.style.display = '';\n });\n\n // Keep active tab index to set initial carousel slide\n const tab = this._activeTabLink.parentElement;\n const activeTabIndex = Array.from(tab.parentNode.children).indexOf(tab);\n\n this._tabsCarousel = Carousel.init(tabsWrapper, {\n fullWidth: true,\n noWrap: true,\n onCycleTo: (item) => {\n const prevIndex = this._index;\n this._index = Array.from(item.parentNode.children).indexOf(item);\n this._activeTabLink.classList.remove('active');\n this._activeTabLink = Array.from(this._tabLinks)[this._index];\n this._activeTabLink.classList.add('active');\n this._animateIndicator(prevIndex);\n if (typeof this.options.onShow === 'function')\n this.options.onShow.call(this, this._content);\n }\n });\n // Set initial carousel slide to active tab\n this._tabsCarousel.set(activeTabIndex);\n }\n\n _teardownSwipeableTabs() {\n const tabsWrapper = this._tabsCarousel.el;\n this._tabsCarousel.destroy();\n // Unwrap\n tabsWrapper.after(tabsWrapper.children);\n tabsWrapper.remove();\n }\n\n _setupNormalTabs() {\n // Hide Tabs Content\n Array.from(this._tabLinks).forEach((a) => {\n if (a === this._activeTabLink) return;\n if ((<HTMLAnchorElement>a).hash) {\n const currContent = document.querySelector((<HTMLAnchorElement>a).hash);\n if (currContent) (<HTMLElement>currContent).style.display = 'none';\n }\n });\n }\n\n _teardownNormalTabs() {\n // show Tabs Content\n this._tabLinks.forEach((a) => {\n if (a.hash) {\n const currContent = document.querySelector(a.hash) as HTMLElement;\n if (currContent) currContent.style.display = '';\n }\n });\n }\n\n _setTabsAndTabWidth() {\n this._tabsWidth = this.el.getBoundingClientRect().width;\n this._tabWidth = Math.max(this._tabsWidth, this.el.scrollWidth) / this._tabLinks.length;\n }\n\n _calcRightPos(el) {\n return Math.ceil(this._tabsWidth - el.offsetLeft - el.getBoundingClientRect().width);\n }\n\n _calcLeftPos(el) {\n return Math.floor(el.offsetLeft);\n }\n\n /**\n * Recalculate tab indicator position. This is useful when\n * the indicator position is not correct.\n */\n updateTabIndicator() {\n this._setTabsAndTabWidth();\n this._animateIndicator(this._index);\n }\n\n _animateIndicator(prevIndex) {\n let leftDelay = 0, rightDelay = 0;\n\n if (this._index - prevIndex >= 0)\n leftDelay = 90;\n else\n rightDelay = 90;\n\n const animOptions = {\n targets: this._indicator,\n left: {\n value: this._calcLeftPos(this._activeTabLink),\n delay: leftDelay\n },\n right: {\n value: this._calcRightPos(this._activeTabLink),\n delay: rightDelay\n },\n duration: this.options.duration,\n easing: 'easeOutQuad'\n };\n anim.remove(this._indicator);\n anim(animOptions);\n }\n\n /**\n * Show tab content that corresponds to the tab with the id.\n * @param tabId The id of the tab that you want to switch to.\n */\n select(tabId: string) {\n const tab = Array.from(this._tabLinks).find((a: HTMLAnchorElement) => a.getAttribute('href') === '#'+tabId);\n if (tab) (<HTMLAnchorElement>tab).click();\n }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement, Openable } from \"./component\";\n\nexport interface TapTargetOptions extends BaseOptions {\n /**\n * Callback function called when Tap Target is opened.\n * @default null\n */\n onOpen: (origin: HTMLElement) => void;\n /**\n * Callback function called when Tap Target is closed.\n * @default null\n */\n onClose: (origin: HTMLElement) => void;\n};\n\nlet _defaults: TapTargetOptions = {\n onOpen: null,\n onClose: null\n};\n\nexport class TapTarget extends Component<TapTargetOptions> implements Openable {\n /**\n * If the tap target is open.\n */\n isOpen: boolean;\n\n private wrapper: HTMLElement;\n private _origin: HTMLElement;\n private originEl: HTMLElement;\n private waveEl: HTMLElement & Element & Node;\n private contentEl: HTMLElement;\n\n constructor(el: HTMLElement, options: Partial<TapTargetOptions>) {\n super(el, options, TapTarget);\n (this.el as any).M_TapTarget = this;\n\n this.options = {\n ...TapTarget.defaults,\n ...options\n };\n\n this.isOpen = false;\n // setup\n this._origin = document.querySelector(`#${el.dataset.target}`);\n this._setup();\n this._calculatePositioning();\n this._setupEventHandlers();\n }\n\n static get defaults(): TapTargetOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of TapTarget.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<TapTargetOptions>): TapTarget;\n /**\n * Initializes instances of TapTarget.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<TapTargetOptions>): TapTarget[];\n /**\n * Initializes instances of TapTarget.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<TapTargetOptions> = {}): TapTarget | TapTarget[] {\n return super.init(els, options, TapTarget);\n }\n\n static getInstance(el: HTMLElement): TapTarget {\n return (el as any).M_TapTarget;\n }\n\n destroy() {\n this._removeEventHandlers();\n (this.el as any).TapTarget = undefined;\n }\n\n _setupEventHandlers() {\n this.el.addEventListener('click', this._handleTargetClick);\n this.originEl.addEventListener('click', this._handleOriginClick);\n // Resize\n window.addEventListener('resize', this._handleThrottledResize);\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('click', this._handleTargetClick);\n this.originEl.removeEventListener('click', this._handleOriginClick);\n window.removeEventListener('resize', this._handleThrottledResize);\n }\n\n _handleThrottledResize: () => void = Utils.throttle(function(){ this._handleResize(); }, 200).bind(this);\n\n _handleTargetClick = () => {\n this.open();\n }\n\n _handleOriginClick = () => {\n this.close();\n }\n\n _handleResize = () => {\n this._calculatePositioning();\n }\n\n _handleDocumentClick = (e: MouseEvent | TouchEvent) => {\n if (!(e.target as HTMLElement).closest('.tap-target-wrapper')) {\n this.close();\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n _setup() {\n // Creating tap target\n this.wrapper = this.el.parentElement;\n this.waveEl = this.wrapper.querySelector('.tap-target-wave');\n this.originEl = this.wrapper.querySelector('.tap-target-origin');\n this.contentEl = this.el.querySelector('.tap-target-content');\n // Creating wrapper\n if (!this.wrapper.classList.contains('.tap-target-wrapper')) {\n this.wrapper = document.createElement('div');\n this.wrapper.classList.add('tap-target-wrapper');\n this.el.before(this.wrapper);\n this.wrapper.append(this.el);\n }\n // Creating content\n if (!this.contentEl) {\n this.contentEl = document.createElement('div');\n this.contentEl.classList.add('tap-target-content');\n this.el.append(this.contentEl);\n }\n // Creating foreground wave\n if (!this.waveEl) {\n this.waveEl = document.createElement('div');\n this.waveEl.classList.add('tap-target-wave');\n // Creating origin\n if (!this.originEl) {\n this.originEl = <HTMLElement>this._origin.cloneNode(true); // .clone(true, true);\n this.originEl.classList.add('tap-target-origin');\n this.originEl.removeAttribute('id');\n this.originEl.removeAttribute('style');\n this.waveEl.append(this.originEl);\n }\n this.wrapper.append(this.waveEl);\n }\n }\n\n private _offset(el: HTMLElement) {\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n return {\n top: box.top + window.pageYOffset - docElem.clientTop,\n left: box.left + window.pageXOffset - docElem.clientLeft\n };\n }\n\n _calculatePositioning() {\n // Element or parent is fixed position?\n let isFixed = getComputedStyle(this._origin).position === 'fixed';\n if (!isFixed) {\n\n let currentElem: any = this._origin;\n const parents = [];\n while ((currentElem = currentElem.parentNode) && currentElem !== document)\n parents.push(currentElem);\n\n for (let i = 0; i < parents.length; i++) {\n isFixed = getComputedStyle(parents[i]).position === 'fixed';\n if (isFixed) break;\n }\n }\n // Calculating origin\n const originWidth = this._origin.offsetWidth;\n const originHeight = this._origin.offsetHeight;\n const originTop = isFixed ? this._offset(this._origin).top - Utils.getDocumentScrollTop() : this._offset(this._origin).top;\n const originLeft = isFixed ? this._offset(this._origin).left - Utils.getDocumentScrollLeft() : this._offset(this._origin).left;\n\n // Calculating screen\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const scrollBarWidth = windowWidth - document.documentElement.clientWidth;\n const centerX = windowWidth / 2;\n const centerY = windowHeight / 2;\n const isLeft = originLeft <= centerX;\n const isRight = originLeft > centerX;\n const isTop = originTop <= centerY;\n const isBottom = originTop > centerY;\n const isCenterX = originLeft >= windowWidth * 0.25 && originLeft <= windowWidth * 0.75;\n\n // Calculating tap target\n const tapTargetWidth = this.el.offsetWidth;\n const tapTargetHeight = this.el.offsetHeight;\n const tapTargetTop = originTop + originHeight / 2 - tapTargetHeight / 2;\n const tapTargetLeft = originLeft + originWidth / 2 - tapTargetWidth / 2;\n const tapTargetPosition = isFixed ? 'fixed' : 'absolute';\n\n // Calculating content\n const tapTargetTextWidth = isCenterX ? tapTargetWidth : tapTargetWidth / 2 + originWidth;\n const tapTargetTextHeight = tapTargetHeight / 2;\n const tapTargetTextTop = isTop ? tapTargetHeight / 2 : 0;\n const tapTargetTextBottom = 0;\n const tapTargetTextLeft = isLeft && !isCenterX ? tapTargetWidth / 2 - originWidth : 0;\n const tapTargetTextRight = 0;\n const tapTargetTextPadding = originWidth;\n const tapTargetTextAlign = isBottom ? 'bottom' : 'top';\n\n // Calculating wave\n const tapTargetWaveWidth = originWidth > originHeight ? originWidth * 2 : originWidth * 2;\n const tapTargetWaveHeight = tapTargetWaveWidth;\n const tapTargetWaveTop = tapTargetHeight / 2 - tapTargetWaveHeight / 2;\n const tapTargetWaveLeft = tapTargetWidth / 2 - tapTargetWaveWidth / 2;\n\n // Setting tap target\n this.wrapper.style.top = isTop ? tapTargetTop + 'px' : '';\n this.wrapper.style.right = isRight ? windowWidth - tapTargetLeft - tapTargetWidth - scrollBarWidth + 'px' : '';\n this.wrapper.style.bottom = isBottom ? windowHeight - tapTargetTop - tapTargetHeight + 'px' : '';\n this.wrapper.style.left = isLeft ? tapTargetLeft + 'px' : '';\n this.wrapper.style.position = tapTargetPosition;\n\n // Setting content\n this.contentEl.style.width = tapTargetTextWidth + 'px';\n this.contentEl.style.height = tapTargetTextHeight + 'px';\n this.contentEl.style.top = tapTargetTextTop + 'px';\n this.contentEl.style.right = tapTargetTextRight + 'px';\n this.contentEl.style.bottom = tapTargetTextBottom + 'px';\n this.contentEl.style.left = tapTargetTextLeft + 'px';\n this.contentEl.style.padding = tapTargetTextPadding + 'px';\n this.contentEl.style.verticalAlign = tapTargetTextAlign;\n\n // Setting wave\n this.waveEl.style.top = tapTargetWaveTop+'px';\n this.waveEl.style.left = tapTargetWaveLeft+'px';\n this.waveEl.style.width = tapTargetWaveWidth+'px';\n this.waveEl.style.height = tapTargetWaveHeight+'px';\n }\n\n /**\n * Open Tap Target.\n */\n open = () => {\n if (this.isOpen) return;\n // onOpen callback\n if (typeof this.options.onOpen === 'function') {\n this.options.onOpen.call(this, this._origin);\n }\n this.isOpen = true;\n this.wrapper.classList.add('open');\n document.body.addEventListener('click', this._handleDocumentClick, true);\n document.body.addEventListener('touchend', this._handleDocumentClick);\n };\n\n /**\n * Close Tap Target.\n */\n close = () => {\n if (!this.isOpen) return;\n // onClose callback\n if (typeof this.options.onClose === 'function') {\n this.options.onClose.call(this, this._origin);\n }\n this.isOpen = false;\n this.wrapper.classList.remove('open');\n document.body.removeEventListener('click', this._handleDocumentClick, true);\n document.body.removeEventListener('touchend', this._handleDocumentClick);\n };\n}\n","import { Modal } from \"./modal\";\nimport { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement, I18nOptions } from \"./component\";\n\nexport type Views = \"hours\" | \"minutes\";\n\nexport interface TimepickerOptions extends BaseOptions {\n /**\n * Dial radius.\n * @default 135\n */\n dialRadius: number;\n /**\n * Outer radius.\n * @default 105\n */\n outerRadius: number;\n /**\n * Inner radius.\n * @default 70\n */\n innerRadius: number;\n /**\n * Tick radius.\n * @default 20\n */\n tickRadius: number;\n /**\n * Duration of the transition from/to the hours/minutes view.\n * @default 350\n */\n duration: number;\n /**\n * Specify a DOM element OR selector for a DOM element to render\n * the time picker in, by default it will be placed before the input.\n * @default null\n */\n container: HTMLElement | string | null;\n /**\n * Show the clear button in the Timepicker.\n * @default false\n */\n showClearBtn: boolean;\n /**\n * Default time to set on the timepicker 'now' or '13:14'.\n * @default 'now';\n */\n defaultTime: string;\n /**\n * Millisecond offset from the defaultTime.\n * @default 0\n */\n fromNow: number;\n /**\n * Internationalization options.\n */\n i18n: Partial<I18nOptions>;\n /**\n * Automatically close picker when minute is selected.\n * @default false;\n */\n autoClose: boolean;\n /**\n * Use 12 hour AM/PM clock instead of 24 hour clock.\n * @default true\n */\n twelveHour: boolean;\n /**\n * Vibrate device when dragging clock hand.\n * @default true\n */\n vibrate: boolean;\n /**\n * Callback function called before modal is opened.\n * @default null\n */\n onOpenStart: (el: HTMLElement) => void;\n /**\n * Callback function called after modal is opened.\n * @default null\n */\n onOpenEnd: (el: HTMLElement) => void;\n /**\n * Callback function called before modal is closed.\n * @default null\n */\n onCloseStart: (el: HTMLElement) => void;\n /**\n * Callback function called after modal is closed.\n * @default null\n */\n onCloseEnd: (el: HTMLElement) => void;\n /**\n * Callback function when a time is selected.\n * @default null\n */\n onSelect: (hour: number, minute: number) => void;\n}\n\nlet _defaults: TimepickerOptions = {\n dialRadius: 135,\n outerRadius: 105,\n innerRadius: 70,\n tickRadius: 20,\n duration: 350,\n container: null,\n defaultTime: 'now', // default time, 'now' or '13:14' e.g.\n fromNow: 0, // Millisecond offset from the defaultTime\n showClearBtn: false,\n // internationalization\n i18n: {\n cancel: 'Cancel',\n clear: 'Clear',\n done: 'Ok'\n },\n autoClose: false, // auto close when minute is selected\n twelveHour: true, // change to 12 hour AM/PM clock from 24 hour\n vibrate: true, // vibrate the device when dragging clock hand\n // Callbacks\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null,\n onCloseEnd: null,\n onSelect: null\n};\n\ntype Point = {\n x: number,\n y: number\n};\n\nexport class Timepicker extends Component<TimepickerOptions> {\n declare el: HTMLInputElement;\n id: string;\n modal: Modal;\n modalEl: HTMLElement;\n plate: any;\n digitalClock: any;\n inputHours: HTMLInputElement;\n inputMinutes: HTMLInputElement;\n x0: number;\n y0: number;\n moved: boolean;\n dx: number;\n dy: number;\n /**\n * Current view on the timepicker.\n * @default 'hours'\n */\n currentView: Views;\n hand: any;\n minutesView: HTMLElement;\n hours: any;\n minutes: any;\n /** The selected time. */\n time: string;\n /**\n * If the time is AM or PM on twelve-hour clock.\n * @default 'PM'\n */\n amOrPm: \"AM\" | \"PM\";\n static _template: any;\n /** If the picker is open. */\n isOpen: boolean;\n /** Vibrate device when dragging clock hand. */\n vibrate: \"vibrate\" | \"webkitVibrate\" | null;\n _canvas: HTMLElement;\n hoursView: any;\n spanAmPm: HTMLSpanElement;\n footer: HTMLElement;\n private _amBtn: HTMLElement;\n private _pmBtn: HTMLElement;\n bg: Element;\n bearing: Element;\n g: Element;\n toggleViewTimer: string | number | NodeJS.Timeout;\n canvas: any;\n vibrateTimer: any;\n\n constructor(el: HTMLInputElement, options: Partial<TimepickerOptions>) {\n super(el, options, Timepicker);\n (this.el as any).M_Timepicker = this;\n\n this.options = {\n ...Timepicker.defaults,\n ...options\n };\n\n this.id = Utils.guid();\n this._insertHTMLIntoDOM();\n this._setupModal();\n this._setupVariables();\n this._setupEventHandlers();\n this._clockSetup();\n this._pickerSetup();\n }\n\n static get defaults(): TimepickerOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Timepicker.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLInputElement, options?: Partial<TimepickerOptions>): Timepicker;\n /**\n * Initializes instances of Timepicker.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<HTMLInputElement | MElement>, options?: Partial<TimepickerOptions>): Timepicker[];\n /**\n * Initializes instances of Timepicker.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLInputElement | InitElements<HTMLInputElement | MElement>, options: Partial<TimepickerOptions> = {}): Timepicker | Timepicker[] {\n return super.init(els, options, Timepicker);\n }\n\n static _addLeadingZero(num: number) {\n return (num < 10 ? '0' : '') + num;\n }\n\n static _createSVGEl(name: string) {\n let svgNS = 'http://www.w3.org/2000/svg';\n return document.createElementNS(svgNS, name);\n }\n\n static _Pos(e: TouchEvent | MouseEvent): Point {\n if (e.type.startsWith(\"touch\") && (e as TouchEvent).targetTouches.length >= 1) {\n return { x: (e as TouchEvent).targetTouches[0].clientX, y: (e as TouchEvent).targetTouches[0].clientY };\n }\n // mouse event\n return { x: (e as MouseEvent).clientX, y: (e as MouseEvent).clientY };\n }\n\n static getInstance(el: HTMLElement): Timepicker {\n return (el as any).M_Timepicker;\n }\n\n destroy() {\n this._removeEventHandlers();\n this.modal.destroy();\n this.modalEl.remove();\n (this.el as any).M_Timepicker = undefined;\n }\n\n _setupEventHandlers() {\n this.el.addEventListener('click', this._handleInputClick);\n this.el.addEventListener('keydown', this._handleInputKeydown);\n this.plate.addEventListener('mousedown', this._handleClockClickStart);\n this.plate.addEventListener('touchstart', this._handleClockClickStart);\n this.digitalClock.addEventListener('keyup', this._inputFromTextField);\n this.inputHours.addEventListener('click', () => this.showView('hours'));\n this.inputMinutes.addEventListener('click', () => this.showView('minutes'));\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('click', this._handleInputClick);\n this.el.removeEventListener('keydown', this._handleInputKeydown);\n }\n\n _handleInputClick = () => {\n this.open();\n }\n\n _handleInputKeydown = (e: KeyboardEvent) => {\n if (Utils.keys.ENTER.includes(e.key)) {\n e.preventDefault();\n this.open();\n }\n }\n\n _handleTimeInputEnterKey = (e: KeyboardEvent) => {\n if (Utils.keys.ENTER.includes(e.key)) {\n e.preventDefault();\n this._inputFromTextField();\n }\n }\n\n _handleClockClickStart = (e) => {\n e.preventDefault();\n let clockPlateBR = this.plate.getBoundingClientRect();\n let offset = { x: clockPlateBR.left, y: clockPlateBR.top };\n\n this.x0 = offset.x + this.options.dialRadius;\n this.y0 = offset.y + this.options.dialRadius;\n this.moved = false;\n let clickPos = Timepicker._Pos(e);\n this.dx = clickPos.x - this.x0;\n this.dy = clickPos.y - this.y0;\n\n // Set clock hands\n this.setHand(this.dx, this.dy, false);\n // Mousemove on document\n document.addEventListener('mousemove', this._handleDocumentClickMove);\n document.addEventListener('touchmove', this._handleDocumentClickMove);\n // Mouseup on document\n document.addEventListener('mouseup', this._handleDocumentClickEnd);\n document.addEventListener('touchend', this._handleDocumentClickEnd);\n }\n\n _handleDocumentClickMove = (e) => {\n e.preventDefault();\n let clickPos = Timepicker._Pos(e);\n let x = clickPos.x - this.x0;\n let y = clickPos.y - this.y0;\n this.moved = true;\n this.setHand(x, y, false);\n }\n\n _handleDocumentClickEnd = (e) => {\n e.preventDefault();\n document.removeEventListener('mouseup', this._handleDocumentClickEnd);\n document.removeEventListener('touchend', this._handleDocumentClickEnd);\n let clickPos = Timepicker._Pos(e);\n let x = clickPos.x - this.x0;\n let y = clickPos.y - this.y0;\n if (this.moved && x === this.dx && y === this.dy) {\n this.setHand(x, y);\n }\n if (this.currentView === 'hours') {\n this.showView('minutes', this.options.duration / 2);\n }\n else if (this.options.autoClose) {\n this.minutesView.classList.add('timepicker-dial-out');\n setTimeout(() => {\n this.done();\n }, this.options.duration / 2);\n }\n if (typeof this.options.onSelect === 'function') {\n this.options.onSelect.call(this, this.hours, this.minutes);\n }\n // Unbind mousemove event\n document.removeEventListener('mousemove', this._handleDocumentClickMove);\n document.removeEventListener('touchmove', this._handleDocumentClickMove);\n }\n\n _insertHTMLIntoDOM() {\n const template = document.createElement('template');\n template.innerHTML = Timepicker._template.trim();\n this.modalEl = <HTMLElement>template.content.firstChild;\n this.modalEl.id = 'modal-' + this.id;\n\n // Append popover to input by default\n const optEl = this.options.container;\n const containerEl = optEl instanceof HTMLElement ? optEl : document.querySelector(optEl);\n\n if (this.options.container && !!containerEl) {\n containerEl.append(this.modalEl);\n }\n else {\n this.el.parentElement.appendChild(this.modalEl);\n }\n }\n\n _setupModal() {\n this.modal = Modal.init(this.modalEl, {\n onOpenStart: this.options.onOpenStart,\n onOpenEnd: this.options.onOpenEnd,\n onCloseStart: this.options.onCloseStart,\n onCloseEnd: () => {\n if (typeof this.options.onCloseEnd === 'function') {\n this.options.onCloseEnd.call(this);\n }\n this.isOpen = false;\n }\n });\n }\n\n _setupVariables() {\n this.currentView = 'hours';\n this.vibrate = navigator.vibrate\n ? 'vibrate'\n : (navigator as any).webkitVibrate\n ? 'webkitVibrate'\n : null;\n this._canvas = this.modalEl.querySelector('.timepicker-canvas');\n this.plate = this.modalEl.querySelector('.timepicker-plate');\n this.digitalClock = this.modalEl.querySelector('.timepicker-display-column');\n this.hoursView = this.modalEl.querySelector('.timepicker-hours');\n this.minutesView = this.modalEl.querySelector('.timepicker-minutes');\n this.inputHours = this.modalEl.querySelector('.timepicker-input-hours');\n this.inputMinutes = this.modalEl.querySelector('.timepicker-input-minutes');\n this.spanAmPm = this.modalEl.querySelector('.timepicker-span-am-pm');\n this.footer = this.modalEl.querySelector('.timepicker-footer');\n this.amOrPm = 'PM';\n }\n\n private _createButton(text: string, visibility: string): HTMLButtonElement {\n const button = document.createElement('button');\n button.classList.add('btn-flat', 'waves-effect');\n button.style.visibility = visibility;\n button.type = 'button';\n button.tabIndex = this.options.twelveHour ? 3 : 1;\n button.innerText = text;\n return button;\n }\n\n _pickerSetup() {\n const clearButton = this._createButton(this.options.i18n.clear, this.options.showClearBtn ? '' : 'hidden');\n clearButton.classList.add('timepicker-clear');\n clearButton.addEventListener('click', this.clear);\n this.footer.appendChild(clearButton);\n\n const confirmationBtnsContainer = document.createElement('div');\n confirmationBtnsContainer.classList.add('confirmation-btns');\n this.footer.append(confirmationBtnsContainer);\n\n const cancelButton = this._createButton(this.options.i18n.cancel, '');\n cancelButton.classList.add('timepicker-close');\n cancelButton.addEventListener('click', this.close);\n confirmationBtnsContainer.appendChild(cancelButton);\n\n const doneButton = this._createButton(this.options.i18n.done, '');\n doneButton.classList.add('timepicker-close');\n doneButton.addEventListener('click', this.done);\n confirmationBtnsContainer.appendChild(doneButton);\n }\n\n _clockSetup() {\n if (this.options.twelveHour) {\n // AM Button\n this._amBtn = document.createElement('div');\n this._amBtn.classList.add('am-btn');\n this._amBtn.innerText = 'AM';\n this._amBtn.addEventListener('click', this._handleAmPmClick);\n this.spanAmPm.appendChild(this._amBtn);\n // PM Button\n this._pmBtn = document.createElement('div');\n this._pmBtn.classList.add('pm-btn');\n this._pmBtn.innerText = 'PM';\n this._pmBtn.addEventListener('click', this._handleAmPmClick);\n this.spanAmPm.appendChild(this._pmBtn);\n }\n this._buildHoursView();\n this._buildMinutesView();\n this._buildSVGClock();\n }\n\n _buildSVGClock() {\n // Draw clock hands and others\n let dialRadius = this.options.dialRadius;\n let tickRadius = this.options.tickRadius;\n let diameter = dialRadius * 2;\n let svg = Timepicker._createSVGEl('svg');\n svg.setAttribute('class', 'timepicker-svg');\n svg.setAttribute('width', diameter.toString());\n svg.setAttribute('height', diameter.toString());\n let g = Timepicker._createSVGEl('g');\n g.setAttribute('transform', 'translate(' + dialRadius + ',' + dialRadius + ')');\n let bearing = Timepicker._createSVGEl('circle');\n bearing.setAttribute('class', 'timepicker-canvas-bearing');\n bearing.setAttribute('cx', '0');\n bearing.setAttribute('cy', '0');\n bearing.setAttribute('r', '4');\n let hand = Timepicker._createSVGEl('line');\n hand.setAttribute('x1', '0');\n hand.setAttribute('y1', '0');\n let bg = Timepicker._createSVGEl('circle');\n bg.setAttribute('class', 'timepicker-canvas-bg');\n bg.setAttribute('r', tickRadius.toString());\n g.appendChild(hand);\n g.appendChild(bg);\n g.appendChild(bearing);\n svg.appendChild(g);\n this._canvas.appendChild(svg);\n this.hand = hand;\n this.bg = bg;\n this.bearing = bearing;\n this.g = g;\n }\n\n _buildHoursView() {\n const $tick = document.createElement('div');\n $tick.classList.add('timepicker-tick');\n // Hours view\n if (this.options.twelveHour) {\n for (let i = 1; i < 13; i += 1) {\n const tick = <HTMLElement>$tick.cloneNode(true);\n const radian = (i / 6) * Math.PI;\n const radius = this.options.outerRadius;\n tick.style.left = this.options.dialRadius + Math.sin(radian) * radius - this.options.tickRadius + 'px';\n tick.style.top = this.options.dialRadius - Math.cos(radian) * radius - this.options.tickRadius + 'px';\n tick.innerHTML = i === 0 ? '00' : i.toString();\n this.hoursView.appendChild(tick);\n // tick.on(mousedownEvent, mousedown);\n }\n }\n else {\n for (let i = 0; i < 24; i += 1) {\n const tick = <HTMLElement>$tick.cloneNode(true);\n const radian = (i / 6) * Math.PI;\n const inner = i > 0 && i < 13;\n const radius = inner ? this.options.innerRadius : this.options.outerRadius;\n tick.style.left = this.options.dialRadius + Math.sin(radian) * radius - this.options.tickRadius + 'px';\n tick.style.top = this.options.dialRadius - Math.cos(radian) * radius - this.options.tickRadius + 'px';\n tick.innerHTML = i === 0 ? '00' : i.toString();\n this.hoursView.appendChild(tick);\n // tick.on(mousedownEvent, mousedown);\n }\n }\n }\n\n _buildMinutesView() {\n const _tick = document.createElement('div');\n _tick.classList.add('timepicker-tick');\n // Minutes view\n for (let i = 0; i < 60; i += 5) {\n const tick = <HTMLElement>_tick.cloneNode(true);\n const radian = (i / 30) * Math.PI;\n tick.style.left =\n this.options.dialRadius +\n Math.sin(radian) * this.options.outerRadius -\n this.options.tickRadius +\n 'px';\n tick.style.top =\n this.options.dialRadius -\n Math.cos(radian) * this.options.outerRadius -\n this.options.tickRadius +\n 'px';\n tick.innerHTML = Timepicker._addLeadingZero(i);\n this.minutesView.appendChild(tick);\n }\n }\n\n _handleAmPmClick = (e) => {\n const btnClicked = <HTMLElement>e.target;\n this.amOrPm = btnClicked.classList.contains('am-btn') ? 'AM' : 'PM';\n this._updateAmPmView();\n }\n\n _updateAmPmView() {\n if (this.options.twelveHour) {\n if (this.amOrPm === 'PM') {\n this._amBtn.classList.remove('text-primary');\n this._pmBtn.classList.add('text-primary');\n }\n else if (this.amOrPm === 'AM') {\n this._amBtn.classList.add('text-primary');\n this._pmBtn.classList.remove('text-primary');\n }\n }\n }\n\n _updateTimeFromInput() {\n // Get the time\n let value = ((this.el.value || this.options.defaultTime || '') + '').split(':');\n if (this.options.twelveHour && !(typeof value[1] === 'undefined')) {\n if (value[1].toUpperCase().indexOf('AM') > 0) {\n this.amOrPm = 'AM';\n } else {\n this.amOrPm = 'PM';\n }\n value[1] = value[1].replace('AM', '').replace('PM', '');\n }\n if (value[0] === 'now') {\n let now = new Date(+new Date() + this.options.fromNow);\n value = [now.getHours().toString(), now.getMinutes().toString()];\n if (this.options.twelveHour) {\n this.amOrPm = parseInt(value[0]) >= 12 && parseInt(value[0]) < 24 ? 'PM' : 'AM';\n }\n }\n this.hours = +value[0] || 0;\n this.minutes = +value[1] || 0;\n this.inputHours.value = this.hours;\n this.inputMinutes.value = Timepicker._addLeadingZero(this.minutes);\n\n this._updateAmPmView();\n }\n\n /**\n * Show hours or minutes view on timepicker.\n * @param view The name of the view you want to switch to, 'hours' or 'minutes'.\n */\n showView = (view: Views, delay: number = null) => {\n if (view === 'minutes' && getComputedStyle(this.hoursView).visibility === 'visible') {\n // raiseCallback(this.options.beforeHourSelect);\n }\n let isHours = view === 'hours',\n nextView = isHours ? this.hoursView : this.minutesView,\n hideView = isHours ? this.minutesView : this.hoursView;\n this.currentView = view;\n\n if (isHours) {\n this.inputHours.classList.add('text-primary');\n this.inputMinutes.classList.remove('text-primary');\n }\n else {\n this.inputHours.classList.remove('text-primary');\n this.inputMinutes.classList.add('text-primary');\n }\n\n // Transition view\n hideView.classList.add('timepicker-dial-out');\n\n nextView.style.visibility = 'visible';\n nextView.classList.remove('timepicker-dial-out');\n\n // Reset clock hand\n this.resetClock(delay);\n // After transitions ended\n clearTimeout(this.toggleViewTimer);\n this.toggleViewTimer = setTimeout(() => {\n hideView.style.visibility = 'hidden';\n }, this.options.duration);\n }\n\n resetClock(delay) {\n let view = this.currentView,\n value = this[view],\n isHours = view === 'hours',\n unit = Math.PI / (isHours ? 6 : 30),\n radian = value * unit,\n radius =\n isHours && value > 0 && value < 13 ? this.options.innerRadius : this.options.outerRadius,\n x = Math.sin(radian) * radius,\n y = -Math.cos(radian) * radius,\n self = this;\n\n if (delay) {\n this.canvas?.classList.add('timepicker-canvas-out');\n setTimeout(() => {\n self.canvas?.classList.remove('timepicker-canvas-out');\n self.setHand(x, y);\n }, delay);\n }\n else {\n this.setHand(x, y);\n }\n }\n\n _inputFromTextField = () => {\n const isHours = this.currentView === 'hours';\n if (isHours) {\n const value = parseInt(this.inputHours.value);\n if (value > 0 && value < 13) {\n this.drawClockFromTimeInput(value, isHours);\n this.showView('minutes', this.options.duration / 2);\n this.hours = value;\n this.inputMinutes.focus();\n }\n else {\n const hour = new Date().getHours();\n this.inputHours.value = (hour % 12).toString();\n }\n }\n else {\n const value = parseInt(this.inputMinutes.value);\n if (value >= 0 && value < 60) {\n this.inputMinutes.value = Timepicker._addLeadingZero(value);\n this.drawClockFromTimeInput(value, isHours);\n this.minutes = value;\n (<HTMLElement>this.modalEl.querySelector('.confirmation-btns :nth-child(2)')).focus();\n }\n else {\n const minutes = new Date().getMinutes();\n this.inputMinutes.value = Timepicker._addLeadingZero(minutes);\n }\n }\n }\n\n drawClockFromTimeInput(value, isHours) {\n const unit = Math.PI / (isHours ? 6 : 30);\n const radian = value * unit;\n let radius;\n if (this.options.twelveHour) {\n radius = this.options.outerRadius;\n }\n let cx1 = Math.sin(radian) * (radius - this.options.tickRadius),\n cy1 = -Math.cos(radian) * (radius - this.options.tickRadius),\n cx2 = Math.sin(radian) * radius,\n cy2 = -Math.cos(radian) * radius;\n this.hand.setAttribute('x2', cx1.toString());\n this.hand.setAttribute('y2', cy1.toString());\n this.bg.setAttribute('cx', cx2.toString());\n this.bg.setAttribute('cy', cy2.toString());\n }\n\n setHand(x, y, roundBy5: boolean = false) {\n let radian = Math.atan2(x, -y),\n isHours = this.currentView === 'hours',\n unit = Math.PI / (isHours || roundBy5 ? 6 : 30),\n z = Math.sqrt(x * x + y * y),\n inner = isHours && z < (this.options.outerRadius + this.options.innerRadius) / 2,\n radius = inner ? this.options.innerRadius : this.options.outerRadius;\n\n if (this.options.twelveHour) {\n radius = this.options.outerRadius;\n }\n\n // Radian should in range [0, 2PI]\n if (radian < 0) {\n radian = Math.PI * 2 + radian;\n }\n\n // Get the round value\n let value = Math.round(radian / unit);\n\n // Get the round radian\n radian = value * unit;\n\n // Correct the hours or minutes\n if (this.options.twelveHour) {\n if (isHours) {\n if (value === 0) value = 12;\n } else {\n if (roundBy5) value *= 5;\n if (value === 60) value = 0;\n }\n } else {\n if (isHours) {\n if (value === 12) {\n value = 0;\n }\n value = inner ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12;\n } else {\n if (roundBy5) {\n value *= 5;\n }\n if (value === 60) {\n value = 0;\n }\n }\n }\n\n // Once hours or minutes changed, vibrate the device\n if (this[this.currentView] !== value) {\n if (this.vibrate && this.options.vibrate) {\n // Do not vibrate too frequently\n if (!this.vibrateTimer) {\n navigator[this.vibrate](10);\n this.vibrateTimer = setTimeout(() => {\n this.vibrateTimer = null;\n }, 100);\n }\n }\n }\n\n this[this.currentView] = value;\n if (isHours) {\n this.inputHours.value = value.toString();\n }\n else {\n this.inputMinutes.value = Timepicker._addLeadingZero(value);\n }\n\n // Set clock hand and others' position\n let cx1 = Math.sin(radian) * (radius - this.options.tickRadius),\n cy1 = -Math.cos(radian) * (radius - this.options.tickRadius),\n cx2 = Math.sin(radian) * radius,\n cy2 = -Math.cos(radian) * radius;\n this.hand.setAttribute('x2', cx1.toString());\n this.hand.setAttribute('y2', cy1.toString());\n this.bg.setAttribute('cx', cx2.toString());\n this.bg.setAttribute('cy', cy2.toString());\n }\n\n /**\n * Open timepicker.\n */\n open = () => {\n if (this.isOpen) return;\n this.isOpen = true;\n this._updateTimeFromInput();\n this.showView('hours');\n this.modal.open(undefined);\n }\n\n /**\n * Close timepicker.\n */\n close = () => {\n if (!this.isOpen) return;\n this.isOpen = false;\n this.modal.close();\n }\n\n done = (e = null, clearValue = null) => {\n // Set input value\n let last = this.el.value;\n let value = clearValue\n ? ''\n : Timepicker._addLeadingZero(this.hours) + ':' + Timepicker._addLeadingZero(this.minutes);\n this.time = value;\n if (!clearValue && this.options.twelveHour) {\n value = `${value} ${this.amOrPm}`;\n }\n this.el.value = value;\n // Trigger change event\n if (value !== last) {\n this.el.dispatchEvent(new Event('change',{bubbles:true, cancelable:true, composed:true}));\n }\n this.close();\n this.el.focus();\n }\n\n clear = () => {\n this.done(null, true);\n }\n\n static {\n Timepicker._template = `\n <div class=\"modal timepicker-modal\">\n <div class=\"modal-content timepicker-container\">\n <div class=\"timepicker-digital-display\">\n <div class=\"timepicker-text-container\">\n <div class=\"timepicker-display-column\">\n <input type=\"text\" maxlength=\"2\" autofocus class=\"timepicker-input-hours text-primary\" />\n :\n <input type=\"text\" maxlength=\"2\" class=\"timepicker-input-minutes\" />\n </div>\n <div class=\"timepicker-display-column timepicker-display-am-pm\">\n <div class=\"timepicker-span-am-pm\"></div>\n </div>\n </div>\n </div>\n <div class=\"timepicker-analog-display\">\n <div class=\"timepicker-plate\">\n <div class=\"timepicker-canvas\"></div>\n <div class=\"timepicker-dial timepicker-hours\"></div>\n <div class=\"timepicker-dial timepicker-minutes timepicker-dial-out\"></div>\n </div>\n <div class=\"timepicker-footer\"></div>\n </div>\n </div>\n </div`;\n }\n}\n","import anim from \"animejs\";\n\nimport { BaseOptions } from \"./component\";\n\nexport interface ToastOptions extends BaseOptions {\n /**\n * The content of the Toast.\n * @default \"\"\n */\n text: string;\n /**\n * Length in ms the Toast stays before dismissal.\n * @default 4000\n */\n displayLength: number;\n /**\n * Transition in duration in milliseconds.\n * @default 300\n */\n inDuration: number;\n /**\n * Transition out duration in milliseconds.\n * @default 375\n */\n outDuration: number;\n /**\n * Classes to be added to the toast element.\n * @default \"\"\n */\n classes: string;\n /**\n * Callback function called when toast is dismissed.\n * @default null\n */\n completeCallback: () => void;\n /**\n * The percentage of the toast's width it takes fora drag\n * to dismiss a Toast.\n * @default 0.8\n */\n activationPercent: number;\n}\n\nlet _defaults: ToastOptions = {\n text: '',\n displayLength: 4000,\n inDuration: 300,\n outDuration: 375,\n classes: '',\n completeCallback: null,\n activationPercent: 0.8\n};\n\nexport class Toast {\n /** The toast element. */\n el: HTMLDivElement;\n /**\n * The remaining amount of time in ms that the toast\n * will stay before dismissal.\n */\n timeRemaining: number;\n /**\n * Describes the current pan state of the Toast.\n */\n panning: boolean;\n options: ToastOptions;\n message: string;\n counterInterval: NodeJS.Timeout;\n wasSwiped: boolean;\n startingXPos: number;\n xPos: number;\n time: number;\n deltaX: number;\n velocityX: number;\n\n static _toasts: Toast[];\n static _container: any;\n static _draggedToast: Toast;\n\n constructor(options: Partial<ToastOptions>) {\n this.options = {\n ...Toast.defaults,\n ...options\n };\n this.message = this.options.text;\n this.panning = false;\n this.timeRemaining = this.options.displayLength;\n if (Toast._toasts.length === 0) {\n Toast._createContainer();\n }\n // Create new toast\n Toast._toasts.push(this);\n let toastElement = this._createToast();\n (toastElement as any).M_Toast = this;\n this.el = toastElement;\n this._animateIn();\n this._setTimer();\n }\n\n static get defaults(): ToastOptions {\n return _defaults;\n }\n\n static getInstance(el: HTMLElement): Toast {\n return (el as any).M_Toast;\n }\n\n static _createContainer() {\n const container = document.createElement('div');\n container.setAttribute('id', 'toast-container');\n // Add event handler\n container.addEventListener('touchstart', Toast._onDragStart);\n container.addEventListener('touchmove', Toast._onDragMove);\n container.addEventListener('touchend', Toast._onDragEnd);\n container.addEventListener('mousedown', Toast._onDragStart);\n document.addEventListener('mousemove', Toast._onDragMove);\n document.addEventListener('mouseup', Toast._onDragEnd);\n document.body.appendChild(container);\n Toast._container = container;\n }\n\n static _removeContainer() {\n document.removeEventListener('mousemove', Toast._onDragMove);\n document.removeEventListener('mouseup', Toast._onDragEnd);\n Toast._container.remove();\n Toast._container = null;\n }\n\n static _onDragStart(e: TouchEvent | MouseEvent) {\n if (e.target && (<HTMLElement>e.target).closest('.toast')) {\n const toastElem = (<HTMLElement>e.target).closest('.toast');\n const toast: Toast = (toastElem as any).M_Toast;\n toast.panning = true;\n Toast._draggedToast = toast;\n toast.el.classList.add('panning');\n toast.el.style.transition = '';\n toast.startingXPos = Toast._xPos(e);\n toast.time = Date.now();\n toast.xPos = Toast._xPos(e);\n }\n }\n\n static _onDragMove(e: TouchEvent | MouseEvent) {\n if (!!Toast._draggedToast) {\n e.preventDefault();\n const toast = Toast._draggedToast;\n toast.deltaX = Math.abs(toast.xPos - Toast._xPos(e));\n toast.xPos = Toast._xPos(e);\n toast.velocityX = toast.deltaX / (Date.now() - toast.time);\n toast.time = Date.now();\n\n const totalDeltaX = toast.xPos - toast.startingXPos;\n const activationDistance = toast.el.offsetWidth * toast.options.activationPercent;\n toast.el.style.transform = `translateX(${totalDeltaX}px)`;\n toast.el.style.opacity = (1 - Math.abs(totalDeltaX / activationDistance)).toString();\n }\n }\n\n static _onDragEnd() {\n if (!!Toast._draggedToast) {\n let toast = Toast._draggedToast;\n toast.panning = false;\n toast.el.classList.remove('panning');\n\n let totalDeltaX = toast.xPos - toast.startingXPos;\n let activationDistance = toast.el.offsetWidth * toast.options.activationPercent;\n let shouldBeDismissed = Math.abs(totalDeltaX) > activationDistance || toast.velocityX > 1;\n\n // Remove toast\n if (shouldBeDismissed) {\n toast.wasSwiped = true;\n toast.dismiss();\n // Animate toast back to original position\n }\n else {\n toast.el.style.transition = 'transform .2s, opacity .2s';\n toast.el.style.transform = '';\n toast.el.style.opacity = '';\n }\n Toast._draggedToast = null;\n }\n }\n\n static _xPos(e: TouchEvent | MouseEvent) {\n if (e.type.startsWith(\"touch\") && (e as TouchEvent).targetTouches.length >= 1) {\n return (e as TouchEvent).targetTouches[0].clientX;\n }\n // mouse event\n return (e as MouseEvent).clientX;\n }\n\n /**\n * dismiss all toasts.\n */\n static dismissAll() {\n for (let toastIndex in Toast._toasts) {\n Toast._toasts[toastIndex].dismiss();\n }\n }\n\n _createToast() {\n const toast = document.createElement('div');\n toast.classList.add('toast');\n toast.setAttribute('role', 'alert');\n toast.setAttribute('aria-live', 'assertive');\n toast.setAttribute('aria-atomic', 'true');\n\n // Add custom classes onto toast\n if (this.options.classes.length > 0) {\n toast.classList.add(...this.options.classes.split(' '));\n }\n\n // Set text content\n else toast.innerText = this.message;\n\n // Append toast\n Toast._container.appendChild(toast);\n return toast;\n }\n\n _animateIn() {\n // Animate toast in\n anim({\n targets: this.el,\n top: 0,\n opacity: 1,\n duration: this.options.inDuration,\n easing: 'easeOutCubic'\n });\n }\n\n /**\n * Create setInterval which automatically removes toast when timeRemaining >= 0\n * has been reached.\n */\n _setTimer() {\n if (this.timeRemaining !== Infinity) {\n this.counterInterval = setInterval(() => {\n // If toast is not being dragged, decrease its time remaining\n if (!this.panning) {\n this.timeRemaining -= 20;\n }\n // Animate toast out\n if (this.timeRemaining <= 0) {\n this.dismiss();\n }\n }, 20);\n }\n }\n\n /**\n * Dismiss toast with animation.\n */\n dismiss() {\n window.clearInterval(this.counterInterval);\n let activationDistance = this.el.offsetWidth * this.options.activationPercent;\n\n if (this.wasSwiped) {\n this.el.style.transition = 'transform .05s, opacity .05s';\n this.el.style.transform = `translateX(${activationDistance}px)`;\n this.el.style.opacity = '0';\n }\n\n anim({\n targets: this.el,\n opacity: 0,\n marginTop: -40,\n duration: this.options.outDuration,\n easing: 'easeOutExpo',\n complete: () => {\n // Call the optional callback\n if (typeof this.options.completeCallback === 'function') {\n this.options.completeCallback();\n }\n // Remove toast from DOM\n this.el.remove();\n Toast._toasts.splice(Toast._toasts.indexOf(this), 1);\n if (Toast._toasts.length === 0) {\n Toast._removeContainer();\n }\n }\n });\n }\n\n static {\n Toast._toasts = [];\n Toast._container = null;\n Toast._draggedToast = null;\n }\n}","import anim from \"animejs\";\n\nimport { Utils } from \"./utils\";\nimport { Bounding } from \"./bounding\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface TooltipOptions extends BaseOptions {\n /**\n * Delay time before tooltip disappears.\n * @default 200\n */\n exitDelay: number;\n /**\n * Delay time before tooltip appears.\n * @default 0\n */\n enterDelay: number;\n /**\n * Text string for the tooltip.\n * @default \"\"\n */\n text: string;\n /**\n * Set distance tooltip appears away from its activator\n * excluding transitionMovement.\n * @default 5\n */\n margin: number;\n /**\n * Enter transition duration.\n * @default 300\n */\n inDuration: number;\n /**\n * Opacity of the tooltip.\n * @default 1\n */\n opacity: number;\n /**\n * Exit transition duration.\n * @default 250\n */\n outDuration: number;\n /**\n * Set the direction of the tooltip.\n * @default 'bottom'\n */\n position: 'top' | 'right' | 'bottom' | 'left';\n /**\n * Amount in px that the tooltip moves during its transition.\n * @default 10\n */\n transitionMovement: number;\n}\n\nconst _defaults: TooltipOptions = {\n exitDelay: 200,\n enterDelay: 0,\n text: '',\n margin: 5,\n inDuration: 250,\n outDuration: 200,\n position: 'bottom',\n transitionMovement: 10,\n opacity: 1\n};\n\nexport class Tooltip extends Component<TooltipOptions> {\n /**\n * If tooltip is open.\n */\n isOpen: boolean;\n /**\n * If tooltip is hovered.\n */\n isHovered: boolean;\n /**\n * If tooltip is focused.\n */\n isFocused: boolean;\n tooltipEl: HTMLElement;\n private _exitDelayTimeout: string | number | NodeJS.Timeout;\n private _enterDelayTimeout: string | number | NodeJS.Timeout;\n xMovement: number;\n yMovement: number;\n\n constructor(el: HTMLElement, options: Partial<TooltipOptions>) {\n super(el, options, Tooltip);\n (this.el as any).M_Tooltip = this;\n\n this.options = {\n ...Tooltip.defaults,\n ...options\n };\n \n this.isOpen = false;\n this.isHovered = false;\n this.isFocused = false;\n this._appendTooltipEl();\n this._setupEventHandlers();\n }\n\n static get defaults(): TooltipOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Tooltip.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<TooltipOptions>): Tooltip;\n /**\n * Initializes instances of Tooltip.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<MElement>, options?: Partial<TooltipOptions>): Tooltip[];\n /**\n * Initializes instances of Tooltip.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: HTMLElement | InitElements<MElement>, options: Partial<TooltipOptions> = {}): Tooltip | Tooltip[] {\n return super.init(els, options, Tooltip);\n }\n\n static getInstance(el: HTMLElement): Tooltip {\n return (el as any).M_Tooltip;\n }\n\n destroy() {\n this.tooltipEl.remove();\n this._removeEventHandlers();\n (this.el as any).M_Tooltip = undefined;\n }\n\n _appendTooltipEl() {\n this.tooltipEl = document.createElement('div');\n this.tooltipEl.classList.add('material-tooltip');\n\n const tooltipContentEl = document.createElement('div');\n tooltipContentEl.classList.add('tooltip-content');\n this._setTooltipContent(tooltipContentEl);\n this.tooltipEl.appendChild(tooltipContentEl);\n document.body.appendChild(this.tooltipEl);\n }\n\n _setTooltipContent(tooltipContentEl: HTMLElement) {\n tooltipContentEl.innerText = this.options.text;\n }\n\n _updateTooltipContent() {\n this._setTooltipContent(this.tooltipEl.querySelector('.tooltip-content'));\n }\n\n _setupEventHandlers() {\n this.el.addEventListener('mouseenter', this._handleMouseEnter);\n this.el.addEventListener('mouseleave', this._handleMouseLeave);\n this.el.addEventListener('focus', this._handleFocus, true);\n this.el.addEventListener('blur', this._handleBlur, true);\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('mouseenter', this._handleMouseEnter);\n this.el.removeEventListener('mouseleave', this._handleMouseLeave);\n this.el.removeEventListener('focus', this._handleFocus, true);\n this.el.removeEventListener('blur', this._handleBlur, true);\n }\n\n /**\n * Show tooltip.\n */\n open = (isManual: boolean) => {\n if (this.isOpen) return;\n isManual = isManual === undefined ? true : undefined; // Default value true\n this.isOpen = true;\n // Update tooltip content with HTML attribute options\n this.options = {...this.options, ...this._getAttributeOptions()};\n this._updateTooltipContent();\n this._setEnterDelayTimeout(isManual);\n }\n \n /**\n * Hide tooltip.\n */\n close = () => {\n if (!this.isOpen) return;\n this.isHovered = false;\n this.isFocused = false;\n this.isOpen = false;\n this._setExitDelayTimeout();\n }\n\n _setExitDelayTimeout() {\n clearTimeout(this._exitDelayTimeout);\n this._exitDelayTimeout = setTimeout(() => {\n if (this.isHovered || this.isFocused) return;\n this._animateOut();\n }, this.options.exitDelay);\n }\n\n _setEnterDelayTimeout(isManual) {\n clearTimeout(this._enterDelayTimeout);\n this._enterDelayTimeout = setTimeout(() => {\n if (!this.isHovered && !this.isFocused && !isManual) return;\n this._animateIn();\n }, this.options.enterDelay);\n }\n\n _positionTooltip() {\n const tooltip: HTMLElement = this.tooltipEl;\n const origin = (this.el as HTMLElement),\n originHeight = origin.offsetHeight,\n originWidth = origin.offsetWidth,\n tooltipHeight = tooltip.offsetHeight,\n tooltipWidth = tooltip.offsetWidth,\n margin = this.options.margin;\n\n (this.xMovement = 0), (this.yMovement = 0);\n\n let targetTop = origin.getBoundingClientRect().top + Utils.getDocumentScrollTop();\n let targetLeft = origin.getBoundingClientRect().left + Utils.getDocumentScrollLeft();\n if (this.options.position === 'top') {\n targetTop += -tooltipHeight - margin;\n targetLeft += originWidth / 2 - tooltipWidth / 2;\n this.yMovement = -this.options.transitionMovement;\n } else if (this.options.position === 'right') {\n targetTop += originHeight / 2 - tooltipHeight / 2;\n targetLeft += originWidth + margin;\n this.xMovement = this.options.transitionMovement;\n } else if (this.options.position === 'left') {\n targetTop += originHeight / 2 - tooltipHeight / 2;\n targetLeft += -tooltipWidth - margin;\n this.xMovement = -this.options.transitionMovement;\n } else {\n targetTop += originHeight + margin;\n targetLeft += originWidth / 2 - tooltipWidth / 2;\n this.yMovement = this.options.transitionMovement;\n }\n\n const newCoordinates = this._repositionWithinScreen(\n targetLeft,\n targetTop,\n tooltipWidth,\n tooltipHeight\n );\n\n tooltip.style.top = newCoordinates.y+'px';\n tooltip.style.left = newCoordinates.x+'px';\n }\n\n _repositionWithinScreen(x: number, y: number, width: number, height: number) {\n const scrollLeft = Utils.getDocumentScrollLeft();\n const scrollTop = Utils.getDocumentScrollTop();\n let newX = x - scrollLeft;\n let newY = y - scrollTop;\n\n const bounding: Bounding = {\n left: newX,\n top: newY,\n width: width,\n height: height\n };\n const offset = this.options.margin + this.options.transitionMovement;\n const edges = Utils.checkWithinContainer(document.body, bounding, offset);\n\n if (edges.left) {\n newX = offset;\n } else if (edges.right) {\n newX -= newX + width - window.innerWidth;\n }\n if (edges.top) {\n newY = offset;\n } else if (edges.bottom) {\n newY -= newY + height - window.innerHeight;\n }\n return {\n x: newX + scrollLeft,\n y: newY + scrollTop\n };\n }\n\n _animateIn() {\n this._positionTooltip();\n this.tooltipEl.style.visibility = 'visible';\n anim.remove(this.tooltipEl);\n anim({\n targets: this.tooltipEl,\n opacity: this.options.opacity || 1,\n translateX: this.xMovement,\n translateY: this.yMovement,\n duration: this.options.inDuration,\n easing: 'easeOutCubic'\n });\n }\n\n _animateOut() {\n anim.remove(this.tooltipEl);\n anim({\n targets: this.tooltipEl,\n opacity: 0,\n translateX: 0,\n translateY: 0,\n duration: this.options.outDuration,\n easing: 'easeOutCubic'\n });\n }\n\n _handleMouseEnter = () => {\n this.isHovered = true;\n this.isFocused = false; // Allows close of tooltip when opened by focus.\n this.open(false);\n }\n\n _handleMouseLeave = () => {\n this.isHovered = false;\n this.isFocused = false; // Allows close of tooltip when opened by focus.\n this.close();\n }\n\n _handleFocus = () => {\n if (Utils.tabPressed) {\n this.isFocused = true;\n this.open(false);\n }\n }\n\n _handleBlur = () => {\n this.isFocused = false;\n this.close();\n }\n\n _getAttributeOptions() {\n const attributeOptions = {};\n const tooltipTextOption = this.el.getAttribute('data-tooltip');\n const positionOption = this.el.getAttribute('data-position');\n if (tooltipTextOption) {\n (attributeOptions as any).text = tooltipTextOption;\n }\n if (positionOption) {\n (attributeOptions as any).position = positionOption;\n }\n return attributeOptions;\n }\n}\n","import { Edges } from './edges';\nimport { Bounding } from './bounding';\n\n/**\n * Class with utilitary functions for global usage.\n */\nexport class Utils {\n /** Specifies wether tab is pressed or not. */\n static tabPressed: boolean = false;\n /** Specifies wether there is a key pressed. */\n static keyDown: boolean = false;\n\n /**\n * Key maps.\n */\n static keys = {\n TAB: ['Tab'],\n ENTER: ['Enter'],\n ESC: ['Escape', 'Esc'],\n BACKSPACE: ['Backspace'],\n ARROW_UP: ['ArrowUp', 'Up'],\n ARROW_DOWN: ['ArrowDown', 'Down'],\n ARROW_LEFT: ['ArrowLeft', 'Left'],\n ARROW_RIGHT: ['ArrowRight', 'Right'],\n DELETE: ['Delete', 'Del'],\n };\n\n /**\n * Detects when a key is pressed.\n * @param e Event instance.\n */\n static docHandleKeydown(e: KeyboardEvent) {\n Utils.keyDown = true;\n if ([...Utils.keys.TAB, ...Utils.keys.ARROW_DOWN, ...Utils.keys.ARROW_UP].includes(e.key)) {\n Utils.tabPressed = true;\n }\n }\n\n /**\n * Detects when a key is released.\n * @param e Event instance.\n */\n static docHandleKeyup(e: KeyboardEvent) {\n Utils.keyDown = false;\n if ([...Utils.keys.TAB, ...Utils.keys.ARROW_DOWN, ...Utils.keys.ARROW_UP].includes(e.key)) {\n Utils.tabPressed = false;\n }\n }\n\n /**\n * Detects when document is focused.\n * @param e Event instance.\n */\n static docHandleFocus(e: FocusEvent) {\n if (Utils.keyDown) {\n document.body.classList.add('keyboard-focused');\n }\n }\n\n /**\n * Detects when document is not focused.\n * @param e Event instance.\n */\n static docHandleBlur(e: FocusEvent) {\n document.body.classList.remove('keyboard-focused');\n }\n\n /**\n * Generates a unique string identifier.\n */\n static guid(): string {\n const s4 = (): string => {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n }\n\n /**\n * Checks for exceeded edges\n * @param container Container element.\n * @param bounding Bounding rect.\n * @param offset Element offset.\n */\n static checkWithinContainer(container: HTMLElement, bounding: Bounding, offset: number): Edges {\n let edges = {\n top: false,\n right: false,\n bottom: false,\n left: false\n };\n\n let containerRect = container.getBoundingClientRect();\n // If body element is smaller than viewport, use viewport height instead.\n let containerBottom =\n container === document.body\n ? Math.max(containerRect.bottom, window.innerHeight)\n : containerRect.bottom;\n\n let scrollLeft = container.scrollLeft;\n let scrollTop = container.scrollTop;\n\n let scrolledX = bounding.left - scrollLeft;\n let scrolledY = bounding.top - scrollTop;\n\n // Check for container and viewport for each edge\n if (scrolledX < containerRect.left + offset || scrolledX < offset) {\n edges.left = true;\n }\n\n if (\n scrolledX + bounding.width > containerRect.right - offset ||\n scrolledX + bounding.width > window.innerWidth - offset\n ) {\n edges.right = true;\n }\n\n if (scrolledY < containerRect.top + offset || scrolledY < offset) {\n edges.top = true;\n }\n\n if (\n scrolledY + bounding.height > containerBottom - offset ||\n scrolledY + bounding.height > window.innerHeight - offset\n ) {\n edges.bottom = true;\n }\n\n return edges;\n }\n\n /**\n * Checks if element can be aligned in multiple directions.\n * @param el Element to be inspected.\n * @param container Container element.\n * @param bounding Bounding rect.\n * @param offset Element offset.\n */\n static checkPossibleAlignments(el: HTMLElement, container: HTMLElement, bounding: Bounding, offset: number) {\n let canAlign: {\n top: boolean,\n right: boolean,\n bottom: boolean,\n left: boolean,\n spaceOnTop: number,\n spaceOnRight: number,\n spaceOnBottom: number\n spaceOnLeft: number\n } = {\n top: true,\n right: true,\n bottom: true,\n left: true,\n spaceOnTop: null,\n spaceOnRight: null,\n spaceOnBottom: null,\n spaceOnLeft: null\n };\n\n let containerAllowsOverflow = getComputedStyle(container).overflow === 'visible';\n let containerRect = container.getBoundingClientRect();\n let containerHeight = Math.min(containerRect.height, window.innerHeight);\n let containerWidth = Math.min(containerRect.width, window.innerWidth);\n let elOffsetRect = el.getBoundingClientRect();\n\n let scrollLeft = container.scrollLeft;\n let scrollTop = container.scrollTop;\n\n let scrolledX = bounding.left - scrollLeft;\n let scrolledYTopEdge = bounding.top - scrollTop;\n let scrolledYBottomEdge = bounding.top + elOffsetRect.height - scrollTop;\n\n // Check for container and viewport for left\n canAlign.spaceOnRight = !containerAllowsOverflow\n ? containerWidth - (scrolledX + bounding.width)\n : window.innerWidth - (elOffsetRect.left + bounding.width);\n if (canAlign.spaceOnRight < 0) {\n canAlign.left = false;\n }\n\n // Check for container and viewport for Right\n canAlign.spaceOnLeft = !containerAllowsOverflow\n ? scrolledX - bounding.width + elOffsetRect.width\n : elOffsetRect.right - bounding.width;\n if (canAlign.spaceOnLeft < 0) {\n canAlign.right = false;\n }\n\n // Check for container and viewport for Top\n canAlign.spaceOnBottom = !containerAllowsOverflow\n ? containerHeight - (scrolledYTopEdge + bounding.height + offset)\n : window.innerHeight - (elOffsetRect.top + bounding.height + offset);\n if (canAlign.spaceOnBottom < 0) {\n canAlign.top = false;\n }\n\n // Check for container and viewport for Bottom\n canAlign.spaceOnTop = !containerAllowsOverflow\n ? scrolledYBottomEdge - (bounding.height - offset)\n : elOffsetRect.bottom - (bounding.height + offset);\n if (canAlign.spaceOnTop < 0) {\n canAlign.bottom = false;\n }\n\n return canAlign;\n }\n\n /**\n * Retrieves target element id from trigger.\n * @param trigger Trigger element.\n */\n static getIdFromTrigger(trigger: HTMLElement): string {\n let id = trigger.dataset.target;\n if (!id) {\n id = trigger.getAttribute('href');\n return id ? id.slice(1) : '';\n }\n return id;\n }\n\n /**\n * Retrieves document scroll postion from top.\n */\n static getDocumentScrollTop(): number {\n return window.scrollY || document.documentElement.scrollTop || document.body.scrollTop || 0;\n };\n\n /**\n * Retrieves document scroll postion from left.\n */\n static getDocumentScrollLeft(): number {\n return window.scrollX || document.documentElement.scrollLeft || document.body.scrollLeft || 0;\n }\n\n /**\n * Fires the given function after a certain ammount of time.\n * @param func Function to be fired.\n * @param wait Wait time.\n * @param options Additional options.\n */\n public static throttle(func: Function, wait: number, options: Partial<{leading:boolean,trailing:boolean}> = null) {\n let context: object, args: IArguments, result: any;\n let timeout = null;\n let previous = 0;\n options || (options = {});\n let later = function() {\n previous = options.leading === false ? 0 : new Date().getTime();\n timeout = null;\n result = func.apply(context, args);\n context = args = null;\n };\n return function() {\n let now = new Date().getTime();\n if (!previous && options.leading === false) previous = now;\n let remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n }\n}","type RGBColor = {\n r: number,\n g: number,\n b: number,\n}\n\ntype Position = {\n x: number,\n y: number,\n}\n\nexport class Waves {\n\n private static _offset(el: HTMLElement) {\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n return {\n top: box.top + window.pageYOffset - docElem.clientTop,\n left: box.left + window.pageXOffset - docElem.clientLeft\n };\n }\n\n // https://phoenix-dx.com/css-techniques-for-material-ripple-effect/\n\n public static renderWaveEffect(targetElement: HTMLElement, position: Position|null = null, color: RGBColor|null = null): void {\n const isCentered = position === null;\n const duration = 500;\n let animationFrame: number, animationStart: number;\n const animationStep = function(timestamp: number) {\n if (!animationStart) {\n animationStart = timestamp;\n }\n const frame = timestamp - animationStart;\n if (frame < duration) {\n const easing = (frame/duration) * (2 - (frame/duration));\n const circle = isCentered ? 'circle at 50% 50%' : `circle at ${position.x}px ${position.y}px`;\n const waveColor = `rgba(${color?.r || 0}, ${color?.g || 0}, ${color?.b || 0}, ${ 0.3 * (1-easing) })`;\n const stop = 90 * easing + \"%\";\n targetElement.style.backgroundImage = \"radial-gradient(\"+circle+\", \"+waveColor+\" \"+stop+\", transparent \"+stop+\")\";\n animationFrame = window.requestAnimationFrame(animationStep);\n }\n else {\n targetElement.style.backgroundImage = 'none';\n window.cancelAnimationFrame(animationFrame);\n }\n };\n animationFrame = window.requestAnimationFrame(animationStep);\n }\n\n static Init() {\n document.addEventListener(\"DOMContentLoaded\", () => {\n document.body.addEventListener('click', e => {\n const trigger = <HTMLElement>e.target;\n const el = <HTMLElement>trigger.closest('.waves-effect');\n if (el && el.contains(trigger)) {\n const isCircular = el.classList.contains('waves-circle');\n const x = e.pageX - Waves._offset(el).left;\n const y = e.pageY - Waves._offset(el).top;\n\n let color = null;\n if (el.classList.contains('waves-light'))\n color = {r:255, g:255, b:255};\n\n Waves.renderWaveEffect(el, isCircular ? null : {x, y}, color);\n }\n });\n });\n\n }\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Autocomplete } from './autocomplete';\nimport { FloatingActionButton } from './buttons';\nimport { Cards } from './cards';\nimport { Carousel } from './carousel';\nimport { CharacterCounter } from './characterCounter';\nimport { Chips } from './chips';\nimport { Collapsible } from './collapsible';\nimport { Datepicker } from './datepicker';\nimport { Dropdown } from './dropdown';\nimport { Forms } from './forms';\nimport { Materialbox } from './materialbox';\nimport { Modal } from './modal';\nimport { Parallax } from './parallax';\nimport { Pushpin } from './pushpin';\nimport { ScrollSpy } from './scrollspy';\nimport { FormSelect } from './select';\nimport { Sidenav } from './sidenav';\nimport { Slider } from './slider';\nimport { Tabs } from './tabs';\nimport { TapTarget } from './tapTarget';\nimport { Timepicker } from './timepicker';\nimport { Toast, ToastOptions } from './toasts';\nimport { Tooltip } from './tooltip';\nimport { Waves } from './waves';\nimport { Range } from './range';\nimport { Utils } from './utils';\n\nexport class M {\n static version = '2.0.3-alpha';\n\n static Autocomplete: typeof Autocomplete = Autocomplete;\n static Tabs: typeof Tabs = Tabs;\n static Carousel: typeof Carousel = Carousel;\n static Dropdown: typeof Dropdown = Dropdown;\n static FloatingActionButton: typeof FloatingActionButton = FloatingActionButton;\n static Chips: typeof Chips = Chips;\n static Collapsible: typeof Collapsible = Collapsible;\n static Datepicker: typeof Datepicker = Datepicker;\n static CharacterCounter: typeof CharacterCounter = CharacterCounter;\n static Forms: typeof Forms = Forms;\n static FormSelect: typeof FormSelect = FormSelect;\n static Modal: typeof Modal = Modal;\n static Pushpin: typeof Pushpin = Pushpin;\n static Materialbox: typeof Materialbox = Materialbox;\n static Parallax: typeof Parallax = Parallax;\n static Slider: typeof Slider = Slider;\n static Timepicker: typeof Timepicker = Timepicker;\n /** Creates a toast. */\n static toast: (opt: Partial<ToastOptions>) => Toast = (opt) => new Toast(opt) ;\n static Tooltip: typeof Tooltip = Tooltip;\n static Sidenav: typeof Sidenav = Sidenav;\n static TapTarget: typeof TapTarget = TapTarget;\n static ScrollSpy: typeof ScrollSpy = ScrollSpy;\n static Range: typeof Range = Range;\n static Waves: typeof Waves = Waves;\n static Utils: typeof Utils = Utils;\n\n static {\n document.addEventListener('keydown', Utils.docHandleKeydown, true);\n document.addEventListener('keyup', Utils.docHandleKeyup, true);\n document.addEventListener('focus', Utils.docHandleFocus, true);\n document.addEventListener('blur', Utils.docHandleBlur, true);\n Cards.Init();\n Forms.Init();\n Chips.Init();\n Waves.Init();\n Range.Init();\n }\n\n /**\n * Automatically initialize components.\n * @param context Root element to initialize. Defaults to `document.body`.\n */\n static AutoInit(context: HTMLElement = document.body) {\n let registry = {\n Autocomplete: context.querySelectorAll('.autocomplete:not(.no-autoinit)'),\n Carousel: context.querySelectorAll('.carousel:not(.no-autoinit)'),\n Chips: context.querySelectorAll('.chips:not(.no-autoinit)'),\n Collapsible: context.querySelectorAll('.collapsible:not(.no-autoinit)'),\n Datepicker: context.querySelectorAll('.datepicker:not(.no-autoinit)'),\n Dropdown: context.querySelectorAll('.dropdown-trigger:not(.no-autoinit)'),\n Materialbox: context.querySelectorAll('.materialboxed:not(.no-autoinit)'),\n Modal: context.querySelectorAll('.modal:not(.no-autoinit)'),\n Parallax: context.querySelectorAll('.parallax:not(.no-autoinit)'),\n Pushpin: context.querySelectorAll('.pushpin:not(.no-autoinit)'),\n ScrollSpy: context.querySelectorAll('.scrollspy:not(.no-autoinit)'),\n FormSelect: context.querySelectorAll('select:not(.no-autoinit)'),\n Sidenav: context.querySelectorAll('.sidenav:not(.no-autoinit)'),\n Tabs: context.querySelectorAll('.tabs:not(.no-autoinit)'),\n TapTarget: context.querySelectorAll('.tap-target:not(.no-autoinit)'),\n Timepicker: context.querySelectorAll('.timepicker:not(.no-autoinit)'),\n Tooltip: context.querySelectorAll('.tooltipped:not(.no-autoinit)'),\n FloatingActionButton: context.querySelectorAll('.fixed-action-btn:not(.no-autoinit)'),\n };\n M.Autocomplete.init(registry.Autocomplete, {});\n M.Carousel.init(registry.Carousel, {});\n M.Chips.init(registry.Chips, {});\n M.Collapsible.init(registry.Collapsible, {});\n M.Datepicker.init(registry.Datepicker, {});\n M.Dropdown.init(registry.Dropdown, {});\n M.Materialbox.init(registry.Materialbox, {});\n M.Modal.init(registry.Modal, {});\n M.Parallax.init(registry.Parallax, {});\n M.Pushpin.init(registry.Pushpin, {});\n M.ScrollSpy.init(registry.ScrollSpy, {});\n M.FormSelect.init(registry.FormSelect, {});\n M.Sidenav.init(registry.Sidenav, {});\n M.Tabs.init(registry.Tabs, {});\n M.TapTarget.init(registry.TapTarget, {});\n M.Timepicker.init(registry.Timepicker, {});\n M.Tooltip.init(registry.Tooltip, {});\n M.FloatingActionButton.init(registry.FloatingActionButton, {});\n }\n}"],"names":["root","factory","exports","module","define","amd","a","i","this","defaultInstanceSettings","update","begin","loopBegin","changeBegin","change","changeComplete","loopComplete","complete","loop","direction","autoplay","timelineOffset","defaultTweenSettings","duration","delay","endDelay","easing","round","validTransforms","cache","CSS","springs","minMax","val","min","max","Math","stringContains","str","text","indexOf","applyArguments","func","args","apply","is","arr","Array","isArray","obj","Object","prototype","toString","call","pth","hasOwnProperty","svg","SVGElement","inp","HTMLInputElement","dom","nodeType","fnc","und","nil","hex","test","rgb","hsl","col","key","parseEasingParameters","string","match","exec","split","map","p","parseFloat","spring","params","mass","stiffness","damping","velocity","w0","sqrt","zeta","wd","b","solver","t","progress","exp","cos","sin","cached","frame","elapsed","rest","steps","ceil","eases","functionEasings","bezier","kSampleStepSize","A","aA1","aA2","B","C","calcBezier","aT","getSlope","mX1","mY1","mX2","mY2","sampleValues","Float32Array","x","aX","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","abs","binarySubdivide","getTForX","penner","linear","Sine","PI","Circ","Back","Bounce","pow2","pow","Elastic","amplitude","period","asin","forEach","name","keys","easeIn","parseEasings","ease","selectString","document","querySelectorAll","e","filterArray","callback","len","length","thisArg","arguments","result","push","flattenArray","reduce","concat","toArray","o","NodeList","HTMLCollection","slice","arrayContains","some","cloneObject","clone","replaceObjectProps","o1","o2","mergeObjects","getUnit","getFunctionValue","animatable","target","id","total","getAttribute","el","prop","convertPxToUnit","value","unit","tempEl","createElement","tagName","parentEl","parentNode","body","appendChild","style","position","width","factor","offsetWidth","removeChild","convertedUnit","getCSSValue","uppercasePropName","replace","toLowerCase","getComputedStyle","getPropertyValue","getAnimationType","getElementTransforms","m","transform","reg","transforms","Map","set","getOriginalTargetValue","propName","defaultVal","getTransformUnit","get","list","getTransformValue","getRelativeValue","to","from","operator","u","y","validateValue","rgbValue","hexValue","r","g","parseInt","hexToRgba","hslValue","h","s","l","hue2rgb","q","hslToRgba","colorToRgb","originalUnit","unitLess","substr","getDistance","p1","p2","getPolylineLength","previousPos","points","totalLength","numberOfItems","currentPos","getItem","getTotalLength","getCircleLength","getRectLength","getLineLength","getPolygonLength","getParentSvg","pathEl","svgData","parentSvgEl","getParentSvgEl","rect","getBoundingClientRect","viewBoxAttr","height","viewBox","w","vW","vH","getPathProgress","path","isPathTargetInsideSVG","point","offset","getPointAtLength","p0","scaleX","scaleY","property","atan2","decomposeValue","rgx","original","numbers","Number","strings","parseTargets","targets","item","pos","self","getAnimatables","parsed","normalizePropertyTweens","tweenSettings","settings","propArray","v","k","setProgressValue","css","attribute","setAttribute","object","manual","last","setTargetsValue","properties","valueUnit","originalValue","animType","getAnimations","animatables","tweens","previousTween","tween","normalizeTweenValues","tweenValue","toUnit","previousValue","fromUnit","start","end","isPath","isColor","normalizeTweens","lastTween","type","createAnimation","getInstanceTimings","animations","animLength","getTlOffset","anim","timings","instanceID","activeInstances","engine","raf","step","activeInstancesLength","activeInstance","paused","splice","tick","requestAnimationFrame","undefined","addEventListener","anime","suspendWhenDocumentHidden","isDocumentHidden","cancelAnimationFrame","instance","_onDocumentVisibility","hidden","children","startTime","lastTime","now","childrenLength","resolve","makePromise","promise","window","Promise","_resolve","finished","instanceSettings","keyframes","propertyNames","newKey","flattenKeyframes","getProperties","createNewInstance","toggleInstanceDirection","reversed","child","adjustTime","time","resetTime","currentTime","speed","seekChild","seek","setAnimationsProgress","insTime","animationsLength","tweenLength","eased","isNaN","toNumbersLength","n","toNumber","fromNumber","stringsLength","n$1","currentValue","setCallback","cb","passThrough","setInstanceProgress","engineTime","insDuration","insDelay","insEndDelay","reversePlayback","i$1","syncInstanceChildren","began","loopBegan","changeBegan","changeCompleted","remaining","completed","reset","pause","play","reverse","restart","remove","removeTargetsFromInstance","removeTargetsFromAnimations","targetsArray","c","childAnimations","version","running","convertPx","percent","setDashoffset","pathLength","stagger","grid","axis","fromIndex","fromFirst","fromCenter","fromLast","isRange","val1","val2","values","maxValue","index","fromX","fromY","floor","distanceX","distanceY","timeline","tl","add","instanceParams","tlIndex","ins","insParams","tlDuration","random","_defaults","data","onAutocomplete","dropdownOptions","autoFocus","closeOnClick","coverTrigger","minLength","isMultiSelect","onSearch","autocomplete","normSearch","toLocaleLowerCase","setMenuItems","options","filter","option","includes","maxDropDownHeight","allowUnsafeHTML","Autocomplete","Component","constructor","super","_handleInputBlur","_mousedown","close","_resetAutocomplete","_handleInputKeyupAndFocus","_keydown","count","actualValue","Utils","ENTER","ARROW_UP","ARROW_DOWN","oldVal","tabPressed","open","_setStatusLoading","selectedValues","_triggerChanged","_handleInputKeydown","numItems","container","activeIndex","liElement","selectOption","preventDefault","$active","classList","scrollIntoView","behavior","block","inline","_handleInputClick","_handleContainerMousedownAndTouchstart","_handleContainerMouseupAndTouchend","inputText","isOpen","_renderDropdown","dropdown","recalculateDimensions","setTimeout","M_Autocomplete","defaults","menuItems","_setupDropdown","_setupEventHandlers","static","els","init","destroy","_removeEventHandlers","_removeDropdown","ontouchstart","removeEventListener","maxHeight","guid","parentElement","userOnItemClick","onItemClick","li","entryID","Dropdown","label","querySelector","after","_handleClick","div","_updateSelectedInfo","_resetCurrentElementPosition","replaceChildren","_highlightPartialText","input","_createDropdownItem","entry","innerHTML","sel","image","img","src","parts","createTextNode","highlight","textContent","itemText","description","innerText","gridTemplateColumns","getGridConfig","append","statusElement","_refreshInputText","dispatchEvent","Event","setValues","entries","find","checkbox","checked","selectedEntry","focus","hoverEnabled","toolbarEnabled","FloatingActionButton","_handleFABClick","_handleDocumentClick","_menu","_animateInToolbar","_animateInFAB","_animateOutFAB","M_FloatingActionButton","_anchor","_floatingBtns","_floatingBtnsReverse","offsetY","offsetX","opacity","scale","translateY","translateX","scaleFactor","windowWidth","innerWidth","windowHeight","innerHeight","btnRect","backdrop","fabColor","backgroundColor","left","bottom","clientWidth","btnBottom","btnLeft","btnWidth","textAlign","transition","overflow","trigger","card","closest","cardReveal","elem","contains","initialOverflow","closeArea","display","activator","dist","shift","padding","numVisible","fullWidth","indicators","noWrap","onCycleTo","Carousel","center","_handleThrottledResize","throttle","_handleResize","bind","_handleCarouselTap","pressed","dragged","verticalDragged","reference","_xpos","referenceY","_ypos","timestamp","Date","clearInterval","ticker","setInterval","_track","_handleCarouselDrag","delta","deltaY","_scroll","stopPropagation","_handleCarouselRelease","dim","_autoScroll","_handleCarouselClick","clickedElem","clickedIndex","_wrap","clientX","next","prev","_cycleTo","_handleIndicatorClick","indicator","itemWidth","imageHeight","clientHeight","_setCarouselHeight","M_Carousel","hasMultipleSlides","showIndicators","images","itemHeight","_indicators","xform","every","prefix","imageOnly","firstSlide","firstImage","naturalWidth","naturalHeight","adjustedHeight","offsetHeight","slideHeight","startsWith","targetTouches","clientY","half","dir","alignment","zTranslation","tweenedOpacity","centerTweenedOpacity","scrollingTimeout","clearTimeout","lastCenter","numVisibleOffset","diff","activeIndicator","transformString","_updateItemStyle","_currItem","oneTimeCallback","zIndex","visibility","freeze","CharacterCounter","updateCounter","maxLength","actualLength","isValidLength","counterString","_validateInput","counterEl","M_CharacterCounter","isInvalid","_setupCounter","_removeCounter","float","fontSize","placeholder","secondaryPlaceholder","closeIconClass","autocompleteOptions","autocompleteOnly","limit","Infinity","onChipAdd","onChipSelect","onChipDelete","gGetIndex","Chips","_handleChipClick","_chip","clickedClose","deleteChip","_input","selectChip","_handleInputFocus","hasAutocomplete","addChip","BACKSPACE","ARROW_LEFT","chipsData","M_Chips","_chips","_setupInput","_renderChips","_setupAutocomplete","_setPlaceholder","_setupLabel","getData","_handleChipsKeydown","_handleChipsKeyup","_handleChipsBlur","chips","chipsKeydown","tag","currChips","DELETE","selectIndex","_selectedChip","ARROW_RIGHT","_renderChip","chip","renderedChip","closeIcon","insertBefore","firstChild","chipElem","items","_label","_isValidAndNotExist","isValid","doesNotExist","before","chipIndex","accordion","onOpenStart","onOpenEnd","onCloseStart","onCloseEnd","inDuration","outDuration","Collapsible","_handleCollapsibleClick","header","isActive","_handleCollapsibleKeydown","listItems","activeLis","activeLi","_animateIn","_animateOut","M_Collapsible","_headers","tabIndex","activeBodies","paddingTop","paddingBottom","pTop","pBottom","finalHeight","scrollHeight","classDef","HTMLElement","console","error","Error","getInstance","instances","Element","autoClose","format","parse","defaultDate","setDefaultDate","disableWeekends","disableDayFn","firstDay","minDate","maxDate","yearRange","minYear","maxYear","minMonth","maxMonth","startRange","endRange","isRTL","yearRangeReverse","showMonthAfterYear","showDaysInNextAndPreviousMonths","showClearBtn","i18n","cancel","clear","done","previousMonth","nextMonth","months","monthsShort","weekdays","weekdaysShort","weekdaysAbbrev","events","onSelect","onOpen","onClose","onDraw","Datepicker","_handleCalendarClick","prevMonth","setDate","_finishSelection","_handleClearClick","date","setInputValue","_handleMonthChange","gotoMonth","_handleYearChange","gotoYear","_handleInputChange","firedBy","_isDate","draw","modal","M_Datepicker","setHours","_setupVariables","_insertHTMLIntoDOM","_setupModal","defDate","gotoDate","getTime","day","getDay","year","month","_isLeapYear","modalEl","destroySelects","oldYearSelect","calendarEl","FormSelect","oldMonthSelect","clearBtn","doneBtn","cancelBtn","optEl","Modal","formats","join","preventOnSelect","_renderDateDisplay","_setToStartOfDay","CustomEvent","bubbles","cancelable","composed","detail","displayDate","getMonth","getDate","yearTextEl","getFullYear","dateTextEl","newCalendar","calendars","firstVisibleDate","lastVisibleDate","visibleDate","setMonth","adjustCalendars","adjustCalendar","calendar","render","randId","opts","days","_getDaysInMonth","row","yearOfPreviousMonth","yearOfNextMonth","daysInPreviousMonth","cells","isWeekSelected","isSelected","_compareDates","isToday","hasEvent","toDateString","isEmpty","dayNumber","monthNumber","yearNumber","isStartRange","isEndRange","isInRange","dayConfig","isDisabled","_isWeekend","renderDay","renderRow","renderTable","ariaSelected","isRowSelected","renderHead","renderBody","renderDayName","rows","renderTitle","refYear","j","monthHtml","yearHtml","isMinYear","isMaxYear","html","force","_y","_m","yearSelect","monthSelect","classes","constrainWidth","template","_template","trim","content","d","dd","ddd","dddd","mm","mmm","mmmm","yy","yyyy","abbr","hover","_handleMouseEnter","_handleMouseLeave","toEl","relatedTarget","leaveToDropdownContent","leaveToActiveDropdownTrigger","closestTrigger","M_Dropdown","isTouchMoving","_handleTriggerKeydown","_handleDocumentTouchmove","_handleDropdownClick","itemEl","_handleDropdownKeydown","arrowUpOrDown","TAB","newFocusedIndex","focusedIndex","hasFoundNewIndex","dropdownEl","_focusFocusedItem","focusedElement","activatableElement","click","ESC","keyText","isLetter","specialKeys","filterQuery","newOptionEl","filterTimeout","_resetFilterQuery","_resetDropdownStyles","_placeDropdown","_setupTemporaryEventHandlers","_removeTemporaryEventHandlers","top","transformOrigin","_dropdowns","getIdFromTrigger","getElementById","isScrollable","_moveDropdown","_makeDropdownFocusable","containerEl","preventScroll","_getDropdownPosition","closestOverflowParent","offsetParent","triggerBRect","dropdownBRect","idealHeight","idealWidth","idealXPos","idealYPos","dropdownBounds","alignments","checkPossibleAlignments","verticalAlignment","horizontalAlignment","spaceOnTop","spaceOnBottom","oppositeAlignment","spaceOnLeft","spaceOnRight","_getClosestAncestor","condition","ancestor","positionInfo","Forms","textarea","hiddenDiv","fontFamily","lineHeight","paddingRight","paddingLeft","hasAttribute","overflowWrap","whiteSpace","originalHeight","prevLength","once","textArea","textareaAutoResize","fileInput","InitFileInputPath","pathInput","files","filenames","Materialbox","_handleMaterialboxClick","doneAnimating","overlayActive","_handleWindowScroll","_handleWindowResize","_handleWindowEscape","_updateVars","originalWidth","_makeAncestorsOverflowVisible","willChange","attrWidth","attrHeight","removeAttribute","_overlay","overlayOffset","caption","_photoCaption","widthPercent","heightPercent","newWidth","newHeight","ratio","_animateImageIn","_animateImageOut","M_Materialbox","originInlineStyles","_changedAncestorList","curr","_offset","box","docElem","documentElement","pageYOffset","clientTop","pageXOffset","clientLeft","maxWidth","animOptions","getDocumentScrollLeft","getDocumentScrollTop","anchestor","preventScrolling","dismissible","startingTop","endingTop","_handleTriggerClick","modalId","modalInstance","M_Modal","_handleOverlayClick","_handleModalCloseClick","_handleKeydown","_handleFocus","_nthModalOpened","_modalsOpen","_openingTrigger","insertAdjacentElement","_count","enterAnimOptions","exitAnimOptions","responsiveThreshold","Parallax","_handleImageLoad","_updateParallax","M_Parallax","_enabled","_img","_setupStyles","_parallaxes","parallaxInstance","_handleScrollThrottled","_handleScroll","_handleWindowResizeThrottled","containerHeight","parallaxDist","scrollTop","parallax","onPositionChange","Pushpin","M_Pushpin","originalOffset","offsetTop","_pushpins","_updatePosition","_removePinClasses","elIndex","_updateElements","scrolled","Range","_handleRangeChange","thumb","_showRangeBubble","offsetLeft","_calcRangeOffset","_handleRangeMousedownTouchstart","_handleRangeInputMousemoveTouchmove","_handleRangeMouseupTouchend","_handleRangeBlurMouseoutTouchleave","marginLeft","M_Range","_setupThumb","_removeThumb","scrollOffset","activeClass","getActiveElement","ScrollSpy","_elements","scrollspy","_ticks","right","intersections","_findElements","tickId","_enter","_elementsInView","lastTick","_exit","M_ScrollSpy","_increment","_visibleElements","hits","currTop","elTop","elLeft","elRight","elBottom","actElem","unshift","selector","_handleSelectChange","_setValueToInput","_handleOptionClick","virtualOption","_selectOptionElement","_setSelectedStates","M_FormSelect","isMultiple","multiple","_values","_arraysEqual","optionEl","previousSelectedValues","getSelectedValues","_toggleEntryFromArray","_deselectAll","_selectValue","actualSelectedValues","labelEl","wrapper","hideSelect","disabled","selectOptions","ariaMultiSelectable","realOption","_createAndAppendOptionWithIcon","_addOptionToValues","groupId","groupParent","groupChildren","childId","readOnly","ariaReadOnly","ariaRequired","attrs","attributes","attr","ariaExpanded","prepend","dropdownIcon","createElementNS","ariaHidden","userOnOpenEnd","userOnCloseEnd","selectedOption","keyDown","ariaDisabled","span","iconUrl","selected","_deselectValue","_isValueSelected","realValue","_getSelectedOptions","selectedOptions","realOptions","texts","firstDisabledOption","optionIsSelected","_activateOption","ul","edge","draggable","dragTargetWidth","Sidenav","_handleDragTargetDrag","_isCurrentlyFixed","_verticallyScrolling","isDragged","_startDrag","_dragMoveUpdate","totalDeltaX","_xPos","_startingXpos","dragDirection","_width","transformX","transformPrefix","percentOpen","_handleDragTargetRelease","_handleCloseDrag","_handleCloseRelease","_handleCloseTriggerClick","lastWindowWidth","lastWindowHeight","_enableBodyScrolling","_preventBodyScrolling","M_Sidenav","isFixed","_createOverlay","_createDragTarget","_setupClasses","_setupFixed","_sidenavs","dragTarget","passiveIfSupported","sidenavId","sidenavInstance","_time","_initialScrollTop","currentScrollTop","deltaX","velocityX","_removeClasses","_animateSidenavIn","_animateOverlayIn","slideOutPercent","_animateSidenavOut","_animateOverlayOut","endPercent","interval","pauseOnFocus","pauseOnHover","indicatorLabelFunc","Slider","currIndex","_focusCurrent","_handleAutoPauseHover","_hovered","_pause","_handleAutoPauseFocus","_focused","_handleAutoStartHover","eventPause","_handleAutoStartFocus","_handleInterval","activeElem","_slider","newActiveIndex","_slides","newIndex","M_Slider","findIndex","_activeSlide","_setSliderHeight","_sliderId","placeholderBase64","slide","backgroundImage","_setupIndicators","_animateSlide","_removeIndicators","isDirectionIn","dx","dy","arrLi","_caption","nextIndicator","ariaLabel","fromEvent","onShow","swipeable","Tabs","_setTabsAndTabWidth","_tabWidth","_tabsWidth","_indicator","_calcLeftPos","_activeTabLink","_calcRightPos","_handleTabClick","tabLink","tab","_oldContent","_content","hash","_tabLinks","prevIndex","_index","_tabsCarousel","_animateIndicator","M_Tabs","_setupActiveTabLink","_setupSwipeableTabs","_setupNormalTabs","_createIndicator","_teardownSwipeableTabs","_teardownNormalTabs","location","tabsContent","currContent","tabsWrapper","tabContent","activeTabIndex","scrollWidth","updateTabIndicator","leftDelay","rightDelay","select","tabId","TapTarget","_handleTargetClick","_handleOriginClick","_calculatePositioning","_origin","M_TapTarget","dataset","_setup","originEl","waveEl","contentEl","cloneNode","currentElem","parents","originWidth","originHeight","originTop","originLeft","scrollBarWidth","centerX","centerY","isLeft","isRight","isTop","isBottom","isCenterX","tapTargetWidth","tapTargetHeight","tapTargetTop","tapTargetLeft","tapTargetPosition","tapTargetTextWidth","tapTargetTextHeight","tapTargetTextTop","tapTargetTextLeft","tapTargetTextPadding","tapTargetTextAlign","tapTargetWaveWidth","tapTargetWaveHeight","tapTargetWaveTop","tapTargetWaveLeft","tapTargetTextRight","tapTargetTextBottom","verticalAlign","dialRadius","outerRadius","innerRadius","tickRadius","defaultTime","fromNow","twelveHour","vibrate","Timepicker","_handleTimeInputEnterKey","_inputFromTextField","_handleClockClickStart","clockPlateBR","plate","x0","y0","moved","clickPos","_Pos","setHand","_handleDocumentClickMove","_handleDocumentClickEnd","currentView","showView","minutesView","hours","minutes","_handleAmPmClick","btnClicked","amOrPm","_updateAmPmView","view","hoursView","isHours","nextView","hideView","inputHours","inputMinutes","resetClock","toggleViewTimer","drawClockFromTimeInput","hour","getHours","_addLeadingZero","getMinutes","_updateTimeFromInput","clearValue","M_Timepicker","_clockSetup","_pickerSetup","num","digitalClock","navigator","webkitVibrate","_canvas","spanAmPm","footer","_createButton","button","clearButton","confirmationBtnsContainer","cancelButton","doneButton","_amBtn","_pmBtn","_buildHoursView","_buildMinutesView","_buildSVGClock","diameter","_createSVGEl","bearing","hand","bg","$tick","radian","radius","_tick","toUpperCase","canvas","cx1","cy1","cx2","cy2","roundBy5","z","inner","vibrateTimer","displayLength","completeCallback","activationPercent","Toast","message","panning","timeRemaining","_toasts","_createContainer","toastElement","_createToast","M_Toast","_setTimer","_onDragStart","_onDragMove","_onDragEnd","_container","toast","_draggedToast","startingXPos","xPos","activationDistance","wasSwiped","dismiss","toastIndex","counterInterval","marginTop","_removeContainer","exitDelay","enterDelay","margin","transitionMovement","Tooltip","isManual","_getAttributeOptions","_updateTooltipContent","_setEnterDelayTimeout","isHovered","isFocused","_setExitDelayTimeout","_handleBlur","M_Tooltip","_appendTooltipEl","tooltipEl","tooltipContentEl","_setTooltipContent","_exitDelayTimeout","_enterDelayTimeout","_positionTooltip","tooltip","origin","tooltipHeight","tooltipWidth","xMovement","yMovement","targetTop","targetLeft","newCoordinates","_repositionWithinScreen","scrollLeft","newX","newY","bounding","edges","checkWithinContainer","attributeOptions","tooltipTextOption","positionOption","s4","substring","containerRect","containerBottom","scrolledX","scrolledY","canAlign","containerAllowsOverflow","containerWidth","elOffsetRect","scrolledYTopEdge","scrolledYBottomEdge","scrollY","scrollX","wait","context","timeout","previous","later","leading","trailing","Waves","targetElement","color","isCentered","animationFrame","animationStart","animationStep","circle","waveColor","stop","isCircular","pageX","pageY","renderWaveEffect","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","defineProperty","enumerable","Symbol","toStringTag","M","registry","opt","docHandleKeydown","docHandleKeyup","docHandleFocus","docHandleBlur","Cards","Init"],"sourceRoot":""}
|