@materializecss/materialize 1.2.1 → 2.0.0-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 +68 -313
- package/README.md +3 -3
- package/dist/css/materialize.css +1019 -1824
- package/dist/css/materialize.min.css +3 -9
- package/dist/js/materialize.js +8416 -12190
- package/dist/js/materialize.min.js +4 -3
- package/dist/js/materialize.min.js.map +1 -0
- package/package.json +13 -9
- package/sass/components/_badges.scss +12 -2
- package/sass/components/_buttons.scss +16 -11
- package/sass/components/_cards.scss +14 -9
- package/sass/components/_carousel.scss +5 -2
- package/sass/components/_chips.scss +3 -3
- package/sass/components/_collapsible.scss +22 -8
- package/sass/components/_collection.scss +14 -6
- package/sass/components/_datepicker.scss +30 -11
- package/sass/components/_dropdown.scss +6 -4
- package/sass/components/_global.scss +132 -111
- package/sass/components/_grid.scss +119 -98
- package/sass/components/_modal.scss +3 -3
- package/sass/components/_navbar.scss +31 -17
- package/sass/components/_normalize.scss +26 -124
- package/sass/components/_sidenav.scss +21 -20
- package/sass/components/_slider.scss +36 -7
- package/sass/components/_table_of_contents.scss +12 -12
- package/sass/components/_tabs.scss +47 -16
- package/sass/components/_tapTarget.scss +6 -6
- package/sass/components/_timepicker.scss +54 -46
- package/sass/components/_toast.scss +3 -3
- package/sass/components/_tooltip.scss +4 -5
- package/sass/components/_typography.scss +1 -1
- package/sass/components/_variables.scss +185 -120
- package/sass/components/forms/_checkboxes.scss +9 -9
- package/sass/components/forms/_file-input.scss +9 -7
- package/sass/components/forms/_input-fields.scss +173 -234
- package/sass/components/forms/_radio-buttons.scss +1 -1
- package/sass/components/forms/_range.scss +11 -11
- package/sass/components/forms/_select.scss +29 -19
- package/sass/components/forms/_switches.scss +22 -18
- package/sass/materialize.scss +1 -1
- package/src/autocomplete.ts +459 -0
- package/src/bounding.ts +6 -0
- package/{js/buttons.js → src/buttons.ts} +103 -162
- package/src/cards.ts +54 -0
- package/{js/carousel.js → src/carousel.ts} +137 -262
- package/src/characterCounter.ts +88 -0
- package/src/chips.ts +350 -0
- package/src/collapsible.ts +184 -0
- package/{js/component.js → src/component.ts} +6 -19
- package/{js/datepicker.js → src/datepicker.ts} +213 -299
- package/{js/dropdown.js → src/dropdown.ts} +140 -254
- package/src/edges.ts +6 -0
- package/src/forms.ts +120 -0
- package/src/global.ts +385 -0
- package/src/materialbox.ts +348 -0
- package/src/modal.ts +256 -0
- package/{js/parallax.js → src/parallax.ts} +47 -60
- package/{js/pushpin.js → src/pushpin.ts} +19 -47
- package/{js/range.js → src/range.ts} +58 -139
- package/{js/scrollspy.js → src/scrollspy.ts} +81 -153
- package/src/select.ts +448 -0
- package/{js/sidenav.js → src/sidenav.ts} +96 -202
- package/src/slider.ts +415 -0
- package/src/tabs.ts +290 -0
- package/src/tapTarget.ts +240 -0
- package/{js/timepicker.js → src/timepicker.ts} +268 -272
- package/{js/toasts.js → src/toasts.ts} +75 -134
- package/{js/tooltip.js → src/tooltip.ts} +59 -96
- package/src/waves.ts +70 -0
- package/extras/noUiSlider/nouislider.css +0 -404
- package/extras/noUiSlider/nouislider.js +0 -2147
- package/extras/noUiSlider/nouislider.min.js +0 -1
- package/js/anime.min.js +0 -34
- package/js/autocomplete.js +0 -479
- package/js/cards.js +0 -40
- package/js/cash.js +0 -960
- package/js/characterCounter.js +0 -136
- package/js/chips.js +0 -486
- package/js/collapsible.js +0 -275
- package/js/forms.js +0 -285
- package/js/global.js +0 -428
- package/js/materialbox.js +0 -453
- package/js/modal.js +0 -382
- package/js/select.js +0 -391
- package/js/slider.js +0 -359
- package/js/tabs.js +0 -402
- package/js/tapTarget.js +0 -315
- package/js/waves.js +0 -615
- package/sass/_style.scss +0 -929
- package/sass/components/_waves.scss +0 -187
- package/sass/ghpages-materialize.scss +0 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize.min.js","mappings":"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","sources":["webpack://M/./node_modules/animejs/lib/anime.es.js","webpack://M/./src/autocomplete.ts","webpack://M/./src/buttons.ts","webpack://M/./src/cards.ts","webpack://M/./src/carousel.ts","webpack://M/./src/characterCounter.ts","webpack://M/./src/chips.ts","webpack://M/./src/collapsible.ts","webpack://M/./src/component.ts","webpack://M/./src/datepicker.ts","webpack://M/./src/dropdown.ts","webpack://M/./src/forms.ts","webpack://M/./src/global.ts","webpack://M/./src/materialbox.ts","webpack://M/./src/modal.ts","webpack://M/./src/parallax.ts","webpack://M/./src/pushpin.ts","webpack://M/./src/range.ts","webpack://M/./src/scrollspy.ts","webpack://M/./src/select.ts","webpack://M/./src/sidenav.ts","webpack://M/./src/slider.ts","webpack://M/./src/tabs.ts","webpack://M/./src/tapTarget.ts","webpack://M/./src/timepicker.ts","webpack://M/./src/toasts.ts","webpack://M/./src/tooltip.ts","webpack://M/./src/waves.ts","webpack://M/webpack/bootstrap","webpack://M/webpack/runtime/define property getters","webpack://M/webpack/runtime/hasOwnProperty shorthand","webpack://M/webpack/runtime/make namespace object","webpack://M/webpack/startup"],"sourcesContent":["/*\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.0-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\nmodule.exports = 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 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) {\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 const currContent = document.querySelector(a.hash);\n currContent.classList.add('carousel-item');\n tabsContent.push(currContent);\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":["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","a","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","i","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","filteredData","options","filter","isMatch","setMenuItems","maxDropDownHeight","allowUnsafeHTML","Autocomplete","Component","constructor","super","this","M_Autocomplete","defaults","isOpen","count","activeIndex","oldVal","selectedValues","menuItems","$active","_mousedown","_setupDropdown","_setupEventHandlers","static","els","init","jquery","destroy","_removeEventHandlers","_removeDropdown","_handleInputBlurBound","_handleInputBlur","bind","_handleInputKeyupAndFocusBound","_handleInputKeyupAndFocus","_handleInputKeydownBound","_handleInputKeydown","_handleInputClickBound","_handleInputClick","_handleContainerMousedownAndTouchstartBound","_handleContainerMousedownAndTouchstart","_handleContainerMouseupAndTouchendBound","_handleContainerMouseupAndTouchend","container","ontouchstart","removeEventListener","maxHeight","M","guid","classList","parentElement","userOnItemClick","onItemClick","li","entryID","selectOption","dropdown","Dropdown","label","querySelector","after","_handleClickBound","div","_updateSelectedInfo","close","_resetAutocomplete","_keydown","actualValue","keyCode","tabPressed","open","_setStatusLoading","_triggerChanged","numItems","ENTER","liElement","preventDefault","ARROW_UP","ARROW_DOWN","scrollIntoView","behavior","block","inline","_resetCurrentElementPosition","replaceChildren","_highlightPartialText","input","_createDropdownItem","entry","innerHTML","sel","image","img","src","inputText","parts","createTextNode","highlight","textContent","itemText","description","innerText","gridTemplateColumns","getGridConfig","_renderDropdown","append","statusElement","_refreshInputText","dispatchEvent","Event","recalculateDimensions","setTimeout","setValues","entries","find","checkbox","checked","selectedEntry","focus","hoverEnabled","toolbarEnabled","FloatingActionButton","M_FloatingActionButton","_anchor","_menu","_floatingBtns","_floatingBtnsReverse","offsetY","offsetX","_handleFABClickBound","_handleFABClick","_handleOpenBound","_handleCloseBound","_handleDocumentClick","_animateInToolbar","_animateInFAB","_handleDocumentClickBound","_animateOutToolbar","_animateOutFAB","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","M_Carousel","hasMultipleSlides","showIndicators","pressed","dragged","images","itemWidth","itemHeight","clientHeight","dim","_autoScrollBound","_autoScroll","_trackBound","_track","_setCarouselHeight","_indicators","indicator","xform","every","prefix","_scroll","_handleCarouselTapBound","_handleCarouselTap","_handleCarouselDragBound","_handleCarouselDrag","_handleCarouselReleaseBound","_handleCarouselRelease","_handleCarouselClickBound","_handleCarouselClick","_handleIndicatorClickBound","_handleIndicatorClick","throttledResize","throttle","_handleResize","_handleThrottledResizeBound","verticalDragged","reference","_xpos","referenceY","_ypos","timestamp","Date","clearInterval","ticker","setInterval","delta","deltaY","stopPropagation","clickedElem","clickedIndex","_wrap","clientX","next","prev","_cycleTo","imageHeight","imageOnly","firstSlide","firstImage","naturalWidth","naturalHeight","adjustedHeight","offsetHeight","slideHeight","targetTouches","clientY","half","dir","alignment","zTranslation","tweenedOpacity","centerTweenedOpacity","scrollingTimeout","clearTimeout","lastCenter","numVisibleOffset","diff","activeIndicator","transformString","_updateItemStyle","_currItem","oneTimeCallback","zIndex","visibility","CharacterCounter","M_CharacterCounter","isInvalid","isValidLength","_setupCounter","_removeCounter","_handleUpdateCounterBound","updateCounter","counterEl","float","fontSize","maxLength","actualLength","counterString","_validateInput","placeholder","secondaryPlaceholder","autocompleteOptions","autocompleteOnly","limit","Infinity","onChipAdd","onChipSelect","onChipDelete","gGetIndex","Chips","M_Chips","chipsData","_chips","_setupInput","hasAutocomplete","_input","_renderChips","_setupAutocomplete","_setPlaceholder","_setupLabel","getData","_handleChipClickBound","_handleChipClick","_handleInputFocusBound","_handleInputFocus","_handleChipsKeydown","_handleChipsKeyup","_handleChipsBlur","_chip","clickedClose","deleteChip","selectChip","chips","chipsKeydown","tag","currChips","selectIndex","_selectedChip","addChip","_renderChip","chip","renderedChip","closeIcon","insertBefore","firstChild","chipElem","items","_label","_isValidAndNotExist","isValid","doesNotExist","before","chipIndex","accordion","onOpenStart","onOpenEnd","onCloseStart","onCloseEnd","inDuration","outDuration","Collapsible","M_Collapsible","_headers","tabIndex","activeBodies","_handleCollapsibleClickBound","_handleCollapsibleClick","_handleCollapsibleKeydownBound","_handleCollapsibleKeydown","header","isActive","_animateIn","paddingTop","paddingBottom","pTop","pBottom","finalHeight","scrollHeight","_animateOut","listItems","activeLis","activeLi","classDef","Element","console","error","Error","getInstance","instances","cash","instancesArr","autoClose","format","parse","defaultDate","setDefaultDate","disableWeekends","disableDayFn","firstDay","minDate","maxDate","yearRange","minYear","maxYear","minMonth","maxMonth","startRange","endRange","isRTL","showMonthAfterYear","showDaysInNextAndPreviousMonths","showClearBtn","i18n","cancel","clear","done","previousMonth","nextMonth","months","monthsShort","weekdays","weekdaysShort","weekdaysAbbrev","events","onSelect","onOpen","onClose","onDraw","Datepicker","M_Datepicker","setHours","_setupVariables","_insertHTMLIntoDOM","_setupModal","defDate","_isDate","setDate","setInputValue","gotoDate","getTime","date","day","getDay","year","month","_isLeapYear","modal","modalEl","destroySelects","oldYearSelect","calendarEl","FormSelect","oldMonthSelect","clearBtn","doneBtn","cancelBtn","optEl","HTMLElement","Modal","formats","join","preventOnSelect","_renderDateDisplay","draw","_setToStartOfDay","CustomEvent","detail","firedBy","displayDate","getMonth","getDate","yearTextEl","getFullYear","dateTextEl","newCalendar","calendars","firstVisibleDate","lastVisibleDate","visibleDate","setMonth","adjustCalendars","adjustCalendar","calendar","prevMonth","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","yearRangeReverse","force","_y","_m","yearSelect","monthSelect","classes","constrainWidth","_handleYearChange","_handleMonthChange","_handleInputChangeBound","_handleInputChange","_handleCalendarClickBound","_handleCalendarClick","_finishSelectionBound","_finishSelection","_closeBound","_handleClearClickBound","_handleClearClick","template","_template","trim","content","d","dd","ddd","dddd","mm","mmm","mmmm","yy","yyyy","which","gotoMonth","gotoYear","abbr","hover","M_Dropdown","_dropdowns","getIdFromTrigger","dropdownEl","getElementById","isScrollable","isTouchMoving","focusedIndex","filterQuery","_moveDropdown","_makeDropdownFocusable","_resetFilterQueryBound","_resetFilterQuery","_handleDocumentTouchmoveBound","_handleDocumentTouchmove","_handleDropdownClickBound","_handleDropdownClick","_handleDropdownKeydownBound","_handleDropdownKeydown","_handleTriggerKeydownBound","_handleTriggerKeydown","_resetDropdownStyles","_handleMouseEnterBound","_handleMouseEnter","_handleMouseLeaveBound","_handleMouseLeave","_handleClick","_setupTemporaryEventHandlers","_removeTemporaryEventHandlers","toEl","toElement","relatedTarget","leaveToDropdownContent","leaveToActiveDropdownTrigger","closestTrigger","itemEl","TAB","focusedElement","activatableElement","click","ESC","newFocusedIndex","hasFoundNewIndex","_focusFocusedItem","letter","String","fromCharCode","newOptionEl","filterTimeout","top","transformOrigin","containerEl","preventScroll","_getDropdownPosition","closestOverflowParent","offsetParent","triggerBRect","dropdownBRect","idealHeight","idealWidth","idealXPos","idealYPos","dropdownBounds","alignments","checkPossibleAlignments","verticalAlignment","horizontalAlignment","spaceOnTop","spaceOnBottom","oppositeAlignment","spaceOnLeft","spaceOnRight","_getClosestAncestor","condition","ancestor","_placeDropdown","includes","positionInfo","Forms","textarea","hiddenDiv","fontFamily","lineHeight","paddingRight","paddingLeft","hasAttribute","overflowWrap","whiteSpace","originalHeight","prevLength","once","textArea","textareaAutoResize","fileInput","pathInput","files","filenames","keyDown","jQuery","plugin","pluginName","classRef","jQueryLoaded","jq","fn","methodOrOptions","first","each","context","root","registry","Materialbox","Parallax","Pushpin","ScrollSpy","Sidenav","Tabs","TapTarget","Timepicker","Tooltip","attr","s4","substring","bounding","edges","right","containerRect","containerBottom","scrollLeft","scrollTop","scrolledX","scrolledY","canAlign","containerAllowsOverflow","containerHeight","containerWidth","elOffsetRect","scrolledYTopEdge","scrolledYBottomEdge","element","getOverflowParent","pageYOffset","documentElement","pageXOffset","wait","timeout","previous","later","leading","trailing","Slider","toast","opt","Toast","Range","Waves","docHandleKeydown","docHandleKeyup","docHandleFocus","docHandleBlur","initializeJqueryWrapper","Cards","Init","module","exports","M_Materialbox","overlayActive","doneAnimating","originalWidth","originInlineStyles","caption","removeAttribute","_handleMaterialboxClickBound","_handleMaterialboxClick","_handleWindowScroll","_handleWindowResize","_handleWindowEscape","_makeAncestorsOverflowVisible","_changedAncestorList","curr","_offset","box","docElem","clientTop","clientLeft","_animateImageIn","newHeight","maxWidth","newWidth","animOptions","getDocumentScrollLeft","getDocumentScrollTop","_animateImageOut","attrWidth","attrHeight","anchestor","_updateVars","willChange","_overlay","overlayOffset","_photoCaption","widthPercent","heightPercent","ratio","_handleWindowScrollBound","_handleWindowResizeBound","_handleWindowEscapeBound","preventScrolling","dismissible","startingTop","endingTop","M_Modal","_openingTrigger","_nthModalOpened","_count","_handleOverlayClickBound","_handleOverlayClick","_handleModalCloseClickBound","_handleModalCloseClick","_handleTriggerClick","modalId","modalInstance","_handleKeydown","_handleFocus","_modalsOpen","enterAnimOptions","exitAnimOptions","insertAdjacentElement","_handleKeydownBound","_handleFocusBound","responsiveThreshold","M_Parallax","_enabled","_img","_updateParallax","_setupStyles","_parallaxes","parallaxInstance","_handleImageLoadBound","_handleImageLoad","_handleScrollThrottled","_handleScroll","_handleWindowResizeThrottled","parallaxDist","parallax","onPositionChange","M_Pushpin","originalOffset","offsetTop","_pushpins","_updatePosition","_removePinClasses","elIndex","_updateElements","scrolled","M_Range","_setupThumb","_removeThumb","_handleRangeChangeBound","_handleRangeChange","_handleRangeMousedownTouchstartBound","_handleRangeMousedownTouchstart","_handleRangeInputMousemoveTouchmoveBound","_handleRangeInputMousemoveTouchmove","_handleRangeMouseupTouchendBound","_handleRangeMouseupTouchend","_handleRangeBlurMouseoutTouchleaveBound","_handleRangeBlurMouseoutTouchleave","thumb","_showRangeBubble","offsetLeft","_calcRangeOffset","marginLeft","scrollOffset","activeClass","getActiveElement","M_ScrollSpy","_elements","_increment","tickId","_elementsInView","_visibleElements","scrollspy","_ticks","intersections","_findElements","_enter","lastTick","_exit","hits","currTop","elTop","elLeft","elRight","elBottom","actElem","unshift","selector","M_FormSelect","isMultiple","multiple","_values","_handleSelectChangeBound","_handleSelectChange","_handleOptionClickBound","_handleOptionClick","_setValueToInput","virtualOption","_selectOptionElement","_arraysEqual","optionEl","previousSelectedValues","getSelectedValues","_toggleEntryFromArray","_deselectAll","_selectValue","actualSelectedValues","_setSelectedStates","labelEl","wrapper","hideSelect","disabled","selectOptions","ariaMultiSelectable","realOption","_createAndAppendOptionWithIcon","_addOptionToValues","groupId","groupParent","groupChildren","childId","readOnly","ariaReadOnly","ariaRequired","attrs","attributes","startsWith","ariaExpanded","prepend","dropdownIcon","createElementNS","ariaHidden","userOnOpenEnd","userOnCloseEnd","selectedOption","ariaDisabled","span","iconUrl","selected","_deselectValue","_isValueSelected","realValue","_getSelectedOptions","selectedOptions","realOptions","texts","firstDisabledOption","optionIsSelected","_activateOption","ul","edge","draggable","dragTargetWidth","M_Sidenav","isFixed","isDragged","lastWindowWidth","lastWindowHeight","_createOverlay","_createDragTarget","_setupClasses","_setupFixed","_sidenavs","_enableBodyScrolling","dragTarget","_handleDragTargetDragBound","_handleDragTargetDrag","_handleDragTargetReleaseBound","_handleDragTargetRelease","_handleCloseDragBound","_handleCloseDrag","_handleCloseReleaseBound","_handleCloseRelease","_handleCloseTriggerClickBound","_handleCloseTriggerClick","passiveIfSupported","sidenavId","sidenavInstance","_startDrag","_startingXpos","_xPos","_time","_width","_initialScrollTop","_verticallyScrolling","_dragMoveUpdate","currentScrollTop","deltaX","velocityX","_isCurrentlyFixed","totalDeltaX","dragDirection","transformX","transformPrefix","percentOpen","_removeClasses","_preventBodyScrolling","_animateSidenavIn","_animateOverlayIn","slideOutPercent","_animateSidenavOut","_animateOverlayOut","endPercent","interval","pauseOnFocus","pauseOnHover","indicatorLabelFunc","M_Slider","eventPause","_hovered","_focused","_focusCurrent","_slider","_slides","findIndex","_activeSlide","_setSliderHeight","_sliderId","placeholderBase64","slide","backgroundImage","_setupIndicators","_animateSlide","_removeIndicators","_handleIntervalBound","_handleInterval","_handleAutoPauseFocusBound","_handleAutoPauseFocus","_handleAutoStartFocusBound","_handleAutoStartFocus","_handleAutoPauseHoverBound","_handleAutoPauseHover","_handleAutoStartHoverBound","_handleAutoStartHover","currIndex","_pause","activeElem","newActiveIndex","isDirectionIn","dx","dy","arrLi","_caption","nextIndicator","ariaLabel","fromEvent","newIndex","onShow","swipeable","M_Tabs","_tabLinks","_index","_setupActiveTabLink","_setupSwipeableTabs","_setupNormalTabs","_setTabsAndTabWidth","_createIndicator","_indicator","_teardownSwipeableTabs","_teardownNormalTabs","_handleTabClickBound","_handleTabClick","_tabWidth","_tabsWidth","_calcLeftPos","_activeTabLink","_calcRightPos","tabLink","tab","_oldContent","_content","hash","prevIndex","_tabsCarousel","_animateIndicator","location","tabsContent","currContent","tabsWrapper","tabContent","activeTabIndex","scrollWidth","updateTabIndicator","leftDelay","rightDelay","select","tabId","M_TapTarget","_origin","_setup","_calculatePositioning","_handleTargetClickBound","_handleTargetClick","_handleOriginClickBound","_handleOriginClick","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","M_Timepicker","_clockSetup","_pickerSetup","num","_handleClockClickStartBound","_handleClockClickStart","_handleDocumentClickMoveBound","_handleDocumentClickMove","_handleDocumentClickEndBound","_handleDocumentClickEnd","_inputFromTextFieldBound","_handleTimeInputEnterKey","plate","digitalClock","inputHours","showView","inputMinutes","_inputFromTextField","clockPlateBR","x0","y0","moved","clickPos","_Pos","setHand","currentView","minutesView","hours","minutes","navigator","webkitVibrate","_canvas","hoursView","spanAmPm","footer","amOrPm","_createButton","button","clearButton","confirmationBtnsContainer","cancelButton","doneButton","_amBtn","_handleAmPmClick","_pmBtn","_buildHoursView","_buildMinutesView","_buildSVGClock","diameter","_createSVGEl","bearing","hand","bg","$tick","radian","radius","_tick","_addLeadingZero","btnClicked","_updateAmPmView","_updateTimeFromInput","toUpperCase","getHours","getMinutes","view","isHours","nextView","hideView","resetClock","toggleViewTimer","canvas","drawClockFromTimeInput","hour","cx1","cy1","cx2","cy2","roundBy5","z","inner","vibrateTimer","clearValue","displayLength","completeCallback","activationPercent","message","panning","timeRemaining","_toasts","_createContainer","toastElement","_createToast","M_Toast","_setTimer","_onDragStart","_onDragMove","_onDragEnd","_container","_draggedToast","startingXPos","xPos","activationDistance","wasSwiped","dismiss","toastIndex","counterInterval","marginTop","_removeContainer","exitDelay","enterDelay","margin","transitionMovement","M_Tooltip","isHovered","isFocused","_appendTooltipEl","tooltipEl","tooltipContentEl","_setTooltipContent","_updateTooltipContent","_handleBlurBound","_handleBlur","isManual","_getAttributeOptions","_setEnterDelayTimeout","_setExitDelayTimeout","_exitDelayTimeout","_enterDelayTimeout","_positionTooltip","tooltip","origin","tooltipHeight","tooltipWidth","xMovement","yMovement","targetTop","targetLeft","newCoordinates","_repositionWithinScreen","newX","newY","checkWithinContainer","attributeOptions","tooltipTextOption","positionOption","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","__webpack_exports__"],"sourceRoot":""}
|