{"version":3,"file":"sv/js/scripts.js","mappings":"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","sources":["webpack://svsb-site-frontend/./src/js/widgets/video.js","webpack://svsb-site-frontend/./node_modules/glightbox/dist/js/glightbox.min.js","webpack://svsb-site-frontend/webpack/bootstrap","webpack://svsb-site-frontend/webpack/runtime/amd options","webpack://svsb-site-frontend/webpack/runtime/compat get default export","webpack://svsb-site-frontend/webpack/runtime/define property getters","webpack://svsb-site-frontend/webpack/runtime/harmony module decorator","webpack://svsb-site-frontend/webpack/runtime/hasOwnProperty shorthand","webpack://svsb-site-frontend/./node_modules/gsap/gsap-core.js","webpack://svsb-site-frontend/./node_modules/gsap/CSSPlugin.js","webpack://svsb-site-frontend/./src/js/utils/util.js","webpack://svsb-site-frontend/./src/js/global/header.js","webpack://svsb-site-frontend/./src/js/global/main-nav.js","webpack://svsb-site-frontend/./src/js/global/search.js","webpack://svsb-site-frontend/./src/js/global/breadcrumbs.js","webpack://svsb-site-frontend/./node_modules/lightgallery/lightgallery.es5.js","webpack://svsb-site-frontend/./node_modules/lightgallery/plugins/zoom/lg-zoom.es5.js","webpack://svsb-site-frontend/./src/js/widgets/trail-map.js","webpack://svsb-site-frontend/./src/js/widgets/accordion.js","webpack://svsb-site-frontend/./src/js/global/alert.js","webpack://svsb-site-frontend/./src/js/global/local-nav.js","webpack://svsb-site-frontend/./node_modules/fecha/lib/fecha.js","webpack://svsb-site-frontend/./node_modules/hotel-datepicker/dist/js/hotel-datepicker.esm.js","webpack://svsb-site-frontend/./node_modules/shufflejs/dist/shuffle.esm.js","webpack://svsb-site-frontend/./src/js/global/filters.js","webpack://svsb-site-frontend/./src/js/global/load-more.js","webpack://svsb-site-frontend/./src/js/global/tabs.js","webpack://svsb-site-frontend/./node_modules/@glidejs/glide/dist/glide.esm.js","webpack://svsb-site-frontend/./src/js/page-type-components/feature-media.js","webpack://svsb-site-frontend/./src/js/page-type-components/paragraph-banner-slider.js","webpack://svsb-site-frontend/./src/js/page-type-components/amenities.js","webpack://svsb-site-frontend/./src/js/widgets/booking.js","webpack://svsb-site-frontend/./src/js/page-type-components/weddings.js","webpack://svsb-site-frontend/./node_modules/ssr-window/ssr-window.esm.js","webpack://svsb-site-frontend/./node_modules/swiper/shared/utils.js","webpack://svsb-site-frontend/./node_modules/swiper/shared/get-support.js","webpack://svsb-site-frontend/./node_modules/swiper/shared/get-device.js","webpack://svsb-site-frontend/./node_modules/swiper/shared/get-browser.js","webpack://svsb-site-frontend/./node_modules/swiper/core/events-emitter.js","webpack://svsb-site-frontend/./node_modules/swiper/shared/process-lazy-preloader.js","webpack://svsb-site-frontend/./node_modules/swiper/core/update/index.js","webpack://svsb-site-frontend/./node_modules/swiper/core/update/updateSize.js","webpack://svsb-site-frontend/./node_modules/swiper/core/update/updateSlides.js","webpack://svsb-site-frontend/./node_modules/swiper/core/update/updateAutoHeight.js","webpack://svsb-site-frontend/./node_modules/swiper/core/update/updateSlidesOffset.js","webpack://svsb-site-frontend/./node_modules/swiper/core/update/updateSlidesProgress.js","webpack://svsb-site-frontend/./node_modules/swiper/core/update/updateProgress.js","webpack://svsb-site-frontend/./node_modules/swiper/core/update/updateSlidesClasses.js","webpack://svsb-site-frontend/./node_modules/swiper/core/update/updateActiveIndex.js","webpack://svsb-site-frontend/./node_modules/swiper/core/update/updateClickedSlide.js","webpack://svsb-site-frontend/./node_modules/swiper/core/transition/transitionEmit.js","webpack://svsb-site-frontend/./node_modules/swiper/core/slide/index.js","webpack://svsb-site-frontend/./node_modules/swiper/core/slide/slideTo.js","webpack://svsb-site-frontend/./node_modules/swiper/core/slide/slideToLoop.js","webpack://svsb-site-frontend/./node_modules/swiper/core/slide/slideNext.js","webpack://svsb-site-frontend/./node_modules/swiper/core/slide/slidePrev.js","webpack://svsb-site-frontend/./node_modules/swiper/core/slide/slideReset.js","webpack://svsb-site-frontend/./node_modules/swiper/core/slide/slideToClosest.js","webpack://svsb-site-frontend/./node_modules/swiper/core/slide/slideToClickedSlide.js","webpack://svsb-site-frontend/./node_modules/swiper/core/loop/index.js","webpack://svsb-site-frontend/./node_modules/swiper/core/loop/loopCreate.js","webpack://svsb-site-frontend/./node_modules/swiper/core/loop/loopFix.js","webpack://svsb-site-frontend/./node_modules/swiper/core/loop/loopDestroy.js","webpack://svsb-site-frontend/./node_modules/swiper/core/events/onTouchStart.js","webpack://svsb-site-frontend/./node_modules/swiper/core/events/onTouchMove.js","webpack://svsb-site-frontend/./node_modules/swiper/core/events/onTouchEnd.js","webpack://svsb-site-frontend/./node_modules/swiper/core/events/onResize.js","webpack://svsb-site-frontend/./node_modules/swiper/core/events/onClick.js","webpack://svsb-site-frontend/./node_modules/swiper/core/events/onScroll.js","webpack://svsb-site-frontend/./node_modules/swiper/core/events/onLoad.js","webpack://svsb-site-frontend/./node_modules/swiper/core/events/index.js","webpack://svsb-site-frontend/./node_modules/swiper/core/breakpoints/setBreakpoint.js","webpack://svsb-site-frontend/./node_modules/swiper/core/breakpoints/index.js","webpack://svsb-site-frontend/./node_modules/swiper/core/breakpoints/getBreakpoint.js","webpack://svsb-site-frontend/./node_modules/swiper/core/defaults.js","webpack://svsb-site-frontend/./node_modules/swiper/core/moduleExtendParams.js","webpack://svsb-site-frontend/./node_modules/swiper/core/core.js","webpack://svsb-site-frontend/./node_modules/swiper/core/translate/index.js","webpack://svsb-site-frontend/./node_modules/swiper/core/translate/getTranslate.js","webpack://svsb-site-frontend/./node_modules/swiper/core/translate/setTranslate.js","webpack://svsb-site-frontend/./node_modules/swiper/core/translate/minTranslate.js","webpack://svsb-site-frontend/./node_modules/swiper/core/translate/maxTranslate.js","webpack://svsb-site-frontend/./node_modules/swiper/core/translate/translateTo.js","webpack://svsb-site-frontend/./node_modules/swiper/core/transition/index.js","webpack://svsb-site-frontend/./node_modules/swiper/core/transition/setTransition.js","webpack://svsb-site-frontend/./node_modules/swiper/core/transition/transitionStart.js","webpack://svsb-site-frontend/./node_modules/swiper/core/transition/transitionEnd.js","webpack://svsb-site-frontend/./node_modules/swiper/core/grab-cursor/index.js","webpack://svsb-site-frontend/./node_modules/swiper/core/grab-cursor/setGrabCursor.js","webpack://svsb-site-frontend/./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","webpack://svsb-site-frontend/./node_modules/swiper/core/check-overflow/index.js","webpack://svsb-site-frontend/./node_modules/swiper/core/classes/index.js","webpack://svsb-site-frontend/./node_modules/swiper/core/classes/addClasses.js","webpack://svsb-site-frontend/./node_modules/swiper/core/classes/removeClasses.js","webpack://svsb-site-frontend/./node_modules/swiper/core/modules/resize/resize.js","webpack://svsb-site-frontend/./node_modules/swiper/core/modules/observer/observer.js","webpack://svsb-site-frontend/./node_modules/swiper/modules/mousewheel/mousewheel.js","webpack://svsb-site-frontend/./node_modules/swiper/shared/create-element-if-not-defined.js","webpack://svsb-site-frontend/./node_modules/swiper/modules/navigation/navigation.js","webpack://svsb-site-frontend/./node_modules/swiper/modules/scrollbar/scrollbar.js","webpack://svsb-site-frontend/./node_modules/@kurkle/color/dist/color.esm.js","webpack://svsb-site-frontend/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://svsb-site-frontend/./node_modules/chart.js/dist/chart.js","webpack://svsb-site-frontend/./node_modules/chart.js/auto/auto.js","webpack://svsb-site-frontend/./node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js","webpack://svsb-site-frontend/./src/js/page-type-components/mountain-conditions.js","webpack://svsb-site-frontend/./src/js/widgets/custom-cards.js","webpack://svsb-site-frontend/./src/js/widgets/season-toggle.js","webpack://svsb-site-frontend/./src/js/global/mountain-report-dropdown.js","webpack://svsb-site-frontend/./src/js/page-type-components/visit-info.js","webpack://svsb-site-frontend/./src/js/page-type-components/welcome.js","webpack://svsb-site-frontend/./src/js/page-type-components/achievement-info.js","webpack://svsb-site-frontend/./src/index-sv.js","webpack://svsb-site-frontend/./src/js/fe-core-sv.js"],"sourcesContent":["\r\nimport Util from \"../utils/util.js\";\r\n//import GLightbox from 'glightbox';\r\n(function (global, factory) {\r\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n typeof define === 'function' && define.amd ? define(factory) :\r\n (global = global || self, global.GLightbox = factory());\r\n }(this, (function () { 'use strict';\r\n \r\n function _typeof(obj) {\r\n \"@babel/helpers - typeof\";\r\n \r\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\r\n _typeof = function (obj) {\r\n return typeof obj;\r\n };\r\n } else {\r\n _typeof = function (obj) {\r\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n };\r\n }\r\n \r\n return _typeof(obj);\r\n }\r\n \r\n function _classCallCheck(instance, Constructor) {\r\n if (!(instance instanceof Constructor)) {\r\n throw new TypeError(\"Cannot call a class as a function\");\r\n }\r\n }\r\n \r\n function _defineProperties(target, props) {\r\n for (var i = 0; i < props.length; i++) {\r\n var descriptor = props[i];\r\n descriptor.enumerable = descriptor.enumerable || false;\r\n descriptor.configurable = true;\r\n if (\"value\" in descriptor) descriptor.writable = true;\r\n Object.defineProperty(target, descriptor.key, descriptor);\r\n }\r\n }\r\n \r\n function _createClass(Constructor, protoProps, staticProps) {\r\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\r\n if (staticProps) _defineProperties(Constructor, staticProps);\r\n return Constructor;\r\n }\r\n \r\n var uid = Date.now();\r\n function extend() {\r\n var extended = {};\r\n var deep = true;\r\n var i = 0;\r\n var length = arguments.length;\r\n \r\n if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {\r\n deep = arguments[0];\r\n i++;\r\n }\r\n \r\n var merge = function merge(obj) {\r\n for (var prop in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\r\n if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {\r\n extended[prop] = extend(true, extended[prop], obj[prop]);\r\n } else {\r\n extended[prop] = obj[prop];\r\n }\r\n }\r\n }\r\n };\r\n \r\n for (; i < length; i++) {\r\n var obj = arguments[i];\r\n merge(obj);\r\n }\r\n \r\n return extended;\r\n }\r\n function each(collection, callback) {\r\n if (isNode(collection) || collection === window || collection === document) {\r\n collection = [collection];\r\n }\r\n \r\n if (!isArrayLike(collection) && !isObject(collection)) {\r\n collection = [collection];\r\n }\r\n \r\n if (size(collection) == 0) {\r\n return;\r\n }\r\n \r\n if (isArrayLike(collection) && !isObject(collection)) {\r\n var l = collection.length,\r\n i = 0;\r\n \r\n for (; i < l; i++) {\r\n if (callback.call(collection[i], collection[i], i, collection) === false) {\r\n break;\r\n }\r\n }\r\n } else if (isObject(collection)) {\r\n for (var key in collection) {\r\n if (has(collection, key)) {\r\n if (callback.call(collection[key], collection[key], key, collection) === false) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n function getNodeEvents(node) {\r\n var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n var fn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\r\n var cache = node[uid] = node[uid] || [];\r\n var data = {\r\n all: cache,\r\n evt: null,\r\n found: null\r\n };\r\n \r\n if (name && fn && size(cache) > 0) {\r\n each(cache, function (cl, i) {\r\n if (cl.eventName == name && cl.fn.toString() == fn.toString()) {\r\n data.found = true;\r\n data.evt = i;\r\n return false;\r\n }\r\n });\r\n }\r\n \r\n return data;\r\n }\r\n function addEvent(eventName) {\r\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\r\n onElement = _ref.onElement,\r\n withCallback = _ref.withCallback,\r\n _ref$avoidDuplicate = _ref.avoidDuplicate,\r\n avoidDuplicate = _ref$avoidDuplicate === void 0 ? true : _ref$avoidDuplicate,\r\n _ref$once = _ref.once,\r\n once = _ref$once === void 0 ? false : _ref$once,\r\n _ref$useCapture = _ref.useCapture,\r\n useCapture = _ref$useCapture === void 0 ? false : _ref$useCapture;\r\n \r\n var thisArg = arguments.length > 2 ? arguments[2] : undefined;\r\n var element = onElement || [];\r\n \r\n if (isString(element)) {\r\n element = document.querySelectorAll(element);\r\n }\r\n \r\n function handler(event) {\r\n if (isFunction(withCallback)) {\r\n withCallback.call(thisArg, event, this);\r\n }\r\n \r\n if (once) {\r\n handler.destroy();\r\n }\r\n }\r\n \r\n handler.destroy = function () {\r\n each(element, function (el) {\r\n var events = getNodeEvents(el, eventName, handler);\r\n \r\n if (events.found) {\r\n events.all.splice(events.evt, 1);\r\n }\r\n \r\n if (el.removeEventListener) {\r\n el.removeEventListener(eventName, handler, useCapture);\r\n }\r\n });\r\n };\r\n \r\n each(element, function (el) {\r\n var events = getNodeEvents(el, eventName, handler);\r\n \r\n if (el.addEventListener && avoidDuplicate && !events.found || !avoidDuplicate) {\r\n el.addEventListener(eventName, handler, useCapture);\r\n events.all.push({\r\n eventName: eventName,\r\n fn: handler\r\n });\r\n }\r\n });\r\n return handler;\r\n }\r\n function addClass(node, name) {\r\n each(name.split(' '), function (cl) {\r\n return node.classList.add(cl);\r\n });\r\n }\r\n function removeClass(node, name) {\r\n each(name.split(' '), function (cl) {\r\n return node.classList.remove(cl);\r\n });\r\n }\r\n function hasClass(node, name) {\r\n return node.classList.contains(name);\r\n }\r\n function closest(elem, selector) {\r\n while (elem !== document.body) {\r\n elem = elem.parentElement;\r\n \r\n if (!elem) {\r\n return false;\r\n }\r\n \r\n var matches = typeof elem.matches == 'function' ? elem.matches(selector) : elem.msMatchesSelector(selector);\r\n \r\n if (matches) {\r\n return elem;\r\n }\r\n }\r\n }\r\n function animateElement(element) {\r\n var animation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\r\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n \r\n if (!element || animation === '') {\r\n return false;\r\n }\r\n \r\n if (animation == 'none') {\r\n if (isFunction(callback)) {\r\n callback();\r\n }\r\n \r\n return false;\r\n }\r\n \r\n var animationEnd = whichAnimationEvent();\r\n var animationNames = animation.split(' ');\r\n each(animationNames, function (name) {\r\n addClass(element, 'g' + name);\r\n });\r\n addEvent(animationEnd, {\r\n onElement: element,\r\n avoidDuplicate: false,\r\n once: true,\r\n withCallback: function withCallback(event, target) {\r\n each(animationNames, function (name) {\r\n removeClass(target, 'g' + name);\r\n });\r\n \r\n if (isFunction(callback)) {\r\n callback();\r\n }\r\n }\r\n });\r\n }\r\n function cssTransform(node) {\r\n var translate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\r\n \r\n if (translate == '') {\r\n node.style.webkitTransform = '';\r\n node.style.MozTransform = '';\r\n node.style.msTransform = '';\r\n node.style.OTransform = '';\r\n node.style.transform = '';\r\n return false;\r\n }\r\n \r\n node.style.webkitTransform = translate;\r\n node.style.MozTransform = translate;\r\n node.style.msTransform = translate;\r\n node.style.OTransform = translate;\r\n node.style.transform = translate;\r\n }\r\n function show(element) {\r\n element.style.display = 'block';\r\n }\r\n function hide(element) {\r\n element.style.display = 'none';\r\n }\r\n function createHTML(htmlStr) {\r\n var frag = document.createDocumentFragment(),\r\n temp = document.createElement('div');\r\n temp.innerHTML = htmlStr;\r\n \r\n while (temp.firstChild) {\r\n frag.appendChild(temp.firstChild);\r\n }\r\n \r\n return frag;\r\n }\r\n function windowSize() {\r\n return {\r\n width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,\r\n height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight\r\n };\r\n }\r\n function whichAnimationEvent() {\r\n var t,\r\n el = document.createElement('fakeelement');\r\n var animations = {\r\n animation: 'animationend',\r\n OAnimation: 'oAnimationEnd',\r\n MozAnimation: 'animationend',\r\n WebkitAnimation: 'webkitAnimationEnd'\r\n };\r\n \r\n for (t in animations) {\r\n if (el.style[t] !== undefined) {\r\n return animations[t];\r\n }\r\n }\r\n }\r\n function whichTransitionEvent() {\r\n var t,\r\n el = document.createElement('fakeelement');\r\n var transitions = {\r\n transition: 'transitionend',\r\n OTransition: 'oTransitionEnd',\r\n MozTransition: 'transitionend',\r\n WebkitTransition: 'webkitTransitionEnd'\r\n };\r\n \r\n for (t in transitions) {\r\n if (el.style[t] !== undefined) {\r\n return transitions[t];\r\n }\r\n }\r\n }\r\n function createIframe(config) {\r\n var url = config.url,\r\n allow = config.allow,\r\n callback = config.callback,\r\n appendTo = config.appendTo;\r\n var iframe = document.createElement('iframe');\r\n iframe.className = 'vimeo-video gvideo';\r\n iframe.src = url;\r\n iframe.style.width = '100%';\r\n iframe.style.height = '100%';\r\n \r\n if (allow) {\r\n iframe.setAttribute('allow', allow);\r\n }\r\n \r\n iframe.onload = function () {\r\n addClass(iframe, 'node-ready');\r\n \r\n if (isFunction(callback)) {\r\n callback();\r\n }\r\n };\r\n \r\n if (appendTo) {\r\n appendTo.appendChild(iframe);\r\n }\r\n \r\n return iframe;\r\n }\r\n function waitUntil(check, onComplete, delay, timeout) {\r\n if (check()) {\r\n onComplete();\r\n return;\r\n }\r\n \r\n if (!delay) {\r\n delay = 100;\r\n }\r\n \r\n var timeoutPointer;\r\n var intervalPointer = setInterval(function () {\r\n if (!check()) {\r\n return;\r\n }\r\n \r\n clearInterval(intervalPointer);\r\n \r\n if (timeoutPointer) {\r\n clearTimeout(timeoutPointer);\r\n }\r\n \r\n onComplete();\r\n }, delay);\r\n \r\n if (timeout) {\r\n timeoutPointer = setTimeout(function () {\r\n clearInterval(intervalPointer);\r\n }, timeout);\r\n }\r\n }\r\n function injectAssets(url, waitFor, callback) {\r\n if (isNil(url)) {\r\n console.error('Inject assets error');\r\n return;\r\n }\r\n \r\n if (isFunction(waitFor)) {\r\n callback = waitFor;\r\n waitFor = false;\r\n }\r\n \r\n if (isString(waitFor) && waitFor in window) {\r\n if (isFunction(callback)) {\r\n callback();\r\n }\r\n \r\n return;\r\n }\r\n \r\n var found;\r\n \r\n if (url.indexOf('.css') !== -1) {\r\n found = document.querySelectorAll('link[href=\"' + url + '\"]');\r\n \r\n if (found && found.length > 0) {\r\n if (isFunction(callback)) {\r\n callback();\r\n }\r\n \r\n return;\r\n }\r\n \r\n var head = document.getElementsByTagName('head')[0];\r\n var headStyles = head.querySelectorAll('link[rel=\"stylesheet\"]');\r\n var link = document.createElement('link');\r\n link.rel = 'stylesheet';\r\n link.type = 'text/css';\r\n link.href = url;\r\n link.media = 'all';\r\n \r\n if (headStyles) {\r\n head.insertBefore(link, headStyles[0]);\r\n } else {\r\n head.appendChild(link);\r\n }\r\n \r\n if (isFunction(callback)) {\r\n callback();\r\n }\r\n \r\n return;\r\n }\r\n \r\n found = document.querySelectorAll('script[src=\"' + url + '\"]');\r\n \r\n if (found && found.length > 0) {\r\n if (isFunction(callback)) {\r\n if (isString(waitFor)) {\r\n waitUntil(function () {\r\n return typeof window[waitFor] !== 'undefined';\r\n }, function () {\r\n callback();\r\n });\r\n return false;\r\n }\r\n \r\n callback();\r\n }\r\n \r\n return;\r\n }\r\n \r\n var script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = url;\r\n \r\n script.onload = function () {\r\n if (isFunction(callback)) {\r\n if (isString(waitFor)) {\r\n waitUntil(function () {\r\n return typeof window[waitFor] !== 'undefined';\r\n }, function () {\r\n callback();\r\n });\r\n return false;\r\n }\r\n \r\n callback();\r\n }\r\n };\r\n \r\n document.body.appendChild(script);\r\n return;\r\n }\r\n function isMobile() {\r\n return 'navigator' in window && window.navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i);\r\n }\r\n function isTouch() {\r\n return isMobile() !== null || document.createTouch !== undefined || 'ontouchstart' in window || 'onmsgesturechange' in window || navigator.msMaxTouchPoints;\r\n }\r\n function isFunction(f) {\r\n return typeof f === 'function';\r\n }\r\n function isString(s) {\r\n return typeof s === 'string';\r\n }\r\n function isNode(el) {\r\n return !!(el && el.nodeType && el.nodeType == 1);\r\n }\r\n function isArray(ar) {\r\n return Array.isArray(ar);\r\n }\r\n function isArrayLike(ar) {\r\n return ar && ar.length && isFinite(ar.length);\r\n }\r\n function isObject(o) {\r\n var type = _typeof(o);\r\n \r\n return type === 'object' && o != null && !isFunction(o) && !isArray(o);\r\n }\r\n function isNil(o) {\r\n return o == null;\r\n }\r\n function has(obj, key) {\r\n return obj !== null && hasOwnProperty.call(obj, key);\r\n }\r\n function size(o) {\r\n if (isObject(o)) {\r\n if (o.keys) {\r\n return o.keys().length;\r\n }\r\n \r\n var l = 0;\r\n \r\n for (var k in o) {\r\n if (has(o, k)) {\r\n l++;\r\n }\r\n }\r\n \r\n return l;\r\n } else {\r\n return o.length;\r\n }\r\n }\r\n function isNumber(n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n }\r\n \r\n function getNextFocusElement() {\r\n var current = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;\r\n var btns = document.querySelectorAll('.gbtn[data-taborder]:not(.disabled)');\r\n \r\n if (!btns.length) {\r\n return false;\r\n }\r\n \r\n if (btns.length == 1) {\r\n return btns[0];\r\n }\r\n \r\n if (typeof current == 'string') {\r\n current = parseInt(current);\r\n }\r\n \r\n var orders = [];\r\n each(btns, function (btn) {\r\n orders.push(btn.getAttribute('data-taborder'));\r\n });\r\n var highestOrder = Math.max.apply(Math, orders.map(function (order) {\r\n return parseInt(order);\r\n }));\r\n var newIndex = current < 0 ? 1 : current + 1;\r\n \r\n if (newIndex > highestOrder) {\r\n newIndex = '1';\r\n }\r\n \r\n var nextOrders = orders.filter(function (el) {\r\n return el >= parseInt(newIndex);\r\n });\r\n var nextFocus = nextOrders.sort()[0];\r\n return document.querySelector(\".gbtn[data-taborder=\\\"\".concat(nextFocus, \"\\\"]\"));\r\n }\r\n \r\n function keyboardNavigation(instance) {\r\n if (instance.events.hasOwnProperty('keyboard')) {\r\n return false;\r\n }\r\n \r\n instance.events['keyboard'] = addEvent('keydown', {\r\n onElement: window,\r\n withCallback: function withCallback(event, target) {\r\n event = event || window.event;\r\n var key = event.keyCode;\r\n \r\n if (key == 9) {\r\n var focusedButton = document.querySelector('.gbtn.focused');\r\n \r\n if (!focusedButton) {\r\n var activeElement = document.activeElement && document.activeElement.nodeName ? document.activeElement.nodeName.toLocaleLowerCase() : false;\r\n \r\n if (activeElement == 'input' || activeElement == 'textarea' || activeElement == 'button') {\r\n return;\r\n }\r\n }\r\n \r\n event.preventDefault();\r\n var btns = document.querySelectorAll('.gbtn[data-taborder]');\r\n \r\n if (!btns || btns.length <= 0) {\r\n return;\r\n }\r\n \r\n if (!focusedButton) {\r\n var first = getNextFocusElement();\r\n \r\n if (first) {\r\n first.focus();\r\n addClass(first, 'focused');\r\n }\r\n \r\n return;\r\n }\r\n \r\n var currentFocusOrder = focusedButton.getAttribute('data-taborder');\r\n var nextFocus = getNextFocusElement(currentFocusOrder);\r\n removeClass(focusedButton, 'focused');\r\n \r\n if (nextFocus) {\r\n nextFocus.focus();\r\n addClass(nextFocus, 'focused');\r\n }\r\n }\r\n \r\n if (key == 39) {\r\n instance.nextSlide();\r\n }\r\n \r\n if (key == 37) {\r\n instance.prevSlide();\r\n }\r\n \r\n if (key == 27) {\r\n instance.close();\r\n }\r\n }\r\n });\r\n }\r\n \r\n function getLen(v) {\r\n return Math.sqrt(v.x * v.x + v.y * v.y);\r\n }\r\n \r\n function dot(v1, v2) {\r\n return v1.x * v2.x + v1.y * v2.y;\r\n }\r\n \r\n function getAngle(v1, v2) {\r\n var mr = getLen(v1) * getLen(v2);\r\n \r\n if (mr === 0) {\r\n return 0;\r\n }\r\n \r\n var r = dot(v1, v2) / mr;\r\n \r\n if (r > 1) {\r\n r = 1;\r\n }\r\n \r\n return Math.acos(r);\r\n }\r\n \r\n function cross(v1, v2) {\r\n return v1.x * v2.y - v2.x * v1.y;\r\n }\r\n \r\n function getRotateAngle(v1, v2) {\r\n var angle = getAngle(v1, v2);\r\n \r\n if (cross(v1, v2) > 0) {\r\n angle *= -1;\r\n }\r\n \r\n return angle * 180 / Math.PI;\r\n }\r\n \r\n var EventsHandlerAdmin = function () {\r\n function EventsHandlerAdmin(el) {\r\n _classCallCheck(this, EventsHandlerAdmin);\r\n \r\n this.handlers = [];\r\n this.el = el;\r\n }\r\n \r\n _createClass(EventsHandlerAdmin, [{\r\n key: \"add\",\r\n value: function add(handler) {\r\n this.handlers.push(handler);\r\n }\r\n }, {\r\n key: \"del\",\r\n value: function del(handler) {\r\n if (!handler) {\r\n this.handlers = [];\r\n }\r\n \r\n for (var i = this.handlers.length; i >= 0; i--) {\r\n if (this.handlers[i] === handler) {\r\n this.handlers.splice(i, 1);\r\n }\r\n }\r\n }\r\n }, {\r\n key: \"dispatch\",\r\n value: function dispatch() {\r\n for (var i = 0, len = this.handlers.length; i < len; i++) {\r\n var handler = this.handlers[i];\r\n \r\n if (typeof handler === 'function') {\r\n handler.apply(this.el, arguments);\r\n }\r\n }\r\n }\r\n }]);\r\n \r\n return EventsHandlerAdmin;\r\n }();\r\n \r\n function wrapFunc(el, handler) {\r\n var EventshandlerAdmin = new EventsHandlerAdmin(el);\r\n EventshandlerAdmin.add(handler);\r\n return EventshandlerAdmin;\r\n }\r\n \r\n var TouchEvents = function () {\r\n function TouchEvents(el, option) {\r\n _classCallCheck(this, TouchEvents);\r\n \r\n this.element = typeof el == 'string' ? document.querySelector(el) : el;\r\n this.start = this.start.bind(this);\r\n this.move = this.move.bind(this);\r\n this.end = this.end.bind(this);\r\n this.cancel = this.cancel.bind(this);\r\n this.element.addEventListener('touchstart', this.start, false);\r\n this.element.addEventListener('touchmove', this.move, false);\r\n this.element.addEventListener('touchend', this.end, false);\r\n this.element.addEventListener('touchcancel', this.cancel, false);\r\n this.preV = {\r\n x: null,\r\n y: null\r\n };\r\n this.pinchStartLen = null;\r\n this.zoom = 1;\r\n this.isDoubleTap = false;\r\n \r\n var noop = function noop() {};\r\n \r\n this.rotate = wrapFunc(this.element, option.rotate || noop);\r\n this.touchStart = wrapFunc(this.element, option.touchStart || noop);\r\n this.multipointStart = wrapFunc(this.element, option.multipointStart || noop);\r\n this.multipointEnd = wrapFunc(this.element, option.multipointEnd || noop);\r\n this.pinch = wrapFunc(this.element, option.pinch || noop);\r\n this.swipe = wrapFunc(this.element, option.swipe || noop);\r\n this.tap = wrapFunc(this.element, option.tap || noop);\r\n this.doubleTap = wrapFunc(this.element, option.doubleTap || noop);\r\n this.longTap = wrapFunc(this.element, option.longTap || noop);\r\n this.singleTap = wrapFunc(this.element, option.singleTap || noop);\r\n this.pressMove = wrapFunc(this.element, option.pressMove || noop);\r\n this.twoFingerPressMove = wrapFunc(this.element, option.twoFingerPressMove || noop);\r\n this.touchMove = wrapFunc(this.element, option.touchMove || noop);\r\n this.touchEnd = wrapFunc(this.element, option.touchEnd || noop);\r\n this.touchCancel = wrapFunc(this.element, option.touchCancel || noop);\r\n this.translateContainer = this.element;\r\n this._cancelAllHandler = this.cancelAll.bind(this);\r\n window.addEventListener('scroll', this._cancelAllHandler);\r\n this.delta = null;\r\n this.last = null;\r\n this.now = null;\r\n this.tapTimeout = null;\r\n this.singleTapTimeout = null;\r\n this.longTapTimeout = null;\r\n this.swipeTimeout = null;\r\n this.x1 = this.x2 = this.y1 = this.y2 = null;\r\n this.preTapPosition = {\r\n x: null,\r\n y: null\r\n };\r\n }\r\n \r\n _createClass(TouchEvents, [{\r\n key: \"start\",\r\n value: function start(evt) {\r\n if (!evt.touches) {\r\n return;\r\n }\r\n \r\n var ignoreDragFor = ['a', 'button', 'input'];\r\n \r\n if (evt.target && evt.target.nodeName && ignoreDragFor.indexOf(evt.target.nodeName.toLowerCase()) >= 0) {\r\n console.log('ignore drag for this touched element', evt.target.nodeName.toLowerCase());\r\n return;\r\n }\r\n \r\n this.now = Date.now();\r\n this.x1 = evt.touches[0].pageX;\r\n this.y1 = evt.touches[0].pageY;\r\n this.delta = this.now - (this.last || this.now);\r\n this.touchStart.dispatch(evt, this.element);\r\n \r\n if (this.preTapPosition.x !== null) {\r\n this.isDoubleTap = this.delta > 0 && this.delta <= 250 && Math.abs(this.preTapPosition.x - this.x1) < 30 && Math.abs(this.preTapPosition.y - this.y1) < 30;\r\n \r\n if (this.isDoubleTap) {\r\n clearTimeout(this.singleTapTimeout);\r\n }\r\n }\r\n \r\n this.preTapPosition.x = this.x1;\r\n this.preTapPosition.y = this.y1;\r\n this.last = this.now;\r\n var preV = this.preV,\r\n len = evt.touches.length;\r\n \r\n if (len > 1) {\r\n this._cancelLongTap();\r\n \r\n this._cancelSingleTap();\r\n \r\n var v = {\r\n x: evt.touches[1].pageX - this.x1,\r\n y: evt.touches[1].pageY - this.y1\r\n };\r\n preV.x = v.x;\r\n preV.y = v.y;\r\n this.pinchStartLen = getLen(preV);\r\n this.multipointStart.dispatch(evt, this.element);\r\n }\r\n \r\n this._preventTap = false;\r\n this.longTapTimeout = setTimeout(function () {\r\n this.longTap.dispatch(evt, this.element);\r\n this._preventTap = true;\r\n }.bind(this), 750);\r\n }\r\n }, {\r\n key: \"move\",\r\n value: function move(evt) {\r\n if (!evt.touches) {\r\n return;\r\n }\r\n \r\n var preV = this.preV,\r\n len = evt.touches.length,\r\n currentX = evt.touches[0].pageX,\r\n currentY = evt.touches[0].pageY;\r\n this.isDoubleTap = false;\r\n \r\n if (len > 1) {\r\n var sCurrentX = evt.touches[1].pageX,\r\n sCurrentY = evt.touches[1].pageY;\r\n var v = {\r\n x: evt.touches[1].pageX - currentX,\r\n y: evt.touches[1].pageY - currentY\r\n };\r\n \r\n if (preV.x !== null) {\r\n if (this.pinchStartLen > 0) {\r\n evt.zoom = getLen(v) / this.pinchStartLen;\r\n this.pinch.dispatch(evt, this.element);\r\n }\r\n \r\n evt.angle = getRotateAngle(v, preV);\r\n this.rotate.dispatch(evt, this.element);\r\n }\r\n \r\n preV.x = v.x;\r\n preV.y = v.y;\r\n \r\n if (this.x2 !== null && this.sx2 !== null) {\r\n evt.deltaX = (currentX - this.x2 + sCurrentX - this.sx2) / 2;\r\n evt.deltaY = (currentY - this.y2 + sCurrentY - this.sy2) / 2;\r\n } else {\r\n evt.deltaX = 0;\r\n evt.deltaY = 0;\r\n }\r\n \r\n this.twoFingerPressMove.dispatch(evt, this.element);\r\n this.sx2 = sCurrentX;\r\n this.sy2 = sCurrentY;\r\n } else {\r\n if (this.x2 !== null) {\r\n evt.deltaX = currentX - this.x2;\r\n evt.deltaY = currentY - this.y2;\r\n var movedX = Math.abs(this.x1 - this.x2),\r\n movedY = Math.abs(this.y1 - this.y2);\r\n \r\n if (movedX > 10 || movedY > 10) {\r\n this._preventTap = true;\r\n }\r\n } else {\r\n evt.deltaX = 0;\r\n evt.deltaY = 0;\r\n }\r\n \r\n this.pressMove.dispatch(evt, this.element);\r\n }\r\n \r\n this.touchMove.dispatch(evt, this.element);\r\n \r\n this._cancelLongTap();\r\n \r\n this.x2 = currentX;\r\n this.y2 = currentY;\r\n \r\n if (len > 1) {\r\n evt.preventDefault();\r\n }\r\n }\r\n }, {\r\n key: \"end\",\r\n value: function end(evt) {\r\n if (!evt.changedTouches) {\r\n return;\r\n }\r\n \r\n this._cancelLongTap();\r\n \r\n var self = this;\r\n \r\n if (evt.touches.length < 2) {\r\n this.multipointEnd.dispatch(evt, this.element);\r\n this.sx2 = this.sy2 = null;\r\n }\r\n \r\n if (this.x2 && Math.abs(this.x1 - this.x2) > 30 || this.y2 && Math.abs(this.y1 - this.y2) > 30) {\r\n evt.direction = this._swipeDirection(this.x1, this.x2, this.y1, this.y2);\r\n this.swipeTimeout = setTimeout(function () {\r\n self.swipe.dispatch(evt, self.element);\r\n }, 0);\r\n } else {\r\n this.tapTimeout = setTimeout(function () {\r\n if (!self._preventTap) {\r\n self.tap.dispatch(evt, self.element);\r\n }\r\n \r\n if (self.isDoubleTap) {\r\n self.doubleTap.dispatch(evt, self.element);\r\n self.isDoubleTap = false;\r\n }\r\n }, 0);\r\n \r\n if (!self.isDoubleTap) {\r\n self.singleTapTimeout = setTimeout(function () {\r\n self.singleTap.dispatch(evt, self.element);\r\n }, 250);\r\n }\r\n }\r\n \r\n this.touchEnd.dispatch(evt, this.element);\r\n this.preV.x = 0;\r\n this.preV.y = 0;\r\n this.zoom = 1;\r\n this.pinchStartLen = null;\r\n this.x1 = this.x2 = this.y1 = this.y2 = null;\r\n }\r\n }, {\r\n key: \"cancelAll\",\r\n value: function cancelAll() {\r\n this._preventTap = true;\r\n clearTimeout(this.singleTapTimeout);\r\n clearTimeout(this.tapTimeout);\r\n clearTimeout(this.longTapTimeout);\r\n clearTimeout(this.swipeTimeout);\r\n }\r\n }, {\r\n key: \"cancel\",\r\n value: function cancel(evt) {\r\n this.cancelAll();\r\n this.touchCancel.dispatch(evt, this.element);\r\n }\r\n }, {\r\n key: \"_cancelLongTap\",\r\n value: function _cancelLongTap() {\r\n clearTimeout(this.longTapTimeout);\r\n }\r\n }, {\r\n key: \"_cancelSingleTap\",\r\n value: function _cancelSingleTap() {\r\n clearTimeout(this.singleTapTimeout);\r\n }\r\n }, {\r\n key: \"_swipeDirection\",\r\n value: function _swipeDirection(x1, x2, y1, y2) {\r\n return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? x1 - x2 > 0 ? 'Left' : 'Right' : y1 - y2 > 0 ? 'Up' : 'Down';\r\n }\r\n }, {\r\n key: \"on\",\r\n value: function on(evt, handler) {\r\n if (this[evt]) {\r\n this[evt].add(handler);\r\n }\r\n }\r\n }, {\r\n key: \"off\",\r\n value: function off(evt, handler) {\r\n if (this[evt]) {\r\n this[evt].del(handler);\r\n }\r\n }\r\n }, {\r\n key: \"destroy\",\r\n value: function destroy() {\r\n if (this.singleTapTimeout) {\r\n clearTimeout(this.singleTapTimeout);\r\n }\r\n \r\n if (this.tapTimeout) {\r\n clearTimeout(this.tapTimeout);\r\n }\r\n \r\n if (this.longTapTimeout) {\r\n clearTimeout(this.longTapTimeout);\r\n }\r\n \r\n if (this.swipeTimeout) {\r\n clearTimeout(this.swipeTimeout);\r\n }\r\n \r\n this.element.removeEventListener('touchstart', this.start);\r\n this.element.removeEventListener('touchmove', this.move);\r\n this.element.removeEventListener('touchend', this.end);\r\n this.element.removeEventListener('touchcancel', this.cancel);\r\n this.rotate.del();\r\n this.touchStart.del();\r\n this.multipointStart.del();\r\n this.multipointEnd.del();\r\n this.pinch.del();\r\n this.swipe.del();\r\n this.tap.del();\r\n this.doubleTap.del();\r\n this.longTap.del();\r\n this.singleTap.del();\r\n this.pressMove.del();\r\n this.twoFingerPressMove.del();\r\n this.touchMove.del();\r\n this.touchEnd.del();\r\n this.touchCancel.del();\r\n this.preV = this.pinchStartLen = this.zoom = this.isDoubleTap = this.delta = this.last = this.now = this.tapTimeout = this.singleTapTimeout = this.longTapTimeout = this.swipeTimeout = this.x1 = this.x2 = this.y1 = this.y2 = this.preTapPosition = this.rotate = this.touchStart = this.multipointStart = this.multipointEnd = this.pinch = this.swipe = this.tap = this.doubleTap = this.longTap = this.singleTap = this.pressMove = this.touchMove = this.touchEnd = this.touchCancel = this.twoFingerPressMove = null;\r\n window.removeEventListener('scroll', this._cancelAllHandler);\r\n return null;\r\n }\r\n }]);\r\n \r\n return TouchEvents;\r\n }();\r\n \r\n function resetSlideMove(slide) {\r\n var transitionEnd = whichTransitionEvent();\r\n var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n var media = hasClass(slide, 'gslide-media') ? slide : slide.querySelector('.gslide-media');\r\n var container = closest(media, '.ginner-container');\r\n var desc = slide.querySelector('.gslide-description');\r\n \r\n if (windowWidth > 769) {\r\n media = container;\r\n }\r\n \r\n addClass(media, 'greset');\r\n cssTransform(media, 'translate3d(0, 0, 0)');\r\n addEvent(transitionEnd, {\r\n onElement: media,\r\n once: true,\r\n withCallback: function withCallback(event, target) {\r\n removeClass(media, 'greset');\r\n }\r\n });\r\n media.style.opacity = '';\r\n \r\n if (desc) {\r\n desc.style.opacity = '';\r\n }\r\n }\r\n \r\n function touchNavigation(instance) {\r\n if (instance.events.hasOwnProperty('touch')) {\r\n return false;\r\n }\r\n \r\n var winSize = windowSize();\r\n var winWidth = winSize.width;\r\n var winHeight = winSize.height;\r\n var process = false;\r\n var currentSlide = null;\r\n var media = null;\r\n var mediaImage = null;\r\n var doingMove = false;\r\n var initScale = 1;\r\n var maxScale = 4.5;\r\n var currentScale = 1;\r\n var doingZoom = false;\r\n var imageZoomed = false;\r\n var zoomedPosX = null;\r\n var zoomedPosY = null;\r\n var lastZoomedPosX = null;\r\n var lastZoomedPosY = null;\r\n var hDistance;\r\n var vDistance;\r\n var hDistancePercent = 0;\r\n var vDistancePercent = 0;\r\n var vSwipe = false;\r\n var hSwipe = false;\r\n var startCoords = {};\r\n var endCoords = {};\r\n var xDown = 0;\r\n var yDown = 0;\r\n var isInlined;\r\n var sliderWrapper = document.getElementById('glightbox-slider');\r\n var overlay = document.querySelector('.goverlay');\r\n var touchInstance = new TouchEvents(sliderWrapper, {\r\n touchStart: function touchStart(e) {\r\n process = true;\r\n \r\n if (hasClass(e.targetTouches[0].target, 'ginner-container') || closest(e.targetTouches[0].target, '.gslide-desc') || e.targetTouches[0].target.nodeName.toLowerCase() == 'a') {\r\n process = false;\r\n }\r\n \r\n if (closest(e.targetTouches[0].target, '.gslide-inline') && !hasClass(e.targetTouches[0].target.parentNode, 'gslide-inline')) {\r\n process = false;\r\n }\r\n \r\n if (process) {\r\n endCoords = e.targetTouches[0];\r\n startCoords.pageX = e.targetTouches[0].pageX;\r\n startCoords.pageY = e.targetTouches[0].pageY;\r\n xDown = e.targetTouches[0].clientX;\r\n yDown = e.targetTouches[0].clientY;\r\n currentSlide = instance.activeSlide;\r\n media = currentSlide.querySelector('.gslide-media');\r\n isInlined = currentSlide.querySelector('.gslide-inline');\r\n mediaImage = null;\r\n \r\n if (hasClass(media, 'gslide-image')) {\r\n mediaImage = media.querySelector('img');\r\n }\r\n \r\n var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n \r\n if (windowWidth > 769) {\r\n media = currentSlide.querySelector('.ginner-container');\r\n }\r\n \r\n removeClass(overlay, 'greset');\r\n \r\n if (e.pageX > 20 && e.pageX < window.innerWidth - 20) {\r\n return;\r\n }\r\n \r\n e.preventDefault();\r\n }\r\n },\r\n touchMove: function touchMove(e) {\r\n if (!process) {\r\n return;\r\n }\r\n \r\n endCoords = e.targetTouches[0];\r\n \r\n if (doingZoom || imageZoomed) {\r\n return;\r\n }\r\n \r\n if (isInlined && isInlined.offsetHeight > winHeight) {\r\n var moved = startCoords.pageX - endCoords.pageX;\r\n \r\n if (Math.abs(moved) <= 13) {\r\n return false;\r\n }\r\n }\r\n \r\n doingMove = true;\r\n var xUp = e.targetTouches[0].clientX;\r\n var yUp = e.targetTouches[0].clientY;\r\n var xDiff = xDown - xUp;\r\n var yDiff = yDown - yUp;\r\n \r\n if (Math.abs(xDiff) > Math.abs(yDiff)) {\r\n vSwipe = false;\r\n hSwipe = true;\r\n } else {\r\n hSwipe = false;\r\n vSwipe = true;\r\n }\r\n \r\n hDistance = endCoords.pageX - startCoords.pageX;\r\n hDistancePercent = hDistance * 100 / winWidth;\r\n vDistance = endCoords.pageY - startCoords.pageY;\r\n vDistancePercent = vDistance * 100 / winHeight;\r\n var opacity;\r\n \r\n if (vSwipe && mediaImage) {\r\n opacity = 1 - Math.abs(vDistance) / winHeight;\r\n overlay.style.opacity = opacity;\r\n \r\n if (instance.settings.touchFollowAxis) {\r\n hDistancePercent = 0;\r\n }\r\n }\r\n \r\n if (hSwipe) {\r\n opacity = 1 - Math.abs(hDistance) / winWidth;\r\n media.style.opacity = opacity;\r\n \r\n if (instance.settings.touchFollowAxis) {\r\n vDistancePercent = 0;\r\n }\r\n }\r\n \r\n if (!mediaImage) {\r\n return cssTransform(media, \"translate3d(\".concat(hDistancePercent, \"%, 0, 0)\"));\r\n }\r\n \r\n cssTransform(media, \"translate3d(\".concat(hDistancePercent, \"%, \").concat(vDistancePercent, \"%, 0)\"));\r\n },\r\n touchEnd: function touchEnd() {\r\n if (!process) {\r\n return;\r\n }\r\n \r\n doingMove = false;\r\n \r\n if (imageZoomed || doingZoom) {\r\n lastZoomedPosX = zoomedPosX;\r\n lastZoomedPosY = zoomedPosY;\r\n return;\r\n }\r\n \r\n var v = Math.abs(parseInt(vDistancePercent));\r\n var h = Math.abs(parseInt(hDistancePercent));\r\n \r\n if (v > 29 && mediaImage) {\r\n instance.close();\r\n return;\r\n }\r\n \r\n if (v < 29 && h < 25) {\r\n addClass(overlay, 'greset');\r\n overlay.style.opacity = 1;\r\n return resetSlideMove(media);\r\n }\r\n },\r\n multipointEnd: function multipointEnd() {\r\n setTimeout(function () {\r\n doingZoom = false;\r\n }, 50);\r\n },\r\n multipointStart: function multipointStart() {\r\n doingZoom = true;\r\n initScale = currentScale ? currentScale : 1;\r\n },\r\n pinch: function pinch(evt) {\r\n if (!mediaImage || doingMove) {\r\n return false;\r\n }\r\n \r\n doingZoom = true;\r\n mediaImage.scaleX = mediaImage.scaleY = initScale * evt.zoom;\r\n var scale = initScale * evt.zoom;\r\n imageZoomed = true;\r\n \r\n if (scale <= 1) {\r\n imageZoomed = false;\r\n scale = 1;\r\n lastZoomedPosY = null;\r\n lastZoomedPosX = null;\r\n zoomedPosX = null;\r\n zoomedPosY = null;\r\n mediaImage.setAttribute('style', '');\r\n return;\r\n }\r\n \r\n if (scale > maxScale) {\r\n scale = maxScale;\r\n }\r\n \r\n mediaImage.style.transform = \"scale3d(\".concat(scale, \", \").concat(scale, \", 1)\");\r\n currentScale = scale;\r\n },\r\n pressMove: function pressMove(e) {\r\n if (imageZoomed && !doingZoom) {\r\n var mhDistance = endCoords.pageX - startCoords.pageX;\r\n var mvDistance = endCoords.pageY - startCoords.pageY;\r\n \r\n if (lastZoomedPosX) {\r\n mhDistance = mhDistance + lastZoomedPosX;\r\n }\r\n \r\n if (lastZoomedPosY) {\r\n mvDistance = mvDistance + lastZoomedPosY;\r\n }\r\n \r\n zoomedPosX = mhDistance;\r\n zoomedPosY = mvDistance;\r\n var style = \"translate3d(\".concat(mhDistance, \"px, \").concat(mvDistance, \"px, 0)\");\r\n \r\n if (currentScale) {\r\n style += \" scale3d(\".concat(currentScale, \", \").concat(currentScale, \", 1)\");\r\n }\r\n \r\n cssTransform(mediaImage, style);\r\n }\r\n },\r\n swipe: function swipe(evt) {\r\n if (imageZoomed) {\r\n return;\r\n }\r\n \r\n if (doingZoom) {\r\n doingZoom = false;\r\n return;\r\n }\r\n \r\n if (evt.direction == 'Left') {\r\n if (instance.index == instance.elements.length - 1) {\r\n return resetSlideMove(media);\r\n }\r\n \r\n instance.nextSlide();\r\n }\r\n \r\n if (evt.direction == 'Right') {\r\n if (instance.index == 0) {\r\n return resetSlideMove(media);\r\n }\r\n \r\n instance.prevSlide();\r\n }\r\n }\r\n });\r\n instance.events['touch'] = touchInstance;\r\n }\r\n \r\n var ZoomImages = function () {\r\n function ZoomImages(el, slide) {\r\n var _this = this;\r\n \r\n var onclose = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\r\n \r\n _classCallCheck(this, ZoomImages);\r\n \r\n this.img = el;\r\n this.slide = slide;\r\n this.onclose = onclose;\r\n \r\n if (this.img.setZoomEvents) {\r\n return false;\r\n }\r\n \r\n this.active = false;\r\n this.zoomedIn = false;\r\n this.dragging = false;\r\n this.currentX = null;\r\n this.currentY = null;\r\n this.initialX = null;\r\n this.initialY = null;\r\n this.xOffset = 0;\r\n this.yOffset = 0;\r\n this.img.addEventListener('mousedown', function (e) {\r\n return _this.dragStart(e);\r\n }, false);\r\n this.img.addEventListener('mouseup', function (e) {\r\n return _this.dragEnd(e);\r\n }, false);\r\n this.img.addEventListener('mousemove', function (e) {\r\n return _this.drag(e);\r\n }, false);\r\n this.img.addEventListener('click', function (e) {\r\n if (_this.slide.classList.contains('dragging-nav')) {\r\n _this.zoomOut();\r\n \r\n return false;\r\n }\r\n \r\n if (!_this.zoomedIn) {\r\n return _this.zoomIn();\r\n }\r\n \r\n if (_this.zoomedIn && !_this.dragging) {\r\n _this.zoomOut();\r\n }\r\n }, false);\r\n this.img.setZoomEvents = true;\r\n }\r\n \r\n _createClass(ZoomImages, [{\r\n key: \"zoomIn\",\r\n value: function zoomIn() {\r\n var winWidth = this.widowWidth();\r\n \r\n if (this.zoomedIn || winWidth <= 768) {\r\n return;\r\n }\r\n \r\n var img = this.img;\r\n img.setAttribute('data-style', img.getAttribute('style'));\r\n img.style.maxWidth = img.naturalWidth + 'px';\r\n img.style.maxHeight = img.naturalHeight + 'px';\r\n \r\n if (img.naturalWidth > winWidth) {\r\n var centerX = winWidth / 2 - img.naturalWidth / 2;\r\n this.setTranslate(this.img.parentNode, centerX, 0);\r\n }\r\n \r\n this.slide.classList.add('zoomed');\r\n this.zoomedIn = true;\r\n }\r\n }, {\r\n key: \"zoomOut\",\r\n value: function zoomOut() {\r\n this.img.parentNode.setAttribute('style', '');\r\n this.img.setAttribute('style', this.img.getAttribute('data-style'));\r\n this.slide.classList.remove('zoomed');\r\n this.zoomedIn = false;\r\n this.currentX = null;\r\n this.currentY = null;\r\n this.initialX = null;\r\n this.initialY = null;\r\n this.xOffset = 0;\r\n this.yOffset = 0;\r\n \r\n if (this.onclose && typeof this.onclose == 'function') {\r\n this.onclose();\r\n }\r\n }\r\n }, {\r\n key: \"dragStart\",\r\n value: function dragStart(e) {\r\n e.preventDefault();\r\n \r\n if (!this.zoomedIn) {\r\n this.active = false;\r\n return;\r\n }\r\n \r\n if (e.type === 'touchstart') {\r\n this.initialX = e.touches[0].clientX - this.xOffset;\r\n this.initialY = e.touches[0].clientY - this.yOffset;\r\n } else {\r\n this.initialX = e.clientX - this.xOffset;\r\n this.initialY = e.clientY - this.yOffset;\r\n }\r\n \r\n if (e.target === this.img) {\r\n this.active = true;\r\n this.img.classList.add('dragging');\r\n }\r\n }\r\n }, {\r\n key: \"dragEnd\",\r\n value: function dragEnd(e) {\r\n var _this2 = this;\r\n \r\n e.preventDefault();\r\n this.initialX = this.currentX;\r\n this.initialY = this.currentY;\r\n this.active = false;\r\n setTimeout(function () {\r\n _this2.dragging = false;\r\n _this2.img.isDragging = false;\r\n \r\n _this2.img.classList.remove('dragging');\r\n }, 100);\r\n }\r\n }, {\r\n key: \"drag\",\r\n value: function drag(e) {\r\n if (this.active) {\r\n e.preventDefault();\r\n \r\n if (e.type === 'touchmove') {\r\n this.currentX = e.touches[0].clientX - this.initialX;\r\n this.currentY = e.touches[0].clientY - this.initialY;\r\n } else {\r\n this.currentX = e.clientX - this.initialX;\r\n this.currentY = e.clientY - this.initialY;\r\n }\r\n \r\n this.xOffset = this.currentX;\r\n this.yOffset = this.currentY;\r\n this.img.isDragging = true;\r\n this.dragging = true;\r\n this.setTranslate(this.img, this.currentX, this.currentY);\r\n }\r\n }\r\n }, {\r\n key: \"onMove\",\r\n value: function onMove(e) {\r\n if (!this.zoomedIn) {\r\n return;\r\n }\r\n \r\n var xOffset = e.clientX - this.img.naturalWidth / 2;\r\n var yOffset = e.clientY - this.img.naturalHeight / 2;\r\n this.setTranslate(this.img, xOffset, yOffset);\r\n }\r\n }, {\r\n key: \"setTranslate\",\r\n value: function setTranslate(node, xPos, yPos) {\r\n node.style.transform = 'translate3d(' + xPos + 'px, ' + yPos + 'px, 0)';\r\n }\r\n }, {\r\n key: \"widowWidth\",\r\n value: function widowWidth() {\r\n return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n }\r\n }]);\r\n \r\n return ZoomImages;\r\n }();\r\n \r\n var DragSlides = function () {\r\n function DragSlides() {\r\n var _this = this;\r\n \r\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n \r\n _classCallCheck(this, DragSlides);\r\n \r\n var dragEl = config.dragEl,\r\n _config$toleranceX = config.toleranceX,\r\n toleranceX = _config$toleranceX === void 0 ? 40 : _config$toleranceX,\r\n _config$toleranceY = config.toleranceY,\r\n toleranceY = _config$toleranceY === void 0 ? 65 : _config$toleranceY,\r\n _config$slide = config.slide,\r\n slide = _config$slide === void 0 ? null : _config$slide,\r\n _config$instance = config.instance,\r\n instance = _config$instance === void 0 ? null : _config$instance;\r\n this.el = dragEl;\r\n this.active = false;\r\n this.dragging = false;\r\n this.currentX = null;\r\n this.currentY = null;\r\n this.initialX = null;\r\n this.initialY = null;\r\n this.xOffset = 0;\r\n this.yOffset = 0;\r\n this.direction = null;\r\n this.lastDirection = null;\r\n this.toleranceX = toleranceX;\r\n this.toleranceY = toleranceY;\r\n this.toleranceReached = false;\r\n this.dragContainer = this.el;\r\n this.slide = slide;\r\n this.instance = instance;\r\n this.el.addEventListener('mousedown', function (e) {\r\n return _this.dragStart(e);\r\n }, false);\r\n this.el.addEventListener('mouseup', function (e) {\r\n return _this.dragEnd(e);\r\n }, false);\r\n this.el.addEventListener('mousemove', function (e) {\r\n return _this.drag(e);\r\n }, false);\r\n }\r\n \r\n _createClass(DragSlides, [{\r\n key: \"dragStart\",\r\n value: function dragStart(e) {\r\n if (this.slide.classList.contains('zoomed')) {\r\n this.active = false;\r\n return;\r\n }\r\n \r\n if (e.type === 'touchstart') {\r\n this.initialX = e.touches[0].clientX - this.xOffset;\r\n this.initialY = e.touches[0].clientY - this.yOffset;\r\n } else {\r\n this.initialX = e.clientX - this.xOffset;\r\n this.initialY = e.clientY - this.yOffset;\r\n }\r\n \r\n var clicked = e.target.nodeName.toLowerCase();\r\n var exludeClicks = ['input', 'select', 'textarea', 'button', 'a'];\r\n \r\n if (e.target.classList.contains('nodrag') || closest(e.target, '.nodrag') || exludeClicks.indexOf(clicked) !== -1) {\r\n this.active = false;\r\n return;\r\n }\r\n \r\n e.preventDefault();\r\n \r\n if (e.target === this.el || clicked !== 'img' && closest(e.target, '.gslide-inline')) {\r\n this.active = true;\r\n this.el.classList.add('dragging');\r\n this.dragContainer = closest(e.target, '.ginner-container');\r\n }\r\n }\r\n }, {\r\n key: \"dragEnd\",\r\n value: function dragEnd(e) {\r\n var _this2 = this;\r\n \r\n e && e.preventDefault();\r\n this.initialX = 0;\r\n this.initialY = 0;\r\n this.currentX = null;\r\n this.currentY = null;\r\n this.initialX = null;\r\n this.initialY = null;\r\n this.xOffset = 0;\r\n this.yOffset = 0;\r\n this.active = false;\r\n \r\n if (this.doSlideChange) {\r\n this.instance.preventOutsideClick = true;\r\n this.doSlideChange == 'right' && this.instance.prevSlide();\r\n this.doSlideChange == 'left' && this.instance.nextSlide();\r\n }\r\n \r\n if (this.doSlideClose) {\r\n this.instance.close();\r\n }\r\n \r\n if (!this.toleranceReached) {\r\n this.setTranslate(this.dragContainer, 0, 0, true);\r\n }\r\n \r\n setTimeout(function () {\r\n _this2.instance.preventOutsideClick = false;\r\n _this2.toleranceReached = false;\r\n _this2.lastDirection = null;\r\n _this2.dragging = false;\r\n _this2.el.isDragging = false;\r\n \r\n _this2.el.classList.remove('dragging');\r\n \r\n _this2.slide.classList.remove('dragging-nav');\r\n \r\n _this2.dragContainer.style.transform = '';\r\n _this2.dragContainer.style.transition = '';\r\n }, 100);\r\n }\r\n }, {\r\n key: \"drag\",\r\n value: function drag(e) {\r\n if (this.active) {\r\n e.preventDefault();\r\n this.slide.classList.add('dragging-nav');\r\n \r\n if (e.type === 'touchmove') {\r\n this.currentX = e.touches[0].clientX - this.initialX;\r\n this.currentY = e.touches[0].clientY - this.initialY;\r\n } else {\r\n this.currentX = e.clientX - this.initialX;\r\n this.currentY = e.clientY - this.initialY;\r\n }\r\n \r\n this.xOffset = this.currentX;\r\n this.yOffset = this.currentY;\r\n this.el.isDragging = true;\r\n this.dragging = true;\r\n this.doSlideChange = false;\r\n this.doSlideClose = false;\r\n var currentXInt = Math.abs(this.currentX);\r\n var currentYInt = Math.abs(this.currentY);\r\n \r\n if (currentXInt > 0 && currentXInt >= Math.abs(this.currentY) && (!this.lastDirection || this.lastDirection == 'x')) {\r\n this.yOffset = 0;\r\n this.lastDirection = 'x';\r\n this.setTranslate(this.dragContainer, this.currentX, 0);\r\n var doChange = this.shouldChange();\r\n \r\n if (!this.instance.settings.dragAutoSnap && doChange) {\r\n this.doSlideChange = doChange;\r\n }\r\n \r\n if (this.instance.settings.dragAutoSnap && doChange) {\r\n this.instance.preventOutsideClick = true;\r\n this.toleranceReached = true;\r\n this.active = false;\r\n this.instance.preventOutsideClick = true;\r\n this.dragEnd(null);\r\n doChange == 'right' && this.instance.prevSlide();\r\n doChange == 'left' && this.instance.nextSlide();\r\n return;\r\n }\r\n }\r\n \r\n if (this.toleranceY > 0 && currentYInt > 0 && currentYInt >= currentXInt && (!this.lastDirection || this.lastDirection == 'y')) {\r\n this.xOffset = 0;\r\n this.lastDirection = 'y';\r\n this.setTranslate(this.dragContainer, 0, this.currentY);\r\n var doClose = this.shouldClose();\r\n \r\n if (!this.instance.settings.dragAutoSnap && doClose) {\r\n this.doSlideClose = true;\r\n }\r\n \r\n if (this.instance.settings.dragAutoSnap && doClose) {\r\n this.instance.close();\r\n }\r\n \r\n return;\r\n }\r\n }\r\n }\r\n }, {\r\n key: \"shouldChange\",\r\n value: function shouldChange() {\r\n var doChange = false;\r\n var currentXInt = Math.abs(this.currentX);\r\n \r\n if (currentXInt >= this.toleranceX) {\r\n var dragDir = this.currentX > 0 ? 'right' : 'left';\r\n \r\n if (dragDir == 'left' && this.slide !== this.slide.parentNode.lastChild || dragDir == 'right' && this.slide !== this.slide.parentNode.firstChild) {\r\n doChange = dragDir;\r\n }\r\n }\r\n \r\n return doChange;\r\n }\r\n }, {\r\n key: \"shouldClose\",\r\n value: function shouldClose() {\r\n var doClose = false;\r\n var currentYInt = Math.abs(this.currentY);\r\n \r\n if (currentYInt >= this.toleranceY) {\r\n doClose = true;\r\n }\r\n \r\n return doClose;\r\n }\r\n }, {\r\n key: \"setTranslate\",\r\n value: function setTranslate(node, xPos, yPos) {\r\n var animated = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\r\n \r\n if (animated) {\r\n node.style.transition = 'all .2s ease';\r\n } else {\r\n node.style.transition = '';\r\n }\r\n \r\n node.style.transform = \"translate3d(\".concat(xPos, \"px, \").concat(yPos, \"px, 0)\");\r\n }\r\n }]);\r\n \r\n return DragSlides;\r\n }();\r\n \r\n function slideImage(slide, data, index, callback) {\r\n var slideMedia = slide.querySelector('.gslide-media');\r\n var img = new Image();\r\n var titleID = 'gSlideTitle_' + index;\r\n var textID = 'gSlideDesc_' + index;\r\n img.addEventListener('load', function () {\r\n if (isFunction(callback)) {\r\n callback();\r\n }\r\n }, false);\r\n img.src = data.href;\r\n \r\n if (data.sizes != '' && data.srcset != '') {\r\n img.sizes = data.sizes;\r\n img.srcset = data.srcset;\r\n }\r\n \r\n img.alt = '';\r\n \r\n if (!isNil(data.alt) && data.alt !== '') {\r\n img.alt = data.alt;\r\n }\r\n \r\n if (data.title !== '') {\r\n img.setAttribute('aria-labelledby', titleID);\r\n }\r\n \r\n if (data.description !== '') {\r\n img.setAttribute('aria-describedby', textID);\r\n }\r\n \r\n if (data.hasOwnProperty('_hasCustomWidth') && data._hasCustomWidth) {\r\n img.style.width = data.width;\r\n }\r\n \r\n if (data.hasOwnProperty('_hasCustomHeight') && data._hasCustomHeight) {\r\n img.style.height = data.height;\r\n }\r\n \r\n slideMedia.insertBefore(img, slideMedia.firstChild);\r\n return;\r\n }\r\n \r\n function slideVideo(slide, data, index, callback) {\r\n var _this = this;\r\n \r\n var slideContainer = slide.querySelector('.ginner-container');\r\n var videoID = 'gvideo' + index;\r\n var slideMedia = slide.querySelector('.gslide-media');\r\n var videoPlayers = this.getAllPlayers();\r\n addClass(slideContainer, 'gvideo-container');\r\n slideMedia.insertBefore(createHTML('
'), slideMedia.firstChild);\r\n var videoWrapper = slide.querySelector('.gvideo-wrapper');\r\n injectAssets(this.settings.plyr.css, 'Plyr');\r\n var url = data.href;\r\n var protocol = location.protocol.replace(':', '');\r\n var videoSource = '';\r\n var embedID = '';\r\n var customPlaceholder = false;\r\n \r\n if (protocol == 'file') {\r\n protocol = 'http';\r\n }\r\n \r\n slideMedia.style.maxWidth = data.width;\r\n injectAssets(this.settings.plyr.js, 'Plyr', function () {\r\n if (url.match(/vimeo\\.com\\/([0-9]*)/)) {\r\n var vimeoID = /vimeo.*\\/(\\d+)/i.exec(url);\r\n videoSource = 'vimeo';\r\n embedID = vimeoID[1];\r\n }\r\n \r\n if (url.match(/(youtube\\.com|youtube-nocookie\\.com)\\/watch\\?v=([a-zA-Z0-9\\-_]+)/) || url.match(/youtu\\.be\\/([a-zA-Z0-9\\-_]+)/) || url.match(/(youtube\\.com|youtube-nocookie\\.com)\\/embed\\/([a-zA-Z0-9\\-_]+)/)) {\r\n var youtubeID = getYoutubeID(url);\r\n videoSource = 'youtube';\r\n embedID = youtubeID;\r\n }\r\n \r\n if (url.match(/\\.(mp4|ogg|webm|mov)$/) !== null) {\r\n videoSource = 'local';\r\n var html = '';\r\n customPlaceholder = createHTML(html);\r\n }\r\n \r\n var placeholder = customPlaceholder ? customPlaceholder : createHTML(\"
\"));\r\n addClass(videoWrapper, \"\".concat(videoSource, \"-video gvideo\"));\r\n videoWrapper.appendChild(placeholder);\r\n videoWrapper.setAttribute('data-id', videoID);\r\n videoWrapper.setAttribute('data-index', index);\r\n var playerConfig = has(_this.settings.plyr, 'config') ? _this.settings.plyr.config : {};\r\n var player = new Plyr('#' + videoID, playerConfig);\r\n player.on('ready', function (event) {\r\n var instance = event.detail.plyr;\r\n videoPlayers[videoID] = instance;\r\n \r\n if (isFunction(callback)) {\r\n callback();\r\n }\r\n });\r\n waitUntil(function () {\r\n return slide.querySelector('iframe') && slide.querySelector('iframe').dataset.ready == 'true';\r\n }, function () {\r\n _this.resize(slide);\r\n });\r\n player.on('enterfullscreen', handleMediaFullScreen);\r\n player.on('exitfullscreen', handleMediaFullScreen);\r\n });\r\n }\r\n \r\n function getYoutubeID(url) {\r\n var videoID = '';\r\n url = url.replace(/(>|<)/gi, '').split(/(vi\\/|v=|\\/v\\/|youtu\\.be\\/|\\/embed\\/)/);\r\n \r\n if (url[2] !== undefined) {\r\n videoID = url[2].split(/[^0-9a-z_\\-]/i);\r\n videoID = videoID[0];\r\n } else {\r\n videoID = url;\r\n }\r\n \r\n return videoID;\r\n }\r\n \r\n function handleMediaFullScreen(event) {\r\n var media = closest(event.target, '.gslide-media');\r\n \r\n if (event.type == 'enterfullscreen') {\r\n addClass(media, 'fullscreen');\r\n }\r\n \r\n if (event.type == 'exitfullscreen') {\r\n removeClass(media, 'fullscreen');\r\n }\r\n }\r\n \r\n function slideInline(slide, data, index, callback) {\r\n var _this = this;\r\n \r\n var slideMedia = slide.querySelector('.gslide-media');\r\n var hash = has(data, 'href') && data.href ? data.href.split('#').pop().trim() : false;\r\n var content = has(data, 'content') && data.content ? data.content : false;\r\n var innerContent;\r\n \r\n if (content) {\r\n if (isString(content)) {\r\n innerContent = createHTML(\"
\".concat(content, \"
\"));\r\n }\r\n \r\n if (isNode(content)) {\r\n if (content.style.display == 'none') {\r\n content.style.display = 'block';\r\n }\r\n \r\n var container = document.createElement('div');\r\n container.className = 'ginlined-content';\r\n container.appendChild(content);\r\n innerContent = container;\r\n }\r\n }\r\n \r\n if (hash) {\r\n var div = document.getElementById(hash);\r\n \r\n if (!div) {\r\n return false;\r\n }\r\n \r\n var cloned = div.cloneNode(true);\r\n cloned.style.height = data.height;\r\n cloned.style.maxWidth = data.width;\r\n addClass(cloned, 'ginlined-content');\r\n innerContent = cloned;\r\n }\r\n \r\n if (!innerContent) {\r\n console.error('Unable to append inline slide content', data);\r\n return false;\r\n }\r\n \r\n slideMedia.style.height = data.height;\r\n slideMedia.style.width = data.width;\r\n slideMedia.appendChild(innerContent);\r\n this.events['inlineclose' + hash] = addEvent('click', {\r\n onElement: slideMedia.querySelectorAll('.gtrigger-close'),\r\n withCallback: function withCallback(e) {\r\n e.preventDefault();\r\n \r\n _this.close();\r\n }\r\n });\r\n \r\n if (isFunction(callback)) {\r\n callback();\r\n }\r\n \r\n return;\r\n }\r\n \r\n function slideIframe(slide, data, index, callback) {\r\n var slideMedia = slide.querySelector('.gslide-media');\r\n var iframe = createIframe({\r\n url: data.href,\r\n callback: callback\r\n });\r\n slideMedia.parentNode.style.maxWidth = data.width;\r\n slideMedia.parentNode.style.height = data.height;\r\n slideMedia.appendChild(iframe);\r\n return;\r\n }\r\n \r\n var SlideConfigParser = function () {\r\n function SlideConfigParser() {\r\n var slideParamas = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n \r\n _classCallCheck(this, SlideConfigParser);\r\n \r\n this.defaults = {\r\n href: '',\r\n sizes: '',\r\n srcset: '',\r\n title: '',\r\n type: '',\r\n description: '',\r\n alt: '',\r\n descPosition: 'bottom',\r\n effect: '',\r\n width: '',\r\n height: '',\r\n content: false,\r\n zoomable: true,\r\n draggable: true\r\n };\r\n \r\n if (isObject(slideParamas)) {\r\n this.defaults = extend(this.defaults, slideParamas);\r\n }\r\n }\r\n \r\n _createClass(SlideConfigParser, [{\r\n key: \"sourceType\",\r\n value: function sourceType(url) {\r\n var origin = url;\r\n url = url.toLowerCase();\r\n \r\n if (url.match(/\\.(jpeg|jpg|jpe|gif|png|apn|webp|avif|svg)/) !== null) {\r\n return 'image';\r\n }\r\n \r\n if (url.match(/(youtube\\.com|youtube-nocookie\\.com)\\/watch\\?v=([a-zA-Z0-9\\-_]+)/) || url.match(/youtu\\.be\\/([a-zA-Z0-9\\-_]+)/) || url.match(/(youtube\\.com|youtube-nocookie\\.com)\\/embed\\/([a-zA-Z0-9\\-_]+)/)) {\r\n return 'video';\r\n }\r\n \r\n if (url.match(/vimeo\\.com\\/([0-9]*)/)) {\r\n return 'video';\r\n }\r\n \r\n if (url.match(/\\.(mp4|ogg|webm|mov)/) !== null) {\r\n return 'video';\r\n }\r\n \r\n if (url.match(/\\.(mp3|wav|wma|aac|ogg)/) !== null) {\r\n return 'audio';\r\n }\r\n \r\n if (url.indexOf('#') > -1) {\r\n var hash = origin.split('#').pop();\r\n \r\n if (hash.trim() !== '') {\r\n return 'inline';\r\n }\r\n }\r\n \r\n if (url.indexOf('goajax=true') > -1) {\r\n return 'ajax';\r\n }\r\n \r\n return 'external';\r\n }\r\n }, {\r\n key: \"parseConfig\",\r\n value: function parseConfig(element, settings) {\r\n var _this = this;\r\n \r\n var data = extend({\r\n descPosition: settings.descPosition\r\n }, this.defaults);\r\n \r\n if (isObject(element) && !isNode(element)) {\r\n if (!has(element, 'type')) {\r\n if (has(element, 'content') && element.content) {\r\n element.type = 'inline';\r\n } else if (has(element, 'href')) {\r\n element.type = this.sourceType(element.href);\r\n }\r\n }\r\n \r\n var objectData = extend(data, element);\r\n this.setSize(objectData, settings);\r\n return objectData;\r\n }\r\n \r\n var url = '';\r\n var config = element.getAttribute('data-glightbox');\r\n var nodeType = element.nodeName.toLowerCase();\r\n \r\n if (nodeType === 'a') {\r\n url = element.href;\r\n }\r\n \r\n if (nodeType === 'img') {\r\n url = element.src;\r\n data.alt = element.alt;\r\n }\r\n \r\n data.href = url;\r\n each(data, function (val, key) {\r\n if (has(settings, key) && key !== 'width') {\r\n data[key] = settings[key];\r\n }\r\n \r\n var nodeData = element.dataset[key];\r\n \r\n if (!isNil(nodeData)) {\r\n data[key] = _this.sanitizeValue(nodeData);\r\n }\r\n });\r\n \r\n if (data.content) {\r\n data.type = 'inline';\r\n }\r\n \r\n if (!data.type && url) {\r\n data.type = this.sourceType(url);\r\n }\r\n \r\n if (!isNil(config)) {\r\n var cleanKeys = [];\r\n each(data, function (v, k) {\r\n cleanKeys.push(';\\\\s?' + k);\r\n });\r\n cleanKeys = cleanKeys.join('\\\\s?:|');\r\n \r\n if (config.trim() !== '') {\r\n each(data, function (val, key) {\r\n var str = config;\r\n var match = 's?' + key + 's?:s?(.*?)(' + cleanKeys + 's?:|$)';\r\n var regex = new RegExp(match);\r\n var matches = str.match(regex);\r\n \r\n if (matches && matches.length && matches[1]) {\r\n var value = matches[1].trim().replace(/;\\s*$/, '');\r\n data[key] = _this.sanitizeValue(value);\r\n }\r\n });\r\n }\r\n } else {\r\n if (!data.title && nodeType == 'a') {\r\n var title = element.title;\r\n \r\n if (!isNil(title) && title !== '') {\r\n data.title = title;\r\n }\r\n }\r\n \r\n if (!data.title && nodeType == 'img') {\r\n var alt = element.alt;\r\n \r\n if (!isNil(alt) && alt !== '') {\r\n data.title = alt;\r\n }\r\n }\r\n }\r\n \r\n if (data.description && data.description.substring(0, 1) === '.') {\r\n var description;\r\n \r\n try {\r\n description = document.querySelector(data.description).innerHTML;\r\n } catch (error) {\r\n if (!(error instanceof DOMException)) {\r\n throw error;\r\n }\r\n }\r\n \r\n if (description) {\r\n data.description = description;\r\n }\r\n }\r\n \r\n if (!data.description) {\r\n var nodeDesc = element.querySelector('.glightbox-desc');\r\n \r\n if (nodeDesc) {\r\n data.description = nodeDesc.innerHTML;\r\n }\r\n }\r\n \r\n this.setSize(data, settings, element);\r\n this.slideConfig = data;\r\n return data;\r\n }\r\n }, {\r\n key: \"setSize\",\r\n value: function setSize(data, settings) {\r\n var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\r\n var defaultWith = data.type == 'video' ? this.checkSize(settings.videosWidth) : this.checkSize(settings.width);\r\n var defaultHeight = this.checkSize(settings.height);\r\n data.width = has(data, 'width') && data.width !== '' ? this.checkSize(data.width) : defaultWith;\r\n data.height = has(data, 'height') && data.height !== '' ? this.checkSize(data.height) : defaultHeight;\r\n \r\n if (element && data.type == 'image') {\r\n data._hasCustomWidth = element.dataset.width ? true : false;\r\n data._hasCustomHeight = element.dataset.height ? true : false;\r\n }\r\n \r\n return data;\r\n }\r\n }, {\r\n key: \"checkSize\",\r\n value: function checkSize(size) {\r\n return isNumber(size) ? \"\".concat(size, \"px\") : size;\r\n }\r\n }, {\r\n key: \"sanitizeValue\",\r\n value: function sanitizeValue(val) {\r\n if (val !== 'true' && val !== 'false') {\r\n return val;\r\n }\r\n \r\n return val === 'true';\r\n }\r\n }]);\r\n \r\n return SlideConfigParser;\r\n }();\r\n \r\n var Slide = function () {\r\n function Slide(el, instance, index) {\r\n _classCallCheck(this, Slide);\r\n \r\n this.element = el;\r\n this.instance = instance;\r\n this.index = index;\r\n }\r\n \r\n _createClass(Slide, [{\r\n key: \"setContent\",\r\n value: function setContent() {\r\n var _this = this;\r\n \r\n var slide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\r\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n \r\n if (hasClass(slide, 'loaded')) {\r\n return false;\r\n }\r\n \r\n var settings = this.instance.settings;\r\n var slideConfig = this.slideConfig;\r\n var isMobileDevice = isMobile();\r\n \r\n if (isFunction(settings.beforeSlideLoad)) {\r\n settings.beforeSlideLoad({\r\n index: this.index,\r\n slide: slide,\r\n player: false\r\n });\r\n }\r\n \r\n var type = slideConfig.type;\r\n var position = slideConfig.descPosition;\r\n var slideMedia = slide.querySelector('.gslide-media');\r\n var slideTitle = slide.querySelector('.gslide-title');\r\n var slideText = slide.querySelector('.gslide-desc');\r\n var slideDesc = slide.querySelector('.gdesc-inner');\r\n var finalCallback = callback;\r\n var titleID = 'gSlideTitle_' + this.index;\r\n var textID = 'gSlideDesc_' + this.index;\r\n \r\n if (isFunction(settings.afterSlideLoad)) {\r\n finalCallback = function finalCallback() {\r\n if (isFunction(callback)) {\r\n callback();\r\n }\r\n \r\n settings.afterSlideLoad({\r\n index: _this.index,\r\n slide: slide,\r\n player: _this.instance.getSlidePlayerInstance(_this.index)\r\n });\r\n };\r\n }\r\n \r\n if (slideConfig.title == '' && slideConfig.description == '') {\r\n if (slideDesc) {\r\n slideDesc.parentNode.parentNode.removeChild(slideDesc.parentNode);\r\n }\r\n } else {\r\n if (slideTitle && slideConfig.title !== '') {\r\n slideTitle.id = titleID;\r\n slideTitle.innerHTML = slideConfig.title;\r\n } else {\r\n slideTitle.parentNode.removeChild(slideTitle);\r\n }\r\n \r\n if (slideText && slideConfig.description !== '') {\r\n slideText.id = textID;\r\n \r\n if (isMobileDevice && settings.moreLength > 0) {\r\n slideConfig.smallDescription = this.slideShortDesc(slideConfig.description, settings.moreLength, settings.moreText);\r\n slideText.innerHTML = slideConfig.smallDescription;\r\n this.descriptionEvents(slideText, slideConfig);\r\n } else {\r\n slideText.innerHTML = slideConfig.description;\r\n }\r\n } else {\r\n slideText.parentNode.removeChild(slideText);\r\n }\r\n \r\n addClass(slideMedia.parentNode, \"desc-\".concat(position));\r\n addClass(slideDesc.parentNode, \"description-\".concat(position));\r\n }\r\n \r\n addClass(slideMedia, \"gslide-\".concat(type));\r\n addClass(slide, 'loaded');\r\n \r\n if (type === 'video') {\r\n slideVideo.apply(this.instance, [slide, slideConfig, this.index, finalCallback]);\r\n return;\r\n }\r\n \r\n if (type === 'external') {\r\n slideIframe.apply(this, [slide, slideConfig, this.index, finalCallback]);\r\n return;\r\n }\r\n \r\n if (type === 'inline') {\r\n slideInline.apply(this.instance, [slide, slideConfig, this.index, finalCallback]);\r\n \r\n if (slideConfig.draggable) {\r\n new DragSlides({\r\n dragEl: slide.querySelector('.gslide-inline'),\r\n toleranceX: settings.dragToleranceX,\r\n toleranceY: settings.dragToleranceY,\r\n slide: slide,\r\n instance: this.instance\r\n });\r\n }\r\n \r\n return;\r\n }\r\n \r\n if (type === 'image') {\r\n slideImage(slide, slideConfig, this.index, function () {\r\n var img = slide.querySelector('img');\r\n \r\n if (slideConfig.draggable) {\r\n new DragSlides({\r\n dragEl: img,\r\n toleranceX: settings.dragToleranceX,\r\n toleranceY: settings.dragToleranceY,\r\n slide: slide,\r\n instance: _this.instance\r\n });\r\n }\r\n \r\n if (slideConfig.zoomable && img.naturalWidth > img.offsetWidth) {\r\n addClass(img, 'zoomable');\r\n new ZoomImages(img, slide, function () {\r\n _this.instance.resize();\r\n });\r\n }\r\n \r\n if (isFunction(finalCallback)) {\r\n finalCallback();\r\n }\r\n });\r\n return;\r\n }\r\n \r\n if (isFunction(finalCallback)) {\r\n finalCallback();\r\n }\r\n }\r\n }, {\r\n key: \"slideShortDesc\",\r\n value: function slideShortDesc(string) {\r\n var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 50;\r\n var wordBoundary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n var div = document.createElement('div');\r\n div.innerHTML = string;\r\n var cleanedString = div.innerText;\r\n var useWordBoundary = wordBoundary;\r\n string = cleanedString.trim();\r\n \r\n if (string.length <= n) {\r\n return string;\r\n }\r\n \r\n var subString = string.substr(0, n - 1);\r\n \r\n if (!useWordBoundary) {\r\n return subString;\r\n }\r\n \r\n div = null;\r\n return subString + '... ' + wordBoundary + '';\r\n }\r\n }, {\r\n key: \"descriptionEvents\",\r\n value: function descriptionEvents(desc, data) {\r\n var _this2 = this;\r\n \r\n var moreLink = desc.querySelector('.desc-more');\r\n \r\n if (!moreLink) {\r\n return false;\r\n }\r\n \r\n addEvent('click', {\r\n onElement: moreLink,\r\n withCallback: function withCallback(event, target) {\r\n event.preventDefault();\r\n var body = document.body;\r\n var desc = closest(target, '.gslide-desc');\r\n \r\n if (!desc) {\r\n return false;\r\n }\r\n \r\n desc.innerHTML = data.description;\r\n addClass(body, 'gdesc-open');\r\n var shortEvent = addEvent('click', {\r\n onElement: [body, closest(desc, '.gslide-description')],\r\n withCallback: function withCallback(event, target) {\r\n if (event.target.nodeName.toLowerCase() !== 'a') {\r\n removeClass(body, 'gdesc-open');\r\n addClass(body, 'gdesc-closed');\r\n desc.innerHTML = data.smallDescription;\r\n \r\n _this2.descriptionEvents(desc, data);\r\n \r\n setTimeout(function () {\r\n removeClass(body, 'gdesc-closed');\r\n }, 400);\r\n shortEvent.destroy();\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }, {\r\n key: \"create\",\r\n value: function create() {\r\n return createHTML(this.instance.settings.slideHTML);\r\n }\r\n }, {\r\n key: \"getConfig\",\r\n value: function getConfig() {\r\n if (!isNode(this.element) && !this.element.hasOwnProperty('draggable')) {\r\n this.element.draggable = this.instance.settings.draggable;\r\n }\r\n \r\n var parser = new SlideConfigParser(this.instance.settings.slideExtraAttributes);\r\n this.slideConfig = parser.parseConfig(this.element, this.instance.settings);\r\n return this.slideConfig;\r\n }\r\n }]);\r\n \r\n return Slide;\r\n }();\r\n \r\n var _version = '3.1.1';\r\n \r\n var isMobile$1 = isMobile();\r\n \r\n var isTouch$1 = isTouch();\r\n \r\n var html = document.getElementsByTagName('html')[0];\r\n var defaults = {\r\n selector: '.glightbox',\r\n elements: null,\r\n skin: 'clean',\r\n theme: 'clean',\r\n closeButton: true,\r\n startAt: null,\r\n autoplayVideos: true,\r\n autofocusVideos: true,\r\n descPosition: 'bottom',\r\n width: '900px',\r\n height: '506px',\r\n videosWidth: '960px',\r\n beforeSlideChange: null,\r\n afterSlideChange: null,\r\n beforeSlideLoad: null,\r\n afterSlideLoad: null,\r\n slideInserted: null,\r\n slideRemoved: null,\r\n slideExtraAttributes: null,\r\n onOpen: null,\r\n onClose: null,\r\n loop: false,\r\n zoomable: true,\r\n draggable: true,\r\n dragAutoSnap: false,\r\n dragToleranceX: 40,\r\n dragToleranceY: 65,\r\n preload: true,\r\n oneSlidePerOpen: false,\r\n touchNavigation: true,\r\n touchFollowAxis: true,\r\n keyboardNavigation: true,\r\n closeOnOutsideClick: true,\r\n plugins: false,\r\n plyr: {\r\n css: 'https://cdn.plyr.io/3.6.8/plyr.css',\r\n js: 'https://cdn.plyr.io/3.6.8/plyr.js',\r\n config: {\r\n ratio: '16:9',\r\n fullscreen: {\r\n enabled: true,\r\n iosNative: true\r\n },\r\n youtube: {\r\n noCookie: true,\r\n rel: 0,\r\n showinfo: 0,\r\n iv_load_policy: 3\r\n },\r\n vimeo: {\r\n byline: false,\r\n portrait: false,\r\n title: false,\r\n transparent: false\r\n }\r\n }\r\n },\r\n openEffect: 'zoom',\r\n closeEffect: 'zoom',\r\n slideEffect: 'slide',\r\n moreText: 'See more',\r\n moreLength: 60,\r\n cssEfects: {\r\n fade: {\r\n \"in\": 'fadeIn',\r\n out: 'fadeOut'\r\n },\r\n zoom: {\r\n \"in\": 'zoomIn',\r\n out: 'zoomOut'\r\n },\r\n slide: {\r\n \"in\": 'slideInRight',\r\n out: 'slideOutLeft'\r\n },\r\n slideBack: {\r\n \"in\": 'slideInLeft',\r\n out: 'slideOutRight'\r\n },\r\n none: {\r\n \"in\": 'none',\r\n out: 'none'\r\n }\r\n },\r\n svg: {\r\n close: '',\r\n next: ' ',\r\n prev: ''\r\n }\r\n };\r\n defaults.slideHTML = \"
\\n
\\n
\\n
\\n
\\n
\\n
\\n

\\n
\\n
\\n
\\n
\\n
\\n
\";\r\n defaults.lightboxHTML = \"
\\n
\\n
\\n
\\n
\\n \\n \\n \\n
\\n
\";\r\n \r\n var GlightboxInit = function () {\r\n function GlightboxInit() {\r\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n \r\n _classCallCheck(this, GlightboxInit);\r\n \r\n this.customOptions = options;\r\n this.settings = extend(defaults, options);\r\n this.effectsClasses = this.getAnimationClasses();\r\n this.videoPlayers = {};\r\n this.apiEvents = [];\r\n this.fullElementsList = false;\r\n }\r\n \r\n _createClass(GlightboxInit, [{\r\n key: \"init\",\r\n value: function init() {\r\n var _this = this;\r\n \r\n var selector = this.getSelector();\r\n \r\n if (selector) {\r\n this.baseEvents = addEvent('click', {\r\n onElement: selector,\r\n withCallback: function withCallback(e, target) {\r\n e.preventDefault();\r\n \r\n _this.open(target);\r\n }\r\n });\r\n }\r\n \r\n this.elements = this.getElements();\r\n }\r\n }, {\r\n key: \"open\",\r\n value: function open() {\r\n var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\r\n var startAt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n \r\n if (this.elements.length == 0) {\r\n return false;\r\n }\r\n \r\n this.activeSlide = null;\r\n this.prevActiveSlideIndex = null;\r\n this.prevActiveSlide = null;\r\n var index = isNumber(startAt) ? startAt : this.settings.startAt;\r\n \r\n if (isNode(element)) {\r\n var gallery = element.getAttribute('data-gallery');\r\n \r\n if (gallery) {\r\n this.fullElementsList = this.elements;\r\n this.elements = this.getGalleryElements(this.elements, gallery);\r\n }\r\n \r\n if (isNil(index)) {\r\n index = this.getElementIndex(element);\r\n \r\n if (index < 0) {\r\n index = 0;\r\n }\r\n }\r\n }\r\n \r\n if (!isNumber(index)) {\r\n index = 0;\r\n }\r\n \r\n this.build();\r\n \r\n animateElement(this.overlay, this.settings.openEffect == 'none' ? 'none' : this.settings.cssEfects.fade[\"in\"]);\r\n \r\n var body = document.body;\r\n var scrollBar = window.innerWidth - document.documentElement.clientWidth;\r\n \r\n if (scrollBar > 0) {\r\n var styleSheet = document.createElement('style');\r\n styleSheet.type = 'text/css';\r\n styleSheet.className = 'gcss-styles';\r\n styleSheet.innerText = \".gscrollbar-fixer {margin-right: \".concat(scrollBar, \"px}\");\r\n document.head.appendChild(styleSheet);\r\n \r\n addClass(body, 'gscrollbar-fixer');\r\n }\r\n \r\n addClass(body, 'glightbox-open');\r\n \r\n addClass(html, 'glightbox-open');\r\n \r\n if (isMobile$1) {\r\n addClass(document.body, 'glightbox-mobile');\r\n \r\n this.settings.slideEffect = 'slide';\r\n }\r\n \r\n this.showSlide(index, true);\r\n \r\n if (this.elements.length == 1) {\r\n addClass(this.prevButton, 'glightbox-button-hidden');\r\n \r\n addClass(this.nextButton, 'glightbox-button-hidden');\r\n } else {\r\n removeClass(this.prevButton, 'glightbox-button-hidden');\r\n \r\n removeClass(this.nextButton, 'glightbox-button-hidden');\r\n }\r\n \r\n this.lightboxOpen = true;\r\n this.trigger('open');\r\n \r\n if (isFunction(this.settings.onOpen)) {\r\n this.settings.onOpen();\r\n }\r\n \r\n if (isTouch$1 && this.settings.touchNavigation) {\r\n touchNavigation(this);\r\n }\r\n \r\n if (this.settings.keyboardNavigation) {\r\n keyboardNavigation(this);\r\n }\r\n }\r\n }, {\r\n key: \"openAt\",\r\n value: function openAt() {\r\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\r\n this.open(null, index);\r\n }\r\n }, {\r\n key: \"showSlide\",\r\n value: function showSlide() {\r\n var _this2 = this;\r\n \r\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\r\n var first = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n \r\n show(this.loader);\r\n \r\n this.index = parseInt(index);\r\n var current = this.slidesContainer.querySelector('.current');\r\n \r\n if (current) {\r\n removeClass(current, 'current');\r\n }\r\n \r\n this.slideAnimateOut();\r\n var slideNode = this.slidesContainer.querySelectorAll('.gslide')[index];\r\n \r\n if (hasClass(slideNode, 'loaded')) {\r\n this.slideAnimateIn(slideNode, first);\r\n \r\n hide(this.loader);\r\n } else {\r\n show(this.loader);\r\n \r\n var slide = this.elements[index];\r\n var slideData = {\r\n index: this.index,\r\n slide: slideNode,\r\n slideNode: slideNode,\r\n slideConfig: slide.slideConfig,\r\n slideIndex: this.index,\r\n trigger: slide.node,\r\n player: null\r\n };\r\n this.trigger('slide_before_load', slideData);\r\n slide.instance.setContent(slideNode, function () {\r\n hide(_this2.loader);\r\n \r\n _this2.resize();\r\n \r\n _this2.slideAnimateIn(slideNode, first);\r\n \r\n _this2.trigger('slide_after_load', slideData);\r\n });\r\n }\r\n \r\n this.slideDescription = slideNode.querySelector('.gslide-description');\r\n this.slideDescriptionContained = this.slideDescription && hasClass(this.slideDescription.parentNode, 'gslide-media');\r\n \r\n if (this.settings.preload) {\r\n this.preloadSlide(index + 1);\r\n this.preloadSlide(index - 1);\r\n }\r\n \r\n this.updateNavigationClasses();\r\n this.activeSlide = slideNode;\r\n }\r\n }, {\r\n key: \"preloadSlide\",\r\n value: function preloadSlide(index) {\r\n var _this3 = this;\r\n \r\n if (index < 0 || index > this.elements.length - 1) {\r\n return false;\r\n }\r\n \r\n if (isNil(this.elements[index])) {\r\n return false;\r\n }\r\n \r\n var slideNode = this.slidesContainer.querySelectorAll('.gslide')[index];\r\n \r\n if (hasClass(slideNode, 'loaded')) {\r\n return false;\r\n }\r\n \r\n var slide = this.elements[index];\r\n var type = slide.type;\r\n var slideData = {\r\n index: index,\r\n slide: slideNode,\r\n slideNode: slideNode,\r\n slideConfig: slide.slideConfig,\r\n slideIndex: index,\r\n trigger: slide.node,\r\n player: null\r\n };\r\n this.trigger('slide_before_load', slideData);\r\n \r\n if (type == 'video' || type == 'external') {\r\n setTimeout(function () {\r\n slide.instance.setContent(slideNode, function () {\r\n _this3.trigger('slide_after_load', slideData);\r\n });\r\n }, 200);\r\n } else {\r\n slide.instance.setContent(slideNode, function () {\r\n _this3.trigger('slide_after_load', slideData);\r\n });\r\n }\r\n }\r\n }, {\r\n key: \"prevSlide\",\r\n value: function prevSlide() {\r\n this.goToSlide(this.index - 1);\r\n }\r\n }, {\r\n key: \"nextSlide\",\r\n value: function nextSlide() {\r\n this.goToSlide(this.index + 1);\r\n }\r\n }, {\r\n key: \"goToSlide\",\r\n value: function goToSlide() {\r\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n this.prevActiveSlide = this.activeSlide;\r\n this.prevActiveSlideIndex = this.index;\r\n \r\n if (!this.loop() && (index < 0 || index > this.elements.length - 1)) {\r\n return false;\r\n }\r\n \r\n if (index < 0) {\r\n index = this.elements.length - 1;\r\n } else if (index >= this.elements.length) {\r\n index = 0;\r\n }\r\n \r\n this.showSlide(index);\r\n }\r\n }, {\r\n key: \"insertSlide\",\r\n value: function insertSlide() {\r\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;\r\n \r\n if (index < 0) {\r\n index = this.elements.length;\r\n }\r\n \r\n var slide = new Slide(config, this, index);\r\n var data = slide.getConfig();\r\n \r\n var slideInfo = extend({}, data);\r\n \r\n var newSlide = slide.create();\r\n var totalSlides = this.elements.length - 1;\r\n slideInfo.index = index;\r\n slideInfo.node = false;\r\n slideInfo.instance = slide;\r\n slideInfo.slideConfig = data;\r\n this.elements.splice(index, 0, slideInfo);\r\n var addedSlideNode = null;\r\n var addedSlidePlayer = null;\r\n \r\n if (this.slidesContainer) {\r\n if (index > totalSlides) {\r\n this.slidesContainer.appendChild(newSlide);\r\n } else {\r\n var existingSlide = this.slidesContainer.querySelectorAll('.gslide')[index];\r\n this.slidesContainer.insertBefore(newSlide, existingSlide);\r\n }\r\n \r\n if (this.settings.preload && this.index == 0 && index == 0 || this.index - 1 == index || this.index + 1 == index) {\r\n this.preloadSlide(index);\r\n }\r\n \r\n if (this.index == 0 && index == 0) {\r\n this.index = 1;\r\n }\r\n \r\n this.updateNavigationClasses();\r\n addedSlideNode = this.slidesContainer.querySelectorAll('.gslide')[index];\r\n addedSlidePlayer = this.getSlidePlayerInstance(index);\r\n slideInfo.slideNode = addedSlideNode;\r\n }\r\n \r\n this.trigger('slide_inserted', {\r\n index: index,\r\n slide: addedSlideNode,\r\n slideNode: addedSlideNode,\r\n slideConfig: data,\r\n slideIndex: index,\r\n trigger: null,\r\n player: addedSlidePlayer\r\n });\r\n \r\n if (isFunction(this.settings.slideInserted)) {\r\n this.settings.slideInserted({\r\n index: index,\r\n slide: addedSlideNode,\r\n player: addedSlidePlayer\r\n });\r\n }\r\n }\r\n }, {\r\n key: \"removeSlide\",\r\n value: function removeSlide() {\r\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;\r\n \r\n if (index < 0 || index > this.elements.length - 1) {\r\n return false;\r\n }\r\n \r\n var slide = this.slidesContainer && this.slidesContainer.querySelectorAll('.gslide')[index];\r\n \r\n if (slide) {\r\n if (this.getActiveSlideIndex() == index) {\r\n if (index == this.elements.length - 1) {\r\n this.prevSlide();\r\n } else {\r\n this.nextSlide();\r\n }\r\n }\r\n \r\n slide.parentNode.removeChild(slide);\r\n }\r\n \r\n this.elements.splice(index, 1);\r\n this.trigger('slide_removed', index);\r\n \r\n if (isFunction(this.settings.slideRemoved)) {\r\n this.settings.slideRemoved(index);\r\n }\r\n }\r\n }, {\r\n key: \"slideAnimateIn\",\r\n value: function slideAnimateIn(slide, first) {\r\n var _this4 = this;\r\n \r\n var slideMedia = slide.querySelector('.gslide-media');\r\n var slideDesc = slide.querySelector('.gslide-description');\r\n var prevData = {\r\n index: this.prevActiveSlideIndex,\r\n slide: this.prevActiveSlide,\r\n slideNode: this.prevActiveSlide,\r\n slideIndex: this.prevActiveSlide,\r\n slideConfig: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].slideConfig,\r\n trigger: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].node,\r\n player: this.getSlidePlayerInstance(this.prevActiveSlideIndex)\r\n };\r\n var nextData = {\r\n index: this.index,\r\n slide: this.activeSlide,\r\n slideNode: this.activeSlide,\r\n slideConfig: this.elements[this.index].slideConfig,\r\n slideIndex: this.index,\r\n trigger: this.elements[this.index].node,\r\n player: this.getSlidePlayerInstance(this.index)\r\n };\r\n \r\n if (slideMedia.offsetWidth > 0 && slideDesc) {\r\n hide(slideDesc);\r\n \r\n slideDesc.style.display = '';\r\n }\r\n \r\n removeClass(slide, this.effectsClasses);\r\n \r\n if (first) {\r\n animateElement(slide, this.settings.cssEfects[this.settings.openEffect][\"in\"], function () {\r\n if (_this4.settings.autoplayVideos) {\r\n _this4.slidePlayerPlay(slide);\r\n }\r\n \r\n _this4.trigger('slide_changed', {\r\n prev: prevData,\r\n current: nextData\r\n });\r\n \r\n if (isFunction(_this4.settings.afterSlideChange)) {\r\n _this4.settings.afterSlideChange.apply(_this4, [prevData, nextData]);\r\n }\r\n });\r\n } else {\r\n var effectName = this.settings.slideEffect;\r\n var animIn = effectName !== 'none' ? this.settings.cssEfects[effectName][\"in\"] : effectName;\r\n \r\n if (this.prevActiveSlideIndex > this.index) {\r\n if (this.settings.slideEffect == 'slide') {\r\n animIn = this.settings.cssEfects.slideBack[\"in\"];\r\n }\r\n }\r\n \r\n animateElement(slide, animIn, function () {\r\n if (_this4.settings.autoplayVideos) {\r\n _this4.slidePlayerPlay(slide);\r\n }\r\n \r\n _this4.trigger('slide_changed', {\r\n prev: prevData,\r\n current: nextData\r\n });\r\n \r\n if (isFunction(_this4.settings.afterSlideChange)) {\r\n _this4.settings.afterSlideChange.apply(_this4, [prevData, nextData]);\r\n }\r\n });\r\n }\r\n \r\n setTimeout(function () {\r\n _this4.resize(slide);\r\n }, 100);\r\n \r\n addClass(slide, 'current');\r\n }\r\n }, {\r\n key: \"slideAnimateOut\",\r\n value: function slideAnimateOut() {\r\n if (!this.prevActiveSlide) {\r\n return false;\r\n }\r\n \r\n var prevSlide = this.prevActiveSlide;\r\n \r\n removeClass(prevSlide, this.effectsClasses);\r\n \r\n addClass(prevSlide, 'prev');\r\n \r\n var animation = this.settings.slideEffect;\r\n var animOut = animation !== 'none' ? this.settings.cssEfects[animation].out : animation;\r\n this.slidePlayerPause(prevSlide);\r\n this.trigger('slide_before_change', {\r\n prev: {\r\n index: this.prevActiveSlideIndex,\r\n slide: this.prevActiveSlide,\r\n slideNode: this.prevActiveSlide,\r\n slideIndex: this.prevActiveSlideIndex,\r\n slideConfig: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].slideConfig,\r\n trigger: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].node,\r\n player: this.getSlidePlayerInstance(this.prevActiveSlideIndex)\r\n },\r\n current: {\r\n index: this.index,\r\n slide: this.activeSlide,\r\n slideNode: this.activeSlide,\r\n slideIndex: this.index,\r\n slideConfig: this.elements[this.index].slideConfig,\r\n trigger: this.elements[this.index].node,\r\n player: this.getSlidePlayerInstance(this.index)\r\n }\r\n });\r\n \r\n if (isFunction(this.settings.beforeSlideChange)) {\r\n this.settings.beforeSlideChange.apply(this, [{\r\n index: this.prevActiveSlideIndex,\r\n slide: this.prevActiveSlide,\r\n player: this.getSlidePlayerInstance(this.prevActiveSlideIndex)\r\n }, {\r\n index: this.index,\r\n slide: this.activeSlide,\r\n player: this.getSlidePlayerInstance(this.index)\r\n }]);\r\n }\r\n \r\n if (this.prevActiveSlideIndex > this.index && this.settings.slideEffect == 'slide') {\r\n animOut = this.settings.cssEfects.slideBack.out;\r\n }\r\n \r\n animateElement(prevSlide, animOut, function () {\r\n var container = prevSlide.querySelector('.ginner-container');\r\n var media = prevSlide.querySelector('.gslide-media');\r\n var desc = prevSlide.querySelector('.gslide-description');\r\n container.style.transform = '';\r\n media.style.transform = '';\r\n \r\n removeClass(media, 'greset');\r\n \r\n media.style.opacity = '';\r\n \r\n if (desc) {\r\n desc.style.opacity = '';\r\n }\r\n \r\n removeClass(prevSlide, 'prev');\r\n });\r\n }\r\n }, {\r\n key: \"getAllPlayers\",\r\n value: function getAllPlayers() {\r\n return this.videoPlayers;\r\n }\r\n }, {\r\n key: \"getSlidePlayerInstance\",\r\n value: function getSlidePlayerInstance(index) {\r\n var id = 'gvideo' + index;\r\n var videoPlayers = this.getAllPlayers();\r\n \r\n if (has(videoPlayers, id) && videoPlayers[id]) {\r\n return videoPlayers[id];\r\n }\r\n \r\n return false;\r\n }\r\n }, {\r\n key: \"stopSlideVideo\",\r\n value: function stopSlideVideo(slide) {\r\n if (isNode(slide)) {\r\n var node = slide.querySelector('.gvideo-wrapper');\r\n \r\n if (node) {\r\n slide = node.getAttribute('data-index');\r\n }\r\n }\r\n \r\n console.log('stopSlideVideo is deprecated, use slidePlayerPause');\r\n var player = this.getSlidePlayerInstance(slide);\r\n \r\n if (player && player.playing) {\r\n player.pause();\r\n }\r\n }\r\n }, {\r\n key: \"slidePlayerPause\",\r\n value: function slidePlayerPause(slide) {\r\n if (isNode(slide)) {\r\n var node = slide.querySelector('.gvideo-wrapper');\r\n \r\n if (node) {\r\n slide = node.getAttribute('data-index');\r\n }\r\n }\r\n \r\n var player = this.getSlidePlayerInstance(slide);\r\n \r\n if (player && player.playing) {\r\n player.pause();\r\n }\r\n }\r\n }, {\r\n key: \"playSlideVideo\",\r\n value: function playSlideVideo(slide) {\r\n if (isNode(slide)) {\r\n var node = slide.querySelector('.gvideo-wrapper');\r\n \r\n if (node) {\r\n slide = node.getAttribute('data-index');\r\n }\r\n }\r\n \r\n console.log('playSlideVideo is deprecated, use slidePlayerPlay');\r\n var player = this.getSlidePlayerInstance(slide);\r\n \r\n if (player && !player.playing) {\r\n player.play();\r\n }\r\n }\r\n }, {\r\n key: \"slidePlayerPlay\",\r\n value: function slidePlayerPlay(slide) {\r\n if (isNode(slide)) {\r\n var node = slide.querySelector('.gvideo-wrapper');\r\n \r\n if (node) {\r\n slide = node.getAttribute('data-index');\r\n }\r\n }\r\n \r\n var player = this.getSlidePlayerInstance(slide);\r\n \r\n if (player && !player.playing) {\r\n player.play();\r\n \r\n if (this.settings.autofocusVideos) {\r\n player.elements.container.focus();\r\n }\r\n }\r\n }\r\n }, {\r\n key: \"setElements\",\r\n value: function setElements(elements) {\r\n var _this5 = this;\r\n \r\n this.settings.elements = false;\r\n var newElements = [];\r\n \r\n if (elements && elements.length) {\r\n each(elements, function (el, i) {\r\n var slide = new Slide(el, _this5, i);\r\n var data = slide.getConfig();\r\n \r\n var slideInfo = extend({}, data);\r\n \r\n slideInfo.slideConfig = data;\r\n slideInfo.instance = slide;\r\n slideInfo.index = i;\r\n newElements.push(slideInfo);\r\n });\r\n }\r\n \r\n this.elements = newElements;\r\n \r\n if (this.lightboxOpen) {\r\n this.slidesContainer.innerHTML = '';\r\n \r\n if (this.elements.length) {\r\n each(this.elements, function () {\r\n var slide = createHTML(_this5.settings.slideHTML);\r\n \r\n _this5.slidesContainer.appendChild(slide);\r\n });\r\n \r\n this.showSlide(0, true);\r\n }\r\n }\r\n }\r\n }, {\r\n key: \"getElementIndex\",\r\n value: function getElementIndex(node) {\r\n var index = false;\r\n \r\n each(this.elements, function (el, i) {\r\n if (has(el, 'node') && el.node == node) {\r\n index = i;\r\n return true;\r\n }\r\n });\r\n \r\n return index;\r\n }\r\n }, {\r\n key: \"getElements\",\r\n value: function getElements() {\r\n var _this6 = this;\r\n \r\n var list = [];\r\n this.elements = this.elements ? this.elements : [];\r\n \r\n if (!isNil(this.settings.elements) && isArray(this.settings.elements) && this.settings.elements.length) {\r\n each(this.settings.elements, function (el, i) {\r\n var slide = new Slide(el, _this6, i);\r\n var elData = slide.getConfig();\r\n \r\n var slideInfo = extend({}, elData);\r\n \r\n slideInfo.node = false;\r\n slideInfo.index = i;\r\n slideInfo.instance = slide;\r\n slideInfo.slideConfig = elData;\r\n list.push(slideInfo);\r\n });\r\n }\r\n \r\n var nodes = false;\r\n var selector = this.getSelector();\r\n \r\n if (selector) {\r\n nodes = document.querySelectorAll(this.getSelector());\r\n }\r\n \r\n if (!nodes) {\r\n return list;\r\n }\r\n \r\n each(nodes, function (el, i) {\r\n var slide = new Slide(el, _this6, i);\r\n var elData = slide.getConfig();\r\n \r\n var slideInfo = extend({}, elData);\r\n \r\n slideInfo.node = el;\r\n slideInfo.index = i;\r\n slideInfo.instance = slide;\r\n slideInfo.slideConfig = elData;\r\n slideInfo.gallery = el.getAttribute('data-gallery');\r\n list.push(slideInfo);\r\n });\r\n \r\n return list;\r\n }\r\n }, {\r\n key: \"getGalleryElements\",\r\n value: function getGalleryElements(list, gallery) {\r\n return list.filter(function (el) {\r\n return el.gallery == gallery;\r\n });\r\n }\r\n }, {\r\n key: \"getSelector\",\r\n value: function getSelector() {\r\n if (this.settings.elements) {\r\n return false;\r\n }\r\n \r\n if (this.settings.selector && this.settings.selector.substring(0, 5) == 'data-') {\r\n return \"*[\".concat(this.settings.selector, \"]\");\r\n }\r\n \r\n return this.settings.selector;\r\n }\r\n }, {\r\n key: \"getActiveSlide\",\r\n value: function getActiveSlide() {\r\n return this.slidesContainer.querySelectorAll('.gslide')[this.index];\r\n }\r\n }, {\r\n key: \"getActiveSlideIndex\",\r\n value: function getActiveSlideIndex() {\r\n return this.index;\r\n }\r\n }, {\r\n key: \"getAnimationClasses\",\r\n value: function getAnimationClasses() {\r\n var effects = [];\r\n \r\n for (var key in this.settings.cssEfects) {\r\n if (this.settings.cssEfects.hasOwnProperty(key)) {\r\n var effect = this.settings.cssEfects[key];\r\n effects.push(\"g\".concat(effect[\"in\"]));\r\n effects.push(\"g\".concat(effect.out));\r\n }\r\n }\r\n \r\n return effects.join(' ');\r\n }\r\n }, {\r\n key: \"build\",\r\n value: function build() {\r\n var _this7 = this;\r\n \r\n if (this.built) {\r\n return false;\r\n }\r\n \r\n var children = document.body.childNodes;\r\n var bodyChildElms = [];\r\n \r\n each(children, function (el) {\r\n if (el.parentNode == document.body && el.nodeName.charAt(0) !== '#' && el.hasAttribute && !el.hasAttribute('aria-hidden')) {\r\n bodyChildElms.push(el);\r\n el.setAttribute('aria-hidden', 'true');\r\n }\r\n });\r\n \r\n var nextSVG = has(this.settings.svg, 'next') ? this.settings.svg.next : '';\r\n var prevSVG = has(this.settings.svg, 'prev') ? this.settings.svg.prev : '';\r\n var closeSVG = has(this.settings.svg, 'close') ? this.settings.svg.close : '';\r\n var lightboxHTML = this.settings.lightboxHTML;\r\n lightboxHTML = lightboxHTML.replace(/{nextSVG}/g, nextSVG);\r\n lightboxHTML = lightboxHTML.replace(/{prevSVG}/g, prevSVG);\r\n lightboxHTML = lightboxHTML.replace(/{closeSVG}/g, closeSVG);\r\n lightboxHTML = createHTML(lightboxHTML);\r\n document.body.appendChild(lightboxHTML);\r\n var modal = document.getElementById('glightbox-body');\r\n this.modal = modal;\r\n var closeButton = modal.querySelector('.gclose');\r\n this.prevButton = modal.querySelector('.gprev');\r\n this.nextButton = modal.querySelector('.gnext');\r\n this.overlay = modal.querySelector('.goverlay');\r\n this.loader = modal.querySelector('.gloader');\r\n this.slidesContainer = document.getElementById('glightbox-slider');\r\n this.bodyHiddenChildElms = bodyChildElms;\r\n this.events = {};\r\n \r\n addClass(this.modal, 'glightbox-' + this.settings.skin);\r\n \r\n if (this.settings.closeButton && closeButton) {\r\n this.events['close'] = addEvent('click', {\r\n onElement: closeButton,\r\n withCallback: function withCallback(e, target) {\r\n e.preventDefault();\r\n \r\n _this7.close();\r\n }\r\n });\r\n }\r\n \r\n if (closeButton && !this.settings.closeButton) {\r\n closeButton.parentNode.removeChild(closeButton);\r\n }\r\n \r\n if (this.nextButton) {\r\n this.events['next'] = addEvent('click', {\r\n onElement: this.nextButton,\r\n withCallback: function withCallback(e, target) {\r\n e.preventDefault();\r\n \r\n _this7.nextSlide();\r\n }\r\n });\r\n }\r\n \r\n if (this.prevButton) {\r\n this.events['prev'] = addEvent('click', {\r\n onElement: this.prevButton,\r\n withCallback: function withCallback(e, target) {\r\n e.preventDefault();\r\n \r\n _this7.prevSlide();\r\n }\r\n });\r\n }\r\n \r\n if (this.settings.closeOnOutsideClick) {\r\n this.events['outClose'] = addEvent('click', {\r\n onElement: modal,\r\n withCallback: function withCallback(e, target) {\r\n if (!_this7.preventOutsideClick && !hasClass(document.body, 'glightbox-mobile') && !closest(e.target, '.ginner-container')) {\r\n if (!closest(e.target, '.gbtn') && !hasClass(e.target, 'gnext') && !hasClass(e.target, 'gprev')) {\r\n _this7.close();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n \r\n each(this.elements, function (slide, i) {\r\n _this7.slidesContainer.appendChild(slide.instance.create());\r\n \r\n slide.slideNode = _this7.slidesContainer.querySelectorAll('.gslide')[i];\r\n });\r\n \r\n if (isTouch$1) {\r\n addClass(document.body, 'glightbox-touch');\r\n }\r\n \r\n this.events['resize'] = addEvent('resize', {\r\n onElement: window,\r\n withCallback: function withCallback() {\r\n _this7.resize();\r\n }\r\n });\r\n this.built = true;\r\n }\r\n }, {\r\n key: \"resize\",\r\n value: function resize() {\r\n var slide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\r\n slide = !slide ? this.activeSlide : slide;\r\n \r\n if (!slide || hasClass(slide, 'zoomed')) {\r\n return;\r\n }\r\n \r\n var winSize = windowSize();\r\n \r\n var video = slide.querySelector('.gvideo-wrapper');\r\n var image = slide.querySelector('.gslide-image');\r\n var description = this.slideDescription;\r\n var winWidth = winSize.width;\r\n var winHeight = winSize.height;\r\n \r\n if (winWidth <= 768) {\r\n addClass(document.body, 'glightbox-mobile');\r\n } else {\r\n removeClass(document.body, 'glightbox-mobile');\r\n }\r\n \r\n if (!video && !image) {\r\n return;\r\n }\r\n \r\n var descriptionResize = false;\r\n \r\n if (description && (hasClass(description, 'description-bottom') || hasClass(description, 'description-top')) && !hasClass(description, 'gabsolute')) {\r\n descriptionResize = true;\r\n }\r\n \r\n if (image) {\r\n if (winWidth <= 768) {\r\n var imgNode = image.querySelector('img');\r\n } else if (descriptionResize) {\r\n var descHeight = description.offsetHeight;\r\n \r\n var _imgNode = image.querySelector('img');\r\n \r\n _imgNode.setAttribute('style', \"max-height: calc(100vh - \".concat(descHeight, \"px)\"));\r\n \r\n description.setAttribute('style', \"max-width: \".concat(_imgNode.offsetWidth, \"px;\"));\r\n }\r\n }\r\n \r\n if (video) {\r\n var ratio = has(this.settings.plyr.config, 'ratio') ? this.settings.plyr.config.ratio : '';\r\n \r\n if (!ratio) {\r\n var containerWidth = video.clientWidth;\r\n var containerHeight = video.clientHeight;\r\n var divisor = containerWidth / containerHeight;\r\n ratio = \"\".concat(containerWidth / divisor, \":\").concat(containerHeight / divisor);\r\n }\r\n \r\n var videoRatio = ratio.split(':');\r\n var videoWidth = this.settings.videosWidth;\r\n var maxWidth = this.settings.videosWidth;\r\n \r\n if (isNumber(videoWidth) || videoWidth.indexOf('px') !== -1) {\r\n maxWidth = parseInt(videoWidth);\r\n } else {\r\n if (videoWidth.indexOf('vw') !== -1) {\r\n maxWidth = winWidth * parseInt(videoWidth) / 100;\r\n } else if (videoWidth.indexOf('vh') !== -1) {\r\n maxWidth = winHeight * parseInt(videoWidth) / 100;\r\n } else if (videoWidth.indexOf('%') !== -1) {\r\n maxWidth = winWidth * parseInt(videoWidth) / 100;\r\n } else {\r\n maxWidth = parseInt(video.clientWidth);\r\n }\r\n }\r\n \r\n var maxHeight = maxWidth / (parseInt(videoRatio[0]) / parseInt(videoRatio[1]));\r\n maxHeight = Math.floor(maxHeight);\r\n \r\n if (descriptionResize) {\r\n winHeight = winHeight - description.offsetHeight;\r\n }\r\n \r\n if (maxWidth > winWidth || maxHeight > winHeight || winHeight < maxHeight && winWidth > maxWidth) {\r\n var vwidth = video.offsetWidth;\r\n var vheight = video.offsetHeight;\r\n \r\n var _ratio = winHeight / vheight;\r\n \r\n var vsize = {\r\n width: vwidth * _ratio,\r\n height: vheight * _ratio\r\n };\r\n video.parentNode.setAttribute('style', \"max-width: \".concat(vsize.width, \"px\"));\r\n \r\n if (descriptionResize) {\r\n description.setAttribute('style', \"max-width: \".concat(vsize.width, \"px;\"));\r\n }\r\n } else {\r\n video.parentNode.style.maxWidth = \"\".concat(videoWidth);\r\n \r\n if (descriptionResize) {\r\n description.setAttribute('style', \"max-width: \".concat(videoWidth, \";\"));\r\n }\r\n }\r\n }\r\n }\r\n }, {\r\n key: \"reload\",\r\n value: function reload() {\r\n this.init();\r\n }\r\n }, {\r\n key: \"updateNavigationClasses\",\r\n value: function updateNavigationClasses() {\r\n var loop = this.loop();\r\n \r\n removeClass(this.nextButton, 'disabled');\r\n \r\n removeClass(this.prevButton, 'disabled');\r\n \r\n if (this.index == 0 && this.elements.length - 1 == 0) {\r\n addClass(this.prevButton, 'disabled');\r\n \r\n addClass(this.nextButton, 'disabled');\r\n } else if (this.index === 0 && !loop) {\r\n addClass(this.prevButton, 'disabled');\r\n } else if (this.index === this.elements.length - 1 && !loop) {\r\n addClass(this.nextButton, 'disabled');\r\n }\r\n }\r\n }, {\r\n key: \"loop\",\r\n value: function loop() {\r\n var loop = has(this.settings, 'loopAtEnd') ? this.settings.loopAtEnd : null;\r\n loop = has(this.settings, 'loop') ? this.settings.loop : loop;\r\n return loop;\r\n }\r\n }, {\r\n key: \"close\",\r\n value: function close() {\r\n var _this8 = this;\r\n \r\n if (!this.lightboxOpen) {\r\n if (this.events) {\r\n for (var key in this.events) {\r\n if (this.events.hasOwnProperty(key)) {\r\n this.events[key].destroy();\r\n }\r\n }\r\n \r\n this.events = null;\r\n }\r\n \r\n return false;\r\n }\r\n \r\n if (this.closing) {\r\n return false;\r\n }\r\n \r\n this.closing = true;\r\n this.slidePlayerPause(this.activeSlide);\r\n \r\n if (this.fullElementsList) {\r\n this.elements = this.fullElementsList;\r\n }\r\n \r\n if (this.bodyHiddenChildElms.length) {\r\n each(this.bodyHiddenChildElms, function (el) {\r\n el.removeAttribute('aria-hidden');\r\n });\r\n }\r\n \r\n addClass(this.modal, 'glightbox-closing');\r\n \r\n animateElement(this.overlay, this.settings.openEffect == 'none' ? 'none' : this.settings.cssEfects.fade.out);\r\n \r\n animateElement(this.activeSlide, this.settings.cssEfects[this.settings.closeEffect].out, function () {\r\n _this8.activeSlide = null;\r\n _this8.prevActiveSlideIndex = null;\r\n _this8.prevActiveSlide = null;\r\n _this8.built = false;\r\n \r\n if (_this8.events) {\r\n for (var _key in _this8.events) {\r\n if (_this8.events.hasOwnProperty(_key)) {\r\n _this8.events[_key].destroy();\r\n }\r\n }\r\n \r\n _this8.events = null;\r\n }\r\n \r\n var body = document.body;\r\n \r\n removeClass(html, 'glightbox-open');\r\n \r\n removeClass(body, 'glightbox-open touching gdesc-open glightbox-touch glightbox-mobile gscrollbar-fixer');\r\n \r\n _this8.modal.parentNode.removeChild(_this8.modal);\r\n \r\n _this8.trigger('close');\r\n \r\n if (isFunction(_this8.settings.onClose)) {\r\n _this8.settings.onClose();\r\n }\r\n \r\n var styles = document.querySelector('.gcss-styles');\r\n \r\n if (styles) {\r\n styles.parentNode.removeChild(styles);\r\n }\r\n \r\n _this8.lightboxOpen = false;\r\n _this8.closing = null;\r\n });\r\n }\r\n }, {\r\n key: \"destroy\",\r\n value: function destroy() {\r\n this.close();\r\n this.clearAllEvents();\r\n \r\n if (this.baseEvents) {\r\n this.baseEvents.destroy();\r\n }\r\n }\r\n }, {\r\n key: \"on\",\r\n value: function on(evt, callback) {\r\n var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n \r\n if (!evt || !isFunction(callback)) {\r\n throw new TypeError('Event name and callback must be defined');\r\n }\r\n \r\n this.apiEvents.push({\r\n evt: evt,\r\n once: once,\r\n callback: callback\r\n });\r\n }\r\n }, {\r\n key: \"once\",\r\n value: function once(evt, callback) {\r\n this.on(evt, callback, true);\r\n }\r\n }, {\r\n key: \"trigger\",\r\n value: function trigger(eventName) {\r\n var _this9 = this;\r\n \r\n var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n var onceTriggered = [];\r\n \r\n each(this.apiEvents, function (event, i) {\r\n var evt = event.evt,\r\n once = event.once,\r\n callback = event.callback;\r\n \r\n if (evt == eventName) {\r\n callback(data);\r\n \r\n if (once) {\r\n onceTriggered.push(i);\r\n }\r\n }\r\n });\r\n \r\n if (onceTriggered.length) {\r\n each(onceTriggered, function (i) {\r\n return _this9.apiEvents.splice(i, 1);\r\n });\r\n }\r\n }\r\n }, {\r\n key: \"clearAllEvents\",\r\n value: function clearAllEvents() {\r\n this.apiEvents.splice(0, this.apiEvents.length);\r\n }\r\n }, {\r\n key: \"version\",\r\n value: function version() {\r\n return _version;\r\n }\r\n }]);\r\n \r\n return GlightboxInit;\r\n }();\r\n \r\n function glightbox () {\r\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n var instance = new GlightboxInit(options);\r\n instance.init();\r\n return instance;\r\n }\r\n \r\n return glightbox;\r\n \r\n })));\r\n\r\nclass Lightbox {\r\n constructor() {\r\n this.initLightbox();\r\n }\r\n initLightbox(){\r\n const lightbox = GLightbox({\r\n type: 'video',\r\n selector: \".js-video__link\"\r\n \r\n });\r\n }\r\n}\r\nexport default Lightbox;","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=e||self).GLightbox=t()}(this,(function(){\"use strict\";function e(t){return(e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=e[s]=e[s]||[],l={all:n,evt:null,found:null};return t&&i&&P(n)>0&&o(n,(function(e,n){if(e.eventName==t&&e.fn.toString()==i.toString())return l.found=!0,l.evt=n,!1})),l}function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.onElement,n=t.withCallback,s=t.avoidDuplicate,l=void 0===s||s,a=t.once,h=void 0!==a&&a,d=t.useCapture,c=void 0!==d&&d,u=arguments.length>2?arguments[2]:void 0,g=i||[];function v(e){T(n)&&n.call(u,e,this),h&&v.destroy()}return C(g)&&(g=document.querySelectorAll(g)),v.destroy=function(){o(g,(function(t){var i=r(t,e,v);i.found&&i.all.splice(i.evt,1),t.removeEventListener&&t.removeEventListener(e,v,c)}))},o(g,(function(t){var i=r(t,e,v);(t.addEventListener&&l&&!i.found||!l)&&(t.addEventListener(e,v,c),i.all.push({eventName:e,fn:v}))})),v}function h(e,t){o(t.split(\" \"),(function(t){return e.classList.add(t)}))}function d(e,t){o(t.split(\" \"),(function(t){return e.classList.remove(t)}))}function c(e,t){return e.classList.contains(t)}function u(e,t){for(;e!==document.body;){if(!(e=e.parentElement))return!1;if(\"function\"==typeof e.matches?e.matches(t):e.msMatchesSelector(t))return e}}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||\"\"===t)return!1;if(\"none\"===t)return T(i)&&i(),!1;var n=x(),s=t.split(\" \");o(s,(function(t){h(e,\"g\"+t)})),a(n,{onElement:e,avoidDuplicate:!1,once:!0,withCallback:function(e,t){o(s,(function(e){d(t,\"g\"+e)})),T(i)&&i()}})}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";if(\"\"===t)return e.style.webkitTransform=\"\",e.style.MozTransform=\"\",e.style.msTransform=\"\",e.style.OTransform=\"\",e.style.transform=\"\",!1;e.style.webkitTransform=t,e.style.MozTransform=t,e.style.msTransform=t,e.style.OTransform=t,e.style.transform=t}function f(e){e.style.display=\"block\"}function p(e){e.style.display=\"none\"}function m(e){var t=document.createDocumentFragment(),i=document.createElement(\"div\");for(i.innerHTML=e;i.firstChild;)t.appendChild(i.firstChild);return t}function y(){return{width:window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,height:window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}}function x(){var e,t=document.createElement(\"fakeelement\"),i={animation:\"animationend\",OAnimation:\"oAnimationEnd\",MozAnimation:\"animationend\",WebkitAnimation:\"webkitAnimationEnd\"};for(e in i)if(void 0!==t.style[e])return i[e]}function b(e,t,i,n){if(e())t();else{var s;i||(i=100);var l=setInterval((function(){e()&&(clearInterval(l),s&&clearTimeout(s),t())}),i);n&&(s=setTimeout((function(){clearInterval(l)}),n))}}function S(e,t,i){if(I(e))console.error(\"Inject assets error\");else if(T(t)&&(i=t,t=!1),C(t)&&t in window)T(i)&&i();else{var n;if(-1!==e.indexOf(\".css\")){if((n=document.querySelectorAll('link[href=\"'+e+'\"]'))&&n.length>0)return void(T(i)&&i());var s=document.getElementsByTagName(\"head\")[0],l=s.querySelectorAll('link[rel=\"stylesheet\"]'),o=document.createElement(\"link\");return o.rel=\"stylesheet\",o.type=\"text/css\",o.href=e,o.media=\"all\",l?s.insertBefore(o,l[0]):s.appendChild(o),void(T(i)&&i())}if((n=document.querySelectorAll('script[src=\"'+e+'\"]'))&&n.length>0){if(T(i)){if(C(t))return b((function(){return void 0!==window[t]}),(function(){i()})),!1;i()}}else{var r=document.createElement(\"script\");r.type=\"text/javascript\",r.src=e,r.onload=function(){if(T(i)){if(C(t))return b((function(){return void 0!==window[t]}),(function(){i()})),!1;i()}},document.body.appendChild(r)}}}function w(){return\"navigator\"in window&&window.navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i)}function T(e){return\"function\"==typeof e}function C(e){return\"string\"==typeof e}function k(e){return!(!e||!e.nodeType||1!=e.nodeType)}function E(e){return Array.isArray(e)}function A(e){return e&&e.length&&isFinite(e.length)}function L(t){return\"object\"===e(t)&&null!=t&&!T(t)&&!E(t)}function I(e){return null==e}function O(e,t){return null!==e&&hasOwnProperty.call(e,t)}function P(e){if(L(e)){if(e.keys)return e.keys().length;var t=0;for(var i in e)O(e,i)&&t++;return t}return e.length}function M(e){return!isNaN(parseFloat(e))&&isFinite(e)}function z(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1,t=document.querySelectorAll(\".gbtn[data-taborder]:not(.disabled)\");if(!t.length)return!1;if(1==t.length)return t[0];\"string\"==typeof e&&(e=parseInt(e));var i=[];o(t,(function(e){i.push(e.getAttribute(\"data-taborder\"))}));var n=Math.max.apply(Math,i.map((function(e){return parseInt(e)}))),s=e<0?1:e+1;s>n&&(s=\"1\");var l=i.filter((function(e){return e>=parseInt(s)})),r=l.sort()[0];return document.querySelector('.gbtn[data-taborder=\"'.concat(r,'\"]'))}function X(e){if(e.events.hasOwnProperty(\"keyboard\"))return!1;e.events.keyboard=a(\"keydown\",{onElement:window,withCallback:function(t,i){var n=(t=t||window.event).keyCode;if(9==n){var s=document.querySelector(\".gbtn.focused\");if(!s){var l=!(!document.activeElement||!document.activeElement.nodeName)&&document.activeElement.nodeName.toLocaleLowerCase();if(\"input\"==l||\"textarea\"==l||\"button\"==l)return}t.preventDefault();var o=document.querySelectorAll(\".gbtn[data-taborder]\");if(!o||o.length<=0)return;if(!s){var r=z();return void(r&&(r.focus(),h(r,\"focused\")))}var a=z(s.getAttribute(\"data-taborder\"));d(s,\"focused\"),a&&(a.focus(),h(a,\"focused\"))}39==n&&e.nextSlide(),37==n&&e.prevSlide(),27==n&&e.close()}})}function Y(e){return Math.sqrt(e.x*e.x+e.y*e.y)}function q(e,t){var i=function(e,t){var i=Y(e)*Y(t);if(0===i)return 0;var n=function(e,t){return e.x*t.x+e.y*t.y}(e,t)/i;return n>1&&(n=1),Math.acos(n)}(e,t);return function(e,t){return e.x*t.y-t.x*e.y}(e,t)>0&&(i*=-1),180*i/Math.PI}var N=function(){function e(i){t(this,e),this.handlers=[],this.el=i}return n(e,[{key:\"add\",value:function(e){this.handlers.push(e)}},{key:\"del\",value:function(e){e||(this.handlers=[]);for(var t=this.handlers.length;t>=0;t--)this.handlers[t]===e&&this.handlers.splice(t,1)}},{key:\"dispatch\",value:function(){for(var e=0,t=this.handlers.length;e=0)console.log(\"ignore drag for this touched element\",e.target.nodeName.toLowerCase());else{this.now=Date.now(),this.x1=e.touches[0].pageX,this.y1=e.touches[0].pageY,this.delta=this.now-(this.last||this.now),this.touchStart.dispatch(e,this.element),null!==this.preTapPosition.x&&(this.isDoubleTap=this.delta>0&&this.delta<=250&&Math.abs(this.preTapPosition.x-this.x1)<30&&Math.abs(this.preTapPosition.y-this.y1)<30,this.isDoubleTap&&clearTimeout(this.singleTapTimeout)),this.preTapPosition.x=this.x1,this.preTapPosition.y=this.y1,this.last=this.now;var t=this.preV;if(e.touches.length>1){this._cancelLongTap(),this._cancelSingleTap();var i={x:e.touches[1].pageX-this.x1,y:e.touches[1].pageY-this.y1};t.x=i.x,t.y=i.y,this.pinchStartLen=Y(t),this.multipointStart.dispatch(e,this.element)}this._preventTap=!1,this.longTapTimeout=setTimeout(function(){this.longTap.dispatch(e,this.element),this._preventTap=!0}.bind(this),750)}}}},{key:\"move\",value:function(e){if(e.touches){var t=this.preV,i=e.touches.length,n=e.touches[0].pageX,s=e.touches[0].pageY;if(this.isDoubleTap=!1,i>1){var l=e.touches[1].pageX,o=e.touches[1].pageY,r={x:e.touches[1].pageX-n,y:e.touches[1].pageY-s};null!==t.x&&(this.pinchStartLen>0&&(e.zoom=Y(r)/this.pinchStartLen,this.pinch.dispatch(e,this.element)),e.angle=q(r,t),this.rotate.dispatch(e,this.element)),t.x=r.x,t.y=r.y,null!==this.x2&&null!==this.sx2?(e.deltaX=(n-this.x2+l-this.sx2)/2,e.deltaY=(s-this.y2+o-this.sy2)/2):(e.deltaX=0,e.deltaY=0),this.twoFingerPressMove.dispatch(e,this.element),this.sx2=l,this.sy2=o}else{if(null!==this.x2){e.deltaX=n-this.x2,e.deltaY=s-this.y2;var a=Math.abs(this.x1-this.x2),h=Math.abs(this.y1-this.y2);(a>10||h>10)&&(this._preventTap=!0)}else e.deltaX=0,e.deltaY=0;this.pressMove.dispatch(e,this.element)}this.touchMove.dispatch(e,this.element),this._cancelLongTap(),this.x2=n,this.y2=s,i>1&&e.preventDefault()}}},{key:\"end\",value:function(e){if(e.changedTouches){this._cancelLongTap();var t=this;e.touches.length<2&&(this.multipointEnd.dispatch(e,this.element),this.sx2=this.sy2=null),this.x2&&Math.abs(this.x1-this.x2)>30||this.y2&&Math.abs(this.y1-this.y2)>30?(e.direction=this._swipeDirection(this.x1,this.x2,this.y1,this.y2),this.swipeTimeout=setTimeout((function(){t.swipe.dispatch(e,t.element)}),0)):(this.tapTimeout=setTimeout((function(){t._preventTap||t.tap.dispatch(e,t.element),t.isDoubleTap&&(t.doubleTap.dispatch(e,t.element),t.isDoubleTap=!1)}),0),t.isDoubleTap||(t.singleTapTimeout=setTimeout((function(){t.singleTap.dispatch(e,t.element)}),250))),this.touchEnd.dispatch(e,this.element),this.preV.x=0,this.preV.y=0,this.zoom=1,this.pinchStartLen=null,this.x1=this.x2=this.y1=this.y2=null}}},{key:\"cancelAll\",value:function(){this._preventTap=!0,clearTimeout(this.singleTapTimeout),clearTimeout(this.tapTimeout),clearTimeout(this.longTapTimeout),clearTimeout(this.swipeTimeout)}},{key:\"cancel\",value:function(e){this.cancelAll(),this.touchCancel.dispatch(e,this.element)}},{key:\"_cancelLongTap\",value:function(){clearTimeout(this.longTapTimeout)}},{key:\"_cancelSingleTap\",value:function(){clearTimeout(this.singleTapTimeout)}},{key:\"_swipeDirection\",value:function(e,t,i,n){return Math.abs(e-t)>=Math.abs(i-n)?e-t>0?\"Left\":\"Right\":i-n>0?\"Up\":\"Down\"}},{key:\"on\",value:function(e,t){this[e]&&this[e].add(t)}},{key:\"off\",value:function(e,t){this[e]&&this[e].del(t)}},{key:\"destroy\",value:function(){return this.singleTapTimeout&&clearTimeout(this.singleTapTimeout),this.tapTimeout&&clearTimeout(this.tapTimeout),this.longTapTimeout&&clearTimeout(this.longTapTimeout),this.swipeTimeout&&clearTimeout(this.swipeTimeout),this.element.removeEventListener(\"touchstart\",this.start),this.element.removeEventListener(\"touchmove\",this.move),this.element.removeEventListener(\"touchend\",this.end),this.element.removeEventListener(\"touchcancel\",this.cancel),this.rotate.del(),this.touchStart.del(),this.multipointStart.del(),this.multipointEnd.del(),this.pinch.del(),this.swipe.del(),this.tap.del(),this.doubleTap.del(),this.longTap.del(),this.singleTap.del(),this.pressMove.del(),this.twoFingerPressMove.del(),this.touchMove.del(),this.touchEnd.del(),this.touchCancel.del(),this.preV=this.pinchStartLen=this.zoom=this.isDoubleTap=this.delta=this.last=this.now=this.tapTimeout=this.singleTapTimeout=this.longTapTimeout=this.swipeTimeout=this.x1=this.x2=this.y1=this.y2=this.preTapPosition=this.rotate=this.touchStart=this.multipointStart=this.multipointEnd=this.pinch=this.swipe=this.tap=this.doubleTap=this.longTap=this.singleTap=this.pressMove=this.touchMove=this.touchEnd=this.touchCancel=this.twoFingerPressMove=null,window.removeEventListener(\"scroll\",this._cancelAllHandler),null}}]),e}();function W(e){var t=function(){var e,t=document.createElement(\"fakeelement\"),i={transition:\"transitionend\",OTransition:\"oTransitionEnd\",MozTransition:\"transitionend\",WebkitTransition:\"webkitTransitionEnd\"};for(e in i)if(void 0!==t.style[e])return i[e]}(),i=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,n=c(e,\"gslide-media\")?e:e.querySelector(\".gslide-media\"),s=u(n,\".ginner-container\"),l=e.querySelector(\".gslide-description\");i>769&&(n=s),h(n,\"greset\"),v(n,\"translate3d(0, 0, 0)\"),a(t,{onElement:n,once:!0,withCallback:function(e,t){d(n,\"greset\")}}),n.style.opacity=\"\",l&&(l.style.opacity=\"\")}function B(e){if(e.events.hasOwnProperty(\"touch\"))return!1;var t,i,n,s=y(),l=s.width,o=s.height,r=!1,a=null,g=null,f=null,p=!1,m=1,x=1,b=!1,S=!1,w=null,T=null,C=null,k=null,E=0,A=0,L=!1,I=!1,O={},P={},M=0,z=0,X=document.getElementById(\"glightbox-slider\"),Y=document.querySelector(\".goverlay\"),q=new _(X,{touchStart:function(t){if(r=!0,(c(t.targetTouches[0].target,\"ginner-container\")||u(t.targetTouches[0].target,\".gslide-desc\")||\"a\"==t.targetTouches[0].target.nodeName.toLowerCase())&&(r=!1),u(t.targetTouches[0].target,\".gslide-inline\")&&!c(t.targetTouches[0].target.parentNode,\"gslide-inline\")&&(r=!1),r){if(P=t.targetTouches[0],O.pageX=t.targetTouches[0].pageX,O.pageY=t.targetTouches[0].pageY,M=t.targetTouches[0].clientX,z=t.targetTouches[0].clientY,a=e.activeSlide,g=a.querySelector(\".gslide-media\"),n=a.querySelector(\".gslide-inline\"),f=null,c(g,\"gslide-image\")&&(f=g.querySelector(\"img\")),(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)>769&&(g=a.querySelector(\".ginner-container\")),d(Y,\"greset\"),t.pageX>20&&t.pageXo){var a=O.pageX-P.pageX;if(Math.abs(a)<=13)return!1}p=!0;var h,d=s.targetTouches[0].clientX,c=s.targetTouches[0].clientY,u=M-d,m=z-c;if(Math.abs(u)>Math.abs(m)?(L=!1,I=!0):(I=!1,L=!0),t=P.pageX-O.pageX,E=100*t/l,i=P.pageY-O.pageY,A=100*i/o,L&&f&&(h=1-Math.abs(i)/o,Y.style.opacity=h,e.settings.touchFollowAxis&&(E=0)),I&&(h=1-Math.abs(t)/l,g.style.opacity=h,e.settings.touchFollowAxis&&(A=0)),!f)return v(g,\"translate3d(\".concat(E,\"%, 0, 0)\"));v(g,\"translate3d(\".concat(E,\"%, \").concat(A,\"%, 0)\"))}},touchEnd:function(){if(r){if(p=!1,S||b)return C=w,void(k=T);var t=Math.abs(parseInt(A)),i=Math.abs(parseInt(E));if(!(t>29&&f))return t<29&&i<25?(h(Y,\"greset\"),Y.style.opacity=1,W(g)):void 0;e.close()}},multipointEnd:function(){setTimeout((function(){b=!1}),50)},multipointStart:function(){b=!0,m=x||1},pinch:function(e){if(!f||p)return!1;b=!0,f.scaleX=f.scaleY=m*e.zoom;var t=m*e.zoom;if(S=!0,t<=1)return S=!1,t=1,k=null,C=null,w=null,T=null,void f.setAttribute(\"style\",\"\");t>4.5&&(t=4.5),f.style.transform=\"scale3d(\".concat(t,\", \").concat(t,\", 1)\"),x=t},pressMove:function(e){if(S&&!b){var t=P.pageX-O.pageX,i=P.pageY-O.pageY;C&&(t+=C),k&&(i+=k),w=t,T=i;var n=\"translate3d(\".concat(t,\"px, \").concat(i,\"px, 0)\");x&&(n+=\" scale3d(\".concat(x,\", \").concat(x,\", 1)\")),v(f,n)}},swipe:function(t){if(!S)if(b)b=!1;else{if(\"Left\"==t.direction){if(e.index==e.elements.length-1)return W(g);e.nextSlide()}if(\"Right\"==t.direction){if(0==e.index)return W(g);e.prevSlide()}}}});e.events.touch=q}var H=function(){function e(i,n){var s=this,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(t(this,e),this.img=i,this.slide=n,this.onclose=l,this.img.setZoomEvents)return!1;this.active=!1,this.zoomedIn=!1,this.dragging=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.img.addEventListener(\"mousedown\",(function(e){return s.dragStart(e)}),!1),this.img.addEventListener(\"mouseup\",(function(e){return s.dragEnd(e)}),!1),this.img.addEventListener(\"mousemove\",(function(e){return s.drag(e)}),!1),this.img.addEventListener(\"click\",(function(e){return s.slide.classList.contains(\"dragging-nav\")?(s.zoomOut(),!1):s.zoomedIn?void(s.zoomedIn&&!s.dragging&&s.zoomOut()):s.zoomIn()}),!1),this.img.setZoomEvents=!0}return n(e,[{key:\"zoomIn\",value:function(){var e=this.widowWidth();if(!(this.zoomedIn||e<=768)){var t=this.img;if(t.setAttribute(\"data-style\",t.getAttribute(\"style\")),t.style.maxWidth=t.naturalWidth+\"px\",t.style.maxHeight=t.naturalHeight+\"px\",t.naturalWidth>e){var i=e/2-t.naturalWidth/2;this.setTranslate(this.img.parentNode,i,0)}this.slide.classList.add(\"zoomed\"),this.zoomedIn=!0}}},{key:\"zoomOut\",value:function(){this.img.parentNode.setAttribute(\"style\",\"\"),this.img.setAttribute(\"style\",this.img.getAttribute(\"data-style\")),this.slide.classList.remove(\"zoomed\"),this.zoomedIn=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.onclose&&\"function\"==typeof this.onclose&&this.onclose()}},{key:\"dragStart\",value:function(e){e.preventDefault(),this.zoomedIn?(\"touchstart\"===e.type?(this.initialX=e.touches[0].clientX-this.xOffset,this.initialY=e.touches[0].clientY-this.yOffset):(this.initialX=e.clientX-this.xOffset,this.initialY=e.clientY-this.yOffset),e.target===this.img&&(this.active=!0,this.img.classList.add(\"dragging\"))):this.active=!1}},{key:\"dragEnd\",value:function(e){var t=this;e.preventDefault(),this.initialX=this.currentX,this.initialY=this.currentY,this.active=!1,setTimeout((function(){t.dragging=!1,t.img.isDragging=!1,t.img.classList.remove(\"dragging\")}),100)}},{key:\"drag\",value:function(e){this.active&&(e.preventDefault(),\"touchmove\"===e.type?(this.currentX=e.touches[0].clientX-this.initialX,this.currentY=e.touches[0].clientY-this.initialY):(this.currentX=e.clientX-this.initialX,this.currentY=e.clientY-this.initialY),this.xOffset=this.currentX,this.yOffset=this.currentY,this.img.isDragging=!0,this.dragging=!0,this.setTranslate(this.img,this.currentX,this.currentY))}},{key:\"onMove\",value:function(e){if(this.zoomedIn){var t=e.clientX-this.img.naturalWidth/2,i=e.clientY-this.img.naturalHeight/2;this.setTranslate(this.img,t,i)}}},{key:\"setTranslate\",value:function(e,t,i){e.style.transform=\"translate3d(\"+t+\"px, \"+i+\"px, 0)\"}},{key:\"widowWidth\",value:function(){return window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth}}]),e}(),V=function(){function e(){var i=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e);var s=n.dragEl,l=n.toleranceX,o=void 0===l?40:l,r=n.toleranceY,a=void 0===r?65:r,h=n.slide,d=void 0===h?null:h,c=n.instance,u=void 0===c?null:c;this.el=s,this.active=!1,this.dragging=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.direction=null,this.lastDirection=null,this.toleranceX=o,this.toleranceY=a,this.toleranceReached=!1,this.dragContainer=this.el,this.slide=d,this.instance=u,this.el.addEventListener(\"mousedown\",(function(e){return i.dragStart(e)}),!1),this.el.addEventListener(\"mouseup\",(function(e){return i.dragEnd(e)}),!1),this.el.addEventListener(\"mousemove\",(function(e){return i.drag(e)}),!1)}return n(e,[{key:\"dragStart\",value:function(e){if(this.slide.classList.contains(\"zoomed\"))this.active=!1;else{\"touchstart\"===e.type?(this.initialX=e.touches[0].clientX-this.xOffset,this.initialY=e.touches[0].clientY-this.yOffset):(this.initialX=e.clientX-this.xOffset,this.initialY=e.clientY-this.yOffset);var t=e.target.nodeName.toLowerCase();e.target.classList.contains(\"nodrag\")||u(e.target,\".nodrag\")||-1!==[\"input\",\"select\",\"textarea\",\"button\",\"a\"].indexOf(t)?this.active=!1:(e.preventDefault(),(e.target===this.el||\"img\"!==t&&u(e.target,\".gslide-inline\"))&&(this.active=!0,this.el.classList.add(\"dragging\"),this.dragContainer=u(e.target,\".ginner-container\")))}}},{key:\"dragEnd\",value:function(e){var t=this;e&&e.preventDefault(),this.initialX=0,this.initialY=0,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.active=!1,this.doSlideChange&&(this.instance.preventOutsideClick=!0,\"right\"==this.doSlideChange&&this.instance.prevSlide(),\"left\"==this.doSlideChange&&this.instance.nextSlide()),this.doSlideClose&&this.instance.close(),this.toleranceReached||this.setTranslate(this.dragContainer,0,0,!0),setTimeout((function(){t.instance.preventOutsideClick=!1,t.toleranceReached=!1,t.lastDirection=null,t.dragging=!1,t.el.isDragging=!1,t.el.classList.remove(\"dragging\"),t.slide.classList.remove(\"dragging-nav\"),t.dragContainer.style.transform=\"\",t.dragContainer.style.transition=\"\"}),100)}},{key:\"drag\",value:function(e){if(this.active){e.preventDefault(),this.slide.classList.add(\"dragging-nav\"),\"touchmove\"===e.type?(this.currentX=e.touches[0].clientX-this.initialX,this.currentY=e.touches[0].clientY-this.initialY):(this.currentX=e.clientX-this.initialX,this.currentY=e.clientY-this.initialY),this.xOffset=this.currentX,this.yOffset=this.currentY,this.el.isDragging=!0,this.dragging=!0,this.doSlideChange=!1,this.doSlideClose=!1;var t=Math.abs(this.currentX),i=Math.abs(this.currentY);if(t>0&&t>=Math.abs(this.currentY)&&(!this.lastDirection||\"x\"==this.lastDirection)){this.yOffset=0,this.lastDirection=\"x\",this.setTranslate(this.dragContainer,this.currentX,0);var n=this.shouldChange();if(!this.instance.settings.dragAutoSnap&&n&&(this.doSlideChange=n),this.instance.settings.dragAutoSnap&&n)return this.instance.preventOutsideClick=!0,this.toleranceReached=!0,this.active=!1,this.instance.preventOutsideClick=!0,this.dragEnd(null),\"right\"==n&&this.instance.prevSlide(),void(\"left\"==n&&this.instance.nextSlide())}if(this.toleranceY>0&&i>0&&i>=t&&(!this.lastDirection||\"y\"==this.lastDirection)){this.xOffset=0,this.lastDirection=\"y\",this.setTranslate(this.dragContainer,0,this.currentY);var s=this.shouldClose();return!this.instance.settings.dragAutoSnap&&s&&(this.doSlideClose=!0),void(this.instance.settings.dragAutoSnap&&s&&this.instance.close())}}}},{key:\"shouldChange\",value:function(){var e=!1;if(Math.abs(this.currentX)>=this.toleranceX){var t=this.currentX>0?\"right\":\"left\";(\"left\"==t&&this.slide!==this.slide.parentNode.lastChild||\"right\"==t&&this.slide!==this.slide.parentNode.firstChild)&&(e=t)}return e}},{key:\"shouldClose\",value:function(){var e=!1;return Math.abs(this.currentY)>=this.toleranceY&&(e=!0),e}},{key:\"setTranslate\",value:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.style.transition=n?\"all .2s ease\":\"\",e.style.transform=\"translate3d(\".concat(t,\"px, \").concat(i,\"px, 0)\")}}]),e}();function j(e,t,i,n){var s=e.querySelector(\".gslide-media\"),l=new Image,o=\"gSlideTitle_\"+i,r=\"gSlideDesc_\"+i;l.addEventListener(\"load\",(function(){T(n)&&n()}),!1),l.src=t.href,\"\"!=t.sizes&&\"\"!=t.srcset&&(l.sizes=t.sizes,l.srcset=t.srcset),l.alt=\"\",I(t.alt)||\"\"===t.alt||(l.alt=t.alt),\"\"!==t.title&&l.setAttribute(\"aria-labelledby\",o),\"\"!==t.description&&l.setAttribute(\"aria-describedby\",r),t.hasOwnProperty(\"_hasCustomWidth\")&&t._hasCustomWidth&&(l.style.width=t.width),t.hasOwnProperty(\"_hasCustomHeight\")&&t._hasCustomHeight&&(l.style.height=t.height),s.insertBefore(l,s.firstChild)}function F(e,t,i,n){var s=this,l=e.querySelector(\".ginner-container\"),o=\"gvideo\"+i,r=e.querySelector(\".gslide-media\"),a=this.getAllPlayers();h(l,\"gvideo-container\"),r.insertBefore(m('
'),r.firstChild);var d=e.querySelector(\".gvideo-wrapper\");S(this.settings.plyr.css,\"Plyr\");var c=t.href,u=null==t?void 0:t.videoProvider,g=!1;r.style.maxWidth=t.width,S(this.settings.plyr.js,\"Plyr\",(function(){if(!u&&c.match(/vimeo\\.com\\/([0-9]*)/)&&(u=\"vimeo\"),!u&&(c.match(/(youtube\\.com|youtube-nocookie\\.com)\\/watch\\?v=([a-zA-Z0-9\\-_]+)/)||c.match(/youtu\\.be\\/([a-zA-Z0-9\\-_]+)/)||c.match(/(youtube\\.com|youtube-nocookie\\.com)\\/embed\\/([a-zA-Z0-9\\-_]+)/))&&(u=\"youtube\"),\"local\"===u||!u){u=\"local\";var l='\")}var r=g||m('
'));h(d,\"\".concat(u,\"-video gvideo\")),d.appendChild(r),d.setAttribute(\"data-id\",o),d.setAttribute(\"data-index\",i);var v=O(s.settings.plyr,\"config\")?s.settings.plyr.config:{},f=new Plyr(\"#\"+o,v);f.on(\"ready\",(function(e){a[o]=e.detail.plyr,T(n)&&n()})),b((function(){return e.querySelector(\"iframe\")&&\"true\"==e.querySelector(\"iframe\").dataset.ready}),(function(){s.resize(e)})),f.on(\"enterfullscreen\",R),f.on(\"exitfullscreen\",R)}))}function R(e){var t=u(e.target,\".gslide-media\");\"enterfullscreen\"===e.type&&h(t,\"fullscreen\"),\"exitfullscreen\"===e.type&&d(t,\"fullscreen\")}function G(e,t,i,n){var s,l=this,o=e.querySelector(\".gslide-media\"),r=!(!O(t,\"href\")||!t.href)&&t.href.split(\"#\").pop().trim(),d=!(!O(t,\"content\")||!t.content)&&t.content;if(d&&(C(d)&&(s=m('
'.concat(d,\"
\"))),k(d))){\"none\"==d.style.display&&(d.style.display=\"block\");var c=document.createElement(\"div\");c.className=\"ginlined-content\",c.appendChild(d),s=c}if(r){var u=document.getElementById(r);if(!u)return!1;var g=u.cloneNode(!0);g.style.height=t.height,g.style.maxWidth=t.width,h(g,\"ginlined-content\"),s=g}if(!s)return console.error(\"Unable to append inline slide content\",t),!1;o.style.height=t.height,o.style.width=t.width,o.appendChild(s),this.events[\"inlineclose\"+r]=a(\"click\",{onElement:o.querySelectorAll(\".gtrigger-close\"),withCallback:function(e){e.preventDefault(),l.close()}}),T(n)&&n()}function Z(e,t,i,n){var s=e.querySelector(\".gslide-media\"),l=function(e){var t=e.url,i=e.allow,n=e.callback,s=e.appendTo,l=document.createElement(\"iframe\");return l.className=\"vimeo-video gvideo\",l.src=t,l.style.width=\"100%\",l.style.height=\"100%\",i&&l.setAttribute(\"allow\",i),l.onload=function(){l.onload=null,h(l,\"node-ready\"),T(n)&&n()},s&&s.appendChild(l),l}({url:t.href,callback:n});s.parentNode.style.maxWidth=t.width,s.parentNode.style.height=t.height,s.appendChild(l)}var U=function(){function e(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.defaults={href:\"\",sizes:\"\",srcset:\"\",title:\"\",type:\"\",videoProvider:\"\",description:\"\",alt:\"\",descPosition:\"bottom\",effect:\"\",width:\"\",height:\"\",content:!1,zoomable:!0,draggable:!0},L(i)&&(this.defaults=l(this.defaults,i))}return n(e,[{key:\"sourceType\",value:function(e){var t=e;if(null!==(e=e.toLowerCase()).match(/\\.(jpeg|jpg|jpe|gif|png|apn|webp|avif|svg)/))return\"image\";if(e.match(/(youtube\\.com|youtube-nocookie\\.com)\\/watch\\?v=([a-zA-Z0-9\\-_]+)/)||e.match(/youtu\\.be\\/([a-zA-Z0-9\\-_]+)/)||e.match(/(youtube\\.com|youtube-nocookie\\.com)\\/embed\\/([a-zA-Z0-9\\-_]+)/))return\"video\";if(e.match(/vimeo\\.com\\/([0-9]*)/))return\"video\";if(null!==e.match(/\\.(mp4|ogg|webm|mov)/))return\"video\";if(null!==e.match(/\\.(mp3|wav|wma|aac|ogg)/))return\"audio\";if(e.indexOf(\"#\")>-1&&\"\"!==t.split(\"#\").pop().trim())return\"inline\";return e.indexOf(\"goajax=true\")>-1?\"ajax\":\"external\"}},{key:\"parseConfig\",value:function(e,t){var i=this,n=l({descPosition:t.descPosition},this.defaults);if(L(e)&&!k(e)){O(e,\"type\")||(O(e,\"content\")&&e.content?e.type=\"inline\":O(e,\"href\")&&(e.type=this.sourceType(e.href)));var s=l(n,e);return this.setSize(s,t),s}var r=\"\",a=e.getAttribute(\"data-glightbox\"),h=e.nodeName.toLowerCase();if(\"a\"===h&&(r=e.href),\"img\"===h&&(r=e.src,n.alt=e.alt),n.href=r,o(n,(function(s,l){O(t,l)&&\"width\"!==l&&(n[l]=t[l]);var o=e.dataset[l];I(o)||(n[l]=i.sanitizeValue(o))})),n.content&&(n.type=\"inline\"),!n.type&&r&&(n.type=this.sourceType(r)),I(a)){if(!n.title&&\"a\"==h){var d=e.title;I(d)||\"\"===d||(n.title=d)}if(!n.title&&\"img\"==h){var c=e.alt;I(c)||\"\"===c||(n.title=c)}}else{var u=[];o(n,(function(e,t){u.push(\";\\\\s?\"+t)})),u=u.join(\"\\\\s?:|\"),\"\"!==a.trim()&&o(n,(function(e,t){var s=a,l=new RegExp(\"s?\"+t+\"s?:s?(.*?)(\"+u+\"s?:|$)\"),o=s.match(l);if(o&&o.length&&o[1]){var r=o[1].trim().replace(/;\\s*$/,\"\");n[t]=i.sanitizeValue(r)}}))}if(n.description&&\".\"===n.description.substring(0,1)){var g;try{g=document.querySelector(n.description).innerHTML}catch(e){if(!(e instanceof DOMException))throw e}g&&(n.description=g)}if(!n.description){var v=e.querySelector(\".glightbox-desc\");v&&(n.description=v.innerHTML)}return this.setSize(n,t,e),this.slideConfig=n,n}},{key:\"setSize\",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=\"video\"==e.type?this.checkSize(t.videosWidth):this.checkSize(t.width),s=this.checkSize(t.height);return e.width=O(e,\"width\")&&\"\"!==e.width?this.checkSize(e.width):n,e.height=O(e,\"height\")&&\"\"!==e.height?this.checkSize(e.height):s,i&&\"image\"==e.type&&(e._hasCustomWidth=!!i.dataset.width,e._hasCustomHeight=!!i.dataset.height),e}},{key:\"checkSize\",value:function(e){return M(e)?\"\".concat(e,\"px\"):e}},{key:\"sanitizeValue\",value:function(e){return\"true\"!==e&&\"false\"!==e?e:\"true\"===e}}]),e}(),$=function(){function e(i,n,s){t(this,e),this.element=i,this.instance=n,this.index=s}return n(e,[{key:\"setContent\",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(c(t,\"loaded\"))return!1;var n=this.instance.settings,s=this.slideConfig,l=w();T(n.beforeSlideLoad)&&n.beforeSlideLoad({index:this.index,slide:t,player:!1});var o=s.type,r=s.descPosition,a=t.querySelector(\".gslide-media\"),d=t.querySelector(\".gslide-title\"),u=t.querySelector(\".gslide-desc\"),g=t.querySelector(\".gdesc-inner\"),v=i,f=\"gSlideTitle_\"+this.index,p=\"gSlideDesc_\"+this.index;if(T(n.afterSlideLoad)&&(v=function(){T(i)&&i(),n.afterSlideLoad({index:e.index,slide:t,player:e.instance.getSlidePlayerInstance(e.index)})}),\"\"==s.title&&\"\"==s.description?g&&g.parentNode.parentNode.removeChild(g.parentNode):(d&&\"\"!==s.title?(d.id=f,d.innerHTML=s.title):d.parentNode.removeChild(d),u&&\"\"!==s.description?(u.id=p,l&&n.moreLength>0?(s.smallDescription=this.slideShortDesc(s.description,n.moreLength,n.moreText),u.innerHTML=s.smallDescription,this.descriptionEvents(u,s)):u.innerHTML=s.description):u.parentNode.removeChild(u),h(a.parentNode,\"desc-\".concat(r)),h(g.parentNode,\"description-\".concat(r))),h(a,\"gslide-\".concat(o)),h(t,\"loaded\"),\"video\"!==o){if(\"external\"!==o)return\"inline\"===o?(G.apply(this.instance,[t,s,this.index,v]),void(s.draggable&&new V({dragEl:t.querySelector(\".gslide-inline\"),toleranceX:n.dragToleranceX,toleranceY:n.dragToleranceY,slide:t,instance:this.instance}))):void(\"image\"!==o?T(v)&&v():j(t,s,this.index,(function(){var i=t.querySelector(\"img\");s.draggable&&new V({dragEl:i,toleranceX:n.dragToleranceX,toleranceY:n.dragToleranceY,slide:t,instance:e.instance}),s.zoomable&&i.naturalWidth>i.offsetWidth&&(h(i,\"zoomable\"),new H(i,t,(function(){e.instance.resize()}))),T(v)&&v()})));Z.apply(this,[t,s,this.index,v])}else F.apply(this.instance,[t,s,this.index,v])}},{key:\"slideShortDesc\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement(\"div\");n.innerHTML=e;var s=n.innerText,l=i;if((e=s.trim()).length<=t)return e;var o=e.substr(0,t-1);return l?(n=null,o+'... '+i+\"\"):o}},{key:\"descriptionEvents\",value:function(e,t){var i=this,n=e.querySelector(\".desc-more\");if(!n)return!1;a(\"click\",{onElement:n,withCallback:function(e,n){e.preventDefault();var s=document.body,l=u(n,\".gslide-desc\");if(!l)return!1;l.innerHTML=t.description,h(s,\"gdesc-open\");var o=a(\"click\",{onElement:[s,u(l,\".gslide-description\")],withCallback:function(e,n){\"a\"!==e.target.nodeName.toLowerCase()&&(d(s,\"gdesc-open\"),h(s,\"gdesc-closed\"),l.innerHTML=t.smallDescription,i.descriptionEvents(l,t),setTimeout((function(){d(s,\"gdesc-closed\")}),400),o.destroy())}})}})}},{key:\"create\",value:function(){return m(this.instance.settings.slideHTML)}},{key:\"getConfig\",value:function(){k(this.element)||this.element.hasOwnProperty(\"draggable\")||(this.element.draggable=this.instance.settings.draggable);var e=new U(this.instance.settings.slideExtraAttributes);return this.slideConfig=e.parseConfig(this.element,this.instance.settings),this.slideConfig}}]),e}(),J=w(),K=null!==w()||void 0!==document.createTouch||\"ontouchstart\"in window||\"onmsgesturechange\"in window||navigator.msMaxTouchPoints,Q=document.getElementsByTagName(\"html\")[0],ee={selector:\".glightbox\",elements:null,skin:\"clean\",theme:\"clean\",closeButton:!0,startAt:null,autoplayVideos:!0,autofocusVideos:!0,descPosition:\"bottom\",width:\"900px\",height:\"506px\",videosWidth:\"960px\",beforeSlideChange:null,afterSlideChange:null,beforeSlideLoad:null,afterSlideLoad:null,slideInserted:null,slideRemoved:null,slideExtraAttributes:null,onOpen:null,onClose:null,loop:!1,zoomable:!0,draggable:!0,dragAutoSnap:!1,dragToleranceX:40,dragToleranceY:65,preload:!0,oneSlidePerOpen:!1,touchNavigation:!0,touchFollowAxis:!0,keyboardNavigation:!0,closeOnOutsideClick:!0,plugins:!1,plyr:{css:\"https://cdn.plyr.io/3.6.12/plyr.css\",js:\"https://cdn.plyr.io/3.6.12/plyr.js\",config:{ratio:\"16:9\",fullscreen:{enabled:!0,iosNative:!0},youtube:{noCookie:!0,rel:0,showinfo:0,iv_load_policy:3},vimeo:{byline:!1,portrait:!1,title:!1,transparent:!1}}},openEffect:\"zoom\",closeEffect:\"zoom\",slideEffect:\"slide\",moreText:\"See more\",moreLength:60,cssEfects:{fade:{in:\"fadeIn\",out:\"fadeOut\"},zoom:{in:\"zoomIn\",out:\"zoomOut\"},slide:{in:\"slideInRight\",out:\"slideOutLeft\"},slideBack:{in:\"slideInLeft\",out:\"slideOutRight\"},none:{in:\"none\",out:\"none\"}},svg:{close:'',next:' ',prev:''},slideHTML:'
\\n
\\n
\\n
\\n
\\n
\\n
\\n

\\n
\\n
\\n
\\n
\\n
\\n
',lightboxHTML:'
\\n
\\n
\\n
\\n
\\n \\n \\n \\n
\\n
'},te=function(){function e(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.customOptions=i,this.settings=l(ee,i),this.effectsClasses=this.getAnimationClasses(),this.videoPlayers={},this.apiEvents=[],this.fullElementsList=!1}return n(e,[{key:\"init\",value:function(){var e=this,t=this.getSelector();t&&(this.baseEvents=a(\"click\",{onElement:t,withCallback:function(t,i){t.preventDefault(),e.open(i)}})),this.elements=this.getElements()}},{key:\"open\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(0===this.elements.length)return!1;this.activeSlide=null,this.prevActiveSlideIndex=null,this.prevActiveSlide=null;var i=M(t)?t:this.settings.startAt;if(k(e)){var n=e.getAttribute(\"data-gallery\");n&&(this.fullElementsList=this.elements,this.elements=this.getGalleryElements(this.elements,n)),I(i)&&(i=this.getElementIndex(e))<0&&(i=0)}M(i)||(i=0),this.build(),g(this.overlay,\"none\"===this.settings.openEffect?\"none\":this.settings.cssEfects.fade.in);var s=document.body,l=window.innerWidth-document.documentElement.clientWidth;if(l>0){var o=document.createElement(\"style\");o.type=\"text/css\",o.className=\"gcss-styles\",o.innerText=\".gscrollbar-fixer {margin-right: \".concat(l,\"px}\"),document.head.appendChild(o),h(s,\"gscrollbar-fixer\")}h(s,\"glightbox-open\"),h(Q,\"glightbox-open\"),J&&(h(document.body,\"glightbox-mobile\"),this.settings.slideEffect=\"slide\"),this.showSlide(i,!0),1===this.elements.length?(h(this.prevButton,\"glightbox-button-hidden\"),h(this.nextButton,\"glightbox-button-hidden\")):(d(this.prevButton,\"glightbox-button-hidden\"),d(this.nextButton,\"glightbox-button-hidden\")),this.lightboxOpen=!0,this.trigger(\"open\"),T(this.settings.onOpen)&&this.settings.onOpen(),K&&this.settings.touchNavigation&&B(this),this.settings.keyboardNavigation&&X(this)}},{key:\"openAt\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.open(null,e)}},{key:\"showSlide\",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];f(this.loader),this.index=parseInt(t);var n=this.slidesContainer.querySelector(\".current\");n&&d(n,\"current\"),this.slideAnimateOut();var s=this.slidesContainer.querySelectorAll(\".gslide\")[t];if(c(s,\"loaded\"))this.slideAnimateIn(s,i),p(this.loader);else{f(this.loader);var l=this.elements[t],o={index:this.index,slide:s,slideNode:s,slideConfig:l.slideConfig,slideIndex:this.index,trigger:l.node,player:null};this.trigger(\"slide_before_load\",o),l.instance.setContent(s,(function(){p(e.loader),e.resize(),e.slideAnimateIn(s,i),e.trigger(\"slide_after_load\",o)}))}this.slideDescription=s.querySelector(\".gslide-description\"),this.slideDescriptionContained=this.slideDescription&&c(this.slideDescription.parentNode,\"gslide-media\"),this.settings.preload&&(this.preloadSlide(t+1),this.preloadSlide(t-1)),this.updateNavigationClasses(),this.activeSlide=s}},{key:\"preloadSlide\",value:function(e){var t=this;if(e<0||e>this.elements.length-1)return!1;if(I(this.elements[e]))return!1;var i=this.slidesContainer.querySelectorAll(\".gslide\")[e];if(c(i,\"loaded\"))return!1;var n=this.elements[e],s=n.type,l={index:e,slide:i,slideNode:i,slideConfig:n.slideConfig,slideIndex:e,trigger:n.node,player:null};this.trigger(\"slide_before_load\",l),\"video\"===s||\"external\"===s?setTimeout((function(){n.instance.setContent(i,(function(){t.trigger(\"slide_after_load\",l)}))}),200):n.instance.setContent(i,(function(){t.trigger(\"slide_after_load\",l)}))}},{key:\"prevSlide\",value:function(){this.goToSlide(this.index-1)}},{key:\"nextSlide\",value:function(){this.goToSlide(this.index+1)}},{key:\"goToSlide\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.prevActiveSlide=this.activeSlide,this.prevActiveSlideIndex=this.index,!this.loop()&&(e<0||e>this.elements.length-1))return!1;e<0?e=this.elements.length-1:e>=this.elements.length&&(e=0),this.showSlide(e)}},{key:\"insertSlide\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;t<0&&(t=this.elements.length);var i=new $(e,this,t),n=i.getConfig(),s=l({},n),o=i.create(),r=this.elements.length-1;s.index=t,s.node=!1,s.instance=i,s.slideConfig=n,this.elements.splice(t,0,s);var a=null,h=null;if(this.slidesContainer){if(t>r)this.slidesContainer.appendChild(o);else{var d=this.slidesContainer.querySelectorAll(\".gslide\")[t];this.slidesContainer.insertBefore(o,d)}(this.settings.preload&&0==this.index&&0==t||this.index-1==t||this.index+1==t)&&this.preloadSlide(t),0===this.index&&0===t&&(this.index=1),this.updateNavigationClasses(),a=this.slidesContainer.querySelectorAll(\".gslide\")[t],h=this.getSlidePlayerInstance(t),s.slideNode=a}this.trigger(\"slide_inserted\",{index:t,slide:a,slideNode:a,slideConfig:n,slideIndex:t,trigger:null,player:h}),T(this.settings.slideInserted)&&this.settings.slideInserted({index:t,slide:a,player:h})}},{key:\"removeSlide\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;if(e<0||e>this.elements.length-1)return!1;var t=this.slidesContainer&&this.slidesContainer.querySelectorAll(\".gslide\")[e];t&&(this.getActiveSlideIndex()==e&&(e==this.elements.length-1?this.prevSlide():this.nextSlide()),t.parentNode.removeChild(t)),this.elements.splice(e,1),this.trigger(\"slide_removed\",e),T(this.settings.slideRemoved)&&this.settings.slideRemoved(e)}},{key:\"slideAnimateIn\",value:function(e,t){var i=this,n=e.querySelector(\".gslide-media\"),s=e.querySelector(\".gslide-description\"),l={index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,slideNode:this.prevActiveSlide,slideIndex:this.prevActiveSlide,slideConfig:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].slideConfig,trigger:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].node,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},o={index:this.index,slide:this.activeSlide,slideNode:this.activeSlide,slideConfig:this.elements[this.index].slideConfig,slideIndex:this.index,trigger:this.elements[this.index].node,player:this.getSlidePlayerInstance(this.index)};if(n.offsetWidth>0&&s&&(p(s),s.style.display=\"\"),d(e,this.effectsClasses),t)g(e,this.settings.cssEfects[this.settings.openEffect].in,(function(){i.settings.autoplayVideos&&i.slidePlayerPlay(e),i.trigger(\"slide_changed\",{prev:l,current:o}),T(i.settings.afterSlideChange)&&i.settings.afterSlideChange.apply(i,[l,o])}));else{var r=this.settings.slideEffect,a=\"none\"!==r?this.settings.cssEfects[r].in:r;this.prevActiveSlideIndex>this.index&&\"slide\"==this.settings.slideEffect&&(a=this.settings.cssEfects.slideBack.in),g(e,a,(function(){i.settings.autoplayVideos&&i.slidePlayerPlay(e),i.trigger(\"slide_changed\",{prev:l,current:o}),T(i.settings.afterSlideChange)&&i.settings.afterSlideChange.apply(i,[l,o])}))}setTimeout((function(){i.resize(e)}),100),h(e,\"current\")}},{key:\"slideAnimateOut\",value:function(){if(!this.prevActiveSlide)return!1;var e=this.prevActiveSlide;d(e,this.effectsClasses),h(e,\"prev\");var t=this.settings.slideEffect,i=\"none\"!==t?this.settings.cssEfects[t].out:t;this.slidePlayerPause(e),this.trigger(\"slide_before_change\",{prev:{index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,slideNode:this.prevActiveSlide,slideIndex:this.prevActiveSlideIndex,slideConfig:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].slideConfig,trigger:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].node,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},current:{index:this.index,slide:this.activeSlide,slideNode:this.activeSlide,slideIndex:this.index,slideConfig:this.elements[this.index].slideConfig,trigger:this.elements[this.index].node,player:this.getSlidePlayerInstance(this.index)}}),T(this.settings.beforeSlideChange)&&this.settings.beforeSlideChange.apply(this,[{index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},{index:this.index,slide:this.activeSlide,player:this.getSlidePlayerInstance(this.index)}]),this.prevActiveSlideIndex>this.index&&\"slide\"==this.settings.slideEffect&&(i=this.settings.cssEfects.slideBack.out),g(e,i,(function(){var t=e.querySelector(\".ginner-container\"),i=e.querySelector(\".gslide-media\"),n=e.querySelector(\".gslide-description\");t.style.transform=\"\",i.style.transform=\"\",d(i,\"greset\"),i.style.opacity=\"\",n&&(n.style.opacity=\"\"),d(e,\"prev\")}))}},{key:\"getAllPlayers\",value:function(){return this.videoPlayers}},{key:\"getSlidePlayerInstance\",value:function(e){var t=\"gvideo\"+e,i=this.getAllPlayers();return!(!O(i,t)||!i[t])&&i[t]}},{key:\"stopSlideVideo\",value:function(e){if(k(e)){var t=e.querySelector(\".gvideo-wrapper\");t&&(e=t.getAttribute(\"data-index\"))}console.log(\"stopSlideVideo is deprecated, use slidePlayerPause\");var i=this.getSlidePlayerInstance(e);i&&i.playing&&i.pause()}},{key:\"slidePlayerPause\",value:function(e){if(k(e)){var t=e.querySelector(\".gvideo-wrapper\");t&&(e=t.getAttribute(\"data-index\"))}var i=this.getSlidePlayerInstance(e);i&&i.playing&&i.pause()}},{key:\"playSlideVideo\",value:function(e){if(k(e)){var t=e.querySelector(\".gvideo-wrapper\");t&&(e=t.getAttribute(\"data-index\"))}console.log(\"playSlideVideo is deprecated, use slidePlayerPlay\");var i=this.getSlidePlayerInstance(e);i&&!i.playing&&i.play()}},{key:\"slidePlayerPlay\",value:function(e){var t;if(!J||null!==(t=this.settings.plyr.config)&&void 0!==t&&t.muted){if(k(e)){var i=e.querySelector(\".gvideo-wrapper\");i&&(e=i.getAttribute(\"data-index\"))}var n=this.getSlidePlayerInstance(e);n&&!n.playing&&(n.play(),this.settings.autofocusVideos&&n.elements.container.focus())}}},{key:\"setElements\",value:function(e){var t=this;this.settings.elements=!1;var i=[];e&&e.length&&o(e,(function(e,n){var s=new $(e,t,n),o=s.getConfig(),r=l({},o);r.slideConfig=o,r.instance=s,r.index=n,i.push(r)})),this.elements=i,this.lightboxOpen&&(this.slidesContainer.innerHTML=\"\",this.elements.length&&(o(this.elements,(function(){var e=m(t.settings.slideHTML);t.slidesContainer.appendChild(e)})),this.showSlide(0,!0)))}},{key:\"getElementIndex\",value:function(e){var t=!1;return o(this.elements,(function(i,n){if(O(i,\"node\")&&i.node==e)return t=n,!0})),t}},{key:\"getElements\",value:function(){var e=this,t=[];this.elements=this.elements?this.elements:[],!I(this.settings.elements)&&E(this.settings.elements)&&this.settings.elements.length&&o(this.settings.elements,(function(i,n){var s=new $(i,e,n),o=s.getConfig(),r=l({},o);r.node=!1,r.index=n,r.instance=s,r.slideConfig=o,t.push(r)}));var i=!1;return this.getSelector()&&(i=document.querySelectorAll(this.getSelector())),i?(o(i,(function(i,n){var s=new $(i,e,n),o=s.getConfig(),r=l({},o);r.node=i,r.index=n,r.instance=s,r.slideConfig=o,r.gallery=i.getAttribute(\"data-gallery\"),t.push(r)})),t):t}},{key:\"getGalleryElements\",value:function(e,t){return e.filter((function(e){return e.gallery==t}))}},{key:\"getSelector\",value:function(){return!this.settings.elements&&(this.settings.selector&&\"data-\"==this.settings.selector.substring(0,5)?\"*[\".concat(this.settings.selector,\"]\"):this.settings.selector)}},{key:\"getActiveSlide\",value:function(){return this.slidesContainer.querySelectorAll(\".gslide\")[this.index]}},{key:\"getActiveSlideIndex\",value:function(){return this.index}},{key:\"getAnimationClasses\",value:function(){var e=[];for(var t in this.settings.cssEfects)if(this.settings.cssEfects.hasOwnProperty(t)){var i=this.settings.cssEfects[t];e.push(\"g\".concat(i.in)),e.push(\"g\".concat(i.out))}return e.join(\" \")}},{key:\"build\",value:function(){var e=this;if(this.built)return!1;var t=document.body.childNodes,i=[];o(t,(function(e){e.parentNode==document.body&&\"#\"!==e.nodeName.charAt(0)&&e.hasAttribute&&!e.hasAttribute(\"aria-hidden\")&&(i.push(e),e.setAttribute(\"aria-hidden\",\"true\"))}));var n=O(this.settings.svg,\"next\")?this.settings.svg.next:\"\",s=O(this.settings.svg,\"prev\")?this.settings.svg.prev:\"\",l=O(this.settings.svg,\"close\")?this.settings.svg.close:\"\",r=this.settings.lightboxHTML;r=m(r=(r=(r=r.replace(/{nextSVG}/g,n)).replace(/{prevSVG}/g,s)).replace(/{closeSVG}/g,l)),document.body.appendChild(r);var d=document.getElementById(\"glightbox-body\");this.modal=d;var g=d.querySelector(\".gclose\");this.prevButton=d.querySelector(\".gprev\"),this.nextButton=d.querySelector(\".gnext\"),this.overlay=d.querySelector(\".goverlay\"),this.loader=d.querySelector(\".gloader\"),this.slidesContainer=document.getElementById(\"glightbox-slider\"),this.bodyHiddenChildElms=i,this.events={},h(this.modal,\"glightbox-\"+this.settings.skin),this.settings.closeButton&&g&&(this.events.close=a(\"click\",{onElement:g,withCallback:function(t,i){t.preventDefault(),e.close()}})),g&&!this.settings.closeButton&&g.parentNode.removeChild(g),this.nextButton&&(this.events.next=a(\"click\",{onElement:this.nextButton,withCallback:function(t,i){t.preventDefault(),e.nextSlide()}})),this.prevButton&&(this.events.prev=a(\"click\",{onElement:this.prevButton,withCallback:function(t,i){t.preventDefault(),e.prevSlide()}})),this.settings.closeOnOutsideClick&&(this.events.outClose=a(\"click\",{onElement:d,withCallback:function(t,i){e.preventOutsideClick||c(document.body,\"glightbox-mobile\")||u(t.target,\".ginner-container\")||u(t.target,\".gbtn\")||c(t.target,\"gnext\")||c(t.target,\"gprev\")||e.close()}})),o(this.elements,(function(t,i){e.slidesContainer.appendChild(t.instance.create()),t.slideNode=e.slidesContainer.querySelectorAll(\".gslide\")[i]})),K&&h(document.body,\"glightbox-touch\"),this.events.resize=a(\"resize\",{onElement:window,withCallback:function(){e.resize()}}),this.built=!0}},{key:\"resize\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if((e=e||this.activeSlide)&&!c(e,\"zoomed\")){var t=y(),i=e.querySelector(\".gvideo-wrapper\"),n=e.querySelector(\".gslide-image\"),s=this.slideDescription,l=t.width,o=t.height;if(l<=768?h(document.body,\"glightbox-mobile\"):d(document.body,\"glightbox-mobile\"),i||n){var r=!1;if(s&&(c(s,\"description-bottom\")||c(s,\"description-top\"))&&!c(s,\"gabsolute\")&&(r=!0),n)if(l<=768)n.querySelector(\"img\");else if(r){var a=s.offsetHeight,u=n.querySelector(\"img\");u.setAttribute(\"style\",\"max-height: calc(100vh - \".concat(a,\"px)\")),s.setAttribute(\"style\",\"max-width: \".concat(u.offsetWidth,\"px;\"))}if(i){var g=O(this.settings.plyr.config,\"ratio\")?this.settings.plyr.config.ratio:\"\";if(!g){var v=i.clientWidth,f=i.clientHeight,p=v/f;g=\"\".concat(v/p,\":\").concat(f/p)}var m=g.split(\":\"),x=this.settings.videosWidth,b=this.settings.videosWidth,S=(b=M(x)||-1!==x.indexOf(\"px\")?parseInt(x):-1!==x.indexOf(\"vw\")?l*parseInt(x)/100:-1!==x.indexOf(\"vh\")?o*parseInt(x)/100:-1!==x.indexOf(\"%\")?l*parseInt(x)/100:parseInt(i.clientWidth))/(parseInt(m[0])/parseInt(m[1]));if(S=Math.floor(S),r&&(o-=s.offsetHeight),b>l||S>o||ob){var w=i.offsetWidth,T=i.offsetHeight,C=o/T,k={width:w*C,height:T*C};i.parentNode.setAttribute(\"style\",\"max-width: \".concat(k.width,\"px\")),r&&s.setAttribute(\"style\",\"max-width: \".concat(k.width,\"px;\"))}else i.parentNode.style.maxWidth=\"\".concat(x),r&&s.setAttribute(\"style\",\"max-width: \".concat(x,\";\"))}}}}},{key:\"reload\",value:function(){this.init()}},{key:\"updateNavigationClasses\",value:function(){var e=this.loop();d(this.nextButton,\"disabled\"),d(this.prevButton,\"disabled\"),0==this.index&&this.elements.length-1==0?(h(this.prevButton,\"disabled\"),h(this.nextButton,\"disabled\")):0!==this.index||e?this.index!==this.elements.length-1||e||h(this.nextButton,\"disabled\"):h(this.prevButton,\"disabled\")}},{key:\"loop\",value:function(){var e=O(this.settings,\"loopAtEnd\")?this.settings.loopAtEnd:null;return e=O(this.settings,\"loop\")?this.settings.loop:e,e}},{key:\"close\",value:function(){var e=this;if(!this.lightboxOpen){if(this.events){for(var t in this.events)this.events.hasOwnProperty(t)&&this.events[t].destroy();this.events=null}return!1}if(this.closing)return!1;this.closing=!0,this.slidePlayerPause(this.activeSlide),this.fullElementsList&&(this.elements=this.fullElementsList),this.bodyHiddenChildElms.length&&o(this.bodyHiddenChildElms,(function(e){e.removeAttribute(\"aria-hidden\")})),h(this.modal,\"glightbox-closing\"),g(this.overlay,\"none\"==this.settings.openEffect?\"none\":this.settings.cssEfects.fade.out),g(this.activeSlide,this.settings.cssEfects[this.settings.closeEffect].out,(function(){if(e.activeSlide=null,e.prevActiveSlideIndex=null,e.prevActiveSlide=null,e.built=!1,e.events){for(var t in e.events)e.events.hasOwnProperty(t)&&e.events[t].destroy();e.events=null}var i=document.body;d(Q,\"glightbox-open\"),d(i,\"glightbox-open touching gdesc-open glightbox-touch glightbox-mobile gscrollbar-fixer\"),e.modal.parentNode.removeChild(e.modal),e.trigger(\"close\"),T(e.settings.onClose)&&e.settings.onClose();var n=document.querySelector(\".gcss-styles\");n&&n.parentNode.removeChild(n),e.lightboxOpen=!1,e.closing=null}))}},{key:\"destroy\",value:function(){this.close(),this.clearAllEvents(),this.baseEvents&&this.baseEvents.destroy()}},{key:\"on\",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||!T(t))throw new TypeError(\"Event name and callback must be defined\");this.apiEvents.push({evt:e,once:i,callback:t})}},{key:\"once\",value:function(e,t){this.on(e,t,!0)}},{key:\"trigger\",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=[];o(this.apiEvents,(function(t,s){var l=t.evt,o=t.once,r=t.callback;l==e&&(r(i),o&&n.push(s))})),n.length&&o(n,(function(e){return t.apiEvents.splice(e,1)}))}},{key:\"clearAllEvents\",value:function(){this.apiEvents.splice(0,this.apiEvents.length)}},{key:\"version\",value:function(){return\"3.1.0\"}}]),e}();return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new te(e);return t.init(),t}}));","// 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\tid: moduleId,\n\t\tloaded: false,\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// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\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__.hmd = (module) => {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: () => {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n/*!\n * GSAP 3.11.5\n * https://greensock.com\n *\n * @license Copyright 2008-2023, GreenSock. All rights reserved.\n * Subject to the terms at https://greensock.com/standard-license or for\n * Club GreenSock members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nvar _config = {\n autoSleep: 120,\n force3D: \"auto\",\n nullTargetWarn: 1,\n units: {\n lineHeight: \"\"\n }\n},\n _defaults = {\n duration: .5,\n overwrite: false,\n delay: 0\n},\n _suppressOverwrites,\n _reverting,\n _context,\n _bigNum = 1e8,\n _tinyNum = 1 / _bigNum,\n _2PI = Math.PI * 2,\n _HALF_PI = _2PI / 4,\n _gsID = 0,\n _sqrt = Math.sqrt,\n _cos = Math.cos,\n _sin = Math.sin,\n _isString = function _isString(value) {\n return typeof value === \"string\";\n},\n _isFunction = function _isFunction(value) {\n return typeof value === \"function\";\n},\n _isNumber = function _isNumber(value) {\n return typeof value === \"number\";\n},\n _isUndefined = function _isUndefined(value) {\n return typeof value === \"undefined\";\n},\n _isObject = function _isObject(value) {\n return typeof value === \"object\";\n},\n _isNotFalse = function _isNotFalse(value) {\n return value !== false;\n},\n _windowExists = function _windowExists() {\n return typeof window !== \"undefined\";\n},\n _isFuncOrString = function _isFuncOrString(value) {\n return _isFunction(value) || _isString(value);\n},\n _isTypedArray = typeof ArrayBuffer === \"function\" && ArrayBuffer.isView || function () {},\n // note: IE10 has ArrayBuffer, but NOT ArrayBuffer.isView().\n_isArray = Array.isArray,\n _strictNumExp = /(?:-?\\.?\\d|\\.)+/gi,\n //only numbers (including negatives and decimals) but NOT relative values.\n_numExp = /[-+=.]*\\d+[.e\\-+]*\\d*[e\\-+]*\\d*/g,\n //finds any numbers, including ones that start with += or -=, negative numbers, and ones in scientific notation like 1e-8.\n_numWithUnitExp = /[-+=.]*\\d+[.e-]*\\d*[a-z%]*/g,\n _complexStringNumExp = /[-+=.]*\\d+\\.?\\d*(?:e-|e\\+)?\\d*/gi,\n //duplicate so that while we're looping through matches from exec(), it doesn't contaminate the lastIndex of _numExp which we use to search for colors too.\n_relExp = /[+-]=-?[.\\d]+/,\n _delimitedValueExp = /[^,'\"\\[\\]\\s]+/gi,\n // previously /[#\\-+.]*\\b[a-z\\d\\-=+%.]+/gi but didn't catch special characters.\n_unitExp = /^[+\\-=e\\s\\d]*\\d+[.\\d]*([a-z]*|%)\\s*$/i,\n _globalTimeline,\n _win,\n _coreInitted,\n _doc,\n _globals = {},\n _installScope = {},\n _coreReady,\n _install = function _install(scope) {\n return (_installScope = _merge(scope, _globals)) && gsap;\n},\n _missingPlugin = function _missingPlugin(property, value) {\n return console.warn(\"Invalid property\", property, \"set to\", value, \"Missing plugin? gsap.registerPlugin()\");\n},\n _warn = function _warn(message, suppress) {\n return !suppress && console.warn(message);\n},\n _addGlobal = function _addGlobal(name, obj) {\n return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals;\n},\n _emptyFunc = function _emptyFunc() {\n return 0;\n},\n _startAtRevertConfig = {\n suppressEvents: true,\n isStart: true,\n kill: false\n},\n _revertConfigNoKill = {\n suppressEvents: true,\n kill: false\n},\n _revertConfig = {\n suppressEvents: true\n},\n _reservedProps = {},\n _lazyTweens = [],\n _lazyLookup = {},\n _lastRenderedFrame,\n _plugins = {},\n _effects = {},\n _nextGCFrame = 30,\n _harnessPlugins = [],\n _callbackNames = \"\",\n _harness = function _harness(targets) {\n var target = targets[0],\n harnessPlugin,\n i;\n _isObject(target) || _isFunction(target) || (targets = [targets]);\n\n if (!(harnessPlugin = (target._gsap || {}).harness)) {\n // find the first target with a harness. We assume targets passed into an animation will be of similar type, meaning the same kind of harness can be used for them all (performance optimization)\n i = _harnessPlugins.length;\n\n while (i-- && !_harnessPlugins[i].targetTest(target)) {}\n\n harnessPlugin = _harnessPlugins[i];\n }\n\n i = targets.length;\n\n while (i--) {\n targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1);\n }\n\n return targets;\n},\n _getCache = function _getCache(target) {\n return target._gsap || _harness(toArray(target))[0]._gsap;\n},\n _getProperty = function _getProperty(target, property, v) {\n return (v = target[property]) && _isFunction(v) ? target[property]() : _isUndefined(v) && target.getAttribute && target.getAttribute(property) || v;\n},\n _forEachName = function _forEachName(names, func) {\n return (names = names.split(\",\")).forEach(func) || names;\n},\n //split a comma-delimited list of names into an array, then run a forEach() function and return the split array (this is just a way to consolidate/shorten some code).\n_round = function _round(value) {\n return Math.round(value * 100000) / 100000 || 0;\n},\n _roundPrecise = function _roundPrecise(value) {\n return Math.round(value * 10000000) / 10000000 || 0;\n},\n // increased precision mostly for timing values.\n_parseRelative = function _parseRelative(start, value) {\n var operator = value.charAt(0),\n end = parseFloat(value.substr(2));\n start = parseFloat(start);\n return operator === \"+\" ? start + end : operator === \"-\" ? start - end : operator === \"*\" ? start * end : start / end;\n},\n _arrayContainsAny = function _arrayContainsAny(toSearch, toFind) {\n //searches one array to find matches for any of the items in the toFind array. As soon as one is found, it returns true. It does NOT return all the matches; it's simply a boolean search.\n var l = toFind.length,\n i = 0;\n\n for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l;) {}\n\n return i < l;\n},\n _lazyRender = function _lazyRender() {\n var l = _lazyTweens.length,\n a = _lazyTweens.slice(0),\n i,\n tween;\n\n _lazyLookup = {};\n _lazyTweens.length = 0;\n\n for (i = 0; i < l; i++) {\n tween = a[i];\n tween && tween._lazy && (tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0);\n }\n},\n _lazySafeRender = function _lazySafeRender(animation, time, suppressEvents, force) {\n _lazyTweens.length && !_reverting && _lazyRender();\n animation.render(time, suppressEvents, force || _reverting && time < 0 && (animation._initted || animation._startAt));\n _lazyTweens.length && !_reverting && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n},\n _numericIfPossible = function _numericIfPossible(value) {\n var n = parseFloat(value);\n return (n || n === 0) && (value + \"\").match(_delimitedValueExp).length < 2 ? n : _isString(value) ? value.trim() : value;\n},\n _passThrough = function _passThrough(p) {\n return p;\n},\n _setDefaults = function _setDefaults(obj, defaults) {\n for (var p in defaults) {\n p in obj || (obj[p] = defaults[p]);\n }\n\n return obj;\n},\n _setKeyframeDefaults = function _setKeyframeDefaults(excludeDuration) {\n return function (obj, defaults) {\n for (var p in defaults) {\n p in obj || p === \"duration\" && excludeDuration || p === \"ease\" || (obj[p] = defaults[p]);\n }\n };\n},\n _merge = function _merge(base, toMerge) {\n for (var p in toMerge) {\n base[p] = toMerge[p];\n }\n\n return base;\n},\n _mergeDeep = function _mergeDeep(base, toMerge) {\n for (var p in toMerge) {\n p !== \"__proto__\" && p !== \"constructor\" && p !== \"prototype\" && (base[p] = _isObject(toMerge[p]) ? _mergeDeep(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p]);\n }\n\n return base;\n},\n _copyExcluding = function _copyExcluding(obj, excluding) {\n var copy = {},\n p;\n\n for (p in obj) {\n p in excluding || (copy[p] = obj[p]);\n }\n\n return copy;\n},\n _inheritDefaults = function _inheritDefaults(vars) {\n var parent = vars.parent || _globalTimeline,\n func = vars.keyframes ? _setKeyframeDefaults(_isArray(vars.keyframes)) : _setDefaults;\n\n if (_isNotFalse(vars.inherit)) {\n while (parent) {\n func(vars, parent.vars.defaults);\n parent = parent.parent || parent._dp;\n }\n }\n\n return vars;\n},\n _arraysMatch = function _arraysMatch(a1, a2) {\n var i = a1.length,\n match = i === a2.length;\n\n while (match && i-- && a1[i] === a2[i]) {}\n\n return i < 0;\n},\n _addLinkedListItem = function _addLinkedListItem(parent, child, firstProp, lastProp, sortBy) {\n if (firstProp === void 0) {\n firstProp = \"_first\";\n }\n\n if (lastProp === void 0) {\n lastProp = \"_last\";\n }\n\n var prev = parent[lastProp],\n t;\n\n if (sortBy) {\n t = child[sortBy];\n\n while (prev && prev[sortBy] > t) {\n prev = prev._prev;\n }\n }\n\n if (prev) {\n child._next = prev._next;\n prev._next = child;\n } else {\n child._next = parent[firstProp];\n parent[firstProp] = child;\n }\n\n if (child._next) {\n child._next._prev = child;\n } else {\n parent[lastProp] = child;\n }\n\n child._prev = prev;\n child.parent = child._dp = parent;\n return child;\n},\n _removeLinkedListItem = function _removeLinkedListItem(parent, child, firstProp, lastProp) {\n if (firstProp === void 0) {\n firstProp = \"_first\";\n }\n\n if (lastProp === void 0) {\n lastProp = \"_last\";\n }\n\n var prev = child._prev,\n next = child._next;\n\n if (prev) {\n prev._next = next;\n } else if (parent[firstProp] === child) {\n parent[firstProp] = next;\n }\n\n if (next) {\n next._prev = prev;\n } else if (parent[lastProp] === child) {\n parent[lastProp] = prev;\n }\n\n child._next = child._prev = child.parent = null; // don't delete the _dp just so we can revert if necessary. But parent should be null to indicate the item isn't in a linked list.\n},\n _removeFromParent = function _removeFromParent(child, onlyIfParentHasAutoRemove) {\n child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren) && child.parent.remove(child);\n child._act = 0;\n},\n _uncache = function _uncache(animation, child) {\n if (animation && (!child || child._end > animation._dur || child._start < 0)) {\n // performance optimization: if a child animation is passed in we should only uncache if that child EXTENDS the animation (its end time is beyond the end)\n var a = animation;\n\n while (a) {\n a._dirty = 1;\n a = a.parent;\n }\n }\n\n return animation;\n},\n _recacheAncestors = function _recacheAncestors(animation) {\n var parent = animation.parent;\n\n while (parent && parent.parent) {\n //sometimes we must force a re-sort of all children and update the duration/totalDuration of all ancestor timelines immediately in case, for example, in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though.\n parent._dirty = 1;\n parent.totalDuration();\n parent = parent.parent;\n }\n\n return animation;\n},\n _rewindStartAt = function _rewindStartAt(tween, totalTime, suppressEvents, force) {\n return tween._startAt && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween.vars.immediateRender && !tween.vars.autoRevert || tween._startAt.render(totalTime, true, force));\n},\n _hasNoPausedAncestors = function _hasNoPausedAncestors(animation) {\n return !animation || animation._ts && _hasNoPausedAncestors(animation.parent);\n},\n _elapsedCycleDuration = function _elapsedCycleDuration(animation) {\n return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0;\n},\n // feed in the totalTime and cycleDuration and it'll return the cycle (iteration minus 1) and if the playhead is exactly at the very END, it will NOT bump up to the next cycle.\n_animationCycle = function _animationCycle(tTime, cycleDuration) {\n var whole = Math.floor(tTime /= cycleDuration);\n return tTime && whole === tTime ? whole - 1 : whole;\n},\n _parentToChildTotalTime = function _parentToChildTotalTime(parentTime, child) {\n return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur);\n},\n _setEnd = function _setEnd(animation) {\n return animation._end = _roundPrecise(animation._start + (animation._tDur / Math.abs(animation._ts || animation._rts || _tinyNum) || 0));\n},\n _alignPlayhead = function _alignPlayhead(animation, totalTime) {\n // adjusts the animation's _start and _end according to the provided totalTime (only if the parent's smoothChildTiming is true and the animation isn't paused). It doesn't do any rendering or forcing things back into parent timelines, etc. - that's what totalTime() is for.\n var parent = animation._dp;\n\n if (parent && parent.smoothChildTiming && animation._ts) {\n animation._start = _roundPrecise(parent._time - (animation._ts > 0 ? totalTime / animation._ts : ((animation._dirty ? animation.totalDuration() : animation._tDur) - totalTime) / -animation._ts));\n\n _setEnd(animation);\n\n parent._dirty || _uncache(parent, animation); //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n }\n\n return animation;\n},\n\n/*\n_totalTimeToTime = (clampedTotalTime, duration, repeat, repeatDelay, yoyo) => {\n\tlet cycleDuration = duration + repeatDelay,\n\t\ttime = _round(clampedTotalTime % cycleDuration);\n\tif (time > duration) {\n\t\ttime = duration;\n\t}\n\treturn (yoyo && (~~(clampedTotalTime / cycleDuration) & 1)) ? duration - time : time;\n},\n*/\n_postAddChecks = function _postAddChecks(timeline, child) {\n var t;\n\n if (child._time || child._initted && !child._dur) {\n //in case, for example, the _start is moved on a tween that has already rendered. Imagine it's at its end state, then the startTime is moved WAY later (after the end of this timeline), it should render at its beginning.\n t = _parentToChildTotalTime(timeline.rawTime(), child);\n\n if (!child._dur || _clamp(0, child.totalDuration(), t) - child._tTime > _tinyNum) {\n child.render(t, true);\n }\n } //if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate.\n\n\n if (_uncache(timeline, child)._dp && timeline._initted && timeline._time >= timeline._dur && timeline._ts) {\n //in case any of the ancestors had completed but should now be enabled...\n if (timeline._dur < timeline.duration()) {\n t = timeline;\n\n while (t._dp) {\n t.rawTime() >= 0 && t.totalTime(t._tTime); //moves the timeline (shifts its startTime) if necessary, and also enables it. If it's currently zero, though, it may not be scheduled to render until later so there's no need to force it to align with the current playhead position. Only move to catch up with the playhead.\n\n t = t._dp;\n }\n }\n\n timeline._zTime = -_tinyNum; // helps ensure that the next render() will be forced (crossingStart = true in render()), even if the duration hasn't changed (we're adding a child which would need to get rendered). Definitely an edge case. Note: we MUST do this AFTER the loop above where the totalTime() might trigger a render() because this _addToTimeline() method gets called from the Animation constructor, BEFORE tweens even record their targets, etc. so we wouldn't want things to get triggered in the wrong order.\n }\n},\n _addToTimeline = function _addToTimeline(timeline, child, position, skipChecks) {\n child.parent && _removeFromParent(child);\n child._start = _roundPrecise((_isNumber(position) ? position : position || timeline !== _globalTimeline ? _parsePosition(timeline, position, child) : timeline._time) + child._delay);\n child._end = _roundPrecise(child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0));\n\n _addLinkedListItem(timeline, child, \"_first\", \"_last\", timeline._sort ? \"_start\" : 0);\n\n _isFromOrFromStart(child) || (timeline._recent = child);\n skipChecks || _postAddChecks(timeline, child);\n timeline._ts < 0 && _alignPlayhead(timeline, timeline._tTime); // if the timeline is reversed and the new child makes it longer, we may need to adjust the parent's _start (push it back)\n\n return timeline;\n},\n _scrollTrigger = function _scrollTrigger(animation, trigger) {\n return (_globals.ScrollTrigger || _missingPlugin(\"scrollTrigger\", trigger)) && _globals.ScrollTrigger.create(trigger, animation);\n},\n _attemptInitTween = function _attemptInitTween(tween, time, force, suppressEvents, tTime) {\n _initTween(tween, time, tTime);\n\n if (!tween._initted) {\n return 1;\n }\n\n if (!force && tween._pt && !_reverting && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) {\n _lazyTweens.push(tween);\n\n tween._lazy = [tTime, suppressEvents];\n return 1;\n }\n},\n _parentPlayheadIsBeforeStart = function _parentPlayheadIsBeforeStart(_ref) {\n var parent = _ref.parent;\n return parent && parent._ts && parent._initted && !parent._lock && (parent.rawTime() < 0 || _parentPlayheadIsBeforeStart(parent));\n},\n // check parent's _lock because when a timeline repeats/yoyos and does its artificial wrapping, we shouldn't force the ratio back to 0\n_isFromOrFromStart = function _isFromOrFromStart(_ref2) {\n var data = _ref2.data;\n return data === \"isFromStart\" || data === \"isStart\";\n},\n _renderZeroDurationTween = function _renderZeroDurationTween(tween, totalTime, suppressEvents, force) {\n var prevRatio = tween.ratio,\n ratio = totalTime < 0 || !totalTime && (!tween._start && _parentPlayheadIsBeforeStart(tween) && !(!tween._initted && _isFromOrFromStart(tween)) || (tween._ts < 0 || tween._dp._ts < 0) && !_isFromOrFromStart(tween)) ? 0 : 1,\n // if the tween or its parent is reversed and the totalTime is 0, we should go to a ratio of 0. Edge case: if a from() or fromTo() stagger tween is placed later in a timeline, the \"startAt\" zero-duration tween could initially render at a time when the parent timeline's playhead is technically BEFORE where this tween is, so make sure that any \"from\" and \"fromTo\" startAt tweens are rendered the first time at a ratio of 1.\n repeatDelay = tween._rDelay,\n tTime = 0,\n pt,\n iteration,\n prevIteration;\n\n if (repeatDelay && tween._repeat) {\n // in case there's a zero-duration tween that has a repeat with a repeatDelay\n tTime = _clamp(0, tween._tDur, totalTime);\n iteration = _animationCycle(tTime, repeatDelay);\n tween._yoyo && iteration & 1 && (ratio = 1 - ratio);\n\n if (iteration !== _animationCycle(tween._tTime, repeatDelay)) {\n // if iteration changed\n prevRatio = 1 - ratio;\n tween.vars.repeatRefresh && tween._initted && tween.invalidate();\n }\n }\n\n if (ratio !== prevRatio || _reverting || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) {\n if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents, tTime)) {\n // if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n return;\n }\n\n prevIteration = tween._zTime;\n tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0); // when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.\n\n suppressEvents || (suppressEvents = totalTime && !prevIteration); // if it was rendered previously at exactly 0 (_zTime) and now the playhead is moving away, DON'T fire callbacks otherwise they'll seem like duplicates.\n\n tween.ratio = ratio;\n tween._from && (ratio = 1 - ratio);\n tween._time = 0;\n tween._tTime = tTime;\n pt = tween._pt;\n\n while (pt) {\n pt.r(ratio, pt.d);\n pt = pt._next;\n }\n\n totalTime < 0 && _rewindStartAt(tween, totalTime, suppressEvents, true);\n tween._onUpdate && !suppressEvents && _callback(tween, \"onUpdate\");\n tTime && tween._repeat && !suppressEvents && tween.parent && _callback(tween, \"onRepeat\");\n\n if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) {\n ratio && _removeFromParent(tween, 1);\n\n if (!suppressEvents && !_reverting) {\n _callback(tween, ratio ? \"onComplete\" : \"onReverseComplete\", true);\n\n tween._prom && tween._prom();\n }\n }\n } else if (!tween._zTime) {\n tween._zTime = totalTime;\n }\n},\n _findNextPauseTween = function _findNextPauseTween(animation, prevTime, time) {\n var child;\n\n if (time > prevTime) {\n child = animation._first;\n\n while (child && child._start <= time) {\n if (child.data === \"isPause\" && child._start > prevTime) {\n return child;\n }\n\n child = child._next;\n }\n } else {\n child = animation._last;\n\n while (child && child._start >= time) {\n if (child.data === \"isPause\" && child._start < prevTime) {\n return child;\n }\n\n child = child._prev;\n }\n }\n},\n _setDuration = function _setDuration(animation, duration, skipUncache, leavePlayhead) {\n var repeat = animation._repeat,\n dur = _roundPrecise(duration) || 0,\n totalProgress = animation._tTime / animation._tDur;\n totalProgress && !leavePlayhead && (animation._time *= dur / animation._dur);\n animation._dur = dur;\n animation._tDur = !repeat ? dur : repeat < 0 ? 1e10 : _roundPrecise(dur * (repeat + 1) + animation._rDelay * repeat);\n totalProgress > 0 && !leavePlayhead && _alignPlayhead(animation, animation._tTime = animation._tDur * totalProgress);\n animation.parent && _setEnd(animation);\n skipUncache || _uncache(animation.parent, animation);\n return animation;\n},\n _onUpdateTotalDuration = function _onUpdateTotalDuration(animation) {\n return animation instanceof Timeline ? _uncache(animation) : _setDuration(animation, animation._dur);\n},\n _zeroPosition = {\n _start: 0,\n endTime: _emptyFunc,\n totalDuration: _emptyFunc\n},\n _parsePosition = function _parsePosition(animation, position, percentAnimation) {\n var labels = animation.labels,\n recent = animation._recent || _zeroPosition,\n clippedDuration = animation.duration() >= _bigNum ? recent.endTime(false) : animation._dur,\n //in case there's a child that infinitely repeats, users almost never intend for the insertion point of a new child to be based on a SUPER long value like that so we clip it and assume the most recently-added child's endTime should be used instead.\n i,\n offset,\n isPercent;\n\n if (_isString(position) && (isNaN(position) || position in labels)) {\n //if the string is a number like \"1\", check to see if there's a label with that name, otherwise interpret it as a number (absolute value).\n offset = position.charAt(0);\n isPercent = position.substr(-1) === \"%\";\n i = position.indexOf(\"=\");\n\n if (offset === \"<\" || offset === \">\") {\n i >= 0 && (position = position.replace(/=/, \"\"));\n return (offset === \"<\" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0) * (isPercent ? (i < 0 ? recent : percentAnimation).totalDuration() / 100 : 1);\n }\n\n if (i < 0) {\n position in labels || (labels[position] = clippedDuration);\n return labels[position];\n }\n\n offset = parseFloat(position.charAt(i - 1) + position.substr(i + 1));\n\n if (isPercent && percentAnimation) {\n offset = offset / 100 * (_isArray(percentAnimation) ? percentAnimation[0] : percentAnimation).totalDuration();\n }\n\n return i > 1 ? _parsePosition(animation, position.substr(0, i - 1), percentAnimation) + offset : clippedDuration + offset;\n }\n\n return position == null ? clippedDuration : +position;\n},\n _createTweenType = function _createTweenType(type, params, timeline) {\n var isLegacy = _isNumber(params[1]),\n varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1),\n vars = params[varsIndex],\n irVars,\n parent;\n\n isLegacy && (vars.duration = params[1]);\n vars.parent = timeline;\n\n if (type) {\n irVars = vars;\n parent = timeline;\n\n while (parent && !(\"immediateRender\" in irVars)) {\n // inheritance hasn't happened yet, but someone may have set a default in an ancestor timeline. We could do vars.immediateRender = _isNotFalse(_inheritDefaults(vars).immediateRender) but that'd exact a slight performance penalty because _inheritDefaults() also runs in the Tween constructor. We're paying a small kb price here to gain speed.\n irVars = parent.vars.defaults || {};\n parent = _isNotFalse(parent.vars.inherit) && parent.parent;\n }\n\n vars.immediateRender = _isNotFalse(irVars.immediateRender);\n type < 2 ? vars.runBackwards = 1 : vars.startAt = params[varsIndex - 1]; // \"from\" vars\n }\n\n return new Tween(params[0], vars, params[varsIndex + 1]);\n},\n _conditionalReturn = function _conditionalReturn(value, func) {\n return value || value === 0 ? func(value) : func;\n},\n _clamp = function _clamp(min, max, value) {\n return value < min ? min : value > max ? max : value;\n},\n getUnit = function getUnit(value, v) {\n return !_isString(value) || !(v = _unitExp.exec(value)) ? \"\" : v[1];\n},\n // note: protect against padded numbers as strings, like \"100.100\". That shouldn't return \"00\" as the unit. If it's numeric, return no unit.\nclamp = function clamp(min, max, value) {\n return _conditionalReturn(value, function (v) {\n return _clamp(min, max, v);\n });\n},\n _slice = [].slice,\n _isArrayLike = function _isArrayLike(value, nonEmpty) {\n return value && _isObject(value) && \"length\" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject(value[0])) && !value.nodeType && value !== _win;\n},\n _flatten = function _flatten(ar, leaveStrings, accumulator) {\n if (accumulator === void 0) {\n accumulator = [];\n }\n\n return ar.forEach(function (value) {\n var _accumulator;\n\n return _isString(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value);\n }) || accumulator;\n},\n //takes any value and returns an array. If it's a string (and leaveStrings isn't true), it'll use document.querySelectorAll() and convert that to an array. It'll also accept iterables like jQuery objects.\ntoArray = function toArray(value, scope, leaveStrings) {\n return _context && !scope && _context.selector ? _context.selector(value) : _isString(value) && !leaveStrings && (_coreInitted || !_wake()) ? _slice.call((scope || _doc).querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : [];\n},\n selector = function selector(value) {\n value = toArray(value)[0] || _warn(\"Invalid scope\") || {};\n return function (v) {\n var el = value.current || value.nativeElement || value;\n return toArray(v, el.querySelectorAll ? el : el === value ? _warn(\"Invalid scope\") || _doc.createElement(\"div\") : value);\n };\n},\n shuffle = function shuffle(a) {\n return a.sort(function () {\n return .5 - Math.random();\n });\n},\n // alternative that's a bit faster and more reliably diverse but bigger: for (let j, v, i = a.length; i; j = Math.floor(Math.random() * i), v = a[--i], a[i] = a[j], a[j] = v); return a;\n//for distributing values across an array. Can accept a number, a function or (most commonly) a function which can contain the following properties: {base, amount, from, ease, grid, axis, length, each}. Returns a function that expects the following parameters: index, target, array. Recognizes the following\ndistribute = function distribute(v) {\n if (_isFunction(v)) {\n return v;\n }\n\n var vars = _isObject(v) ? v : {\n each: v\n },\n //n:1 is just to indicate v was a number; we leverage that later to set v according to the length we get. If a number is passed in, we treat it like the old stagger value where 0.1, for example, would mean that things would be distributed with 0.1 between each element in the array rather than a total \"amount\" that's chunked out among them all.\n ease = _parseEase(vars.ease),\n from = vars.from || 0,\n base = parseFloat(vars.base) || 0,\n cache = {},\n isDecimal = from > 0 && from < 1,\n ratios = isNaN(from) || isDecimal,\n axis = vars.axis,\n ratioX = from,\n ratioY = from;\n\n if (_isString(from)) {\n ratioX = ratioY = {\n center: .5,\n edges: .5,\n end: 1\n }[from] || 0;\n } else if (!isDecimal && ratios) {\n ratioX = from[0];\n ratioY = from[1];\n }\n\n return function (i, target, a) {\n var l = (a || vars).length,\n distances = cache[l],\n originX,\n originY,\n x,\n y,\n d,\n j,\n max,\n min,\n wrapAt;\n\n if (!distances) {\n wrapAt = vars.grid === \"auto\" ? 0 : (vars.grid || [1, _bigNum])[1];\n\n if (!wrapAt) {\n max = -_bigNum;\n\n while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {}\n\n wrapAt--;\n }\n\n distances = cache[l] = [];\n originX = ratios ? Math.min(wrapAt, l) * ratioX - .5 : from % wrapAt;\n originY = wrapAt === _bigNum ? 0 : ratios ? l * ratioY / wrapAt - .5 : from / wrapAt | 0;\n max = 0;\n min = _bigNum;\n\n for (j = 0; j < l; j++) {\n x = j % wrapAt - originX;\n y = originY - (j / wrapAt | 0);\n distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === \"y\" ? y : x);\n d > max && (max = d);\n d < min && (min = d);\n }\n\n from === \"random\" && shuffle(distances);\n distances.max = max - min;\n distances.min = min;\n distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === \"y\" ? l / wrapAt : wrapAt) || 0) * (from === \"edges\" ? -1 : 1);\n distances.b = l < 0 ? base - l : base;\n distances.u = getUnit(vars.amount || vars.each) || 0; //unit\n\n ease = ease && l < 0 ? _invertEase(ease) : ease;\n }\n\n l = (distances[i] - distances.min) / distances.max || 0;\n return _roundPrecise(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u; //round in order to work around floating point errors\n };\n},\n _roundModifier = function _roundModifier(v) {\n //pass in 0.1 get a function that'll round to the nearest tenth, or 5 to round to the closest 5, or 0.001 to the closest 1000th, etc.\n var p = Math.pow(10, ((v + \"\").split(\".\")[1] || \"\").length); //to avoid floating point math errors (like 24 * 0.1 == 2.4000000000000004), we chop off at a specific number of decimal places (much faster than toFixed())\n\n return function (raw) {\n var n = _roundPrecise(Math.round(parseFloat(raw) / v) * v * p);\n\n return (n - n % 1) / p + (_isNumber(raw) ? 0 : getUnit(raw)); // n - n % 1 replaces Math.floor() in order to handle negative values properly. For example, Math.floor(-150.00000000000003) is 151!\n };\n},\n snap = function snap(snapTo, value) {\n var isArray = _isArray(snapTo),\n radius,\n is2D;\n\n if (!isArray && _isObject(snapTo)) {\n radius = isArray = snapTo.radius || _bigNum;\n\n if (snapTo.values) {\n snapTo = toArray(snapTo.values);\n\n if (is2D = !_isNumber(snapTo[0])) {\n radius *= radius; //performance optimization so we don't have to Math.sqrt() in the loop.\n }\n } else {\n snapTo = _roundModifier(snapTo.increment);\n }\n }\n\n return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction(snapTo) ? function (raw) {\n is2D = snapTo(raw);\n return Math.abs(is2D - raw) <= radius ? is2D : raw;\n } : function (raw) {\n var x = parseFloat(is2D ? raw.x : raw),\n y = parseFloat(is2D ? raw.y : 0),\n min = _bigNum,\n closest = 0,\n i = snapTo.length,\n dx,\n dy;\n\n while (i--) {\n if (is2D) {\n dx = snapTo[i].x - x;\n dy = snapTo[i].y - y;\n dx = dx * dx + dy * dy;\n } else {\n dx = Math.abs(snapTo[i] - x);\n }\n\n if (dx < min) {\n min = dx;\n closest = i;\n }\n }\n\n closest = !radius || min <= radius ? snapTo[closest] : raw;\n return is2D || closest === raw || _isNumber(raw) ? closest : closest + getUnit(raw);\n });\n},\n random = function random(min, max, roundingIncrement, returnFunction) {\n return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function () {\n return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + \"\").length - 2) : 1) && Math.floor(Math.round((min - roundingIncrement / 2 + Math.random() * (max - min + roundingIncrement * .99)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction;\n });\n},\n pipe = function pipe() {\n for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) {\n functions[_key] = arguments[_key];\n }\n\n return function (value) {\n return functions.reduce(function (v, f) {\n return f(v);\n }, value);\n };\n},\n unitize = function unitize(func, unit) {\n return function (value) {\n return func(parseFloat(value)) + (unit || getUnit(value));\n };\n},\n normalize = function normalize(min, max, value) {\n return mapRange(min, max, 0, 1, value);\n},\n _wrapArray = function _wrapArray(a, wrapper, value) {\n return _conditionalReturn(value, function (index) {\n return a[~~wrapper(index)];\n });\n},\n wrap = function wrap(min, max, value) {\n // NOTE: wrap() CANNOT be an arrow function! A very odd compiling bug causes problems (unrelated to GSAP).\n var range = max - min;\n return _isArray(min) ? _wrapArray(min, wrap(0, min.length), max) : _conditionalReturn(value, function (value) {\n return (range + (value - min) % range) % range + min;\n });\n},\n wrapYoyo = function wrapYoyo(min, max, value) {\n var range = max - min,\n total = range * 2;\n return _isArray(min) ? _wrapArray(min, wrapYoyo(0, min.length - 1), max) : _conditionalReturn(value, function (value) {\n value = (total + (value - min) % total) % total || 0;\n return min + (value > range ? total - value : value);\n });\n},\n _replaceRandom = function _replaceRandom(value) {\n //replaces all occurrences of random(...) in a string with the calculated random value. can be a range like random(-100, 100, 5) or an array like random([0, 100, 500])\n var prev = 0,\n s = \"\",\n i,\n nums,\n end,\n isArray;\n\n while (~(i = value.indexOf(\"random(\", prev))) {\n end = value.indexOf(\")\", i);\n isArray = value.charAt(i + 7) === \"[\";\n nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp);\n s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], isArray ? 0 : +nums[1], +nums[2] || 1e-5);\n prev = end + 1;\n }\n\n return s + value.substr(prev, value.length - prev);\n},\n mapRange = function mapRange(inMin, inMax, outMin, outMax, value) {\n var inRange = inMax - inMin,\n outRange = outMax - outMin;\n return _conditionalReturn(value, function (value) {\n return outMin + ((value - inMin) / inRange * outRange || 0);\n });\n},\n interpolate = function interpolate(start, end, progress, mutate) {\n var func = isNaN(start + end) ? 0 : function (p) {\n return (1 - p) * start + p * end;\n };\n\n if (!func) {\n var isString = _isString(start),\n master = {},\n p,\n i,\n interpolators,\n l,\n il;\n\n progress === true && (mutate = 1) && (progress = null);\n\n if (isString) {\n start = {\n p: start\n };\n end = {\n p: end\n };\n } else if (_isArray(start) && !_isArray(end)) {\n interpolators = [];\n l = start.length;\n il = l - 2;\n\n for (i = 1; i < l; i++) {\n interpolators.push(interpolate(start[i - 1], start[i])); //build the interpolators up front as a performance optimization so that when the function is called many times, it can just reuse them.\n }\n\n l--;\n\n func = function func(p) {\n p *= l;\n var i = Math.min(il, ~~p);\n return interpolators[i](p - i);\n };\n\n progress = end;\n } else if (!mutate) {\n start = _merge(_isArray(start) ? [] : {}, start);\n }\n\n if (!interpolators) {\n for (p in end) {\n _addPropTween.call(master, start, p, \"get\", end[p]);\n }\n\n func = function func(p) {\n return _renderPropTweens(p, master) || (isString ? start.p : start);\n };\n }\n }\n\n return _conditionalReturn(progress, func);\n},\n _getLabelInDirection = function _getLabelInDirection(timeline, fromTime, backward) {\n //used for nextLabel() and previousLabel()\n var labels = timeline.labels,\n min = _bigNum,\n p,\n distance,\n label;\n\n for (p in labels) {\n distance = labels[p] - fromTime;\n\n if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) {\n label = p;\n min = distance;\n }\n }\n\n return label;\n},\n _callback = function _callback(animation, type, executeLazyFirst) {\n var v = animation.vars,\n callback = v[type],\n prevContext = _context,\n context = animation._ctx,\n params,\n scope,\n result;\n\n if (!callback) {\n return;\n }\n\n params = v[type + \"Params\"];\n scope = v.callbackScope || animation;\n executeLazyFirst && _lazyTweens.length && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\n context && (_context = context);\n result = params ? callback.apply(scope, params) : callback.call(scope);\n _context = prevContext;\n return result;\n},\n _interrupt = function _interrupt(animation) {\n _removeFromParent(animation);\n\n animation.scrollTrigger && animation.scrollTrigger.kill(!!_reverting);\n animation.progress() < 1 && _callback(animation, \"onInterrupt\");\n return animation;\n},\n _quickTween,\n _registerPluginQueue = [],\n _createPlugin = function _createPlugin(config) {\n if (!_windowExists()) {\n _registerPluginQueue.push(config);\n\n return;\n }\n\n config = !config.name && config[\"default\"] || config; //UMD packaging wraps things oddly, so for example MotionPathHelper becomes {MotionPathHelper:MotionPathHelper, default:MotionPathHelper}.\n\n var name = config.name,\n isFunc = _isFunction(config),\n Plugin = name && !isFunc && config.init ? function () {\n this._props = [];\n } : config,\n //in case someone passes in an object that's not a plugin, like CustomEase\n instanceDefaults = {\n init: _emptyFunc,\n render: _renderPropTweens,\n add: _addPropTween,\n kill: _killPropTweensOf,\n modifier: _addPluginModifier,\n rawVars: 0\n },\n statics = {\n targetTest: 0,\n get: 0,\n getSetter: _getSetter,\n aliases: {},\n register: 0\n };\n\n _wake();\n\n if (config !== Plugin) {\n if (_plugins[name]) {\n return;\n }\n\n _setDefaults(Plugin, _setDefaults(_copyExcluding(config, instanceDefaults), statics)); //static methods\n\n\n _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config, statics))); //instance methods\n\n\n _plugins[Plugin.prop = name] = Plugin;\n\n if (config.targetTest) {\n _harnessPlugins.push(Plugin);\n\n _reservedProps[name] = 1;\n }\n\n name = (name === \"css\" ? \"CSS\" : name.charAt(0).toUpperCase() + name.substr(1)) + \"Plugin\"; //for the global name. \"motionPath\" should become MotionPathPlugin\n }\n\n _addGlobal(name, Plugin);\n\n config.register && config.register(gsap, Plugin, PropTween);\n},\n\n/*\n * --------------------------------------------------------------------------------------\n * COLORS\n * --------------------------------------------------------------------------------------\n */\n_255 = 255,\n _colorLookup = {\n aqua: [0, _255, _255],\n lime: [0, _255, 0],\n silver: [192, 192, 192],\n black: [0, 0, 0],\n maroon: [128, 0, 0],\n teal: [0, 128, 128],\n blue: [0, 0, _255],\n navy: [0, 0, 128],\n white: [_255, _255, _255],\n olive: [128, 128, 0],\n yellow: [_255, _255, 0],\n orange: [_255, 165, 0],\n gray: [128, 128, 128],\n purple: [128, 0, 128],\n green: [0, 128, 0],\n red: [_255, 0, 0],\n pink: [_255, 192, 203],\n cyan: [0, _255, _255],\n transparent: [_255, _255, _255, 0]\n},\n // possible future idea to replace the hard-coded color name values - put this in the ticker.wake() where we set the _doc:\n// let ctx = _doc.createElement(\"canvas\").getContext(\"2d\");\n// _forEachName(\"aqua,lime,silver,black,maroon,teal,blue,navy,white,olive,yellow,orange,gray,purple,green,red,pink,cyan\", color => {ctx.fillStyle = color; _colorLookup[color] = splitColor(ctx.fillStyle)});\n_hue = function _hue(h, m1, m2) {\n h += h < 0 ? 1 : h > 1 ? -1 : 0;\n return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < .5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + .5 | 0;\n},\n splitColor = function splitColor(v, toHSL, forceAlpha) {\n var a = !v ? _colorLookup.black : _isNumber(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0,\n r,\n g,\n b,\n h,\n s,\n l,\n max,\n min,\n d,\n wasHSL;\n\n if (!a) {\n if (v.substr(-1) === \",\") {\n //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:\"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)\" - in this example \"blue,\" has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.\n v = v.substr(0, v.length - 1);\n }\n\n if (_colorLookup[v]) {\n a = _colorLookup[v];\n } else if (v.charAt(0) === \"#\") {\n if (v.length < 6) {\n //for shorthand like #9F0 or #9F0F (could have alpha)\n r = v.charAt(1);\n g = v.charAt(2);\n b = v.charAt(3);\n v = \"#\" + r + r + g + g + b + b + (v.length === 5 ? v.charAt(4) + v.charAt(4) : \"\");\n }\n\n if (v.length === 9) {\n // hex with alpha, like #fd5e53ff\n a = parseInt(v.substr(1, 6), 16);\n return [a >> 16, a >> 8 & _255, a & _255, parseInt(v.substr(7), 16) / 255];\n }\n\n v = parseInt(v.substr(1), 16);\n a = [v >> 16, v >> 8 & _255, v & _255];\n } else if (v.substr(0, 3) === \"hsl\") {\n a = wasHSL = v.match(_strictNumExp);\n\n if (!toHSL) {\n h = +a[0] % 360 / 360;\n s = +a[1] / 100;\n l = +a[2] / 100;\n g = l <= .5 ? l * (s + 1) : l + s - l * s;\n r = l * 2 - g;\n a.length > 3 && (a[3] *= 1); //cast as number\n\n a[0] = _hue(h + 1 / 3, r, g);\n a[1] = _hue(h, r, g);\n a[2] = _hue(h - 1 / 3, r, g);\n } else if (~v.indexOf(\"=\")) {\n //if relative values are found, just return the raw strings with the relative prefixes in place.\n a = v.match(_numExp);\n forceAlpha && a.length < 4 && (a[3] = 1);\n return a;\n }\n } else {\n a = v.match(_strictNumExp) || _colorLookup.transparent;\n }\n\n a = a.map(Number);\n }\n\n if (toHSL && !wasHSL) {\n r = a[0] / _255;\n g = a[1] / _255;\n b = a[2] / _255;\n max = Math.max(r, g, b);\n min = Math.min(r, g, b);\n l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;\n h *= 60;\n }\n\n a[0] = ~~(h + .5);\n a[1] = ~~(s * 100 + .5);\n a[2] = ~~(l * 100 + .5);\n }\n\n forceAlpha && a.length < 4 && (a[3] = 1);\n return a;\n},\n _colorOrderData = function _colorOrderData(v) {\n // strips out the colors from the string, finds all the numeric slots (with units) and returns an array of those. The Array also has a \"c\" property which is an Array of the index values where the colors belong. This is to help work around issues where there's a mis-matched order of color/numeric data like drop-shadow(#f00 0px 1px 2px) and drop-shadow(0x 1px 2px #f00). This is basically a helper function used in _formatColors()\n var values = [],\n c = [],\n i = -1;\n v.split(_colorExp).forEach(function (v) {\n var a = v.match(_numWithUnitExp) || [];\n values.push.apply(values, a);\n c.push(i += a.length + 1);\n });\n values.c = c;\n return values;\n},\n _formatColors = function _formatColors(s, toHSL, orderMatchData) {\n var result = \"\",\n colors = (s + result).match(_colorExp),\n type = toHSL ? \"hsla(\" : \"rgba(\",\n i = 0,\n c,\n shell,\n d,\n l;\n\n if (!colors) {\n return s;\n }\n\n colors = colors.map(function (color) {\n return (color = splitColor(color, toHSL, 1)) && type + (toHSL ? color[0] + \",\" + color[1] + \"%,\" + color[2] + \"%,\" + color[3] : color.join(\",\")) + \")\";\n });\n\n if (orderMatchData) {\n d = _colorOrderData(s);\n c = orderMatchData.c;\n\n if (c.join(result) !== d.c.join(result)) {\n shell = s.replace(_colorExp, \"1\").split(_numWithUnitExp);\n l = shell.length - 1;\n\n for (; i < l; i++) {\n result += shell[i] + (~c.indexOf(i) ? colors.shift() || type + \"0,0,0,0)\" : (d.length ? d : colors.length ? colors : orderMatchData).shift());\n }\n }\n }\n\n if (!shell) {\n shell = s.split(_colorExp);\n l = shell.length - 1;\n\n for (; i < l; i++) {\n result += shell[i] + colors[i];\n }\n }\n\n return result + shell[l];\n},\n _colorExp = function () {\n var s = \"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3,4}){1,2}\\\\b\",\n //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.,\n p;\n\n for (p in _colorLookup) {\n s += \"|\" + p + \"\\\\b\";\n }\n\n return new RegExp(s + \")\", \"gi\");\n}(),\n _hslExp = /hsl[a]?\\(/,\n _colorStringFilter = function _colorStringFilter(a) {\n var combined = a.join(\" \"),\n toHSL;\n _colorExp.lastIndex = 0;\n\n if (_colorExp.test(combined)) {\n toHSL = _hslExp.test(combined);\n a[1] = _formatColors(a[1], toHSL);\n a[0] = _formatColors(a[0], toHSL, _colorOrderData(a[1])); // make sure the order of numbers/colors match with the END value.\n\n return true;\n }\n},\n\n/*\n * --------------------------------------------------------------------------------------\n * TICKER\n * --------------------------------------------------------------------------------------\n */\n_tickerActive,\n _ticker = function () {\n var _getTime = Date.now,\n _lagThreshold = 500,\n _adjustedLag = 33,\n _startTime = _getTime(),\n _lastUpdate = _startTime,\n _gap = 1000 / 240,\n _nextTime = _gap,\n _listeners = [],\n _id,\n _req,\n _raf,\n _self,\n _delta,\n _i,\n _tick = function _tick(v) {\n var elapsed = _getTime() - _lastUpdate,\n manual = v === true,\n overlap,\n dispatch,\n time,\n frame;\n\n elapsed > _lagThreshold && (_startTime += elapsed - _adjustedLag);\n _lastUpdate += elapsed;\n time = _lastUpdate - _startTime;\n overlap = time - _nextTime;\n\n if (overlap > 0 || manual) {\n frame = ++_self.frame;\n _delta = time - _self.time * 1000;\n _self.time = time = time / 1000;\n _nextTime += overlap + (overlap >= _gap ? 4 : _gap - overlap);\n dispatch = 1;\n }\n\n manual || (_id = _req(_tick)); //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\n if (dispatch) {\n for (_i = 0; _i < _listeners.length; _i++) {\n // use _i and check _listeners.length instead of a variable because a listener could get removed during the loop, and if that happens to an element less than the current index, it'd throw things off in the loop.\n _listeners[_i](time, _delta, frame, v);\n }\n }\n };\n\n _self = {\n time: 0,\n frame: 0,\n tick: function tick() {\n _tick(true);\n },\n deltaRatio: function deltaRatio(fps) {\n return _delta / (1000 / (fps || 60));\n },\n wake: function wake() {\n if (_coreReady) {\n if (!_coreInitted && _windowExists()) {\n _win = _coreInitted = window;\n _doc = _win.document || {};\n _globals.gsap = gsap;\n (_win.gsapVersions || (_win.gsapVersions = [])).push(gsap.version);\n\n _install(_installScope || _win.GreenSockGlobals || !_win.gsap && _win || {});\n\n _raf = _win.requestAnimationFrame;\n\n _registerPluginQueue.forEach(_createPlugin);\n }\n\n _id && _self.sleep();\n\n _req = _raf || function (f) {\n return setTimeout(f, _nextTime - _self.time * 1000 + 1 | 0);\n };\n\n _tickerActive = 1;\n\n _tick(2);\n }\n },\n sleep: function sleep() {\n (_raf ? _win.cancelAnimationFrame : clearTimeout)(_id);\n _tickerActive = 0;\n _req = _emptyFunc;\n },\n lagSmoothing: function lagSmoothing(threshold, adjustedLag) {\n _lagThreshold = threshold || Infinity; // zero should be interpreted as basically unlimited\n\n _adjustedLag = Math.min(adjustedLag || 33, _lagThreshold);\n },\n fps: function fps(_fps) {\n _gap = 1000 / (_fps || 240);\n _nextTime = _self.time * 1000 + _gap;\n },\n add: function add(callback, once, prioritize) {\n var func = once ? function (t, d, f, v) {\n callback(t, d, f, v);\n\n _self.remove(func);\n } : callback;\n\n _self.remove(callback);\n\n _listeners[prioritize ? \"unshift\" : \"push\"](func);\n\n _wake();\n\n return func;\n },\n remove: function remove(callback, i) {\n ~(i = _listeners.indexOf(callback)) && _listeners.splice(i, 1) && _i >= i && _i--;\n },\n _listeners: _listeners\n };\n return _self;\n}(),\n _wake = function _wake() {\n return !_tickerActive && _ticker.wake();\n},\n //also ensures the core classes are initialized.\n\n/*\n* -------------------------------------------------\n* EASING\n* -------------------------------------------------\n*/\n_easeMap = {},\n _customEaseExp = /^[\\d.\\-M][\\d.\\-,\\s]/,\n _quotesExp = /[\"']/g,\n _parseObjectInString = function _parseObjectInString(value) {\n //takes a string like \"{wiggles:10, type:anticipate})\" and turns it into a real object. Notice it ends in \")\" and includes the {} wrappers. This is because we only use this function for parsing ease configs and prioritized optimization rather than reusability.\n var obj = {},\n split = value.substr(1, value.length - 3).split(\":\"),\n key = split[0],\n i = 1,\n l = split.length,\n index,\n val,\n parsedVal;\n\n for (; i < l; i++) {\n val = split[i];\n index = i !== l - 1 ? val.lastIndexOf(\",\") : val.length;\n parsedVal = val.substr(0, index);\n obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, \"\").trim() : +parsedVal;\n key = val.substr(index + 1).trim();\n }\n\n return obj;\n},\n _valueInParentheses = function _valueInParentheses(value) {\n var open = value.indexOf(\"(\") + 1,\n close = value.indexOf(\")\"),\n nested = value.indexOf(\"(\", open);\n return value.substring(open, ~nested && nested < close ? value.indexOf(\")\", close + 1) : close);\n},\n _configEaseFromString = function _configEaseFromString(name) {\n //name can be a string like \"elastic.out(1,0.5)\", and pass in _easeMap as obj and it'll parse it out and call the actual function like _easeMap.Elastic.easeOut.config(1,0.5). It will also parse custom ease strings as long as CustomEase is loaded and registered (internally as _easeMap._CE).\n var split = (name + \"\").split(\"(\"),\n ease = _easeMap[split[0]];\n return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf(\"{\") ? [_parseObjectInString(split[1])] : _valueInParentheses(name).split(\",\").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE(\"\", name) : ease;\n},\n _invertEase = function _invertEase(ease) {\n return function (p) {\n return 1 - ease(1 - p);\n };\n},\n // allow yoyoEase to be set in children and have those affected when the parent/ancestor timeline yoyos.\n_propagateYoyoEase = function _propagateYoyoEase(timeline, isYoyo) {\n var child = timeline._first,\n ease;\n\n while (child) {\n if (child instanceof Timeline) {\n _propagateYoyoEase(child, isYoyo);\n } else if (child.vars.yoyoEase && (!child._yoyo || !child._repeat) && child._yoyo !== isYoyo) {\n if (child.timeline) {\n _propagateYoyoEase(child.timeline, isYoyo);\n } else {\n ease = child._ease;\n child._ease = child._yEase;\n child._yEase = ease;\n child._yoyo = isYoyo;\n }\n }\n\n child = child._next;\n }\n},\n _parseEase = function _parseEase(ease, defaultEase) {\n return !ease ? defaultEase : (_isFunction(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase;\n},\n _insertEase = function _insertEase(names, easeIn, easeOut, easeInOut) {\n if (easeOut === void 0) {\n easeOut = function easeOut(p) {\n return 1 - easeIn(1 - p);\n };\n }\n\n if (easeInOut === void 0) {\n easeInOut = function easeInOut(p) {\n return p < .5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2;\n };\n }\n\n var ease = {\n easeIn: easeIn,\n easeOut: easeOut,\n easeInOut: easeInOut\n },\n lowercaseName;\n\n _forEachName(names, function (name) {\n _easeMap[name] = _globals[name] = ease;\n _easeMap[lowercaseName = name.toLowerCase()] = easeOut;\n\n for (var p in ease) {\n _easeMap[lowercaseName + (p === \"easeIn\" ? \".in\" : p === \"easeOut\" ? \".out\" : \".inOut\")] = _easeMap[name + \".\" + p] = ease[p];\n }\n });\n\n return ease;\n},\n _easeInOutFromOut = function _easeInOutFromOut(easeOut) {\n return function (p) {\n return p < .5 ? (1 - easeOut(1 - p * 2)) / 2 : .5 + easeOut((p - .5) * 2) / 2;\n };\n},\n _configElastic = function _configElastic(type, amplitude, period) {\n var p1 = amplitude >= 1 ? amplitude : 1,\n //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.\n p2 = (period || (type ? .3 : .45)) / (amplitude < 1 ? amplitude : 1),\n p3 = p2 / _2PI * (Math.asin(1 / p1) || 0),\n easeOut = function easeOut(p) {\n return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1;\n },\n ease = type === \"out\" ? easeOut : type === \"in\" ? function (p) {\n return 1 - easeOut(1 - p);\n } : _easeInOutFromOut(easeOut);\n\n p2 = _2PI / p2; //precalculate to optimize\n\n ease.config = function (amplitude, period) {\n return _configElastic(type, amplitude, period);\n };\n\n return ease;\n},\n _configBack = function _configBack(type, overshoot) {\n if (overshoot === void 0) {\n overshoot = 1.70158;\n }\n\n var easeOut = function easeOut(p) {\n return p ? --p * p * ((overshoot + 1) * p + overshoot) + 1 : 0;\n },\n ease = type === \"out\" ? easeOut : type === \"in\" ? function (p) {\n return 1 - easeOut(1 - p);\n } : _easeInOutFromOut(easeOut);\n\n ease.config = function (overshoot) {\n return _configBack(type, overshoot);\n };\n\n return ease;\n}; // a cheaper (kb and cpu) but more mild way to get a parameterized weighted ease by feeding in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.\n// _weightedEase = ratio => {\n// \tlet y = 0.5 + ratio / 2;\n// \treturn p => (2 * (1 - p) * p * y + p * p);\n// },\n// a stronger (but more expensive kb/cpu) parameterized weighted ease that lets you feed in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.\n// _weightedEaseStrong = ratio => {\n// \tratio = .5 + ratio / 2;\n// \tlet o = 1 / 3 * (ratio < .5 ? ratio : 1 - ratio),\n// \t\tb = ratio - o,\n// \t\tc = ratio + o;\n// \treturn p => p === 1 ? p : 3 * b * (1 - p) * (1 - p) * p + 3 * c * (1 - p) * p * p + p * p * p;\n// };\n\n\n_forEachName(\"Linear,Quad,Cubic,Quart,Quint,Strong\", function (name, i) {\n var power = i < 5 ? i + 1 : i;\n\n _insertEase(name + \",Power\" + (power - 1), i ? function (p) {\n return Math.pow(p, power);\n } : function (p) {\n return p;\n }, function (p) {\n return 1 - Math.pow(1 - p, power);\n }, function (p) {\n return p < .5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2;\n });\n});\n\n_easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn;\n\n_insertEase(\"Elastic\", _configElastic(\"in\"), _configElastic(\"out\"), _configElastic());\n\n(function (n, c) {\n var n1 = 1 / c,\n n2 = 2 * n1,\n n3 = 2.5 * n1,\n easeOut = function easeOut(p) {\n return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + .75 : p < n3 ? n * (p -= 2.25 / c) * p + .9375 : n * Math.pow(p - 2.625 / c, 2) + .984375;\n };\n\n _insertEase(\"Bounce\", function (p) {\n return 1 - easeOut(1 - p);\n }, easeOut);\n})(7.5625, 2.75);\n\n_insertEase(\"Expo\", function (p) {\n return p ? Math.pow(2, 10 * (p - 1)) : 0;\n});\n\n_insertEase(\"Circ\", function (p) {\n return -(_sqrt(1 - p * p) - 1);\n});\n\n_insertEase(\"Sine\", function (p) {\n return p === 1 ? 1 : -_cos(p * _HALF_PI) + 1;\n});\n\n_insertEase(\"Back\", _configBack(\"in\"), _configBack(\"out\"), _configBack());\n\n_easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = {\n config: function config(steps, immediateStart) {\n if (steps === void 0) {\n steps = 1;\n }\n\n var p1 = 1 / steps,\n p2 = steps + (immediateStart ? 0 : 1),\n p3 = immediateStart ? 1 : 0,\n max = 1 - _tinyNum;\n return function (p) {\n return ((p2 * _clamp(0, max, p) | 0) + p3) * p1;\n };\n }\n};\n_defaults.ease = _easeMap[\"quad.out\"];\n\n_forEachName(\"onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt\", function (name) {\n return _callbackNames += name + \",\" + name + \"Params,\";\n});\n/*\n * --------------------------------------------------------------------------------------\n * CACHE\n * --------------------------------------------------------------------------------------\n */\n\n\nexport var GSCache = function GSCache(target, harness) {\n this.id = _gsID++;\n target._gsap = this;\n this.target = target;\n this.harness = harness;\n this.get = harness ? harness.get : _getProperty;\n this.set = harness ? harness.getSetter : _getSetter;\n};\n/*\n * --------------------------------------------------------------------------------------\n * ANIMATION\n * --------------------------------------------------------------------------------------\n */\n\nexport var Animation = /*#__PURE__*/function () {\n function Animation(vars) {\n this.vars = vars;\n this._delay = +vars.delay || 0;\n\n if (this._repeat = vars.repeat === Infinity ? -2 : vars.repeat || 0) {\n // TODO: repeat: Infinity on a timeline's children must flag that timeline internally and affect its totalDuration, otherwise it'll stop in the negative direction when reaching the start.\n this._rDelay = vars.repeatDelay || 0;\n this._yoyo = !!vars.yoyo || !!vars.yoyoEase;\n }\n\n this._ts = 1;\n\n _setDuration(this, +vars.duration, 1, 1);\n\n this.data = vars.data;\n\n if (_context) {\n this._ctx = _context;\n\n _context.data.push(this);\n }\n\n _tickerActive || _ticker.wake();\n }\n\n var _proto = Animation.prototype;\n\n _proto.delay = function delay(value) {\n if (value || value === 0) {\n this.parent && this.parent.smoothChildTiming && this.startTime(this._start + value - this._delay);\n this._delay = value;\n return this;\n }\n\n return this._delay;\n };\n\n _proto.duration = function duration(value) {\n return arguments.length ? this.totalDuration(this._repeat > 0 ? value + (value + this._rDelay) * this._repeat : value) : this.totalDuration() && this._dur;\n };\n\n _proto.totalDuration = function totalDuration(value) {\n if (!arguments.length) {\n return this._tDur;\n }\n\n this._dirty = 0;\n return _setDuration(this, this._repeat < 0 ? value : (value - this._repeat * this._rDelay) / (this._repeat + 1));\n };\n\n _proto.totalTime = function totalTime(_totalTime, suppressEvents) {\n _wake();\n\n if (!arguments.length) {\n return this._tTime;\n }\n\n var parent = this._dp;\n\n if (parent && parent.smoothChildTiming && this._ts) {\n _alignPlayhead(this, _totalTime);\n\n !parent._dp || parent.parent || _postAddChecks(parent, this); // edge case: if this is a child of a timeline that already completed, for example, we must re-activate the parent.\n //in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The start of that child would get pushed out, but one of the ancestors may have completed.\n\n while (parent && parent.parent) {\n if (parent.parent._time !== parent._start + (parent._ts >= 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) {\n parent.totalTime(parent._tTime, true);\n }\n\n parent = parent.parent;\n }\n\n if (!this.parent && this._dp.autoRemoveChildren && (this._ts > 0 && _totalTime < this._tDur || this._ts < 0 && _totalTime > 0 || !this._tDur && !_totalTime)) {\n //if the animation doesn't have a parent, put it back into its last parent (recorded as _dp for exactly cases like this). Limit to parents with autoRemoveChildren (like globalTimeline) so that if the user manually removes an animation from a timeline and then alters its playhead, it doesn't get added back in.\n _addToTimeline(this._dp, this, this._start - this._delay);\n }\n }\n\n if (this._tTime !== _totalTime || !this._dur && !suppressEvents || this._initted && Math.abs(this._zTime) === _tinyNum || !_totalTime && !this._initted && (this.add || this._ptLookup)) {\n // check for _ptLookup on a Tween instance to ensure it has actually finished being instantiated, otherwise if this.reverse() gets called in the Animation constructor, it could trigger a render() here even though the _targets weren't populated, thus when _init() is called there won't be any PropTweens (it'll act like the tween is non-functional)\n this._ts || (this._pTime = _totalTime); // otherwise, if an animation is paused, then the playhead is moved back to zero, then resumed, it'd revert back to the original time at the pause\n //if (!this._lock) { // avoid endless recursion (not sure we need this yet or if it's worth the performance hit)\n // this._lock = 1;\n\n _lazySafeRender(this, _totalTime, suppressEvents); // this._lock = 0;\n //}\n\n }\n\n return this;\n };\n\n _proto.time = function time(value, suppressEvents) {\n return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % (this._dur + this._rDelay) || (value ? this._dur : 0), suppressEvents) : this._time; // note: if the modulus results in 0, the playhead could be exactly at the end or the beginning, and we always defer to the END with a non-zero value, otherwise if you set the time() to the very end (duration()), it would render at the START!\n };\n\n _proto.totalProgress = function totalProgress(value, suppressEvents) {\n return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this.totalDuration() ? Math.min(1, this._tTime / this._tDur) : this.ratio;\n };\n\n _proto.progress = function progress(value, suppressEvents) {\n return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? Math.min(1, this._time / this._dur) : this.ratio;\n };\n\n _proto.iteration = function iteration(value, suppressEvents) {\n var cycleDuration = this.duration() + this._rDelay;\n\n return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1;\n } // potential future addition:\n // isPlayingBackwards() {\n // \tlet animation = this,\n // \t\torientation = 1; // 1 = forward, -1 = backward\n // \twhile (animation) {\n // \t\torientation *= animation.reversed() || (animation.repeat() && !(animation.iteration() & 1)) ? -1 : 1;\n // \t\tanimation = animation.parent;\n // \t}\n // \treturn orientation < 0;\n // }\n ;\n\n _proto.timeScale = function timeScale(value) {\n if (!arguments.length) {\n return this._rts === -_tinyNum ? 0 : this._rts; // recorded timeScale. Special case: if someone calls reverse() on an animation with timeScale of 0, we assign it -_tinyNum to remember it's reversed.\n }\n\n if (this._rts === value) {\n return this;\n }\n\n var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime; // make sure to do the parentToChildTotalTime() BEFORE setting the new _ts because the old one must be used in that calculation.\n // future addition? Up side: fast and minimal file size. Down side: only works on this animation; if a timeline is reversed, for example, its childrens' onReverse wouldn't get called.\n //(+value < 0 && this._rts >= 0) && _callback(this, \"onReverse\", true);\n // prioritize rendering where the parent's playhead lines up instead of this._tTime because there could be a tween that's animating another tween's timeScale in the same rendering loop (same parent), thus if the timeScale tween renders first, it would alter _start BEFORE _tTime was set on that tick (in the rendering loop), effectively freezing it until the timeScale tween finishes.\n\n this._rts = +value || 0;\n this._ts = this._ps || value === -_tinyNum ? 0 : this._rts; // _ts is the functional timeScale which would be 0 if the animation is paused.\n\n this.totalTime(_clamp(-Math.abs(this._delay), this._tDur, tTime), true);\n\n _setEnd(this); // if parent.smoothChildTiming was false, the end time didn't get updated in the _alignPlayhead() method, so do it here.\n\n\n return _recacheAncestors(this);\n };\n\n _proto.paused = function paused(value) {\n if (!arguments.length) {\n return this._ps;\n }\n\n if (this._ps !== value) {\n this._ps = value;\n\n if (value) {\n this._pTime = this._tTime || Math.max(-this._delay, this.rawTime()); // if the pause occurs during the delay phase, make sure that's factored in when resuming.\n\n this._ts = this._act = 0; // _ts is the functional timeScale, so a paused tween would effectively have a timeScale of 0. We record the \"real\" timeScale as _rts (recorded time scale)\n } else {\n _wake();\n\n this._ts = this._rts; //only defer to _pTime (pauseTime) if tTime is zero. Remember, someone could pause() an animation, then scrub the playhead and resume(). If the parent doesn't have smoothChildTiming, we render at the rawTime() because the startTime won't get updated.\n\n this.totalTime(this.parent && !this.parent.smoothChildTiming ? this.rawTime() : this._tTime || this._pTime, this.progress() === 1 && Math.abs(this._zTime) !== _tinyNum && (this._tTime -= _tinyNum)); // edge case: animation.progress(1).pause().play() wouldn't render again because the playhead is already at the end, but the call to totalTime() below will add it back to its parent...and not remove it again (since removing only happens upon rendering at a new time). Offsetting the _tTime slightly is done simply to cause the final render in totalTime() that'll pop it off its timeline (if autoRemoveChildren is true, of course). Check to make sure _zTime isn't -_tinyNum to avoid an edge case where the playhead is pushed to the end but INSIDE a tween/callback, the timeline itself is paused thus halting rendering and leaving a few unrendered. When resuming, it wouldn't render those otherwise.\n }\n }\n\n return this;\n };\n\n _proto.startTime = function startTime(value) {\n if (arguments.length) {\n this._start = value;\n var parent = this.parent || this._dp;\n parent && (parent._sort || !this.parent) && _addToTimeline(parent, this, value - this._delay);\n return this;\n }\n\n return this._start;\n };\n\n _proto.endTime = function endTime(includeRepeats) {\n return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts || 1);\n };\n\n _proto.rawTime = function rawTime(wrapRepeats) {\n var parent = this.parent || this._dp; // _dp = detached parent\n\n return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this);\n };\n\n _proto.revert = function revert(config) {\n if (config === void 0) {\n config = _revertConfig;\n }\n\n var prevIsReverting = _reverting;\n _reverting = config;\n\n if (this._initted || this._startAt) {\n this.timeline && this.timeline.revert(config);\n this.totalTime(-0.01, config.suppressEvents);\n }\n\n this.data !== \"nested\" && config.kill !== false && this.kill();\n _reverting = prevIsReverting;\n return this;\n };\n\n _proto.globalTime = function globalTime(rawTime) {\n var animation = this,\n time = arguments.length ? rawTime : animation.rawTime();\n\n while (animation) {\n time = animation._start + time / (animation._ts || 1);\n animation = animation._dp;\n }\n\n return !this.parent && this._sat ? this._sat.vars.immediateRender ? -1 : this._sat.globalTime(rawTime) : time; // the _startAt tweens for .fromTo() and .from() that have immediateRender should always be FIRST in the timeline (important for context.revert()). \"_sat\" stands for _startAtTween, referring to the parent tween that created the _startAt. We must discern if that tween had immediateRender so that we can know whether or not to prioritize it in revert().\n };\n\n _proto.repeat = function repeat(value) {\n if (arguments.length) {\n this._repeat = value === Infinity ? -2 : value;\n return _onUpdateTotalDuration(this);\n }\n\n return this._repeat === -2 ? Infinity : this._repeat;\n };\n\n _proto.repeatDelay = function repeatDelay(value) {\n if (arguments.length) {\n var time = this._time;\n this._rDelay = value;\n\n _onUpdateTotalDuration(this);\n\n return time ? this.time(time) : this;\n }\n\n return this._rDelay;\n };\n\n _proto.yoyo = function yoyo(value) {\n if (arguments.length) {\n this._yoyo = value;\n return this;\n }\n\n return this._yoyo;\n };\n\n _proto.seek = function seek(position, suppressEvents) {\n return this.totalTime(_parsePosition(this, position), _isNotFalse(suppressEvents));\n };\n\n _proto.restart = function restart(includeDelay, suppressEvents) {\n return this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents));\n };\n\n _proto.play = function play(from, suppressEvents) {\n from != null && this.seek(from, suppressEvents);\n return this.reversed(false).paused(false);\n };\n\n _proto.reverse = function reverse(from, suppressEvents) {\n from != null && this.seek(from || this.totalDuration(), suppressEvents);\n return this.reversed(true).paused(false);\n };\n\n _proto.pause = function pause(atTime, suppressEvents) {\n atTime != null && this.seek(atTime, suppressEvents);\n return this.paused(true);\n };\n\n _proto.resume = function resume() {\n return this.paused(false);\n };\n\n _proto.reversed = function reversed(value) {\n if (arguments.length) {\n !!value !== this.reversed() && this.timeScale(-this._rts || (value ? -_tinyNum : 0)); // in case timeScale is zero, reversing would have no effect so we use _tinyNum.\n\n return this;\n }\n\n return this._rts < 0;\n };\n\n _proto.invalidate = function invalidate() {\n this._initted = this._act = 0;\n this._zTime = -_tinyNum;\n return this;\n };\n\n _proto.isActive = function isActive() {\n var parent = this.parent || this._dp,\n start = this._start,\n rawTime;\n return !!(!parent || this._ts && this._initted && parent.isActive() && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum);\n };\n\n _proto.eventCallback = function eventCallback(type, callback, params) {\n var vars = this.vars;\n\n if (arguments.length > 1) {\n if (!callback) {\n delete vars[type];\n } else {\n vars[type] = callback;\n params && (vars[type + \"Params\"] = params);\n type === \"onUpdate\" && (this._onUpdate = callback);\n }\n\n return this;\n }\n\n return vars[type];\n };\n\n _proto.then = function then(onFulfilled) {\n var self = this;\n return new Promise(function (resolve) {\n var f = _isFunction(onFulfilled) ? onFulfilled : _passThrough,\n _resolve = function _resolve() {\n var _then = self.then;\n self.then = null; // temporarily null the then() method to avoid an infinite loop (see https://github.com/greensock/GSAP/issues/322)\n\n _isFunction(f) && (f = f(self)) && (f.then || f === self) && (self.then = _then);\n resolve(f);\n self.then = _then;\n };\n\n if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) {\n _resolve();\n } else {\n self._prom = _resolve;\n }\n });\n };\n\n _proto.kill = function kill() {\n _interrupt(this);\n };\n\n return Animation;\n}();\n\n_setDefaults(Animation.prototype, {\n _time: 0,\n _start: 0,\n _end: 0,\n _tTime: 0,\n _tDur: 0,\n _dirty: 0,\n _repeat: 0,\n _yoyo: false,\n parent: null,\n _initted: false,\n _rDelay: 0,\n _ts: 1,\n _dp: 0,\n ratio: 0,\n _zTime: -_tinyNum,\n _prom: 0,\n _ps: false,\n _rts: 1\n});\n/*\n * -------------------------------------------------\n * TIMELINE\n * -------------------------------------------------\n */\n\n\nexport var Timeline = /*#__PURE__*/function (_Animation) {\n _inheritsLoose(Timeline, _Animation);\n\n function Timeline(vars, position) {\n var _this;\n\n if (vars === void 0) {\n vars = {};\n }\n\n _this = _Animation.call(this, vars) || this;\n _this.labels = {};\n _this.smoothChildTiming = !!vars.smoothChildTiming;\n _this.autoRemoveChildren = !!vars.autoRemoveChildren;\n _this._sort = _isNotFalse(vars.sortChildren);\n _globalTimeline && _addToTimeline(vars.parent || _globalTimeline, _assertThisInitialized(_this), position);\n vars.reversed && _this.reverse();\n vars.paused && _this.paused(true);\n vars.scrollTrigger && _scrollTrigger(_assertThisInitialized(_this), vars.scrollTrigger);\n return _this;\n }\n\n var _proto2 = Timeline.prototype;\n\n _proto2.to = function to(targets, vars, position) {\n _createTweenType(0, arguments, this);\n\n return this;\n };\n\n _proto2.from = function from(targets, vars, position) {\n _createTweenType(1, arguments, this);\n\n return this;\n };\n\n _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) {\n _createTweenType(2, arguments, this);\n\n return this;\n };\n\n _proto2.set = function set(targets, vars, position) {\n vars.duration = 0;\n vars.parent = this;\n _inheritDefaults(vars).repeatDelay || (vars.repeat = 0);\n vars.immediateRender = !!vars.immediateRender;\n new Tween(targets, vars, _parsePosition(this, position), 1);\n return this;\n };\n\n _proto2.call = function call(callback, params, position) {\n return _addToTimeline(this, Tween.delayedCall(0, callback, params), position);\n } //ONLY for backward compatibility! Maybe delete?\n ;\n\n _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\n vars.duration = duration;\n vars.stagger = vars.stagger || stagger;\n vars.onComplete = onCompleteAll;\n vars.onCompleteParams = onCompleteAllParams;\n vars.parent = this;\n new Tween(targets, vars, _parsePosition(this, position));\n return this;\n };\n\n _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\n vars.runBackwards = 1;\n _inheritDefaults(vars).immediateRender = _isNotFalse(vars.immediateRender);\n return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams);\n };\n\n _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) {\n toVars.startAt = fromVars;\n _inheritDefaults(toVars).immediateRender = _isNotFalse(toVars.immediateRender);\n return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams);\n };\n\n _proto2.render = function render(totalTime, suppressEvents, force) {\n var prevTime = this._time,\n tDur = this._dirty ? this.totalDuration() : this._tDur,\n dur = this._dur,\n tTime = totalTime <= 0 ? 0 : _roundPrecise(totalTime),\n // if a paused timeline is resumed (or its _start is updated for another reason...which rounds it), that could result in the playhead shifting a **tiny** amount and a zero-duration child at that spot may get rendered at a different ratio, like its totalTime in render() may be 1e-17 instead of 0, for example.\n crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur),\n time,\n child,\n next,\n iteration,\n cycleDuration,\n prevPaused,\n pauseTween,\n timeScale,\n prevStart,\n prevIteration,\n yoyo,\n isYoyo;\n this !== _globalTimeline && tTime > tDur && totalTime >= 0 && (tTime = tDur);\n\n if (tTime !== this._tTime || force || crossingStart) {\n if (prevTime !== this._time && dur) {\n //if totalDuration() finds a child with a negative startTime and smoothChildTiming is true, things get shifted around internally so we need to adjust the time accordingly. For example, if a tween starts at -30 we must shift EVERYTHING forward 30 seconds and move this timeline's startTime backward by 30 seconds so that things align with the playhead (no jump).\n tTime += this._time - prevTime;\n totalTime += this._time - prevTime;\n }\n\n time = tTime;\n prevStart = this._start;\n timeScale = this._ts;\n prevPaused = !timeScale;\n\n if (crossingStart) {\n dur || (prevTime = this._zTime); //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.\n\n (totalTime || !suppressEvents) && (this._zTime = totalTime);\n }\n\n if (this._repeat) {\n //adjust the time for repeats and yoyos\n yoyo = this._yoyo;\n cycleDuration = dur + this._rDelay;\n\n if (this._repeat < -1 && totalTime < 0) {\n return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\n }\n\n time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\n if (tTime === tDur) {\n // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)\n iteration = this._repeat;\n time = dur;\n } else {\n iteration = ~~(tTime / cycleDuration);\n\n if (iteration && iteration === tTime / cycleDuration) {\n time = dur;\n iteration--;\n }\n\n time > dur && (time = dur);\n }\n\n prevIteration = _animationCycle(this._tTime, cycleDuration);\n !prevTime && this._tTime && prevIteration !== iteration && this._tTime - prevIteration * cycleDuration - this._dur <= 0 && (prevIteration = iteration); // edge case - if someone does addPause() at the very beginning of a repeating timeline, that pause is technically at the same spot as the end which causes this._time to get set to 0 when the totalTime would normally place the playhead at the end. See https://greensock.com/forums/topic/23823-closing-nav-animation-not-working-on-ie-and-iphone-6-maybe-other-older-browser/?tab=comments#comment-113005 also, this._tTime - prevIteration * cycleDuration - this._dur <= 0 just checks to make sure it wasn't previously in the \"repeatDelay\" portion\n\n if (yoyo && iteration & 1) {\n time = dur - time;\n isYoyo = 1;\n }\n /*\n make sure children at the end/beginning of the timeline are rendered properly. If, for example,\n a 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which\n would get translated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there\n could be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So\n we need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must\n ensure that zero-duration tweens at the very beginning or end of the Timeline work.\n */\n\n\n if (iteration !== prevIteration && !this._lock) {\n var rewinding = yoyo && prevIteration & 1,\n doesWrap = rewinding === (yoyo && iteration & 1);\n iteration < prevIteration && (rewinding = !rewinding);\n prevTime = rewinding ? 0 : dur;\n this._lock = 1;\n this.render(prevTime || (isYoyo ? 0 : _roundPrecise(iteration * cycleDuration)), suppressEvents, !dur)._lock = 0;\n this._tTime = tTime; // if a user gets the iteration() inside the onRepeat, for example, it should be accurate.\n\n !suppressEvents && this.parent && _callback(this, \"onRepeat\");\n this.vars.repeatRefresh && !isYoyo && (this.invalidate()._lock = 1);\n\n if (prevTime && prevTime !== this._time || prevPaused !== !this._ts || this.vars.onRepeat && !this.parent && !this._act) {\n // if prevTime is 0 and we render at the very end, _time will be the end, thus won't match. So in this edge case, prevTime won't match _time but that's okay. If it gets killed in the onRepeat, eject as well.\n return this;\n }\n\n dur = this._dur; // in case the duration changed in the onRepeat\n\n tDur = this._tDur;\n\n if (doesWrap) {\n this._lock = 2;\n prevTime = rewinding ? dur : -0.0001;\n this.render(prevTime, true);\n this.vars.repeatRefresh && !isYoyo && this.invalidate();\n }\n\n this._lock = 0;\n\n if (!this._ts && !prevPaused) {\n return this;\n } //in order for yoyoEase to work properly when there's a stagger, we must swap out the ease in each sub-tween.\n\n\n _propagateYoyoEase(this, isYoyo);\n }\n }\n\n if (this._hasPause && !this._forcing && this._lock < 2) {\n pauseTween = _findNextPauseTween(this, _roundPrecise(prevTime), _roundPrecise(time));\n\n if (pauseTween) {\n tTime -= time - (time = pauseTween._start);\n }\n }\n\n this._tTime = tTime;\n this._time = time;\n this._act = !timeScale; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.\n\n if (!this._initted) {\n this._onUpdate = this.vars.onUpdate;\n this._initted = 1;\n this._zTime = totalTime;\n prevTime = 0; // upon init, the playhead should always go forward; someone could invalidate() a completed timeline and then if they restart(), that would make child tweens render in reverse order which could lock in the wrong starting values if they build on each other, like tl.to(obj, {x: 100}).to(obj, {x: 0}).\n }\n\n if (!prevTime && time && !suppressEvents && !iteration) {\n _callback(this, \"onStart\");\n\n if (this._tTime !== tTime) {\n // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.\n return this;\n }\n }\n\n if (time >= prevTime && totalTime >= 0) {\n child = this._first;\n\n while (child) {\n next = child._next;\n\n if ((child._act || time >= child._start) && child._ts && pauseTween !== child) {\n if (child.parent !== this) {\n // an extreme edge case - the child's render could do something like kill() the \"next\" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.\n return this.render(totalTime, suppressEvents, force);\n }\n\n child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force);\n\n if (time !== this._time || !this._ts && !prevPaused) {\n //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n pauseTween = 0;\n next && (tTime += this._zTime = -_tinyNum); // it didn't finish rendering, so flag zTime as negative so that so that the next time render() is called it'll be forced (to render any remaining children)\n\n break;\n }\n }\n\n child = next;\n }\n } else {\n child = this._last;\n var adjustedTime = totalTime < 0 ? totalTime : time; //when the playhead goes backward beyond the start of this timeline, we must pass that information down to the child animations so that zero-duration tweens know whether to render their starting or ending values.\n\n while (child) {\n next = child._prev;\n\n if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) {\n if (child.parent !== this) {\n // an extreme edge case - the child's render could do something like kill() the \"next\" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.\n return this.render(totalTime, suppressEvents, force);\n }\n\n child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force || _reverting && (child._initted || child._startAt)); // if reverting, we should always force renders of initted tweens (but remember that .fromTo() or .from() may have a _startAt but not _initted yet). If, for example, a .fromTo() tween with a stagger (which creates an internal timeline) gets reverted BEFORE some of its child tweens render for the first time, it may not properly trigger them to revert.\n\n if (time !== this._time || !this._ts && !prevPaused) {\n //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n pauseTween = 0;\n next && (tTime += this._zTime = adjustedTime ? -_tinyNum : _tinyNum); // it didn't finish rendering, so adjust zTime so that so that the next time render() is called it'll be forced (to render any remaining children)\n\n break;\n }\n }\n\n child = next;\n }\n }\n\n if (pauseTween && !suppressEvents) {\n this.pause();\n pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1;\n\n if (this._ts) {\n //the callback resumed playback! So since we may have held back the playhead due to where the pause is positioned, go ahead and jump to where it's SUPPOSED to be (if no pause happened).\n this._start = prevStart; //if the pause was at an earlier time and the user resumed in the callback, it could reposition the timeline (changing its startTime), throwing things off slightly, so we make sure the _start doesn't shift.\n\n _setEnd(this);\n\n return this.render(totalTime, suppressEvents, force);\n }\n }\n\n this._onUpdate && !suppressEvents && _callback(this, \"onUpdate\", true);\n if (tTime === tDur && this._tTime >= this.totalDuration() || !tTime && prevTime) if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) if (!this._lock) {\n // remember, a child's callback may alter this timeline's playhead or timeScale which is why we need to add some of these checks.\n (totalTime || !dur) && (tTime === tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.\n\n if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime || !tDur)) {\n _callback(this, tTime === tDur && totalTime >= 0 ? \"onComplete\" : \"onReverseComplete\", true);\n\n this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\n }\n }\n }\n\n return this;\n };\n\n _proto2.add = function add(child, position) {\n var _this2 = this;\n\n _isNumber(position) || (position = _parsePosition(this, position, child));\n\n if (!(child instanceof Animation)) {\n if (_isArray(child)) {\n child.forEach(function (obj) {\n return _this2.add(obj, position);\n });\n return this;\n }\n\n if (_isString(child)) {\n return this.addLabel(child, position);\n }\n\n if (_isFunction(child)) {\n child = Tween.delayedCall(0, child);\n } else {\n return this;\n }\n }\n\n return this !== child ? _addToTimeline(this, child, position) : this; //don't allow a timeline to be added to itself as a child!\n };\n\n _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) {\n if (nested === void 0) {\n nested = true;\n }\n\n if (tweens === void 0) {\n tweens = true;\n }\n\n if (timelines === void 0) {\n timelines = true;\n }\n\n if (ignoreBeforeTime === void 0) {\n ignoreBeforeTime = -_bigNum;\n }\n\n var a = [],\n child = this._first;\n\n while (child) {\n if (child._start >= ignoreBeforeTime) {\n if (child instanceof Tween) {\n tweens && a.push(child);\n } else {\n timelines && a.push(child);\n nested && a.push.apply(a, child.getChildren(true, tweens, timelines));\n }\n }\n\n child = child._next;\n }\n\n return a;\n };\n\n _proto2.getById = function getById(id) {\n var animations = this.getChildren(1, 1, 1),\n i = animations.length;\n\n while (i--) {\n if (animations[i].vars.id === id) {\n return animations[i];\n }\n }\n };\n\n _proto2.remove = function remove(child) {\n if (_isString(child)) {\n return this.removeLabel(child);\n }\n\n if (_isFunction(child)) {\n return this.killTweensOf(child);\n }\n\n _removeLinkedListItem(this, child);\n\n if (child === this._recent) {\n this._recent = this._last;\n }\n\n return _uncache(this);\n };\n\n _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) {\n if (!arguments.length) {\n return this._tTime;\n }\n\n this._forcing = 1;\n\n if (!this._dp && this._ts) {\n //special case for the global timeline (or any other that has no parent or detached parent).\n this._start = _roundPrecise(_ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts));\n }\n\n _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents);\n\n this._forcing = 0;\n return this;\n };\n\n _proto2.addLabel = function addLabel(label, position) {\n this.labels[label] = _parsePosition(this, position);\n return this;\n };\n\n _proto2.removeLabel = function removeLabel(label) {\n delete this.labels[label];\n return this;\n };\n\n _proto2.addPause = function addPause(position, callback, params) {\n var t = Tween.delayedCall(0, callback || _emptyFunc, params);\n t.data = \"isPause\";\n this._hasPause = 1;\n return _addToTimeline(this, t, _parsePosition(this, position));\n };\n\n _proto2.removePause = function removePause(position) {\n var child = this._first;\n position = _parsePosition(this, position);\n\n while (child) {\n if (child._start === position && child.data === \"isPause\") {\n _removeFromParent(child);\n }\n\n child = child._next;\n }\n };\n\n _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) {\n var tweens = this.getTweensOf(targets, onlyActive),\n i = tweens.length;\n\n while (i--) {\n _overwritingTween !== tweens[i] && tweens[i].kill(targets, props);\n }\n\n return this;\n };\n\n _proto2.getTweensOf = function getTweensOf(targets, onlyActive) {\n var a = [],\n parsedTargets = toArray(targets),\n child = this._first,\n isGlobalTime = _isNumber(onlyActive),\n // a number is interpreted as a global time. If the animation spans\n children;\n\n while (child) {\n if (child instanceof Tween) {\n if (_arrayContainsAny(child._targets, parsedTargets) && (isGlobalTime ? (!_overwritingTween || child._initted && child._ts) && child.globalTime(0) <= onlyActive && child.globalTime(child.totalDuration()) > onlyActive : !onlyActive || child.isActive())) {\n // note: if this is for overwriting, it should only be for tweens that aren't paused and are initted.\n a.push(child);\n }\n } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) {\n a.push.apply(a, children);\n }\n\n child = child._next;\n }\n\n return a;\n } // potential future feature - targets() on timelines\n // targets() {\n // \tlet result = [];\n // \tthis.getChildren(true, true, false).forEach(t => result.push(...t.targets()));\n // \treturn result.filter((v, i) => result.indexOf(v) === i);\n // }\n ;\n\n _proto2.tweenTo = function tweenTo(position, vars) {\n vars = vars || {};\n\n var tl = this,\n endTime = _parsePosition(tl, position),\n _vars = vars,\n startAt = _vars.startAt,\n _onStart = _vars.onStart,\n onStartParams = _vars.onStartParams,\n immediateRender = _vars.immediateRender,\n initted,\n tween = Tween.to(tl, _setDefaults({\n ease: vars.ease || \"none\",\n lazy: false,\n immediateRender: false,\n time: endTime,\n overwrite: \"auto\",\n duration: vars.duration || Math.abs((endTime - (startAt && \"time\" in startAt ? startAt.time : tl._time)) / tl.timeScale()) || _tinyNum,\n onStart: function onStart() {\n tl.pause();\n\n if (!initted) {\n var duration = vars.duration || Math.abs((endTime - (startAt && \"time\" in startAt ? startAt.time : tl._time)) / tl.timeScale());\n tween._dur !== duration && _setDuration(tween, duration, 0, 1).render(tween._time, true, true);\n initted = 1;\n }\n\n _onStart && _onStart.apply(tween, onStartParams || []); //in case the user had an onStart in the vars - we don't want to overwrite it.\n }\n }, vars));\n\n return immediateRender ? tween.render(0) : tween;\n };\n\n _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) {\n return this.tweenTo(toPosition, _setDefaults({\n startAt: {\n time: _parsePosition(this, fromPosition)\n }\n }, vars));\n };\n\n _proto2.recent = function recent() {\n return this._recent;\n };\n\n _proto2.nextLabel = function nextLabel(afterTime) {\n if (afterTime === void 0) {\n afterTime = this._time;\n }\n\n return _getLabelInDirection(this, _parsePosition(this, afterTime));\n };\n\n _proto2.previousLabel = function previousLabel(beforeTime) {\n if (beforeTime === void 0) {\n beforeTime = this._time;\n }\n\n return _getLabelInDirection(this, _parsePosition(this, beforeTime), 1);\n };\n\n _proto2.currentLabel = function currentLabel(value) {\n return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum);\n };\n\n _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) {\n if (ignoreBeforeTime === void 0) {\n ignoreBeforeTime = 0;\n }\n\n var child = this._first,\n labels = this.labels,\n p;\n\n while (child) {\n if (child._start >= ignoreBeforeTime) {\n child._start += amount;\n child._end += amount;\n }\n\n child = child._next;\n }\n\n if (adjustLabels) {\n for (p in labels) {\n if (labels[p] >= ignoreBeforeTime) {\n labels[p] += amount;\n }\n }\n }\n\n return _uncache(this);\n };\n\n _proto2.invalidate = function invalidate(soft) {\n var child = this._first;\n this._lock = 0;\n\n while (child) {\n child.invalidate(soft);\n child = child._next;\n }\n\n return _Animation.prototype.invalidate.call(this, soft);\n };\n\n _proto2.clear = function clear(includeLabels) {\n if (includeLabels === void 0) {\n includeLabels = true;\n }\n\n var child = this._first,\n next;\n\n while (child) {\n next = child._next;\n this.remove(child);\n child = next;\n }\n\n this._dp && (this._time = this._tTime = this._pTime = 0);\n includeLabels && (this.labels = {});\n return _uncache(this);\n };\n\n _proto2.totalDuration = function totalDuration(value) {\n var max = 0,\n self = this,\n child = self._last,\n prevStart = _bigNum,\n prev,\n start,\n parent;\n\n if (arguments.length) {\n return self.timeScale((self._repeat < 0 ? self.duration() : self.totalDuration()) / (self.reversed() ? -value : value));\n }\n\n if (self._dirty) {\n parent = self.parent;\n\n while (child) {\n prev = child._prev; //record it here in case the tween changes position in the sequence...\n\n child._dirty && child.totalDuration(); //could change the tween._startTime, so make sure the animation's cache is clean before analyzing it.\n\n start = child._start;\n\n if (start > prevStart && self._sort && child._ts && !self._lock) {\n //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence\n self._lock = 1; //prevent endless recursive calls - there are methods that get triggered that check duration/totalDuration when we add().\n\n _addToTimeline(self, child, start - child._delay, 1)._lock = 0;\n } else {\n prevStart = start;\n }\n\n if (start < 0 && child._ts) {\n //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found.\n max -= start;\n\n if (!parent && !self._dp || parent && parent.smoothChildTiming) {\n self._start += start / self._ts;\n self._time -= start;\n self._tTime -= start;\n }\n\n self.shiftChildren(-start, false, -1e999);\n prevStart = 0;\n }\n\n child._end > max && child._ts && (max = child._end);\n child = prev;\n }\n\n _setDuration(self, self === _globalTimeline && self._time > max ? self._time : max, 1, 1);\n\n self._dirty = 0;\n }\n\n return self._tDur;\n };\n\n Timeline.updateRoot = function updateRoot(time) {\n if (_globalTimeline._ts) {\n _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline));\n\n _lastRenderedFrame = _ticker.frame;\n }\n\n if (_ticker.frame >= _nextGCFrame) {\n _nextGCFrame += _config.autoSleep || 120;\n var child = _globalTimeline._first;\n if (!child || !child._ts) if (_config.autoSleep && _ticker._listeners.length < 2) {\n while (child && !child._ts) {\n child = child._next;\n }\n\n child || _ticker.sleep();\n }\n }\n };\n\n return Timeline;\n}(Animation);\n\n_setDefaults(Timeline.prototype, {\n _lock: 0,\n _hasPause: 0,\n _forcing: 0\n});\n\nvar _addComplexStringPropTween = function _addComplexStringPropTween(target, prop, start, end, setter, stringFilter, funcParam) {\n //note: we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\n var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter),\n index = 0,\n matchIndex = 0,\n result,\n startNums,\n color,\n endNum,\n chunk,\n startNum,\n hasRandom,\n a;\n pt.b = start;\n pt.e = end;\n start += \"\"; //ensure values are strings\n\n end += \"\";\n\n if (hasRandom = ~end.indexOf(\"random(\")) {\n end = _replaceRandom(end);\n }\n\n if (stringFilter) {\n a = [start, end];\n stringFilter(a, target, prop); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\n\n start = a[0];\n end = a[1];\n }\n\n startNums = start.match(_complexStringNumExp) || [];\n\n while (result = _complexStringNumExp.exec(end)) {\n endNum = result[0];\n chunk = end.substring(index, result.index);\n\n if (color) {\n color = (color + 1) % 5;\n } else if (chunk.substr(-5) === \"rgba(\") {\n color = 1;\n }\n\n if (endNum !== startNums[matchIndex++]) {\n startNum = parseFloat(startNums[matchIndex - 1]) || 0; //these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.\n\n pt._pt = {\n _next: pt._pt,\n p: chunk || matchIndex === 1 ? chunk : \",\",\n //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n s: startNum,\n c: endNum.charAt(1) === \"=\" ? _parseRelative(startNum, endNum) - startNum : parseFloat(endNum) - startNum,\n m: color && color < 4 ? Math.round : 0\n };\n index = _complexStringNumExp.lastIndex;\n }\n }\n\n pt.c = index < end.length ? end.substring(index, end.length) : \"\"; //we use the \"c\" of the PropTween to store the final part of the string (after the last number)\n\n pt.fp = funcParam;\n\n if (_relExp.test(end) || hasRandom) {\n pt.e = 0; //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\n }\n\n this._pt = pt; //start the linked list with this new PropTween. Remember, we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\n\n return pt;\n},\n _addPropTween = function _addPropTween(target, prop, start, end, index, targets, modifier, stringFilter, funcParam, optional) {\n _isFunction(end) && (end = end(index || 0, target, targets));\n var currentValue = target[prop],\n parsedStart = start !== \"get\" ? start : !_isFunction(currentValue) ? currentValue : funcParam ? target[prop.indexOf(\"set\") || !_isFunction(target[\"get\" + prop.substr(3)]) ? prop : \"get\" + prop.substr(3)](funcParam) : target[prop](),\n setter = !_isFunction(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc,\n pt;\n\n if (_isString(end)) {\n if (~end.indexOf(\"random(\")) {\n end = _replaceRandom(end);\n }\n\n if (end.charAt(1) === \"=\") {\n pt = _parseRelative(parsedStart, end) + (getUnit(parsedStart) || 0);\n\n if (pt || pt === 0) {\n // to avoid isNaN, like if someone passes in a value like \"!= whatever\"\n end = pt;\n }\n }\n }\n\n if (!optional || parsedStart !== end || _forceAllPropTweens) {\n if (!isNaN(parsedStart * end) && end !== \"\") {\n // fun fact: any number multiplied by \"\" is evaluated as the number 0!\n pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === \"boolean\" ? _renderBoolean : _renderPlain, 0, setter);\n funcParam && (pt.fp = funcParam);\n modifier && pt.modifier(modifier, this, target);\n return this._pt = pt;\n }\n\n !currentValue && !(prop in target) && _missingPlugin(prop, end);\n return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam);\n }\n},\n //creates a copy of the vars object and processes any function-based values (putting the resulting values directly into the copy) as well as strings with \"random()\" in them. It does NOT process relative values.\n_processVars = function _processVars(vars, index, target, targets, tween) {\n _isFunction(vars) && (vars = _parseFuncOrString(vars, tween, index, target, targets));\n\n if (!_isObject(vars) || vars.style && vars.nodeType || _isArray(vars) || _isTypedArray(vars)) {\n return _isString(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars;\n }\n\n var copy = {},\n p;\n\n for (p in vars) {\n copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets);\n }\n\n return copy;\n},\n _checkPlugin = function _checkPlugin(property, vars, tween, index, target, targets) {\n var plugin, pt, ptLookup, i;\n\n if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) {\n tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority);\n\n if (tween !== _quickTween) {\n ptLookup = tween._ptLookup[tween._targets.indexOf(target)]; //note: we can't use tween._ptLookup[index] because for staggered tweens, the index from the fullTargets array won't match what it is in each individual tween that spawns from the stagger.\n\n i = plugin._props.length;\n\n while (i--) {\n ptLookup[plugin._props[i]] = pt;\n }\n }\n }\n\n return plugin;\n},\n _overwritingTween,\n //store a reference temporarily so we can avoid overwriting itself.\n_forceAllPropTweens,\n _initTween = function _initTween(tween, time, tTime) {\n var vars = tween.vars,\n ease = vars.ease,\n startAt = vars.startAt,\n immediateRender = vars.immediateRender,\n lazy = vars.lazy,\n onUpdate = vars.onUpdate,\n onUpdateParams = vars.onUpdateParams,\n callbackScope = vars.callbackScope,\n runBackwards = vars.runBackwards,\n yoyoEase = vars.yoyoEase,\n keyframes = vars.keyframes,\n autoRevert = vars.autoRevert,\n dur = tween._dur,\n prevStartAt = tween._startAt,\n targets = tween._targets,\n parent = tween.parent,\n fullTargets = parent && parent.data === \"nested\" ? parent.vars.targets : targets,\n autoOverwrite = tween._overwrite === \"auto\" && !_suppressOverwrites,\n tl = tween.timeline,\n cleanVars,\n i,\n p,\n pt,\n target,\n hasPriority,\n gsData,\n harness,\n plugin,\n ptLookup,\n index,\n harnessVars,\n overwritten;\n tl && (!keyframes || !ease) && (ease = \"none\");\n tween._ease = _parseEase(ease, _defaults.ease);\n tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults.ease)) : 0;\n\n if (yoyoEase && tween._yoyo && !tween._repeat) {\n //there must have been a parent timeline with yoyo:true that is currently in its yoyo phase, so flip the eases.\n yoyoEase = tween._yEase;\n tween._yEase = tween._ease;\n tween._ease = yoyoEase;\n }\n\n tween._from = !tl && !!vars.runBackwards; //nested timelines should never run backwards - the backwards-ness is in the child tweens.\n\n if (!tl || keyframes && !vars.stagger) {\n //if there's an internal timeline, skip all the parsing because we passed that task down the chain.\n harness = targets[0] ? _getCache(targets[0]).harness : 0;\n harnessVars = harness && vars[harness.prop]; //someone may need to specify CSS-specific values AND non-CSS values, like if the element has an \"x\" property plus it's a standard DOM element. We allow people to distinguish by wrapping plugin-specific stuff in a css:{} object for example.\n\n cleanVars = _copyExcluding(vars, _reservedProps);\n\n if (prevStartAt) {\n prevStartAt._zTime < 0 && prevStartAt.progress(1); // in case it's a lazy startAt that hasn't rendered yet.\n\n time < 0 && runBackwards && immediateRender && !autoRevert ? prevStartAt.render(-1, true) : prevStartAt.revert(runBackwards && dur ? _revertConfigNoKill : _startAtRevertConfig); // if it's a \"startAt\" (not \"from()\" or runBackwards: true), we only need to do a shallow revert (keep transforms cached in CSSPlugin)\n // don't just _removeFromParent(prevStartAt.render(-1, true)) because that'll leave inline styles. We're creating a new _startAt for \"startAt\" tweens that re-capture things to ensure that if the pre-tween values changed since the tween was created, they're recorded.\n\n prevStartAt._lazy = 0;\n }\n\n if (startAt) {\n _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults({\n data: \"isStart\",\n overwrite: false,\n parent: parent,\n immediateRender: true,\n lazy: !prevStartAt && _isNotFalse(lazy),\n startAt: null,\n delay: 0,\n onUpdate: onUpdate,\n onUpdateParams: onUpdateParams,\n callbackScope: callbackScope,\n stagger: 0\n }, startAt))); //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, from, to).fromTo(e, to, from);\n\n\n tween._startAt._dp = 0; // don't allow it to get put back into root timeline! Like when revert() is called and totalTime() gets set.\n\n tween._startAt._sat = tween; // used in globalTime(). _sat stands for _startAtTween\n\n time < 0 && (_reverting || !immediateRender && !autoRevert) && tween._startAt.revert(_revertConfigNoKill); // rare edge case, like if a render is forced in the negative direction of a non-initted tween.\n\n if (immediateRender) {\n if (dur && time <= 0 && tTime <= 0) {\n // check tTime here because in the case of a yoyo tween whose playhead gets pushed to the end like tween.progress(1), we should allow it through so that the onComplete gets fired properly.\n time && (tween._zTime = time);\n return; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a Timeline, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n }\n }\n } else if (runBackwards && dur) {\n //from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\n if (!prevStartAt) {\n time && (immediateRender = false); //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\n\n p = _setDefaults({\n overwrite: false,\n data: \"isFromStart\",\n //we tag the tween with as \"isFromStart\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \"from()\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\n lazy: immediateRender && !prevStartAt && _isNotFalse(lazy),\n immediateRender: immediateRender,\n //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\n stagger: 0,\n parent: parent //ensures that nested tweens that had a stagger are handled properly, like gsap.from(\".class\", {y:gsap.utils.wrap([-100,100])})\n\n }, cleanVars);\n harnessVars && (p[harness.prop] = harnessVars); // in case someone does something like .from(..., {css:{}})\n\n _removeFromParent(tween._startAt = Tween.set(targets, p));\n\n tween._startAt._dp = 0; // don't allow it to get put back into root timeline!\n\n tween._startAt._sat = tween; // used in globalTime()\n\n time < 0 && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween._startAt.render(-1, true));\n tween._zTime = time;\n\n if (!immediateRender) {\n _initTween(tween._startAt, _tinyNum, _tinyNum); //ensures that the initial values are recorded\n\n } else if (!time) {\n return;\n }\n }\n }\n\n tween._pt = tween._ptCache = 0;\n lazy = dur && _isNotFalse(lazy) || lazy && !dur;\n\n for (i = 0; i < targets.length; i++) {\n target = targets[i];\n gsData = target._gsap || _harness(targets)[i]._gsap;\n tween._ptLookup[i] = ptLookup = {};\n _lazyLookup[gsData.id] && _lazyTweens.length && _lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\n\n index = fullTargets === targets ? i : fullTargets.indexOf(target);\n\n if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) {\n tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority);\n\n plugin._props.forEach(function (name) {\n ptLookup[name] = pt;\n });\n\n plugin.priority && (hasPriority = 1);\n }\n\n if (!harness || harnessVars) {\n for (p in cleanVars) {\n if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) {\n plugin.priority && (hasPriority = 1);\n } else {\n ptLookup[p] = pt = _addPropTween.call(tween, target, p, \"get\", cleanVars[p], index, fullTargets, 0, vars.stringFilter);\n }\n }\n }\n\n tween._op && tween._op[i] && tween.kill(target, tween._op[i]);\n\n if (autoOverwrite && tween._pt) {\n _overwritingTween = tween;\n\n _globalTimeline.killTweensOf(target, ptLookup, tween.globalTime(time)); // make sure the overwriting doesn't overwrite THIS tween!!!\n\n\n overwritten = !tween.parent;\n _overwritingTween = 0;\n }\n\n tween._pt && lazy && (_lazyLookup[gsData.id] = 1);\n }\n\n hasPriority && _sortPropTweensByPriority(tween);\n tween._onInit && tween._onInit(tween); //plugins like RoundProps must wait until ALL of the PropTweens are instantiated. In the plugin's init() function, it sets the _onInit on the tween instance. May not be pretty/intuitive, but it's fast and keeps file size down.\n }\n\n tween._onUpdate = onUpdate;\n tween._initted = (!tween._op || tween._pt) && !overwritten; // if overwrittenProps resulted in the entire tween being killed, do NOT flag it as initted or else it may render for one tick.\n\n keyframes && time <= 0 && tl.render(_bigNum, true, true); // if there's a 0% keyframe, it'll render in the \"before\" state for any staggered/delayed animations thus when the following tween initializes, it'll use the \"before\" state instead of the \"after\" state as the initial values.\n},\n _updatePropTweens = function _updatePropTweens(tween, property, value, start, startIsRelative, ratio, time) {\n var ptCache = (tween._pt && tween._ptCache || (tween._ptCache = {}))[property],\n pt,\n rootPT,\n lookup,\n i;\n\n if (!ptCache) {\n ptCache = tween._ptCache[property] = [];\n lookup = tween._ptLookup;\n i = tween._targets.length;\n\n while (i--) {\n pt = lookup[i][property];\n\n if (pt && pt.d && pt.d._pt) {\n // it's a plugin, so find the nested PropTween\n pt = pt.d._pt;\n\n while (pt && pt.p !== property && pt.fp !== property) {\n // \"fp\" is functionParam for things like setting CSS variables which require .setProperty(\"--var-name\", value)\n pt = pt._next;\n }\n }\n\n if (!pt) {\n // there is no PropTween associated with that property, so we must FORCE one to be created and ditch out of this\n // if the tween has other properties that already rendered at new positions, we'd normally have to rewind to put them back like tween.render(0, true) before forcing an _initTween(), but that can create another edge case like tweening a timeline's progress would trigger onUpdates to fire which could move other things around. It's better to just inform users that .resetTo() should ONLY be used for tweens that already have that property. For example, you can't gsap.to(...{ y: 0 }) and then tween.restTo(\"x\", 200) for example.\n _forceAllPropTweens = 1; // otherwise, when we _addPropTween() and it finds no change between the start and end values, it skips creating a PropTween (for efficiency...why tween when there's no difference?) but in this case we NEED that PropTween created so we can edit it.\n\n tween.vars[property] = \"+=0\";\n\n _initTween(tween, time);\n\n _forceAllPropTweens = 0;\n return 1;\n }\n\n ptCache.push(pt);\n }\n }\n\n i = ptCache.length;\n\n while (i--) {\n rootPT = ptCache[i];\n pt = rootPT._pt || rootPT; // complex values may have nested PropTweens. We only accommodate the FIRST value.\n\n pt.s = (start || start === 0) && !startIsRelative ? start : pt.s + (start || 0) + ratio * pt.c;\n pt.c = value - pt.s;\n rootPT.e && (rootPT.e = _round(value) + getUnit(rootPT.e)); // mainly for CSSPlugin (end value)\n\n rootPT.b && (rootPT.b = pt.s + getUnit(rootPT.b)); // (beginning value)\n }\n},\n _addAliasesToVars = function _addAliasesToVars(targets, vars) {\n var harness = targets[0] ? _getCache(targets[0]).harness : 0,\n propertyAliases = harness && harness.aliases,\n copy,\n p,\n i,\n aliases;\n\n if (!propertyAliases) {\n return vars;\n }\n\n copy = _merge({}, vars);\n\n for (p in propertyAliases) {\n if (p in copy) {\n aliases = propertyAliases[p].split(\",\");\n i = aliases.length;\n\n while (i--) {\n copy[aliases[i]] = copy[p];\n }\n }\n }\n\n return copy;\n},\n // parses multiple formats, like {\"0%\": {x: 100}, {\"50%\": {x: -20}} and { x: {\"0%\": 100, \"50%\": -20} }, and an \"ease\" can be set on any object. We populate an \"allProps\" object with an Array for each property, like {x: [{}, {}], y:[{}, {}]} with data for each property tween. The objects have a \"t\" (time), \"v\", (value), and \"e\" (ease) property. This allows us to piece together a timeline later.\n_parseKeyframe = function _parseKeyframe(prop, obj, allProps, easeEach) {\n var ease = obj.ease || easeEach || \"power1.inOut\",\n p,\n a;\n\n if (_isArray(obj)) {\n a = allProps[prop] || (allProps[prop] = []); // t = time (out of 100), v = value, e = ease\n\n obj.forEach(function (value, i) {\n return a.push({\n t: i / (obj.length - 1) * 100,\n v: value,\n e: ease\n });\n });\n } else {\n for (p in obj) {\n a = allProps[p] || (allProps[p] = []);\n p === \"ease\" || a.push({\n t: parseFloat(prop),\n v: obj[p],\n e: ease\n });\n }\n }\n},\n _parseFuncOrString = function _parseFuncOrString(value, tween, i, target, targets) {\n return _isFunction(value) ? value.call(tween, i, target, targets) : _isString(value) && ~value.indexOf(\"random(\") ? _replaceRandom(value) : value;\n},\n _staggerTweenProps = _callbackNames + \"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase,autoRevert\",\n _staggerPropsToSkip = {};\n\n_forEachName(_staggerTweenProps + \",id,stagger,delay,duration,paused,scrollTrigger\", function (name) {\n return _staggerPropsToSkip[name] = 1;\n});\n/*\n * --------------------------------------------------------------------------------------\n * TWEEN\n * --------------------------------------------------------------------------------------\n */\n\n\nexport var Tween = /*#__PURE__*/function (_Animation2) {\n _inheritsLoose(Tween, _Animation2);\n\n function Tween(targets, vars, position, skipInherit) {\n var _this3;\n\n if (typeof vars === \"number\") {\n position.duration = vars;\n vars = position;\n position = null;\n }\n\n _this3 = _Animation2.call(this, skipInherit ? vars : _inheritDefaults(vars)) || this;\n var _this3$vars = _this3.vars,\n duration = _this3$vars.duration,\n delay = _this3$vars.delay,\n immediateRender = _this3$vars.immediateRender,\n stagger = _this3$vars.stagger,\n overwrite = _this3$vars.overwrite,\n keyframes = _this3$vars.keyframes,\n defaults = _this3$vars.defaults,\n scrollTrigger = _this3$vars.scrollTrigger,\n yoyoEase = _this3$vars.yoyoEase,\n parent = vars.parent || _globalTimeline,\n parsedTargets = (_isArray(targets) || _isTypedArray(targets) ? _isNumber(targets[0]) : \"length\" in vars) ? [targets] : toArray(targets),\n tl,\n i,\n copy,\n l,\n p,\n curTarget,\n staggerFunc,\n staggerVarsToMerge;\n _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn(\"GSAP target \" + targets + \" not found. https://greensock.com\", !_config.nullTargetWarn) || [];\n _this3._ptLookup = []; //PropTween lookup. An array containing an object for each target, having keys for each tweening property\n\n _this3._overwrite = overwrite;\n\n if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {\n vars = _this3.vars;\n tl = _this3.timeline = new Timeline({\n data: \"nested\",\n defaults: defaults || {},\n targets: parent && parent.data === \"nested\" ? parent.vars.targets : parsedTargets\n }); // we need to store the targets because for staggers and keyframes, we end up creating an individual tween for each but function-based values need to know the index and the whole Array of targets.\n\n tl.kill();\n tl.parent = tl._dp = _assertThisInitialized(_this3);\n tl._start = 0;\n\n if (stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {\n l = parsedTargets.length;\n staggerFunc = stagger && distribute(stagger);\n\n if (_isObject(stagger)) {\n //users can pass in callbacks like onStart/onComplete in the stagger object. These should fire with each individual tween.\n for (p in stagger) {\n if (~_staggerTweenProps.indexOf(p)) {\n staggerVarsToMerge || (staggerVarsToMerge = {});\n staggerVarsToMerge[p] = stagger[p];\n }\n }\n }\n\n for (i = 0; i < l; i++) {\n copy = _copyExcluding(vars, _staggerPropsToSkip);\n copy.stagger = 0;\n yoyoEase && (copy.yoyoEase = yoyoEase);\n staggerVarsToMerge && _merge(copy, staggerVarsToMerge);\n curTarget = parsedTargets[i]; //don't just copy duration or delay because if they're a string or function, we'd end up in an infinite loop because _isFuncOrString() would evaluate as true in the child tweens, entering this loop, etc. So we parse the value straight from vars and default to 0.\n\n copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets);\n copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay;\n\n if (!stagger && l === 1 && copy.delay) {\n // if someone does delay:\"random(1, 5)\", repeat:-1, for example, the delay shouldn't be inside the repeat.\n _this3._delay = delay = copy.delay;\n _this3._start += delay;\n copy.delay = 0;\n }\n\n tl.to(curTarget, copy, staggerFunc ? staggerFunc(i, curTarget, parsedTargets) : 0);\n tl._ease = _easeMap.none;\n }\n\n tl.duration() ? duration = delay = 0 : _this3.timeline = 0; // if the timeline's duration is 0, we don't need a timeline internally!\n } else if (keyframes) {\n _inheritDefaults(_setDefaults(tl.vars.defaults, {\n ease: \"none\"\n }));\n\n tl._ease = _parseEase(keyframes.ease || vars.ease || \"none\");\n var time = 0,\n a,\n kf,\n v;\n\n if (_isArray(keyframes)) {\n keyframes.forEach(function (frame) {\n return tl.to(parsedTargets, frame, \">\");\n });\n tl.duration(); // to ensure tl._dur is cached because we tap into it for performance purposes in the render() method.\n } else {\n copy = {};\n\n for (p in keyframes) {\n p === \"ease\" || p === \"easeEach\" || _parseKeyframe(p, keyframes[p], copy, keyframes.easeEach);\n }\n\n for (p in copy) {\n a = copy[p].sort(function (a, b) {\n return a.t - b.t;\n });\n time = 0;\n\n for (i = 0; i < a.length; i++) {\n kf = a[i];\n v = {\n ease: kf.e,\n duration: (kf.t - (i ? a[i - 1].t : 0)) / 100 * duration\n };\n v[p] = kf.v;\n tl.to(parsedTargets, v, time);\n time += v.duration;\n }\n }\n\n tl.duration() < duration && tl.to({}, {\n duration: duration - tl.duration()\n }); // in case keyframes didn't go to 100%\n }\n }\n\n duration || _this3.duration(duration = tl.duration());\n } else {\n _this3.timeline = 0; //speed optimization, faster lookups (no going up the prototype chain)\n }\n\n if (overwrite === true && !_suppressOverwrites) {\n _overwritingTween = _assertThisInitialized(_this3);\n\n _globalTimeline.killTweensOf(parsedTargets);\n\n _overwritingTween = 0;\n }\n\n _addToTimeline(parent, _assertThisInitialized(_this3), position);\n\n vars.reversed && _this3.reverse();\n vars.paused && _this3.paused(true);\n\n if (immediateRender || !duration && !keyframes && _this3._start === _roundPrecise(parent._time) && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && parent.data !== \"nested\") {\n _this3._tTime = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\n _this3.render(Math.max(0, -delay) || 0); //in case delay is negative\n\n }\n\n scrollTrigger && _scrollTrigger(_assertThisInitialized(_this3), scrollTrigger);\n return _this3;\n }\n\n var _proto3 = Tween.prototype;\n\n _proto3.render = function render(totalTime, suppressEvents, force) {\n var prevTime = this._time,\n tDur = this._tDur,\n dur = this._dur,\n isNegative = totalTime < 0,\n tTime = totalTime > tDur - _tinyNum && !isNegative ? tDur : totalTime < _tinyNum ? 0 : totalTime,\n time,\n pt,\n iteration,\n cycleDuration,\n prevIteration,\n isYoyo,\n ratio,\n timeline,\n yoyoEase;\n\n if (!dur) {\n _renderZeroDurationTween(this, totalTime, suppressEvents, force);\n } else if (tTime !== this._tTime || !totalTime || force || !this._initted && this._tTime || this._startAt && this._zTime < 0 !== isNegative) {\n //this senses if we're crossing over the start time, in which case we must record _zTime and force the render, but we do it in this lengthy conditional way for performance reasons (usually we can skip the calculations): this._initted && (this._zTime < 0) !== (totalTime < 0)\n time = tTime;\n timeline = this.timeline;\n\n if (this._repeat) {\n //adjust the time for repeats and yoyos\n cycleDuration = dur + this._rDelay;\n\n if (this._repeat < -1 && isNegative) {\n return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\n }\n\n time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\n if (tTime === tDur) {\n // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)\n iteration = this._repeat;\n time = dur;\n } else {\n iteration = ~~(tTime / cycleDuration);\n\n if (iteration && iteration === tTime / cycleDuration) {\n time = dur;\n iteration--;\n }\n\n time > dur && (time = dur);\n }\n\n isYoyo = this._yoyo && iteration & 1;\n\n if (isYoyo) {\n yoyoEase = this._yEase;\n time = dur - time;\n }\n\n prevIteration = _animationCycle(this._tTime, cycleDuration);\n\n if (time === prevTime && !force && this._initted) {\n //could be during the repeatDelay part. No need to render and fire callbacks.\n this._tTime = tTime;\n return this;\n }\n\n if (iteration !== prevIteration) {\n timeline && this._yEase && _propagateYoyoEase(timeline, isYoyo); //repeatRefresh functionality\n\n if (this.vars.repeatRefresh && !isYoyo && !this._lock) {\n this._lock = force = 1; //force, otherwise if lazy is true, the _attemptInitTween() will return and we'll jump out and get caught bouncing on each tick.\n\n this.render(_roundPrecise(cycleDuration * iteration), true).invalidate()._lock = 0;\n }\n }\n }\n\n if (!this._initted) {\n if (_attemptInitTween(this, isNegative ? totalTime : time, force, suppressEvents, tTime)) {\n this._tTime = 0; // in constructor if immediateRender is true, we set _tTime to -_tinyNum to have the playhead cross the starting point but we can't leave _tTime as a negative number.\n\n return this;\n }\n\n if (prevTime !== this._time) {\n // rare edge case - during initialization, an onUpdate in the _startAt (.fromTo()) might force this tween to render at a different spot in which case we should ditch this render() call so that it doesn't revert the values.\n return this;\n }\n\n if (dur !== this._dur) {\n // while initting, a plugin like InertiaPlugin might alter the duration, so rerun from the start to ensure everything renders as it should.\n return this.render(totalTime, suppressEvents, force);\n }\n }\n\n this._tTime = tTime;\n this._time = time;\n\n if (!this._act && this._ts) {\n this._act = 1; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.\n\n this._lazy = 0;\n }\n\n this.ratio = ratio = (yoyoEase || this._ease)(time / dur);\n\n if (this._from) {\n this.ratio = ratio = 1 - ratio;\n }\n\n if (time && !prevTime && !suppressEvents && !iteration) {\n _callback(this, \"onStart\");\n\n if (this._tTime !== tTime) {\n // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.\n return this;\n }\n }\n\n pt = this._pt;\n\n while (pt) {\n pt.r(ratio, pt.d);\n pt = pt._next;\n }\n\n timeline && timeline.render(totalTime < 0 ? totalTime : !time && isYoyo ? -_tinyNum : timeline._dur * timeline._ease(time / this._dur), suppressEvents, force) || this._startAt && (this._zTime = totalTime);\n\n if (this._onUpdate && !suppressEvents) {\n isNegative && _rewindStartAt(this, totalTime, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\n _callback(this, \"onUpdate\");\n }\n\n this._repeat && iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent && _callback(this, \"onRepeat\");\n\n if ((tTime === this._tDur || !tTime) && this._tTime === tTime) {\n isNegative && !this._onUpdate && _rewindStartAt(this, totalTime, true, true);\n (totalTime || !dur) && (tTime === this._tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if we're rendering at exactly a time of 0, as there could be autoRevert values that should get set on the next tick (if the playhead goes backward beyond the startTime, negative totalTime). Don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.\n\n if (!suppressEvents && !(isNegative && !prevTime) && (tTime || prevTime || isYoyo)) {\n // if prevTime and tTime are zero, we shouldn't fire the onReverseComplete. This could happen if you gsap.to(... {paused:true}).play();\n _callback(this, tTime === tDur ? \"onComplete\" : \"onReverseComplete\", true);\n\n this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\n }\n }\n }\n\n return this;\n };\n\n _proto3.targets = function targets() {\n return this._targets;\n };\n\n _proto3.invalidate = function invalidate(soft) {\n // \"soft\" gives us a way to clear out everything EXCEPT the recorded pre-\"from\" portion of from() tweens. Otherwise, for example, if you tween.progress(1).render(0, true true).invalidate(), the \"from\" values would persist and then on the next render, the from() tweens would initialize and the current value would match the \"from\" values, thus animate from the same value to the same value (no animation). We tap into this in ScrollTrigger's refresh() where we must push a tween to completion and then back again but honor its init state in case the tween is dependent on another tween further up on the page.\n (!soft || !this.vars.runBackwards) && (this._startAt = 0);\n this._pt = this._op = this._onUpdate = this._lazy = this.ratio = 0;\n this._ptLookup = [];\n this.timeline && this.timeline.invalidate(soft);\n return _Animation2.prototype.invalidate.call(this, soft);\n };\n\n _proto3.resetTo = function resetTo(property, value, start, startIsRelative) {\n _tickerActive || _ticker.wake();\n this._ts || this.play();\n var time = Math.min(this._dur, (this._dp._time - this._start) * this._ts),\n ratio;\n this._initted || _initTween(this, time);\n ratio = this._ease(time / this._dur); // don't just get tween.ratio because it may not have rendered yet.\n // possible future addition to allow an object with multiple values to update, like tween.resetTo({x: 100, y: 200}); At this point, it doesn't seem worth the added kb given the fact that most users will likely opt for the convenient gsap.quickTo() way of interacting with this method.\n // if (_isObject(property)) { // performance optimization\n // \tfor (p in property) {\n // \t\tif (_updatePropTweens(this, p, property[p], value ? value[p] : null, start, ratio, time)) {\n // \t\t\treturn this.resetTo(property, value, start, startIsRelative); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again.\n // \t\t}\n // \t}\n // } else {\n\n if (_updatePropTweens(this, property, value, start, startIsRelative, ratio, time)) {\n return this.resetTo(property, value, start, startIsRelative); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again.\n } //}\n\n\n _alignPlayhead(this, 0);\n\n this.parent || _addLinkedListItem(this._dp, this, \"_first\", \"_last\", this._dp._sort ? \"_start\" : 0);\n return this.render(0);\n };\n\n _proto3.kill = function kill(targets, vars) {\n if (vars === void 0) {\n vars = \"all\";\n }\n\n if (!targets && (!vars || vars === \"all\")) {\n this._lazy = this._pt = 0;\n return this.parent ? _interrupt(this) : this;\n }\n\n if (this.timeline) {\n var tDur = this.timeline.totalDuration();\n this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true)._first || _interrupt(this); // if nothing is left tweening, interrupt.\n\n this.parent && tDur !== this.timeline.totalDuration() && _setDuration(this, this._dur * this.timeline._tDur / tDur, 0, 1); // if a nested tween is killed that changes the duration, it should affect this tween's duration. We must use the ratio, though, because sometimes the internal timeline is stretched like for keyframes where they don't all add up to whatever the parent tween's duration was set to.\n\n return this;\n }\n\n var parsedTargets = this._targets,\n killingTargets = targets ? toArray(targets) : parsedTargets,\n propTweenLookup = this._ptLookup,\n firstPT = this._pt,\n overwrittenProps,\n curLookup,\n curOverwriteProps,\n props,\n p,\n pt,\n i;\n\n if ((!vars || vars === \"all\") && _arraysMatch(parsedTargets, killingTargets)) {\n vars === \"all\" && (this._pt = 0);\n return _interrupt(this);\n }\n\n overwrittenProps = this._op = this._op || [];\n\n if (vars !== \"all\") {\n //so people can pass in a comma-delimited list of property names\n if (_isString(vars)) {\n p = {};\n\n _forEachName(vars, function (name) {\n return p[name] = 1;\n });\n\n vars = p;\n }\n\n vars = _addAliasesToVars(parsedTargets, vars);\n }\n\n i = parsedTargets.length;\n\n while (i--) {\n if (~killingTargets.indexOf(parsedTargets[i])) {\n curLookup = propTweenLookup[i];\n\n if (vars === \"all\") {\n overwrittenProps[i] = vars;\n props = curLookup;\n curOverwriteProps = {};\n } else {\n curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {};\n props = vars;\n }\n\n for (p in props) {\n pt = curLookup && curLookup[p];\n\n if (pt) {\n if (!(\"kill\" in pt.d) || pt.d.kill(p) === true) {\n _removeLinkedListItem(this, pt, \"_pt\");\n }\n\n delete curLookup[p];\n }\n\n if (curOverwriteProps !== \"all\") {\n curOverwriteProps[p] = 1;\n }\n }\n }\n }\n\n this._initted && !this._pt && firstPT && _interrupt(this); //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\n\n return this;\n };\n\n Tween.to = function to(targets, vars) {\n return new Tween(targets, vars, arguments[2]);\n };\n\n Tween.from = function from(targets, vars) {\n return _createTweenType(1, arguments);\n };\n\n Tween.delayedCall = function delayedCall(delay, callback, params, scope) {\n return new Tween(callback, 0, {\n immediateRender: false,\n lazy: false,\n overwrite: false,\n delay: delay,\n onComplete: callback,\n onReverseComplete: callback,\n onCompleteParams: params,\n onReverseCompleteParams: params,\n callbackScope: scope\n }); // we must use onReverseComplete too for things like timeline.add(() => {...}) which should be triggered in BOTH directions (forward and reverse)\n };\n\n Tween.fromTo = function fromTo(targets, fromVars, toVars) {\n return _createTweenType(2, arguments);\n };\n\n Tween.set = function set(targets, vars) {\n vars.duration = 0;\n vars.repeatDelay || (vars.repeat = 0);\n return new Tween(targets, vars);\n };\n\n Tween.killTweensOf = function killTweensOf(targets, props, onlyActive) {\n return _globalTimeline.killTweensOf(targets, props, onlyActive);\n };\n\n return Tween;\n}(Animation);\n\n_setDefaults(Tween.prototype, {\n _targets: [],\n _lazy: 0,\n _startAt: 0,\n _op: 0,\n _onInit: 0\n}); //add the pertinent timeline methods to Tween instances so that users can chain conveniently and create a timeline automatically. (removed due to concerns that it'd ultimately add to more confusion especially for beginners)\n// _forEachName(\"to,from,fromTo,set,call,add,addLabel,addPause\", name => {\n// \tTween.prototype[name] = function() {\n// \t\tlet tl = new Timeline();\n// \t\treturn _addToTimeline(tl, this)[name].apply(tl, toArray(arguments));\n// \t}\n// });\n//for backward compatibility. Leverage the timeline calls.\n\n\n_forEachName(\"staggerTo,staggerFrom,staggerFromTo\", function (name) {\n Tween[name] = function () {\n var tl = new Timeline(),\n params = _slice.call(arguments, 0);\n\n params.splice(name === \"staggerFromTo\" ? 5 : 4, 0, 0);\n return tl[name].apply(tl, params);\n };\n});\n/*\n * --------------------------------------------------------------------------------------\n * PROPTWEEN\n * --------------------------------------------------------------------------------------\n */\n\n\nvar _setterPlain = function _setterPlain(target, property, value) {\n return target[property] = value;\n},\n _setterFunc = function _setterFunc(target, property, value) {\n return target[property](value);\n},\n _setterFuncWithParam = function _setterFuncWithParam(target, property, value, data) {\n return target[property](data.fp, value);\n},\n _setterAttribute = function _setterAttribute(target, property, value) {\n return target.setAttribute(property, value);\n},\n _getSetter = function _getSetter(target, property) {\n return _isFunction(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain;\n},\n _renderPlain = function _renderPlain(ratio, data) {\n return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 1000000) / 1000000, data);\n},\n _renderBoolean = function _renderBoolean(ratio, data) {\n return data.set(data.t, data.p, !!(data.s + data.c * ratio), data);\n},\n _renderComplexString = function _renderComplexString(ratio, data) {\n var pt = data._pt,\n s = \"\";\n\n if (!ratio && data.b) {\n //b = beginning string\n s = data.b;\n } else if (ratio === 1 && data.e) {\n //e = ending string\n s = data.e;\n } else {\n while (pt) {\n s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 10000) / 10000) + s; //we use the \"p\" property for the text inbetween (like a suffix). And in the context of a complex string, the modifier (m) is typically just Math.round(), like for RGB colors.\n\n pt = pt._next;\n }\n\n s += data.c; //we use the \"c\" of the PropTween to store the final chunk of non-numeric text.\n }\n\n data.set(data.t, data.p, s, data);\n},\n _renderPropTweens = function _renderPropTweens(ratio, data) {\n var pt = data._pt;\n\n while (pt) {\n pt.r(ratio, pt.d);\n pt = pt._next;\n }\n},\n _addPluginModifier = function _addPluginModifier(modifier, tween, target, property) {\n var pt = this._pt,\n next;\n\n while (pt) {\n next = pt._next;\n pt.p === property && pt.modifier(modifier, tween, target);\n pt = next;\n }\n},\n _killPropTweensOf = function _killPropTweensOf(property) {\n var pt = this._pt,\n hasNonDependentRemaining,\n next;\n\n while (pt) {\n next = pt._next;\n\n if (pt.p === property && !pt.op || pt.op === property) {\n _removeLinkedListItem(this, pt, \"_pt\");\n } else if (!pt.dep) {\n hasNonDependentRemaining = 1;\n }\n\n pt = next;\n }\n\n return !hasNonDependentRemaining;\n},\n _setterWithModifier = function _setterWithModifier(target, property, value, data) {\n data.mSet(target, property, data.m.call(data.tween, value, data.mt), data);\n},\n _sortPropTweensByPriority = function _sortPropTweensByPriority(parent) {\n var pt = parent._pt,\n next,\n pt2,\n first,\n last; //sorts the PropTween linked list in order of priority because some plugins need to do their work after ALL of the PropTweens were created (like RoundPropsPlugin and ModifiersPlugin)\n\n while (pt) {\n next = pt._next;\n pt2 = first;\n\n while (pt2 && pt2.pr > pt.pr) {\n pt2 = pt2._next;\n }\n\n if (pt._prev = pt2 ? pt2._prev : last) {\n pt._prev._next = pt;\n } else {\n first = pt;\n }\n\n if (pt._next = pt2) {\n pt2._prev = pt;\n } else {\n last = pt;\n }\n\n pt = next;\n }\n\n parent._pt = first;\n}; //PropTween key: t = target, p = prop, r = renderer, d = data, s = start, c = change, op = overwriteProperty (ONLY populated when it's different than p), pr = priority, _next/_prev for the linked list siblings, set = setter, m = modifier, mSet = modifierSetter (the original setter, before a modifier was added)\n\n\nexport var PropTween = /*#__PURE__*/function () {\n function PropTween(next, target, prop, start, change, renderer, data, setter, priority) {\n this.t = target;\n this.s = start;\n this.c = change;\n this.p = prop;\n this.r = renderer || _renderPlain;\n this.d = data || this;\n this.set = setter || _setterPlain;\n this.pr = priority || 0;\n this._next = next;\n\n if (next) {\n next._prev = this;\n }\n }\n\n var _proto4 = PropTween.prototype;\n\n _proto4.modifier = function modifier(func, tween, target) {\n this.mSet = this.mSet || this.set; //in case it was already set (a PropTween can only have one modifier)\n\n this.set = _setterWithModifier;\n this.m = func;\n this.mt = target; //modifier target\n\n this.tween = tween;\n };\n\n return PropTween;\n}(); //Initialization tasks\n\n_forEachName(_callbackNames + \"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger\", function (name) {\n return _reservedProps[name] = 1;\n});\n\n_globals.TweenMax = _globals.TweenLite = Tween;\n_globals.TimelineLite = _globals.TimelineMax = Timeline;\n_globalTimeline = new Timeline({\n sortChildren: false,\n defaults: _defaults,\n autoRemoveChildren: true,\n id: \"root\",\n smoothChildTiming: true\n});\n_config.stringFilter = _colorStringFilter;\n\nvar _media = [],\n _listeners = {},\n _emptyArray = [],\n _lastMediaTime = 0,\n _dispatch = function _dispatch(type) {\n return (_listeners[type] || _emptyArray).map(function (f) {\n return f();\n });\n},\n _onMediaChange = function _onMediaChange() {\n var time = Date.now(),\n matches = [];\n\n if (time - _lastMediaTime > 2) {\n _dispatch(\"matchMediaInit\");\n\n _media.forEach(function (c) {\n var queries = c.queries,\n conditions = c.conditions,\n match,\n p,\n anyMatch,\n toggled;\n\n for (p in queries) {\n match = _win.matchMedia(queries[p]).matches; // Firefox doesn't update the \"matches\" property of the MediaQueryList object correctly - it only does so as it calls its change handler - so we must re-create a media query here to ensure it's accurate.\n\n match && (anyMatch = 1);\n\n if (match !== conditions[p]) {\n conditions[p] = match;\n toggled = 1;\n }\n }\n\n if (toggled) {\n c.revert();\n anyMatch && matches.push(c);\n }\n });\n\n _dispatch(\"matchMediaRevert\");\n\n matches.forEach(function (c) {\n return c.onMatch(c);\n });\n _lastMediaTime = time;\n\n _dispatch(\"matchMedia\");\n }\n};\n\nvar Context = /*#__PURE__*/function () {\n function Context(func, scope) {\n this.selector = scope && selector(scope);\n this.data = [];\n this._r = []; // returned/cleanup functions\n\n this.isReverted = false;\n func && this.add(func);\n }\n\n var _proto5 = Context.prototype;\n\n _proto5.add = function add(name, func, scope) {\n // possible future addition if we need the ability to add() an animation to a context and for whatever reason cannot create that animation inside of a context.add(() => {...}) function.\n // if (name && _isFunction(name.revert)) {\n // \tthis.data.push(name);\n // \treturn (name._ctx = this);\n // }\n if (_isFunction(name)) {\n scope = func;\n func = name;\n name = _isFunction;\n }\n\n var self = this,\n f = function f() {\n var prev = _context,\n prevSelector = self.selector,\n result;\n prev && prev !== self && prev.data.push(self);\n scope && (self.selector = selector(scope));\n _context = self;\n result = func.apply(self, arguments);\n _isFunction(result) && self._r.push(result);\n _context = prev;\n self.selector = prevSelector;\n self.isReverted = false;\n return result;\n };\n\n self.last = f;\n return name === _isFunction ? f(self) : name ? self[name] = f : f;\n };\n\n _proto5.ignore = function ignore(func) {\n var prev = _context;\n _context = null;\n func(this);\n _context = prev;\n };\n\n _proto5.getTweens = function getTweens() {\n var a = [];\n this.data.forEach(function (e) {\n return e instanceof Context ? a.push.apply(a, e.getTweens()) : e instanceof Tween && !(e.parent && e.parent.data === \"nested\") && a.push(e);\n });\n return a;\n };\n\n _proto5.clear = function clear() {\n this._r.length = this.data.length = 0;\n };\n\n _proto5.kill = function kill(revert, matchMedia) {\n var _this4 = this;\n\n if (revert) {\n var tweens = this.getTweens();\n this.data.forEach(function (t) {\n // Flip plugin tweens are very different in that they should actually be pushed to their end. The plugin replaces the timeline's .revert() method to do exactly that. But we also need to remove any of those nested tweens inside the flip timeline so that they don't get individually reverted.\n if (t.data === \"isFlip\") {\n t.revert();\n t.getChildren(true, true, false).forEach(function (tween) {\n return tweens.splice(tweens.indexOf(tween), 1);\n });\n }\n }); // save as an object so that we can cache the globalTime for each tween to optimize performance during the sort\n\n tweens.map(function (t) {\n return {\n g: t.globalTime(0),\n t: t\n };\n }).sort(function (a, b) {\n return b.g - a.g || -1;\n }).forEach(function (o) {\n return o.t.revert(revert);\n }); // note: all of the _startAt tweens should be reverted in reverse order that they were created, and they'll all have the same globalTime (-1) so the \" || -1\" in the sort keeps the order properly.\n\n this.data.forEach(function (e) {\n return !(e instanceof Animation) && e.revert && e.revert(revert);\n });\n\n this._r.forEach(function (f) {\n return f(revert, _this4);\n });\n\n this.isReverted = true;\n } else {\n this.data.forEach(function (e) {\n return e.kill && e.kill();\n });\n }\n\n this.clear();\n\n if (matchMedia) {\n var i = _media.indexOf(this);\n\n !!~i && _media.splice(i, 1);\n }\n };\n\n _proto5.revert = function revert(config) {\n this.kill(config || {});\n };\n\n return Context;\n}();\n\nvar MatchMedia = /*#__PURE__*/function () {\n function MatchMedia(scope) {\n this.contexts = [];\n this.scope = scope;\n }\n\n var _proto6 = MatchMedia.prototype;\n\n _proto6.add = function add(conditions, func, scope) {\n _isObject(conditions) || (conditions = {\n matches: conditions\n });\n var context = new Context(0, scope || this.scope),\n cond = context.conditions = {},\n mq,\n p,\n active;\n this.contexts.push(context);\n func = context.add(\"onMatch\", func);\n context.queries = conditions;\n\n for (p in conditions) {\n if (p === \"all\") {\n active = 1;\n } else {\n mq = _win.matchMedia(conditions[p]);\n\n if (mq) {\n _media.indexOf(context) < 0 && _media.push(context);\n (cond[p] = mq.matches) && (active = 1);\n mq.addListener ? mq.addListener(_onMediaChange) : mq.addEventListener(\"change\", _onMediaChange);\n }\n }\n }\n\n active && func(context);\n return this;\n } // refresh() {\n // \tlet time = _lastMediaTime,\n // \t\tmedia = _media;\n // \t_lastMediaTime = -1;\n // \t_media = this.contexts;\n // \t_onMediaChange();\n // \t_lastMediaTime = time;\n // \t_media = media;\n // }\n ;\n\n _proto6.revert = function revert(config) {\n this.kill(config || {});\n };\n\n _proto6.kill = function kill(revert) {\n this.contexts.forEach(function (c) {\n return c.kill(revert, true);\n });\n };\n\n return MatchMedia;\n}();\n/*\n * --------------------------------------------------------------------------------------\n * GSAP\n * --------------------------------------------------------------------------------------\n */\n\n\nvar _gsap = {\n registerPlugin: function registerPlugin() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n args.forEach(function (config) {\n return _createPlugin(config);\n });\n },\n timeline: function timeline(vars) {\n return new Timeline(vars);\n },\n getTweensOf: function getTweensOf(targets, onlyActive) {\n return _globalTimeline.getTweensOf(targets, onlyActive);\n },\n getProperty: function getProperty(target, property, unit, uncache) {\n _isString(target) && (target = toArray(target)[0]); //in case selector text or an array is passed in\n\n var getter = _getCache(target || {}).get,\n format = unit ? _passThrough : _numericIfPossible;\n\n unit === \"native\" && (unit = \"\");\n return !target ? target : !property ? function (property, unit, uncache) {\n return format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\n } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\n },\n quickSetter: function quickSetter(target, property, unit) {\n target = toArray(target);\n\n if (target.length > 1) {\n var setters = target.map(function (t) {\n return gsap.quickSetter(t, property, unit);\n }),\n l = setters.length;\n return function (value) {\n var i = l;\n\n while (i--) {\n setters[i](value);\n }\n };\n }\n\n target = target[0] || {};\n\n var Plugin = _plugins[property],\n cache = _getCache(target),\n p = cache.harness && (cache.harness.aliases || {})[property] || property,\n // in case it's an alias, like \"rotate\" for \"rotation\".\n setter = Plugin ? function (value) {\n var p = new Plugin();\n _quickTween._pt = 0;\n p.init(target, unit ? value + unit : value, _quickTween, 0, [target]);\n p.render(1, p);\n _quickTween._pt && _renderPropTweens(1, _quickTween);\n } : cache.set(target, p);\n\n return Plugin ? setter : function (value) {\n return setter(target, p, unit ? value + unit : value, cache, 1);\n };\n },\n quickTo: function quickTo(target, property, vars) {\n var _merge2;\n\n var tween = gsap.to(target, _merge((_merge2 = {}, _merge2[property] = \"+=0.1\", _merge2.paused = true, _merge2), vars || {})),\n func = function func(value, start, startIsRelative) {\n return tween.resetTo(property, value, start, startIsRelative);\n };\n\n func.tween = tween;\n return func;\n },\n isTweening: function isTweening(targets) {\n return _globalTimeline.getTweensOf(targets, true).length > 0;\n },\n defaults: function defaults(value) {\n value && value.ease && (value.ease = _parseEase(value.ease, _defaults.ease));\n return _mergeDeep(_defaults, value || {});\n },\n config: function config(value) {\n return _mergeDeep(_config, value || {});\n },\n registerEffect: function registerEffect(_ref3) {\n var name = _ref3.name,\n effect = _ref3.effect,\n plugins = _ref3.plugins,\n defaults = _ref3.defaults,\n extendTimeline = _ref3.extendTimeline;\n (plugins || \"\").split(\",\").forEach(function (pluginName) {\n return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + \" effect requires \" + pluginName + \" plugin.\");\n });\n\n _effects[name] = function (targets, vars, tl) {\n return effect(toArray(targets), _setDefaults(vars || {}, defaults), tl);\n };\n\n if (extendTimeline) {\n Timeline.prototype[name] = function (targets, vars, position) {\n return this.add(_effects[name](targets, _isObject(vars) ? vars : (position = vars) && {}, this), position);\n };\n }\n },\n registerEase: function registerEase(name, ease) {\n _easeMap[name] = _parseEase(ease);\n },\n parseEase: function parseEase(ease, defaultEase) {\n return arguments.length ? _parseEase(ease, defaultEase) : _easeMap;\n },\n getById: function getById(id) {\n return _globalTimeline.getById(id);\n },\n exportRoot: function exportRoot(vars, includeDelayedCalls) {\n if (vars === void 0) {\n vars = {};\n }\n\n var tl = new Timeline(vars),\n child,\n next;\n tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming);\n\n _globalTimeline.remove(tl);\n\n tl._dp = 0; //otherwise it'll get re-activated when adding children and be re-introduced into _globalTimeline's linked list (then added to itself).\n\n tl._time = tl._tTime = _globalTimeline._time;\n child = _globalTimeline._first;\n\n while (child) {\n next = child._next;\n\n if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) {\n _addToTimeline(tl, child, child._start - child._delay);\n }\n\n child = next;\n }\n\n _addToTimeline(_globalTimeline, tl, 0);\n\n return tl;\n },\n context: function context(func, scope) {\n return func ? new Context(func, scope) : _context;\n },\n matchMedia: function matchMedia(scope) {\n return new MatchMedia(scope);\n },\n matchMediaRefresh: function matchMediaRefresh() {\n return _media.forEach(function (c) {\n var cond = c.conditions,\n found,\n p;\n\n for (p in cond) {\n if (cond[p]) {\n cond[p] = false;\n found = 1;\n }\n }\n\n found && c.revert();\n }) || _onMediaChange();\n },\n addEventListener: function addEventListener(type, callback) {\n var a = _listeners[type] || (_listeners[type] = []);\n ~a.indexOf(callback) || a.push(callback);\n },\n removeEventListener: function removeEventListener(type, callback) {\n var a = _listeners[type],\n i = a && a.indexOf(callback);\n i >= 0 && a.splice(i, 1);\n },\n utils: {\n wrap: wrap,\n wrapYoyo: wrapYoyo,\n distribute: distribute,\n random: random,\n snap: snap,\n normalize: normalize,\n getUnit: getUnit,\n clamp: clamp,\n splitColor: splitColor,\n toArray: toArray,\n selector: selector,\n mapRange: mapRange,\n pipe: pipe,\n unitize: unitize,\n interpolate: interpolate,\n shuffle: shuffle\n },\n install: _install,\n effects: _effects,\n ticker: _ticker,\n updateRoot: Timeline.updateRoot,\n plugins: _plugins,\n globalTimeline: _globalTimeline,\n core: {\n PropTween: PropTween,\n globals: _addGlobal,\n Tween: Tween,\n Timeline: Timeline,\n Animation: Animation,\n getCache: _getCache,\n _removeLinkedListItem: _removeLinkedListItem,\n reverting: function reverting() {\n return _reverting;\n },\n context: function context(toAdd) {\n if (toAdd && _context) {\n _context.data.push(toAdd);\n\n toAdd._ctx = _context;\n }\n\n return _context;\n },\n suppressOverwrites: function suppressOverwrites(value) {\n return _suppressOverwrites = value;\n }\n }\n};\n\n_forEachName(\"to,from,fromTo,delayedCall,set,killTweensOf\", function (name) {\n return _gsap[name] = Tween[name];\n});\n\n_ticker.add(Timeline.updateRoot);\n\n_quickTween = _gsap.to({}, {\n duration: 0\n}); // ---- EXTRA PLUGINS --------------------------------------------------------\n\nvar _getPluginPropTween = function _getPluginPropTween(plugin, prop) {\n var pt = plugin._pt;\n\n while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) {\n pt = pt._next;\n }\n\n return pt;\n},\n _addModifiers = function _addModifiers(tween, modifiers) {\n var targets = tween._targets,\n p,\n i,\n pt;\n\n for (p in modifiers) {\n i = targets.length;\n\n while (i--) {\n pt = tween._ptLookup[i][p];\n\n if (pt && (pt = pt.d)) {\n if (pt._pt) {\n // is a plugin\n pt = _getPluginPropTween(pt, p);\n }\n\n pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p);\n }\n }\n }\n},\n _buildModifierPlugin = function _buildModifierPlugin(name, modifier) {\n return {\n name: name,\n rawVars: 1,\n //don't pre-process function-based values or \"random()\" strings.\n init: function init(target, vars, tween) {\n tween._onInit = function (tween) {\n var temp, p;\n\n if (_isString(vars)) {\n temp = {};\n\n _forEachName(vars, function (name) {\n return temp[name] = 1;\n }); //if the user passes in a comma-delimited list of property names to roundProps, like \"x,y\", we round to whole numbers.\n\n\n vars = temp;\n }\n\n if (modifier) {\n temp = {};\n\n for (p in vars) {\n temp[p] = modifier(vars[p]);\n }\n\n vars = temp;\n }\n\n _addModifiers(tween, vars);\n };\n }\n };\n}; //register core plugins\n\n\nexport var gsap = _gsap.registerPlugin({\n name: \"attr\",\n init: function init(target, vars, tween, index, targets) {\n var p, pt, v;\n this.tween = tween;\n\n for (p in vars) {\n v = target.getAttribute(p) || \"\";\n pt = this.add(target, \"setAttribute\", (v || 0) + \"\", vars[p], index, targets, 0, 0, p);\n pt.op = p;\n pt.b = v; // record the beginning value so we can revert()\n\n this._props.push(p);\n }\n },\n render: function render(ratio, data) {\n var pt = data._pt;\n\n while (pt) {\n _reverting ? pt.set(pt.t, pt.p, pt.b, pt) : pt.r(ratio, pt.d); // if reverting, go back to the original (pt.b)\n\n pt = pt._next;\n }\n }\n}, {\n name: \"endArray\",\n init: function init(target, value) {\n var i = value.length;\n\n while (i--) {\n this.add(target, i, target[i] || 0, value[i], 0, 0, 0, 0, 0, 1);\n }\n }\n}, _buildModifierPlugin(\"roundProps\", _roundModifier), _buildModifierPlugin(\"modifiers\"), _buildModifierPlugin(\"snap\", snap)) || _gsap; //to prevent the core plugins from being dropped via aggressive tree shaking, we must include them in the variable declaration in this way.\n\nTween.version = Timeline.version = gsap.version = \"3.11.5\";\n_coreReady = 1;\n_windowExists() && _wake();\nvar Power0 = _easeMap.Power0,\n Power1 = _easeMap.Power1,\n Power2 = _easeMap.Power2,\n Power3 = _easeMap.Power3,\n Power4 = _easeMap.Power4,\n Linear = _easeMap.Linear,\n Quad = _easeMap.Quad,\n Cubic = _easeMap.Cubic,\n Quart = _easeMap.Quart,\n Quint = _easeMap.Quint,\n Strong = _easeMap.Strong,\n Elastic = _easeMap.Elastic,\n Back = _easeMap.Back,\n SteppedEase = _easeMap.SteppedEase,\n Bounce = _easeMap.Bounce,\n Sine = _easeMap.Sine,\n Expo = _easeMap.Expo,\n Circ = _easeMap.Circ;\nexport { Power0, Power1, Power2, Power3, Power4, Linear, Quad, Cubic, Quart, Quint, Strong, Elastic, Back, SteppedEase, Bounce, Sine, Expo, Circ };\nexport { Tween as TweenMax, Tween as TweenLite, Timeline as TimelineMax, Timeline as TimelineLite, gsap as default, wrap, wrapYoyo, distribute, random, snap, normalize, getUnit, clamp, splitColor, toArray, selector, mapRange, pipe, unitize, interpolate, shuffle }; //export some internal methods/orojects for use in CSSPlugin so that we can externalize that file and allow custom builds that exclude it.\n\nexport { _getProperty, _numExp, _numWithUnitExp, _isString, _isUndefined, _renderComplexString, _relExp, _setDefaults, _removeLinkedListItem, _forEachName, _sortPropTweensByPriority, _colorStringFilter, _replaceRandom, _checkPlugin, _plugins, _ticker, _config, _roundModifier, _round, _missingPlugin, _getSetter, _getCache, _colorExp, _parseRelative };","/*!\n * CSSPlugin 3.11.5\n * https://greensock.com\n *\n * Copyright 2008-2023, GreenSock. All rights reserved.\n * Subject to the terms at https://greensock.com/standard-license or for\n * Club GreenSock members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nimport { gsap, _getProperty, _numExp, _numWithUnitExp, getUnit, _isString, _isUndefined, _renderComplexString, _relExp, _forEachName, _sortPropTweensByPriority, _colorStringFilter, _checkPlugin, _replaceRandom, _plugins, GSCache, PropTween, _config, _ticker, _round, _missingPlugin, _getSetter, _getCache, _colorExp, _parseRelative, _setDefaults, _removeLinkedListItem //for the commented-out className feature.\n} from \"./gsap-core.js\";\n\nvar _win,\n _doc,\n _docElement,\n _pluginInitted,\n _tempDiv,\n _tempDivStyler,\n _recentSetterPlugin,\n _reverting,\n _windowExists = function _windowExists() {\n return typeof window !== \"undefined\";\n},\n _transformProps = {},\n _RAD2DEG = 180 / Math.PI,\n _DEG2RAD = Math.PI / 180,\n _atan2 = Math.atan2,\n _bigNum = 1e8,\n _capsExp = /([A-Z])/g,\n _horizontalExp = /(left|right|width|margin|padding|x)/i,\n _complexExp = /[\\s,\\(]\\S/,\n _propertyAliases = {\n autoAlpha: \"opacity,visibility\",\n scale: \"scaleX,scaleY\",\n alpha: \"opacity\"\n},\n _renderCSSProp = function _renderCSSProp(ratio, data) {\n return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\n},\n _renderPropWithEnd = function _renderPropWithEnd(ratio, data) {\n return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\n},\n _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning(ratio, data) {\n return data.set(data.t, data.p, ratio ? Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u : data.b, data);\n},\n //if units change, we need a way to render the original unit/value when the tween goes all the way back to the beginning (ratio:0)\n_renderRoundedCSSProp = function _renderRoundedCSSProp(ratio, data) {\n var value = data.s + data.c * ratio;\n data.set(data.t, data.p, ~~(value + (value < 0 ? -.5 : .5)) + data.u, data);\n},\n _renderNonTweeningValue = function _renderNonTweeningValue(ratio, data) {\n return data.set(data.t, data.p, ratio ? data.e : data.b, data);\n},\n _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd(ratio, data) {\n return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data);\n},\n _setterCSSStyle = function _setterCSSStyle(target, property, value) {\n return target.style[property] = value;\n},\n _setterCSSProp = function _setterCSSProp(target, property, value) {\n return target.style.setProperty(property, value);\n},\n _setterTransform = function _setterTransform(target, property, value) {\n return target._gsap[property] = value;\n},\n _setterScale = function _setterScale(target, property, value) {\n return target._gsap.scaleX = target._gsap.scaleY = value;\n},\n _setterScaleWithRender = function _setterScaleWithRender(target, property, value, data, ratio) {\n var cache = target._gsap;\n cache.scaleX = cache.scaleY = value;\n cache.renderTransform(ratio, cache);\n},\n _setterTransformWithRender = function _setterTransformWithRender(target, property, value, data, ratio) {\n var cache = target._gsap;\n cache[property] = value;\n cache.renderTransform(ratio, cache);\n},\n _transformProp = \"transform\",\n _transformOriginProp = _transformProp + \"Origin\",\n _saveStyle = function _saveStyle(property, isNotCSS) {\n var _this = this;\n\n var target = this.target,\n style = target.style;\n\n if (property in _transformProps) {\n this.tfm = this.tfm || {};\n\n if (property !== \"transform\") {\n property = _propertyAliases[property] || property;\n ~property.indexOf(\",\") ? property.split(\",\").forEach(function (a) {\n return _this.tfm[a] = _get(target, a);\n }) : this.tfm[property] = target._gsap.x ? target._gsap[property] : _get(target, property); // note: scale would map to \"scaleX,scaleY\", thus we loop and apply them both.\n } else {\n return _propertyAliases.transform.split(\",\").forEach(function (p) {\n return _saveStyle.call(_this, p, isNotCSS);\n });\n }\n\n if (this.props.indexOf(_transformProp) >= 0) {\n return;\n }\n\n if (target._gsap.svg) {\n this.svgo = target.getAttribute(\"data-svg-origin\");\n this.props.push(_transformOriginProp, isNotCSS, \"\");\n }\n\n property = _transformProp;\n }\n\n (style || isNotCSS) && this.props.push(property, isNotCSS, style[property]);\n},\n _removeIndependentTransforms = function _removeIndependentTransforms(style) {\n if (style.translate) {\n style.removeProperty(\"translate\");\n style.removeProperty(\"scale\");\n style.removeProperty(\"rotate\");\n }\n},\n _revertStyle = function _revertStyle() {\n var props = this.props,\n target = this.target,\n style = target.style,\n cache = target._gsap,\n i,\n p;\n\n for (i = 0; i < props.length; i += 3) {\n // stored like this: property, isNotCSS, value\n props[i + 1] ? target[props[i]] = props[i + 2] : props[i + 2] ? style[props[i]] = props[i + 2] : style.removeProperty(props[i].substr(0, 2) === \"--\" ? props[i] : props[i].replace(_capsExp, \"-$1\").toLowerCase());\n }\n\n if (this.tfm) {\n for (p in this.tfm) {\n cache[p] = this.tfm[p];\n }\n\n if (cache.svg) {\n cache.renderTransform();\n target.setAttribute(\"data-svg-origin\", this.svgo || \"\");\n }\n\n i = _reverting();\n\n if ((!i || !i.isStart) && !style[_transformProp]) {\n _removeIndependentTransforms(style);\n\n cache.uncache = 1; // if it's a startAt that's being reverted in the _initTween() of the core, we don't need to uncache transforms. This is purely a performance optimization.\n }\n }\n},\n _getStyleSaver = function _getStyleSaver(target, properties) {\n var saver = {\n target: target,\n props: [],\n revert: _revertStyle,\n save: _saveStyle\n };\n target._gsap || gsap.core.getCache(target); // just make sure there's a _gsap cache defined because we read from it in _saveStyle() and it's more efficient to just check it here once.\n\n properties && properties.split(\",\").forEach(function (p) {\n return saver.save(p);\n });\n return saver;\n},\n _supports3D,\n _createElement = function _createElement(type, ns) {\n var e = _doc.createElementNS ? _doc.createElementNS((ns || \"http://www.w3.org/1999/xhtml\").replace(/^https/, \"http\"), type) : _doc.createElement(type); //some servers swap in https for http in the namespace which can break things, making \"style\" inaccessible.\n\n return e.style ? e : _doc.createElement(type); //some environments won't allow access to the element's style when created with a namespace in which case we default to the standard createElement() to work around the issue. Also note that when GSAP is embedded directly inside an SVG file, createElement() won't allow access to the style object in Firefox (see https://greensock.com/forums/topic/20215-problem-using-tweenmax-in-standalone-self-containing-svg-file-err-cannot-set-property-csstext-of-undefined/).\n},\n _getComputedProperty = function _getComputedProperty(target, property, skipPrefixFallback) {\n var cs = getComputedStyle(target);\n return cs[property] || cs.getPropertyValue(property.replace(_capsExp, \"-$1\").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty(target, _checkPropPrefix(property) || property, 1) || \"\"; //css variables may not need caps swapped out for dashes and lowercase.\n},\n _prefixes = \"O,Moz,ms,Ms,Webkit\".split(\",\"),\n _checkPropPrefix = function _checkPropPrefix(property, element, preferPrefix) {\n var e = element || _tempDiv,\n s = e.style,\n i = 5;\n\n if (property in s && !preferPrefix) {\n return property;\n }\n\n property = property.charAt(0).toUpperCase() + property.substr(1);\n\n while (i-- && !(_prefixes[i] + property in s)) {}\n\n return i < 0 ? null : (i === 3 ? \"ms\" : i >= 0 ? _prefixes[i] : \"\") + property;\n},\n _initCore = function _initCore() {\n if (_windowExists() && window.document) {\n _win = window;\n _doc = _win.document;\n _docElement = _doc.documentElement;\n _tempDiv = _createElement(\"div\") || {\n style: {}\n };\n _tempDivStyler = _createElement(\"div\");\n _transformProp = _checkPropPrefix(_transformProp);\n _transformOriginProp = _transformProp + \"Origin\";\n _tempDiv.style.cssText = \"border-width:0;line-height:0;position:absolute;padding:0\"; //make sure to override certain properties that may contaminate measurements, in case the user has overreaching style sheets.\n\n _supports3D = !!_checkPropPrefix(\"perspective\");\n _reverting = gsap.core.reverting;\n _pluginInitted = 1;\n }\n},\n _getBBoxHack = function _getBBoxHack(swapIfPossible) {\n //works around issues in some browsers (like Firefox) that don't correctly report getBBox() on SVG elements inside a element and/or . We try creating an SVG, adding it to the documentElement and toss the element in there so that it's definitely part of the rendering tree, then grab the bbox and if it works, we actually swap out the original getBBox() method for our own that does these extra steps whenever getBBox is needed. This helps ensure that performance is optimal (only do all these extra steps when absolutely necessary...most elements don't need it).\n var svg = _createElement(\"svg\", this.ownerSVGElement && this.ownerSVGElement.getAttribute(\"xmlns\") || \"http://www.w3.org/2000/svg\"),\n oldParent = this.parentNode,\n oldSibling = this.nextSibling,\n oldCSS = this.style.cssText,\n bbox;\n\n _docElement.appendChild(svg);\n\n svg.appendChild(this);\n this.style.display = \"block\";\n\n if (swapIfPossible) {\n try {\n bbox = this.getBBox();\n this._gsapBBox = this.getBBox; //store the original\n\n this.getBBox = _getBBoxHack;\n } catch (e) {}\n } else if (this._gsapBBox) {\n bbox = this._gsapBBox();\n }\n\n if (oldParent) {\n if (oldSibling) {\n oldParent.insertBefore(this, oldSibling);\n } else {\n oldParent.appendChild(this);\n }\n }\n\n _docElement.removeChild(svg);\n\n this.style.cssText = oldCSS;\n return bbox;\n},\n _getAttributeFallbacks = function _getAttributeFallbacks(target, attributesArray) {\n var i = attributesArray.length;\n\n while (i--) {\n if (target.hasAttribute(attributesArray[i])) {\n return target.getAttribute(attributesArray[i]);\n }\n }\n},\n _getBBox = function _getBBox(target) {\n var bounds;\n\n try {\n bounds = target.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a or ). https://bugzilla.mozilla.org/show_bug.cgi?id=612118\n } catch (error) {\n bounds = _getBBoxHack.call(target, true);\n }\n\n bounds && (bounds.width || bounds.height) || target.getBBox === _getBBoxHack || (bounds = _getBBoxHack.call(target, true)); //some browsers (like Firefox) misreport the bounds if the element has zero width and height (it just assumes it's at x:0, y:0), thus we need to manually grab the position in that case.\n\n return bounds && !bounds.width && !bounds.x && !bounds.y ? {\n x: +_getAttributeFallbacks(target, [\"x\", \"cx\", \"x1\"]) || 0,\n y: +_getAttributeFallbacks(target, [\"y\", \"cy\", \"y1\"]) || 0,\n width: 0,\n height: 0\n } : bounds;\n},\n _isSVG = function _isSVG(e) {\n return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));\n},\n //reports if the element is an SVG on which getBBox() actually works\n_removeProperty = function _removeProperty(target, property) {\n if (property) {\n var style = target.style;\n\n if (property in _transformProps && property !== _transformOriginProp) {\n property = _transformProp;\n }\n\n if (style.removeProperty) {\n if (property.substr(0, 2) === \"ms\" || property.substr(0, 6) === \"webkit\") {\n //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be \"ms-transform\" instead of \"-ms-transform\" for IE9, for example)\n property = \"-\" + property;\n }\n\n style.removeProperty(property.replace(_capsExp, \"-$1\").toLowerCase());\n } else {\n //note: old versions of IE use \"removeAttribute()\" instead of \"removeProperty()\"\n style.removeAttribute(property);\n }\n }\n},\n _addNonTweeningPT = function _addNonTweeningPT(plugin, target, property, beginning, end, onlySetAtEnd) {\n var pt = new PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue);\n plugin._pt = pt;\n pt.b = beginning;\n pt.e = end;\n\n plugin._props.push(property);\n\n return pt;\n},\n _nonConvertibleUnits = {\n deg: 1,\n rad: 1,\n turn: 1\n},\n _nonStandardLayouts = {\n grid: 1,\n flex: 1\n},\n //takes a single value like 20px and converts it to the unit specified, like \"%\", returning only the numeric amount.\n_convertToUnit = function _convertToUnit(target, property, value, unit) {\n var curValue = parseFloat(value) || 0,\n curUnit = (value + \"\").trim().substr((curValue + \"\").length) || \"px\",\n // some browsers leave extra whitespace at the beginning of CSS variables, hence the need to trim()\n style = _tempDiv.style,\n horizontal = _horizontalExp.test(property),\n isRootSVG = target.tagName.toLowerCase() === \"svg\",\n measureProperty = (isRootSVG ? \"client\" : \"offset\") + (horizontal ? \"Width\" : \"Height\"),\n amount = 100,\n toPixels = unit === \"px\",\n toPercent = unit === \"%\",\n px,\n parent,\n cache,\n isSVG;\n\n if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) {\n return curValue;\n }\n\n curUnit !== \"px\" && !toPixels && (curValue = _convertToUnit(target, property, value, \"px\"));\n isSVG = target.getCTM && _isSVG(target);\n\n if ((toPercent || curUnit === \"%\") && (_transformProps[property] || ~property.indexOf(\"adius\"))) {\n px = isSVG ? target.getBBox()[horizontal ? \"width\" : \"height\"] : target[measureProperty];\n return _round(toPercent ? curValue / px * amount : curValue / 100 * px);\n }\n\n style[horizontal ? \"width\" : \"height\"] = amount + (toPixels ? curUnit : unit);\n parent = ~property.indexOf(\"adius\") || unit === \"em\" && target.appendChild && !isRootSVG ? target : target.parentNode;\n\n if (isSVG) {\n parent = (target.ownerSVGElement || {}).parentNode;\n }\n\n if (!parent || parent === _doc || !parent.appendChild) {\n parent = _doc.body;\n }\n\n cache = parent._gsap;\n\n if (cache && toPercent && cache.width && horizontal && cache.time === _ticker.time && !cache.uncache) {\n return _round(curValue / cache.width * amount);\n } else {\n (toPercent || curUnit === \"%\") && !_nonStandardLayouts[_getComputedProperty(parent, \"display\")] && (style.position = _getComputedProperty(target, \"position\"));\n parent === target && (style.position = \"static\"); // like for borderRadius, if it's a % we must have it relative to the target itself but that may not have position: relative or position: absolute in which case it'd go up the chain until it finds its offsetParent (bad). position: static protects against that.\n\n parent.appendChild(_tempDiv);\n px = _tempDiv[measureProperty];\n parent.removeChild(_tempDiv);\n style.position = \"absolute\";\n\n if (horizontal && toPercent) {\n cache = _getCache(parent);\n cache.time = _ticker.time;\n cache.width = parent[measureProperty];\n }\n }\n\n return _round(toPixels ? px * curValue / amount : px && curValue ? amount / px * curValue : 0);\n},\n _get = function _get(target, property, unit, uncache) {\n var value;\n _pluginInitted || _initCore();\n\n if (property in _propertyAliases && property !== \"transform\") {\n property = _propertyAliases[property];\n\n if (~property.indexOf(\",\")) {\n property = property.split(\",\")[0];\n }\n }\n\n if (_transformProps[property] && property !== \"transform\") {\n value = _parseTransform(target, uncache);\n value = property !== \"transformOrigin\" ? value[property] : value.svg ? value.origin : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + \" \" + value.zOrigin + \"px\";\n } else {\n value = target.style[property];\n\n if (!value || value === \"auto\" || uncache || ~(value + \"\").indexOf(\"calc(\")) {\n value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || _getProperty(target, property) || (property === \"opacity\" ? 1 : 0); // note: some browsers, like Firefox, don't report borderRadius correctly! Instead, it only reports every corner like borderTopLeftRadius\n }\n }\n\n return unit && !~(value + \"\").trim().indexOf(\" \") ? _convertToUnit(target, property, value, unit) + unit : value;\n},\n _tweenComplexCSSString = function _tweenComplexCSSString(target, prop, start, end) {\n // note: we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\n if (!start || start === \"none\") {\n // some browsers like Safari actually PREFER the prefixed property and mis-report the unprefixed value like clipPath (BUG). In other words, even though clipPath exists in the style (\"clipPath\" in target.style) and it's set in the CSS properly (along with -webkit-clip-path), Safari reports clipPath as \"none\" whereas WebkitClipPath reports accurately like \"ellipse(100% 0% at 50% 0%)\", so in this case we must SWITCH to using the prefixed property instead. See https://greensock.com/forums/topic/18310-clippath-doesnt-work-on-ios/\n var p = _checkPropPrefix(prop, target, 1),\n s = p && _getComputedProperty(target, p, 1);\n\n if (s && s !== start) {\n prop = p;\n start = s;\n } else if (prop === \"borderColor\") {\n start = _getComputedProperty(target, \"borderTopColor\"); // Firefox bug: always reports \"borderColor\" as \"\", so we must fall back to borderTopColor. See https://greensock.com/forums/topic/24583-how-to-return-colors-that-i-had-after-reverse/\n }\n }\n\n var pt = new PropTween(this._pt, target.style, prop, 0, 1, _renderComplexString),\n index = 0,\n matchIndex = 0,\n a,\n result,\n startValues,\n startNum,\n color,\n startValue,\n endValue,\n endNum,\n chunk,\n endUnit,\n startUnit,\n endValues;\n pt.b = start;\n pt.e = end;\n start += \"\"; // ensure values are strings\n\n end += \"\";\n\n if (end === \"auto\") {\n target.style[prop] = end;\n end = _getComputedProperty(target, prop) || end;\n target.style[prop] = start;\n }\n\n a = [start, end];\n\n _colorStringFilter(a); // pass an array with the starting and ending values and let the filter do whatever it needs to the values. If colors are found, it returns true and then we must match where the color shows up order-wise because for things like boxShadow, sometimes the browser provides the computed values with the color FIRST, but the user provides it with the color LAST, so flip them if necessary. Same for drop-shadow().\n\n\n start = a[0];\n end = a[1];\n startValues = start.match(_numWithUnitExp) || [];\n endValues = end.match(_numWithUnitExp) || [];\n\n if (endValues.length) {\n while (result = _numWithUnitExp.exec(end)) {\n endValue = result[0];\n chunk = end.substring(index, result.index);\n\n if (color) {\n color = (color + 1) % 5;\n } else if (chunk.substr(-5) === \"rgba(\" || chunk.substr(-5) === \"hsla(\") {\n color = 1;\n }\n\n if (endValue !== (startValue = startValues[matchIndex++] || \"\")) {\n startNum = parseFloat(startValue) || 0;\n startUnit = startValue.substr((startNum + \"\").length);\n endValue.charAt(1) === \"=\" && (endValue = _parseRelative(startNum, endValue) + startUnit);\n endNum = parseFloat(endValue);\n endUnit = endValue.substr((endNum + \"\").length);\n index = _numWithUnitExp.lastIndex - endUnit.length;\n\n if (!endUnit) {\n //if something like \"perspective:300\" is passed in and we must add a unit to the end\n endUnit = endUnit || _config.units[prop] || startUnit;\n\n if (index === end.length) {\n end += endUnit;\n pt.e += endUnit;\n }\n }\n\n if (startUnit !== endUnit) {\n startNum = _convertToUnit(target, prop, startValue, endUnit) || 0;\n } // these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.\n\n\n pt._pt = {\n _next: pt._pt,\n p: chunk || matchIndex === 1 ? chunk : \",\",\n //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n s: startNum,\n c: endNum - startNum,\n m: color && color < 4 || prop === \"zIndex\" ? Math.round : 0\n };\n }\n }\n\n pt.c = index < end.length ? end.substring(index, end.length) : \"\"; //we use the \"c\" of the PropTween to store the final part of the string (after the last number)\n } else {\n pt.r = prop === \"display\" && end === \"none\" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue;\n }\n\n _relExp.test(end) && (pt.e = 0); //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\n\n this._pt = pt; //start the linked list with this new PropTween. Remember, we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within another plugin too, thus \"this\" would refer to the plugin.\n\n return pt;\n},\n _keywordToPercent = {\n top: \"0%\",\n bottom: \"100%\",\n left: \"0%\",\n right: \"100%\",\n center: \"50%\"\n},\n _convertKeywordsToPercentages = function _convertKeywordsToPercentages(value) {\n var split = value.split(\" \"),\n x = split[0],\n y = split[1] || \"50%\";\n\n if (x === \"top\" || x === \"bottom\" || y === \"left\" || y === \"right\") {\n //the user provided them in the wrong order, so flip them\n value = x;\n x = y;\n y = value;\n }\n\n split[0] = _keywordToPercent[x] || x;\n split[1] = _keywordToPercent[y] || y;\n return split.join(\" \");\n},\n _renderClearProps = function _renderClearProps(ratio, data) {\n if (data.tween && data.tween._time === data.tween._dur) {\n var target = data.t,\n style = target.style,\n props = data.u,\n cache = target._gsap,\n prop,\n clearTransforms,\n i;\n\n if (props === \"all\" || props === true) {\n style.cssText = \"\";\n clearTransforms = 1;\n } else {\n props = props.split(\",\");\n i = props.length;\n\n while (--i > -1) {\n prop = props[i];\n\n if (_transformProps[prop]) {\n clearTransforms = 1;\n prop = prop === \"transformOrigin\" ? _transformOriginProp : _transformProp;\n }\n\n _removeProperty(target, prop);\n }\n }\n\n if (clearTransforms) {\n _removeProperty(target, _transformProp);\n\n if (cache) {\n cache.svg && target.removeAttribute(\"transform\");\n\n _parseTransform(target, 1); // force all the cached values back to \"normal\"/identity, otherwise if there's another tween that's already set to render transforms on this element, it could display the wrong values.\n\n\n cache.uncache = 1;\n\n _removeIndependentTransforms(style);\n }\n }\n }\n},\n // note: specialProps should return 1 if (and only if) they have a non-zero priority. It indicates we need to sort the linked list.\n_specialProps = {\n clearProps: function clearProps(plugin, target, property, endValue, tween) {\n if (tween.data !== \"isFromStart\") {\n var pt = plugin._pt = new PropTween(plugin._pt, target, property, 0, 0, _renderClearProps);\n pt.u = endValue;\n pt.pr = -10;\n pt.tween = tween;\n\n plugin._props.push(property);\n\n return 1;\n }\n }\n /* className feature (about 0.4kb gzipped).\n , className(plugin, target, property, endValue, tween) {\n \tlet _renderClassName = (ratio, data) => {\n \t\t\tdata.css.render(ratio, data.css);\n \t\t\tif (!ratio || ratio === 1) {\n \t\t\t\tlet inline = data.rmv,\n \t\t\t\t\ttarget = data.t,\n \t\t\t\t\tp;\n \t\t\t\ttarget.setAttribute(\"class\", ratio ? data.e : data.b);\n \t\t\t\tfor (p in inline) {\n \t\t\t\t\t_removeProperty(target, p);\n \t\t\t\t}\n \t\t\t}\n \t\t},\n \t\t_getAllStyles = (target) => {\n \t\t\tlet styles = {},\n \t\t\t\tcomputed = getComputedStyle(target),\n \t\t\t\tp;\n \t\t\tfor (p in computed) {\n \t\t\t\tif (isNaN(p) && p !== \"cssText\" && p !== \"length\") {\n \t\t\t\t\tstyles[p] = computed[p];\n \t\t\t\t}\n \t\t\t}\n \t\t\t_setDefaults(styles, _parseTransform(target, 1));\n \t\t\treturn styles;\n \t\t},\n \t\tstartClassList = target.getAttribute(\"class\"),\n \t\tstyle = target.style,\n \t\tcssText = style.cssText,\n \t\tcache = target._gsap,\n \t\tclassPT = cache.classPT,\n \t\tinlineToRemoveAtEnd = {},\n \t\tdata = {t:target, plugin:plugin, rmv:inlineToRemoveAtEnd, b:startClassList, e:(endValue.charAt(1) !== \"=\") ? endValue : startClassList.replace(new RegExp(\"(?:\\\\s|^)\" + endValue.substr(2) + \"(?![\\\\w-])\"), \"\") + ((endValue.charAt(0) === \"+\") ? \" \" + endValue.substr(2) : \"\")},\n \t\tchangingVars = {},\n \t\tstartVars = _getAllStyles(target),\n \t\ttransformRelated = /(transform|perspective)/i,\n \t\tendVars, p;\n \tif (classPT) {\n \t\tclassPT.r(1, classPT.d);\n \t\t_removeLinkedListItem(classPT.d.plugin, classPT, \"_pt\");\n \t}\n \ttarget.setAttribute(\"class\", data.e);\n \tendVars = _getAllStyles(target, true);\n \ttarget.setAttribute(\"class\", startClassList);\n \tfor (p in endVars) {\n \t\tif (endVars[p] !== startVars[p] && !transformRelated.test(p)) {\n \t\t\tchangingVars[p] = endVars[p];\n \t\t\tif (!style[p] && style[p] !== \"0\") {\n \t\t\t\tinlineToRemoveAtEnd[p] = 1;\n \t\t\t}\n \t\t}\n \t}\n \tcache.classPT = plugin._pt = new PropTween(plugin._pt, target, \"className\", 0, 0, _renderClassName, data, 0, -11);\n \tif (style.cssText !== cssText) { //only apply if things change. Otherwise, in cases like a background-image that's pulled dynamically, it could cause a refresh. See https://greensock.com/forums/topic/20368-possible-gsap-bug-switching-classnames-in-chrome/.\n \t\tstyle.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).\n \t}\n \t_parseTransform(target, true); //to clear the caching of transforms\n \tdata.css = new gsap.plugins.css();\n \tdata.css.init(target, changingVars, tween);\n \tplugin._props.push(...data.css._props);\n \treturn 1;\n }\n */\n\n},\n\n/*\n * --------------------------------------------------------------------------------------\n * TRANSFORMS\n * --------------------------------------------------------------------------------------\n */\n_identity2DMatrix = [1, 0, 0, 1, 0, 0],\n _rotationalProperties = {},\n _isNullTransform = function _isNullTransform(value) {\n return value === \"matrix(1, 0, 0, 1, 0, 0)\" || value === \"none\" || !value;\n},\n _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray(target) {\n var matrixString = _getComputedProperty(target, _transformProp);\n\n return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_numExp).map(_round);\n},\n _getMatrix = function _getMatrix(target, force2D) {\n var cache = target._gsap || _getCache(target),\n style = target.style,\n matrix = _getComputedTransformMatrixAsArray(target),\n parent,\n nextSibling,\n temp,\n addedToDOM;\n\n if (cache.svg && target.getAttribute(\"transform\")) {\n temp = target.transform.baseVal.consolidate().matrix; //ensures that even complex values like \"translate(50,60) rotate(135,0,0)\" are parsed because it mashes it into a matrix.\n\n matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f];\n return matrix.join(\",\") === \"1,0,0,1,0,0\" ? _identity2DMatrix : matrix;\n } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) {\n //note: if offsetParent is null, that means the element isn't in the normal document flow, like if it has display:none or one of its ancestors has display:none). Firefox returns null for getComputedStyle() if the element is in an iframe that has display:none. https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n //browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not \"none\". Firefox and Microsoft browsers have a partial bug where they'll report transforms even if display:none BUT not any percentage-based values like translate(-50%, 8px) will be reported as if it's translate(0, 8px).\n temp = style.display;\n style.display = \"block\";\n parent = target.parentNode;\n\n if (!parent || !target.offsetParent) {\n // note: in 3.3.0 we switched target.offsetParent to _doc.body.contains(target) to avoid [sometimes unnecessary] MutationObserver calls but that wasn't adequate because there are edge cases where nested position: fixed elements need to get reparented to accurately sense transforms. See https://github.com/greensock/GSAP/issues/388 and https://github.com/greensock/GSAP/issues/375\n addedToDOM = 1; //flag\n\n nextSibling = target.nextElementSibling;\n\n _docElement.appendChild(target); //we must add it to the DOM in order to get values properly\n\n }\n\n matrix = _getComputedTransformMatrixAsArray(target);\n temp ? style.display = temp : _removeProperty(target, \"display\");\n\n if (addedToDOM) {\n nextSibling ? parent.insertBefore(target, nextSibling) : parent ? parent.appendChild(target) : _docElement.removeChild(target);\n }\n }\n\n return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix;\n},\n _applySVGOrigin = function _applySVGOrigin(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) {\n var cache = target._gsap,\n matrix = matrixArray || _getMatrix(target, true),\n xOriginOld = cache.xOrigin || 0,\n yOriginOld = cache.yOrigin || 0,\n xOffsetOld = cache.xOffset || 0,\n yOffsetOld = cache.yOffset || 0,\n a = matrix[0],\n b = matrix[1],\n c = matrix[2],\n d = matrix[3],\n tx = matrix[4],\n ty = matrix[5],\n originSplit = origin.split(\" \"),\n xOrigin = parseFloat(originSplit[0]) || 0,\n yOrigin = parseFloat(originSplit[1]) || 0,\n bounds,\n determinant,\n x,\n y;\n\n if (!originIsAbsolute) {\n bounds = _getBBox(target);\n xOrigin = bounds.x + (~originSplit[0].indexOf(\"%\") ? xOrigin / 100 * bounds.width : xOrigin);\n yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf(\"%\") ? yOrigin / 100 * bounds.height : yOrigin);\n } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) {\n //if it's zero (like if scaleX and scaleY are zero), skip it to avoid errors with dividing by zero.\n x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant;\n y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant;\n xOrigin = x;\n yOrigin = y;\n }\n\n if (smooth || smooth !== false && cache.smooth) {\n tx = xOrigin - xOriginOld;\n ty = yOrigin - yOriginOld;\n cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx;\n cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty;\n } else {\n cache.xOffset = cache.yOffset = 0;\n }\n\n cache.xOrigin = xOrigin;\n cache.yOrigin = yOrigin;\n cache.smooth = !!smooth;\n cache.origin = origin;\n cache.originIsAbsolute = !!originIsAbsolute;\n target.style[_transformOriginProp] = \"0px 0px\"; //otherwise, if someone sets an origin via CSS, it will likely interfere with the SVG transform attribute ones (because remember, we're baking the origin into the matrix() value).\n\n if (pluginToAddPropTweensTo) {\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"xOrigin\", xOriginOld, xOrigin);\n\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"yOrigin\", yOriginOld, yOrigin);\n\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"xOffset\", xOffsetOld, cache.xOffset);\n\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"yOffset\", yOffsetOld, cache.yOffset);\n }\n\n target.setAttribute(\"data-svg-origin\", xOrigin + \" \" + yOrigin);\n},\n _parseTransform = function _parseTransform(target, uncache) {\n var cache = target._gsap || new GSCache(target);\n\n if (\"x\" in cache && !uncache && !cache.uncache) {\n return cache;\n }\n\n var style = target.style,\n invertedScaleX = cache.scaleX < 0,\n px = \"px\",\n deg = \"deg\",\n cs = getComputedStyle(target),\n origin = _getComputedProperty(target, _transformOriginProp) || \"0\",\n x,\n y,\n z,\n scaleX,\n scaleY,\n rotation,\n rotationX,\n rotationY,\n skewX,\n skewY,\n perspective,\n xOrigin,\n yOrigin,\n matrix,\n angle,\n cos,\n sin,\n a,\n b,\n c,\n d,\n a12,\n a22,\n t1,\n t2,\n t3,\n a13,\n a23,\n a33,\n a42,\n a43,\n a32;\n x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0;\n scaleX = scaleY = 1;\n cache.svg = !!(target.getCTM && _isSVG(target));\n\n if (cs.translate) {\n // accommodate independent transforms by combining them into normal ones.\n if (cs.translate !== \"none\" || cs.scale !== \"none\" || cs.rotate !== \"none\") {\n style[_transformProp] = (cs.translate !== \"none\" ? \"translate3d(\" + (cs.translate + \" 0 0\").split(\" \").slice(0, 3).join(\", \") + \") \" : \"\") + (cs.rotate !== \"none\" ? \"rotate(\" + cs.rotate + \") \" : \"\") + (cs.scale !== \"none\" ? \"scale(\" + cs.scale.split(\" \").join(\",\") + \") \" : \"\") + (cs[_transformProp] !== \"none\" ? cs[_transformProp] : \"\");\n }\n\n style.scale = style.rotate = style.translate = \"none\";\n }\n\n matrix = _getMatrix(target, cache.svg);\n\n if (cache.svg) {\n if (cache.uncache) {\n // if cache.uncache is true (and maybe if origin is 0,0), we need to set element.style.transformOrigin = (cache.xOrigin - bbox.x) + \"px \" + (cache.yOrigin - bbox.y) + \"px\". Previously we let the data-svg-origin stay instead, but when introducing revert(), it complicated things.\n t2 = target.getBBox();\n origin = cache.xOrigin - t2.x + \"px \" + (cache.yOrigin - t2.y) + \"px\";\n t1 = \"\";\n } else {\n t1 = !uncache && target.getAttribute(\"data-svg-origin\"); // Remember, to work around browser inconsistencies we always force SVG elements' transformOrigin to 0,0 and offset the translation accordingly.\n }\n\n _applySVGOrigin(target, t1 || origin, !!t1 || cache.originIsAbsolute, cache.smooth !== false, matrix);\n }\n\n xOrigin = cache.xOrigin || 0;\n yOrigin = cache.yOrigin || 0;\n\n if (matrix !== _identity2DMatrix) {\n a = matrix[0]; //a11\n\n b = matrix[1]; //a21\n\n c = matrix[2]; //a31\n\n d = matrix[3]; //a41\n\n x = a12 = matrix[4];\n y = a22 = matrix[5]; //2D matrix\n\n if (matrix.length === 6) {\n scaleX = Math.sqrt(a * a + b * b);\n scaleY = Math.sqrt(d * d + c * c);\n rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).\n\n skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0;\n skewX && (scaleY *= Math.abs(Math.cos(skewX * _DEG2RAD)));\n\n if (cache.svg) {\n x -= xOrigin - (xOrigin * a + yOrigin * c);\n y -= yOrigin - (xOrigin * b + yOrigin * d);\n } //3D matrix\n\n } else {\n a32 = matrix[6];\n a42 = matrix[7];\n a13 = matrix[8];\n a23 = matrix[9];\n a33 = matrix[10];\n a43 = matrix[11];\n x = matrix[12];\n y = matrix[13];\n z = matrix[14];\n angle = _atan2(a32, a33);\n rotationX = angle * _RAD2DEG; //rotationX\n\n if (angle) {\n cos = Math.cos(-angle);\n sin = Math.sin(-angle);\n t1 = a12 * cos + a13 * sin;\n t2 = a22 * cos + a23 * sin;\n t3 = a32 * cos + a33 * sin;\n a13 = a12 * -sin + a13 * cos;\n a23 = a22 * -sin + a23 * cos;\n a33 = a32 * -sin + a33 * cos;\n a43 = a42 * -sin + a43 * cos;\n a12 = t1;\n a22 = t2;\n a32 = t3;\n } //rotationY\n\n\n angle = _atan2(-c, a33);\n rotationY = angle * _RAD2DEG;\n\n if (angle) {\n cos = Math.cos(-angle);\n sin = Math.sin(-angle);\n t1 = a * cos - a13 * sin;\n t2 = b * cos - a23 * sin;\n t3 = c * cos - a33 * sin;\n a43 = d * sin + a43 * cos;\n a = t1;\n b = t2;\n c = t3;\n } //rotationZ\n\n\n angle = _atan2(b, a);\n rotation = angle * _RAD2DEG;\n\n if (angle) {\n cos = Math.cos(angle);\n sin = Math.sin(angle);\n t1 = a * cos + b * sin;\n t2 = a12 * cos + a22 * sin;\n b = b * cos - a * sin;\n a22 = a22 * cos - a12 * sin;\n a = t1;\n a12 = t2;\n }\n\n if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) {\n //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here.\n rotationX = rotation = 0;\n rotationY = 180 - rotationY;\n }\n\n scaleX = _round(Math.sqrt(a * a + b * b + c * c));\n scaleY = _round(Math.sqrt(a22 * a22 + a32 * a32));\n angle = _atan2(a12, a22);\n skewX = Math.abs(angle) > 0.0002 ? angle * _RAD2DEG : 0;\n perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0;\n }\n\n if (cache.svg) {\n //sense if there are CSS transforms applied on an SVG element in which case we must overwrite them when rendering. The transform attribute is more reliable cross-browser, but we can't just remove the CSS ones because they may be applied in a CSS rule somewhere (not just inline).\n t1 = target.getAttribute(\"transform\");\n cache.forceCSS = target.setAttribute(\"transform\", \"\") || !_isNullTransform(_getComputedProperty(target, _transformProp));\n t1 && target.setAttribute(\"transform\", t1);\n }\n }\n\n if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {\n if (invertedScaleX) {\n scaleX *= -1;\n skewX += rotation <= 0 ? 180 : -180;\n rotation += rotation <= 0 ? 180 : -180;\n } else {\n scaleY *= -1;\n skewX += skewX <= 0 ? 180 : -180;\n }\n }\n\n uncache = uncache || cache.uncache;\n cache.x = x - ((cache.xPercent = x && (!uncache && cache.xPercent || (Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0))) ? target.offsetWidth * cache.xPercent / 100 : 0) + px;\n cache.y = y - ((cache.yPercent = y && (!uncache && cache.yPercent || (Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0))) ? target.offsetHeight * cache.yPercent / 100 : 0) + px;\n cache.z = z + px;\n cache.scaleX = _round(scaleX);\n cache.scaleY = _round(scaleY);\n cache.rotation = _round(rotation) + deg;\n cache.rotationX = _round(rotationX) + deg;\n cache.rotationY = _round(rotationY) + deg;\n cache.skewX = skewX + deg;\n cache.skewY = skewY + deg;\n cache.transformPerspective = perspective + px;\n\n if (cache.zOrigin = parseFloat(origin.split(\" \")[2]) || 0) {\n style[_transformOriginProp] = _firstTwoOnly(origin);\n }\n\n cache.xOffset = cache.yOffset = 0;\n cache.force3D = _config.force3D;\n cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms;\n cache.uncache = 0;\n return cache;\n},\n _firstTwoOnly = function _firstTwoOnly(value) {\n return (value = value.split(\" \"))[0] + \" \" + value[1];\n},\n //for handling transformOrigin values, stripping out the 3rd dimension\n_addPxTranslate = function _addPxTranslate(target, start, value) {\n var unit = getUnit(start);\n return _round(parseFloat(start) + parseFloat(_convertToUnit(target, \"x\", value + \"px\", unit))) + unit;\n},\n _renderNon3DTransforms = function _renderNon3DTransforms(ratio, cache) {\n cache.z = \"0px\";\n cache.rotationY = cache.rotationX = \"0deg\";\n cache.force3D = 0;\n\n _renderCSSTransforms(ratio, cache);\n},\n _zeroDeg = \"0deg\",\n _zeroPx = \"0px\",\n _endParenthesis = \") \",\n _renderCSSTransforms = function _renderCSSTransforms(ratio, cache) {\n var _ref = cache || this,\n xPercent = _ref.xPercent,\n yPercent = _ref.yPercent,\n x = _ref.x,\n y = _ref.y,\n z = _ref.z,\n rotation = _ref.rotation,\n rotationY = _ref.rotationY,\n rotationX = _ref.rotationX,\n skewX = _ref.skewX,\n skewY = _ref.skewY,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n transformPerspective = _ref.transformPerspective,\n force3D = _ref.force3D,\n target = _ref.target,\n zOrigin = _ref.zOrigin,\n transforms = \"\",\n use3D = force3D === \"auto\" && ratio && ratio !== 1 || force3D === true; // Safari has a bug that causes it not to render 3D transform-origin values properly, so we force the z origin to 0, record it in the cache, and then do the math here to offset the translate values accordingly (basically do the 3D transform-origin part manually)\n\n\n if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) {\n var angle = parseFloat(rotationY) * _DEG2RAD,\n a13 = Math.sin(angle),\n a33 = Math.cos(angle),\n cos;\n\n angle = parseFloat(rotationX) * _DEG2RAD;\n cos = Math.cos(angle);\n x = _addPxTranslate(target, x, a13 * cos * -zOrigin);\n y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin);\n z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin);\n }\n\n if (transformPerspective !== _zeroPx) {\n transforms += \"perspective(\" + transformPerspective + _endParenthesis;\n }\n\n if (xPercent || yPercent) {\n transforms += \"translate(\" + xPercent + \"%, \" + yPercent + \"%) \";\n }\n\n if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) {\n transforms += z !== _zeroPx || use3D ? \"translate3d(\" + x + \", \" + y + \", \" + z + \") \" : \"translate(\" + x + \", \" + y + _endParenthesis;\n }\n\n if (rotation !== _zeroDeg) {\n transforms += \"rotate(\" + rotation + _endParenthesis;\n }\n\n if (rotationY !== _zeroDeg) {\n transforms += \"rotateY(\" + rotationY + _endParenthesis;\n }\n\n if (rotationX !== _zeroDeg) {\n transforms += \"rotateX(\" + rotationX + _endParenthesis;\n }\n\n if (skewX !== _zeroDeg || skewY !== _zeroDeg) {\n transforms += \"skew(\" + skewX + \", \" + skewY + _endParenthesis;\n }\n\n if (scaleX !== 1 || scaleY !== 1) {\n transforms += \"scale(\" + scaleX + \", \" + scaleY + _endParenthesis;\n }\n\n target.style[_transformProp] = transforms || \"translate(0, 0)\";\n},\n _renderSVGTransforms = function _renderSVGTransforms(ratio, cache) {\n var _ref2 = cache || this,\n xPercent = _ref2.xPercent,\n yPercent = _ref2.yPercent,\n x = _ref2.x,\n y = _ref2.y,\n rotation = _ref2.rotation,\n skewX = _ref2.skewX,\n skewY = _ref2.skewY,\n scaleX = _ref2.scaleX,\n scaleY = _ref2.scaleY,\n target = _ref2.target,\n xOrigin = _ref2.xOrigin,\n yOrigin = _ref2.yOrigin,\n xOffset = _ref2.xOffset,\n yOffset = _ref2.yOffset,\n forceCSS = _ref2.forceCSS,\n tx = parseFloat(x),\n ty = parseFloat(y),\n a11,\n a21,\n a12,\n a22,\n temp;\n\n rotation = parseFloat(rotation);\n skewX = parseFloat(skewX);\n skewY = parseFloat(skewY);\n\n if (skewY) {\n //for performance reasons, we combine all skewing into the skewX and rotation values. Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of 10 degrees.\n skewY = parseFloat(skewY);\n skewX += skewY;\n rotation += skewY;\n }\n\n if (rotation || skewX) {\n rotation *= _DEG2RAD;\n skewX *= _DEG2RAD;\n a11 = Math.cos(rotation) * scaleX;\n a21 = Math.sin(rotation) * scaleX;\n a12 = Math.sin(rotation - skewX) * -scaleY;\n a22 = Math.cos(rotation - skewX) * scaleY;\n\n if (skewX) {\n skewY *= _DEG2RAD;\n temp = Math.tan(skewX - skewY);\n temp = Math.sqrt(1 + temp * temp);\n a12 *= temp;\n a22 *= temp;\n\n if (skewY) {\n temp = Math.tan(skewY);\n temp = Math.sqrt(1 + temp * temp);\n a11 *= temp;\n a21 *= temp;\n }\n }\n\n a11 = _round(a11);\n a21 = _round(a21);\n a12 = _round(a12);\n a22 = _round(a22);\n } else {\n a11 = scaleX;\n a22 = scaleY;\n a21 = a12 = 0;\n }\n\n if (tx && !~(x + \"\").indexOf(\"px\") || ty && !~(y + \"\").indexOf(\"px\")) {\n tx = _convertToUnit(target, \"x\", x, \"px\");\n ty = _convertToUnit(target, \"y\", y, \"px\");\n }\n\n if (xOrigin || yOrigin || xOffset || yOffset) {\n tx = _round(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset);\n ty = _round(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset);\n }\n\n if (xPercent || yPercent) {\n //The SVG spec doesn't support percentage-based translation in the \"transform\" attribute, so we merge it into the translation to simulate it.\n temp = target.getBBox();\n tx = _round(tx + xPercent / 100 * temp.width);\n ty = _round(ty + yPercent / 100 * temp.height);\n }\n\n temp = \"matrix(\" + a11 + \",\" + a21 + \",\" + a12 + \",\" + a22 + \",\" + tx + \",\" + ty + \")\";\n target.setAttribute(\"transform\", temp);\n forceCSS && (target.style[_transformProp] = temp); //some browsers prioritize CSS transforms over the transform attribute. When we sense that the user has CSS transforms applied, we must overwrite them this way (otherwise some browser simply won't render the transform attribute changes!)\n},\n _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue) {\n var cap = 360,\n isString = _isString(endValue),\n endNum = parseFloat(endValue) * (isString && ~endValue.indexOf(\"rad\") ? _RAD2DEG : 1),\n change = endNum - startNum,\n finalValue = startNum + change + \"deg\",\n direction,\n pt;\n\n if (isString) {\n direction = endValue.split(\"_\")[1];\n\n if (direction === \"short\") {\n change %= cap;\n\n if (change !== change % (cap / 2)) {\n change += change < 0 ? cap : -cap;\n }\n }\n\n if (direction === \"cw\" && change < 0) {\n change = (change + cap * _bigNum) % cap - ~~(change / cap) * cap;\n } else if (direction === \"ccw\" && change > 0) {\n change = (change - cap * _bigNum) % cap - ~~(change / cap) * cap;\n }\n }\n\n plugin._pt = pt = new PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd);\n pt.e = finalValue;\n pt.u = \"deg\";\n\n plugin._props.push(property);\n\n return pt;\n},\n _assign = function _assign(target, source) {\n // Internet Explorer doesn't have Object.assign(), so we recreate it here.\n for (var p in source) {\n target[p] = source[p];\n }\n\n return target;\n},\n _addRawTransformPTs = function _addRawTransformPTs(plugin, transforms, target) {\n //for handling cases where someone passes in a whole transform string, like transform: \"scale(2, 3) rotate(20deg) translateY(30em)\"\n var startCache = _assign({}, target._gsap),\n exclude = \"perspective,force3D,transformOrigin,svgOrigin\",\n style = target.style,\n endCache,\n p,\n startValue,\n endValue,\n startNum,\n endNum,\n startUnit,\n endUnit;\n\n if (startCache.svg) {\n startValue = target.getAttribute(\"transform\");\n target.setAttribute(\"transform\", \"\");\n style[_transformProp] = transforms;\n endCache = _parseTransform(target, 1);\n\n _removeProperty(target, _transformProp);\n\n target.setAttribute(\"transform\", startValue);\n } else {\n startValue = getComputedStyle(target)[_transformProp];\n style[_transformProp] = transforms;\n endCache = _parseTransform(target, 1);\n style[_transformProp] = startValue;\n }\n\n for (p in _transformProps) {\n startValue = startCache[p];\n endValue = endCache[p];\n\n if (startValue !== endValue && exclude.indexOf(p) < 0) {\n //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case.\n startUnit = getUnit(startValue);\n endUnit = getUnit(endValue);\n startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue);\n endNum = parseFloat(endValue);\n plugin._pt = new PropTween(plugin._pt, endCache, p, startNum, endNum - startNum, _renderCSSProp);\n plugin._pt.u = endUnit || 0;\n\n plugin._props.push(p);\n }\n }\n\n _assign(endCache, startCache);\n}; // handle splitting apart padding, margin, borderWidth, and borderRadius into their 4 components. Firefox, for example, won't report borderRadius correctly - it will only do borderTopLeftRadius and the other corners. We also want to handle paddingTop, marginLeft, borderRightWidth, etc.\n\n\n_forEachName(\"padding,margin,Width,Radius\", function (name, index) {\n var t = \"Top\",\n r = \"Right\",\n b = \"Bottom\",\n l = \"Left\",\n props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function (side) {\n return index < 2 ? name + side : \"border\" + side + name;\n });\n\n _specialProps[index > 1 ? \"border\" + name : name] = function (plugin, target, property, endValue, tween) {\n var a, vars;\n\n if (arguments.length < 4) {\n // getter, passed target, property, and unit (from _get())\n a = props.map(function (prop) {\n return _get(plugin, prop, property);\n });\n vars = a.join(\" \");\n return vars.split(a[0]).length === 5 ? a[0] : vars;\n }\n\n a = (endValue + \"\").split(\" \");\n vars = {};\n props.forEach(function (prop, i) {\n return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0];\n });\n plugin.init(target, vars, tween);\n };\n});\n\nexport var CSSPlugin = {\n name: \"css\",\n register: _initCore,\n targetTest: function targetTest(target) {\n return target.style && target.nodeType;\n },\n init: function init(target, vars, tween, index, targets) {\n var props = this._props,\n style = target.style,\n startAt = tween.vars.startAt,\n startValue,\n endValue,\n endNum,\n startNum,\n type,\n specialProp,\n p,\n startUnit,\n endUnit,\n relative,\n isTransformRelated,\n transformPropTween,\n cache,\n smooth,\n hasPriority,\n inlineProps;\n _pluginInitted || _initCore(); // we may call init() multiple times on the same plugin instance, like when adding special properties, so make sure we don't overwrite the revert data or inlineProps\n\n this.styles = this.styles || _getStyleSaver(target);\n inlineProps = this.styles.props;\n this.tween = tween;\n\n for (p in vars) {\n if (p === \"autoRound\") {\n continue;\n }\n\n endValue = vars[p];\n\n if (_plugins[p] && _checkPlugin(p, vars, tween, index, target, targets)) {\n // plugins\n continue;\n }\n\n type = typeof endValue;\n specialProp = _specialProps[p];\n\n if (type === \"function\") {\n endValue = endValue.call(tween, index, target, targets);\n type = typeof endValue;\n }\n\n if (type === \"string\" && ~endValue.indexOf(\"random(\")) {\n endValue = _replaceRandom(endValue);\n }\n\n if (specialProp) {\n specialProp(this, target, p, endValue, tween) && (hasPriority = 1);\n } else if (p.substr(0, 2) === \"--\") {\n //CSS variable\n startValue = (getComputedStyle(target).getPropertyValue(p) + \"\").trim();\n endValue += \"\";\n _colorExp.lastIndex = 0;\n\n if (!_colorExp.test(startValue)) {\n // colors don't have units\n startUnit = getUnit(startValue);\n endUnit = getUnit(endValue);\n }\n\n endUnit ? startUnit !== endUnit && (startValue = _convertToUnit(target, p, startValue, endUnit) + endUnit) : startUnit && (endValue += startUnit);\n this.add(style, \"setProperty\", startValue, endValue, index, targets, 0, 0, p);\n props.push(p);\n inlineProps.push(p, 0, style[p]);\n } else if (type !== \"undefined\") {\n if (startAt && p in startAt) {\n // in case someone hard-codes a complex value as the start, like top: \"calc(2vh / 2)\". Without this, it'd use the computed value (always in px)\n startValue = typeof startAt[p] === \"function\" ? startAt[p].call(tween, index, target, targets) : startAt[p];\n _isString(startValue) && ~startValue.indexOf(\"random(\") && (startValue = _replaceRandom(startValue));\n getUnit(startValue + \"\") || (startValue += _config.units[p] || getUnit(_get(target, p)) || \"\"); // for cases when someone passes in a unitless value like {x: 100}; if we try setting translate(100, 0px) it won't work.\n\n (startValue + \"\").charAt(1) === \"=\" && (startValue = _get(target, p)); // can't work with relative values\n } else {\n startValue = _get(target, p);\n }\n\n startNum = parseFloat(startValue);\n relative = type === \"string\" && endValue.charAt(1) === \"=\" && endValue.substr(0, 2);\n relative && (endValue = endValue.substr(2));\n endNum = parseFloat(endValue);\n\n if (p in _propertyAliases) {\n if (p === \"autoAlpha\") {\n //special case where we control the visibility along with opacity. We still allow the opacity value to pass through and get tweened.\n if (startNum === 1 && _get(target, \"visibility\") === \"hidden\" && endNum) {\n //if visibility is initially set to \"hidden\", we should interpret that as intent to make opacity 0 (a convenience)\n startNum = 0;\n }\n\n inlineProps.push(\"visibility\", 0, style.visibility);\n\n _addNonTweeningPT(this, style, \"visibility\", startNum ? \"inherit\" : \"hidden\", endNum ? \"inherit\" : \"hidden\", !endNum);\n }\n\n if (p !== \"scale\" && p !== \"transform\") {\n p = _propertyAliases[p];\n ~p.indexOf(\",\") && (p = p.split(\",\")[0]);\n }\n }\n\n isTransformRelated = p in _transformProps; //--- TRANSFORM-RELATED ---\n\n if (isTransformRelated) {\n this.styles.save(p);\n\n if (!transformPropTween) {\n cache = target._gsap;\n cache.renderTransform && !vars.parseTransform || _parseTransform(target, vars.parseTransform); // if, for example, gsap.set(... {transform:\"translateX(50vw)\"}), the _get() call doesn't parse the transform, thus cache.renderTransform won't be set yet so force the parsing of the transform here.\n\n smooth = vars.smoothOrigin !== false && cache.smooth;\n transformPropTween = this._pt = new PropTween(this._pt, style, _transformProp, 0, 1, cache.renderTransform, cache, 0, -1); //the first time through, create the rendering PropTween so that it runs LAST (in the linked list, we keep adding to the beginning)\n\n transformPropTween.dep = 1; //flag it as dependent so that if things get killed/overwritten and this is the only PropTween left, we can safely kill the whole tween.\n }\n\n if (p === \"scale\") {\n this._pt = new PropTween(this._pt, cache, \"scaleY\", cache.scaleY, (relative ? _parseRelative(cache.scaleY, relative + endNum) : endNum) - cache.scaleY || 0, _renderCSSProp);\n this._pt.u = 0;\n props.push(\"scaleY\", p);\n p += \"X\";\n } else if (p === \"transformOrigin\") {\n inlineProps.push(_transformOriginProp, 0, style[_transformOriginProp]);\n endValue = _convertKeywordsToPercentages(endValue); //in case something like \"left top\" or \"bottom right\" is passed in. Convert to percentages.\n\n if (cache.svg) {\n _applySVGOrigin(target, endValue, 0, smooth, 0, this);\n } else {\n endUnit = parseFloat(endValue.split(\" \")[2]) || 0; //handle the zOrigin separately!\n\n endUnit !== cache.zOrigin && _addNonTweeningPT(this, cache, \"zOrigin\", cache.zOrigin, endUnit);\n\n _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue));\n }\n\n continue;\n } else if (p === \"svgOrigin\") {\n _applySVGOrigin(target, endValue, 1, smooth, 0, this);\n\n continue;\n } else if (p in _rotationalProperties) {\n _addRotationalPropTween(this, cache, p, startNum, relative ? _parseRelative(startNum, relative + endValue) : endValue);\n\n continue;\n } else if (p === \"smoothOrigin\") {\n _addNonTweeningPT(this, cache, \"smooth\", cache.smooth, endValue);\n\n continue;\n } else if (p === \"force3D\") {\n cache[p] = endValue;\n continue;\n } else if (p === \"transform\") {\n _addRawTransformPTs(this, endValue, target);\n\n continue;\n }\n } else if (!(p in style)) {\n p = _checkPropPrefix(p) || p;\n }\n\n if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) {\n startUnit = (startValue + \"\").substr((startNum + \"\").length);\n endNum || (endNum = 0); // protect against NaN\n\n endUnit = getUnit(endValue) || (p in _config.units ? _config.units[p] : startUnit);\n startUnit !== endUnit && (startNum = _convertToUnit(target, p, startValue, endUnit));\n this._pt = new PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, (relative ? _parseRelative(startNum, relative + endNum) : endNum) - startNum, !isTransformRelated && (endUnit === \"px\" || p === \"zIndex\") && vars.autoRound !== false ? _renderRoundedCSSProp : _renderCSSProp);\n this._pt.u = endUnit || 0;\n\n if (startUnit !== endUnit && endUnit !== \"%\") {\n //when the tween goes all the way back to the beginning, we need to revert it to the OLD/ORIGINAL value (with those units). We record that as a \"b\" (beginning) property and point to a render method that handles that. (performance optimization)\n this._pt.b = startValue;\n this._pt.r = _renderCSSPropWithBeginning;\n }\n } else if (!(p in style)) {\n if (p in target) {\n //maybe it's not a style - it could be a property added directly to an element in which case we'll try to animate that.\n this.add(target, p, startValue || target[p], relative ? relative + endValue : endValue, index, targets);\n } else if (p !== \"parseTransform\") {\n _missingPlugin(p, endValue);\n\n continue;\n }\n } else {\n _tweenComplexCSSString.call(this, target, p, startValue, relative ? relative + endValue : endValue);\n }\n\n isTransformRelated || (p in style ? inlineProps.push(p, 0, style[p]) : inlineProps.push(p, 1, startValue || target[p]));\n props.push(p);\n }\n }\n\n hasPriority && _sortPropTweensByPriority(this);\n },\n render: function render(ratio, data) {\n if (data.tween._time || !_reverting()) {\n var pt = data._pt;\n\n while (pt) {\n pt.r(ratio, pt.d);\n pt = pt._next;\n }\n } else {\n data.styles.revert();\n }\n },\n get: _get,\n aliases: _propertyAliases,\n getSetter: function getSetter(target, property, plugin) {\n //returns a setter function that accepts target, property, value and applies it accordingly. Remember, properties like \"x\" aren't as simple as target.style.property = value because they've got to be applied to a proxy object and then merged into a transform string in a renderer.\n var p = _propertyAliases[property];\n p && p.indexOf(\",\") < 0 && (property = p);\n return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, \"x\")) ? plugin && _recentSetterPlugin === plugin ? property === \"scale\" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === \"scale\" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !_isUndefined(target.style[property]) ? _setterCSSStyle : ~property.indexOf(\"-\") ? _setterCSSProp : _getSetter(target, property);\n },\n core: {\n _removeProperty: _removeProperty,\n _getMatrix: _getMatrix\n }\n};\ngsap.utils.checkPrefix = _checkPropPrefix;\ngsap.core.getStyleSaver = _getStyleSaver;\n\n(function (positionAndScale, rotation, others, aliases) {\n var all = _forEachName(positionAndScale + \",\" + rotation + \",\" + others, function (name) {\n _transformProps[name] = 1;\n });\n\n _forEachName(rotation, function (name) {\n _config.units[name] = \"deg\";\n _rotationalProperties[name] = 1;\n });\n\n _propertyAliases[all[13]] = positionAndScale + \",\" + rotation;\n\n _forEachName(aliases, function (name) {\n var split = name.split(\":\");\n _propertyAliases[split[1]] = all[split[0]];\n });\n})(\"x,y,z,scale,scaleX,scaleY,xPercent,yPercent\", \"rotation,rotationX,rotationY,skewX,skewY\", \"transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective\", \"0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY\");\n\n_forEachName(\"x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective\", function (name) {\n _config.units[name] = \"px\";\n});\n\ngsap.registerPlugin(CSSPlugin);\nexport { CSSPlugin as default, _getBBox, _createElement, _checkPropPrefix as checkPrefix };","/**\r\n * A collection of commonly used utility functions.\r\n */\r\nclass Util {\r\n /**\r\n * Throttles a function.\r\n * @param callback\r\n * @param wait\r\n * @param context\r\n * @returns {Function}\r\n */\r\n static throttle(callback, wait = 200, context = this) {\r\n let last;\r\n let deferTimer;\r\n \r\n return function() {\r\n let now = +new Date();\r\n let args = arguments;\r\n \r\n if (last && now < last + wait) {\r\n // preserve by debouncing the last call\r\n clearTimeout(deferTimer);\r\n deferTimer = setTimeout(function() {\r\n last = now;\r\n callback.apply(context, args);\r\n }, wait);\r\n } else {\r\n last = now;\r\n callback.apply(context, args);\r\n }\r\n };\r\n }\r\n \r\n /**\r\n * Debounces a function.\r\n * @param callback\r\n * @param wait\r\n * @param context\r\n * @returns {Function}\r\n */\r\n static debounce(callback, wait = 200, context = this) {\r\n let timeout = null;\r\n let callbackArgs = null;\r\n \r\n const later = () => callback.apply(context, callbackArgs);\r\n \r\n return function() {\r\n callbackArgs = arguments;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n };\r\n }\r\n static $(selector, context) {\r\n return (context || document).querySelectorAll(selector);\r\n };\r\n static addEventListenerBySelector(className, event, fn) {\r\n var list = document.querySelectorAll(className);\r\n for (var i = 0, len = list.length; i < len; i++) {\r\n list[i].addEventListener(event, fn, false);\r\n }\r\n }\r\n \r\n static lerp(a, b, n) {\r\n return (1 - n) * a + n * b;\r\n }\r\n \r\n static map(value, in_min, in_max, out_min, out_max) {\r\n return (\r\n ((value - in_min) * (out_max - out_min)) / (in_max - in_min) + out_min\r\n );\r\n }\r\n }\r\n \r\n export default Util;","import { gsap } from \"gsap/gsap-core\";\r\nimport { CSSPlugin } from 'gsap/CSSPlugin';\r\nimport Util from \"../utils/util.js\";\r\ngsap.registerPlugin(CSSPlugin);\r\nclass Header {\r\n constructor() {\r\n this.initHeader();\r\n }\r\n settings = {\r\n desktop: '1024px'\r\n }\r\n mobileCheck(){\r\n if(window.matchMedia('(min-width:'+ this.settings.desktop +')').matches){\r\n return false;\r\n }else{\r\n return true;\r\n }\r\n }\r\n initHeader(){\r\n let t = this;\r\n document.addEventListener(\"DOMContentLoaded\",function(){\r\n let header = Util.$('.js-header');\r\n let hero = Util.$('.js-hero');\r\n let homepageHero = Util.$('.js-homepage-hero');\r\n let menuButton = Util.$('.js-header__menu-btn', header[0]);\r\n let mainNav = Util.$('.js-main-nav' , header[0]);\r\n let booknowButton = Util.$('.js-header__utility-booknow', header[0]);\r\n let booknowDropdown = Util.$('.js-header__utility-booknow-dropdown' , header[0]);\r\n let booknowDropdownContent = Util.$('.js-header__utility-booknow-dropdown-wrapper' , header[0]);\r\n\r\n \r\n \r\n hero.forEach(function(el){\r\n let heroImg = Util.$('.js-hero__img', el);\r\n let heroVid = Util.$('.js-hero__video', el);\r\n if(heroImg.length > 0 || heroVid.length > 0){\r\n header[0].classList.add('-has-hero');\r\n }\r\n });\r\n \r\n if(homepageHero.length > 0){\r\n header[0].classList.add('-has-homepage','-has-hero');\r\n }\r\n if(menuButton.length > 0){\r\n t.bindDropdownToggle(mainNav[0], menuButton[0], header[0], '-main-nav-open');\r\n }\r\n if(booknowDropdown.length > 0){\r\n t.bindDesktopDropdownToggle(booknowDropdown[0],booknowButton[0], booknowDropdownContent[0]);\r\n }\r\n t.scrollBehavior(header[0]);\r\n })\r\n \r\n }\r\n bindDropdownToggle(dropdown, item, parent, className){\r\n // FOR ALL MENU TOGGLE BUTTONS - TOGGLE CLASS ON ITEM AND DROPDOWN\r\n let h = this;\r\n item.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n let active = item.classList.contains('-active');\r\n let body = document.getElementsByTagName( 'body' )[0];\r\n let searchActive = body.classList.contains('search-open');\r\n let weatherActive = body.classList.contains('weather-open');\r\n if(active){\r\n item.classList.remove('-active');\r\n dropdown.classList.remove('-active');\r\n parent.classList.remove(className);\r\n body.classList.remove('menu-open');\r\n h.hideDropdown(dropdown);\r\n if(searchActive){\r\n window.setTimeout(350, function(){\r\n parent.classList.add('-search-open');\r\n });\r\n }\r\n if(weatherActive){\r\n setTimeout(function(){\r\n parent.classList.add('-mountain-report-open');\r\n }, 350);\r\n }\r\n }else{\r\n if(searchActive){\r\n parent.classList.remove('-search-open');\r\n }\r\n if(weatherActive){\r\n parent.classList.remove('-mountain-report-open');\r\n }\r\n item.classList.add('-active');\r\n dropdown.classList.add('-active');\r\n parent.classList.add(className);\r\n body.classList.add('menu-open');\r\n h.showDropdown(dropdown);\r\n }\r\n \r\n });\r\n }\r\n bindDesktopDropdownToggle(dropdown, item, content){\r\n // FOR ALL MENU TOGGLE BUTTONS - TOGGLE CLASS ON ITEM AND DROPDOWN\r\n let h = this;\r\n window.addEventListener('click', function(ev){\r\n let active = item.classList.contains('-active');\r\n if(active){\r\n item.classList.remove('-active');\r\n dropdown.classList.remove('-active');\r\n h.hideDesktopDropdown(dropdown);\r\n }\r\n });\r\n item.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n let active = item.classList.contains('-active');\r\n if(active){\r\n item.classList.remove('-active');\r\n dropdown.classList.remove('-active');\r\n h.hideDesktopDropdown(dropdown);\r\n }else{\r\n item.classList.add('-active');\r\n dropdown.classList.add('-active');\r\n let height = content.offsetHeight;\r\n h.showDesktopDropdown(dropdown, height);\r\n }\r\n \r\n });\r\n }\r\n showDesktopDropdown(dropdown, height){\r\n let tween = {height: ''};\r\n tween.height = height;\r\n gsap.to(dropdown, tween);\r\n }\r\n hideDesktopDropdown(dropdown){\r\n gsap.to(dropdown, {height: '0px'});\r\n }\r\n showDropdown(dropdown){\r\n gsap.to(dropdown, {height: '100vh'});\r\n }\r\n hideDropdown(dropdown){\r\n gsap.to(dropdown, {height: '0vh'});\r\n }\r\n scrollBehavior(header){\r\n // ADDING SCROLL DETECTION WITH REQUEST ANIMATION FRAME TO CHILL IT OUT\r\n let latestKnownScrollY = 0,\r\n scrollCountStart = 0,\r\n scrollDist = 0,\r\n ticking = false;\r\n\r\n const update = () => {\r\n // reset the tick so we can\r\n // capture the next onScroll\r\n ticking = false;\r\n }\r\n\r\n const onScroll = (ev) => {\r\n let prevScroll = latestKnownScrollY;\r\n if(window.scrollY){\r\n latestKnownScrollY = window.scrollY;\r\n }else{\r\n latestKnownScrollY = window.pageYOffset\r\n }\r\n if(latestKnownScrollY == 0){\r\n header.classList.remove('-scrollup');\r\n header.classList.remove('-scrolled');\r\n header.classList.remove('-scroll-hide');\r\n scrollCountStart = 0;\r\n }else if(prevScroll > latestKnownScrollY){\r\n header.classList.add('-scrollup');\r\n scrollDist = scrollDist + (latestKnownScrollY - prevScroll);\r\n scrollCountStart = scrollDist;\r\n }else{\r\n header.classList.add('-scrolled');\r\n scrollDist = scrollDist + (latestKnownScrollY - prevScroll);\r\n if(scrollDist > scrollCountStart + 300){\r\n header.classList.add('-scroll-hide');\r\n header.classList.remove('-scrollup');\r\n scrollCountStart = scrollDist;\r\n }\r\n }\r\n requestTick();\r\n }\r\n\r\n const requestTick = () => {\r\n if(!ticking) {\r\n requestAnimationFrame(update);\r\n }\r\n ticking = true;\r\n }\r\n\r\n window.addEventListener('scroll', onScroll, false);\r\n }\r\n}\r\nexport default Header;","import { gsap } from \"gsap/gsap-core\";\r\nimport { CSSPlugin } from 'gsap/CSSPlugin';\r\nimport Util from \"../utils/util.js\";\r\ngsap.registerPlugin(CSSPlugin);\r\nclass MainNav {\r\n constructor() {\r\n this.initMainMenu();\r\n }\r\n settings = {\r\n desktop: '1056px',\r\n toggleClass: '-item-active'\r\n }\r\n mobileCheck(){\r\n if(window.matchMedia('(min-width:'+ this.settings.desktop +')').matches){\r\n return false;\r\n }else{\r\n return true;\r\n }\r\n }\r\n initMainMenu(){\r\n let mainNav = Util.$('.js-main-nav');\r\n let toggleItem = Util.$('.js-main-nav__list-item');\r\n let header = Util.$('.js-header');\r\n let h = this;\r\n let s = this.settings;\r\n toggleItem.forEach(function(el){\r\n let thisLink = Util.$('.js-main-nav__list-item-link', el);\r\n let thisDropdown = Util.$('.js-main-nav__subnav', el);\r\n let thisPlus = Util.$('.main-nav__link-plus', el);\r\n if(thisPlus.length > 0){\r\n h.bindSubnavToggle(thisDropdown[0], thisLink[0], header[0], '-subnav-open', s.toggleClass);\r\n }\r\n });\r\n //this.seasonToggle(mainNav);\r\n //this.bindDropdownToggle(mainNav[0], menuButton[0], header[0], '-main-nav-open');\r\n }\r\n bindSubnavToggle(subnav, item, parent, className, toggleClass){\r\n // FOR ALL MENU TOGGLE BUTTONS - TOGGLE CLASS ON ITEM AND DROPDOWN\r\n let h = this;\r\n const findSiblings = function(item){\r\n let theListitem = item.parentElement;\r\n let theList = item.parentElement.parentElement;\r\n let theSiblings = Util.$('.js-main-nav__list-item', theList);\r\n let siblings = [];\r\n theSiblings.forEach(function(el){\r\n if(el != theListitem){\r\n siblings.push(el);\r\n }\r\n });\r\n return siblings;\r\n\r\n };\r\n const findActive = function(siblings){\r\n let activeMenuItem = {};\r\n activeMenuItem.active = false;\r\n siblings.forEach(function(el){\r\n let thisLink = Util.$('.js-main-nav__list-item-link', el);\r\n let thisMenu = Util.$('.js-main-nav__subnav', el);\r\n if(thisLink[0].classList.contains('-item-active')){\r\n activeMenuItem.link = thisLink[0];\r\n activeMenuItem.nav = thisMenu[0];\r\n activeMenuItem.active = true;\r\n }\r\n });\r\n return activeMenuItem;\r\n };\r\n item.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n let active = item.classList.contains(toggleClass);\r\n let siblings = findSiblings(item);\r\n \r\n let activeListItem = findActive(siblings);\r\n if(active){\r\n item.classList.remove(toggleClass);\r\n subnav.classList.remove(toggleClass);\r\n parent.classList.remove(className);\r\n h.hideSubmenu(subnav);\r\n }else{\r\n let height = 0;\r\n if(h.mobileCheck()){\r\n let innerItem = Util.$('.js-main-nav__subwrapper', subnav)[0];\r\n height = innerItem.offsetHeight;\r\n }else{\r\n if(activeListItem.active){\r\n activeListItem.nav.classList.add('-layered');\r\n setTimeout(function(){\r\n activeListItem.nav.classList.remove('-item-active');\r\n activeListItem.link.classList.remove('-item-active');\r\n // activeListItem.nav.classList.remove('-layered');\r\n // activeListItem.link.classlist.remove('-item-active');\r\n activeListItem.nav.removeAttribute(\"style\");\r\n }, 500);\r\n setTimeout(function(){\r\n activeListItem.nav.classList.remove('-layered');\r\n }, 1000);\r\n }\r\n }\r\n\r\n item.classList.add(toggleClass);\r\n subnav.classList.add(toggleClass);\r\n parent.classList.add(className);\r\n h.showSubmenu(subnav, height);\r\n }\r\n \r\n });\r\n }\r\n showSubmenu(dropdown, height){\r\n if(this.mobileCheck()){\r\n let tween = {height: ''};\r\n tween.height = height;\r\n gsap.to(dropdown, tween);\r\n }else{\r\n let currentActive = Util.$('.js-main-nav__subnav.-item-active');\r\n let currentActiveBtn = Util.$('.js-main-nav__list-item-link.-item-active');\r\n let tween = {width: '66%'};\r\n \r\n if(currentActive.length>0){\r\n tween.callback = function(){\r\n //currentActiveBtn.click();\r\n }\r\n }\r\n gsap.to(dropdown, tween);\r\n }\r\n }\r\n hideSubmenu(dropdown){\r\n if(this.mobileCheck()){\r\n gsap.to(dropdown, {height: '0px'});\r\n }else{\r\n gsap.to(dropdown, {width: '0%'});\r\n }\r\n \r\n } \r\n}\r\nexport default MainNav;","import { gsap } from \"gsap/gsap-core\";\r\nimport { CSSPlugin } from 'gsap/CSSPlugin';\r\nimport Util from \"../utils/util.js\";\r\ngsap.registerPlugin(CSSPlugin);\r\nclass Search {\r\n constructor() {\r\n this.initSearch();\r\n }\r\n settings = {\r\n desktop: '1024px'\r\n }\r\n mobileCheck(){\r\n if(window.matchMedia('(min-width:'+ this.settings.desktop +')').matches){\r\n return false;\r\n }else{\r\n return true;\r\n }\r\n }\r\n initSearch(){\r\n let t = this;\r\n document.addEventListener(\"DOMContentLoaded\",function(){\r\n let header = Util.$('.js-header');\r\n let searchButton = Util.$('.js-header__utility-search', header[0]);\r\n let searchDropdown = Util.$('.js-search' , header[0]);\r\n let searchDropdownClose = Util.$('.js-search__close' , header[0]);\r\n if(searchDropdown.length > 0 && searchButton.length > 0){\r\n t.bindDropdownToggle(searchDropdown[0], searchButton[0], header[0], '-search-open', searchDropdownClose[0]);\r\n }\r\n })\r\n \r\n }\r\n bindDropdownToggle(dropdown, item, parent, className, closeBtn){\r\n // FOR ALL MENU TOGGLE BUTTONS - TOGGLE CLASS ON ITEM AND DROPDOWN\r\n let h = this;\r\n item.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n let active = item.classList.contains('-active');\r\n let body = document.getElementsByTagName( 'body' )[0];\r\n let menuActive = body.classList.contains('menu-open');\r\n let weatherActive = body.classList.contains('weather-open');\r\n if(active){\r\n item.classList.remove('-active');\r\n dropdown.classList.remove('-active');\r\n parent.classList.remove(className);\r\n body.classList.remove('search-open');\r\n h.hideDropdown(dropdown);\r\n if(menuActive){\r\n setTimeout(function(){\r\n parent.classList.add('-main-nav-open');\r\n }, 350);\r\n }\r\n if(weatherActive){\r\n setTimeout(function(){\r\n parent.classList.add('-mountain-report-open');\r\n }, 350);\r\n }\r\n }else{\r\n if(menuActive){\r\n parent.classList.remove('-main-nav-open');\r\n }\r\n if(weatherActive){\r\n parent.classList.remove('-mountain-report-open');\r\n }\r\n item.classList.add('-active');\r\n dropdown.classList.add('-active');\r\n parent.classList.add(className);\r\n body.classList.add('search-open');\r\n h.showDropdown(dropdown);\r\n }\r\n \r\n });\r\n closeBtn.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n item.click();\r\n })\r\n }\r\n showDropdown(dropdown){\r\n gsap.to(dropdown, {height: '100vh'});\r\n }\r\n hideDropdown(dropdown){\r\n gsap.to(dropdown, {height: '0vh'});\r\n }\r\n \r\n}\r\nexport default Search;","import { gsap } from \"gsap/gsap-core\";\r\nimport { CSSPlugin } from 'gsap/CSSPlugin';\r\nimport Util from \"../utils/util.js\";\r\ngsap.registerPlugin(CSSPlugin);\r\nclass Breadcrumbs {\r\n constructor() {\r\n this.initBreadcrumbs();\r\n }\r\n settings = {\r\n desktop: '1056px'\r\n }\r\n mobileCheck(){\r\n // if(window.matchMedia('(min-width:'+ this.settings.desktop +')').matches){\r\n // return false;\r\n // }else{\r\n // return true;\r\n // }\r\n if(window.matchMedia('(min-width:'+ this.settings.desktop +')').matches){\r\n return false;\r\n }else{\r\n return true;\r\n }\r\n }\r\n initBreadcrumbs(){\r\n let t = this;\r\n document.addEventListener(\"DOMContentLoaded\",function(){\r\n let breadcrumbs = Util.$('.js-breadcrumbs');\r\n let breadcrumbLinks = Util.$('.js-breadcrumbs__list-item-link', breadcrumbs[0]);\r\n if(breadcrumbs.length > 0){\r\n t.configureLinks(breadcrumbs, breadcrumbLinks)\r\n } \r\n })\r\n \r\n }\r\n configureLinks(breadcrumbs, links){\r\n // FOR ALL MENU TOGGLE BUTTONS - TOGGLE CLASS ON ITEM AND DROPDOWN\r\n let t = this;\r\n let shrunkLinks = 0;\r\n let mobile = t.mobileCheck();\r\n if(t.mobileCheck()){\r\n if(links.length > 3){\r\n shrunkLinks = links.length - 3;\r\n }\r\n }else{\r\n if(links.length > 4){\r\n shrunkLinks = links.length - 4;\r\n }\r\n \r\n }\r\n if(shrunkLinks > 0){\r\n for(let step = 0; step < shrunkLinks; step++ ){\r\n let index = step + 1;\r\n links[index].classList.add('-abbreviated');\r\n links[index].addEventListener('click', function(ev){\r\n if(!t.mobileCheck()){\r\n ev.preventDefault();\r\n //links[index].classList.remove('-abbreviated');\r\n console.log(shrunkLinks);\r\n links.forEach(function(el){\r\n el.classList.remove('-abbreviated');\r\n });\r\n }\r\n });\r\n }\r\n }\r\n } \r\n}\r\nexport default Breadcrumbs;","/*!\n * lightgallery | 2.7.1 | January 11th 2023\n * http://www.lightgalleryjs.com/\n * Copyright (c) 2020 Sachin Neravath;\n * @license GPLv3\n */\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\n\n/**\r\n * List of lightGallery events\r\n * All events should be documented here\r\n * Below interfaces are used to build the website documentations\r\n * */\r\nvar lGEvents = {\r\n afterAppendSlide: 'lgAfterAppendSlide',\r\n init: 'lgInit',\r\n hasVideo: 'lgHasVideo',\r\n containerResize: 'lgContainerResize',\r\n updateSlides: 'lgUpdateSlides',\r\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\r\n beforeOpen: 'lgBeforeOpen',\r\n afterOpen: 'lgAfterOpen',\r\n slideItemLoad: 'lgSlideItemLoad',\r\n beforeSlide: 'lgBeforeSlide',\r\n afterSlide: 'lgAfterSlide',\r\n posterClick: 'lgPosterClick',\r\n dragStart: 'lgDragStart',\r\n dragMove: 'lgDragMove',\r\n dragEnd: 'lgDragEnd',\r\n beforeNextSlide: 'lgBeforeNextSlide',\r\n beforePrevSlide: 'lgBeforePrevSlide',\r\n beforeClose: 'lgBeforeClose',\r\n afterClose: 'lgAfterClose',\r\n rotateLeft: 'lgRotateLeft',\r\n rotateRight: 'lgRotateRight',\r\n flipHorizontal: 'lgFlipHorizontal',\r\n flipVertical: 'lgFlipVertical',\r\n autoplay: 'lgAutoplay',\r\n autoplayStart: 'lgAutoplayStart',\r\n autoplayStop: 'lgAutoplayStop',\r\n};\n\nvar lightGalleryCoreSettings = {\r\n mode: 'lg-slide',\r\n easing: 'ease',\r\n speed: 400,\r\n licenseKey: '0000-0000-000-0000',\r\n height: '100%',\r\n width: '100%',\r\n addClass: '',\r\n startClass: 'lg-start-zoom',\r\n backdropDuration: 300,\r\n container: '',\r\n startAnimationDuration: 400,\r\n zoomFromOrigin: true,\r\n hideBarsDelay: 0,\r\n showBarsAfter: 10000,\r\n slideDelay: 0,\r\n supportLegacyBrowser: true,\r\n allowMediaOverlap: false,\r\n videoMaxSize: '1280-720',\r\n loadYouTubePoster: true,\r\n defaultCaptionHeight: 0,\r\n ariaLabelledby: '',\r\n ariaDescribedby: '',\r\n resetScrollPosition: true,\r\n hideScrollbar: false,\r\n closable: true,\r\n swipeToClose: true,\r\n closeOnTap: true,\r\n showCloseIcon: true,\r\n showMaximizeIcon: false,\r\n loop: true,\r\n escKey: true,\r\n keyPress: true,\r\n trapFocus: true,\r\n controls: true,\r\n slideEndAnimation: true,\r\n hideControlOnEnd: false,\r\n mousewheel: false,\r\n getCaptionFromTitleOrAlt: true,\r\n appendSubHtmlTo: '.lg-sub-html',\r\n subHtmlSelectorRelative: false,\r\n preload: 2,\r\n numberOfSlideItemsInDom: 10,\r\n selector: '',\r\n selectWithin: '',\r\n nextHtml: '',\r\n prevHtml: '',\r\n index: 0,\r\n iframeWidth: '100%',\r\n iframeHeight: '100%',\r\n iframeMaxWidth: '100%',\r\n iframeMaxHeight: '100%',\r\n download: true,\r\n counter: true,\r\n appendCounterTo: '.lg-toolbar',\r\n swipeThreshold: 50,\r\n enableSwipe: true,\r\n enableDrag: true,\r\n dynamic: false,\r\n dynamicEl: [],\r\n extraProps: [],\r\n exThumbImage: '',\r\n isMobile: undefined,\r\n mobileSettings: {\r\n controls: false,\r\n showCloseIcon: false,\r\n download: false,\r\n },\r\n plugins: [],\r\n strings: {\r\n closeGallery: 'Close gallery',\r\n toggleMaximize: 'Toggle maximize',\r\n previousSlide: 'Previous slide',\r\n nextSlide: 'Next slide',\r\n download: 'Download',\r\n playVideo: 'Play video',\r\n },\r\n};\n\nfunction initLgPolyfills() {\r\n (function () {\r\n if (typeof window.CustomEvent === 'function')\r\n return false;\r\n function CustomEvent(event, params) {\r\n params = params || {\r\n bubbles: false,\r\n cancelable: false,\r\n detail: null,\r\n };\r\n var evt = document.createEvent('CustomEvent');\r\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\r\n return evt;\r\n }\r\n window.CustomEvent = CustomEvent;\r\n })();\r\n (function () {\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches =\r\n Element.prototype.msMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector;\r\n }\r\n })();\r\n}\r\nvar lgQuery = /** @class */ (function () {\r\n function lgQuery(selector) {\r\n this.cssVenderPrefixes = [\r\n 'TransitionDuration',\r\n 'TransitionTimingFunction',\r\n 'Transform',\r\n 'Transition',\r\n ];\r\n this.selector = this._getSelector(selector);\r\n this.firstElement = this._getFirstEl();\r\n return this;\r\n }\r\n lgQuery.generateUUID = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n };\r\n lgQuery.prototype._getSelector = function (selector, context) {\r\n if (context === void 0) { context = document; }\r\n if (typeof selector !== 'string') {\r\n return selector;\r\n }\r\n context = context || document;\r\n var fl = selector.substring(0, 1);\r\n if (fl === '#') {\r\n return context.querySelector(selector);\r\n }\r\n else {\r\n return context.querySelectorAll(selector);\r\n }\r\n };\r\n lgQuery.prototype._each = function (func) {\r\n if (!this.selector) {\r\n return this;\r\n }\r\n if (this.selector.length !== undefined) {\r\n [].forEach.call(this.selector, func);\r\n }\r\n else {\r\n func(this.selector, 0);\r\n }\r\n return this;\r\n };\r\n lgQuery.prototype._setCssVendorPrefix = function (el, cssProperty, value) {\r\n // prettier-ignore\r\n var property = cssProperty.replace(/-([a-z])/gi, function (s, group1) {\r\n return group1.toUpperCase();\r\n });\r\n if (this.cssVenderPrefixes.indexOf(property) !== -1) {\r\n el.style[property.charAt(0).toLowerCase() + property.slice(1)] = value;\r\n el.style['webkit' + property] = value;\r\n el.style['moz' + property] = value;\r\n el.style['ms' + property] = value;\r\n el.style['o' + property] = value;\r\n }\r\n else {\r\n el.style[property] = value;\r\n }\r\n };\r\n lgQuery.prototype._getFirstEl = function () {\r\n if (this.selector && this.selector.length !== undefined) {\r\n return this.selector[0];\r\n }\r\n else {\r\n return this.selector;\r\n }\r\n };\r\n lgQuery.prototype.isEventMatched = function (event, eventName) {\r\n var eventNamespace = eventName.split('.');\r\n return event\r\n .split('.')\r\n .filter(function (e) { return e; })\r\n .every(function (e) {\r\n return eventNamespace.indexOf(e) !== -1;\r\n });\r\n };\r\n lgQuery.prototype.attr = function (attr, value) {\r\n if (value === undefined) {\r\n if (!this.firstElement) {\r\n return '';\r\n }\r\n return this.firstElement.getAttribute(attr);\r\n }\r\n this._each(function (el) {\r\n el.setAttribute(attr, value);\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.find = function (selector) {\r\n return $LG(this._getSelector(selector, this.selector));\r\n };\r\n lgQuery.prototype.first = function () {\r\n if (this.selector && this.selector.length !== undefined) {\r\n return $LG(this.selector[0]);\r\n }\r\n else {\r\n return $LG(this.selector);\r\n }\r\n };\r\n lgQuery.prototype.eq = function (index) {\r\n return $LG(this.selector[index]);\r\n };\r\n lgQuery.prototype.parent = function () {\r\n return $LG(this.selector.parentElement);\r\n };\r\n lgQuery.prototype.get = function () {\r\n return this._getFirstEl();\r\n };\r\n lgQuery.prototype.removeAttr = function (attributes) {\r\n var attrs = attributes.split(' ');\r\n this._each(function (el) {\r\n attrs.forEach(function (attr) { return el.removeAttribute(attr); });\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.wrap = function (className) {\r\n if (!this.firstElement) {\r\n return this;\r\n }\r\n var wrapper = document.createElement('div');\r\n wrapper.className = className;\r\n this.firstElement.parentNode.insertBefore(wrapper, this.firstElement);\r\n this.firstElement.parentNode.removeChild(this.firstElement);\r\n wrapper.appendChild(this.firstElement);\r\n return this;\r\n };\r\n lgQuery.prototype.addClass = function (classNames) {\r\n if (classNames === void 0) { classNames = ''; }\r\n this._each(function (el) {\r\n // IE doesn't support multiple arguments\r\n classNames.split(' ').forEach(function (className) {\r\n if (className) {\r\n el.classList.add(className);\r\n }\r\n });\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.removeClass = function (classNames) {\r\n this._each(function (el) {\r\n // IE doesn't support multiple arguments\r\n classNames.split(' ').forEach(function (className) {\r\n if (className) {\r\n el.classList.remove(className);\r\n }\r\n });\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.hasClass = function (className) {\r\n if (!this.firstElement) {\r\n return false;\r\n }\r\n return this.firstElement.classList.contains(className);\r\n };\r\n lgQuery.prototype.hasAttribute = function (attribute) {\r\n if (!this.firstElement) {\r\n return false;\r\n }\r\n return this.firstElement.hasAttribute(attribute);\r\n };\r\n lgQuery.prototype.toggleClass = function (className) {\r\n if (!this.firstElement) {\r\n return this;\r\n }\r\n if (this.hasClass(className)) {\r\n this.removeClass(className);\r\n }\r\n else {\r\n this.addClass(className);\r\n }\r\n return this;\r\n };\r\n lgQuery.prototype.css = function (property, value) {\r\n var _this = this;\r\n this._each(function (el) {\r\n _this._setCssVendorPrefix(el, property, value);\r\n });\r\n return this;\r\n };\r\n // Need to pass separate namespaces for separate elements\r\n lgQuery.prototype.on = function (events, listener) {\r\n var _this = this;\r\n if (!this.selector) {\r\n return this;\r\n }\r\n events.split(' ').forEach(function (event) {\r\n if (!Array.isArray(lgQuery.eventListeners[event])) {\r\n lgQuery.eventListeners[event] = [];\r\n }\r\n lgQuery.eventListeners[event].push(listener);\r\n _this.selector.addEventListener(event.split('.')[0], listener);\r\n });\r\n return this;\r\n };\r\n // @todo - test this\r\n lgQuery.prototype.once = function (event, listener) {\r\n var _this = this;\r\n this.on(event, function () {\r\n _this.off(event);\r\n listener(event);\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.off = function (event) {\r\n var _this = this;\r\n if (!this.selector) {\r\n return this;\r\n }\r\n Object.keys(lgQuery.eventListeners).forEach(function (eventName) {\r\n if (_this.isEventMatched(event, eventName)) {\r\n lgQuery.eventListeners[eventName].forEach(function (listener) {\r\n _this.selector.removeEventListener(eventName.split('.')[0], listener);\r\n });\r\n lgQuery.eventListeners[eventName] = [];\r\n }\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.trigger = function (event, detail) {\r\n if (!this.firstElement) {\r\n return this;\r\n }\r\n var customEvent = new CustomEvent(event.split('.')[0], {\r\n detail: detail || null,\r\n });\r\n this.firstElement.dispatchEvent(customEvent);\r\n return this;\r\n };\r\n // Does not support IE\r\n lgQuery.prototype.load = function (url) {\r\n var _this = this;\r\n fetch(url)\r\n .then(function (res) { return res.text(); })\r\n .then(function (html) {\r\n _this.selector.innerHTML = html;\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.html = function (html) {\r\n if (html === undefined) {\r\n if (!this.firstElement) {\r\n return '';\r\n }\r\n return this.firstElement.innerHTML;\r\n }\r\n this._each(function (el) {\r\n el.innerHTML = html;\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.append = function (html) {\r\n this._each(function (el) {\r\n if (typeof html === 'string') {\r\n el.insertAdjacentHTML('beforeend', html);\r\n }\r\n else {\r\n el.appendChild(html);\r\n }\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.prepend = function (html) {\r\n this._each(function (el) {\r\n el.insertAdjacentHTML('afterbegin', html);\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.remove = function () {\r\n this._each(function (el) {\r\n el.parentNode.removeChild(el);\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.empty = function () {\r\n this._each(function (el) {\r\n el.innerHTML = '';\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.scrollTop = function (scrollTop) {\r\n if (scrollTop !== undefined) {\r\n document.body.scrollTop = scrollTop;\r\n document.documentElement.scrollTop = scrollTop;\r\n return this;\r\n }\r\n else {\r\n return (window.pageYOffset ||\r\n document.documentElement.scrollTop ||\r\n document.body.scrollTop ||\r\n 0);\r\n }\r\n };\r\n lgQuery.prototype.scrollLeft = function (scrollLeft) {\r\n if (scrollLeft !== undefined) {\r\n document.body.scrollLeft = scrollLeft;\r\n document.documentElement.scrollLeft = scrollLeft;\r\n return this;\r\n }\r\n else {\r\n return (window.pageXOffset ||\r\n document.documentElement.scrollLeft ||\r\n document.body.scrollLeft ||\r\n 0);\r\n }\r\n };\r\n lgQuery.prototype.offset = function () {\r\n if (!this.firstElement) {\r\n return {\r\n left: 0,\r\n top: 0,\r\n };\r\n }\r\n var rect = this.firstElement.getBoundingClientRect();\r\n var bodyMarginLeft = $LG('body').style().marginLeft;\r\n // Minus body margin - https://stackoverflow.com/questions/30711548/is-getboundingclientrect-left-returning-a-wrong-value\r\n return {\r\n left: rect.left - parseFloat(bodyMarginLeft) + this.scrollLeft(),\r\n top: rect.top + this.scrollTop(),\r\n };\r\n };\r\n lgQuery.prototype.style = function () {\r\n if (!this.firstElement) {\r\n return {};\r\n }\r\n return (this.firstElement.currentStyle ||\r\n window.getComputedStyle(this.firstElement));\r\n };\r\n // Width without padding and border even if box-sizing is used.\r\n lgQuery.prototype.width = function () {\r\n var style = this.style();\r\n return (this.firstElement.clientWidth -\r\n parseFloat(style.paddingLeft) -\r\n parseFloat(style.paddingRight));\r\n };\r\n // Height without padding and border even if box-sizing is used.\r\n lgQuery.prototype.height = function () {\r\n var style = this.style();\r\n return (this.firstElement.clientHeight -\r\n parseFloat(style.paddingTop) -\r\n parseFloat(style.paddingBottom));\r\n };\r\n lgQuery.eventListeners = {};\r\n return lgQuery;\r\n}());\r\nfunction $LG(selector) {\r\n initLgPolyfills();\r\n return new lgQuery(selector);\r\n}\n\nvar defaultDynamicOptions = [\r\n 'src',\r\n 'sources',\r\n 'subHtml',\r\n 'subHtmlUrl',\r\n 'html',\r\n 'video',\r\n 'poster',\r\n 'slideName',\r\n 'responsive',\r\n 'srcset',\r\n 'sizes',\r\n 'iframe',\r\n 'downloadUrl',\r\n 'download',\r\n 'width',\r\n 'facebookShareUrl',\r\n 'tweetText',\r\n 'iframeTitle',\r\n 'twitterShareUrl',\r\n 'pinterestShareUrl',\r\n 'pinterestText',\r\n 'fbHtml',\r\n 'disqusIdentifier',\r\n 'disqusUrl',\r\n];\r\n// Convert html data-attribute to camalcase\r\nfunction convertToData(attr) {\r\n // FInd a way for lgsize\r\n if (attr === 'href') {\r\n return 'src';\r\n }\r\n attr = attr.replace('data-', '');\r\n attr = attr.charAt(0).toLowerCase() + attr.slice(1);\r\n attr = attr.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); });\r\n return attr;\r\n}\r\nvar utils = {\r\n /**\r\n * get possible width and height from the lgSize attribute. Used for ZoomFromOrigin option\r\n */\r\n getSize: function (el, container, spacing, defaultLgSize) {\r\n if (spacing === void 0) { spacing = 0; }\r\n var LGel = $LG(el);\r\n var lgSize = LGel.attr('data-lg-size') || defaultLgSize;\r\n if (!lgSize) {\r\n return;\r\n }\r\n var isResponsiveSizes = lgSize.split(',');\r\n // if at-least two viewport sizes are available\r\n if (isResponsiveSizes[1]) {\r\n var wWidth = window.innerWidth;\r\n for (var i = 0; i < isResponsiveSizes.length; i++) {\r\n var size_1 = isResponsiveSizes[i];\r\n var responsiveWidth = parseInt(size_1.split('-')[2], 10);\r\n if (responsiveWidth > wWidth) {\r\n lgSize = size_1;\r\n break;\r\n }\r\n // take last item as last option\r\n if (i === isResponsiveSizes.length - 1) {\r\n lgSize = size_1;\r\n }\r\n }\r\n }\r\n var size = lgSize.split('-');\r\n var width = parseInt(size[0], 10);\r\n var height = parseInt(size[1], 10);\r\n var cWidth = container.width();\r\n var cHeight = container.height() - spacing;\r\n var maxWidth = Math.min(cWidth, width);\r\n var maxHeight = Math.min(cHeight, height);\r\n var ratio = Math.min(maxWidth / width, maxHeight / height);\r\n return { width: width * ratio, height: height * ratio };\r\n },\r\n /**\r\n * @desc Get transform value based on the imageSize. Used for ZoomFromOrigin option\r\n * @param {jQuery Element}\r\n * @returns {String} Transform CSS string\r\n */\r\n getTransform: function (el, container, top, bottom, imageSize) {\r\n if (!imageSize) {\r\n return;\r\n }\r\n var LGel = $LG(el).find('img').first();\r\n if (!LGel.get()) {\r\n return;\r\n }\r\n var containerRect = container.get().getBoundingClientRect();\r\n var wWidth = containerRect.width;\r\n // using innerWidth to include mobile safari bottom bar\r\n var wHeight = container.height() - (top + bottom);\r\n var elWidth = LGel.width();\r\n var elHeight = LGel.height();\r\n var elStyle = LGel.style();\r\n var x = (wWidth - elWidth) / 2 -\r\n LGel.offset().left +\r\n (parseFloat(elStyle.paddingLeft) || 0) +\r\n (parseFloat(elStyle.borderLeft) || 0) +\r\n $LG(window).scrollLeft() +\r\n containerRect.left;\r\n var y = (wHeight - elHeight) / 2 -\r\n LGel.offset().top +\r\n (parseFloat(elStyle.paddingTop) || 0) +\r\n (parseFloat(elStyle.borderTop) || 0) +\r\n $LG(window).scrollTop() +\r\n top;\r\n var scX = elWidth / imageSize.width;\r\n var scY = elHeight / imageSize.height;\r\n var transform = 'translate3d(' +\r\n (x *= -1) +\r\n 'px, ' +\r\n (y *= -1) +\r\n 'px, 0) scale3d(' +\r\n scX +\r\n ', ' +\r\n scY +\r\n ', 1)';\r\n return transform;\r\n },\r\n getIframeMarkup: function (iframeWidth, iframeHeight, iframeMaxWidth, iframeMaxHeight, src, iframeTitle) {\r\n var title = iframeTitle ? 'title=\"' + iframeTitle + '\"' : '';\r\n return \"
\\n \\n
\";\r\n },\r\n getImgMarkup: function (index, src, altAttr, srcset, sizes, sources) {\r\n var srcsetAttr = srcset ? \"srcset=\\\"\" + srcset + \"\\\"\" : '';\r\n var sizesAttr = sizes ? \"sizes=\\\"\" + sizes + \"\\\"\" : '';\r\n var imgMarkup = \"\";\r\n var sourceTag = '';\r\n if (sources) {\r\n var sourceObj = typeof sources === 'string' ? JSON.parse(sources) : sources;\r\n sourceTag = sourceObj.map(function (source) {\r\n var attrs = '';\r\n Object.keys(source).forEach(function (key) {\r\n // Do not remove the first space as it is required to separate the attributes\r\n attrs += \" \" + key + \"=\\\"\" + source[key] + \"\\\"\";\r\n });\r\n return \"\";\r\n });\r\n }\r\n return \"\" + sourceTag + imgMarkup;\r\n },\r\n // Get src from responsive src\r\n getResponsiveSrc: function (srcItms) {\r\n var rsWidth = [];\r\n var rsSrc = [];\r\n var src = '';\r\n for (var i = 0; i < srcItms.length; i++) {\r\n var _src = srcItms[i].split(' ');\r\n // Manage empty space\r\n if (_src[0] === '') {\r\n _src.splice(0, 1);\r\n }\r\n rsSrc.push(_src[0]);\r\n rsWidth.push(_src[1]);\r\n }\r\n var wWidth = window.innerWidth;\r\n for (var j = 0; j < rsWidth.length; j++) {\r\n if (parseInt(rsWidth[j], 10) > wWidth) {\r\n src = rsSrc[j];\r\n break;\r\n }\r\n }\r\n return src;\r\n },\r\n isImageLoaded: function (img) {\r\n if (!img)\r\n return false;\r\n // During the onload event, IE correctly identifies any images that\r\n // weren’t downloaded as not complete. Others should too. Gecko-based\r\n // browsers act like NS4 in that they report this incorrectly.\r\n if (!img.complete) {\r\n return false;\r\n }\r\n // However, they do have two very useful properties: naturalWidth and\r\n // naturalHeight. These give the true size of the image. If it failed\r\n // to load, either of these should be zero.\r\n if (img.naturalWidth === 0) {\r\n return false;\r\n }\r\n // No other way of checking: assume it’s ok.\r\n return true;\r\n },\r\n getVideoPosterMarkup: function (_poster, dummyImg, videoContStyle, playVideoString, _isVideo) {\r\n var videoClass = '';\r\n if (_isVideo && _isVideo.youtube) {\r\n videoClass = 'lg-has-youtube';\r\n }\r\n else if (_isVideo && _isVideo.vimeo) {\r\n videoClass = 'lg-has-vimeo';\r\n }\r\n else {\r\n videoClass = 'lg-has-html5';\r\n }\r\n return \"
\\n
\\n \\n \" + playVideoString + \"\\n \\n \\n \\n \\n \\n \\n \\n
\\n \" + (dummyImg || '') + \"\\n \\n
\";\r\n },\r\n getFocusableElements: function (container) {\r\n var elements = container.querySelectorAll('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type=\"text\"]:not([disabled]), input[type=\"radio\"]:not([disabled]), input[type=\"checkbox\"]:not([disabled]), select:not([disabled])');\r\n var visibleElements = [].filter.call(elements, function (element) {\r\n var style = window.getComputedStyle(element);\r\n return style.display !== 'none' && style.visibility !== 'hidden';\r\n });\r\n return visibleElements;\r\n },\r\n /**\r\n * @desc Create dynamic elements array from gallery items when dynamic option is false\r\n * It helps to avoid frequent DOM interaction\r\n * and avoid multiple checks for dynamic elments\r\n *\r\n * @returns {Array} dynamicEl\r\n */\r\n getDynamicOptions: function (items, extraProps, getCaptionFromTitleOrAlt, exThumbImage) {\r\n var dynamicElements = [];\r\n var availableDynamicOptions = __spreadArrays(defaultDynamicOptions, extraProps);\r\n [].forEach.call(items, function (item) {\r\n var dynamicEl = {};\r\n for (var i = 0; i < item.attributes.length; i++) {\r\n var attr = item.attributes[i];\r\n if (attr.specified) {\r\n var dynamicAttr = convertToData(attr.name);\r\n var label = '';\r\n if (availableDynamicOptions.indexOf(dynamicAttr) > -1) {\r\n label = dynamicAttr;\r\n }\r\n if (label) {\r\n dynamicEl[label] = attr.value;\r\n }\r\n }\r\n }\r\n var currentItem = $LG(item);\r\n var alt = currentItem.find('img').first().attr('alt');\r\n var title = currentItem.attr('title');\r\n var thumb = exThumbImage\r\n ? currentItem.attr(exThumbImage)\r\n : currentItem.find('img').first().attr('src');\r\n dynamicEl.thumb = thumb;\r\n if (getCaptionFromTitleOrAlt && !dynamicEl.subHtml) {\r\n dynamicEl.subHtml = title || alt || '';\r\n }\r\n dynamicEl.alt = alt || title || '';\r\n dynamicElements.push(dynamicEl);\r\n });\r\n return dynamicElements;\r\n },\r\n isMobile: function () {\r\n return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\r\n },\r\n /**\r\n * @desc Check the given src is video\r\n * @param {String} src\r\n * @return {Object} video type\r\n * Ex:{ youtube : [\"//www.youtube.com/watch?v=c0asJgSyxcY\", \"c0asJgSyxcY\"] }\r\n *\r\n * @todo - this information can be moved to dynamicEl to avoid frequent calls\r\n */\r\n isVideo: function (src, isHTML5VIdeo, index) {\r\n if (!src) {\r\n if (isHTML5VIdeo) {\r\n return {\r\n html5: true,\r\n };\r\n }\r\n else {\r\n console.error('lightGallery :- data-src is not provided on slide item ' +\r\n (index + 1) +\r\n '. Please make sure the selector property is properly configured. More info - https://www.lightgalleryjs.com/demos/html-markup/');\r\n return;\r\n }\r\n }\r\n var youtube = src.match(/\\/\\/(?:www\\.)?youtu(?:\\.be|be\\.com|be-nocookie\\.com)\\/(?:watch\\?v=|embed\\/)?([a-z0-9\\-\\_\\%]+)([\\&|?][\\S]*)*/i);\r\n var vimeo = src.match(/\\/\\/(?:www\\.)?(?:player\\.)?vimeo.com\\/(?:video\\/)?([0-9a-z\\-_]+)(.*)?/i);\r\n var wistia = src.match(/https?:\\/\\/(.+)?(wistia\\.com|wi\\.st)\\/(medias|embed)\\/([0-9a-z\\-_]+)(.*)/);\r\n if (youtube) {\r\n return {\r\n youtube: youtube,\r\n };\r\n }\r\n else if (vimeo) {\r\n return {\r\n vimeo: vimeo,\r\n };\r\n }\r\n else if (wistia) {\r\n return {\r\n wistia: wistia,\r\n };\r\n }\r\n },\r\n};\n\n// @ref - https://stackoverflow.com/questions/3971841/how-to-resize-images-proportionally-keeping-the-aspect-ratio\r\n// @ref - https://2ality.com/2017/04/setting-up-multi-platform-packages.html\r\n// Unique id for each gallery\r\nvar lgId = 0;\r\nvar LightGallery = /** @class */ (function () {\r\n function LightGallery(element, options) {\r\n this.lgOpened = false;\r\n this.index = 0;\r\n // lightGallery modules\r\n this.plugins = [];\r\n // false when lightGallery load first slide content;\r\n this.lGalleryOn = false;\r\n // True when a slide animation is in progress\r\n this.lgBusy = false;\r\n this.currentItemsInDom = [];\r\n // Scroll top value before lightGallery is opened\r\n this.prevScrollTop = 0;\r\n this.bodyPaddingRight = 0;\r\n this.isDummyImageRemoved = false;\r\n this.dragOrSwipeEnabled = false;\r\n this.mediaContainerPosition = {\r\n top: 0,\r\n bottom: 0,\r\n };\r\n if (!element) {\r\n return this;\r\n }\r\n lgId++;\r\n this.lgId = lgId;\r\n this.el = element;\r\n this.LGel = $LG(element);\r\n this.generateSettings(options);\r\n this.buildModules();\r\n // When using dynamic mode, ensure dynamicEl is an array\r\n if (this.settings.dynamic &&\r\n this.settings.dynamicEl !== undefined &&\r\n !Array.isArray(this.settings.dynamicEl)) {\r\n throw 'When using dynamic mode, you must also define dynamicEl as an Array.';\r\n }\r\n this.galleryItems = this.getItems();\r\n this.normalizeSettings();\r\n // Gallery items\r\n this.init();\r\n this.validateLicense();\r\n return this;\r\n }\r\n LightGallery.prototype.generateSettings = function (options) {\r\n // lightGallery settings\r\n this.settings = __assign(__assign({}, lightGalleryCoreSettings), options);\r\n if (this.settings.isMobile &&\r\n typeof this.settings.isMobile === 'function'\r\n ? this.settings.isMobile()\r\n : utils.isMobile()) {\r\n var mobileSettings = __assign(__assign({}, this.settings.mobileSettings), this.settings.mobileSettings);\r\n this.settings = __assign(__assign({}, this.settings), mobileSettings);\r\n }\r\n };\r\n LightGallery.prototype.normalizeSettings = function () {\r\n if (this.settings.slideEndAnimation) {\r\n this.settings.hideControlOnEnd = false;\r\n }\r\n if (!this.settings.closable) {\r\n this.settings.swipeToClose = false;\r\n }\r\n // And reset it on close to get the correct value next time\r\n this.zoomFromOrigin = this.settings.zoomFromOrigin;\r\n // At the moment, Zoom from image doesn't support dynamic options\r\n // @todo add zoomFromOrigin support for dynamic images\r\n if (this.settings.dynamic) {\r\n this.zoomFromOrigin = false;\r\n }\r\n if (!this.settings.container) {\r\n this.settings.container = document.body;\r\n }\r\n // settings.preload should not be grater than $item.length\r\n this.settings.preload = Math.min(this.settings.preload, this.galleryItems.length);\r\n };\r\n LightGallery.prototype.init = function () {\r\n var _this = this;\r\n this.addSlideVideoInfo(this.galleryItems);\r\n this.buildStructure();\r\n this.LGel.trigger(lGEvents.init, {\r\n instance: this,\r\n });\r\n if (this.settings.keyPress) {\r\n this.keyPress();\r\n }\r\n setTimeout(function () {\r\n _this.enableDrag();\r\n _this.enableSwipe();\r\n _this.triggerPosterClick();\r\n }, 50);\r\n this.arrow();\r\n if (this.settings.mousewheel) {\r\n this.mousewheel();\r\n }\r\n if (!this.settings.dynamic) {\r\n this.openGalleryOnItemClick();\r\n }\r\n };\r\n LightGallery.prototype.openGalleryOnItemClick = function () {\r\n var _this = this;\r\n var _loop_1 = function (index) {\r\n var element = this_1.items[index];\r\n var $element = $LG(element);\r\n // Using different namespace for click because click event should not unbind if selector is same object('this')\r\n // @todo manage all event listners - should have namespace that represent element\r\n var uuid = lgQuery.generateUUID();\r\n $element\r\n .attr('data-lg-id', uuid)\r\n .on(\"click.lgcustom-item-\" + uuid, function (e) {\r\n e.preventDefault();\r\n var currentItemIndex = _this.settings.index || index;\r\n _this.openGallery(currentItemIndex, element);\r\n });\r\n };\r\n var this_1 = this;\r\n // Using for loop instead of using bubbling as the items can be any html element.\r\n for (var index = 0; index < this.items.length; index++) {\r\n _loop_1(index);\r\n }\r\n };\r\n /**\r\n * Module constructor\r\n * Modules are build incrementally.\r\n * Gallery should be opened only once all the modules are initialized.\r\n * use moduleBuildTimeout to make sure this\r\n */\r\n LightGallery.prototype.buildModules = function () {\r\n var _this = this;\r\n this.settings.plugins.forEach(function (plugin) {\r\n _this.plugins.push(new plugin(_this, $LG));\r\n });\r\n };\r\n LightGallery.prototype.validateLicense = function () {\r\n if (!this.settings.licenseKey) {\r\n console.error('Please provide a valid license key');\r\n }\r\n else if (this.settings.licenseKey === '0000-0000-000-0000') {\r\n console.warn(\"lightGallery: \" + this.settings.licenseKey + \" license key is not valid for production use\");\r\n }\r\n };\r\n LightGallery.prototype.getSlideItem = function (index) {\r\n return $LG(this.getSlideItemId(index));\r\n };\r\n LightGallery.prototype.getSlideItemId = function (index) {\r\n return \"#lg-item-\" + this.lgId + \"-\" + index;\r\n };\r\n LightGallery.prototype.getIdName = function (id) {\r\n return id + \"-\" + this.lgId;\r\n };\r\n LightGallery.prototype.getElementById = function (id) {\r\n return $LG(\"#\" + this.getIdName(id));\r\n };\r\n LightGallery.prototype.manageSingleSlideClassName = function () {\r\n if (this.galleryItems.length < 2) {\r\n this.outer.addClass('lg-single-item');\r\n }\r\n else {\r\n this.outer.removeClass('lg-single-item');\r\n }\r\n };\r\n LightGallery.prototype.buildStructure = function () {\r\n var _this = this;\r\n var container = this.$container && this.$container.get();\r\n if (container) {\r\n return;\r\n }\r\n var controls = '';\r\n var subHtmlCont = '';\r\n // Create controls\r\n if (this.settings.controls) {\r\n controls = \"\\n \";\r\n }\r\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\r\n subHtmlCont =\r\n '
';\r\n }\r\n var addClasses = '';\r\n if (this.settings.allowMediaOverlap) {\r\n // Do not remove space before last single quote\r\n addClasses += 'lg-media-overlap ';\r\n }\r\n var ariaLabelledby = this.settings.ariaLabelledby\r\n ? 'aria-labelledby=\"' + this.settings.ariaLabelledby + '\"'\r\n : '';\r\n var ariaDescribedby = this.settings.ariaDescribedby\r\n ? 'aria-describedby=\"' + this.settings.ariaDescribedby + '\"'\r\n : '';\r\n var containerClassName = \"lg-container \" + this.settings.addClass + \" \" + (document.body !== this.settings.container ? 'lg-inline' : '');\r\n var closeIcon = this.settings.closable && this.settings.showCloseIcon\r\n ? \"\"\r\n : '';\r\n var maximizeIcon = this.settings.showMaximizeIcon\r\n ? \"\"\r\n : '';\r\n var template = \"\\n
\\n
\\n\\n
\\n\\n
\\n
\\n
\\n \" + controls + \"\\n
\\n
\\n \" + maximizeIcon + \"\\n \" + closeIcon + \"\\n
\\n \" + (this.settings.appendSubHtmlTo === '.lg-outer'\r\n ? subHtmlCont\r\n : '') + \"\\n
\\n \" + (this.settings.appendSubHtmlTo === '.lg-sub-html'\r\n ? subHtmlCont\r\n : '') + \"\\n
\\n
\\n
\\n \";\r\n $LG(this.settings.container).append(template);\r\n if (document.body !== this.settings.container) {\r\n $LG(this.settings.container).css('position', 'relative');\r\n }\r\n this.outer = this.getElementById('lg-outer');\r\n this.$lgComponents = this.getElementById('lg-components');\r\n this.$backdrop = this.getElementById('lg-backdrop');\r\n this.$container = this.getElementById('lg-container');\r\n this.$inner = this.getElementById('lg-inner');\r\n this.$content = this.getElementById('lg-content');\r\n this.$toolbar = this.getElementById('lg-toolbar');\r\n this.$backdrop.css('transition-duration', this.settings.backdropDuration + 'ms');\r\n var outerClassNames = this.settings.mode + \" \";\r\n this.manageSingleSlideClassName();\r\n if (this.settings.enableDrag) {\r\n outerClassNames += 'lg-grab ';\r\n }\r\n this.outer.addClass(outerClassNames);\r\n this.$inner.css('transition-timing-function', this.settings.easing);\r\n this.$inner.css('transition-duration', this.settings.speed + 'ms');\r\n if (this.settings.download) {\r\n this.$toolbar.append(\"\");\r\n }\r\n this.counter();\r\n $LG(window).on(\"resize.lg.global\" + this.lgId + \" orientationchange.lg.global\" + this.lgId, function () {\r\n _this.refreshOnResize();\r\n });\r\n this.hideBars();\r\n this.manageCloseGallery();\r\n this.toggleMaximize();\r\n this.initModules();\r\n };\r\n LightGallery.prototype.refreshOnResize = function () {\r\n if (this.lgOpened) {\r\n var currentGalleryItem = this.galleryItems[this.index];\r\n var __slideVideoInfo = currentGalleryItem.__slideVideoInfo;\r\n this.mediaContainerPosition = this.getMediaContainerPosition();\r\n var _a = this.mediaContainerPosition, top_1 = _a.top, bottom = _a.bottom;\r\n this.currentImageSize = utils.getSize(this.items[this.index], this.outer, top_1 + bottom, __slideVideoInfo && this.settings.videoMaxSize);\r\n if (__slideVideoInfo) {\r\n this.resizeVideoSlide(this.index, this.currentImageSize);\r\n }\r\n if (this.zoomFromOrigin && !this.isDummyImageRemoved) {\r\n var imgStyle = this.getDummyImgStyles(this.currentImageSize);\r\n this.outer\r\n .find('.lg-current .lg-dummy-img')\r\n .first()\r\n .attr('style', imgStyle);\r\n }\r\n this.LGel.trigger(lGEvents.containerResize);\r\n }\r\n };\r\n LightGallery.prototype.resizeVideoSlide = function (index, imageSize) {\r\n var lgVideoStyle = this.getVideoContStyle(imageSize);\r\n var currentSlide = this.getSlideItem(index);\r\n currentSlide.find('.lg-video-cont').attr('style', lgVideoStyle);\r\n };\r\n /**\r\n * Update slides dynamically.\r\n * Add, edit or delete slides dynamically when lightGallery is opened.\r\n * Modify the current gallery items and pass it via updateSlides method\r\n * @note\r\n * - Do not mutate existing lightGallery items directly.\r\n * - Always pass new list of gallery items\r\n * - You need to take care of thumbnails outside the gallery if any\r\n * - user this method only if you want to update slides when the gallery is opened. Otherwise, use `refresh()` method.\r\n * @param items Gallery items\r\n * @param index After the update operation, which slide gallery should navigate to\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n *\r\n * // Adding slides dynamically\r\n * let galleryItems = [\r\n * // Access existing lightGallery items\r\n * // galleryItems are automatically generated internally from the gallery HTML markup\r\n * // or directly from galleryItems when dynamic gallery is used\r\n * ...plugin.galleryItems,\r\n * ...[\r\n * {\r\n * src: 'img/img-1.png',\r\n * thumb: 'img/thumb1.png',\r\n * },\r\n * ],\r\n * ];\r\n * plugin.updateSlides(\r\n * galleryItems,\r\n * plugin.index,\r\n * );\r\n *\r\n *\r\n * // Remove slides dynamically\r\n * galleryItems = JSON.parse(\r\n * JSON.stringify(updateSlideInstance.galleryItems),\r\n * );\r\n * galleryItems.shift();\r\n * updateSlideInstance.updateSlides(galleryItems, 1);\r\n * @see Demo\r\n */\r\n LightGallery.prototype.updateSlides = function (items, index) {\r\n if (this.index > items.length - 1) {\r\n this.index = items.length - 1;\r\n }\r\n if (items.length === 1) {\r\n this.index = 0;\r\n }\r\n if (!items.length) {\r\n this.closeGallery();\r\n return;\r\n }\r\n var currentSrc = this.galleryItems[index].src;\r\n this.galleryItems = items;\r\n this.updateControls();\r\n this.$inner.empty();\r\n this.currentItemsInDom = [];\r\n var _index = 0;\r\n // Find the current index based on source value of the slide\r\n this.galleryItems.some(function (galleryItem, itemIndex) {\r\n if (galleryItem.src === currentSrc) {\r\n _index = itemIndex;\r\n return true;\r\n }\r\n return false;\r\n });\r\n this.currentItemsInDom = this.organizeSlideItems(_index, -1);\r\n this.loadContent(_index, true);\r\n this.getSlideItem(_index).addClass('lg-current');\r\n this.index = _index;\r\n this.updateCurrentCounter(_index);\r\n this.LGel.trigger(lGEvents.updateSlides);\r\n };\r\n // Get gallery items based on multiple conditions\r\n LightGallery.prototype.getItems = function () {\r\n // Gallery items\r\n this.items = [];\r\n if (!this.settings.dynamic) {\r\n if (this.settings.selector === 'this') {\r\n this.items.push(this.el);\r\n }\r\n else if (this.settings.selector) {\r\n if (typeof this.settings.selector === 'string') {\r\n if (this.settings.selectWithin) {\r\n var selectWithin = $LG(this.settings.selectWithin);\r\n this.items = selectWithin\r\n .find(this.settings.selector)\r\n .get();\r\n }\r\n else {\r\n this.items = this.el.querySelectorAll(this.settings.selector);\r\n }\r\n }\r\n else {\r\n this.items = this.settings.selector;\r\n }\r\n }\r\n else {\r\n this.items = this.el.children;\r\n }\r\n return utils.getDynamicOptions(this.items, this.settings.extraProps, this.settings.getCaptionFromTitleOrAlt, this.settings.exThumbImage);\r\n }\r\n else {\r\n return this.settings.dynamicEl || [];\r\n }\r\n };\r\n LightGallery.prototype.shouldHideScrollbar = function () {\r\n return (this.settings.hideScrollbar &&\r\n document.body === this.settings.container);\r\n };\r\n LightGallery.prototype.hideScrollbar = function () {\r\n if (!this.shouldHideScrollbar()) {\r\n return;\r\n }\r\n this.bodyPaddingRight = parseFloat($LG('body').style().paddingRight);\r\n var bodyRect = document.documentElement.getBoundingClientRect();\r\n var scrollbarWidth = window.innerWidth - bodyRect.width;\r\n $LG(document.body).css('padding-right', scrollbarWidth + this.bodyPaddingRight + 'px');\r\n $LG(document.body).addClass('lg-overlay-open');\r\n };\r\n LightGallery.prototype.resetScrollBar = function () {\r\n if (!this.shouldHideScrollbar()) {\r\n return;\r\n }\r\n $LG(document.body).css('padding-right', this.bodyPaddingRight + 'px');\r\n $LG(document.body).removeClass('lg-overlay-open');\r\n };\r\n /**\r\n * Open lightGallery.\r\n * Open gallery with specific slide by passing index of the slide as parameter.\r\n * @category lGPublicMethods\r\n * @param {Number} index - index of the slide\r\n * @param {HTMLElement} element - Which image lightGallery should zoom from\r\n *\r\n * @example\r\n * const $dynamicGallery = document.getElementById('dynamic-gallery-demo');\r\n * const dynamicGallery = lightGallery($dynamicGallery, {\r\n * dynamic: true,\r\n * dynamicEl: [\r\n * {\r\n * src: 'img/1.jpg',\r\n * thumb: 'img/thumb-1.jpg',\r\n * subHtml: '

Image 1 title

Image 1 descriptions.

',\r\n * },\r\n * ...\r\n * ],\r\n * });\r\n * $dynamicGallery.addEventListener('click', function () {\r\n * // Starts with third item.(Optional).\r\n * // This is useful if you want use dynamic mode with\r\n * // custom thumbnails (thumbnails outside gallery),\r\n * dynamicGallery.openGallery(2);\r\n * });\r\n *\r\n */\r\n LightGallery.prototype.openGallery = function (index, element) {\r\n var _this = this;\r\n if (index === void 0) { index = this.settings.index; }\r\n // prevent accidental double execution\r\n if (this.lgOpened)\r\n return;\r\n this.lgOpened = true;\r\n this.outer.removeClass('lg-hide-items');\r\n this.hideScrollbar();\r\n // Add display block, but still has opacity 0\r\n this.$container.addClass('lg-show');\r\n var itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(index, index);\r\n this.currentItemsInDom = itemsToBeInsertedToDom;\r\n var items = '';\r\n itemsToBeInsertedToDom.forEach(function (item) {\r\n items = items + (\"
\");\r\n });\r\n this.$inner.append(items);\r\n this.addHtml(index);\r\n var transform = '';\r\n this.mediaContainerPosition = this.getMediaContainerPosition();\r\n var _a = this.mediaContainerPosition, top = _a.top, bottom = _a.bottom;\r\n if (!this.settings.allowMediaOverlap) {\r\n this.setMediaContainerPosition(top, bottom);\r\n }\r\n var __slideVideoInfo = this.galleryItems[index].__slideVideoInfo;\r\n if (this.zoomFromOrigin && element) {\r\n this.currentImageSize = utils.getSize(element, this.outer, top + bottom, __slideVideoInfo && this.settings.videoMaxSize);\r\n transform = utils.getTransform(element, this.outer, top, bottom, this.currentImageSize);\r\n }\r\n if (!this.zoomFromOrigin || !transform) {\r\n this.outer.addClass(this.settings.startClass);\r\n this.getSlideItem(index).removeClass('lg-complete');\r\n }\r\n var timeout = this.settings.zoomFromOrigin\r\n ? 100\r\n : this.settings.backdropDuration;\r\n setTimeout(function () {\r\n _this.outer.addClass('lg-components-open');\r\n }, timeout);\r\n this.index = index;\r\n this.LGel.trigger(lGEvents.beforeOpen);\r\n // add class lg-current to remove initial transition\r\n this.getSlideItem(index).addClass('lg-current');\r\n this.lGalleryOn = false;\r\n // Store the current scroll top value to scroll back after closing the gallery..\r\n this.prevScrollTop = $LG(window).scrollTop();\r\n setTimeout(function () {\r\n // Need to check both zoomFromOrigin and transform values as we need to set set the\r\n // default opening animation if user missed to add the lg-size attribute\r\n if (_this.zoomFromOrigin && transform) {\r\n var currentSlide_1 = _this.getSlideItem(index);\r\n currentSlide_1.css('transform', transform);\r\n setTimeout(function () {\r\n currentSlide_1\r\n .addClass('lg-start-progress lg-start-end-progress')\r\n .css('transition-duration', _this.settings.startAnimationDuration + 'ms');\r\n _this.outer.addClass('lg-zoom-from-image');\r\n });\r\n setTimeout(function () {\r\n currentSlide_1.css('transform', 'translate3d(0, 0, 0)');\r\n }, 100);\r\n }\r\n setTimeout(function () {\r\n _this.$backdrop.addClass('in');\r\n _this.$container.addClass('lg-show-in');\r\n }, 10);\r\n setTimeout(function () {\r\n if (_this.settings.trapFocus &&\r\n document.body === _this.settings.container) {\r\n _this.trapFocus();\r\n }\r\n }, _this.settings.backdropDuration + 50);\r\n // lg-visible class resets gallery opacity to 1\r\n if (!_this.zoomFromOrigin || !transform) {\r\n setTimeout(function () {\r\n _this.outer.addClass('lg-visible');\r\n }, _this.settings.backdropDuration);\r\n }\r\n // initiate slide function\r\n _this.slide(index, false, false, false);\r\n _this.LGel.trigger(lGEvents.afterOpen);\r\n });\r\n if (document.body === this.settings.container) {\r\n $LG('html').addClass('lg-on');\r\n }\r\n };\r\n /**\r\n * Note - Changing the position of the media on every slide transition creates a flickering effect.\r\n * Therefore, The height of the caption is calculated dynamically, only once based on the first slide caption.\r\n * if you have dynamic captions for each media,\r\n * you can provide an appropriate height for the captions via allowMediaOverlap option\r\n */\r\n LightGallery.prototype.getMediaContainerPosition = function () {\r\n if (this.settings.allowMediaOverlap) {\r\n return {\r\n top: 0,\r\n bottom: 0,\r\n };\r\n }\r\n var top = this.$toolbar.get().clientHeight || 0;\r\n var subHtml = this.outer.find('.lg-components .lg-sub-html').get();\r\n var captionHeight = this.settings.defaultCaptionHeight ||\r\n (subHtml && subHtml.clientHeight) ||\r\n 0;\r\n var thumbContainer = this.outer.find('.lg-thumb-outer').get();\r\n var thumbHeight = thumbContainer ? thumbContainer.clientHeight : 0;\r\n var bottom = thumbHeight + captionHeight;\r\n return {\r\n top: top,\r\n bottom: bottom,\r\n };\r\n };\r\n LightGallery.prototype.setMediaContainerPosition = function (top, bottom) {\r\n if (top === void 0) { top = 0; }\r\n if (bottom === void 0) { bottom = 0; }\r\n this.$content.css('top', top + 'px').css('bottom', bottom + 'px');\r\n };\r\n LightGallery.prototype.hideBars = function () {\r\n var _this = this;\r\n // Hide controllers if mouse doesn't move for some period\r\n setTimeout(function () {\r\n _this.outer.removeClass('lg-hide-items');\r\n if (_this.settings.hideBarsDelay > 0) {\r\n _this.outer.on('mousemove.lg click.lg touchstart.lg', function () {\r\n _this.outer.removeClass('lg-hide-items');\r\n clearTimeout(_this.hideBarTimeout);\r\n // Timeout will be cleared on each slide movement also\r\n _this.hideBarTimeout = setTimeout(function () {\r\n _this.outer.addClass('lg-hide-items');\r\n }, _this.settings.hideBarsDelay);\r\n });\r\n _this.outer.trigger('mousemove.lg');\r\n }\r\n }, this.settings.showBarsAfter);\r\n };\r\n LightGallery.prototype.initPictureFill = function ($img) {\r\n if (this.settings.supportLegacyBrowser) {\r\n try {\r\n picturefill({\r\n elements: [$img.get()],\r\n });\r\n }\r\n catch (e) {\r\n console.warn('lightGallery :- If you want srcset or picture tag to be supported for older browser please include picturefil javascript library in your document.');\r\n }\r\n }\r\n };\r\n /**\r\n * @desc Create image counter\r\n * Ex: 1/10\r\n */\r\n LightGallery.prototype.counter = function () {\r\n if (this.settings.counter) {\r\n var counterHtml = \"
\\n \" + (this.index + 1) + \" /\\n \" + this.galleryItems.length + \"
\";\r\n this.outer.find(this.settings.appendCounterTo).append(counterHtml);\r\n }\r\n };\r\n /**\r\n * @desc add sub-html into the slide\r\n * @param {Number} index - index of the slide\r\n */\r\n LightGallery.prototype.addHtml = function (index) {\r\n var subHtml;\r\n var subHtmlUrl;\r\n if (this.galleryItems[index].subHtmlUrl) {\r\n subHtmlUrl = this.galleryItems[index].subHtmlUrl;\r\n }\r\n else {\r\n subHtml = this.galleryItems[index].subHtml;\r\n }\r\n if (!subHtmlUrl) {\r\n if (subHtml) {\r\n // get first letter of sub-html\r\n // if first letter starts with . or # get the html form the jQuery object\r\n var fL = subHtml.substring(0, 1);\r\n if (fL === '.' || fL === '#') {\r\n if (this.settings.subHtmlSelectorRelative &&\r\n !this.settings.dynamic) {\r\n subHtml = $LG(this.items)\r\n .eq(index)\r\n .find(subHtml)\r\n .first()\r\n .html();\r\n }\r\n else {\r\n subHtml = $LG(subHtml).first().html();\r\n }\r\n }\r\n }\r\n else {\r\n subHtml = '';\r\n }\r\n }\r\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\r\n if (subHtmlUrl) {\r\n this.outer.find('.lg-sub-html').load(subHtmlUrl);\r\n }\r\n else {\r\n this.outer.find('.lg-sub-html').html(subHtml);\r\n }\r\n }\r\n else {\r\n var currentSlide = $LG(this.getSlideItemId(index));\r\n if (subHtmlUrl) {\r\n currentSlide.load(subHtmlUrl);\r\n }\r\n else {\r\n currentSlide.append(\"
\" + subHtml + \"
\");\r\n }\r\n }\r\n // Add lg-empty-html class if title doesn't exist\r\n if (typeof subHtml !== 'undefined' && subHtml !== null) {\r\n if (subHtml === '') {\r\n this.outer\r\n .find(this.settings.appendSubHtmlTo)\r\n .addClass('lg-empty-html');\r\n }\r\n else {\r\n this.outer\r\n .find(this.settings.appendSubHtmlTo)\r\n .removeClass('lg-empty-html');\r\n }\r\n }\r\n this.LGel.trigger(lGEvents.afterAppendSubHtml, {\r\n index: index,\r\n });\r\n };\r\n /**\r\n * @desc Preload slides\r\n * @param {Number} index - index of the slide\r\n * @todo preload not working for the first slide, Also, should work for the first and last slide as well\r\n */\r\n LightGallery.prototype.preload = function (index) {\r\n for (var i = 1; i <= this.settings.preload; i++) {\r\n if (i >= this.galleryItems.length - index) {\r\n break;\r\n }\r\n this.loadContent(index + i, false);\r\n }\r\n for (var j = 1; j <= this.settings.preload; j++) {\r\n if (index - j < 0) {\r\n break;\r\n }\r\n this.loadContent(index - j, false);\r\n }\r\n };\r\n LightGallery.prototype.getDummyImgStyles = function (imageSize) {\r\n if (!imageSize)\r\n return '';\r\n return \"width:\" + imageSize.width + \"px;\\n margin-left: -\" + imageSize.width / 2 + \"px;\\n margin-top: -\" + imageSize.height / 2 + \"px;\\n height:\" + imageSize.height + \"px\";\r\n };\r\n LightGallery.prototype.getVideoContStyle = function (imageSize) {\r\n if (!imageSize)\r\n return '';\r\n return \"width:\" + imageSize.width + \"px;\\n height:\" + imageSize.height + \"px\";\r\n };\r\n LightGallery.prototype.getDummyImageContent = function ($currentSlide, index, alt) {\r\n var $currentItem;\r\n if (!this.settings.dynamic) {\r\n $currentItem = $LG(this.items).eq(index);\r\n }\r\n if ($currentItem) {\r\n var _dummyImgSrc = void 0;\r\n if (!this.settings.exThumbImage) {\r\n _dummyImgSrc = $currentItem.find('img').first().attr('src');\r\n }\r\n else {\r\n _dummyImgSrc = $currentItem.attr(this.settings.exThumbImage);\r\n }\r\n if (!_dummyImgSrc)\r\n return '';\r\n var imgStyle = this.getDummyImgStyles(this.currentImageSize);\r\n var dummyImgContent = \"\";\r\n $currentSlide.addClass('lg-first-slide');\r\n this.outer.addClass('lg-first-slide-loading');\r\n return dummyImgContent;\r\n }\r\n return '';\r\n };\r\n LightGallery.prototype.setImgMarkup = function (src, $currentSlide, index) {\r\n var currentGalleryItem = this.galleryItems[index];\r\n var alt = currentGalleryItem.alt, srcset = currentGalleryItem.srcset, sizes = currentGalleryItem.sizes, sources = currentGalleryItem.sources;\r\n // Use the thumbnail as dummy image which will be resized to actual image size and\r\n // displayed on top of actual image\r\n var imgContent = '';\r\n var altAttr = alt ? 'alt=\"' + alt + '\"' : '';\r\n if (this.isFirstSlideWithZoomAnimation()) {\r\n imgContent = this.getDummyImageContent($currentSlide, index, altAttr);\r\n }\r\n else {\r\n imgContent = utils.getImgMarkup(index, src, altAttr, srcset, sizes, sources);\r\n }\r\n var imgMarkup = \" \" + imgContent + \"\";\r\n $currentSlide.prepend(imgMarkup);\r\n };\r\n LightGallery.prototype.onSlideObjectLoad = function ($slide, isHTML5VideoWithoutPoster, onLoad, onError) {\r\n var mediaObject = $slide.find('.lg-object').first();\r\n if (utils.isImageLoaded(mediaObject.get()) ||\r\n isHTML5VideoWithoutPoster) {\r\n onLoad();\r\n }\r\n else {\r\n mediaObject.on('load.lg error.lg', function () {\r\n onLoad && onLoad();\r\n });\r\n mediaObject.on('error.lg', function () {\r\n onError && onError();\r\n });\r\n }\r\n };\r\n /**\r\n *\r\n * @param $el Current slide item\r\n * @param index\r\n * @param delay Delay is 0 except first time\r\n * @param speed Speed is same as delay, except it is 0 if gallery is opened via hash plugin\r\n * @param isFirstSlide\r\n */\r\n LightGallery.prototype.onLgObjectLoad = function (currentSlide, index, delay, speed, isFirstSlide, isHTML5VideoWithoutPoster) {\r\n var _this = this;\r\n this.onSlideObjectLoad(currentSlide, isHTML5VideoWithoutPoster, function () {\r\n _this.triggerSlideItemLoad(currentSlide, index, delay, speed, isFirstSlide);\r\n }, function () {\r\n currentSlide.addClass('lg-complete lg-complete_');\r\n currentSlide.html('Oops... Failed to load content...');\r\n });\r\n };\r\n LightGallery.prototype.triggerSlideItemLoad = function ($currentSlide, index, delay, speed, isFirstSlide) {\r\n var _this = this;\r\n var currentGalleryItem = this.galleryItems[index];\r\n // Adding delay for video slides without poster for better performance and user experience\r\n // Videos should start playing once once the gallery is completely loaded\r\n var _speed = isFirstSlide &&\r\n this.getSlideType(currentGalleryItem) === 'video' &&\r\n !currentGalleryItem.poster\r\n ? speed\r\n : 0;\r\n setTimeout(function () {\r\n $currentSlide.addClass('lg-complete lg-complete_');\r\n _this.LGel.trigger(lGEvents.slideItemLoad, {\r\n index: index,\r\n delay: delay || 0,\r\n isFirstSlide: isFirstSlide,\r\n });\r\n }, _speed);\r\n };\r\n LightGallery.prototype.isFirstSlideWithZoomAnimation = function () {\r\n return !!(!this.lGalleryOn &&\r\n this.zoomFromOrigin &&\r\n this.currentImageSize);\r\n };\r\n // Add video slideInfo\r\n LightGallery.prototype.addSlideVideoInfo = function (items) {\r\n var _this = this;\r\n items.forEach(function (element, index) {\r\n element.__slideVideoInfo = utils.isVideo(element.src, !!element.video, index);\r\n if (element.__slideVideoInfo &&\r\n _this.settings.loadYouTubePoster &&\r\n !element.poster &&\r\n element.__slideVideoInfo.youtube) {\r\n element.poster = \"//img.youtube.com/vi/\" + element.__slideVideoInfo.youtube[1] + \"/maxresdefault.jpg\";\r\n }\r\n });\r\n };\r\n /**\r\n * Load slide content into slide.\r\n * This is used to load content into slides that is not visible too\r\n * @param {Number} index - index of the slide.\r\n * @param {Boolean} rec - if true call loadcontent() function again.\r\n */\r\n LightGallery.prototype.loadContent = function (index, rec) {\r\n var _this = this;\r\n var currentGalleryItem = this.galleryItems[index];\r\n var $currentSlide = $LG(this.getSlideItemId(index));\r\n var poster = currentGalleryItem.poster, srcset = currentGalleryItem.srcset, sizes = currentGalleryItem.sizes, sources = currentGalleryItem.sources;\r\n var src = currentGalleryItem.src;\r\n var video = currentGalleryItem.video;\r\n var _html5Video = video && typeof video === 'string' ? JSON.parse(video) : video;\r\n if (currentGalleryItem.responsive) {\r\n var srcDyItms = currentGalleryItem.responsive.split(',');\r\n src = utils.getResponsiveSrc(srcDyItms) || src;\r\n }\r\n var videoInfo = currentGalleryItem.__slideVideoInfo;\r\n var lgVideoStyle = '';\r\n var iframe = !!currentGalleryItem.iframe;\r\n var isFirstSlide = !this.lGalleryOn;\r\n // delay for adding complete class. it is 0 except first time.\r\n var delay = 0;\r\n if (isFirstSlide) {\r\n if (this.zoomFromOrigin && this.currentImageSize) {\r\n delay = this.settings.startAnimationDuration + 10;\r\n }\r\n else {\r\n delay = this.settings.backdropDuration + 10;\r\n }\r\n }\r\n if (!$currentSlide.hasClass('lg-loaded')) {\r\n if (videoInfo) {\r\n var _a = this.mediaContainerPosition, top_2 = _a.top, bottom = _a.bottom;\r\n var videoSize = utils.getSize(this.items[index], this.outer, top_2 + bottom, videoInfo && this.settings.videoMaxSize);\r\n lgVideoStyle = this.getVideoContStyle(videoSize);\r\n }\r\n if (iframe) {\r\n var markup = utils.getIframeMarkup(this.settings.iframeWidth, this.settings.iframeHeight, this.settings.iframeMaxWidth, this.settings.iframeMaxHeight, src, currentGalleryItem.iframeTitle);\r\n $currentSlide.prepend(markup);\r\n }\r\n else if (poster) {\r\n var dummyImg = '';\r\n var hasStartAnimation = isFirstSlide &&\r\n this.zoomFromOrigin &&\r\n this.currentImageSize;\r\n if (hasStartAnimation) {\r\n dummyImg = this.getDummyImageContent($currentSlide, index, '');\r\n }\r\n var markup = utils.getVideoPosterMarkup(poster, dummyImg || '', lgVideoStyle, this.settings.strings['playVideo'], videoInfo);\r\n $currentSlide.prepend(markup);\r\n }\r\n else if (videoInfo) {\r\n var markup = \"
\";\r\n $currentSlide.prepend(markup);\r\n }\r\n else {\r\n this.setImgMarkup(src, $currentSlide, index);\r\n if (srcset || sources) {\r\n var $img = $currentSlide.find('.lg-object');\r\n this.initPictureFill($img);\r\n }\r\n }\r\n if (poster || videoInfo) {\r\n this.LGel.trigger(lGEvents.hasVideo, {\r\n index: index,\r\n src: src,\r\n html5Video: _html5Video,\r\n hasPoster: !!poster,\r\n });\r\n }\r\n this.LGel.trigger(lGEvents.afterAppendSlide, { index: index });\r\n if (this.lGalleryOn &&\r\n this.settings.appendSubHtmlTo === '.lg-item') {\r\n this.addHtml(index);\r\n }\r\n }\r\n // For first time add some delay for displaying the start animation.\r\n var _speed = 0;\r\n // Do not change the delay value because it is required for zoom plugin.\r\n // If gallery opened from direct url (hash) speed value should be 0\r\n if (delay && !$LG(document.body).hasClass('lg-from-hash')) {\r\n _speed = delay;\r\n }\r\n // Only for first slide and zoomFromOrigin is enabled\r\n if (this.isFirstSlideWithZoomAnimation()) {\r\n setTimeout(function () {\r\n $currentSlide\r\n .removeClass('lg-start-end-progress lg-start-progress')\r\n .removeAttr('style');\r\n }, this.settings.startAnimationDuration + 100);\r\n if (!$currentSlide.hasClass('lg-loaded')) {\r\n setTimeout(function () {\r\n if (_this.getSlideType(currentGalleryItem) === 'image') {\r\n var alt = currentGalleryItem.alt;\r\n var altAttr = alt ? 'alt=\"' + alt + '\"' : '';\r\n $currentSlide\r\n .find('.lg-img-wrap')\r\n .append(utils.getImgMarkup(index, src, altAttr, srcset, sizes, currentGalleryItem.sources));\r\n if (srcset || sources) {\r\n var $img = $currentSlide.find('.lg-object');\r\n _this.initPictureFill($img);\r\n }\r\n }\r\n if (_this.getSlideType(currentGalleryItem) === 'image' ||\r\n (_this.getSlideType(currentGalleryItem) === 'video' &&\r\n poster)) {\r\n _this.onLgObjectLoad($currentSlide, index, delay, _speed, true, false);\r\n // load remaining slides once the slide is completely loaded\r\n _this.onSlideObjectLoad($currentSlide, !!(videoInfo && videoInfo.html5 && !poster), function () {\r\n _this.loadContentOnFirstSlideLoad(index, $currentSlide, _speed);\r\n }, function () {\r\n _this.loadContentOnFirstSlideLoad(index, $currentSlide, _speed);\r\n });\r\n }\r\n }, this.settings.startAnimationDuration + 100);\r\n }\r\n }\r\n // SLide content has been added to dom\r\n $currentSlide.addClass('lg-loaded');\r\n if (!this.isFirstSlideWithZoomAnimation() ||\r\n (this.getSlideType(currentGalleryItem) === 'video' && !poster)) {\r\n this.onLgObjectLoad($currentSlide, index, delay, _speed, isFirstSlide, !!(videoInfo && videoInfo.html5 && !poster));\r\n }\r\n // When gallery is opened once content is loaded (second time) need to add lg-complete class for css styling\r\n if ((!this.zoomFromOrigin || !this.currentImageSize) &&\r\n $currentSlide.hasClass('lg-complete_') &&\r\n !this.lGalleryOn) {\r\n setTimeout(function () {\r\n $currentSlide.addClass('lg-complete');\r\n }, this.settings.backdropDuration);\r\n }\r\n // Content loaded\r\n // Need to set lGalleryOn before calling preload function\r\n this.lGalleryOn = true;\r\n if (rec === true) {\r\n if (!$currentSlide.hasClass('lg-complete_')) {\r\n $currentSlide\r\n .find('.lg-object')\r\n .first()\r\n .on('load.lg error.lg', function () {\r\n _this.preload(index);\r\n });\r\n }\r\n else {\r\n this.preload(index);\r\n }\r\n }\r\n };\r\n /**\r\n * @desc Remove dummy image content and load next slides\r\n * Called only for the first time if zoomFromOrigin animation is enabled\r\n * @param index\r\n * @param $currentSlide\r\n * @param speed\r\n */\r\n LightGallery.prototype.loadContentOnFirstSlideLoad = function (index, $currentSlide, speed) {\r\n var _this = this;\r\n setTimeout(function () {\r\n $currentSlide.find('.lg-dummy-img').remove();\r\n $currentSlide.removeClass('lg-first-slide');\r\n _this.outer.removeClass('lg-first-slide-loading');\r\n _this.isDummyImageRemoved = true;\r\n _this.preload(index);\r\n }, speed + 300);\r\n };\r\n LightGallery.prototype.getItemsToBeInsertedToDom = function (index, prevIndex, numberOfItems) {\r\n var _this = this;\r\n if (numberOfItems === void 0) { numberOfItems = 0; }\r\n var itemsToBeInsertedToDom = [];\r\n // Minimum 2 items should be there\r\n var possibleNumberOfItems = Math.max(numberOfItems, 3);\r\n possibleNumberOfItems = Math.min(possibleNumberOfItems, this.galleryItems.length);\r\n var prevIndexItem = \"lg-item-\" + this.lgId + \"-\" + prevIndex;\r\n if (this.galleryItems.length <= 3) {\r\n this.galleryItems.forEach(function (_element, index) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + _this.lgId + \"-\" + index);\r\n });\r\n return itemsToBeInsertedToDom;\r\n }\r\n if (index < (this.galleryItems.length - 1) / 2) {\r\n for (var idx = index; idx > index - possibleNumberOfItems / 2 && idx >= 0; idx--) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + idx);\r\n }\r\n var numberOfExistingItems = itemsToBeInsertedToDom.length;\r\n for (var idx = 0; idx < possibleNumberOfItems - numberOfExistingItems; idx++) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + (index + idx + 1));\r\n }\r\n }\r\n else {\r\n for (var idx = index; idx <= this.galleryItems.length - 1 &&\r\n idx < index + possibleNumberOfItems / 2; idx++) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + idx);\r\n }\r\n var numberOfExistingItems = itemsToBeInsertedToDom.length;\r\n for (var idx = 0; idx < possibleNumberOfItems - numberOfExistingItems; idx++) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + (index - idx - 1));\r\n }\r\n }\r\n if (this.settings.loop) {\r\n if (index === this.galleryItems.length - 1) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + 0);\r\n }\r\n else if (index === 0) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + (this.galleryItems.length - 1));\r\n }\r\n }\r\n if (itemsToBeInsertedToDom.indexOf(prevIndexItem) === -1) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + prevIndex);\r\n }\r\n return itemsToBeInsertedToDom;\r\n };\r\n LightGallery.prototype.organizeSlideItems = function (index, prevIndex) {\r\n var _this = this;\r\n var itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(index, prevIndex, this.settings.numberOfSlideItemsInDom);\r\n itemsToBeInsertedToDom.forEach(function (item) {\r\n if (_this.currentItemsInDom.indexOf(item) === -1) {\r\n _this.$inner.append(\"
\");\r\n }\r\n });\r\n this.currentItemsInDom.forEach(function (item) {\r\n if (itemsToBeInsertedToDom.indexOf(item) === -1) {\r\n $LG(\"#\" + item).remove();\r\n }\r\n });\r\n return itemsToBeInsertedToDom;\r\n };\r\n /**\r\n * Get previous index of the slide\r\n */\r\n LightGallery.prototype.getPreviousSlideIndex = function () {\r\n var prevIndex = 0;\r\n try {\r\n var currentItemId = this.outer\r\n .find('.lg-current')\r\n .first()\r\n .attr('id');\r\n prevIndex = parseInt(currentItemId.split('-')[3]) || 0;\r\n }\r\n catch (error) {\r\n prevIndex = 0;\r\n }\r\n return prevIndex;\r\n };\r\n LightGallery.prototype.setDownloadValue = function (index) {\r\n if (this.settings.download) {\r\n var currentGalleryItem = this.galleryItems[index];\r\n var hideDownloadBtn = currentGalleryItem.downloadUrl === false ||\r\n currentGalleryItem.downloadUrl === 'false';\r\n if (hideDownloadBtn) {\r\n this.outer.addClass('lg-hide-download');\r\n }\r\n else {\r\n var $download = this.getElementById('lg-download');\r\n this.outer.removeClass('lg-hide-download');\r\n $download.attr('href', currentGalleryItem.downloadUrl ||\r\n currentGalleryItem.src);\r\n if (currentGalleryItem.download) {\r\n $download.attr('download', currentGalleryItem.download);\r\n }\r\n }\r\n }\r\n };\r\n LightGallery.prototype.makeSlideAnimation = function (direction, currentSlideItem, previousSlideItem) {\r\n var _this = this;\r\n if (this.lGalleryOn) {\r\n previousSlideItem.addClass('lg-slide-progress');\r\n }\r\n setTimeout(function () {\r\n // remove all transitions\r\n _this.outer.addClass('lg-no-trans');\r\n _this.outer\r\n .find('.lg-item')\r\n .removeClass('lg-prev-slide lg-next-slide');\r\n if (direction === 'prev') {\r\n //prevslide\r\n currentSlideItem.addClass('lg-prev-slide');\r\n previousSlideItem.addClass('lg-next-slide');\r\n }\r\n else {\r\n // next slide\r\n currentSlideItem.addClass('lg-next-slide');\r\n previousSlideItem.addClass('lg-prev-slide');\r\n }\r\n // give 50 ms for browser to add/remove class\r\n setTimeout(function () {\r\n _this.outer.find('.lg-item').removeClass('lg-current');\r\n currentSlideItem.addClass('lg-current');\r\n // reset all transitions\r\n _this.outer.removeClass('lg-no-trans');\r\n }, 50);\r\n }, this.lGalleryOn ? this.settings.slideDelay : 0);\r\n };\r\n /**\r\n * Goto a specific slide.\r\n * @param {Number} index - index of the slide\r\n * @param {Boolean} fromTouch - true if slide function called via touch event or mouse drag\r\n * @param {Boolean} fromThumb - true if slide function called via thumbnail click\r\n * @param {String} direction - Direction of the slide(next/prev)\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * // to go to 3rd slide\r\n * plugin.slide(2);\r\n *\r\n */\r\n LightGallery.prototype.slide = function (index, fromTouch, fromThumb, direction) {\r\n var _this = this;\r\n var prevIndex = this.getPreviousSlideIndex();\r\n this.currentItemsInDom = this.organizeSlideItems(index, prevIndex);\r\n // Prevent multiple call, Required for hsh plugin\r\n if (this.lGalleryOn && prevIndex === index) {\r\n return;\r\n }\r\n var numberOfGalleryItems = this.galleryItems.length;\r\n if (!this.lgBusy) {\r\n if (this.settings.counter) {\r\n this.updateCurrentCounter(index);\r\n }\r\n var currentSlideItem = this.getSlideItem(index);\r\n var previousSlideItem_1 = this.getSlideItem(prevIndex);\r\n var currentGalleryItem = this.galleryItems[index];\r\n var videoInfo = currentGalleryItem.__slideVideoInfo;\r\n this.outer.attr('data-lg-slide-type', this.getSlideType(currentGalleryItem));\r\n this.setDownloadValue(index);\r\n if (videoInfo) {\r\n var _a = this.mediaContainerPosition, top_3 = _a.top, bottom = _a.bottom;\r\n var videoSize = utils.getSize(this.items[index], this.outer, top_3 + bottom, videoInfo && this.settings.videoMaxSize);\r\n this.resizeVideoSlide(index, videoSize);\r\n }\r\n this.LGel.trigger(lGEvents.beforeSlide, {\r\n prevIndex: prevIndex,\r\n index: index,\r\n fromTouch: !!fromTouch,\r\n fromThumb: !!fromThumb,\r\n });\r\n this.lgBusy = true;\r\n clearTimeout(this.hideBarTimeout);\r\n this.arrowDisable(index);\r\n if (!direction) {\r\n if (index < prevIndex) {\r\n direction = 'prev';\r\n }\r\n else if (index > prevIndex) {\r\n direction = 'next';\r\n }\r\n }\r\n if (!fromTouch) {\r\n this.makeSlideAnimation(direction, currentSlideItem, previousSlideItem_1);\r\n }\r\n else {\r\n this.outer\r\n .find('.lg-item')\r\n .removeClass('lg-prev-slide lg-current lg-next-slide');\r\n var touchPrev = void 0;\r\n var touchNext = void 0;\r\n if (numberOfGalleryItems > 2) {\r\n touchPrev = index - 1;\r\n touchNext = index + 1;\r\n if (index === 0 && prevIndex === numberOfGalleryItems - 1) {\r\n // next slide\r\n touchNext = 0;\r\n touchPrev = numberOfGalleryItems - 1;\r\n }\r\n else if (index === numberOfGalleryItems - 1 &&\r\n prevIndex === 0) {\r\n // prev slide\r\n touchNext = 0;\r\n touchPrev = numberOfGalleryItems - 1;\r\n }\r\n }\r\n else {\r\n touchPrev = 0;\r\n touchNext = 1;\r\n }\r\n if (direction === 'prev') {\r\n this.getSlideItem(touchNext).addClass('lg-next-slide');\r\n }\r\n else {\r\n this.getSlideItem(touchPrev).addClass('lg-prev-slide');\r\n }\r\n currentSlideItem.addClass('lg-current');\r\n }\r\n // Do not put load content in set timeout as it needs to load immediately when the gallery is opened\r\n if (!this.lGalleryOn) {\r\n this.loadContent(index, true);\r\n }\r\n else {\r\n setTimeout(function () {\r\n _this.loadContent(index, true);\r\n // Add title if this.settings.appendSubHtmlTo === lg-sub-html\r\n if (_this.settings.appendSubHtmlTo !== '.lg-item') {\r\n _this.addHtml(index);\r\n }\r\n }, this.settings.speed + 50 + (fromTouch ? 0 : this.settings.slideDelay));\r\n }\r\n setTimeout(function () {\r\n _this.lgBusy = false;\r\n previousSlideItem_1.removeClass('lg-slide-progress');\r\n _this.LGel.trigger(lGEvents.afterSlide, {\r\n prevIndex: prevIndex,\r\n index: index,\r\n fromTouch: fromTouch,\r\n fromThumb: fromThumb,\r\n });\r\n }, (this.lGalleryOn ? this.settings.speed + 100 : 100) + (fromTouch ? 0 : this.settings.slideDelay));\r\n }\r\n this.index = index;\r\n };\r\n LightGallery.prototype.updateCurrentCounter = function (index) {\r\n this.getElementById('lg-counter-current').html(index + 1 + '');\r\n };\r\n LightGallery.prototype.updateCounterTotal = function () {\r\n this.getElementById('lg-counter-all').html(this.galleryItems.length + '');\r\n };\r\n LightGallery.prototype.getSlideType = function (item) {\r\n if (item.__slideVideoInfo) {\r\n return 'video';\r\n }\r\n else if (item.iframe) {\r\n return 'iframe';\r\n }\r\n else {\r\n return 'image';\r\n }\r\n };\r\n LightGallery.prototype.touchMove = function (startCoords, endCoords, e) {\r\n var distanceX = endCoords.pageX - startCoords.pageX;\r\n var distanceY = endCoords.pageY - startCoords.pageY;\r\n var allowSwipe = false;\r\n if (this.swipeDirection) {\r\n allowSwipe = true;\r\n }\r\n else {\r\n if (Math.abs(distanceX) > 15) {\r\n this.swipeDirection = 'horizontal';\r\n allowSwipe = true;\r\n }\r\n else if (Math.abs(distanceY) > 15) {\r\n this.swipeDirection = 'vertical';\r\n allowSwipe = true;\r\n }\r\n }\r\n if (!allowSwipe) {\r\n return;\r\n }\r\n var $currentSlide = this.getSlideItem(this.index);\r\n if (this.swipeDirection === 'horizontal') {\r\n e === null || e === void 0 ? void 0 : e.preventDefault();\r\n // reset opacity and transition duration\r\n this.outer.addClass('lg-dragging');\r\n // move current slide\r\n this.setTranslate($currentSlide, distanceX, 0);\r\n // move next and prev slide with current slide\r\n var width = $currentSlide.get().offsetWidth;\r\n var slideWidthAmount = (width * 15) / 100;\r\n var gutter = slideWidthAmount - Math.abs((distanceX * 10) / 100);\r\n this.setTranslate(this.outer.find('.lg-prev-slide').first(), -width + distanceX - gutter, 0);\r\n this.setTranslate(this.outer.find('.lg-next-slide').first(), width + distanceX + gutter, 0);\r\n }\r\n else if (this.swipeDirection === 'vertical') {\r\n if (this.settings.swipeToClose) {\r\n e === null || e === void 0 ? void 0 : e.preventDefault();\r\n this.$container.addClass('lg-dragging-vertical');\r\n var opacity = 1 - Math.abs(distanceY) / window.innerHeight;\r\n this.$backdrop.css('opacity', opacity);\r\n var scale = 1 - Math.abs(distanceY) / (window.innerWidth * 2);\r\n this.setTranslate($currentSlide, 0, distanceY, scale, scale);\r\n if (Math.abs(distanceY) > 100) {\r\n this.outer\r\n .addClass('lg-hide-items')\r\n .removeClass('lg-components-open');\r\n }\r\n }\r\n }\r\n };\r\n LightGallery.prototype.touchEnd = function (endCoords, startCoords, event) {\r\n var _this = this;\r\n var distance;\r\n // keep slide animation for any mode while dragg/swipe\r\n if (this.settings.mode !== 'lg-slide') {\r\n this.outer.addClass('lg-slide');\r\n }\r\n // set transition duration\r\n setTimeout(function () {\r\n _this.$container.removeClass('lg-dragging-vertical');\r\n _this.outer\r\n .removeClass('lg-dragging lg-hide-items')\r\n .addClass('lg-components-open');\r\n var triggerClick = true;\r\n if (_this.swipeDirection === 'horizontal') {\r\n distance = endCoords.pageX - startCoords.pageX;\r\n var distanceAbs = Math.abs(endCoords.pageX - startCoords.pageX);\r\n if (distance < 0 &&\r\n distanceAbs > _this.settings.swipeThreshold) {\r\n _this.goToNextSlide(true);\r\n triggerClick = false;\r\n }\r\n else if (distance > 0 &&\r\n distanceAbs > _this.settings.swipeThreshold) {\r\n _this.goToPrevSlide(true);\r\n triggerClick = false;\r\n }\r\n }\r\n else if (_this.swipeDirection === 'vertical') {\r\n distance = Math.abs(endCoords.pageY - startCoords.pageY);\r\n if (_this.settings.closable &&\r\n _this.settings.swipeToClose &&\r\n distance > 100) {\r\n _this.closeGallery();\r\n return;\r\n }\r\n else {\r\n _this.$backdrop.css('opacity', 1);\r\n }\r\n }\r\n _this.outer.find('.lg-item').removeAttr('style');\r\n if (triggerClick &&\r\n Math.abs(endCoords.pageX - startCoords.pageX) < 5) {\r\n // Trigger click if distance is less than 5 pix\r\n var target = $LG(event.target);\r\n if (_this.isPosterElement(target)) {\r\n _this.LGel.trigger(lGEvents.posterClick);\r\n }\r\n }\r\n _this.swipeDirection = undefined;\r\n });\r\n // remove slide class once drag/swipe is completed if mode is not slide\r\n setTimeout(function () {\r\n if (!_this.outer.hasClass('lg-dragging') &&\r\n _this.settings.mode !== 'lg-slide') {\r\n _this.outer.removeClass('lg-slide');\r\n }\r\n }, this.settings.speed + 100);\r\n };\r\n LightGallery.prototype.enableSwipe = function () {\r\n var _this = this;\r\n var startCoords = {};\r\n var endCoords = {};\r\n var isMoved = false;\r\n var isSwiping = false;\r\n if (this.settings.enableSwipe) {\r\n this.$inner.on('touchstart.lg', function (e) {\r\n _this.dragOrSwipeEnabled = true;\r\n var $item = _this.getSlideItem(_this.index);\r\n if (($LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target)) &&\r\n !_this.outer.hasClass('lg-zoomed') &&\r\n !_this.lgBusy &&\r\n e.touches.length === 1) {\r\n isSwiping = true;\r\n _this.touchAction = 'swipe';\r\n _this.manageSwipeClass();\r\n startCoords = {\r\n pageX: e.touches[0].pageX,\r\n pageY: e.touches[0].pageY,\r\n };\r\n }\r\n });\r\n this.$inner.on('touchmove.lg', function (e) {\r\n if (isSwiping &&\r\n _this.touchAction === 'swipe' &&\r\n e.touches.length === 1) {\r\n endCoords = {\r\n pageX: e.touches[0].pageX,\r\n pageY: e.touches[0].pageY,\r\n };\r\n _this.touchMove(startCoords, endCoords, e);\r\n isMoved = true;\r\n }\r\n });\r\n this.$inner.on('touchend.lg', function (event) {\r\n if (_this.touchAction === 'swipe') {\r\n if (isMoved) {\r\n isMoved = false;\r\n _this.touchEnd(endCoords, startCoords, event);\r\n }\r\n else if (isSwiping) {\r\n var target = $LG(event.target);\r\n if (_this.isPosterElement(target)) {\r\n _this.LGel.trigger(lGEvents.posterClick);\r\n }\r\n }\r\n _this.touchAction = undefined;\r\n isSwiping = false;\r\n }\r\n });\r\n }\r\n };\r\n LightGallery.prototype.enableDrag = function () {\r\n var _this = this;\r\n var startCoords = {};\r\n var endCoords = {};\r\n var isDraging = false;\r\n var isMoved = false;\r\n if (this.settings.enableDrag) {\r\n this.outer.on('mousedown.lg', function (e) {\r\n _this.dragOrSwipeEnabled = true;\r\n var $item = _this.getSlideItem(_this.index);\r\n if ($LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target)) {\r\n if (!_this.outer.hasClass('lg-zoomed') && !_this.lgBusy) {\r\n e.preventDefault();\r\n if (!_this.lgBusy) {\r\n _this.manageSwipeClass();\r\n startCoords = {\r\n pageX: e.pageX,\r\n pageY: e.pageY,\r\n };\r\n isDraging = true;\r\n // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723\r\n _this.outer.get().scrollLeft += 1;\r\n _this.outer.get().scrollLeft -= 1;\r\n // *\r\n _this.outer\r\n .removeClass('lg-grab')\r\n .addClass('lg-grabbing');\r\n _this.LGel.trigger(lGEvents.dragStart);\r\n }\r\n }\r\n }\r\n });\r\n $LG(window).on(\"mousemove.lg.global\" + this.lgId, function (e) {\r\n if (isDraging && _this.lgOpened) {\r\n isMoved = true;\r\n endCoords = {\r\n pageX: e.pageX,\r\n pageY: e.pageY,\r\n };\r\n _this.touchMove(startCoords, endCoords);\r\n _this.LGel.trigger(lGEvents.dragMove);\r\n }\r\n });\r\n $LG(window).on(\"mouseup.lg.global\" + this.lgId, function (event) {\r\n if (!_this.lgOpened) {\r\n return;\r\n }\r\n var target = $LG(event.target);\r\n if (isMoved) {\r\n isMoved = false;\r\n _this.touchEnd(endCoords, startCoords, event);\r\n _this.LGel.trigger(lGEvents.dragEnd);\r\n }\r\n else if (_this.isPosterElement(target)) {\r\n _this.LGel.trigger(lGEvents.posterClick);\r\n }\r\n // Prevent execution on click\r\n if (isDraging) {\r\n isDraging = false;\r\n _this.outer.removeClass('lg-grabbing').addClass('lg-grab');\r\n }\r\n });\r\n }\r\n };\r\n LightGallery.prototype.triggerPosterClick = function () {\r\n var _this = this;\r\n this.$inner.on('click.lg', function (event) {\r\n if (!_this.dragOrSwipeEnabled &&\r\n _this.isPosterElement($LG(event.target))) {\r\n _this.LGel.trigger(lGEvents.posterClick);\r\n }\r\n });\r\n };\r\n LightGallery.prototype.manageSwipeClass = function () {\r\n var _touchNext = this.index + 1;\r\n var _touchPrev = this.index - 1;\r\n if (this.settings.loop && this.galleryItems.length > 2) {\r\n if (this.index === 0) {\r\n _touchPrev = this.galleryItems.length - 1;\r\n }\r\n else if (this.index === this.galleryItems.length - 1) {\r\n _touchNext = 0;\r\n }\r\n }\r\n this.outer.find('.lg-item').removeClass('lg-next-slide lg-prev-slide');\r\n if (_touchPrev > -1) {\r\n this.getSlideItem(_touchPrev).addClass('lg-prev-slide');\r\n }\r\n this.getSlideItem(_touchNext).addClass('lg-next-slide');\r\n };\r\n /**\r\n * Go to next slide\r\n * @param {Boolean} fromTouch - true if slide function called via touch event\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * plugin.goToNextSlide();\r\n * @see Demo\r\n */\r\n LightGallery.prototype.goToNextSlide = function (fromTouch) {\r\n var _this = this;\r\n var _loop = this.settings.loop;\r\n if (fromTouch && this.galleryItems.length < 3) {\r\n _loop = false;\r\n }\r\n if (!this.lgBusy) {\r\n if (this.index + 1 < this.galleryItems.length) {\r\n this.index++;\r\n this.LGel.trigger(lGEvents.beforeNextSlide, {\r\n index: this.index,\r\n });\r\n this.slide(this.index, !!fromTouch, false, 'next');\r\n }\r\n else {\r\n if (_loop) {\r\n this.index = 0;\r\n this.LGel.trigger(lGEvents.beforeNextSlide, {\r\n index: this.index,\r\n });\r\n this.slide(this.index, !!fromTouch, false, 'next');\r\n }\r\n else if (this.settings.slideEndAnimation && !fromTouch) {\r\n this.outer.addClass('lg-right-end');\r\n setTimeout(function () {\r\n _this.outer.removeClass('lg-right-end');\r\n }, 400);\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Go to previous slides\r\n * @param {Boolean} fromTouch - true if slide function called via touch event\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery({});\r\n * plugin.goToPrevSlide();\r\n * @see Demo\r\n *\r\n */\r\n LightGallery.prototype.goToPrevSlide = function (fromTouch) {\r\n var _this = this;\r\n var _loop = this.settings.loop;\r\n if (fromTouch && this.galleryItems.length < 3) {\r\n _loop = false;\r\n }\r\n if (!this.lgBusy) {\r\n if (this.index > 0) {\r\n this.index--;\r\n this.LGel.trigger(lGEvents.beforePrevSlide, {\r\n index: this.index,\r\n fromTouch: fromTouch,\r\n });\r\n this.slide(this.index, !!fromTouch, false, 'prev');\r\n }\r\n else {\r\n if (_loop) {\r\n this.index = this.galleryItems.length - 1;\r\n this.LGel.trigger(lGEvents.beforePrevSlide, {\r\n index: this.index,\r\n fromTouch: fromTouch,\r\n });\r\n this.slide(this.index, !!fromTouch, false, 'prev');\r\n }\r\n else if (this.settings.slideEndAnimation && !fromTouch) {\r\n this.outer.addClass('lg-left-end');\r\n setTimeout(function () {\r\n _this.outer.removeClass('lg-left-end');\r\n }, 400);\r\n }\r\n }\r\n }\r\n };\r\n LightGallery.prototype.keyPress = function () {\r\n var _this = this;\r\n $LG(window).on(\"keydown.lg.global\" + this.lgId, function (e) {\r\n if (_this.lgOpened &&\r\n _this.settings.escKey === true &&\r\n e.keyCode === 27) {\r\n e.preventDefault();\r\n if (_this.settings.allowMediaOverlap &&\r\n _this.outer.hasClass('lg-can-toggle') &&\r\n _this.outer.hasClass('lg-components-open')) {\r\n _this.outer.removeClass('lg-components-open');\r\n }\r\n else {\r\n _this.closeGallery();\r\n }\r\n }\r\n if (_this.lgOpened && _this.galleryItems.length > 1) {\r\n if (e.keyCode === 37) {\r\n e.preventDefault();\r\n _this.goToPrevSlide();\r\n }\r\n if (e.keyCode === 39) {\r\n e.preventDefault();\r\n _this.goToNextSlide();\r\n }\r\n }\r\n });\r\n };\r\n LightGallery.prototype.arrow = function () {\r\n var _this = this;\r\n this.getElementById('lg-prev').on('click.lg', function () {\r\n _this.goToPrevSlide();\r\n });\r\n this.getElementById('lg-next').on('click.lg', function () {\r\n _this.goToNextSlide();\r\n });\r\n };\r\n LightGallery.prototype.arrowDisable = function (index) {\r\n // Disable arrows if settings.hideControlOnEnd is true\r\n if (!this.settings.loop && this.settings.hideControlOnEnd) {\r\n var $prev = this.getElementById('lg-prev');\r\n var $next = this.getElementById('lg-next');\r\n if (index + 1 === this.galleryItems.length) {\r\n $next.attr('disabled', 'disabled').addClass('disabled');\r\n }\r\n else {\r\n $next.removeAttr('disabled').removeClass('disabled');\r\n }\r\n if (index === 0) {\r\n $prev.attr('disabled', 'disabled').addClass('disabled');\r\n }\r\n else {\r\n $prev.removeAttr('disabled').removeClass('disabled');\r\n }\r\n }\r\n };\r\n LightGallery.prototype.setTranslate = function ($el, xValue, yValue, scaleX, scaleY) {\r\n if (scaleX === void 0) { scaleX = 1; }\r\n if (scaleY === void 0) { scaleY = 1; }\r\n $el.css('transform', 'translate3d(' +\r\n xValue +\r\n 'px, ' +\r\n yValue +\r\n 'px, 0px) scale3d(' +\r\n scaleX +\r\n ', ' +\r\n scaleY +\r\n ', 1)');\r\n };\r\n LightGallery.prototype.mousewheel = function () {\r\n var _this = this;\r\n var lastCall = 0;\r\n this.outer.on('wheel.lg', function (e) {\r\n if (!e.deltaY || _this.galleryItems.length < 2) {\r\n return;\r\n }\r\n e.preventDefault();\r\n var now = new Date().getTime();\r\n if (now - lastCall < 1000) {\r\n return;\r\n }\r\n lastCall = now;\r\n if (e.deltaY > 0) {\r\n _this.goToNextSlide();\r\n }\r\n else if (e.deltaY < 0) {\r\n _this.goToPrevSlide();\r\n }\r\n });\r\n };\r\n LightGallery.prototype.isSlideElement = function (target) {\r\n return (target.hasClass('lg-outer') ||\r\n target.hasClass('lg-item') ||\r\n target.hasClass('lg-img-wrap'));\r\n };\r\n LightGallery.prototype.isPosterElement = function (target) {\r\n var playButton = this.getSlideItem(this.index)\r\n .find('.lg-video-play-button')\r\n .get();\r\n return (target.hasClass('lg-video-poster') ||\r\n target.hasClass('lg-video-play-button') ||\r\n (playButton && playButton.contains(target.get())));\r\n };\r\n /**\r\n * Maximize minimize inline gallery.\r\n * @category lGPublicMethods\r\n */\r\n LightGallery.prototype.toggleMaximize = function () {\r\n var _this = this;\r\n this.getElementById('lg-maximize').on('click.lg', function () {\r\n _this.$container.toggleClass('lg-inline');\r\n _this.refreshOnResize();\r\n });\r\n };\r\n LightGallery.prototype.invalidateItems = function () {\r\n for (var index = 0; index < this.items.length; index++) {\r\n var element = this.items[index];\r\n var $element = $LG(element);\r\n $element.off(\"click.lgcustom-item-\" + $element.attr('data-lg-id'));\r\n }\r\n };\r\n LightGallery.prototype.trapFocus = function () {\r\n var _this = this;\r\n this.$container.get().focus({\r\n preventScroll: true,\r\n });\r\n $LG(window).on(\"keydown.lg.global\" + this.lgId, function (e) {\r\n if (!_this.lgOpened) {\r\n return;\r\n }\r\n var isTabPressed = e.key === 'Tab' || e.keyCode === 9;\r\n if (!isTabPressed) {\r\n return;\r\n }\r\n var focusableEls = utils.getFocusableElements(_this.$container.get());\r\n var firstFocusableEl = focusableEls[0];\r\n var lastFocusableEl = focusableEls[focusableEls.length - 1];\r\n if (e.shiftKey) {\r\n if (document.activeElement === firstFocusableEl) {\r\n lastFocusableEl.focus();\r\n e.preventDefault();\r\n }\r\n }\r\n else {\r\n if (document.activeElement === lastFocusableEl) {\r\n firstFocusableEl.focus();\r\n e.preventDefault();\r\n }\r\n }\r\n });\r\n };\r\n LightGallery.prototype.manageCloseGallery = function () {\r\n var _this = this;\r\n if (!this.settings.closable)\r\n return;\r\n var mousedown = false;\r\n this.getElementById('lg-close').on('click.lg', function () {\r\n _this.closeGallery();\r\n });\r\n if (this.settings.closeOnTap) {\r\n // If you drag the slide and release outside gallery gets close on chrome\r\n // for preventing this check mousedown and mouseup happened on .lg-item or lg-outer\r\n this.outer.on('mousedown.lg', function (e) {\r\n var target = $LG(e.target);\r\n if (_this.isSlideElement(target)) {\r\n mousedown = true;\r\n }\r\n else {\r\n mousedown = false;\r\n }\r\n });\r\n this.outer.on('mousemove.lg', function () {\r\n mousedown = false;\r\n });\r\n this.outer.on('mouseup.lg', function (e) {\r\n var target = $LG(e.target);\r\n if (_this.isSlideElement(target) && mousedown) {\r\n if (!_this.outer.hasClass('lg-dragging')) {\r\n _this.closeGallery();\r\n }\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Close lightGallery if it is opened.\r\n *\r\n * @description If closable is false in the settings, you need to pass true via closeGallery method to force close gallery\r\n * @return returns the estimated time to close gallery completely including the close animation duration\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * plugin.closeGallery();\r\n *\r\n */\r\n LightGallery.prototype.closeGallery = function (force) {\r\n var _this = this;\r\n if (!this.lgOpened || (!this.settings.closable && !force)) {\r\n return 0;\r\n }\r\n this.LGel.trigger(lGEvents.beforeClose);\r\n if (this.settings.resetScrollPosition && !this.settings.hideScrollbar) {\r\n $LG(window).scrollTop(this.prevScrollTop);\r\n }\r\n var currentItem = this.items[this.index];\r\n var transform;\r\n if (this.zoomFromOrigin && currentItem) {\r\n var _a = this.mediaContainerPosition, top_4 = _a.top, bottom = _a.bottom;\r\n var _b = this.galleryItems[this.index], __slideVideoInfo = _b.__slideVideoInfo, poster = _b.poster;\r\n var imageSize = utils.getSize(currentItem, this.outer, top_4 + bottom, __slideVideoInfo && poster && this.settings.videoMaxSize);\r\n transform = utils.getTransform(currentItem, this.outer, top_4, bottom, imageSize);\r\n }\r\n if (this.zoomFromOrigin && transform) {\r\n this.outer.addClass('lg-closing lg-zoom-from-image');\r\n this.getSlideItem(this.index)\r\n .addClass('lg-start-end-progress')\r\n .css('transition-duration', this.settings.startAnimationDuration + 'ms')\r\n .css('transform', transform);\r\n }\r\n else {\r\n this.outer.addClass('lg-hide-items');\r\n // lg-zoom-from-image is used for setting the opacity to 1 if zoomFromOrigin is true\r\n // If the closing item doesn't have the lg-size attribute, remove this class to avoid the closing css conflicts\r\n this.outer.removeClass('lg-zoom-from-image');\r\n }\r\n // Unbind all events added by lightGallery\r\n // @todo\r\n //this.$el.off('.lg.tm');\r\n this.destroyModules();\r\n this.lGalleryOn = false;\r\n this.isDummyImageRemoved = false;\r\n this.zoomFromOrigin = this.settings.zoomFromOrigin;\r\n clearTimeout(this.hideBarTimeout);\r\n this.hideBarTimeout = false;\r\n $LG('html').removeClass('lg-on');\r\n this.outer.removeClass('lg-visible lg-components-open');\r\n // Resetting opacity to 0 isd required as vertical swipe to close function adds inline opacity.\r\n this.$backdrop.removeClass('in').css('opacity', 0);\r\n var removeTimeout = this.zoomFromOrigin && transform\r\n ? Math.max(this.settings.startAnimationDuration, this.settings.backdropDuration)\r\n : this.settings.backdropDuration;\r\n this.$container.removeClass('lg-show-in');\r\n // Once the closign animation is completed and gallery is invisible\r\n setTimeout(function () {\r\n if (_this.zoomFromOrigin && transform) {\r\n _this.outer.removeClass('lg-zoom-from-image');\r\n }\r\n _this.$container.removeClass('lg-show');\r\n // Reset scrollbar\r\n _this.resetScrollBar();\r\n // Need to remove inline opacity as it is used in the stylesheet as well\r\n _this.$backdrop\r\n .removeAttr('style')\r\n .css('transition-duration', _this.settings.backdropDuration + 'ms');\r\n _this.outer.removeClass(\"lg-closing \" + _this.settings.startClass);\r\n _this.getSlideItem(_this.index).removeClass('lg-start-end-progress');\r\n _this.$inner.empty();\r\n if (_this.lgOpened) {\r\n _this.LGel.trigger(lGEvents.afterClose, {\r\n instance: _this,\r\n });\r\n }\r\n if (_this.$container.get()) {\r\n _this.$container.get().blur();\r\n }\r\n _this.lgOpened = false;\r\n }, removeTimeout + 100);\r\n return removeTimeout + 100;\r\n };\r\n LightGallery.prototype.initModules = function () {\r\n this.plugins.forEach(function (module) {\r\n try {\r\n module.init();\r\n }\r\n catch (err) {\r\n console.warn(\"lightGallery:- make sure lightGallery module is properly initiated\");\r\n }\r\n });\r\n };\r\n LightGallery.prototype.destroyModules = function (destroy) {\r\n this.plugins.forEach(function (module) {\r\n try {\r\n if (destroy) {\r\n module.destroy();\r\n }\r\n else {\r\n module.closeGallery && module.closeGallery();\r\n }\r\n }\r\n catch (err) {\r\n console.warn(\"lightGallery:- make sure lightGallery module is properly destroyed\");\r\n }\r\n });\r\n };\r\n /**\r\n * Refresh lightGallery with new set of children.\r\n *\r\n * @description This is useful to update the gallery when the child elements are changed without calling destroy method.\r\n *\r\n * If you are using dynamic mode, you can pass the modified array of dynamicEl as the first parameter to refresh the dynamic gallery\r\n * @see Demo\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * // Delete or add children, then call\r\n * plugin.refresh();\r\n *\r\n */\r\n LightGallery.prototype.refresh = function (galleryItems) {\r\n if (!this.settings.dynamic) {\r\n this.invalidateItems();\r\n }\r\n if (galleryItems) {\r\n this.galleryItems = galleryItems;\r\n }\r\n else {\r\n this.galleryItems = this.getItems();\r\n }\r\n this.updateControls();\r\n this.openGalleryOnItemClick();\r\n this.LGel.trigger(lGEvents.updateSlides);\r\n };\r\n LightGallery.prototype.updateControls = function () {\r\n this.addSlideVideoInfo(this.galleryItems);\r\n this.updateCounterTotal();\r\n this.manageSingleSlideClassName();\r\n };\r\n LightGallery.prototype.destroyGallery = function () {\r\n this.destroyModules(true);\r\n if (!this.settings.dynamic) {\r\n this.invalidateItems();\r\n }\r\n $LG(window).off(\".lg.global\" + this.lgId);\r\n this.LGel.off('.lg');\r\n this.$container.remove();\r\n };\r\n /**\r\n * Destroy lightGallery.\r\n * Destroy lightGallery and its plugin instances completely\r\n *\r\n * @description This method also calls CloseGallery function internally. Returns the time takes to completely close and destroy the instance.\r\n * In case if you want to re-initialize lightGallery right after destroying it, initialize it only once the destroy process is completed.\r\n * You can use refresh method most of the times.\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * plugin.destroy();\r\n *\r\n */\r\n LightGallery.prototype.destroy = function () {\r\n var closeTimeout = this.closeGallery(true);\r\n if (closeTimeout) {\r\n setTimeout(this.destroyGallery.bind(this), closeTimeout);\r\n }\r\n else {\r\n this.destroyGallery();\r\n }\r\n return closeTimeout;\r\n };\r\n return LightGallery;\r\n}());\n\nfunction lightGallery(el, options) {\r\n return new LightGallery(el, options);\r\n}\n\nexport default lightGallery;\n//# sourceMappingURL=lightgallery.es5.js.map\n","/*!\n * lightgallery | 2.7.1 | January 11th 2023\n * http://www.lightgalleryjs.com/\n * Copyright (c) 2020 Sachin Neravath;\n * @license GPLv3\n */\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nvar zoomSettings = {\r\n scale: 1,\r\n zoom: true,\r\n actualSize: true,\r\n showZoomInOutIcons: false,\r\n actualSizeIcons: {\r\n zoomIn: 'lg-zoom-in',\r\n zoomOut: 'lg-zoom-out',\r\n },\r\n enableZoomAfter: 300,\r\n zoomPluginStrings: {\r\n zoomIn: 'Zoom in',\r\n zoomOut: 'Zoom out',\r\n viewActualSize: 'View actual size',\r\n },\r\n};\n\n/**\r\n * List of lightGallery events\r\n * All events should be documented here\r\n * Below interfaces are used to build the website documentations\r\n * */\r\nvar lGEvents = {\r\n afterAppendSlide: 'lgAfterAppendSlide',\r\n init: 'lgInit',\r\n hasVideo: 'lgHasVideo',\r\n containerResize: 'lgContainerResize',\r\n updateSlides: 'lgUpdateSlides',\r\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\r\n beforeOpen: 'lgBeforeOpen',\r\n afterOpen: 'lgAfterOpen',\r\n slideItemLoad: 'lgSlideItemLoad',\r\n beforeSlide: 'lgBeforeSlide',\r\n afterSlide: 'lgAfterSlide',\r\n posterClick: 'lgPosterClick',\r\n dragStart: 'lgDragStart',\r\n dragMove: 'lgDragMove',\r\n dragEnd: 'lgDragEnd',\r\n beforeNextSlide: 'lgBeforeNextSlide',\r\n beforePrevSlide: 'lgBeforePrevSlide',\r\n beforeClose: 'lgBeforeClose',\r\n afterClose: 'lgAfterClose',\r\n rotateLeft: 'lgRotateLeft',\r\n rotateRight: 'lgRotateRight',\r\n flipHorizontal: 'lgFlipHorizontal',\r\n flipVertical: 'lgFlipVertical',\r\n autoplay: 'lgAutoplay',\r\n autoplayStart: 'lgAutoplayStart',\r\n autoplayStop: 'lgAutoplayStop',\r\n};\n\nvar ZOOM_TRANSITION_DURATION = 500;\r\nvar Zoom = /** @class */ (function () {\r\n function Zoom(instance, $LG) {\r\n // get lightGallery core plugin instance\r\n this.core = instance;\r\n this.$LG = $LG;\r\n this.settings = __assign(__assign({}, zoomSettings), this.core.settings);\r\n return this;\r\n }\r\n // Append Zoom controls. Actual size, Zoom-in, Zoom-out\r\n Zoom.prototype.buildTemplates = function () {\r\n var zoomIcons = this.settings.showZoomInOutIcons\r\n ? \"\"\r\n : '';\r\n if (this.settings.actualSize) {\r\n zoomIcons += \"\";\r\n }\r\n this.core.outer.addClass('lg-use-transition-for-zoom');\r\n this.core.$toolbar.first().append(zoomIcons);\r\n };\r\n /**\r\n * @desc Enable zoom option only once the image is completely loaded\r\n * If zoomFromOrigin is true, Zoom is enabled once the dummy image has been inserted\r\n *\r\n * Zoom styles are defined under lg-zoomable CSS class.\r\n */\r\n Zoom.prototype.enableZoom = function (event) {\r\n var _this = this;\r\n // delay will be 0 except first time\r\n var _speed = this.settings.enableZoomAfter + event.detail.delay;\r\n // set _speed value 0 if gallery opened from direct url and if it is first slide\r\n if (this.$LG('body').first().hasClass('lg-from-hash') &&\r\n event.detail.delay) {\r\n // will execute only once\r\n _speed = 0;\r\n }\r\n else {\r\n // Remove lg-from-hash to enable starting animation.\r\n this.$LG('body').first().removeClass('lg-from-hash');\r\n }\r\n this.zoomableTimeout = setTimeout(function () {\r\n if (!_this.isImageSlide(_this.core.index)) {\r\n return;\r\n }\r\n _this.core.getSlideItem(event.detail.index).addClass('lg-zoomable');\r\n if (event.detail.index === _this.core.index) {\r\n _this.setZoomEssentials();\r\n }\r\n }, _speed + 30);\r\n };\r\n Zoom.prototype.enableZoomOnSlideItemLoad = function () {\r\n // Add zoomable class\r\n this.core.LGel.on(lGEvents.slideItemLoad + \".zoom\", this.enableZoom.bind(this));\r\n };\r\n Zoom.prototype.getDragCords = function (e) {\r\n return {\r\n x: e.pageX,\r\n y: e.pageY,\r\n };\r\n };\r\n Zoom.prototype.getSwipeCords = function (e) {\r\n var x = e.touches[0].pageX;\r\n var y = e.touches[0].pageY;\r\n return {\r\n x: x,\r\n y: y,\r\n };\r\n };\r\n Zoom.prototype.getDragAllowedAxises = function (scale, scaleDiff) {\r\n var $image = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-image')\r\n .first()\r\n .get();\r\n var height = 0;\r\n var width = 0;\r\n var rect = $image.getBoundingClientRect();\r\n if (scale) {\r\n height = $image.offsetHeight * scale;\r\n width = $image.offsetWidth * scale;\r\n }\r\n else if (scaleDiff) {\r\n height = rect.height + scaleDiff * rect.height;\r\n width = rect.width + scaleDiff * rect.width;\r\n }\r\n else {\r\n height = rect.height;\r\n width = rect.width;\r\n }\r\n var allowY = height > this.containerRect.height;\r\n var allowX = width > this.containerRect.width;\r\n return {\r\n allowX: allowX,\r\n allowY: allowY,\r\n };\r\n };\r\n Zoom.prototype.setZoomEssentials = function () {\r\n this.containerRect = this.core.$content.get().getBoundingClientRect();\r\n };\r\n /**\r\n * @desc Image zoom\r\n * Translate the wrap and scale the image to get better user experience\r\n *\r\n * @param {String} scale - Zoom decrement/increment value\r\n */\r\n Zoom.prototype.zoomImage = function (scale, scaleDiff, reposition, resetToMax) {\r\n if (Math.abs(scaleDiff) <= 0)\r\n return;\r\n var offsetX = this.containerRect.width / 2 + this.containerRect.left;\r\n var offsetY = this.containerRect.height / 2 +\r\n this.containerRect.top +\r\n this.scrollTop;\r\n var originalX;\r\n var originalY;\r\n if (scale === 1) {\r\n this.positionChanged = false;\r\n }\r\n var dragAllowedAxises = this.getDragAllowedAxises(0, scaleDiff);\r\n var allowY = dragAllowedAxises.allowY, allowX = dragAllowedAxises.allowX;\r\n if (this.positionChanged) {\r\n originalX = this.left / (this.scale - scaleDiff);\r\n originalY = this.top / (this.scale - scaleDiff);\r\n this.pageX = offsetX - originalX;\r\n this.pageY = offsetY - originalY;\r\n this.positionChanged = false;\r\n }\r\n var possibleSwipeCords = this.getPossibleSwipeDragCords(scaleDiff);\r\n var x;\r\n var y;\r\n var _x = offsetX - this.pageX;\r\n var _y = offsetY - this.pageY;\r\n if (scale - scaleDiff > 1) {\r\n var scaleVal = (scale - scaleDiff) / Math.abs(scaleDiff);\r\n _x =\r\n (scaleDiff < 0 ? -_x : _x) +\r\n this.left * (scaleVal + (scaleDiff < 0 ? -1 : 1));\r\n _y =\r\n (scaleDiff < 0 ? -_y : _y) +\r\n this.top * (scaleVal + (scaleDiff < 0 ? -1 : 1));\r\n x = _x / scaleVal;\r\n y = _y / scaleVal;\r\n }\r\n else {\r\n var scaleVal = (scale - scaleDiff) * scaleDiff;\r\n x = _x * scaleVal;\r\n y = _y * scaleVal;\r\n }\r\n if (reposition) {\r\n if (allowX) {\r\n if (this.isBeyondPossibleLeft(x, possibleSwipeCords.minX)) {\r\n x = possibleSwipeCords.minX;\r\n }\r\n else if (this.isBeyondPossibleRight(x, possibleSwipeCords.maxX)) {\r\n x = possibleSwipeCords.maxX;\r\n }\r\n }\r\n else {\r\n if (scale > 1) {\r\n if (x < possibleSwipeCords.minX) {\r\n x = possibleSwipeCords.minX;\r\n }\r\n else if (x > possibleSwipeCords.maxX) {\r\n x = possibleSwipeCords.maxX;\r\n }\r\n }\r\n }\r\n // @todo fix this\r\n if (allowY) {\r\n if (this.isBeyondPossibleTop(y, possibleSwipeCords.minY)) {\r\n y = possibleSwipeCords.minY;\r\n }\r\n else if (this.isBeyondPossibleBottom(y, possibleSwipeCords.maxY)) {\r\n y = possibleSwipeCords.maxY;\r\n }\r\n }\r\n else {\r\n // If the translate value based on index of beyond the viewport, utilize the available space to prevent image being cut out\r\n if (scale > 1) {\r\n //If image goes beyond viewport top, use the minim possible translate value\r\n if (y < possibleSwipeCords.minY) {\r\n y = possibleSwipeCords.minY;\r\n }\r\n else if (y > possibleSwipeCords.maxY) {\r\n y = possibleSwipeCords.maxY;\r\n }\r\n }\r\n }\r\n }\r\n this.setZoomStyles({\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n });\r\n this.left = x;\r\n this.top = y;\r\n if (resetToMax) {\r\n this.setZoomImageSize();\r\n }\r\n };\r\n Zoom.prototype.resetImageTranslate = function (index) {\r\n if (!this.isImageSlide(index)) {\r\n return;\r\n }\r\n var $image = this.core.getSlideItem(index).find('.lg-image').first();\r\n this.imageReset = false;\r\n $image.removeClass('reset-transition reset-transition-y reset-transition-x');\r\n this.core.outer.removeClass('lg-actual-size');\r\n $image.css('width', 'auto').css('height', 'auto');\r\n setTimeout(function () {\r\n $image.removeClass('no-transition');\r\n }, 10);\r\n };\r\n Zoom.prototype.setZoomImageSize = function () {\r\n var _this = this;\r\n var $image = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-image')\r\n .first();\r\n setTimeout(function () {\r\n var actualSizeScale = _this.getCurrentImageActualSizeScale();\r\n if (_this.scale >= actualSizeScale) {\r\n $image.addClass('no-transition');\r\n _this.imageReset = true;\r\n }\r\n }, ZOOM_TRANSITION_DURATION);\r\n setTimeout(function () {\r\n var actualSizeScale = _this.getCurrentImageActualSizeScale();\r\n if (_this.scale >= actualSizeScale) {\r\n var dragAllowedAxises = _this.getDragAllowedAxises(_this.scale);\r\n $image\r\n .css('width', $image.get().naturalWidth + 'px')\r\n .css('height', $image.get().naturalHeight + 'px');\r\n _this.core.outer.addClass('lg-actual-size');\r\n if (dragAllowedAxises.allowX && dragAllowedAxises.allowY) {\r\n $image.addClass('reset-transition');\r\n }\r\n else if (dragAllowedAxises.allowX &&\r\n !dragAllowedAxises.allowY) {\r\n $image.addClass('reset-transition-x');\r\n }\r\n else if (!dragAllowedAxises.allowX &&\r\n dragAllowedAxises.allowY) {\r\n $image.addClass('reset-transition-y');\r\n }\r\n }\r\n }, ZOOM_TRANSITION_DURATION + 50);\r\n };\r\n /**\r\n * @desc apply scale3d to image and translate to image wrap\r\n * @param {style} X,Y and scale\r\n */\r\n Zoom.prototype.setZoomStyles = function (style) {\r\n var $imageWrap = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-img-wrap')\r\n .first();\r\n var $image = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-image')\r\n .first();\r\n var $dummyImage = this.core.outer\r\n .find('.lg-current .lg-dummy-img')\r\n .first();\r\n this.scale = style.scale;\r\n $image.css('transform', 'scale3d(' + style.scale + ', ' + style.scale + ', 1)');\r\n $dummyImage.css('transform', 'scale3d(' + style.scale + ', ' + style.scale + ', 1)');\r\n var transform = 'translate3d(' + style.x + 'px, ' + style.y + 'px, 0)';\r\n $imageWrap.css('transform', transform);\r\n };\r\n /**\r\n * @param index - Index of the current slide\r\n * @param event - event will be available only if the function is called on clicking/taping the imags\r\n */\r\n Zoom.prototype.setActualSize = function (index, event) {\r\n var _this = this;\r\n var currentItem = this.core.galleryItems[this.core.index];\r\n this.resetImageTranslate(index);\r\n setTimeout(function () {\r\n // Allow zoom only on image\r\n if (!currentItem.src ||\r\n _this.core.outer.hasClass('lg-first-slide-loading')) {\r\n return;\r\n }\r\n var scale = _this.getCurrentImageActualSizeScale();\r\n var prevScale = _this.scale;\r\n if (_this.core.outer.hasClass('lg-zoomed')) {\r\n _this.scale = 1;\r\n }\r\n else {\r\n _this.scale = _this.getScale(scale);\r\n }\r\n _this.setPageCords(event);\r\n _this.beginZoom(_this.scale);\r\n _this.zoomImage(_this.scale, _this.scale - prevScale, true, true);\r\n setTimeout(function () {\r\n _this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');\r\n }, 10);\r\n }, 50);\r\n };\r\n Zoom.prototype.getNaturalWidth = function (index) {\r\n var $image = this.core.getSlideItem(index).find('.lg-image').first();\r\n var naturalWidth = this.core.galleryItems[index].width;\r\n return naturalWidth\r\n ? parseFloat(naturalWidth)\r\n : $image.get().naturalWidth;\r\n };\r\n Zoom.prototype.getActualSizeScale = function (naturalWidth, width) {\r\n var _scale;\r\n var scale;\r\n if (naturalWidth >= width) {\r\n _scale = naturalWidth / width;\r\n scale = _scale || 2;\r\n }\r\n else {\r\n scale = 1;\r\n }\r\n return scale;\r\n };\r\n Zoom.prototype.getCurrentImageActualSizeScale = function () {\r\n var $image = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-image')\r\n .first();\r\n var width = $image.get().offsetWidth;\r\n var naturalWidth = this.getNaturalWidth(this.core.index) || width;\r\n return this.getActualSizeScale(naturalWidth, width);\r\n };\r\n Zoom.prototype.getPageCords = function (event) {\r\n var cords = {};\r\n if (event) {\r\n cords.x = event.pageX || event.touches[0].pageX;\r\n cords.y = event.pageY || event.touches[0].pageY;\r\n }\r\n else {\r\n var containerRect = this.core.$content\r\n .get()\r\n .getBoundingClientRect();\r\n cords.x = containerRect.width / 2 + containerRect.left;\r\n cords.y =\r\n containerRect.height / 2 + this.scrollTop + containerRect.top;\r\n }\r\n return cords;\r\n };\r\n Zoom.prototype.setPageCords = function (event) {\r\n var pageCords = this.getPageCords(event);\r\n this.pageX = pageCords.x;\r\n this.pageY = pageCords.y;\r\n };\r\n Zoom.prototype.manageActualPixelClassNames = function () {\r\n var $actualSize = this.core.getElementById('lg-actual-size');\r\n $actualSize\r\n .removeClass(this.settings.actualSizeIcons.zoomIn)\r\n .addClass(this.settings.actualSizeIcons.zoomOut);\r\n };\r\n // If true, zoomed - in else zoomed out\r\n Zoom.prototype.beginZoom = function (scale) {\r\n this.core.outer.removeClass('lg-zoom-drag-transition lg-zoom-dragging');\r\n if (scale > 1) {\r\n this.core.outer.addClass('lg-zoomed');\r\n this.manageActualPixelClassNames();\r\n }\r\n else {\r\n this.resetZoom();\r\n }\r\n return scale > 1;\r\n };\r\n Zoom.prototype.getScale = function (scale) {\r\n var actualSizeScale = this.getCurrentImageActualSizeScale();\r\n if (scale < 1) {\r\n scale = 1;\r\n }\r\n else if (scale > actualSizeScale) {\r\n scale = actualSizeScale;\r\n }\r\n return scale;\r\n };\r\n Zoom.prototype.init = function () {\r\n var _this = this;\r\n if (!this.settings.zoom) {\r\n return;\r\n }\r\n this.buildTemplates();\r\n this.enableZoomOnSlideItemLoad();\r\n var tapped = null;\r\n this.core.outer.on('dblclick.lg', function (event) {\r\n if (!_this.$LG(event.target).hasClass('lg-image')) {\r\n return;\r\n }\r\n _this.setActualSize(_this.core.index, event);\r\n });\r\n this.core.outer.on('touchstart.lg', function (event) {\r\n var $target = _this.$LG(event.target);\r\n if (event.touches.length === 1 && $target.hasClass('lg-image')) {\r\n if (!tapped) {\r\n tapped = setTimeout(function () {\r\n tapped = null;\r\n }, 300);\r\n }\r\n else {\r\n clearTimeout(tapped);\r\n tapped = null;\r\n event.preventDefault();\r\n _this.setActualSize(_this.core.index, event);\r\n }\r\n }\r\n });\r\n this.core.LGel.on(lGEvents.containerResize + \".zoom \" + lGEvents.rotateRight + \".zoom \" + lGEvents.rotateLeft + \".zoom \" + lGEvents.flipHorizontal + \".zoom \" + lGEvents.flipVertical + \".zoom\", function () {\r\n if (!_this.core.lgOpened ||\r\n !_this.isImageSlide(_this.core.index) ||\r\n _this.core.touchAction) {\r\n return;\r\n }\r\n var _LGel = _this.core\r\n .getSlideItem(_this.core.index)\r\n .find('.lg-img-wrap')\r\n .first();\r\n _this.top = 0;\r\n _this.left = 0;\r\n _this.setZoomEssentials();\r\n _this.setZoomSwipeStyles(_LGel, { x: 0, y: 0 });\r\n _this.positionChanged = true;\r\n });\r\n // Update zoom on resize and orientationchange\r\n this.$LG(window).on(\"scroll.lg.zoom.global\" + this.core.lgId, function () {\r\n if (!_this.core.lgOpened)\r\n return;\r\n _this.scrollTop = _this.$LG(window).scrollTop();\r\n });\r\n this.core.getElementById('lg-zoom-out').on('click.lg', function () {\r\n // Allow zoom only on image\r\n if (!_this.isImageSlide(_this.core.index)) {\r\n return;\r\n }\r\n var timeout = 0;\r\n if (_this.imageReset) {\r\n _this.resetImageTranslate(_this.core.index);\r\n timeout = 50;\r\n }\r\n setTimeout(function () {\r\n var scale = _this.scale - _this.settings.scale;\r\n if (scale < 1) {\r\n scale = 1;\r\n }\r\n _this.beginZoom(scale);\r\n _this.zoomImage(scale, -_this.settings.scale, true, true);\r\n }, timeout);\r\n });\r\n this.core.getElementById('lg-zoom-in').on('click.lg', function () {\r\n _this.zoomIn();\r\n });\r\n this.core.getElementById('lg-actual-size').on('click.lg', function () {\r\n _this.setActualSize(_this.core.index);\r\n });\r\n this.core.LGel.on(lGEvents.beforeOpen + \".zoom\", function () {\r\n _this.core.outer.find('.lg-item').removeClass('lg-zoomable');\r\n });\r\n this.core.LGel.on(lGEvents.afterOpen + \".zoom\", function () {\r\n _this.scrollTop = _this.$LG(window).scrollTop();\r\n // Set the initial value center\r\n _this.pageX = _this.core.outer.width() / 2;\r\n _this.pageY = _this.core.outer.height() / 2 + _this.scrollTop;\r\n _this.scale = 1;\r\n });\r\n // Reset zoom on slide change\r\n this.core.LGel.on(lGEvents.afterSlide + \".zoom\", function (event) {\r\n var prevIndex = event.detail.prevIndex;\r\n _this.scale = 1;\r\n _this.positionChanged = false;\r\n _this.resetZoom(prevIndex);\r\n _this.resetImageTranslate(prevIndex);\r\n if (_this.isImageSlide(_this.core.index)) {\r\n _this.setZoomEssentials();\r\n }\r\n });\r\n // Drag option after zoom\r\n this.zoomDrag();\r\n this.pinchZoom();\r\n this.zoomSwipe();\r\n // Store the zoomable timeout value just to clear it while closing\r\n this.zoomableTimeout = false;\r\n this.positionChanged = false;\r\n };\r\n Zoom.prototype.zoomIn = function () {\r\n // Allow zoom only on image\r\n if (!this.isImageSlide(this.core.index)) {\r\n return;\r\n }\r\n var scale = this.scale + this.settings.scale;\r\n scale = this.getScale(scale);\r\n this.beginZoom(scale);\r\n this.zoomImage(scale, Math.min(this.settings.scale, scale - this.scale), true, true);\r\n };\r\n // Reset zoom effect\r\n Zoom.prototype.resetZoom = function (index) {\r\n this.core.outer.removeClass('lg-zoomed lg-zoom-drag-transition');\r\n var $actualSize = this.core.getElementById('lg-actual-size');\r\n var $item = this.core.getSlideItem(index !== undefined ? index : this.core.index);\r\n $actualSize\r\n .removeClass(this.settings.actualSizeIcons.zoomOut)\r\n .addClass(this.settings.actualSizeIcons.zoomIn);\r\n $item.find('.lg-img-wrap').first().removeAttr('style');\r\n $item.find('.lg-image').first().removeAttr('style');\r\n this.scale = 1;\r\n this.left = 0;\r\n this.top = 0;\r\n // Reset pagx pagy values to center\r\n this.setPageCords();\r\n };\r\n Zoom.prototype.getTouchDistance = function (e) {\r\n return Math.sqrt((e.touches[0].pageX - e.touches[1].pageX) *\r\n (e.touches[0].pageX - e.touches[1].pageX) +\r\n (e.touches[0].pageY - e.touches[1].pageY) *\r\n (e.touches[0].pageY - e.touches[1].pageY));\r\n };\r\n Zoom.prototype.pinchZoom = function () {\r\n var _this = this;\r\n var startDist = 0;\r\n var pinchStarted = false;\r\n var initScale = 1;\r\n var prevScale = 0;\r\n var $item = this.core.getSlideItem(this.core.index);\r\n this.core.outer.on('touchstart.lg', function (e) {\r\n $item = _this.core.getSlideItem(_this.core.index);\r\n if (!_this.isImageSlide(_this.core.index)) {\r\n return;\r\n }\r\n if (e.touches.length === 2) {\r\n e.preventDefault();\r\n if (_this.core.outer.hasClass('lg-first-slide-loading')) {\r\n return;\r\n }\r\n initScale = _this.scale || 1;\r\n _this.core.outer.removeClass('lg-zoom-drag-transition lg-zoom-dragging');\r\n _this.setPageCords(e);\r\n _this.resetImageTranslate(_this.core.index);\r\n _this.core.touchAction = 'pinch';\r\n startDist = _this.getTouchDistance(e);\r\n }\r\n });\r\n this.core.$inner.on('touchmove.lg', function (e) {\r\n if (e.touches.length === 2 &&\r\n _this.core.touchAction === 'pinch' &&\r\n (_this.$LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target))) {\r\n e.preventDefault();\r\n var endDist = _this.getTouchDistance(e);\r\n var distance = startDist - endDist;\r\n if (!pinchStarted && Math.abs(distance) > 5) {\r\n pinchStarted = true;\r\n }\r\n if (pinchStarted) {\r\n prevScale = _this.scale;\r\n var _scale = Math.max(1, initScale + -distance * 0.02);\r\n _this.scale =\r\n Math.round((_scale + Number.EPSILON) * 100) / 100;\r\n var diff = _this.scale - prevScale;\r\n _this.zoomImage(_this.scale, Math.round((diff + Number.EPSILON) * 100) / 100, false, false);\r\n }\r\n }\r\n });\r\n this.core.$inner.on('touchend.lg', function (e) {\r\n if (_this.core.touchAction === 'pinch' &&\r\n (_this.$LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target))) {\r\n pinchStarted = false;\r\n startDist = 0;\r\n if (_this.scale <= 1) {\r\n _this.resetZoom();\r\n }\r\n else {\r\n var actualSizeScale = _this.getCurrentImageActualSizeScale();\r\n if (_this.scale >= actualSizeScale) {\r\n var scaleDiff = actualSizeScale - _this.scale;\r\n if (scaleDiff === 0) {\r\n scaleDiff = 0.01;\r\n }\r\n _this.zoomImage(actualSizeScale, scaleDiff, false, true);\r\n }\r\n _this.manageActualPixelClassNames();\r\n _this.core.outer.addClass('lg-zoomed');\r\n }\r\n _this.core.touchAction = undefined;\r\n }\r\n });\r\n };\r\n Zoom.prototype.touchendZoom = function (startCoords, endCoords, allowX, allowY, touchDuration) {\r\n var distanceXnew = endCoords.x - startCoords.x;\r\n var distanceYnew = endCoords.y - startCoords.y;\r\n var speedX = Math.abs(distanceXnew) / touchDuration + 1;\r\n var speedY = Math.abs(distanceYnew) / touchDuration + 1;\r\n if (speedX > 2) {\r\n speedX += 1;\r\n }\r\n if (speedY > 2) {\r\n speedY += 1;\r\n }\r\n distanceXnew = distanceXnew * speedX;\r\n distanceYnew = distanceYnew * speedY;\r\n var _LGel = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-img-wrap')\r\n .first();\r\n var distance = {};\r\n distance.x = this.left + distanceXnew;\r\n distance.y = this.top + distanceYnew;\r\n var possibleSwipeCords = this.getPossibleSwipeDragCords();\r\n if (Math.abs(distanceXnew) > 15 || Math.abs(distanceYnew) > 15) {\r\n if (allowY) {\r\n if (this.isBeyondPossibleTop(distance.y, possibleSwipeCords.minY)) {\r\n distance.y = possibleSwipeCords.minY;\r\n }\r\n else if (this.isBeyondPossibleBottom(distance.y, possibleSwipeCords.maxY)) {\r\n distance.y = possibleSwipeCords.maxY;\r\n }\r\n }\r\n if (allowX) {\r\n if (this.isBeyondPossibleLeft(distance.x, possibleSwipeCords.minX)) {\r\n distance.x = possibleSwipeCords.minX;\r\n }\r\n else if (this.isBeyondPossibleRight(distance.x, possibleSwipeCords.maxX)) {\r\n distance.x = possibleSwipeCords.maxX;\r\n }\r\n }\r\n if (allowY) {\r\n this.top = distance.y;\r\n }\r\n else {\r\n distance.y = this.top;\r\n }\r\n if (allowX) {\r\n this.left = distance.x;\r\n }\r\n else {\r\n distance.x = this.left;\r\n }\r\n this.setZoomSwipeStyles(_LGel, distance);\r\n this.positionChanged = true;\r\n }\r\n };\r\n Zoom.prototype.getZoomSwipeCords = function (startCoords, endCoords, allowX, allowY, possibleSwipeCords) {\r\n var distance = {};\r\n if (allowY) {\r\n distance.y = this.top + (endCoords.y - startCoords.y);\r\n if (this.isBeyondPossibleTop(distance.y, possibleSwipeCords.minY)) {\r\n var diffMinY = possibleSwipeCords.minY - distance.y;\r\n distance.y = possibleSwipeCords.minY - diffMinY / 6;\r\n }\r\n else if (this.isBeyondPossibleBottom(distance.y, possibleSwipeCords.maxY)) {\r\n var diffMaxY = distance.y - possibleSwipeCords.maxY;\r\n distance.y = possibleSwipeCords.maxY + diffMaxY / 6;\r\n }\r\n }\r\n else {\r\n distance.y = this.top;\r\n }\r\n if (allowX) {\r\n distance.x = this.left + (endCoords.x - startCoords.x);\r\n if (this.isBeyondPossibleLeft(distance.x, possibleSwipeCords.minX)) {\r\n var diffMinX = possibleSwipeCords.minX - distance.x;\r\n distance.x = possibleSwipeCords.minX - diffMinX / 6;\r\n }\r\n else if (this.isBeyondPossibleRight(distance.x, possibleSwipeCords.maxX)) {\r\n var difMaxX = distance.x - possibleSwipeCords.maxX;\r\n distance.x = possibleSwipeCords.maxX + difMaxX / 6;\r\n }\r\n }\r\n else {\r\n distance.x = this.left;\r\n }\r\n return distance;\r\n };\r\n Zoom.prototype.isBeyondPossibleLeft = function (x, minX) {\r\n return x >= minX;\r\n };\r\n Zoom.prototype.isBeyondPossibleRight = function (x, maxX) {\r\n return x <= maxX;\r\n };\r\n Zoom.prototype.isBeyondPossibleTop = function (y, minY) {\r\n return y >= minY;\r\n };\r\n Zoom.prototype.isBeyondPossibleBottom = function (y, maxY) {\r\n return y <= maxY;\r\n };\r\n Zoom.prototype.isImageSlide = function (index) {\r\n var currentItem = this.core.galleryItems[index];\r\n return this.core.getSlideType(currentItem) === 'image';\r\n };\r\n Zoom.prototype.getPossibleSwipeDragCords = function (scale) {\r\n var $image = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-image')\r\n .first();\r\n var bottom = this.core.mediaContainerPosition.bottom;\r\n var imgRect = $image.get().getBoundingClientRect();\r\n var imageHeight = imgRect.height;\r\n var imageWidth = imgRect.width;\r\n if (scale) {\r\n imageHeight = imageHeight + scale * imageHeight;\r\n imageWidth = imageWidth + scale * imageWidth;\r\n }\r\n var minY = (imageHeight - this.containerRect.height) / 2;\r\n var maxY = (this.containerRect.height - imageHeight) / 2 + bottom;\r\n var minX = (imageWidth - this.containerRect.width) / 2;\r\n var maxX = (this.containerRect.width - imageWidth) / 2;\r\n var possibleSwipeCords = {\r\n minY: minY,\r\n maxY: maxY,\r\n minX: minX,\r\n maxX: maxX,\r\n };\r\n return possibleSwipeCords;\r\n };\r\n Zoom.prototype.setZoomSwipeStyles = function (LGel, distance) {\r\n LGel.css('transform', 'translate3d(' + distance.x + 'px, ' + distance.y + 'px, 0)');\r\n };\r\n Zoom.prototype.zoomSwipe = function () {\r\n var _this = this;\r\n var startCoords = {};\r\n var endCoords = {};\r\n var isMoved = false;\r\n // Allow x direction drag\r\n var allowX = false;\r\n // Allow Y direction drag\r\n var allowY = false;\r\n var startTime = new Date();\r\n var endTime = new Date();\r\n var possibleSwipeCords;\r\n var _LGel;\r\n var $item = this.core.getSlideItem(this.core.index);\r\n this.core.$inner.on('touchstart.lg', function (e) {\r\n // Allow zoom only on image\r\n if (!_this.isImageSlide(_this.core.index)) {\r\n return;\r\n }\r\n $item = _this.core.getSlideItem(_this.core.index);\r\n if ((_this.$LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target)) &&\r\n e.touches.length === 1 &&\r\n _this.core.outer.hasClass('lg-zoomed')) {\r\n e.preventDefault();\r\n startTime = new Date();\r\n _this.core.touchAction = 'zoomSwipe';\r\n _LGel = _this.core\r\n .getSlideItem(_this.core.index)\r\n .find('.lg-img-wrap')\r\n .first();\r\n var dragAllowedAxises = _this.getDragAllowedAxises(0);\r\n allowY = dragAllowedAxises.allowY;\r\n allowX = dragAllowedAxises.allowX;\r\n if (allowX || allowY) {\r\n startCoords = _this.getSwipeCords(e);\r\n }\r\n possibleSwipeCords = _this.getPossibleSwipeDragCords();\r\n // reset opacity and transition duration\r\n _this.core.outer.addClass('lg-zoom-dragging lg-zoom-drag-transition');\r\n }\r\n });\r\n this.core.$inner.on('touchmove.lg', function (e) {\r\n if (e.touches.length === 1 &&\r\n _this.core.touchAction === 'zoomSwipe' &&\r\n (_this.$LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target))) {\r\n e.preventDefault();\r\n _this.core.touchAction = 'zoomSwipe';\r\n endCoords = _this.getSwipeCords(e);\r\n var distance = _this.getZoomSwipeCords(startCoords, endCoords, allowX, allowY, possibleSwipeCords);\r\n if (Math.abs(endCoords.x - startCoords.x) > 15 ||\r\n Math.abs(endCoords.y - startCoords.y) > 15) {\r\n isMoved = true;\r\n _this.setZoomSwipeStyles(_LGel, distance);\r\n }\r\n }\r\n });\r\n this.core.$inner.on('touchend.lg', function (e) {\r\n if (_this.core.touchAction === 'zoomSwipe' &&\r\n (_this.$LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target))) {\r\n e.preventDefault();\r\n _this.core.touchAction = undefined;\r\n _this.core.outer.removeClass('lg-zoom-dragging');\r\n if (!isMoved) {\r\n return;\r\n }\r\n isMoved = false;\r\n endTime = new Date();\r\n var touchDuration = endTime.valueOf() - startTime.valueOf();\r\n _this.touchendZoom(startCoords, endCoords, allowX, allowY, touchDuration);\r\n }\r\n });\r\n };\r\n Zoom.prototype.zoomDrag = function () {\r\n var _this = this;\r\n var startCoords = {};\r\n var endCoords = {};\r\n var isDragging = false;\r\n var isMoved = false;\r\n // Allow x direction drag\r\n var allowX = false;\r\n // Allow Y direction drag\r\n var allowY = false;\r\n var startTime;\r\n var endTime;\r\n var possibleSwipeCords;\r\n var _LGel;\r\n this.core.outer.on('mousedown.lg.zoom', function (e) {\r\n // Allow zoom only on image\r\n if (!_this.isImageSlide(_this.core.index)) {\r\n return;\r\n }\r\n var $item = _this.core.getSlideItem(_this.core.index);\r\n if (_this.$LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target)) {\r\n startTime = new Date();\r\n _LGel = _this.core\r\n .getSlideItem(_this.core.index)\r\n .find('.lg-img-wrap')\r\n .first();\r\n var dragAllowedAxises = _this.getDragAllowedAxises(0);\r\n allowY = dragAllowedAxises.allowY;\r\n allowX = dragAllowedAxises.allowX;\r\n if (_this.core.outer.hasClass('lg-zoomed')) {\r\n if (_this.$LG(e.target).hasClass('lg-object') &&\r\n (allowX || allowY)) {\r\n e.preventDefault();\r\n startCoords = _this.getDragCords(e);\r\n possibleSwipeCords = _this.getPossibleSwipeDragCords();\r\n isDragging = true;\r\n _this.core.outer\r\n .removeClass('lg-grab')\r\n .addClass('lg-grabbing lg-zoom-drag-transition lg-zoom-dragging');\r\n // reset opacity and transition duration\r\n }\r\n }\r\n }\r\n });\r\n this.$LG(window).on(\"mousemove.lg.zoom.global\" + this.core.lgId, function (e) {\r\n if (isDragging) {\r\n isMoved = true;\r\n endCoords = _this.getDragCords(e);\r\n var distance = _this.getZoomSwipeCords(startCoords, endCoords, allowX, allowY, possibleSwipeCords);\r\n _this.setZoomSwipeStyles(_LGel, distance);\r\n }\r\n });\r\n this.$LG(window).on(\"mouseup.lg.zoom.global\" + this.core.lgId, function (e) {\r\n if (isDragging) {\r\n endTime = new Date();\r\n isDragging = false;\r\n _this.core.outer.removeClass('lg-zoom-dragging');\r\n // Fix for chrome mouse move on click\r\n if (isMoved &&\r\n (startCoords.x !== endCoords.x ||\r\n startCoords.y !== endCoords.y)) {\r\n endCoords = _this.getDragCords(e);\r\n var touchDuration = endTime.valueOf() - startTime.valueOf();\r\n _this.touchendZoom(startCoords, endCoords, allowX, allowY, touchDuration);\r\n }\r\n isMoved = false;\r\n }\r\n _this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');\r\n });\r\n };\r\n Zoom.prototype.closeGallery = function () {\r\n this.resetZoom();\r\n };\r\n Zoom.prototype.destroy = function () {\r\n // Unbind all events added by lightGallery zoom plugin\r\n this.$LG(window).off(\".lg.zoom.global\" + this.core.lgId);\r\n this.core.LGel.off('.lg.zoom');\r\n this.core.LGel.off('.zoom');\r\n clearTimeout(this.zoomableTimeout);\r\n this.zoomableTimeout = false;\r\n };\r\n return Zoom;\r\n}());\n\nexport default Zoom;\n//# sourceMappingURL=lg-zoom.es5.js.map\n","import Util from \"../utils/util.js\";\r\nimport lightGallery from 'lightgallery';\r\n\r\n// Plugins\r\nimport lgZoom from 'lightgallery/plugins/zoom'\r\nclass TrailMap {\r\n constructor() {\r\n this.initTrailMap();\r\n }\r\n initTrailMap(){\r\n let trailMaps = Util.$('.js-trail-map');\r\n if(trailMaps.length > 0){\r\n trailMaps.forEach(function(el){\r\n lightGallery(el, {\r\n speed: 500,\r\n licenseKey: 'C94E7EDA-1939-4C9D-A24B-8E652BE5EFBD',\r\n plugins: [lgZoom],\r\n download: false,\r\n selector: '.js-trail-map__lightbox-link'\r\n });\r\n });\r\n \r\n }\r\n \r\n }\r\n}\r\n\r\nexport default TrailMap;","import { gsap } from \"gsap/gsap-core\";\r\nimport { CSSPlugin } from 'gsap/CSSPlugin';\r\nimport Util from \"../utils/util.js\";\r\ngsap.registerPlugin(CSSPlugin);\r\nclass Accordion {\r\n constructor() {\r\n this.initAccordion();\r\n }\r\n settings = {\r\n desktop: '1056px',\r\n toggleClass: '-item-active'\r\n }\r\n mobileCheck(){\r\n if(window.matchMedia('(min-width:'+ this.settings.desktop +')').matches){\r\n return false;\r\n }else{\r\n return true;\r\n }\r\n }\r\n initAccordion(){\r\n let accordions = Util.$('.js-accordion');\r\n let a = this;\r\n if(accordions.length > 0){\r\n accordions.forEach(function(el){\r\n let toggle = Util.$('.js-accordion__toggle', el)[0];\r\n let content = Util.$('.js-accordion__content', el)[0];\r\n let container = Util.$('.js-accordion__content-container', el)[0];\r\n a.bindAccordionToggle(el, toggle, content, container);\r\n });\r\n }\r\n \r\n //this.bindDropdownToggle(mainNav[0], menuButton[0], header[0], '-main-nav-open');\r\n }\r\n bindAccordionToggle(accordion, toggle, content, container){\r\n // FOR ALL MENU TOGGLE BUTTONS - TOGGLE CLASS ON ITEM AND DROPDOWN\r\n let h = this;\r\n \r\n \r\n toggle.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n let active = accordion.classList.contains('-open');\r\n \r\n if(active){\r\n toggle.classList.remove('-active');\r\n \r\n h.hideAccordion(accordion, content);\r\n }else{\r\n let height = container.offsetHeight;;\r\n toggle.classList.add('-active');\r\n accordion.classList.add('-active');\r\n h.showAccordion(accordion, content, height);\r\n }\r\n \r\n });\r\n }\r\n showAccordion(accordion, container, height){\r\n let tween = {height: ''};\r\n tween.height = height;\r\n tween.onComplete = function(accordion){\r\n console.log('CALLBACK');\r\n console.log(accordion);\r\n accordion.classList.add('-open');\r\n };\r\n tween.onCompleteParams = [accordion];\r\n gsap.to(container, tween);\r\n }\r\n hideAccordion(accordion, container){\r\n let tween = {height: '0px'};\r\n tween.onComplete = function(accordion){\r\n console.log('CALLBACK');\r\n console.log(accordion);\r\n accordion.classList.remove('-open');\r\n };\r\n tween.onCompleteParams = [accordion];\r\n gsap.to(container, tween);\r\n } \r\n}\r\nexport default Accordion;","import { gsap } from \"gsap/gsap-core\";\r\nimport { CSSPlugin } from 'gsap/CSSPlugin';\r\nimport Util from \"../utils/util.js\";\r\ngsap.registerPlugin(CSSPlugin);\r\nclass Alerts {\r\n constructor() {\r\n this.initAlert();\r\n }\r\n settings = {\r\n desktop: '1024px'\r\n }\r\n mobileCheck(){\r\n if(window.matchMedia('(min-width:'+ this.settings.desktop +')').matches){\r\n return false;\r\n }else{\r\n return true;\r\n }\r\n }\r\n initAlert(){\r\n let t = this;\r\n document.addEventListener(\"DOMContentLoaded\",function(){\r\n let header = Util.$('.js-header');\r\n let alertButton = Util.$('.js-header__utility-alerts', header[0]);\r\n let alertDropdown = Util.$('.js-alert__dropdown' , header[0]);\r\n let alertDropdownContent = Util.$('.js-alert__dropdown-wrapper' , header[0]);\r\n let alerts = Util.$('.js-alert__dropdown-list-item', alertDropdown[0]);\r\n let clearAll = Util.$('.js-alert__dropdown-ctrl-clear-btn',alertDropdown[0] );\r\n if(alertDropdown.length > 0){\r\n t.bindDesktopDropdownToggle(alertDropdown[0],alertButton[0], alertDropdownContent[0]);\r\n }\r\n if(alerts.length > 0){\r\n let activeAlerts = alerts.length - 1;\r\n alerts.forEach(function(el){\r\n let thisClear = Util.$('.js-alert__dropdown-item-dismiss', el)[0];\r\n if(thisClear){\r\n thisClear.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n let height = el.offsetHeight;\r\n el.style.setProperty('height', height + 'px');\r\n el.classList.add('-dismissed');\r\n gsap.to(el, {height: '0px'});\r\n alertDropdown[0].style.removeProperty('height');\r\n activeAlerts = activeAlerts - 1;\r\n \r\n if(activeAlerts === 0){\r\n alerts[alerts.length - 1].classList.remove('-not-needed');\r\n alerts[alerts.length - 1].style.removeProperty('height');\r\n clearAll[0].classList.add('-hidden');\r\n alertButton[0].classList.remove('-has-alerts');\r\n }\r\n });\r\n }\r\n });\r\n if(alerts.length === 1){\r\n alerts[0].classList.remove('-not-needed');\r\n alerts[0].style.removeProperty('height');\r\n clearAll[0].classList.add('-hidden');\r\n }\r\n if(alerts.length > 1){\r\n alertButton[0].classList.add('-has-alerts');\r\n }\r\n clearAll[0].addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n let clearBtns = Util.$('.js-alert__dropdown-item-dismiss', alertDropdown[0]);\r\n clearBtns.forEach(function(el){\r\n el.click();\r\n });\r\n alertButton[0].classList.remove('-has-alerts');\r\n });\r\n }\r\n })\r\n \r\n }\r\n\r\n bindDesktopDropdownToggle(dropdown, item, content){\r\n // FOR ALL MENU TOGGLE BUTTONS - TOGGLE CLASS ON ITEM AND DROPDOWN\r\n let h = this;\r\n window.addEventListener('click', function(ev){\r\n let active = item.classList.contains('-active');\r\n if(active){\r\n item.classList.remove('-active');\r\n dropdown.classList.remove('-active');\r\n h.hideDesktopDropdown(dropdown);\r\n }\r\n });\r\n item.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n let active = item.classList.contains('-active');\r\n if(active){\r\n item.classList.remove('-active');\r\n dropdown.classList.remove('-active');\r\n h.hideDesktopDropdown(dropdown);\r\n }else{\r\n item.classList.add('-active');\r\n dropdown.classList.add('-active');\r\n let height = content.offsetHeight;\r\n h.showDesktopDropdown(dropdown, height);\r\n }\r\n \r\n });\r\n }\r\n showDesktopDropdown(dropdown, height){\r\n let tween = {height: ''};\r\n tween.height = height;\r\n gsap.to(dropdown, tween);\r\n }\r\n hideDesktopDropdown(dropdown){\r\n gsap.to(dropdown, {height: '0px'});\r\n }\r\n\r\n}\r\nexport default Alerts;","import { gsap } from \"gsap/gsap-core\";\r\nimport { CSSPlugin } from 'gsap/CSSPlugin';\r\nimport Util from \"../utils/util.js\";\r\ngsap.registerPlugin(CSSPlugin);\r\nclass LocalNav {\r\n constructor() {\r\n this.initLocalNav();\r\n }\r\n settings = {\r\n desktop: '1024px'\r\n }\r\n mobileCheck(){\r\n if(window.matchMedia('(min-width:'+ this.settings.desktop +')').matches){\r\n return false;\r\n }else{\r\n return true;\r\n }\r\n }\r\n resetDesktopActive(h){\r\n let activeNavItems = Util.$('.js-local-nav__link.-item-active');\r\n if(!h.mobileCheck()){\r\n activeNavItems.forEach(function(el){\r\n el.classList.remove('-item-active');\r\n });\r\n\r\n let activeDropdowns = Util.$('.js-local-nav__dropdown.-active');\r\n activeDropdowns.forEach(function(el){\r\n el.classList.remove('-active');\r\n h.hideDropdown(el);\r\n });\r\n }\r\n }\r\n setMobileActive(h){\r\n let activeNavItems = Util.$('.js-local-nav__link.-item-active');\r\n if (h.mobileCheck() && activeNavItems.length > 0) {\r\n let mobileToggle = Util.$('.js-local-nav__mobile-toggle');\r\n if(mobileToggle[0]){\r\n mobileToggle[0].classList.add('-item-active');\r\n }\r\n }\r\n }\r\n initLocalNav(){\r\n let t = this;\r\n document.addEventListener(\"DOMContentLoaded\",function(){\r\n let localNav = Util.$('.js-local-nav');\r\n let localNavMobileDropdown = Util.$(\".js-local-nav__wrapper\", localNav[0]);\r\n let localNavMobileDropdownContent = Util.$(\".js-local-nav__slider\", localNav[0]);\r\n let mobileToggle = Util.$('.js-local-nav__mobile-toggle', localNav[0]);\r\n let navItems = Util.$('.js-local-nav__item', localNav[0]);\r\n\r\n window.addEventListener(\"resize\", function(){\r\n t.resetDesktopActive(t);\r\n t.setMobileActive(t);\r\n });\r\n\r\n if(localNav.length > 0){\r\n t.bindDropdownToggle(localNavMobileDropdown[0], mobileToggle[0], localNavMobileDropdownContent[0]);\r\n }\r\n if(navItems.length > 0){\r\n let navContainerOffsetEnd = localNavMobileDropdownContent[0].offsetLeft + localNavMobileDropdownContent[0].offsetWidth;\r\n let lastItemOffset = navItems[navItems.length - 1].offsetLeft + navItems[navItems.length - 1].offsetWidth;\r\n if(navContainerOffsetEnd + 20 < lastItemOffset){\r\n localNav[0].classList.remove('-desktop');\r\n }\r\n navItems.forEach(function(el){\r\n let localNavLink = Util.$('.js-local-nav__link', el);\r\n let localNavDropdown = Util.$('.js-local-nav__dropdown', el);\r\n let localNavDropdownContent = Util.$('.js-local-nav__dropdown-wrapper', el);\r\n if(localNavLink.length > 0 && localNavDropdown.length > 0 && localNavDropdownContent.length > 0){\r\n t.bindSubnavToggle(localNavDropdown[0], localNavLink[0], localNavDropdownContent[0], localNavMobileDropdown[0]);\r\n }\r\n });\r\n }\r\n \r\n })\r\n \r\n }\r\n \r\n bindDropdownToggle(dropdown, item, content){\r\n // FOR ALL MENU TOGGLE BUTTONS - TOGGLE CLASS ON ITEM AND DROPDOWN\r\n let h = this;\r\n window.addEventListener('click', function(ev){\r\n // THE BELOW WAS EXISTING CODE AS OF 07/18/2023 - LEFT IN FOR JIM REVIEW IF STILL NECESSARY OR NOT\r\n // let active = item.classList.contains('-item-active');\r\n // if(active){\r\n // item.classList.remove('-item-active');\r\n // dropdown.classList.remove('-active');\r\n // h.hideDropdown(dropdown);\r\n // }\r\n\r\n h.resetDesktopActive(h);\r\n });\r\n item.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n let active = item.classList.contains('-item-active');\r\n if(active){\r\n item.classList.remove('-item-active');\r\n dropdown.classList.remove('-active');\r\n h.hideDropdown(dropdown);\r\n let activeKids = Util.$('.js-local-nav__link.-item-active', dropdown);\r\n console.log('CLOSE NAV');\r\n console.log(activeKids);\r\n if(activeKids.length > 0){\r\n console.log('GOT ACTIVE KIDS');\r\n activeKids.forEach(function(el){\r\n \r\n setTimeout(function(){\r\n el.click();\r\n }, 500);\r\n });\r\n }\r\n \r\n }else{\r\n item.classList.add('-item-active');\r\n dropdown.classList.add('-active');\r\n let height = content.offsetHeight;\r\n h.showDropdown(dropdown, height);\r\n }\r\n \r\n });\r\n }\r\n\r\n bindSubnavToggle(dropdown, item, content, parentNav){\r\n // FOR ALL MENU TOGGLE BUTTONS - TOGGLE CLASS ON ITEM AND DROPDOWN\r\n let h = this;\r\n item.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n\r\n let active = item.classList.contains('-item-active');\r\n\r\n h.resetDesktopActive(h);\r\n\r\n if(active){\r\n item.classList.remove('-item-active');\r\n dropdown.classList.remove('-active');\r\n h.hideDropdown(dropdown);\r\n }else{\r\n item.classList.add('-item-active');\r\n dropdown.classList.add('-active');\r\n parentNav.style.setProperty('height', 'auto');\r\n let height = content.offsetHeight;\r\n h.showDropdown(dropdown, height);\r\n }\r\n \r\n });\r\n }\r\n showDropdown(dropdown, height){\r\n let tween = {height: ''};\r\n tween.height = height;\r\n gsap.to(dropdown, tween);\r\n }\r\n hideDropdown(dropdown){\r\n gsap.to(dropdown, {height: '0px'});\r\n }\r\n \r\n}\r\nexport default LocalNav;","var token = /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|Z|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\nvar twoDigitsOptional = \"\\\\d\\\\d?\";\nvar twoDigits = \"\\\\d\\\\d\";\nvar threeDigits = \"\\\\d{3}\";\nvar fourDigits = \"\\\\d{4}\";\nvar word = \"[^\\\\s]+\";\nvar literal = /\\[([^]*?)\\]/gm;\nfunction shorten(arr, sLen) {\n var newArr = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n newArr.push(arr[i].substr(0, sLen));\n }\n return newArr;\n}\nvar monthUpdate = function (arrName) { return function (v, i18n) {\n var lowerCaseArr = i18n[arrName].map(function (v) { return v.toLowerCase(); });\n var index = lowerCaseArr.indexOf(v.toLowerCase());\n if (index > -1) {\n return index;\n }\n return null;\n}; };\nfunction assign(origObj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n var obj = args_1[_a];\n for (var key in obj) {\n // @ts-ignore ex\n origObj[key] = obj[key];\n }\n }\n return origObj;\n}\nvar dayNames = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\"\n];\nvar monthNames = [\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];\nvar monthNamesShort = shorten(monthNames, 3);\nvar dayNamesShort = shorten(dayNames, 3);\nvar defaultI18n = {\n dayNamesShort: dayNamesShort,\n dayNames: dayNames,\n monthNamesShort: monthNamesShort,\n monthNames: monthNames,\n amPm: [\"am\", \"pm\"],\n DoFn: function (dayOfMonth) {\n return (dayOfMonth +\n [\"th\", \"st\", \"nd\", \"rd\"][dayOfMonth % 10 > 3\n ? 0\n : ((dayOfMonth - (dayOfMonth % 10) !== 10 ? 1 : 0) * dayOfMonth) % 10]);\n }\n};\nvar globalI18n = assign({}, defaultI18n);\nvar setGlobalDateI18n = function (i18n) {\n return (globalI18n = assign(globalI18n, i18n));\n};\nvar regexEscape = function (str) {\n return str.replace(/[|\\\\{()[^$+*?.-]/g, \"\\\\$&\");\n};\nvar pad = function (val, len) {\n if (len === void 0) { len = 2; }\n val = String(val);\n while (val.length < len) {\n val = \"0\" + val;\n }\n return val;\n};\nvar formatFlags = {\n D: function (dateObj) { return String(dateObj.getDate()); },\n DD: function (dateObj) { return pad(dateObj.getDate()); },\n Do: function (dateObj, i18n) {\n return i18n.DoFn(dateObj.getDate());\n },\n d: function (dateObj) { return String(dateObj.getDay()); },\n dd: function (dateObj) { return pad(dateObj.getDay()); },\n ddd: function (dateObj, i18n) {\n return i18n.dayNamesShort[dateObj.getDay()];\n },\n dddd: function (dateObj, i18n) {\n return i18n.dayNames[dateObj.getDay()];\n },\n M: function (dateObj) { return String(dateObj.getMonth() + 1); },\n MM: function (dateObj) { return pad(dateObj.getMonth() + 1); },\n MMM: function (dateObj, i18n) {\n return i18n.monthNamesShort[dateObj.getMonth()];\n },\n MMMM: function (dateObj, i18n) {\n return i18n.monthNames[dateObj.getMonth()];\n },\n YY: function (dateObj) {\n return pad(String(dateObj.getFullYear()), 4).substr(2);\n },\n YYYY: function (dateObj) { return pad(dateObj.getFullYear(), 4); },\n h: function (dateObj) { return String(dateObj.getHours() % 12 || 12); },\n hh: function (dateObj) { return pad(dateObj.getHours() % 12 || 12); },\n H: function (dateObj) { return String(dateObj.getHours()); },\n HH: function (dateObj) { return pad(dateObj.getHours()); },\n m: function (dateObj) { return String(dateObj.getMinutes()); },\n mm: function (dateObj) { return pad(dateObj.getMinutes()); },\n s: function (dateObj) { return String(dateObj.getSeconds()); },\n ss: function (dateObj) { return pad(dateObj.getSeconds()); },\n S: function (dateObj) {\n return String(Math.round(dateObj.getMilliseconds() / 100));\n },\n SS: function (dateObj) {\n return pad(Math.round(dateObj.getMilliseconds() / 10), 2);\n },\n SSS: function (dateObj) { return pad(dateObj.getMilliseconds(), 3); },\n a: function (dateObj, i18n) {\n return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];\n },\n A: function (dateObj, i18n) {\n return dateObj.getHours() < 12\n ? i18n.amPm[0].toUpperCase()\n : i18n.amPm[1].toUpperCase();\n },\n ZZ: function (dateObj) {\n var offset = dateObj.getTimezoneOffset();\n return ((offset > 0 ? \"-\" : \"+\") +\n pad(Math.floor(Math.abs(offset) / 60) * 100 + (Math.abs(offset) % 60), 4));\n },\n Z: function (dateObj) {\n var offset = dateObj.getTimezoneOffset();\n return ((offset > 0 ? \"-\" : \"+\") +\n pad(Math.floor(Math.abs(offset) / 60), 2) +\n \":\" +\n pad(Math.abs(offset) % 60, 2));\n }\n};\nvar monthParse = function (v) { return +v - 1; };\nvar emptyDigits = [null, twoDigitsOptional];\nvar emptyWord = [null, word];\nvar amPm = [\n \"isPm\",\n word,\n function (v, i18n) {\n var val = v.toLowerCase();\n if (val === i18n.amPm[0]) {\n return 0;\n }\n else if (val === i18n.amPm[1]) {\n return 1;\n }\n return null;\n }\n];\nvar timezoneOffset = [\n \"timezoneOffset\",\n \"[^\\\\s]*?[\\\\+\\\\-]\\\\d\\\\d:?\\\\d\\\\d|[^\\\\s]*?Z?\",\n function (v) {\n var parts = (v + \"\").match(/([+-]|\\d\\d)/gi);\n if (parts) {\n var minutes = +parts[1] * 60 + parseInt(parts[2], 10);\n return parts[0] === \"+\" ? minutes : -minutes;\n }\n return 0;\n }\n];\nvar parseFlags = {\n D: [\"day\", twoDigitsOptional],\n DD: [\"day\", twoDigits],\n Do: [\"day\", twoDigitsOptional + word, function (v) { return parseInt(v, 10); }],\n M: [\"month\", twoDigitsOptional, monthParse],\n MM: [\"month\", twoDigits, monthParse],\n YY: [\n \"year\",\n twoDigits,\n function (v) {\n var now = new Date();\n var cent = +(\"\" + now.getFullYear()).substr(0, 2);\n return +(\"\" + (+v > 68 ? cent - 1 : cent) + v);\n }\n ],\n h: [\"hour\", twoDigitsOptional, undefined, \"isPm\"],\n hh: [\"hour\", twoDigits, undefined, \"isPm\"],\n H: [\"hour\", twoDigitsOptional],\n HH: [\"hour\", twoDigits],\n m: [\"minute\", twoDigitsOptional],\n mm: [\"minute\", twoDigits],\n s: [\"second\", twoDigitsOptional],\n ss: [\"second\", twoDigits],\n YYYY: [\"year\", fourDigits],\n S: [\"millisecond\", \"\\\\d\", function (v) { return +v * 100; }],\n SS: [\"millisecond\", twoDigits, function (v) { return +v * 10; }],\n SSS: [\"millisecond\", threeDigits],\n d: emptyDigits,\n dd: emptyDigits,\n ddd: emptyWord,\n dddd: emptyWord,\n MMM: [\"month\", word, monthUpdate(\"monthNamesShort\")],\n MMMM: [\"month\", word, monthUpdate(\"monthNames\")],\n a: amPm,\n A: amPm,\n ZZ: timezoneOffset,\n Z: timezoneOffset\n};\n// Some common format strings\nvar globalMasks = {\n default: \"ddd MMM DD YYYY HH:mm:ss\",\n shortDate: \"M/D/YY\",\n mediumDate: \"MMM D, YYYY\",\n longDate: \"MMMM D, YYYY\",\n fullDate: \"dddd, MMMM D, YYYY\",\n isoDate: \"YYYY-MM-DD\",\n isoDateTime: \"YYYY-MM-DDTHH:mm:ssZ\",\n shortTime: \"HH:mm\",\n mediumTime: \"HH:mm:ss\",\n longTime: \"HH:mm:ss.SSS\"\n};\nvar setGlobalDateMasks = function (masks) { return assign(globalMasks, masks); };\n/***\n * Format a date\n * @method format\n * @param {Date|number} dateObj\n * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'\n * @returns {string} Formatted date string\n */\nvar format = function (dateObj, mask, i18n) {\n if (mask === void 0) { mask = globalMasks[\"default\"]; }\n if (i18n === void 0) { i18n = {}; }\n if (typeof dateObj === \"number\") {\n dateObj = new Date(dateObj);\n }\n if (Object.prototype.toString.call(dateObj) !== \"[object Date]\" ||\n isNaN(dateObj.getTime())) {\n throw new Error(\"Invalid Date pass to format\");\n }\n mask = globalMasks[mask] || mask;\n var literals = [];\n // Make literals inactive by replacing them with @@@\n mask = mask.replace(literal, function ($0, $1) {\n literals.push($1);\n return \"@@@\";\n });\n var combinedI18nSettings = assign(assign({}, globalI18n), i18n);\n // Apply formatting rules\n mask = mask.replace(token, function ($0) {\n return formatFlags[$0](dateObj, combinedI18nSettings);\n });\n // Inline literal values back into the formatted value\n return mask.replace(/@@@/g, function () { return literals.shift(); });\n};\n/**\n * Parse a date string into a Javascript Date object /\n * @method parse\n * @param {string} dateStr Date string\n * @param {string} format Date parse format\n * @param {i18n} I18nSettingsOptional Full or subset of I18N settings\n * @returns {Date|null} Returns Date object. Returns null what date string is invalid or doesn't match format\n */\nfunction parse(dateStr, format, i18n) {\n if (i18n === void 0) { i18n = {}; }\n if (typeof format !== \"string\") {\n throw new Error(\"Invalid format in fecha parse\");\n }\n // Check to see if the format is actually a mask\n format = globalMasks[format] || format;\n // Avoid regular expression denial of service, fail early for really long strings\n // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\n if (dateStr.length > 1000) {\n return null;\n }\n // Default to the beginning of the year.\n var today = new Date();\n var dateInfo = {\n year: today.getFullYear(),\n month: 0,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n isPm: null,\n timezoneOffset: null\n };\n var parseInfo = [];\n var literals = [];\n // Replace all the literals with @@@. Hopefully a string that won't exist in the format\n var newFormat = format.replace(literal, function ($0, $1) {\n literals.push(regexEscape($1));\n return \"@@@\";\n });\n var specifiedFields = {};\n var requiredFields = {};\n // Change every token that we find into the correct regex\n newFormat = regexEscape(newFormat).replace(token, function ($0) {\n var info = parseFlags[$0];\n var field = info[0], regex = info[1], requiredField = info[3];\n // Check if the person has specified the same field twice. This will lead to confusing results.\n if (specifiedFields[field]) {\n throw new Error(\"Invalid format. \" + field + \" specified twice in format\");\n }\n specifiedFields[field] = true;\n // Check if there are any required fields. For instance, 12 hour time requires AM/PM specified\n if (requiredField) {\n requiredFields[requiredField] = true;\n }\n parseInfo.push(info);\n return \"(\" + regex + \")\";\n });\n // Check all the required fields are present\n Object.keys(requiredFields).forEach(function (field) {\n if (!specifiedFields[field]) {\n throw new Error(\"Invalid format. \" + field + \" is required in specified format\");\n }\n });\n // Add back all the literals after\n newFormat = newFormat.replace(/@@@/g, function () { return literals.shift(); });\n // Check if the date string matches the format. If it doesn't return null\n var matches = dateStr.match(new RegExp(newFormat, \"i\"));\n if (!matches) {\n return null;\n }\n var combinedI18nSettings = assign(assign({}, globalI18n), i18n);\n // For each match, call the parser function for that date part\n for (var i = 1; i < matches.length; i++) {\n var _a = parseInfo[i - 1], field = _a[0], parser = _a[2];\n var value = parser\n ? parser(matches[i], combinedI18nSettings)\n : +matches[i];\n // If the parser can't make sense of the value, return null\n if (value == null) {\n return null;\n }\n dateInfo[field] = value;\n }\n if (dateInfo.isPm === 1 && dateInfo.hour != null && +dateInfo.hour !== 12) {\n dateInfo.hour = +dateInfo.hour + 12;\n }\n else if (dateInfo.isPm === 0 && +dateInfo.hour === 12) {\n dateInfo.hour = 0;\n }\n var dateTZ;\n if (dateInfo.timezoneOffset == null) {\n dateTZ = new Date(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute, dateInfo.second, dateInfo.millisecond);\n var validateFields = [\n [\"month\", \"getMonth\"],\n [\"day\", \"getDate\"],\n [\"hour\", \"getHours\"],\n [\"minute\", \"getMinutes\"],\n [\"second\", \"getSeconds\"]\n ];\n for (var i = 0, len = validateFields.length; i < len; i++) {\n // Check to make sure the date field is within the allowed range. Javascript dates allows values\n // outside the allowed range. If the values don't match the value was invalid\n if (specifiedFields[validateFields[i][0]] &&\n dateInfo[validateFields[i][0]] !== dateTZ[validateFields[i][1]]()) {\n return null;\n }\n }\n }\n else {\n dateTZ = new Date(Date.UTC(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute - dateInfo.timezoneOffset, dateInfo.second, dateInfo.millisecond));\n // We can't validate dates in another timezone unfortunately. Do a basic check instead\n if (dateInfo.month > 11 ||\n dateInfo.month < 0 ||\n dateInfo.day > 31 ||\n dateInfo.day < 1 ||\n dateInfo.hour > 23 ||\n dateInfo.hour < 0 ||\n dateInfo.minute > 59 ||\n dateInfo.minute < 0 ||\n dateInfo.second > 59 ||\n dateInfo.second < 0) {\n return null;\n }\n }\n // Don't allow invalid dates\n return dateTZ;\n}\nvar fecha = {\n format: format,\n parse: parse,\n defaultI18n: defaultI18n,\n setGlobalDateI18n: setGlobalDateI18n,\n setGlobalDateMasks: setGlobalDateMasks\n};\n\nexport default fecha;\nexport { assign, format, parse, defaultI18n, setGlobalDateI18n, setGlobalDateMasks };\n//# sourceMappingURL=fecha.js.map\n","/*! hotel-datepicker 4.6.1 - Copyright 2022 Benito Lopez (http://lopezb.com) - https://github.com/benitolopez/hotel-datepicker - MIT */\nimport * as fecha from 'fecha';\n\nlet idCounter = 0;\nclass HotelDatepicker {\n constructor(input, options) {\n this._boundedEventHandlers = {};\n this.id = HotelDatepicker.getNewId();\n\n // Set default values\n const opts = options || {};\n this.format = opts.format || \"YYYY-MM-DD\";\n this.infoFormat = opts.infoFormat || this.format;\n this.ariaDayFormat = opts.ariaDayFormat || \"dddd, MMMM DD, YYYY\";\n this.separator = opts.separator || \" - \";\n this.startOfWeek = opts.startOfWeek || \"sunday\"; // Or monday\n this.startDate = opts.startDate || new Date();\n this.endDate = opts.endDate || false;\n this.minNights = opts.minNights || 1;\n this.maxNights = opts.maxNights || 0;\n this.selectForward = opts.selectForward || false;\n this.disabledDates = opts.disabledDates || [];\n this.noCheckInDates = opts.noCheckInDates || [];\n this.noCheckOutDates = opts.noCheckOutDates || [];\n this.disabledDaysOfWeek = opts.disabledDaysOfWeek || [];\n this.noCheckInDaysOfWeek = opts.noCheckInDaysOfWeek || [];\n this.noCheckOutDaysOfWeek = opts.noCheckOutDaysOfWeek || [];\n this.enableCheckout = opts.enableCheckout || false;\n this.preventContainerClose = opts.preventContainerClose || false;\n this.container = opts.container || \"\";\n this.animationSpeed = opts.animationSpeed || \".5s\";\n this.hoveringTooltip = opts.hoveringTooltip || true; // Or a function\n this.autoClose = opts.autoClose === undefined ? true : opts.autoClose;\n this.showTopbar = opts.showTopbar === undefined ? true : opts.showTopbar;\n this.topbarPosition = opts.topbarPosition === \"bottom\" ? \"bottom\" : \"top\";\n this.moveBothMonths = opts.moveBothMonths || false;\n this.inline = opts.inline || false;\n this.clearButton = opts.clearButton || false;\n this.submitButton = Boolean(this.inline && opts.submitButton);\n this.submitButtonName = this.submitButton && opts.submitButtonName ? opts.submitButtonName : \"\";\n this.i18n = opts.i18n || {\n selected: \"Your stay:\",\n night: \"Night\",\n nights: \"Nights\",\n button: \"Close\",\n clearButton: \"Clear\",\n submitButton: \"Submit\",\n \"checkin-disabled\": \"Check-in disabled\",\n \"checkout-disabled\": \"Check-out disabled\",\n \"day-names-short\": [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n \"day-names\": [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n \"month-names-short\": [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n \"month-names\": [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n \"error-more\": \"Date range should not be more than 1 night\",\n \"error-more-plural\": \"Date range should not be more than %d nights\",\n \"error-less\": \"Date range should not be less than 1 night\",\n \"error-less-plural\": \"Date range should not be less than %d nights\",\n \"info-more\": \"Please select a date range of at least 1 night\",\n \"info-more-plural\": \"Please select a date range of at least %d nights\",\n \"info-range\": \"Please select a date range between %d and %d nights\",\n \"info-range-equal\": \"Please select a date range of %d nights\",\n \"info-default\": \"Please select a date range\",\n \"aria-application\": \"Calendar\",\n \"aria-selected-checkin\": \"Selected as check-in date, %s\",\n \"aria-selected-checkout\": \"Selected as check-out date, %s\",\n \"aria-selected\": \"Selected, %s\",\n \"aria-disabled\": \"Not available, %s\",\n \"aria-choose-checkin\": \"Choose %s as your check-in date\",\n \"aria-choose-checkout\": \"Choose %s as your check-out date\",\n \"aria-prev-month\": \"Move backward to switch to the previous month\",\n \"aria-next-month\": \"Move forward to switch to the next month\",\n \"aria-close-button\": \"Close the datepicker\",\n \"aria-clear-button\": \"Clear the selected dates\",\n \"aria-submit-button\": \"Submit the form\"\n };\n this.getValue = opts.getValue || function () {\n return input.value;\n };\n this.setValue = opts.setValue || function (s) {\n input.value = s;\n };\n this.onDayClick = opts.onDayClick === undefined ? false : opts.onDayClick;\n this.onOpenDatepicker = opts.onOpenDatepicker === undefined ? false : opts.onOpenDatepicker;\n this.onSelectRange = opts.onSelectRange === undefined ? false : opts.onSelectRange;\n this.extraDayText = opts.extraDayText === undefined ? false : opts.extraDayText;\n\n // DOM input\n this.input = input;\n\n // Initialize the datepicker\n this.init();\n }\n addBoundedListener(node, event, handler, capture) {\n if (!(node in this._boundedEventHandlers)) {\n // _boundedEventHandlers stores references to nodes\n this._boundedEventHandlers[node] = {};\n }\n if (!(event in this._boundedEventHandlers[node])) {\n // Each entry contains another entry for each event type\n this._boundedEventHandlers[node][event] = [];\n }\n // Capture reference\n const boundedHandler = handler.bind(this);\n this._boundedEventHandlers[node][event].push([boundedHandler, capture]);\n node.addEventListener(event, boundedHandler, capture);\n }\n removeAllBoundedListeners(node, event) {\n if (node in this._boundedEventHandlers) {\n const handlers = this._boundedEventHandlers[node];\n if (event in handlers) {\n const eventHandlers = handlers[event];\n for (let i = eventHandlers.length; i--;) {\n const handler = eventHandlers[i];\n node.removeEventListener(event, handler[0], handler[1]);\n }\n }\n }\n }\n static getNewId() {\n return ++idCounter;\n }\n setFechaI18n() {\n fecha.setGlobalDateI18n({\n dayNamesShort: this.i18n[\"day-names-short\"],\n dayNames: this.i18n[\"day-names\"],\n monthNamesShort: this.i18n[\"month-names-short\"],\n monthNames: this.i18n[\"month-names\"]\n });\n }\n getWeekDayNames() {\n let week = \"\";\n\n // Start from monday if we passed that option\n if (this.startOfWeek === \"monday\") {\n for (let i = 0; i < 7; i++) {\n week += '' + this.lang(\"day-names-short\")[(1 + i) % 7] + \"\";\n }\n return week;\n }\n\n // Otherwise start from sunday (default)\n for (let i = 0; i < 7; i++) {\n week += '' + this.lang(\"day-names-short\")[i] + \"\";\n }\n return week;\n }\n getMonthDom(month) {\n // Get month DOM element\n return document.getElementById(this.getMonthTableId(month));\n }\n getMonthName(m) {\n // Get month name\n return this.lang(\"month-names\")[m];\n }\n getDatepickerId() {\n // Get datepicker ID\n return \"datepicker-\" + this.generateId();\n }\n getMonthTableId(month) {\n // Get month table ID\n return \"month-\" + month + \"-\" + this.generateId();\n }\n getCloseButtonId() {\n // Get close button ID\n return \"close-\" + this.generateId();\n }\n getClearButtonId() {\n // Get close button ID\n return \"clear-\" + this.generateId();\n }\n getSubmitButtonId() {\n // Get close button ID\n return \"submit-\" + this.generateId();\n }\n getTooltipId() {\n // Get close button ID\n return \"tooltip-\" + this.generateId();\n }\n getNextMonth(month) {\n // Get next month date\n const _m = new Date(month.valueOf());\n return new Date(_m.setMonth(_m.getMonth() + 1, 1));\n }\n getPrevMonth(month) {\n // Get previous month date\n const _m = new Date(month.valueOf());\n return new Date(_m.setMonth(_m.getMonth() - 1, 1));\n }\n getDateString(date) {\n let format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.format;\n // Format date\n this.setFechaI18n();\n return fecha.format(date, format);\n }\n parseDate(date) {\n let format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.format;\n // Parse a date object\n this.setFechaI18n();\n return fecha.parse(date, format);\n }\n init() {\n // DOM container\n this.parent = this.container ? this.container : this.input.parentElement;\n\n // Start date of the selected range\n this.start = false;\n\n // End date of the selected range\n this.end = false;\n\n // Set the minimum of days required by the daterange\n this.minDays = this.minNights > 1 ? this.minNights + 1 : 2;\n\n // Set the maximum of days required by the daterange\n this.maxDays = this.maxNights > 0 ? this.maxNights + 1 : 0;\n\n // Set startDate if we passed that option\n if (this.startDate && typeof this.startDate === \"string\") {\n this.startDate = this.parseDate(this.startDate);\n }\n\n // Set endDate if we passed that option\n if (this.endDate && typeof this.endDate === \"string\") {\n this.endDate = this.parseDate(this.endDate);\n }\n\n // Hide tooltip on touch devices\n if (this.isTouchDevice()) {\n this.hoveringTooltip = false;\n }\n\n // Flag that checks if the datepicker is open\n this.isOpen = false;\n\n // Flag that checks if the second date of the range is set\n this.changed = false;\n\n // Flag that checks if we exit from the datepicker with the ESC key\n this.justEsc = false;\n\n // Flag that checks if we datepicker is on focus\n this.isOnFocus = false;\n\n // Create the DOM elements\n this.createDom();\n\n // Set default time\n let defaultTime = new Date();\n if (this.startDate && this.compareMonth(defaultTime, this.startDate) < 0) {\n defaultTime = new Date(this.startDate.getTime());\n }\n if (this.endDate && this.compareMonth(this.getNextMonth(defaultTime), this.endDate) > 0) {\n defaultTime = new Date(this.getPrevMonth(this.endDate.getTime()));\n }\n\n // Parse disabled dates\n if (this.disabledDates.length > 0) {\n this.parseDisabledDates();\n }\n\n // Parse disabled days\n if (this.disabledDaysOfWeek.length > 0) {\n this.getDisabledDays();\n }\n\n // Show months\n this.showMonth(defaultTime, 1);\n this.showMonth(this.getNextMonth(defaultTime), 2);\n this.setDayIndexes();\n\n // Print default info in top bar\n this.topBarDefaultText();\n\n // Open datepicker in inline mode\n if (this.inline) {\n this.openDatepicker();\n if (this.submitButton) {\n const submitButton = document.getElementById(this.getSubmitButtonId());\n submitButton.disabled = true;\n submitButton.setAttribute(\"aria-disabled\", \"true\");\n }\n }\n if (this.clearButton) {\n if (this.inline || !this.start && !this.end) {\n const clearButton = document.getElementById(this.getClearButtonId());\n clearButton.disabled = true;\n clearButton.setAttribute(\"aria-disabled\", \"true\");\n }\n }\n\n // Attach listeners\n this.addListeners();\n\n // Flag for first disabled date\n this.isFirstDisabledDate = 0;\n\n // Holds last disabled date\n this.lastDisabledDate = false;\n\n // Add aria attributes\n this.setDayAriaAttributes();\n }\n addListeners() {\n // Next month button\n const nextButtons = this.datepicker.getElementsByClassName(\"datepicker__month-button--next\");\n for (let i = 0; i < nextButtons.length; i++) {\n nextButtons[i].addEventListener(\"click\", evt => this.goToNextMonth(evt));\n }\n\n // Previous month button\n const prevButtons = this.datepicker.getElementsByClassName(\"datepicker__month-button--prev\");\n for (let i = 0; i < prevButtons.length; i++) {\n prevButtons[i].addEventListener(\"click\", evt => this.goToPreviousMonth(evt));\n }\n\n // Open the datepicker on the input click\n this.addBoundedListener(this.input, \"click\", evt => this.openDatepicker(evt));\n if (this.showTopbar && !this.inline) {\n // Close the datepicker on the button click\n document.getElementById(this.getCloseButtonId()).addEventListener(\"click\", evt => this.closeDatepicker(evt));\n }\n if (this.showTopbar && this.clearButton) {\n // Clear the datepicker on the button click\n document.getElementById(this.getClearButtonId()).addEventListener(\"click\", evt => this.clearDatepicker(evt));\n }\n\n // Close the datepicker on resize?\n // The problem is that mobile keyboards trigger the resize event closing\n // the datepicker. There are some workarounds (http://stackoverflow.com/q/14902321)\n // but for now I will disable this option. I'm open to new ideas.\n // window.addEventListener('resize', evt => this.closeDatepicker(evt));\n\n // Re-check datepicker, buttons, etc after resize\n window.addEventListener(\"resize\", evt => this.onResizeDatepicker(evt));\n\n // Add a mouseover event listener to the document. This will help us to:\n // 1 - Handle the hover on calendar days\n this.datepicker.addEventListener(\"mouseover\", evt => this.datepickerHover(evt));\n\n // Add a mouseout event listener to the document. This will help us to:\n // 1 - Hide the tooltip on the mouseout event on days\n this.datepicker.addEventListener(\"mouseout\", evt => this.datepickerMouseOut(evt));\n\n // Update the selected values when the input changes manually\n this.addBoundedListener(this.input, \"change\", () => this.checkAndSetDefaultValue());\n\n // Open datepicker on focus\n if (!this.inline) {\n if (!this.justEsc) {\n this.addBoundedListener(this.input, \"focus\", evt => this.openDatepicker(evt));\n }\n this.justEsc = false;\n }\n\n // Listen for keystrokes\n window.addEventListener(\"keydown\", evt => this.doKeyDown(evt));\n\n // Listen for focus\n document.addEventListener(\"focus\", evt => this.checkOnFocus(evt), true);\n }\n generateId() {\n // Generate an unique ID for each datepicker\n // Use input ID if set\n if (this.input.id) {\n return this.input.id;\n // Otherwise get the instance id\n }\n\n return this.id;\n }\n createDom() {\n const domString = this.createDatepickerDomString();\n\n // Insert the datepicker in the document\n this.parent.insertAdjacentHTML(\"beforeend\", domString);\n\n // Store our datepicker in a property\n this.datepicker = document.getElementById(this.getDatepickerId());\n }\n createDatepickerDomString() {\n // Generate our datepicker\n let wrapperClass = this.inline ? \" datepicker--inline\" : \"\";\n if (this.showTopbar) {\n if (this.topbarPosition === \"bottom\") {\n wrapperClass += \" datepicker--topbar-bottom\";\n } else {\n wrapperClass += \" datepicker--topbar-top\";\n }\n }\n if (!this.inline) {\n wrapperClass += \" datepicker--topbar-has-close-button\";\n }\n if (this.clearButton) {\n wrapperClass += \" datepicker--topbar-has-clear-button\";\n }\n if (this.submitButton) {\n wrapperClass += \" datepicker--topbar-has-submit-button\";\n }\n const wrapperStyle = this.inline ? \"\" : ' style=\"display:none\"';\n let html = '
';\n html += '
';\n let topBarHtml = \"\";\n if (this.showTopbar) {\n // Top bar section\n topBarHtml += '
' + '
' + this.lang(\"selected\") + ' ...' + ' ' + this.separator + ' ... ()' + \"
\" + '
';\n let buttonsHtml = \"\";\n if (this.clearButton) {\n buttonsHtml += '\";\n }\n if (!this.inline) {\n buttonsHtml += '\";\n }\n\n // if (this.clearButton || this.submitButton) {\n // topBarHtml += '
';\n // }\n\n if (this.submitButton) {\n buttonsHtml += '';\n }\n if (buttonsHtml) {\n topBarHtml += '
' + buttonsHtml + \"
\";\n }\n topBarHtml += \"
\";\n }\n if (this.showTopbar && this.topbarPosition === \"top\") {\n html += topBarHtml;\n }\n\n // Months section\n html += '
';\n\n // Print single months\n for (let i = 1; i <= 2; i++) {\n html += '' + this.getWeekDayNames(i) + \"
<>
\";\n }\n html += \"
\";\n if (this.showTopbar && this.topbarPosition === \"bottom\") {\n html += topBarHtml;\n }\n\n // Tooltip\n html += '
';\n html += \"
\";\n html += \"
\";\n return html;\n }\n showMonth(date, month) {\n date.setHours(0, 0, 0, 0);\n\n // Show month table and create the necessary HTML code\n const name = this.getMonthName(date.getMonth());\n const monthDom = this.getMonthDom(month);\n const monthName = monthDom.getElementsByClassName(\"datepicker__month-name\")[0];\n const monthBody = monthDom.getElementsByTagName(\"tbody\")[0];\n\n // Month caption\n monthName.textContent = name + \" \" + date.getFullYear();\n\n // Remove child elements before to insert the new month\n this.emptyElement(monthBody);\n\n // Append the month\n monthBody.insertAdjacentHTML(\"beforeend\", this.createMonthDomString(date));\n\n // Check day dates\n this.updateSelectableRange();\n\n // Store current month dates\n this[\"month\" + month] = date;\n }\n createMonthDomString(_date) {\n const days = [];\n let html = \"\";\n let valid;\n _date.setDate(1);\n let dayOfWeek = _date.getDay();\n const currentMonth = _date.getMonth();\n if (dayOfWeek === 0 && this.startOfWeek === \"monday\") {\n // Add one week\n dayOfWeek = 7;\n }\n\n // If the first day is in the middle of the week, push also\n // the first days of the week (the days before our first day).\n // We need a complete week row.\n // Obviously, these days are part of the previous month.\n if (dayOfWeek > 0) {\n for (let i = dayOfWeek; i > 0; i--) {\n const _day = new Date(_date.getTime() - 86400000 * i);\n\n // Check if the day is valid. And pass this property to the days object\n valid = this.isValidDate(_day.getTime());\n if (this.startDate && this.compareDay(_day, this.startDate) < 0 || this.endDate && this.compareDay(_day, this.endDate) > 0) {\n valid = false;\n }\n\n // We pass the type property to know if the day is part of the\n // previous month. We already know that it is true.\n days.push({\n date: _day,\n type: \"lastMonth\",\n day: _day.getDate(),\n time: _day.getTime(),\n valid\n });\n }\n }\n\n // Push 40 days. Each month table needs the days of the month plus\n // the remaining days (of the week row) before the first day of the month\n // and after the last day of the month. (PS. They will be hidden)\n // 40 days are enough to cover all the possibilities.\n for (let i = 0; i < 40; i++) {\n const _day = this.addDays(_date, i);\n\n // Check if the day is valid. And pass this property to the days object\n valid = this.isValidDate(_day.getTime());\n if (this.startDate && this.compareDay(_day, this.startDate) < 0 || this.endDate && this.compareDay(_day, this.endDate) > 0) {\n valid = false;\n }\n\n // We pass the type property to know if the day is part of the\n // current month or part of the next month\n days.push({\n date: _day,\n type: _day.getMonth() === currentMonth ? \"visibleMonth\" : \"nextMonth\",\n day: _day.getDate(),\n time: _day.getTime(),\n valid\n });\n }\n\n // Create the week rows.\n for (let week = 0; week < 6; week++) {\n // Iterate the days object week by week.\n // If the last day is part of the next month, stop the loop.\n if (days[week * 7].type === \"nextMonth\") {\n break;\n }\n html += '';\n\n // Create the days of a week, one by one\n for (let i = 0; i < 7; i++) {\n let _day = this.startOfWeek === \"monday\" ? i + 1 : i;\n _day = days[week * 7 + _day];\n const classes = this.getDayClasses(_day);\n\n // Add a title for those days where the checkin or checkout is disabled\n let title = \"\";\n if (this.hasClass(_day, \"datepicker__month-day--no-checkin\")) {\n title = this.i18n[\"checkin-disabled\"];\n }\n if (this.hasClass(_day, \"datepicker__month-day--no-checkout\")) {\n if (title) {\n title += \". \";\n }\n title += this.i18n[\"checkout-disabled\"];\n }\n\n // Each day has the \"time\" attribute (timestamp) and an appropriate class\n const dayAttributes = {\n daytype: _day.type,\n time: _day.time,\n class: classes.join(\" \"),\n d: i + 1\n };\n\n // Add title attribute if available\n if (title) {\n dayAttributes.title = title;\n }\n\n // Add role\n dayAttributes.role = \"button\";\n\n // Add tabindex to today date\n if (this.getDateString(_day.time) === this.getDateString(new Date())) {\n dayAttributes.tabindex = \"0\";\n }\n let extraText = \"\";\n\n // Optionally print some text in day cells\n if (this.extraDayText) {\n extraText = this.extraDayText(this.getDateString(_day.time), dayAttributes);\n }\n extraText = extraText ? extraText : \"\";\n if (extraText) {\n dayAttributes.class = dayAttributes.class + \" datepicker__month-day--with-extra\";\n }\n\n // Create the day HTML\n html += '\" + _day.day + extraText + \"\";\n }\n html += \"\";\n }\n return html;\n }\n openDatepicker() {\n // Open the datepicker\n if (!this.isOpen) {\n // Add/remove helper classes\n this.removeClass(this.datepicker, \"datepicker--closed\");\n this.addClass(this.datepicker, \"datepicker--open\");\n\n // Set (and check) the range value based on the current input value\n this.checkAndSetDefaultValue();\n\n // Slide down the datepicker\n if (!this.inline) {\n this.slideDown(this.datepicker, this.animationSpeed);\n }\n\n // Set flag\n this.isOpen = true;\n\n // Show selected days in the calendar\n this.showSelectedDays();\n\n // Disable (if needed) the prev/next buttons\n this.disableNextPrevButtons();\n\n // Add a click event listener to the document. This will help us to:\n // 1 - Check if the click it's outside the datepicker\n // 2 - Handle the click on calendar days\n this.addBoundedListener(document, \"click\", evt => this.documentClick(evt));\n\n // Optionally run a function when the datepicker is open\n if (this.onOpenDatepicker) {\n this.onOpenDatepicker();\n }\n }\n }\n closeDatepicker() {\n // Close the datepicker\n if (!this.isOpen || this.inline) {\n return;\n }\n\n // Add/remove helper classes\n this.removeClass(this.datepicker, \"datepicker--open\");\n this.addClass(this.datepicker, \"datepicker--closed\");\n\n // Slide up the datepicker\n this.slideUp(this.datepicker, this.animationSpeed);\n this.isOpen = false;\n\n // Create event on close\n const evt = document.createEvent(\"Event\");\n evt.initEvent(\"afterClose\", true, true);\n this.input.dispatchEvent(evt);\n this.removeAllBoundedListeners(document, \"click\");\n }\n autoclose() {\n // Autoclose the datepicker when the second date is set\n if (this.autoClose && this.changed && this.isOpen && this.start && this.end && !this.inline) {\n this.closeDatepicker();\n }\n }\n documentClick(evt) {\n // Check if the click was outside the datepicker and close it\n if (!this.parent.contains(evt.target) && evt.target !== this.input) {\n if (!this.preventContainerClose) {\n this.closeDatepicker();\n }\n } else if (evt.target.tagName.toLowerCase() === \"td\") {\n // Check if the click was on a calendar day\n this.dayClicked(evt.target);\n }\n }\n datepickerHover(evt) {\n // Check if the hover is on a calendar day\n if (evt.target.tagName && evt.target.tagName.toLowerCase() === \"td\") {\n this.dayHovering(evt.target);\n }\n }\n datepickerMouseOut(evt) {\n // Check if the mouseout is on a calendar day\n if (evt.target.tagName && evt.target.tagName.toLowerCase() === \"td\") {\n // Hide the tooltip\n const tooltipContainer = document.getElementById(this.getTooltipId());\n tooltipContainer.style.display = \"none\";\n }\n }\n onResizeDatepicker() {\n // Reset month views\n this.checkAndSetDefaultValue(true);\n }\n getDayClasses(_day) {\n const isToday = this.getDateString(_day.time) === this.getDateString(new Date());\n const isStartDate = this.getDateString(_day.time) === this.getDateString(this.startDate);\n let isDisabled = false;\n let isNoCheckIn = false;\n let isNoCheckOut = false;\n let isDayOfWeekDisabled = false;\n let isFirstEnabledDate = false;\n\n // Day between disabled dates and the last day\n // before the disabled date\n let isDayBeforeDisabledDate = false;\n\n // Check if the day is one of the days passed in the\n // (optional) disabledDates option. And set valid to\n // false in this case.\n //\n // Also, check if the checkin or checkout is disabled\n if (_day.valid || _day.type === \"visibleMonth\") {\n const dateString = this.getDateString(_day.time, \"YYYY-MM-DD\");\n if (this.disabledDates.length > 0) {\n // Check if this day is between two disabled dates\n // and disable it if there are not enough days\n // available to select a valid range\n const limit = this.getClosestDisabledDates(_day.date);\n\n // Consider also the day before startDate\n // as disabled date\n if (limit[0] === false) {\n limit[0] = this.substractDays(this.startDate, 1);\n }\n if (limit[0] && limit[1]) {\n if (this.compareDay(_day.date, limit[0]) && this.countDays(limit[0], limit[1]) - 2 > 0) {\n const daysBeforeNextDisabledDate = this.countDays(limit[1], _day.date) - 1;\n const daysAfterPrevDisabledDate = this.countDays(_day.date, limit[0]) - 1;\n if (this.selectForward && daysBeforeNextDisabledDate < this.minDays) {\n _day.valid = false;\n } else if (!this.selectForward && daysBeforeNextDisabledDate < this.minDays && daysAfterPrevDisabledDate < this.minDays) {\n _day.valid = false;\n }\n if (!_day.valid && this.enableCheckout && daysBeforeNextDisabledDate === 2) {\n isDayBeforeDisabledDate = true;\n }\n }\n }\n if (this.disabledDates.indexOf(dateString) > -1) {\n _day.valid = false;\n isDisabled = true;\n this.isFirstDisabledDate++;\n\n // Store last disabled date for later\n this.lastDisabledDate = _day.date;\n } else {\n this.isFirstDisabledDate = 0;\n }\n\n // First day after a disabled day\n if (_day.valid && this.lastDisabledDate && this.compareDay(_day.date, this.lastDisabledDate) > 0 && this.countDays(_day.date, this.lastDisabledDate) === 2) {\n isFirstEnabledDate = true;\n }\n }\n if (this.disabledDaysOfWeek.length > 0) {\n if (this.disabledDaysOfWeek.indexOf(fecha.format(_day.time, \"dddd\")) > -1) {\n _day.valid = false;\n isDayOfWeekDisabled = true;\n }\n }\n if (this.noCheckInDates.length > 0) {\n if (this.noCheckInDates.indexOf(dateString) > -1) {\n isNoCheckIn = true;\n isFirstEnabledDate = false;\n }\n }\n if (this.noCheckOutDates.length > 0) {\n if (this.noCheckOutDates.indexOf(dateString) > -1) {\n isNoCheckOut = true;\n }\n }\n if (this.noCheckInDaysOfWeek.length > 0) {\n if (this.noCheckInDaysOfWeek.indexOf(fecha.format(_day.time, \"dddd\")) > -1) {\n isNoCheckIn = true;\n isFirstEnabledDate = false;\n }\n }\n if (this.noCheckOutDaysOfWeek.length > 0) {\n if (this.noCheckOutDaysOfWeek.indexOf(fecha.format(_day.time, \"dddd\")) > -1) {\n isNoCheckOut = true;\n }\n }\n }\n const classes = [\"datepicker__month-day\", \"datepicker__month-day--\" + _day.type, \"datepicker__month-day--\" + (_day.valid ? \"valid\" : \"invalid\"), isToday ? \"datepicker__month-day--today\" : \"\", isDisabled ? \"datepicker__month-day--disabled\" : \"\", isDisabled && this.enableCheckout && this.isFirstDisabledDate === 1 ? \"datepicker__month-day--checkout-enabled\" : \"\", isDayBeforeDisabledDate ? \"datepicker__month-day--before-disabled-date\" : \"\", isStartDate || isFirstEnabledDate ? \"datepicker__month-day--checkin-only\" : \"\", isNoCheckIn ? \"datepicker__month-day--no-checkin\" : \"\", isNoCheckOut ? \"datepicker__month-day--no-checkout\" : \"\", isDayOfWeekDisabled ? \"datepicker__month-day--day-of-week-disabled\" : \"\"];\n return classes;\n }\n checkAndSetDayClasses() {\n // Get every td in the months table: our days\n const days = this.datepicker.getElementsByTagName(\"td\");\n\n // Iterate each day and re-check HTML classes\n for (let i = 0; i < days.length; i++) {\n const time = parseInt(days[i].getAttribute(\"time\"), 10);\n const day = new Date(time);\n const daytype = days[i].getAttribute(\"daytype\");\n let valid;\n\n // Check if the day is valid. And pass this property to the days object\n valid = this.isValidDate(day.getTime());\n if (this.startDate && this.compareDay(day, this.startDate) < 0 || this.endDate && this.compareDay(day, this.endDate) > 0) {\n valid = false;\n }\n const _day = {\n date: day,\n type: daytype,\n day: day.getDate(),\n time,\n valid\n };\n const classes = this.getDayClasses(_day);\n days[i].className = classes.join(\" \");\n }\n }\n checkAndSetDefaultValue() {\n let onresize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n // Set range based on the input value\n\n // Get dates from input value\n const value = this.getValue();\n const dates = value ? value.split(this.separator) : \"\";\n\n // If we have our two dates, set the date range\n if (dates && dates.length >= 2) {\n // Format the values correctly\n const _format = this.format;\n\n // Set the date range\n this.changed = false;\n this.setDateRange(this.parseDate(dates[0], _format), this.parseDate(dates[1], _format), onresize);\n this.changed = true;\n } else if (this.showTopbar) {\n const selectedInfo = this.datepicker.getElementsByClassName(\"datepicker__info--selected\")[0];\n selectedInfo.style.display = \"none\";\n if (onresize) {\n // Set default time\n let defaultTime = new Date();\n if (this.startDate && this.compareMonth(defaultTime, this.startDate) < 0) {\n defaultTime = new Date(this.startDate.getTime());\n }\n if (this.endDate && this.compareMonth(this.getNextMonth(defaultTime), this.endDate) > 0) {\n defaultTime = new Date(this.getPrevMonth(this.endDate.getTime()));\n }\n if (this.start && !this.end) {\n this.clearSelection();\n }\n\n // Show months\n this.showMonth(defaultTime, 1);\n this.showMonth(this.getNextMonth(defaultTime), 2);\n this.setDayIndexes();\n }\n }\n }\n setDateRange(date1, date2) {\n let onresize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n // Swap dates if needed\n if (date1.getTime() > date2.getTime()) {\n let tmp = date2;\n date2 = date1;\n date1 = tmp;\n tmp = null;\n }\n let valid = true;\n\n // Check the validity of the dates\n if (this.startDate && this.compareDay(date1, this.startDate) < 0 || this.endDate && this.compareDay(date2, this.endDate) > 0) {\n valid = false;\n }\n\n // If not valid, reset the datepicker\n if (!valid) {\n // Show default (initial) months\n this.showMonth(this.startDate, 1);\n this.showMonth(this.getNextMonth(this.startDate), 2);\n this.setDayIndexes();\n\n // Show selected days in the calendar\n this.showSelectedDays();\n\n // Disable (if needed) the prev/next buttons\n this.disableNextPrevButtons();\n return;\n }\n\n // Fix DST\n date1.setTime(date1.getTime() + 12 * 60 * 60 * 1000);\n date2.setTime(date2.getTime() + 12 * 60 * 60 * 1000);\n\n // Calculate the next month value\n this.start = date1.getTime();\n this.end = date2.getTime();\n if (this.compareDay(date1, date2) > 0 && this.compareMonth(date1, date2) === 0) {\n date2 = this.getNextMonth(date1);\n }\n if (this.compareMonth(date1, date2) === 0) {\n date2 = this.getNextMonth(date1);\n }\n\n // Show the months\n this.showMonth(date1, 1);\n this.showMonth(date2, 2);\n this.setDayIndexes();\n\n // Show selected days in the calendar\n this.showSelectedDays();\n\n // Disable (if needed) the prev/next buttons\n this.disableNextPrevButtons();\n\n // Check the selection\n this.checkSelection();\n\n // Show selected dates in top bar\n this.showSelectedInfo();\n\n // Close the datepicker\n if (!onresize) {\n this.autoclose();\n }\n\n // Add aria attributes\n this.setDayAriaAttributes();\n }\n showSelectedDays() {\n // Show selected days in the calendar\n\n // Return early if we don't have the start and end dates\n if (!this.start && !this.end) {\n return;\n }\n\n // Get every td in the months table: our days\n const days = this.datepicker.getElementsByTagName(\"td\");\n\n // Iterate each day and assign an appropriate HTML class\n // if they are selected in the date range\n for (let i = 0; i < days.length; i++) {\n const time = parseInt(days[i].getAttribute(\"time\"), 10);\n\n // Add selected class\n if (this.start && this.end && this.end >= time && this.start <= time || this.start && !this.end && this.getDateString(this.start, \"YYYY-MM-DD\") === this.getDateString(time, \"YYYY-MM-DD\")) {\n this.addClass(days[i], \"datepicker__month-day--selected\");\n } else {\n this.removeClass(days[i], \"datepicker__month-day--selected\");\n }\n\n // Add class to the first day of the range\n if (this.start && this.getDateString(this.start, \"YYYY-MM-DD\") === this.getDateString(time, \"YYYY-MM-DD\")) {\n this.addClass(days[i], \"datepicker__month-day--first-day-selected\");\n } else {\n this.removeClass(days[i], \"datepicker__month-day--first-day-selected\");\n }\n\n // Add class to the last day of the range\n if (this.end && this.getDateString(this.end, \"YYYY-MM-DD\") === this.getDateString(time, \"YYYY-MM-DD\")) {\n this.addClass(days[i], \"datepicker__month-day--last-day-selected\");\n } else {\n this.removeClass(days[i], \"datepicker__month-day--last-day-selected\");\n }\n }\n }\n showSelectedInfo() {\n // Return early if the top bar is disabled\n if (!this.showTopbar) {\n // If both dates are set, set the value of our input\n if (this.start && this.end) {\n const dateRangeValue = this.getDateString(new Date(this.start)) + this.separator + this.getDateString(new Date(this.end));\n\n // Set input value\n this.setValue(dateRangeValue, this.getDateString(new Date(this.start)), this.getDateString(new Date(this.end)));\n this.changed = true;\n }\n return;\n }\n\n // Show selected range in top bar\n const selectedInfo = this.datepicker.getElementsByClassName(\"datepicker__info--selected\")[0];\n const elStart = selectedInfo.getElementsByClassName(\"datepicker__info-text--start-day\")[0];\n const elEnd = selectedInfo.getElementsByClassName(\"datepicker__info-text--end-day\")[0];\n const elSelected = selectedInfo.getElementsByClassName(\"datepicker__info-text--selected-days\")[0];\n const closeButton = document.getElementById(this.getCloseButtonId());\n const clearButton = document.getElementById(this.getClearButtonId());\n const submitButton = document.getElementById(this.getSubmitButtonId());\n\n // Set default text and hide the count element\n elStart.textContent = \"...\";\n elEnd.textContent = \"...\";\n elSelected.style.display = \"none\";\n\n // Show first date\n if (this.start) {\n selectedInfo.style.display = \"\";\n elStart.textContent = this.getDateString(new Date(parseInt(this.start, 10)), this.infoFormat);\n if (this.clearButton) {\n clearButton.disabled = false;\n clearButton.setAttribute(\"aria-disabled\", \"false\");\n }\n }\n\n // Show second date\n if (this.end) {\n elEnd.textContent = this.getDateString(new Date(parseInt(this.end, 10)), this.infoFormat);\n }\n\n // If both dates are set, show the count and set the value of our input\n if (this.start && this.end) {\n const count = this.countDays(this.end, this.start) - 1;\n const countText = count === 1 ? count + \" \" + this.lang(\"night\") : count + \" \" + this.lang(\"nights\");\n const dateRangeValue = this.getDateString(new Date(this.start)) + this.separator + this.getDateString(new Date(this.end));\n\n // Show count\n elSelected.style.display = \"\";\n elSelected.firstElementChild.textContent = countText;\n if (!this.inline) {\n closeButton.disabled = false;\n closeButton.setAttribute(\"aria-disabled\", \"false\");\n } else if (this.submitButton) {\n submitButton.disabled = false;\n submitButton.setAttribute(\"aria-disabled\", \"false\");\n }\n\n // Set input value\n this.setValue(dateRangeValue, this.getDateString(new Date(this.start)), this.getDateString(new Date(this.end)));\n this.changed = true;\n } else if (!this.inline) {\n // Disable the close button until a valid date range\n closeButton.disabled = true;\n closeButton.setAttribute(\"aria-disabled\", \"true\");\n } else {\n if (this.submitButton) {\n // Disable the submit button until a valid date range\n submitButton.disabled = true;\n submitButton.setAttribute(\"aria-disabled\", \"true\");\n }\n }\n if (this.clearButton && !this.start && !this.end) {\n // Disable the clear button until one valid date is selected\n clearButton.disabled = true;\n clearButton.setAttribute(\"aria-disabled\", \"true\");\n }\n }\n dayClicked(day) {\n if (this.hasClass(day, \"datepicker__month-day--invalid\")) {\n return;\n }\n const isSelectStart = this.start && this.end || !this.start && !this.end;\n const time = parseInt(day.getAttribute(\"time\"), 10);\n\n // Return early for those days where the checkin or checkout is disabled\n if (isSelectStart) {\n if (this.hasClass(day, \"datepicker__month-day--no-checkin\")) {\n return;\n }\n } else if (this.start) {\n if (this.start > time && this.hasClass(day, \"datepicker__month-day--no-checkin\")) {\n return;\n }\n const startDayEl = this.datepicker.querySelectorAll('td[time=\"' + this.start + '\"]')[0];\n if (startDayEl) {\n if (this.hasClass(startDayEl, \"datepicker__month-day--no-checkout\") && this.start > time) {\n return;\n }\n }\n if (this.hasClass(day, \"datepicker__month-day--no-checkout\") && time > this.start) {\n return;\n }\n }\n this.addClass(day, \"datepicker__month-day--selected\");\n if (isSelectStart) {\n this.start = time;\n this.end = false;\n } else if (this.start) {\n this.end = time;\n }\n\n // Swap dates if they are inverted\n if (this.start && this.end && this.start > this.end) {\n const tmp = this.end;\n this.end = this.start;\n this.start = tmp;\n }\n this.start = parseInt(this.start, 10);\n this.end = parseInt(this.end, 10);\n\n // Remove hovering class from every day and hide tooltip\n this.clearHovering();\n\n // Show hover\n if (this.start && !this.end) {\n // Add hovering class\n this.dayHovering(day);\n }\n\n // Check day dates\n this.updateSelectableRange();\n\n // Check the selection\n this.checkSelection();\n\n // Show selected dates in top bar\n this.showSelectedInfo();\n\n // Check dates again after selection\n if (this.start && this.end) {\n this.checkAndSetDayClasses();\n }\n\n // Show selected days in the calendar\n this.showSelectedDays();\n\n // Close the datepicker\n this.autoclose();\n\n // Optionally run a function when a day is clicked\n if (this.onDayClick) {\n this.onDayClick();\n }\n\n // Optionally run a function when a range is selected\n if (this.end && this.onSelectRange) {\n this.onSelectRange();\n }\n\n // Add aria attributes\n this.setDayAriaAttributes();\n }\n isValidDate(time) {\n // Check if the date is valid\n time = parseInt(time, 10);\n if (this.startDate && this.compareDay(time, this.startDate) < 0 || this.endDate && this.compareDay(time, this.endDate) > 0) {\n return false;\n }\n\n // Update valid dates during the selection\n if (this.start && !this.end) {\n // Check maximum/minimum days\n if (this.maxDays > 0 && this.countDays(time, this.start) > this.maxDays || this.minDays > 0 && this.countDays(time, this.start) > 1 && this.countDays(time, this.start) < this.minDays) {\n return false;\n }\n\n // Check if date is before first date of range\n if (this.selectForward && time < this.start) {\n return false;\n }\n\n // Check the disabled dates\n if (this.disabledDates.length > 0) {\n const limit = this.getClosestDisabledDates(new Date(parseInt(this.start, 10)));\n if (limit[0] && this.compareDay(time, limit[0]) <= 0) {\n return false;\n }\n if (limit[1] && this.compareDay(time, limit[1]) >= 0) {\n return false;\n }\n }\n\n // Check disabled days of week\n if (this.disabledDaysOfWeek.length > 0) {\n const limit = this.getClosestDisabledDays(new Date(parseInt(this.start, 10)));\n if (limit[0] && this.compareDay(time, limit[0]) <= 0) {\n return false;\n }\n if (limit[1] && this.compareDay(time, limit[1]) >= 0) {\n return false;\n }\n }\n }\n return true;\n }\n checkSelection() {\n const numberOfDays = this.countDays(this.end, this.start);\n const bar = this.showTopbar ? this.datepicker.getElementsByClassName(\"datepicker__info--feedback\")[0] : false;\n if (this.maxDays && numberOfDays > this.maxDays) {\n this.start = false;\n this.end = false;\n\n // Remove selected class from each day\n const days = this.datepicker.getElementsByTagName(\"td\");\n for (let i = 0; i < days.length; i++) {\n this.removeClass(days[i], \"datepicker__month-day--selected\");\n this.removeClass(days[i], \"datepicker__month-day--first-day-selected\");\n this.removeClass(days[i], \"datepicker__month-day--last-day-selected\");\n }\n if (this.showTopbar) {\n // Show error in top bar\n const errorValue = this.maxDays - 1;\n this.topBarErrorText(bar, \"error-more\", errorValue);\n }\n } else if (this.minDays && numberOfDays < this.minDays) {\n this.start = false;\n this.end = false;\n\n // Remove selected class from each day\n const days = this.datepicker.getElementsByTagName(\"td\");\n for (let i = 0; i < days.length; i++) {\n this.removeClass(days[i], \"datepicker__month-day--selected\");\n this.removeClass(days[i], \"datepicker__month-day--first-day-selected\");\n this.removeClass(days[i], \"datepicker__month-day--last-day-selected\");\n }\n if (this.showTopbar) {\n // Show error in top bar\n const errorValue = this.minDays - 1;\n this.topBarErrorText(bar, \"error-less\", errorValue);\n }\n } else if (this.start || this.end) {\n if (this.showTopbar) {\n // Remove error and help classes from top bar\n this.removeClass(bar, \"datepicker__info--error\");\n this.removeClass(bar, \"datepicker__info--help\");\n }\n } else if (this.showTopbar) {\n // Show help message\n this.removeClass(bar, \"datepicker__info--error\");\n this.addClass(bar, \"datepicker__info--help\");\n }\n }\n addDays(date, days) {\n // Add xx days to date\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return result;\n }\n substractDays(date, days) {\n // Substract xx days to date\n const result = new Date(date);\n result.setDate(result.getDate() - days);\n return result;\n }\n countDays(start, end) {\n // Return days between two dates\n return Math.abs(this.daysFrom1970(start) - this.daysFrom1970(end)) + 1;\n }\n compareDay(day1, day2) {\n // Compare two days: check if day1 is before/after/same day of day2\n const p = parseInt(this.getDateString(day1, \"YYYYMMDD\"), 10) - parseInt(this.getDateString(day2, \"YYYYMMDD\"), 10);\n if (p > 0) {\n return 1;\n }\n if (p === 0) {\n return 0;\n }\n return -1;\n }\n compareMonth(month1, month2) {\n // Compare two months: check if month1 is before/after/same month of month2\n const p = parseInt(this.getDateString(month1, \"YYYYMM\"), 10) - parseInt(this.getDateString(month2, \"YYYYMM\"), 10);\n if (p > 0) {\n return 1;\n }\n if (p === 0) {\n return 0;\n }\n return -1;\n }\n daysFrom1970(t) {\n // Get days from 1970\n return Math.round(this.toLocalTimestamp(t) / 86400000);\n }\n toLocalTimestamp(t) {\n // Convert timestamp to local timestamp\n if (typeof t === \"object\" && t.getTime) {\n t = t.getTime();\n }\n if (typeof t === \"string\" && !t.match(/\\d{13}/)) {\n t = this.parseDate(t).getTime();\n }\n t = parseInt(t, 10) - new Date().getTimezoneOffset() * 60 * 1000;\n return t;\n }\n printAttributes(obj) {\n // Print object attributes in a DOM element\n const _obj = obj;\n let attribute = \"\";\n for (const attr in obj) {\n if (Object.prototype.hasOwnProperty.call(_obj, attr)) {\n attribute += attr + '=\"' + _obj[attr] + '\" ';\n }\n }\n return attribute;\n }\n goToNextMonth(e) {\n let forceBoth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // Go to the next month\n const thisMonth = Number.isInteger(e) ? e : e.target.getAttribute(\"month\");\n const isMonth2 = thisMonth > 1;\n let nextMonth = isMonth2 ? this.month2 : this.month1;\n nextMonth = this.getNextMonth(nextMonth);\n\n // Dont't go to the next month if:\n // 1. The second month is visible and it is the next month after\n // our current month\n // 2. The month is after the (optional) endDate. There's no need\n // to show other months in this case.\n if (!this.isSingleMonth() && !isMonth2 && this.compareMonth(nextMonth, this.month2) >= 0 || this.isMonthOutOfRange(nextMonth)) {\n return false;\n }\n\n // We can now show the month and proceed\n if ((this.moveBothMonths || forceBoth) && isMonth2) {\n this.showMonth(this.month2, 1);\n }\n this.showMonth(nextMonth, thisMonth);\n this.setDayIndexes();\n this.showSelectedDays();\n this.disableNextPrevButtons();\n return true;\n }\n goToPreviousMonth(e) {\n let forceBoth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // Go to the previous month\n const thisMonth = Number.isInteger(e) ? e : e.target.getAttribute(\"month\");\n const isMonth2 = thisMonth > 1;\n let prevMonth = isMonth2 ? this.month2 : this.month1;\n prevMonth = this.getPrevMonth(prevMonth);\n\n // Dont't go to the previous month if:\n // 1. The click it's in the second month and the month we need is already\n // shown in the first month\n // 2. The month is before the (optional) startDate. There's no need\n // to show other months in this case.\n if (isMonth2 && this.compareMonth(prevMonth, this.month1) <= 0 || this.isMonthOutOfRange(prevMonth)) {\n return false;\n }\n\n // We can now show the month and proceed\n if ((this.moveBothMonths || forceBoth) && !isMonth2) {\n this.showMonth(this.month1, 2);\n }\n this.showMonth(prevMonth, thisMonth);\n this.setDayIndexes();\n this.showSelectedDays();\n this.disableNextPrevButtons();\n return true;\n }\n isSingleMonth() {\n // Check if the second month is visible\n return !this.isVisible(this.getMonthDom(2));\n }\n isMonthOutOfRange(month) {\n const _m = new Date(month.valueOf());\n\n // Return true for months before the startDate and months after the endDate\n if (this.startDate && new Date(_m.getFullYear(), _m.getMonth() + 1, 0, 23, 59, 59) < this.startDate || this.endDate && new Date(_m.getFullYear(), _m.getMonth(), 1) > this.endDate) {\n return true;\n }\n return false;\n }\n\n // Disable next/prev buttons according to the value of the prev/next\n // month. We don't want two same months at the same time!\n disableNextPrevButtons() {\n if (this.isSingleMonth()) {\n return;\n }\n const month1 = parseInt(this.getDateString(this.month1, \"YYYYMM\"), 10);\n const month2 = parseInt(this.getDateString(this.month2, \"YYYYMM\"), 10);\n const d = Math.abs(month1 - month2);\n const nextButtons = this.datepicker.getElementsByClassName(\"datepicker__month-button--next\");\n const prevButtons = this.datepicker.getElementsByClassName(\"datepicker__month-button--prev\");\n if (d > 1 && d !== 89) {\n this.removeClass(nextButtons[0], \"datepicker__month-button--disabled\");\n nextButtons[0].setAttribute(\"aria-disabled\", \"false\");\n this.removeClass(prevButtons[1], \"datepicker__month-button--disabled\");\n prevButtons[1].setAttribute(\"aria-disabled\", \"false\");\n } else {\n this.addClass(nextButtons[0], \"datepicker__month-button--disabled\");\n nextButtons[0].setAttribute(\"aria-disabled\", \"true\");\n this.addClass(prevButtons[1], \"datepicker__month-button--disabled\");\n prevButtons[1].setAttribute(\"aria-disabled\", \"true\");\n }\n if (this.isMonthOutOfRange(this.getPrevMonth(this.month1))) {\n this.addClass(prevButtons[0], \"datepicker__month-button--disabled\");\n prevButtons[0].setAttribute(\"aria-disabled\", \"true\");\n } else {\n this.removeClass(prevButtons[0], \"datepicker__month-button--disabled\");\n prevButtons[0].setAttribute(\"aria-disabled\", \"false\");\n }\n if (this.isMonthOutOfRange(this.getNextMonth(this.month2))) {\n this.addClass(nextButtons[1], \"datepicker__month-button--disabled\");\n nextButtons[1].setAttribute(\"aria-disabled\", \"true\");\n } else {\n this.removeClass(nextButtons[1], \"datepicker__month-button--disabled\");\n nextButtons[1].setAttribute(\"aria-disabled\", \"false\");\n }\n }\n topBarDefaultText() {\n // Return early if the top bar is disabled\n if (!this.showTopbar) {\n return;\n }\n\n // Show help message on top bar\n let topBarText = \"\";\n if (this.minDays && this.maxDays) {\n if (this.minDays === this.maxDays) {\n topBarText = this.lang(\"info-range-equal\");\n } else {\n topBarText = this.lang(\"info-range\");\n }\n } else if (this.minDays && this.minDays > 2) {\n topBarText = this.lang(\"info-more-plural\");\n } else if (this.minDays) {\n topBarText = this.lang(\"info-more\");\n } else {\n topBarText = this.lang(\"info-default\");\n }\n const bar = this.datepicker.getElementsByClassName(\"datepicker__info--feedback\")[0];\n topBarText = topBarText.replace(/%d/, this.minDays - 1).replace(/%d/, this.maxDays - 1);\n this.addClass(bar, \"datepicker__info--help\");\n this.removeClass(bar, \"datepicker__info--error\");\n bar.textContent = topBarText;\n }\n topBarErrorText(bar, errorText, errorValue) {\n if (!this.showTopbar) {\n return;\n }\n\n // Show error message on top bar\n this.addClass(bar, \"datepicker__info--error\");\n this.removeClass(bar, \"datepicker__info--help\");\n if (errorValue > 1) {\n errorText = this.lang(errorText + \"-plural\");\n errorText = errorText.replace(\"%d\", errorValue);\n bar.textContent = errorText;\n } else {\n errorText = this.lang(errorText);\n }\n\n // And hide the selected info\n const selectedInfo = this.datepicker.getElementsByClassName(\"datepicker__info--selected\")[0];\n selectedInfo.style.display = \"none\";\n }\n updateSelectableRange() {\n const days = this.datepicker.getElementsByTagName(\"td\");\n const isSelecting = this.start && !this.end;\n\n // Add needed classes\n for (let i = 0; i < days.length; i++) {\n if (this.hasClass(days[i], \"datepicker__month-day--invalid\") && this.hasClass(days[i], \"datepicker__month-day--tmp\")) {\n this.removeClass(days[i], \"datepicker__month-day--tmp\");\n if (this.hasClass(days[i], \"datepicker__month-day--tmpinvalid\")) {\n this.removeClass(days[i], \"datepicker__month-day--tmpinvalid\");\n } else {\n this.removeClass(days[i], \"datepicker__month-day--invalid\");\n this.addClass(days[i], \"datepicker__month-day--valid\");\n }\n }\n\n // Update day classes during the date range selection\n if (isSelecting) {\n if (this.hasClass(days[i], \"datepicker__month-day--visibleMonth\") && (this.hasClass(days[i], \"datepicker__month-day--valid\") || this.hasClass(days[i], \"datepicker__month-day--disabled\") || this.hasClass(days[i], \"datepicker__month-day--before-disabled-date\"))) {\n const time = parseInt(days[i].getAttribute(\"time\"), 10);\n if (this.isValidDate(time)) {\n this.addClass(days[i], \"datepicker__month-day--valid\");\n this.addClass(days[i], \"datepicker__month-day--tmp\");\n this.removeClass(days[i], \"datepicker__month-day--invalid\");\n this.removeClass(days[i], \"datepicker__month-day--disabled\");\n } else {\n if (this.hasClass(days[i], \"datepicker__month-day--invalid\")) {\n this.addClass(days[i], \"datepicker__month-day--tmpinvalid\");\n }\n this.addClass(days[i], \"datepicker__month-day--invalid\");\n this.addClass(days[i], \"datepicker__month-day--tmp\");\n this.removeClass(days[i], \"datepicker__month-day--valid\");\n }\n }\n // Set aria attributes\n this.setDayAriaAttributes();\n } else if (this.hasClass(days[i], \"datepicker__month-day--checkout-enabled\") || this.hasClass(days[i], \"datepicker__month-day--before-disabled-date\")) {\n // At the end of the selection, restore the disabled/invalid class for\n // days where the checkout is enabled. We need to check this when the\n // autoclose option is false. The same for the day just before the\n // disabled date\n this.addClass(days[i], \"datepicker__month-day--invalid\");\n this.removeClass(days[i], \"datepicker__month-day--valid\");\n if (!this.hasClass(days[i], \"datepicker__month-day--before-disabled-date\")) {\n this.addClass(days[i], \"datepicker__month-day--disabled\");\n }\n }\n }\n return true;\n }\n dayHovering(day) {\n const hoverTime = parseInt(day.getAttribute(\"time\"), 10);\n let tooltip = \"\";\n if (!this.hasClass(day, \"datepicker__month-day--invalid\")) {\n // Get every td in the months table: our days\n const days = this.datepicker.getElementsByTagName(\"td\");\n\n // Iterate each day and add the hovering class\n for (let i = 0; i < days.length; i++) {\n const time = parseInt(days[i].getAttribute(\"time\"), 10);\n if (time === hoverTime) {\n this.addClass(days[i], \"datepicker__month-day--hovering\");\n } else {\n this.removeClass(days[i], \"datepicker__month-day--hovering\");\n }\n if (this.start && !this.end && (this.start < time && hoverTime >= time || this.start > time && hoverTime <= time)) {\n this.addClass(days[i], \"datepicker__month-day--hovering\");\n } else {\n this.removeClass(days[i], \"datepicker__month-day--hovering\");\n }\n }\n\n // Generate date range tooltip\n if (this.start && !this.end) {\n const nights = this.countDays(hoverTime, this.start) - 1;\n if (this.hoveringTooltip) {\n if (typeof this.hoveringTooltip === \"function\") {\n tooltip = this.hoveringTooltip(nights, this.start, hoverTime);\n } else if (this.hoveringTooltip === true && nights > 0) {\n const label = nights === 1 ? this.lang(\"night\") : this.lang(\"nights\");\n tooltip = nights + \" \" + label;\n }\n }\n }\n }\n\n // Show tooltip on hovering and set its position\n if (tooltip) {\n const dayBounding = day.getBoundingClientRect();\n const datepickerBounding = this.datepicker.getBoundingClientRect();\n let _left = dayBounding.left - datepickerBounding.left;\n let _top = dayBounding.top - datepickerBounding.top;\n _left += dayBounding.width / 2;\n const tooltipContainer = document.getElementById(this.getTooltipId());\n tooltipContainer.style.display = \"\";\n tooltipContainer.textContent = tooltip;\n const w = tooltipContainer.getBoundingClientRect().width;\n const h = tooltipContainer.getBoundingClientRect().height;\n _left -= w / 2;\n _top -= h;\n setTimeout(() => {\n tooltipContainer.style.left = _left + \"px\";\n tooltipContainer.style.top = _top + \"px\";\n }, 10);\n } else {\n const tooltipContainer = document.getElementById(this.getTooltipId());\n tooltipContainer.style.display = \"none\";\n }\n }\n clearHovering() {\n // Remove hovering class from every day\n const days = this.datepicker.getElementsByTagName(\"td\");\n for (let i = 0; i < days.length; i++) {\n this.removeClass(days[i], \"datepicker__month-day--hovering\");\n }\n\n // Hide the tooltip\n const tooltipContainer = document.getElementById(this.getTooltipId());\n tooltipContainer.style.display = \"none\";\n }\n clearSelection() {\n // Reset start and end dates\n this.start = false;\n this.end = false;\n\n // Remove selected classes\n const days = this.datepicker.getElementsByTagName(\"td\");\n for (let i = 0; i < days.length; i++) {\n this.removeClass(days[i], \"datepicker__month-day--selected\");\n this.removeClass(days[i], \"datepicker__month-day--first-day-selected\");\n this.removeClass(days[i], \"datepicker__month-day--last-day-selected\");\n this.removeClass(days[i], \"datepicker__month-day--hovering\");\n }\n\n // Reset input\n this.setValue(\"\");\n\n // Check the selection\n this.checkSelection();\n\n // Show selected dates in top bar\n this.showSelectedInfo();\n\n // Show selected days in the calendar\n this.showSelectedDays();\n }\n clearDatepicker() {\n // Reset start and end dates\n this.start = false;\n this.end = false;\n\n // Remove selected classes\n const days = this.datepicker.getElementsByTagName(\"td\");\n for (let i = 0; i < days.length; i++) {\n this.removeClass(days[i], \"datepicker__month-day--selected\");\n this.removeClass(days[i], \"datepicker__month-day--first-day-selected\");\n this.removeClass(days[i], \"datepicker__month-day--last-day-selected\");\n this.removeClass(days[i], \"datepicker__month-day--hovering\");\n }\n\n // Reset input\n this.setValue(\"\");\n\n // Check the selection\n this.checkSelection();\n\n // Show selected dates in top bar\n this.showSelectedInfo();\n\n // Hide the selected info\n const selectedInfo = this.datepicker.getElementsByClassName(\"datepicker__info--selected\")[0];\n selectedInfo.style.display = \"none\";\n\n // Show selected days in the calendar\n this.showSelectedDays();\n\n // Check day dates\n this.updateSelectableRange();\n }\n parseDisabledDates() {\n // Sort disabled dates and store it in property\n const _tmp = [];\n this.setFechaI18n();\n for (let i = 0; i < this.disabledDates.length; i++) {\n _tmp[i] = fecha.parse(this.disabledDates[i], \"YYYY-MM-DD\");\n }\n _tmp.sort((a, b) => {\n return a - b;\n });\n this.disabledDatesTime = _tmp;\n }\n getClosestDisabledDates(x) {\n // This method implements part of the work done by the user Zeta\n // http://stackoverflow.com/a/11795472\n\n // Return an array with two elements:\n // - The closest date on the left\n // - The closest date on the right\n let dates = [false, false];\n\n // If the day is before the first disabled date return early\n if (x < this.disabledDatesTime[0]) {\n // Add one day if we want include the checkout\n if (this.enableCheckout) {\n dates = [false, this.addDays(this.disabledDatesTime[0], 1)];\n // Otherwise use the first date of the array\n } else {\n dates = [false, this.disabledDatesTime[0]];\n }\n\n // If the day is after the last disabled date return early\n } else if (x > this.disabledDatesTime[this.disabledDatesTime.length - 1]) {\n dates = [this.disabledDatesTime[this.disabledDatesTime.length - 1], false];\n // Otherwise calculate the closest dates\n } else {\n let bestPrevDate = this.disabledDatesTime.length;\n let bestNextDate = this.disabledDatesTime.length;\n const maxDateValue = Math.abs(new Date(0, 0, 0).valueOf());\n let bestPrevDiff = maxDateValue;\n let bestNextDiff = -maxDateValue;\n let currDiff = 0;\n let i;\n for (i = 0; i < this.disabledDatesTime.length; ++i) {\n currDiff = x - this.disabledDatesTime[i];\n if (currDiff < 0 && currDiff > bestNextDiff) {\n bestNextDate = i;\n bestNextDiff = currDiff;\n }\n if (currDiff > 0 && currDiff < bestPrevDiff) {\n bestPrevDate = i;\n bestPrevDiff = currDiff;\n }\n }\n if (this.disabledDatesTime[bestPrevDate]) {\n dates[0] = this.disabledDatesTime[bestPrevDate];\n }\n if (typeof this.disabledDatesTime[bestPrevDate] === \"undefined\") {\n dates[1] = false;\n // Add one day if we want include the checkout\n } else if (this.enableCheckout) {\n dates[1] = this.addDays(this.disabledDatesTime[bestNextDate], 1);\n // Otherwise use the date of the array\n } else {\n dates[1] = this.disabledDatesTime[bestNextDate];\n }\n }\n return dates;\n }\n getDisabledDays() {\n const allDays = [];\n const disabledDays = [];\n const day = new Date();\n for (let i = 0; i < 7; i++) {\n const _date = this.addDays(day, i);\n allDays[fecha.format(_date, \"d\")] = fecha.format(_date, \"dddd\");\n }\n for (let i = 0; i < this.disabledDaysOfWeek.length; i++) {\n disabledDays.push(allDays.indexOf(this.disabledDaysOfWeek[i]));\n }\n disabledDays.sort();\n this.disabledDaysIndexes = disabledDays;\n }\n getClosestDisabledDays(day) {\n // Return an array with two elements:\n // - The closest date on the left\n // - The closest date on the right\n const dates = [false, false];\n for (let i = 0; i < 7; i++) {\n const _date = this.substractDays(day, i);\n if (this.disabledDaysIndexes.indexOf(parseInt(fecha.format(_date, \"d\"), 10)) > -1) {\n dates[0] = _date;\n break;\n }\n }\n for (let i = 0; i < 7; i++) {\n const _date = this.addDays(day, i);\n if (this.disabledDaysIndexes.indexOf(parseInt(fecha.format(_date, \"d\"), 10)) > -1) {\n dates[1] = _date;\n break;\n }\n }\n return dates;\n }\n lang(s) {\n // Return i18n string\n return s in this.i18n ? this.i18n[s] : \"\";\n }\n emptyElement(element) {\n // Remove all child elements of a DOM node\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n\n // Helper regex for DOM classes\n classRegex(c) {\n return new RegExp(\"(^|\\\\s+)\" + c + \"(\\\\s+|$)\");\n }\n\n // Check if an element has a class\n hasClass(el, c) {\n return this.classRegex(c).test(el.className);\n }\n\n // Add a class to the element\n addClass(el, c) {\n if (!this.hasClass(el, c)) {\n el.className = el.className + \" \" + c;\n }\n }\n\n // Remove class from element\n removeClass(el, c) {\n el.className = el.className.replace(this.classRegex(c), \" \");\n }\n isVisible(element) {\n // Check if a DOM element is visible\n return element.offsetWidth || element.offsetHeight || element.getClientRects().length;\n }\n slideDown(element, speed) {\n // Slide down an element\n element.style.display = \"\";\n const h = element.getBoundingClientRect().height;\n element.style.height = 0;\n this.recalc(element.offsetHeight);\n element.style.transition = \"height \" + speed;\n element.style.height = h + \"px\";\n element.addEventListener(\"transitionend\", () => {\n element.style.height = element.style.transition = element.style.display = \"\";\n });\n }\n slideUp(element, speed) {\n // Slide up an element\n const h = element.getBoundingClientRect().height;\n element.style.height = h + \"px\";\n this.recalc(element.offsetHeight);\n element.style.transition = \"height \" + speed;\n element.style.height = 0;\n element.addEventListener(\"transitionend\", () => {\n element.style.display = \"none\";\n });\n }\n recalc(element) {\n // Force browser recalculation\n return element.offsetHeight;\n }\n isTouchDevice() {\n // This *does not* necessarily reflect a touchscreen device!!!\n // http://www.stucox.com/blog/you-cant-detect-a-touchscreen/\n return \"ontouchstart\" in window || window.DocumentTouch && document instanceof DocumentTouch;\n }\n setDayAriaAttributes() {\n const days = this.datepicker.getElementsByTagName(\"td\");\n for (let i = 0; i < days.length; i++) {\n const classes = days[i].className;\n const time = parseInt(days[i].getAttribute(\"time\"), 10);\n let ariaDisabled = \"false\";\n let ariaLabel = \"\";\n if (classes.includes(\"datepicker__month-day--invalid\")) {\n ariaLabel = this.replacei18n(this.i18n[\"aria-disabled\"], fecha.format(time, this.ariaDayFormat));\n ariaDisabled = \"true\";\n } else if (classes.includes(\"datepicker__month-day--first-day-selected\")) {\n ariaLabel = this.replacei18n(this.i18n[\"aria-selected-checkin\"], fecha.format(time, this.ariaDayFormat));\n } else if (classes.includes(\"datepicker__month-day--last-day-selected\")) {\n ariaLabel = this.replacei18n(this.i18n[\"aria-selected-checkout\"], fecha.format(time, this.ariaDayFormat));\n } else if (classes.includes(\"datepicker__month-day--selected\")) {\n ariaLabel = this.replacei18n(this.i18n[\"aria-selected\"], fecha.format(time, this.ariaDayFormat));\n } else if (this.start && !this.end) {\n ariaLabel = this.replacei18n(this.i18n[\"aria-choose-checkout\"], fecha.format(time, this.ariaDayFormat));\n } else {\n ariaLabel = this.replacei18n(this.i18n[\"aria-choose-checkin\"], fecha.format(time, this.ariaDayFormat));\n }\n if (ariaLabel) {\n days[i].setAttribute(\"aria-label\", ariaLabel);\n }\n days[i].setAttribute(\"aria-disabled\", ariaDisabled);\n }\n }\n replacei18n(string, value) {\n return string.replace(\"%s\", value);\n }\n checkOnFocus(event) {\n if (event.target && this.input === event.target || this.datepicker.contains(event.target)) {\n this.isOnFocus = true;\n } else {\n this.isOnFocus = false;\n if (this.isOpen) {\n this.closeDatepicker();\n }\n }\n }\n doKeyDown(event) {\n switch (event.keyCode) {\n case 39:\n if (this.isOnFocus) {\n event.preventDefault();\n this.setActiveDay(\"next\");\n }\n break;\n case 37:\n if (this.isOnFocus) {\n event.preventDefault();\n this.setActiveDay(\"prev\");\n }\n break;\n case 40:\n if (this.isOnFocus) {\n event.preventDefault();\n this.setActiveDay(\"down\");\n }\n break;\n case 38:\n if (this.isOnFocus) {\n event.preventDefault();\n this.setActiveDay(\"up\");\n }\n break;\n case 36:\n if (this.isOnFocus) {\n event.preventDefault();\n this.setActiveDay(\"first\");\n }\n break;\n case 35:\n if (this.isOnFocus) {\n event.preventDefault();\n this.setActiveDay(\"last\");\n }\n break;\n case 27:\n if (this.isOnFocus && this.input.offsetParent !== null) {\n this.setFocusToInput();\n }\n break;\n case 34:\n if (this.isOnFocus) {\n event.preventDefault();\n this.moveMonthFromKeyboard(\"next\");\n }\n break;\n case 33:\n if (this.isOnFocus) {\n event.preventDefault();\n this.moveMonthFromKeyboard(\"prev\");\n }\n break;\n case 13:\n if (this.isOnFocus) {\n event.preventDefault();\n this.handleReturn();\n }\n break;\n }\n }\n setActiveDay($direction) {\n const activeEl = document.activeElement;\n if (activeEl && this.hasClass(activeEl, \"datepicker__month-day--visibleMonth\") && this.datepicker.contains(activeEl)) {\n const currentIndex = parseInt(activeEl.getAttribute(\"index\"), 10);\n const currentWeekdayIndex = parseInt(activeEl.getAttribute(\"d\"), 10);\n let nextIndex = -1;\n switch ($direction) {\n case \"next\":\n nextIndex = currentIndex + 1;\n break;\n case \"prev\":\n nextIndex = currentIndex - 1;\n break;\n case \"up\":\n nextIndex = currentIndex - 7;\n break;\n case \"down\":\n nextIndex = currentIndex + 7;\n break;\n case \"first\":\n if (currentWeekdayIndex === 1) {\n return false;\n }\n nextIndex = currentIndex - (currentWeekdayIndex - 1);\n break;\n case \"last\":\n if (currentWeekdayIndex === 7) {\n return false;\n }\n nextIndex = currentIndex + (7 - currentWeekdayIndex);\n break;\n }\n const nextDay = this.datepicker.querySelectorAll('[index=\"' + nextIndex + '\"]');\n if (nextDay.length > 0 && nextIndex > 0) {\n this.setDayFocus(nextDay[0]);\n } else if (nextIndex > 0) {\n let nextDay = \"\";\n const gone = this.goToNextMonth(2, true);\n if (gone) {\n const month = this.datepicker.getElementsByClassName(\"datepicker__month--month2\");\n if (month.length > 0) {\n if ($direction === \"down\") {\n nextDay = month[0].querySelectorAll('.datepicker__month-day--visibleMonth[d=\"' + currentWeekdayIndex + '\"]');\n } else if ($direction === \"last\") {\n const nextWeekdayIndex = currentWeekdayIndex + (7 - currentWeekdayIndex);\n nextDay = month[0].querySelectorAll('.datepicker__month-day--visibleMonth[d=\"' + nextWeekdayIndex + '\"]');\n } else {\n nextDay = month[0].querySelectorAll(\".datepicker__month-day--visibleMonth\");\n }\n if (nextDay.length > 0) {\n this.setDayFocus(nextDay[0]);\n }\n }\n }\n } else if (nextIndex <= 0) {\n let prevDay = \"\";\n const gone = this.goToPreviousMonth(1, true);\n if (gone) {\n const month = this.datepicker.getElementsByClassName(\"datepicker__month--month1\");\n if (month.length > 0) {\n if ($direction === \"up\") {\n prevDay = month[0].querySelectorAll('.datepicker__month-day--visibleMonth[d=\"' + currentWeekdayIndex + '\"]');\n } else if ($direction === \"first\") {\n const prevWeekdayIndex = currentWeekdayIndex - (currentWeekdayIndex - 1);\n prevDay = month[0].querySelectorAll('.datepicker__month-day--visibleMonth[d=\"' + prevWeekdayIndex + '\"]');\n } else {\n prevDay = month[0].querySelectorAll(\".datepicker__month-day--visibleMonth\");\n }\n if (prevDay.length > 0) {\n this.setDayFocus(prevDay[prevDay.length - 1]);\n }\n }\n }\n }\n } else {\n this.setInitialActiveDay();\n }\n }\n setInitialActiveDay() {\n // Check if today is visible\n const today = this.datepicker.getElementsByClassName(\"datepicker__month-day--today\");\n if (today.length > 0) {\n this.setDayFocus(today[0]);\n return today[0];\n }\n\n // Check if check-in is visible\n const checkin = this.datepicker.getElementsByClassName(\"datepicker__month-day--first-day-selected\");\n if (checkin.length > 0) {\n this.setDayFocus(checkin[0]);\n return checkin[0];\n }\n\n // Get first visible day\n const visibleDay = this.datepicker.getElementsByClassName(\"datepicker__month-day--visibleMonth\");\n if (visibleDay.length > 0) {\n this.setDayFocus(visibleDay[0]);\n return visibleDay[0];\n }\n }\n setDayFocus(day) {\n const days = this.datepicker.getElementsByTagName(\"td\");\n this.removeDaysTabIndex(days);\n day.setAttribute(\"tabindex\", \"0\");\n day.focus();\n if (this.start && !this.end) {\n this.dayHovering(day);\n }\n }\n removeDaysTabIndex(days) {\n for (let i = 0; i < days.length; i++) {\n days[i].removeAttribute(\"tabindex\");\n }\n }\n setDayIndexes() {\n const days = this.datepicker.getElementsByTagName(\"td\");\n this.dayIndex = 1;\n for (let i = 0; i < days.length; i++) {\n if (this.hasClass(days[i], \"datepicker__month-day--visibleMonth\")) {\n days[i].setAttribute(\"index\", this.dayIndex);\n this.dayIndex++;\n } else {\n days[i].setAttribute(\"index\", 0);\n }\n }\n }\n setFocusToInput() {\n this.input.focus();\n this.closeDatepicker();\n this.clearHovering();\n this.justEsc = true;\n this.isOnFocus = false;\n }\n moveMonthFromKeyboard($direction) {\n if ($direction === \"prev\") {\n this.goToPreviousMonth(1, true);\n } else {\n this.goToNextMonth(2, true);\n }\n }\n handleReturn() {\n const activeEl = document.activeElement;\n if (activeEl && this.datepicker.contains(activeEl) && (this.hasClass(activeEl, \"datepicker__month-day--visibleMonth\") || this.hasClass(activeEl, \"datepicker__month-button\") || this.hasClass(activeEl, \"datepicker__close-button\") || this.hasClass(activeEl, \"datepicker__clear-button\") || this.hasClass(activeEl, \"datepicker__submit-button\"))) {\n activeEl.click();\n }\n }\n\n // ------------------ //\n // PUBLIC METHODS //\n // ------------------ //\n\n open() {\n this.openDatepicker();\n }\n close() {\n this.closeDatepicker();\n }\n getDatePicker() {\n return this.datepicker;\n }\n setRange(d1, d2) {\n if (typeof d1 === \"string\" && typeof d2 === \"string\") {\n d1 = this.parseDate(d1);\n d2 = this.parseDate(d2);\n }\n this.setDateRange(d1, d2);\n }\n clear() {\n this.clearSelection();\n }\n getNights() {\n let count = 0;\n if (this.start && this.end) {\n count = this.countDays(this.end, this.start) - 1;\n } else {\n const value = this.getValue();\n const dates = value ? value.split(this.separator) : \"\";\n if (dates && dates.length >= 2) {\n const _format = this.format;\n count = this.countDays(this.parseDate(dates[0], _format), this.parseDate(dates[1], _format)) - 1;\n }\n }\n return count;\n }\n destroy() {\n if (document.getElementById(this.getDatepickerId())) {\n this.removeAllBoundedListeners(this.input, \"click\");\n this.removeAllBoundedListeners(document, \"click\");\n this.removeAllBoundedListeners(this.input, \"change\");\n this.datepicker.parentNode.removeChild(this.datepicker);\n }\n }\n}\n\nexport { HotelDatepicker as default };\n","var tinyEmitter = {exports: {}};\n\nfunction E() {// Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n return this;\n },\n once: function (name, callback, ctx) {\n var self = this;\n\n function listener() {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n }\n listener._ = callback;\n return this.on(name, listener, ctx);\n },\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]);\n }\n } // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n\n liveEvents.length ? e[name] = liveEvents : delete e[name];\n return this;\n }\n};\ntinyEmitter.exports = E;\ntinyEmitter.exports.TinyEmitter = E;\n\nvar arrayParallel = function parallel(fns, context, callback) {\n if (!callback) {\n if (typeof context === 'function') {\n callback = context;\n context = null;\n } else {\n callback = noop;\n }\n }\n\n var pending = fns && fns.length;\n if (!pending) return callback(null, []);\n var finished = false;\n var results = new Array(pending);\n fns.forEach(context ? function (fn, i) {\n fn.call(context, maybeDone(i));\n } : function (fn, i) {\n fn(maybeDone(i));\n });\n\n function maybeDone(i) {\n return function (err, result) {\n if (finished) return;\n\n if (err) {\n callback(err, results);\n finished = true;\n return;\n }\n\n results[i] = result;\n if (! --pending) callback(null, results);\n };\n }\n};\n\nfunction noop() {}\n\n/**\n * Always returns a numeric value, given a value. Logic from jQuery's `isNumeric`.\n * @param {*} value Possibly numeric value.\n * @return {number} `value` or zero if `value` isn't numeric.\n */\nfunction getNumber(value) {\n return parseFloat(value) || 0;\n}\n\nclass Point {\n /**\n * Represents a coordinate pair.\n * @param {number} [x=0] X.\n * @param {number} [y=0] Y.\n */\n constructor(x, y) {\n this.x = getNumber(x);\n this.y = getNumber(y);\n }\n /**\n * Whether two points are equal.\n * @param {Point} a Point A.\n * @param {Point} b Point B.\n * @return {boolean}\n */\n\n\n static equals(a, b) {\n return a.x === b.x && a.y === b.y;\n }\n\n}\n\nclass Rect {\n /**\n * Class for representing rectangular regions.\n * https://github.com/google/closure-library/blob/master/closure/goog/math/rect.js\n * @param {number} x Left.\n * @param {number} y Top.\n * @param {number} w Width.\n * @param {number} h Height.\n * @param {number} id Identifier\n * @constructor\n */\n constructor(x, y, w, h, id) {\n this.id = id;\n /** @type {number} */\n\n this.left = x;\n /** @type {number} */\n\n this.top = y;\n /** @type {number} */\n\n this.width = w;\n /** @type {number} */\n\n this.height = h;\n }\n /**\n * Returns whether two rectangles intersect.\n * @param {Rect} a A Rectangle.\n * @param {Rect} b A Rectangle.\n * @return {boolean} Whether a and b intersect.\n */\n\n\n static intersects(a, b) {\n return a.left < b.left + b.width && b.left < a.left + a.width && a.top < b.top + b.height && b.top < a.top + a.height;\n }\n\n}\n\nvar Classes = {\n BASE: 'shuffle',\n SHUFFLE_ITEM: 'shuffle-item',\n VISIBLE: 'shuffle-item--visible',\n HIDDEN: 'shuffle-item--hidden'\n};\n\nlet id$1 = 0;\n\nclass ShuffleItem {\n constructor(element, isRTL) {\n id$1 += 1;\n this.id = id$1;\n this.element = element;\n /**\n * Set correct direction of item\n */\n\n this.isRTL = isRTL;\n /**\n * Used to separate items for layout and shrink.\n */\n\n this.isVisible = true;\n /**\n * Used to determine if a transition will happen. By the time the _layout\n * and _shrink methods get the ShuffleItem instances, the `isVisible` value\n * has already been changed by the separation methods, so this property is\n * needed to know if the item was visible/hidden before the shrink/layout.\n */\n\n this.isHidden = false;\n }\n\n show() {\n this.isVisible = true;\n this.element.classList.remove(Classes.HIDDEN);\n this.element.classList.add(Classes.VISIBLE);\n this.element.removeAttribute('aria-hidden');\n }\n\n hide() {\n this.isVisible = false;\n this.element.classList.remove(Classes.VISIBLE);\n this.element.classList.add(Classes.HIDDEN);\n this.element.setAttribute('aria-hidden', true);\n }\n\n init() {\n this.addClasses([Classes.SHUFFLE_ITEM, Classes.VISIBLE]);\n this.applyCss(ShuffleItem.Css.INITIAL);\n this.applyCss(this.isRTL ? ShuffleItem.Css.DIRECTION.rtl : ShuffleItem.Css.DIRECTION.ltr);\n this.scale = ShuffleItem.Scale.VISIBLE;\n this.point = new Point();\n }\n\n addClasses(classes) {\n classes.forEach(className => {\n this.element.classList.add(className);\n });\n }\n\n removeClasses(classes) {\n classes.forEach(className => {\n this.element.classList.remove(className);\n });\n }\n\n applyCss(obj) {\n Object.keys(obj).forEach(key => {\n this.element.style[key] = obj[key];\n });\n }\n\n dispose() {\n this.removeClasses([Classes.HIDDEN, Classes.VISIBLE, Classes.SHUFFLE_ITEM]);\n this.element.removeAttribute('style');\n this.element = null;\n }\n\n}\n\nShuffleItem.Css = {\n INITIAL: {\n position: 'absolute',\n top: 0,\n visibility: 'visible',\n willChange: 'transform'\n },\n DIRECTION: {\n ltr: {\n left: 0\n },\n rtl: {\n right: 0\n }\n },\n VISIBLE: {\n before: {\n opacity: 1,\n visibility: 'visible'\n },\n after: {\n transitionDelay: ''\n }\n },\n HIDDEN: {\n before: {\n opacity: 0\n },\n after: {\n visibility: 'hidden',\n transitionDelay: ''\n }\n }\n};\nShuffleItem.Scale = {\n VISIBLE: 1,\n HIDDEN: 0.001\n};\n\nlet value = null;\nvar testComputedSize = (() => {\n if (value !== null) {\n return value;\n }\n\n const element = document.body || document.documentElement;\n const e = document.createElement('div');\n e.style.cssText = 'width:10px;padding:2px;box-sizing:border-box;';\n element.appendChild(e);\n const {\n width\n } = window.getComputedStyle(e, null); // Fix for issue #314\n\n value = Math.round(getNumber(width)) === 10;\n element.removeChild(e);\n return value;\n});\n\n/**\n * Retrieve the computed style for an element, parsed as a float.\n * @param {Element} element Element to get style for.\n * @param {string} style Style property.\n * @param {CSSStyleDeclaration} [styles] Optionally include clean styles to\n * use instead of asking for them again.\n * @return {number} The parsed computed value or zero if that fails because IE\n * will return 'auto' when the element doesn't have margins instead of\n * the computed style.\n */\n\nfunction getNumberStyle(element, style) {\n let styles = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : window.getComputedStyle(element, null);\n let value = getNumber(styles[style]); // Support IE<=11 and W3C spec.\n\n if (!testComputedSize() && style === 'width') {\n value += getNumber(styles.paddingLeft) + getNumber(styles.paddingRight) + getNumber(styles.borderLeftWidth) + getNumber(styles.borderRightWidth);\n } else if (!testComputedSize() && style === 'height') {\n value += getNumber(styles.paddingTop) + getNumber(styles.paddingBottom) + getNumber(styles.borderTopWidth) + getNumber(styles.borderBottomWidth);\n }\n\n return value;\n}\n\n/**\n * Fisher-Yates shuffle.\n * http://stackoverflow.com/a/962890/373422\n * https://bost.ocks.org/mike/shuffle/\n * @param {Array} array Array to shuffle.\n * @return {Array} Randomly sorted array.\n */\nfunction randomize(array) {\n let n = array.length;\n\n while (n) {\n n -= 1;\n const i = Math.floor(Math.random() * (n + 1));\n const temp = array[i];\n array[i] = array[n];\n array[n] = temp;\n }\n\n return array;\n}\n\nconst defaults = {\n // Use array.reverse() to reverse the results\n reverse: false,\n // Sorting function\n by: null,\n // Custom sort function\n compare: null,\n // If true, this will skip the sorting and return a randomized order in the array\n randomize: false,\n // Determines which property of each item in the array is passed to the\n // sorting method.\n key: 'element'\n};\n/**\n * You can return `undefined` from the `by` function to revert to DOM order.\n * @param {Array} arr Array to sort.\n * @param {SortOptions} options Sorting options.\n * @return {Array}\n */\n\nfunction sorter(arr, options) {\n const opts = { ...defaults,\n ...options\n };\n const original = Array.from(arr);\n let revert = false;\n\n if (!arr.length) {\n return [];\n }\n\n if (opts.randomize) {\n return randomize(arr);\n } // Sort the elements by the opts.by function.\n // If we don't have opts.by, default to DOM order\n\n\n if (typeof opts.by === 'function') {\n arr.sort((a, b) => {\n // Exit early if we already know we want to revert\n if (revert) {\n return 0;\n }\n\n const valA = opts.by(a[opts.key]);\n const valB = opts.by(b[opts.key]); // If both values are undefined, use the DOM order\n\n if (valA === undefined && valB === undefined) {\n revert = true;\n return 0;\n }\n\n if (valA < valB || valA === 'sortFirst' || valB === 'sortLast') {\n return -1;\n }\n\n if (valA > valB || valA === 'sortLast' || valB === 'sortFirst') {\n return 1;\n }\n\n return 0;\n });\n } else if (typeof opts.compare === 'function') {\n arr.sort(opts.compare);\n } // Revert to the original array if necessary\n\n\n if (revert) {\n return original;\n }\n\n if (opts.reverse) {\n arr.reverse();\n }\n\n return arr;\n}\n\nconst transitions = {};\nconst eventName = 'transitionend';\nlet count = 0;\n\nfunction uniqueId() {\n count += 1;\n return eventName + count;\n}\n\nfunction cancelTransitionEnd(id) {\n if (transitions[id]) {\n transitions[id].element.removeEventListener(eventName, transitions[id].listener);\n transitions[id] = null;\n return true;\n }\n\n return false;\n}\nfunction onTransitionEnd(element, callback) {\n const id = uniqueId();\n\n const listener = evt => {\n if (evt.currentTarget === evt.target) {\n cancelTransitionEnd(id);\n callback(evt);\n }\n };\n\n element.addEventListener(eventName, listener);\n transitions[id] = {\n element,\n listener\n };\n return id;\n}\n\nfunction arrayMax(array) {\n return Math.max(...array);\n}\n\nfunction arrayMin(array) {\n return Math.min(...array);\n}\n\n/**\n * Determine the number of columns an items spans.\n * @param {number} itemWidth Width of the item.\n * @param {number} columnWidth Width of the column (includes gutter).\n * @param {number} columns Total number of columns\n * @param {number} threshold A buffer value for the size of the column to fit.\n * @return {number}\n */\n\nfunction getColumnSpan(itemWidth, columnWidth, columns, threshold) {\n let columnSpan = itemWidth / columnWidth; // If the difference between the rounded column span number and the\n // calculated column span number is really small, round the number to\n // make it fit.\n\n if (Math.abs(Math.round(columnSpan) - columnSpan) < threshold) {\n // e.g. columnSpan = 4.0089945390298745\n columnSpan = Math.round(columnSpan);\n } // Ensure the column span is not more than the amount of columns in the whole layout.\n\n\n return Math.min(Math.ceil(columnSpan), columns);\n}\n/**\n * Retrieves the column set to use for placement.\n * @param {number} columnSpan The number of columns this current item spans.\n * @param {number} columns The total columns in the grid.\n * @return {Array.} An array of numbers represeting the column set.\n */\n\nfunction getAvailablePositions(positions, columnSpan, columns) {\n // The item spans only one column.\n if (columnSpan === 1) {\n return positions;\n } // The item spans more than one column, figure out how many different\n // places it could fit horizontally.\n // The group count is the number of places within the positions this block\n // could fit, ignoring the current positions of items.\n // Imagine a 2 column brick as the second item in a 4 column grid with\n // 10px height each. Find the places it would fit:\n // [20, 10, 10, 0]\n // | | |\n // * * *\n //\n // Then take the places which fit and get the bigger of the two:\n // max([20, 10]), max([10, 10]), max([10, 0]) = [20, 10, 10]\n //\n // Next, find the first smallest number (the short column).\n // [20, 10, 10]\n // |\n // *\n //\n // And that's where it should be placed!\n //\n // Another example where the second column's item extends past the first:\n // [10, 20, 10, 0] => [20, 20, 10] => 10\n\n\n const available = []; // For how many possible positions for this item there are.\n\n for (let i = 0; i <= columns - columnSpan; i++) {\n // Find the bigger value for each place it could fit.\n available.push(arrayMax(positions.slice(i, i + columnSpan)));\n }\n\n return available;\n}\n/**\n * Find index of short column, the first from the left where this item will go.\n *\n * @param {Array.} positions The array to search for the smallest number.\n * @param {number} buffer Optional buffer which is very useful when the height\n * is a percentage of the width.\n * @return {number} Index of the short column.\n */\n\nfunction getShortColumn(positions, buffer) {\n const minPosition = arrayMin(positions);\n\n for (let i = 0, len = positions.length; i < len; i++) {\n if (positions[i] >= minPosition - buffer && positions[i] <= minPosition + buffer) {\n return i;\n }\n }\n\n return 0;\n}\n/**\n * Determine the location of the next item, based on its size.\n * @param {Object} itemSize Object with width and height.\n * @param {Array.} positions Positions of the other current items.\n * @param {number} gridSize The column width or row height.\n * @param {number} total The total number of columns or rows.\n * @param {number} threshold Buffer value for the column to fit.\n * @param {number} buffer Vertical buffer for the height of items.\n * @return {Point}\n */\n\nfunction getItemPosition(_ref) {\n let {\n itemSize,\n positions,\n gridSize,\n total,\n threshold,\n buffer\n } = _ref;\n const span = getColumnSpan(itemSize.width, gridSize, total, threshold);\n const setY = getAvailablePositions(positions, span, total);\n const shortColumnIndex = getShortColumn(setY, buffer); // Position the item\n\n const point = new Point(gridSize * shortColumnIndex, setY[shortColumnIndex]); // Update the columns array with the new values for each column.\n // e.g. before the update the columns could be [250, 0, 0, 0] for an item\n // which spans 2 columns. After it would be [250, itemHeight, itemHeight, 0].\n\n const setHeight = setY[shortColumnIndex] + itemSize.height;\n\n for (let i = 0; i < span; i++) {\n positions[shortColumnIndex + i] = setHeight;\n }\n\n return point;\n}\n/**\n * This method attempts to center items. This method could potentially be slow\n * with a large number of items because it must place items, then check every\n * previous item to ensure there is no overlap.\n * @param {Array.} itemRects Item data objects.\n * @param {number} containerWidth Width of the containing element.\n * @return {Array.}\n */\n\nfunction getCenteredPositions(itemRects, containerWidth) {\n const rowMap = {}; // Populate rows by their offset because items could jump between rows like:\n // a c\n // bbb\n\n itemRects.forEach(itemRect => {\n if (rowMap[itemRect.top]) {\n // Push the point to the last row array.\n rowMap[itemRect.top].push(itemRect);\n } else {\n // Start of a new row.\n rowMap[itemRect.top] = [itemRect];\n }\n }); // For each row, find the end of the last item, then calculate\n // the remaining space by dividing it by 2. Then add that\n // offset to the x position of each point.\n\n let rects = [];\n const rows = [];\n const centeredRows = [];\n Object.keys(rowMap).forEach(key => {\n const itemRects = rowMap[key];\n rows.push(itemRects);\n const lastItem = itemRects[itemRects.length - 1];\n const end = lastItem.left + lastItem.width;\n const offset = Math.round((containerWidth - end) / 2);\n let finalRects = itemRects;\n let canMove = false;\n\n if (offset > 0) {\n const newRects = [];\n canMove = itemRects.every(r => {\n const newRect = new Rect(r.left + offset, r.top, r.width, r.height, r.id); // Check all current rects to make sure none overlap.\n\n const noOverlap = !rects.some(r => Rect.intersects(newRect, r));\n newRects.push(newRect);\n return noOverlap;\n }); // If none of the rectangles overlapped, the whole group can be centered.\n\n if (canMove) {\n finalRects = newRects;\n }\n } // If the items are not going to be offset, ensure that the original\n // placement for this row will not overlap previous rows (row-spanning\n // elements could be in the way).\n\n\n if (!canMove) {\n let intersectingRect;\n const hasOverlap = itemRects.some(itemRect => rects.some(r => {\n const intersects = Rect.intersects(itemRect, r);\n\n if (intersects) {\n intersectingRect = r;\n }\n\n return intersects;\n })); // If there is any overlap, replace the overlapping row with the original.\n\n if (hasOverlap) {\n const rowIndex = centeredRows.findIndex(items => items.includes(intersectingRect));\n centeredRows.splice(rowIndex, 1, rows[rowIndex]);\n }\n }\n\n rects = rects.concat(finalRects);\n centeredRows.push(finalRects);\n }); // Reduce array of arrays to a single array of points.\n // https://stackoverflow.com/a/10865042/373422\n // Then reset sort back to how the items were passed to this method.\n // Remove the wrapper object with index, map to a Point.\n\n return centeredRows.flat().sort((a, b) => a.id - b.id).map(itemRect => new Point(itemRect.left, itemRect.top));\n}\n\n/**\n * Hyphenates a javascript style string to a css one. For example:\n * MozBoxSizing -> -moz-box-sizing.\n * @param {string} str The string to hyphenate.\n * @return {string} The hyphenated string.\n */\nfunction hyphenate(str) {\n return str.replace(/([A-Z])/g, (str, m1) => `-${m1.toLowerCase()}`);\n}\n\nfunction arrayUnique(x) {\n return Array.from(new Set(x));\n} // Used for unique instance variables\n\n\nlet id = 0;\n\nclass Shuffle extends tinyEmitter.exports {\n /**\n * Categorize, sort, and filter a responsive grid of items.\n *\n * @param {Element} element An element which is the parent container for the grid items.\n * @param {Object} [options=Shuffle.options] Options object.\n * @constructor\n */\n constructor(element) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n this.options = { ...Shuffle.options,\n ...options\n };\n this.lastSort = {};\n this.group = Shuffle.ALL_ITEMS;\n this.lastFilter = Shuffle.ALL_ITEMS;\n this.isEnabled = true;\n this.isDestroyed = false;\n this.isInitialized = false;\n this._transitions = [];\n this.isTransitioning = false;\n this._queue = [];\n\n const el = this._getElementOption(element);\n\n if (!el) {\n throw new TypeError('Shuffle needs to be initialized with an element.');\n }\n\n this.element = el;\n this.id = `shuffle_${id}`;\n id += 1;\n\n this._init();\n\n this.isInitialized = true;\n }\n\n _init() {\n this.items = this._getItems();\n this.sortedItems = this.items;\n this.options.sizer = this._getElementOption(this.options.sizer); // Add class and invalidate styles\n\n this.element.classList.add(Shuffle.Classes.BASE); // Set initial css for each item\n\n this._initItems(this.items); // If the page has not already emitted the `load` event, call layout on load.\n // This avoids layout issues caused by images and fonts loading after the\n // instance has been initialized.\n\n\n if (document.readyState !== 'complete') {\n const layout = this.layout.bind(this);\n window.addEventListener('load', function onLoad() {\n window.removeEventListener('load', onLoad);\n layout();\n });\n } // Get container css all in one request. Causes reflow\n\n\n const containerCss = window.getComputedStyle(this.element, null);\n const containerWidth = Shuffle.getSize(this.element).width; // Add styles to the container if it doesn't have them.\n\n this._validateStyles(containerCss); // We already got the container's width above, no need to cause another\n // reflow getting it again... Calculate the number of columns there will be\n\n\n this._setColumns(containerWidth); // Kick off!\n\n\n this.filter(this.options.group, this.options.initialSort); // Bind resize events\n\n this._rafId = null; // This is true for all supported browsers, but just to be safe, avoid throwing\n // an error if ResizeObserver is not present. You can manually add a window resize\n // event and call `update()` if ResizeObserver is missing, or use Shuffle v5.\n\n if ('ResizeObserver' in window) {\n this._resizeObserver = new ResizeObserver(this._handleResizeCallback.bind(this));\n\n this._resizeObserver.observe(this.element);\n } // The shuffle items haven't had transitions set on them yet so the user\n // doesn't see the first layout. Set them now that the first layout is done.\n // First, however, a synchronous layout must be caused for the previous\n // styles to be applied without transitions.\n\n\n this.element.offsetWidth; // eslint-disable-line no-unused-expressions\n\n this.setItemTransitions(this.items);\n this.element.style.transition = `height ${this.options.speed}ms ${this.options.easing}`;\n }\n /**\n * Retrieve an element from an option.\n * @param {string|jQuery|Element} option The option to check.\n * @return {?Element} The plain element or null.\n * @private\n */\n\n\n _getElementOption(option) {\n // If column width is a string, treat is as a selector and search for the\n // sizer element within the outermost container\n if (typeof option === 'string') {\n return this.element.querySelector(option);\n } // Check for an element\n\n\n if (option && option.nodeType && option.nodeType === 1) {\n return option;\n } // Check for jQuery object\n\n\n if (option && option.jquery) {\n return option[0];\n }\n\n return null;\n }\n /**\n * Ensures the shuffle container has the css styles it needs applied to it.\n * @param {Object} styles Key value pairs for position and overflow.\n * @private\n */\n\n\n _validateStyles(styles) {\n // Position cannot be static.\n if (styles.position === 'static') {\n this.element.style.position = 'relative';\n } // Overflow has to be hidden.\n\n\n if (styles.overflow !== 'hidden') {\n this.element.style.overflow = 'hidden';\n }\n }\n /**\n * Filter the elements by a category.\n * @param {string|string[]|function(Element):boolean} [category] Category to\n * filter by. If it's given, the last category will be used to filter the items.\n * @param {Array} [collection] Optionally filter a collection. Defaults to\n * all the items.\n * @return {{visible: ShuffleItem[], hidden: ShuffleItem[]}}\n * @private\n */\n\n\n _filter() {\n let category = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.lastFilter;\n let collection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.items;\n\n const set = this._getFilteredSets(category, collection); // Individually add/remove hidden/visible classes\n\n\n this._toggleFilterClasses(set); // Save the last filter in case elements are appended.\n\n\n this.lastFilter = category; // This is saved mainly because providing a filter function (like searching)\n // will overwrite the `lastFilter` property every time its called.\n\n if (typeof category === 'string') {\n this.group = category;\n }\n\n return set;\n }\n /**\n * Returns an object containing the visible and hidden elements.\n * @param {string|string[]|function(Element):boolean} category Category or function to filter by.\n * @param {ShuffleItem[]} items A collection of items to filter.\n * @return {{visible: ShuffleItem[], hidden: ShuffleItem[]}}\n * @private\n */\n\n\n _getFilteredSets(category, items) {\n let visible = [];\n const hidden = []; // category === 'all', add visible class to everything\n\n if (category === Shuffle.ALL_ITEMS) {\n visible = items; // Loop through each item and use provided function to determine\n // whether to hide it or not.\n } else {\n items.forEach(item => {\n if (this._doesPassFilter(category, item.element)) {\n visible.push(item);\n } else {\n hidden.push(item);\n }\n });\n }\n\n return {\n visible,\n hidden\n };\n }\n /**\n * Test an item to see if it passes a category.\n * @param {string|string[]|function():boolean} category Category or function to filter by.\n * @param {Element} element An element to test.\n * @return {boolean} Whether it passes the category/filter.\n * @private\n */\n\n\n _doesPassFilter(category, element) {\n if (typeof category === 'function') {\n return category.call(element, element, this);\n } // Check each element's data-groups attribute against the given category.\n\n\n const attr = element.dataset[Shuffle.FILTER_ATTRIBUTE_KEY];\n const keys = this.options.delimiter ? attr.split(this.options.delimiter) : JSON.parse(attr);\n\n function testCategory(category) {\n return keys.includes(category);\n }\n\n if (Array.isArray(category)) {\n if (this.options.filterMode === Shuffle.FilterMode.ANY) {\n return category.some(testCategory);\n }\n\n return category.every(testCategory);\n }\n\n return keys.includes(category);\n }\n /**\n * Toggles the visible and hidden class names.\n * @param {{visible, hidden}} Object with visible and hidden arrays.\n * @private\n */\n\n\n _toggleFilterClasses(_ref) {\n let {\n visible,\n hidden\n } = _ref;\n visible.forEach(item => {\n item.show();\n });\n hidden.forEach(item => {\n item.hide();\n });\n }\n /**\n * Set the initial css for each item\n * @param {ShuffleItem[]} items Set to initialize.\n * @private\n */\n\n\n _initItems(items) {\n items.forEach(item => {\n item.init();\n });\n }\n /**\n * Remove element reference and styles.\n * @param {ShuffleItem[]} items Set to dispose.\n * @private\n */\n\n\n _disposeItems(items) {\n items.forEach(item => {\n item.dispose();\n });\n }\n /**\n * Updates the visible item count.\n * @private\n */\n\n\n _updateItemCount() {\n this.visibleItems = this._getFilteredItems().length;\n }\n /**\n * Sets css transform transition on a group of elements. This is not executed\n * at the same time as `item.init` so that transitions don't occur upon\n * initialization of a new Shuffle instance.\n * @param {ShuffleItem[]} items Shuffle items to set transitions on.\n * @protected\n */\n\n\n setItemTransitions(items) {\n const {\n speed,\n easing\n } = this.options;\n const positionProps = this.options.useTransforms ? ['transform'] : ['top', 'left']; // Allow users to transtion other properties if they exist in the `before`\n // css mapping of the shuffle item.\n\n const cssProps = Object.keys(ShuffleItem.Css.HIDDEN.before).map(k => hyphenate(k));\n const properties = positionProps.concat(cssProps).join();\n items.forEach(item => {\n item.element.style.transitionDuration = `${speed}ms`;\n item.element.style.transitionTimingFunction = easing;\n item.element.style.transitionProperty = properties;\n });\n }\n\n _getItems() {\n return Array.from(this.element.children).filter(el => el.matches(this.options.itemSelector)).map(el => new ShuffleItem(el, this.options.isRTL));\n }\n /**\n * Combine the current items array with a new one and sort it by DOM order.\n * @param {ShuffleItem[]} items Items to track.\n * @return {ShuffleItem[]}\n */\n\n\n _mergeNewItems(items) {\n const children = Array.from(this.element.children);\n return sorter(this.items.concat(items), {\n by(element) {\n return children.indexOf(element);\n }\n\n });\n }\n\n _getFilteredItems() {\n return this.items.filter(item => item.isVisible);\n }\n\n _getConcealedItems() {\n return this.items.filter(item => !item.isVisible);\n }\n /**\n * Returns the column size, based on column width and sizer options.\n * @param {number} containerWidth Size of the parent container.\n * @param {number} gutterSize Size of the gutters.\n * @return {number}\n * @private\n */\n\n\n _getColumnSize(containerWidth, gutterSize) {\n let size; // If the columnWidth property is a function, then the grid is fluid\n\n if (typeof this.options.columnWidth === 'function') {\n size = this.options.columnWidth(containerWidth); // columnWidth option isn't a function, are they using a sizing element?\n } else if (this.options.sizer) {\n size = Shuffle.getSize(this.options.sizer).width; // if not, how about the explicitly set option?\n } else if (this.options.columnWidth) {\n size = this.options.columnWidth; // or use the size of the first item\n } else if (this.items.length > 0) {\n size = Shuffle.getSize(this.items[0].element, true).width; // if there's no items, use size of container\n } else {\n size = containerWidth;\n } // Don't let them set a column width of zero.\n\n\n if (size === 0) {\n size = containerWidth;\n }\n\n return size + gutterSize;\n }\n /**\n * Returns the gutter size, based on gutter width and sizer options.\n * @param {number} containerWidth Size of the parent container.\n * @return {number}\n * @private\n */\n\n\n _getGutterSize(containerWidth) {\n let size;\n\n if (typeof this.options.gutterWidth === 'function') {\n size = this.options.gutterWidth(containerWidth);\n } else if (this.options.sizer) {\n size = getNumberStyle(this.options.sizer, 'marginLeft');\n } else {\n size = this.options.gutterWidth;\n }\n\n return size;\n }\n /**\n * Calculate the number of columns to be used. Gets css if using sizer element.\n * @param {number} [containerWidth] Optionally specify a container width if\n * it's already available.\n */\n\n\n _setColumns() {\n let containerWidth = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Shuffle.getSize(this.element).width;\n\n const gutter = this._getGutterSize(containerWidth);\n\n const columnWidth = this._getColumnSize(containerWidth, gutter);\n\n let calculatedColumns = (containerWidth + gutter) / columnWidth; // Widths given from getStyles are not precise enough...\n\n if (Math.abs(Math.round(calculatedColumns) - calculatedColumns) < this.options.columnThreshold) {\n // e.g. calculatedColumns = 11.998876\n calculatedColumns = Math.round(calculatedColumns);\n }\n\n this.cols = Math.max(Math.floor(calculatedColumns || 0), 1);\n this.containerWidth = containerWidth;\n this.colWidth = columnWidth;\n }\n /**\n * Adjust the height of the grid\n */\n\n\n _setContainerSize() {\n this.element.style.height = `${this._getContainerSize()}px`;\n }\n /**\n * Based on the column heights, it returns the biggest one.\n * @return {number}\n * @private\n */\n\n\n _getContainerSize() {\n return arrayMax(this.positions);\n }\n /**\n * Get the clamped stagger amount.\n * @param {number} index Index of the item to be staggered.\n * @return {number}\n */\n\n\n _getStaggerAmount(index) {\n return Math.min(index * this.options.staggerAmount, this.options.staggerAmountMax);\n }\n /**\n * Emit an event from this instance.\n * @param {string} name Event name.\n * @param {Object} [data={}] Optional object data.\n */\n\n\n _dispatch(name) {\n let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (this.isDestroyed) {\n return;\n }\n\n data.shuffle = this;\n this.emit(name, data);\n }\n /**\n * Zeros out the y columns array, which is used to determine item placement.\n * @private\n */\n\n\n _resetCols() {\n let i = this.cols;\n this.positions = [];\n\n while (i) {\n i -= 1;\n this.positions.push(0);\n }\n }\n /**\n * Loops through each item that should be shown and calculates the x, y position.\n * @param {ShuffleItem[]} items Array of items that will be shown/layed\n * out in order in their array.\n */\n\n\n _layout(items) {\n const itemPositions = this._getNextPositions(items);\n\n let count = 0;\n items.forEach((item, i) => {\n function callback() {\n item.applyCss(ShuffleItem.Css.VISIBLE.after);\n } // If the item will not change its position, do not add it to the render\n // queue. Transitions don't fire when setting a property to the same value.\n\n\n if (Point.equals(item.point, itemPositions[i]) && !item.isHidden) {\n item.applyCss(ShuffleItem.Css.VISIBLE.before);\n callback();\n return;\n }\n\n item.point = itemPositions[i];\n item.scale = ShuffleItem.Scale.VISIBLE;\n item.isHidden = false; // Clone the object so that the `before` object isn't modified when the\n // transition delay is added.\n\n const styles = this.getStylesForTransition(item, ShuffleItem.Css.VISIBLE.before);\n styles.transitionDelay = `${this._getStaggerAmount(count)}ms`;\n\n this._queue.push({\n item,\n styles,\n callback\n });\n\n count += 1;\n });\n }\n /**\n * Return an array of Point instances representing the future positions of\n * each item.\n * @param {ShuffleItem[]} items Array of sorted shuffle items.\n * @return {Point[]}\n * @private\n */\n\n\n _getNextPositions(items) {\n // If position data is going to be changed, add the item's size to the\n // transformer to allow for calculations.\n if (this.options.isCentered) {\n const itemsData = items.map((item, i) => {\n const itemSize = Shuffle.getSize(item.element, true);\n\n const point = this._getItemPosition(itemSize);\n\n return new Rect(point.x, point.y, itemSize.width, itemSize.height, i);\n });\n return this.getTransformedPositions(itemsData, this.containerWidth);\n } // If no transforms are going to happen, simply return an array of the\n // future points of each item.\n\n\n return items.map(item => this._getItemPosition(Shuffle.getSize(item.element, true)));\n }\n /**\n * Determine the location of the next item, based on its size.\n * @param {{width: number, height: number}} itemSize Object with width and height.\n * @return {Point}\n * @private\n */\n\n\n _getItemPosition(itemSize) {\n return getItemPosition({\n itemSize,\n positions: this.positions,\n gridSize: this.colWidth,\n total: this.cols,\n threshold: this.options.columnThreshold,\n buffer: this.options.buffer\n });\n }\n /**\n * Mutate positions before they're applied.\n * @param {Rect[]} itemRects Item data objects.\n * @param {number} containerWidth Width of the containing element.\n * @return {Point[]}\n * @protected\n */\n\n\n getTransformedPositions(itemRects, containerWidth) {\n return getCenteredPositions(itemRects, containerWidth);\n }\n /**\n * Hides the elements that don't match our filter.\n * @param {ShuffleItem[]} collection Collection to shrink.\n * @private\n */\n\n\n _shrink() {\n let collection = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._getConcealedItems();\n let count = 0;\n collection.forEach(item => {\n function callback() {\n item.applyCss(ShuffleItem.Css.HIDDEN.after);\n } // Continuing would add a transitionend event listener to the element, but\n // that listener would not execute because the transform and opacity would\n // stay the same.\n // The callback is executed here because it is not guaranteed to be called\n // after the transitionend event because the transitionend could be\n // canceled if another animation starts.\n\n\n if (item.isHidden) {\n item.applyCss(ShuffleItem.Css.HIDDEN.before);\n callback();\n return;\n }\n\n item.scale = ShuffleItem.Scale.HIDDEN;\n item.isHidden = true;\n const styles = this.getStylesForTransition(item, ShuffleItem.Css.HIDDEN.before);\n styles.transitionDelay = `${this._getStaggerAmount(count)}ms`;\n\n this._queue.push({\n item,\n styles,\n callback\n });\n\n count += 1;\n });\n }\n /**\n * Resize handler.\n * @param {ResizeObserverEntry[]} entries\n */\n\n\n _handleResizeCallback(entries) {\n // If shuffle is disabled, destroyed, don't do anything.\n // You can still manually force a shuffle update with shuffle.update({ force: true }).\n if (!this.isEnabled || this.isDestroyed) {\n return;\n } // The reason ESLint disables this is because for..of generates a lot of extra\n // code using Babel, but Shuffle no longer supports browsers that old, so\n // nothing to worry about.\n // eslint-disable-next-line no-restricted-syntax\n\n\n for (const entry of entries) {\n if (Math.round(entry.contentRect.width) !== Math.round(this.containerWidth)) {\n // If there was already an animation waiting, cancel it.\n cancelAnimationFrame(this._rafId); // Offload updating the DOM until the browser is ready.\n\n this._rafId = requestAnimationFrame(this.update.bind(this));\n }\n }\n }\n /**\n * Returns styles which will be applied to the an item for a transition.\n * @param {ShuffleItem} item Item to get styles for. Should have updated\n * scale and point properties.\n * @param {Object} styleObject Extra styles that will be used in the transition.\n * @return {!Object} Transforms for transitions, left/top for animate.\n * @protected\n */\n\n\n getStylesForTransition(item, styleObject) {\n // Clone the object to avoid mutating the original.\n const styles = { ...styleObject\n };\n\n if (this.options.useTransforms) {\n const sign = this.options.isRTL ? '-' : '';\n const x = this.options.roundTransforms ? Math.round(item.point.x) : item.point.x;\n const y = this.options.roundTransforms ? Math.round(item.point.y) : item.point.y;\n styles.transform = `translate(${sign}${x}px, ${y}px) scale(${item.scale})`;\n } else {\n if (this.options.isRTL) {\n styles.right = `${item.point.x}px`;\n } else {\n styles.left = `${item.point.x}px`;\n }\n\n styles.top = `${item.point.y}px`;\n }\n\n return styles;\n }\n /**\n * Listen for the transition end on an element and execute the itemCallback\n * when it finishes.\n * @param {Element} element Element to listen on.\n * @param {function} itemCallback Callback for the item.\n * @param {function} done Callback to notify `parallel` that this one is done.\n */\n\n\n _whenTransitionDone(element, itemCallback, done) {\n const id = onTransitionEnd(element, evt => {\n itemCallback();\n done(null, evt);\n });\n\n this._transitions.push(id);\n }\n /**\n * Return a function which will set CSS styles and call the `done` function\n * when (if) the transition finishes.\n * @param {Object} opts Transition object.\n * @return {function} A function to be called with a `done` function.\n */\n\n\n _getTransitionFunction(opts) {\n return done => {\n opts.item.applyCss(opts.styles);\n\n this._whenTransitionDone(opts.item.element, opts.callback, done);\n };\n }\n /**\n * Execute the styles gathered in the style queue. This applies styles to elements,\n * triggering transitions.\n * @private\n */\n\n\n _processQueue() {\n if (this.isTransitioning) {\n this._cancelMovement();\n }\n\n const hasSpeed = this.options.speed > 0;\n const hasQueue = this._queue.length > 0;\n\n if (hasQueue && hasSpeed && this.isInitialized) {\n this._startTransitions(this._queue);\n } else if (hasQueue) {\n this._styleImmediately(this._queue);\n\n this._dispatch(Shuffle.EventType.LAYOUT); // A call to layout happened, but none of the newly visible items will\n // change position or the transition duration is zero, which will not trigger\n // the transitionend event.\n\n } else {\n this._dispatch(Shuffle.EventType.LAYOUT);\n } // Remove everything in the style queue\n\n\n this._queue.length = 0;\n }\n /**\n * Wait for each transition to finish, the emit the layout event.\n * @param {Object[]} transitions Array of transition objects.\n */\n\n\n _startTransitions(transitions) {\n // Set flag that shuffle is currently in motion.\n this.isTransitioning = true; // Create an array of functions to be called.\n\n const callbacks = transitions.map(obj => this._getTransitionFunction(obj));\n arrayParallel(callbacks, this._movementFinished.bind(this));\n }\n\n _cancelMovement() {\n // Remove the transition end event for each listener.\n this._transitions.forEach(cancelTransitionEnd); // Reset the array.\n\n\n this._transitions.length = 0; // Show it's no longer active.\n\n this.isTransitioning = false;\n }\n /**\n * Apply styles without a transition.\n * @param {Object[]} objects Array of transition objects.\n * @private\n */\n\n\n _styleImmediately(objects) {\n if (objects.length) {\n const elements = objects.map(obj => obj.item.element);\n\n Shuffle._skipTransitions(elements, () => {\n objects.forEach(obj => {\n obj.item.applyCss(obj.styles);\n obj.callback();\n });\n });\n }\n }\n\n _movementFinished() {\n this._transitions.length = 0;\n this.isTransitioning = false;\n\n this._dispatch(Shuffle.EventType.LAYOUT);\n }\n /**\n * The magic. This is what makes the plugin 'shuffle'\n * @param {string|string[]|function(Element):boolean} [category] Category to filter by.\n * Can be a function, string, or array of strings.\n * @param {SortOptions} [sortOptions] A sort object which can sort the visible set\n */\n\n\n filter(category, sortOptions) {\n if (!this.isEnabled) {\n return;\n }\n\n if (!category || category && category.length === 0) {\n category = Shuffle.ALL_ITEMS; // eslint-disable-line no-param-reassign\n }\n\n this._filter(category); // Shrink each hidden item\n\n\n this._shrink(); // How many visible elements?\n\n\n this._updateItemCount(); // Update transforms on visible elements so they will animate to their new positions.\n\n\n this.sort(sortOptions);\n }\n /**\n * Gets the visible elements, sorts them, and passes them to layout.\n * @param {SortOptions} [sortOptions] The options object to pass to `sorter`.\n */\n\n\n sort() {\n let sortOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.lastSort;\n\n if (!this.isEnabled) {\n return;\n }\n\n this._resetCols();\n\n const items = sorter(this._getFilteredItems(), sortOptions);\n this.sortedItems = items;\n\n this._layout(items); // `_layout` always happens after `_shrink`, so it's safe to process the style\n // queue here with styles from the shrink method.\n\n\n this._processQueue(); // Adjust the height of the container.\n\n\n this._setContainerSize();\n\n this.lastSort = sortOptions;\n }\n /**\n * Reposition everything.\n * @param {object} options options object\n * @param {boolean} [options.recalculateSizes=true] Whether to calculate column, gutter, and container widths again.\n * @param {boolean} [options.force=false] By default, `update` does nothing if the instance is disabled. Setting this\n * to true forces the update to happen regardless.\n */\n\n\n update() {\n let {\n recalculateSizes = true,\n force = false\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (this.isEnabled || force) {\n if (recalculateSizes) {\n this._setColumns();\n } // Layout items\n\n\n this.sort();\n }\n }\n /**\n * Use this instead of `update()` if you don't need the columns and gutters updated\n * Maybe an image inside `shuffle` loaded (and now has a height), which means calculations\n * could be off.\n */\n\n\n layout() {\n this.update({\n recalculateSizes: true\n });\n }\n /**\n * New items have been appended to shuffle. Mix them in with the current\n * filter or sort status.\n * @param {Element[]} newItems Collection of new items.\n */\n\n\n add(newItems) {\n const items = arrayUnique(newItems).map(el => new ShuffleItem(el, this.options.isRTL)); // Add classes and set initial positions.\n\n this._initItems(items); // Determine which items will go with the current filter.\n\n\n this._resetCols();\n\n const allItems = this._mergeNewItems(items);\n\n const sortedItems = sorter(allItems, this.lastSort);\n\n const allSortedItemsSet = this._filter(this.lastFilter, sortedItems);\n\n const isNewItem = item => items.includes(item);\n\n const applyHiddenState = item => {\n item.scale = ShuffleItem.Scale.HIDDEN;\n item.isHidden = true;\n item.applyCss(ShuffleItem.Css.HIDDEN.before);\n item.applyCss(ShuffleItem.Css.HIDDEN.after);\n }; // Layout all items again so that new items get positions.\n // Synchonously apply positions.\n\n\n const itemPositions = this._getNextPositions(allSortedItemsSet.visible);\n\n allSortedItemsSet.visible.forEach((item, i) => {\n if (isNewItem(item)) {\n item.point = itemPositions[i];\n applyHiddenState(item);\n item.applyCss(this.getStylesForTransition(item, {}));\n }\n });\n allSortedItemsSet.hidden.forEach(item => {\n if (isNewItem(item)) {\n applyHiddenState(item);\n }\n }); // Cause layout so that the styles above are applied.\n\n this.element.offsetWidth; // eslint-disable-line no-unused-expressions\n // Add transition to each item.\n\n this.setItemTransitions(items); // Update the list of items.\n\n this.items = this._mergeNewItems(items); // Update layout/visibility of new and old items.\n\n this.filter(this.lastFilter);\n }\n /**\n * Disables shuffle from updating dimensions and layout on resize\n */\n\n\n disable() {\n this.isEnabled = false;\n }\n /**\n * Enables shuffle again\n * @param {boolean} [isUpdateLayout=true] if undefined, shuffle will update columns and gutters\n */\n\n\n enable() {\n let isUpdateLayout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n this.isEnabled = true;\n\n if (isUpdateLayout) {\n this.update();\n }\n }\n /**\n * Remove 1 or more shuffle items.\n * @param {Element[]} elements An array containing one or more\n * elements in shuffle\n * @return {Shuffle} The shuffle instance.\n */\n\n\n remove(elements) {\n if (!elements.length) {\n return;\n }\n\n const collection = arrayUnique(elements);\n const oldItems = collection.map(element => this.getItemByElement(element)).filter(item => !!item);\n\n const handleLayout = () => {\n this._disposeItems(oldItems); // Remove the collection in the callback\n\n\n collection.forEach(element => {\n element.parentNode.removeChild(element);\n });\n\n this._dispatch(Shuffle.EventType.REMOVED, {\n collection\n });\n }; // Hide collection first.\n\n\n this._toggleFilterClasses({\n visible: [],\n hidden: oldItems\n });\n\n this._shrink(oldItems);\n\n this.sort(); // Update the list of items here because `remove` could be called again\n // with an item that is in the process of being removed.\n\n this.items = this.items.filter(item => !oldItems.includes(item));\n\n this._updateItemCount();\n\n this.once(Shuffle.EventType.LAYOUT, handleLayout);\n }\n /**\n * Retrieve a shuffle item by its element.\n * @param {Element} element Element to look for.\n * @return {?ShuffleItem} A shuffle item or undefined if it's not found.\n */\n\n\n getItemByElement(element) {\n return this.items.find(item => item.element === element);\n }\n /**\n * Dump the elements currently stored and reinitialize all child elements which\n * match the `itemSelector`.\n */\n\n\n resetItems() {\n // Remove refs to current items.\n this._disposeItems(this.items);\n\n this.isInitialized = false; // Find new items in the DOM.\n\n this.items = this._getItems(); // Set initial styles on the new items.\n\n this._initItems(this.items);\n\n this.once(Shuffle.EventType.LAYOUT, () => {\n // Add transition to each item.\n this.setItemTransitions(this.items);\n this.isInitialized = true;\n }); // Lay out all items.\n\n this.filter(this.lastFilter);\n }\n /**\n * Destroys shuffle, removes events, styles, and classes\n */\n\n\n destroy() {\n this._cancelMovement();\n\n if (this._resizeObserver) {\n this._resizeObserver.unobserve(this.element);\n\n this._resizeObserver = null;\n } // Reset container styles\n\n\n this.element.classList.remove('shuffle');\n this.element.removeAttribute('style'); // Reset individual item styles\n\n this._disposeItems(this.items);\n\n this.items.length = 0;\n this.sortedItems.length = 0;\n this._transitions.length = 0; // Null DOM references\n\n this.options.sizer = null;\n this.element = null; // Set a flag so if a debounced resize has been triggered,\n // it can first check if it is actually isDestroyed and not doing anything\n\n this.isDestroyed = true;\n this.isEnabled = false;\n }\n /**\n * Returns the outer width of an element, optionally including its margins.\n *\n * There are a few different methods for getting the width of an element, none of\n * which work perfectly for all Shuffle's use cases.\n *\n * 1. getBoundingClientRect() `left` and `right` properties.\n * - Accounts for transform scaled elements, making it useless for Shuffle\n * elements which have shrunk.\n * 2. The `offsetWidth` property.\n * - This value stays the same regardless of the elements transform property,\n * however, it does not return subpixel values.\n * 3. getComputedStyle()\n * - This works great Chrome, Firefox, Safari, but IE<=11 does not include\n * padding and border when box-sizing: border-box is set, requiring a feature\n * test and extra work to add the padding back for IE and other browsers which\n * follow the W3C spec here.\n *\n * @param {Element} element The element.\n * @param {boolean} [includeMargins=false] Whether to include margins.\n * @return {{width: number, height: number}} The width and height.\n */\n\n\n static getSize(element) {\n let includeMargins = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // Store the styles so that they can be used by others without asking for it again.\n const styles = window.getComputedStyle(element, null);\n let width = getNumberStyle(element, 'width', styles);\n let height = getNumberStyle(element, 'height', styles);\n\n if (includeMargins) {\n const marginLeft = getNumberStyle(element, 'marginLeft', styles);\n const marginRight = getNumberStyle(element, 'marginRight', styles);\n const marginTop = getNumberStyle(element, 'marginTop', styles);\n const marginBottom = getNumberStyle(element, 'marginBottom', styles);\n width += marginLeft + marginRight;\n height += marginTop + marginBottom;\n }\n\n return {\n width,\n height\n };\n }\n /**\n * Change a property or execute a function which will not have a transition\n * @param {Element[]} elements DOM elements that won't be transitioned.\n * @param {function} callback A function which will be called while transition\n * is set to 0ms.\n * @private\n */\n\n\n static _skipTransitions(elements, callback) {\n const zero = '0ms'; // Save current duration and delay.\n\n const data = elements.map(element => {\n const {\n style\n } = element;\n const duration = style.transitionDuration;\n const delay = style.transitionDelay; // Set the duration to zero so it happens immediately\n\n style.transitionDuration = zero;\n style.transitionDelay = zero;\n return {\n duration,\n delay\n };\n });\n callback(); // Cause forced synchronous layout.\n\n elements[0].offsetWidth; // eslint-disable-line no-unused-expressions\n // Put the duration back\n\n elements.forEach((element, i) => {\n element.style.transitionDuration = data[i].duration;\n element.style.transitionDelay = data[i].delay;\n });\n }\n\n}\n\nShuffle.ShuffleItem = ShuffleItem;\nShuffle.ALL_ITEMS = 'all';\nShuffle.FILTER_ATTRIBUTE_KEY = 'groups';\n/** @enum {string} */\n\nShuffle.EventType = {\n LAYOUT: 'shuffle:layout',\n REMOVED: 'shuffle:removed'\n};\n/** @enum {string} */\n\nShuffle.Classes = Classes;\n/** @enum {string} */\n\nShuffle.FilterMode = {\n ANY: 'any',\n ALL: 'all'\n}; // Overrideable options\n\nShuffle.options = {\n // Initial filter group.\n group: Shuffle.ALL_ITEMS,\n // Transition/animation speed (milliseconds).\n speed: 250,\n // CSS easing function to use.\n easing: 'cubic-bezier(0.4, 0.0, 0.2, 1)',\n // e.g. '.picture-item'.\n itemSelector: '*',\n // Element or selector string. Use an element to determine the size of columns\n // and gutters.\n sizer: null,\n // A static number or function that tells the plugin how wide the gutters\n // between columns are (in pixels).\n gutterWidth: 0,\n // A static number or function that returns a number which tells the plugin\n // how wide the columns are (in pixels).\n columnWidth: 0,\n // If your group is not json, and is comma delimited, you could set delimiter\n // to ','.\n delimiter: null,\n // Useful for percentage based heights when they might not always be exactly\n // the same (in pixels).\n buffer: 0,\n // Reading the width of elements isn't precise enough and can cause columns to\n // jump between values.\n columnThreshold: 0.01,\n // Shuffle can be initialized with a sort object. It is the same object\n // given to the sort method.\n initialSort: null,\n // Transition delay offset for each item in milliseconds.\n staggerAmount: 15,\n // Maximum stagger delay in milliseconds.\n staggerAmountMax: 150,\n // Whether to use transforms or absolute positioning.\n useTransforms: true,\n // Affects using an array with filter. e.g. `filter(['one', 'two'])`. With \"any\",\n // the element passes the test if any of its groups are in the array. With \"all\",\n // the element only passes if all groups are in the array.\n // Note, this has no effect if you supply a custom filter function.\n filterMode: Shuffle.FilterMode.ANY,\n // Attempt to center grid items in each row.\n isCentered: false,\n // Attempt to align grid items to right.\n isRTL: false,\n // Whether to round pixel values used in translate(x, y). This usually avoids\n // blurriness.\n roundTransforms: true\n};\nShuffle.Point = Point;\nShuffle.Rect = Rect; // Expose for testing. Hack at your own risk.\n\nShuffle.__sorter = sorter;\nShuffle.__getColumnSpan = getColumnSpan;\nShuffle.__getAvailablePositions = getAvailablePositions;\nShuffle.__getShortColumn = getShortColumn;\nShuffle.__getCenteredPositions = getCenteredPositions;\n\nexport { Shuffle as default };\n//# sourceMappingURL=shuffle.esm.js.map\n","import * as fecha from \"fecha\";\r\nimport HotelDatepicker from \"hotel-datepicker\";\r\nimport Shuffle from 'shufflejs';\r\nimport GLightbox from 'glightbox';\r\n\r\nclass Filters {\r\n constructor() {\r\n this.initFilters();\r\n }\r\n initFilters(){\r\n let filterInit = false;\r\n const filterBtn = document.querySelector('.js-filters__lightbox-trigger');\r\n const f = this;\r\n if(filterBtn){\r\n filterBtn.addEventListener('click', function(ev){\r\n if(!filterInit){\r\n f.activateFilters();\r\n filterInit = true;\r\n filterBtn.click();\r\n }\r\n });\r\n }\r\n }\r\n activateFilters(){\r\n // Check for result groups\r\n const f = this;\r\n const resultGroups = document.querySelectorAll('.js-shuffle__results');\r\n if (resultGroups.length > 0) {\r\n\r\n // For each result group\r\n for (let results of resultGroups) {\r\n const resultsId = results.getAttribute('id');\r\n\r\n // Check for load more functionality\r\n // TODO: Remove all load more checks\r\n let loadMore = false;\r\n\r\n // Check for filters\r\n const filters = document.querySelector('.js-filters[data-results=\"' + resultsId + '\"]');\r\n const items = results.querySelectorAll('.js-shuffle__result');\r\n \r\n // Set equal height to results\r\n function setEqualRowHeight(list) {\r\n // TODO: Make responsive somehow to screen resize\r\n if (window.matchMedia('all and (min-width: 768px)').matches) {\r\n let largestHeight = 0;\r\n for (let item of list) {\r\n if (item.offsetHeight > largestHeight)\r\n largestHeight = item.offsetHeight;\r\n \r\n }\r\n for (let item of list) {\r\n item.setAttribute('style', 'height:' + largestHeight + 'px');\r\n }\r\n }\r\n }\r\n setEqualRowHeight(items);\r\n \r\n // Check for results counter\r\n const resultsCounter = results.parentElement.querySelector('.js-shuffle__count');\r\n\r\n // Count functionality\r\n function updateCount(filtersCount, resultsCount, totalCount, filtersCounter, resultsCounter, resultsText, loadMore, reset) {\r\n resultsText = document.querySelector('.js-shuffle__no-results-text');\r\n if (filtersCount && filtersCounter) {\r\n filtersCounter.innerHTML = filtersCount;\r\n }\r\n if (resultsCount >= 0 && resultsText) {\r\n const counterTotal = resultsCounter.querySelector('.js-shuffle__count-total');\r\n const counterVisible = resultsCounter.querySelector('.js-shuffle__count-visible');\r\n resultsCounter.classList.add('-active');\r\n if (counterTotal)\r\n counterTotal.innerHTML = totalCount;\r\n if (counterVisible)\r\n counterVisible.innerHTML = resultsCount;\r\n\r\n const noResultsText = resultsText.nextElementSibling;\r\n const loadMoreBtn = null;\r\n\r\n if (resultsCount == 0 && !reset) {\r\n if (resultsText) {\r\n resultsText.classList.add('-active');\r\n }\r\n } else {\r\n if (loadMoreBtn) {\r\n loadMoreBtn.removeAttribute('data-reset');\r\n reset = null;\r\n }\r\n if(resultsText){\r\n resultsText.classList.remove('-active');\r\n }\r\n \r\n \r\n }\r\n }\r\n }\r\n\r\n // Init shuffle\r\n \r\n // TODO: Ditch shuffle\r\n let shuffleInstance = new Shuffle(document.getElementById(resultsId), {\r\n itemSelector: '.js-shuffle__result',\r\n columnThreshold: 1,\r\n delimiter: ',',\r\n sizer: '.js-shuffle__sizer',\r\n filterMode: 'all'\r\n });\r\n \r\n // Check for filters\r\n if (filters) {\r\n \r\n let selectedFilters = [];\r\n let selectedDateRange = '';\r\n let submittedOnce = false;\r\n let filterDateRange = [];\r\n let hasTag = false;\r\n let datesInRange = false;\r\n const resultsText = results.querySelectorAll('.js-shuffle__no-results-text');\r\n\r\n // Programtically trigger select changes\r\n function triggerChange(element) {\r\n let changeEvent = new Event('change');\r\n element.dispatchEvent(changeEvent);\r\n }\r\n\r\n // Custom select functionality\r\n function initSelects(selects) {\r\n \r\n for (let select of selects) {\r\n \r\n const native = select.querySelector('.js-select__native');\r\n\r\n if (native) {\r\n\r\n native.onclick = () => {\r\n \r\n for (let select of selects) { \r\n select.classList.remove('-open');\r\n select.querySelector('.js-select__native').classList.remove('-focused');\r\n native.blur();\r\n }\r\n select.classList.add('-open');\r\n native.classList.add('-focused');\r\n };\r\n native.onchange = () => {\r\n select.classList.remove('-open');\r\n native.classList.remove('-focused');\r\n };\r\n\r\n const custom = select.querySelector('.js-select__custom');\r\n const customOptions = custom.querySelectorAll('a');\r\n\r\n if (customOptions.length > 0) {\r\n\r\n for (let customOption of customOptions) {\r\n\r\n if (!customOption.classList.contains('select__faux')) {\r\n customOption.onclick = (event) => {\r\n event.preventDefault();\r\n const group = customOption.getAttribute('data-group');\r\n const text = customOption.innerHTML;\r\n native.value = group;\r\n triggerChange(native);\r\n custom.querySelector('li:first-child a').innerHTML = text;\r\n };\r\n }\r\n else {\r\n customOption.onclick = (event) => {\r\n event.preventDefault();\r\n select.classList.remove('-open');\r\n native.classList.remove('-focused');\r\n };\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Datepicker settings\r\n function initDatepickers(datepickers) {\r\n\r\n for (let datepicker of datepickers) {\r\n datepicker = document.getElementById(datepicker.getAttribute('id'));\r\n new HotelDatepicker(datepicker, {\r\n inline: true,\r\n moveBothMonths: true\r\n // clearButton: true,\r\n // submitButton: true,\r\n // topbarPosition: 'bottom'\r\n });\r\n }\r\n }\r\n\r\n // Date ranges within date ranges...\r\n function getDatesInRange(startDate, endDate) {\r\n const date = new Date(startDate.getTime());\r\n const dates = [];\r\n \r\n while (date <= endDate) {\r\n dates.push(new Date(date));\r\n date.setDate(date.getDate() + 1);\r\n }\r\n return dates;\r\n }\r\n\r\n // Filtering for events\r\n function inDateRange(filterTags, resultTags, resultStartDate, resultEndDate, filterStartDate, filterEndDate) {\r\n hasTag = false;\r\n datesInRange = false;\r\n let tagsAllMatch = false;\r\n let matchCount = 0;\r\n\r\n if (filterTags && resultTags) {\r\n for (let filterTag of filterTags) {\r\n for (let resultTag of resultTags.split(',')) {\r\n if (filterTag == resultTag) {\r\n hasTag = true;\r\n matchCount++;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if(matchCount == filterTags.length){\r\n tagsAllMatch = true;\r\n }\r\n if (filterStartDate && filterEndDate) {\r\n const resultDateRange = getDatesInRange(resultStartDate, resultEndDate);\r\n filterDateRange = getDatesInRange(filterStartDate, filterEndDate);\r\n\r\n for (let resultDate of resultDateRange) {\r\n resultDate = resultDate.toISOString().split('T')[0];\r\n\r\n for (let filterDate of filterDateRange) {\r\n filterDate = filterDate.toISOString().split('T')[0];\r\n\r\n if (resultDate == filterDate)\r\n datesInRange = true;\r\n }\r\n }\r\n }\r\n\r\n // LOGIC FOR EVENTS\r\n if (tagsAllMatch && datesInRange)\r\n return true;\r\n if (tagsAllMatch && !filterStartDate && !filterEndDate)\r\n return true;\r\n if (!filterTags.length > 0 && datesInRange)\r\n return true;\r\n if (!filterTags.length > 0 && !filterStartDate && !filterEndDate)\r\n return true;\r\n\r\n }\r\n\r\n // Reset filters functionality\r\n function resetFilters(selects, checkboxes, radios, datepickers, shuffleInstance, filtersCounter, resultsCounter, resultsText, resultsList) {\r\n\r\n if (selects.length > 0) {\r\n for (let select of selects) {\r\n let selectNative = select.querySelector('.js-select__native');\r\n selectNative.value = '';\r\n triggerChange(selectNative);\r\n }\r\n }\r\n if (checkboxes.length > 0) {\r\n for (let checkbox of checkboxes) {\r\n if (checkbox.hasAttribute('checked')) \r\n checkbox.checked = true;\r\n else\r\n checkbox.checked = false;\r\n }\r\n }\r\n if (radios.length > 0) {\r\n for (let radio of radios) {\r\n if (radio.hasAttribute('checked')) \r\n radio.checked = true;\r\n else\r\n radio.checked = false;\r\n }\r\n }\r\n if (datepickers.length > 0) {\r\n for (let datepicker of datepickers) {\r\n const parent = datepicker.parentElement;\r\n const daySelected = parent.querySelector('.datepicker__month-day--first-day-selected');\r\n\r\n if (daySelected) {\r\n parent.querySelector('.datepicker__month-day--first-day-selected').click();\r\n parent.querySelector('.datepicker__month-day--first-day-selected').click();\r\n datepicker.value = '';\r\n }\r\n }\r\n }\r\n // let resultsItems = resultsList.querySelectorAll('.js-shuffle__results');\r\n // const loadMoreBtn = resultsList.parentElement.querySelector('.js-shuffle__btn');\r\n\r\n shuffleInstance.filter();\r\n updateCount(null, shuffleInstance.visibleItems, shuffleInstance.items.length, null, resultsCounter, resultsText, false, true);\r\n\r\n selectedFilters = [];\r\n selectedDateRange = '';\r\n submittedOnce = false;\r\n filterDateRange = [];\r\n }\r\n\r\n // Submit filters functionality\r\n // TODO: Add radio\r\n function submitFilters(submit, resets, selects, checkboxes, radios, datepickers, shuffleInstance, filtersCounter, resultsCounter, resultsText, filtersLightbox, results, loadMore) {\r\n let i = 0;\r\n let shuffleFilters = [];\r\n if (selects.length > 0) {\r\n for (let select of selects) {\r\n const selectNative = select.querySelector('.js-select__native');\r\n\r\n if (selectNative.value) {\r\n shuffleFilters.push(selectNative.value);\r\n i++;\r\n }\r\n }\r\n }\r\n if (checkboxes.length > 0) {\r\n for (let checkbox of checkboxes) {\r\n if (checkbox.checked) {\r\n shuffleFilters.push(checkbox.getAttribute('data-group'));\r\n i++;\r\n }\r\n }\r\n }\r\n if (radios.length > 0) {\r\n for (let radio of radios) {\r\n if (radio.checked) {\r\n shuffleFilters.push(radio.getAttribute('data-group'));\r\n i++;\r\n }\r\n }\r\n }\r\n // TODO: RADIO CHECK\r\n let filterStartDate = '';\r\n let filterEndDate = '';\r\n if (datepickers.length > 0) {\r\n\r\n for (let datepicker of datepickers) {\r\n const value = datepicker.value;\r\n\r\n if (value) {\r\n filterStartDate = new Date(value.split(' - ')[0]);\r\n filterStartDate.setDate(filterStartDate.getDate());\r\n filterEndDate = new Date(value.split(' - ')[1]);\r\n filterEndDate.setDate(filterEndDate.getDate());\r\n i++;\r\n selectedDateRange = value;\r\n }\r\n }\r\n }\r\n if (datepickers.length > 0) {\r\n // IF THE LIGHTBOX HAS DATES\r\n if (shuffleFilters.length > 0){\r\n // FILTER WITH DATES AND OTHER OPTIONS\r\n shuffleInstance.filter(\r\n (element) => inDateRange(\r\n shuffleFilters,\r\n element.dataset.groups,\r\n new Date(element.getAttribute('data-startDate')),\r\n new Date(element.getAttribute('data-endDate')),\r\n filterStartDate,\r\n filterEndDate\r\n )\r\n );\r\n }\r\n else{\r\n // FILTERS BEING APPLIED WITHOUT A SELECTION\r\n shuffleInstance.filter(\r\n (element) => inDateRange(\r\n shuffleFilters,\r\n element.dataset.groups,\r\n new Date(element.getAttribute('data-startDate')),\r\n new Date(element.getAttribute('data-endDate')),\r\n filterStartDate,\r\n filterEndDate\r\n )\r\n );\r\n }\r\n \r\n\r\n } else {\r\n\r\n if (!loadMore) {\r\n Shuffle.FilterMode.ALL;\r\n }\r\n if (shuffleFilters.length > 0) {\r\n shuffleInstance.filter(shuffleFilters);\r\n } else {\r\n shuffleInstance.filter();\r\n }\r\n }\r\n\r\n let filteredResults = results.querySelectorAll('.shuffle-item--visible.-visible');\r\n if (!loadMore) {\r\n filteredResults = results.querySelectorAll('.shuffle-item--visible');\r\n }\r\n\r\n if (filteredResults.length > 0) {\r\n updateCount(null, filteredResults.length, shuffleInstance.items.length, filtersCounter, resultsCounter, resultsText, true, false)\r\n } else {\r\n updateCount(0, 0, shuffleInstance.items.length, filtersCounter, resultsCounter, resultsText, true, false);\r\n }\r\n\r\n if (filtersLightbox) {\r\n selectedFilters = shuffleFilters;\r\n\r\n if (filtersCounter) {\r\n\r\n if (i > 0) \r\n filtersCounter.innerHTML = i\r\n else\r\n filtersCounter.innerHTML = '';\r\n }\r\n if (selectedFilters.length == 0 && selectedDateRange == '') {\r\n\r\n for (let reset of resets) {\r\n reset.click();\r\n break;\r\n }\r\n filtersLightbox.close();\r\n \r\n } else {\r\n\r\n if (submittedOnce) {\r\n submit.click();\r\n filtersLightbox.close();\r\n\r\n } else {\r\n\r\n filtersLightbox.close();\r\n submittedOnce = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Activate filter controls for a set of results\r\n function initFilterControls(filterGroup, shuffleInstance, filtersCounter, resultsCounter, resultsText, filtersLightbox, filterLightboxTrigger, results) {\r\n \r\n if (filterGroup) {\r\n \r\n let resets;\r\n\r\n if (filtersLightbox) {\r\n\r\n // Reset filters to newly generated markup\r\n const lightbox = document.querySelector('.glightbox-container');\r\n filterGroup = lightbox.querySelector('.js-filters');\r\n\r\n // Add close functionality to newly generated markup\r\n const close = filterGroup.querySelector('.js-filters__btn-close');\r\n if (close) {\r\n close.onclick = () => { \r\n filtersLightbox.close();\r\n }\r\n }\r\n resets = document.querySelectorAll('.js-filters__btn-reset');\r\n } else {\r\n resets = document.querySelectorAll('.js-filters__btn-reset');\r\n }\r\n\r\n // Gather filter controls\r\n // TODO: Add radios\r\n const selects = filterGroup.querySelectorAll('.js-select__wrap');\r\n const checkboxes = filterGroup.querySelectorAll('input[type=\"checkbox\"]');\r\n const radios = filterGroup.querySelectorAll('input[type=\"radio\"]');\r\n const datepickers = filterGroup.querySelectorAll('.js-filters__datepicker-input');\r\n const submit = filterGroup.querySelector('.js-filters__btn-submit');\r\n \r\n // Fill in previous selections\r\n if (selectedDateRange) {\r\n for (let datepicker of datepickers) {\r\n datepicker.value = selectedDateRange;\r\n }\r\n }\r\n if (selectedFilters.length > 0) {\r\n\r\n for (let filter of selectedFilters) {\r\n \r\n for (let checkbox of checkboxes) {\r\n if (checkbox.getAttribute('data-group') === filter) {\r\n checkbox.checked = true;\r\n }\r\n }\r\n for (let radio of radios) {\r\n if (radio.getAttribute('data-group') === filter) {\r\n radio.checked = true;\r\n }\r\n }\r\n for (let select of selects) {\r\n const options = select.querySelectorAll('option');\r\n for (let option of options) {\r\n if (option.getAttribute('data-group') === filter) {\r\n option.selected = true;\r\n triggerChange(select);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Initiate all filter controls\r\n if (selects.length > 0)\r\n initSelects(selects);\r\n\r\n if (datepickers.length > 0)\r\n initDatepickers(datepickers);\r\n\r\n if (resets.length > 0) {\r\n\r\n for (let reset of resets) {\r\n reset.onclick = () => resetFilters(selects, checkboxes, radios, datepickers, shuffleInstance, filtersCounter, resultsCounter, resultsText, results);\r\n }\r\n }\r\n if (submit){\r\n const resultsText = results.querySelectorAll('.js-shuffle__no-results-text'); \r\n submit.onclick = () => submitFilters(submit, resets, selects, checkboxes, radios, datepickers, shuffleInstance, filtersCounter, resultsCounter, resultsText, filtersLightbox, results, loadMore);\r\n }\r\n \r\n\r\n // Update counters with visible count on page load\r\n // window.addEventListener('load', () => {\r\n\r\n // if (filterLightboxTrigger)\r\n // updateCount(0, shuffleInstance.visibleItems, 10, filtersCounter, resultsCounter, null, true, false)\r\n // else if (resultsText)\r\n // updateCount(0, shuffleInstance.visibleItems, 10, filtersCounter, resultsCounter, resultsText, true, false); \r\n // });\r\n }\r\n }\r\n\r\n // Check for lightbox content\r\n const filtersLightbox = filters.parentElement;\r\n if (filtersLightbox && filtersLightbox.classList.contains('filters__lightbox-content')) {\r\n\r\n // Check for lightbox trigger\r\n const filtersLightboxTrigger = filtersLightbox.previousElementSibling;\r\n if (filtersLightboxTrigger && filtersLightboxTrigger.classList.contains('js-filters__lightbox-trigger')) {\r\n\r\n // Initiate glightbox\r\n const filtersLightboxContent = filtersLightbox.innerHTML;\r\n const glightbox = GLightbox({\r\n elements: [{'content': filtersLightboxContent}],\r\n draggable: false,\r\n zoomable: false,\r\n width: 900,\r\n height: 900,\r\n skin: 'filters'\r\n });\r\n\r\n // Check for filters counter\r\n const filtersCounter = filtersLightboxTrigger.parentElement.querySelector('js-filters__count');\r\n\r\n // Initiate filters on lightbox open\r\n glightbox.on('open', () => {\r\n initFilterControls(filters, shuffleInstance, filtersCounter, resultsCounter, resultsCounter, glightbox, filtersLightboxTrigger, results);\r\n });\r\n filtersLightboxTrigger.onclick = () => {\r\n glightbox.open();\r\n }\r\n\r\n // Remove original markup so there are no duplicate IDs and inputs in the DOM\r\n filtersLightbox.remove();\r\n }\r\n } else {\r\n\r\n // Initiate on-page filters\r\n //initFilterControls(filters, shuffleInstance, null, resultsCounter, resultsCounter, null, null, results);\r\n }\r\n\r\n }\r\n }// End loop of result group\r\n }\r\n }\r\n}\r\nexport default Filters;","class LoadMore {\r\n constructor() {\r\n this.initLoadMore();\r\n }\r\n initLoadMore(){\r\n\r\n // Check for result groups\r\n const resultGroups = document.querySelectorAll('.js-shuffle__load-more');\r\n if (resultGroups.length > 0) {\r\n\r\n // For each result group\r\n for (let results of resultGroups) {\r\n const resultsId = results.getAttribute('id');\r\n\r\n // Check for results counter\r\n const resultsCounter = results.parentElement.querySelector('.js-shuffle__count');\r\n const shuffleInstance = null;\r\n let lastLoadMoreCount = 0;\r\n\r\n // Count functionality\r\n function updateCount(filtersCount, resultsCount, totalCount, filtersCounter, resultsCounter, resultsText, loadMore, reset) {\r\n\r\n if (filtersCount && filtersCounter) {\r\n filtersCounter.innerHTML = filtersCount;\r\n }\r\n if (resultsCount >= 0 && resultsText) {\r\n \r\n const counterTotal = resultsCounter.querySelector('.js-shuffle__count-total');\r\n const counterVisible = resultsCounter.querySelector('.js-shuffle__count-visible');\r\n\r\n if (counterTotal)\r\n counterTotal.innerHTML = totalCount;\r\n if (counterVisible)\r\n counterVisible.innerHTML = resultsCount;\r\n\r\n }\r\n }\r\n\r\n const items = results.querySelectorAll('.js-shuffle__result');\r\n const loadMoreBtn = results.parentElement.querySelector('.js-shuffle__btn');\r\n let itemsLoaded = 0;\r\n\r\n // Load more functionality\r\n function loadMore(perPage, page, results, shuffleInstance, reset) {\r\n const resultsId = results.getAttribute('id');\r\n // const filters = document.querySelector('[data-results=\"' + resultsId + '\"]');\r\n const items = results.querySelectorAll('.js-shuffle__result');\r\n const loadMoreBtn = results.parentElement.querySelector('.js-shuffle__btn');\r\n const loadMoreCount = results.parentElement.querySelector('.js-shuffle__count');\r\n perPage = Number(perPage);\r\n page = Number(page);\r\n itemsLoaded = 0;\r\n let visibleItems = results.querySelectorAll('.js-shuffle__result.-visible');\r\n for (let item of items) {\r\n if (itemsLoaded < (perPage * page)) {\r\n item.classList.remove('-hidden');\r\n item.classList.add('-visible');\r\n itemsLoaded++;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n updateCount(null, itemsLoaded, items.length, null, loadMoreCount, loadMoreCount, true, false);\r\n\r\n if (items.length == itemsLoaded) {\r\n loadMoreBtn.classList.remove('-active');\r\n }\r\n\r\n lastLoadMoreCount = itemsLoaded + perPage;\r\n loadMoreBtn.blur();\r\n\r\n }\r\n\r\n // Bind load more\r\n let page = results.getAttribute('data-page');\r\n let perPage = results.getAttribute('data-per-page');\r\n const loadMoreCount = results.parentElement.querySelector('.js-shuffle__count');\r\n updateCount(null, 3, items.length, null, loadMoreCount, loadMoreCount, true, false);\r\n loadMoreBtn.addEventListener('click', () => {\r\n page++;\r\n loadMore(perPage, page, results, shuffleInstance);\r\n results.setAttribute('data-page', page);\r\n });\r\n results.setAttribute('data-page', page);\r\n \r\n \r\n }// End loop of result group\r\n }\r\n }\r\n}\r\nexport default LoadMore;","class Tabs {\r\n constructor() {\r\n this.initTabs();\r\n }\r\n initTabs(){\r\n const ctrlSets = document.querySelectorAll('.js-ctrls-tabs');\r\n\r\n if (ctrlSets.length > 0) {\r\n\r\n for (let ctrlSet of ctrlSets) {\r\n const ctrls = ctrlSet.querySelectorAll('.js-ctrl-tab-btn');\r\n\r\n for (let ctrl of ctrls) {\r\n const tabName = ctrl.getAttribute('data-tab');\r\n const tab = document.querySelector('.js-tab[data-tab=\"' + tabName + '\"]');\r\n var tabSiblings = n => [...n.parentElement.children].filter(c=>c!=n);\r\n var ctrlSiblings = n => [...n.parentElement.parentElement.children].filter(c=>c!=n);\r\n \r\n ctrl.addEventListener('click', () => {\r\n \r\n for (let tabSibling of tabSiblings(tab)) {\r\n tabSibling.classList.remove('-active');\r\n }\r\n for (let ctrlSibling of ctrlSiblings(ctrl)) {\r\n ctrlSibling.querySelector('.js-ctrl-btn').classList.remove('-active');\r\n }\r\n tab.classList.add('-active');\r\n ctrl.classList.add('-active');\r\n });\r\n }\r\n document.addEventListener(\"DOMContentLoaded\", () => {\r\n ctrls[0].click();\r\n });\r\n }\r\n }\r\n }\r\n}\r\nexport default Tabs;","/*!\n * Glide.js v3.6.0\n * (c) 2013-2022 Jędrzej Chałubek (https://github.com/jedrzejchalubek/)\n * Released under the MIT License.\n */\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nfunction _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n}\n\nvar defaults = {\n /**\n * Type of the movement.\n *\n * Available types:\n * `slider` - Rewinds slider to the start/end when it reaches the first or last slide.\n * `carousel` - Changes slides without starting over when it reaches the first or last slide.\n *\n * @type {String}\n */\n type: 'slider',\n\n /**\n * Start at specific slide number defined with zero-based index.\n *\n * @type {Number}\n */\n startAt: 0,\n\n /**\n * A number of slides visible on the single viewport.\n *\n * @type {Number}\n */\n perView: 1,\n\n /**\n * Focus currently active slide at a specified position in the track.\n *\n * Available inputs:\n * `center` - Current slide will be always focused at the center of a track.\n * `0,1,2,3...` - Current slide will be focused on the specified zero-based index.\n *\n * @type {String|Number}\n */\n focusAt: 0,\n\n /**\n * A size of the gap added between slides.\n *\n * @type {Number}\n */\n gap: 10,\n\n /**\n * Change slides after a specified interval. Use `false` for turning off autoplay.\n *\n * @type {Number|Boolean}\n */\n autoplay: false,\n\n /**\n * Stop autoplay on mouseover event.\n *\n * @type {Boolean}\n */\n hoverpause: true,\n\n /**\n * Allow for changing slides with left and right keyboard arrows.\n *\n * @type {Boolean}\n */\n keyboard: true,\n\n /**\n * Stop running `perView` number of slides from the end. Use this\n * option if you don't want to have an empty space after\n * a slider. Works only with `slider` type and a\n * non-centered `focusAt` setting.\n *\n * @type {Boolean}\n */\n bound: false,\n\n /**\n * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping.\n *\n * @type {Number|Boolean}\n */\n swipeThreshold: 80,\n\n /**\n * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging.\n *\n * @type {Number|Boolean}\n */\n dragThreshold: 120,\n\n /**\n * A number of slides moved on single swipe.\n *\n * Available types:\n * `` - Moves slider by one slide per swipe\n * `|` - Moves slider between views per swipe (number of slides defined in `perView` options)\n *\n * @type {String}\n */\n perSwipe: '',\n\n /**\n * Moving distance ratio of the slides on a swiping and dragging.\n *\n * @type {Number}\n */\n touchRatio: 0.5,\n\n /**\n * Angle required to activate slides moving on swiping or dragging.\n *\n * @type {Number}\n */\n touchAngle: 45,\n\n /**\n * Duration of the animation in milliseconds.\n *\n * @type {Number}\n */\n animationDuration: 400,\n\n /**\n * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end.\n *\n * @type {Boolean}\n */\n rewind: true,\n\n /**\n * Duration of the rewinding animation of the `slider` type in milliseconds.\n *\n * @type {Number}\n */\n rewindDuration: 800,\n\n /**\n * Easing function for the animation.\n *\n * @type {String}\n */\n animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)',\n\n /**\n * Wait for the animation to finish until the next user input can be processed\n *\n * @type {boolean}\n */\n waitForTransition: true,\n\n /**\n * Throttle costly events at most once per every wait milliseconds.\n *\n * @type {Number}\n */\n throttle: 10,\n\n /**\n * Moving direction mode.\n *\n * Available inputs:\n * - 'ltr' - left to right movement,\n * - 'rtl' - right to left movement.\n *\n * @type {String}\n */\n direction: 'ltr',\n\n /**\n * The distance value of the next and previous viewports which\n * have to peek in the current view. Accepts number and\n * pixels as a string. Left and right peeking can be\n * set up separately with a directions object.\n *\n * For example:\n * `100` - Peek 100px on the both sides.\n * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side.\n *\n * @type {Number|String|Object}\n */\n peek: 0,\n\n /**\n * Defines how many clones of current viewport will be generated.\n *\n * @type {Number}\n */\n cloningRatio: 1,\n\n /**\n * Collection of options applied at specified media breakpoints.\n * For example: display two slides per view under 800px.\n * `{\n * '800px': {\n * perView: 2\n * }\n * }`\n */\n breakpoints: {},\n\n /**\n * Collection of internally used HTML classes.\n *\n * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object\n * @type {Object}\n */\n classes: {\n swipeable: 'glide--swipeable',\n dragging: 'glide--dragging',\n direction: {\n ltr: 'glide--ltr',\n rtl: 'glide--rtl'\n },\n type: {\n slider: 'glide--slider',\n carousel: 'glide--carousel'\n },\n slide: {\n clone: 'glide__slide--clone',\n active: 'glide__slide--active'\n },\n arrow: {\n disabled: 'glide__arrow--disabled'\n },\n nav: {\n active: 'glide__bullet--active'\n }\n }\n};\n\n/**\n * Outputs warning message to the bowser console.\n *\n * @param {String} msg\n * @return {Void}\n */\nfunction warn(msg) {\n console.error(\"[Glide warn]: \".concat(msg));\n}\n\n/**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toInt(value) {\n return parseInt(value);\n}\n/**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\n\nfunction toFloat(value) {\n return parseFloat(value);\n}\n/**\n * Indicates whether the specified value is a string.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isString(value) {\n return typeof value === 'string';\n}\n/**\n * Indicates whether the specified value is an object.\n *\n * @param {*} value\n * @return {Boolean}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction isObject(value) {\n var type = _typeof(value);\n\n return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n}\n/**\n * Indicates whether the specified value is a function.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Indicates whether the specified value is undefined.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n/**\n * Indicates whether the specified value is an array.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isArray(value) {\n return value.constructor === Array;\n}\n\n/**\n * Creates and initializes specified collection of extensions.\n * Each extension receives access to instance of glide and rest of components.\n *\n * @param {Object} glide\n * @param {Object} extensions\n *\n * @returns {Object}\n */\n\nfunction mount(glide, extensions, events) {\n var components = {};\n\n for (var name in extensions) {\n if (isFunction(extensions[name])) {\n components[name] = extensions[name](glide, components, events);\n } else {\n warn('Extension must be a function');\n }\n }\n\n for (var _name in components) {\n if (isFunction(components[_name].mount)) {\n components[_name].mount();\n }\n }\n\n return components;\n}\n\n/**\n * Defines getter and setter property on the specified object.\n *\n * @param {Object} obj Object where property has to be defined.\n * @param {String} prop Name of the defined property.\n * @param {Object} definition Get and set definitions for the property.\n * @return {Void}\n */\nfunction define(obj, prop, definition) {\n Object.defineProperty(obj, prop, definition);\n}\n/**\n * Sorts aphabetically object keys.\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction sortKeys(obj) {\n return Object.keys(obj).sort().reduce(function (r, k) {\n r[k] = obj[k];\n return r[k], r;\n }, {});\n}\n/**\n * Merges passed settings object with default options.\n *\n * @param {Object} defaults\n * @param {Object} settings\n * @return {Object}\n */\n\nfunction mergeOptions(defaults, settings) {\n var options = Object.assign({}, defaults, settings); // `Object.assign` do not deeply merge objects, so we\n // have to do it manually for every nested object\n // in options. Although it does not look smart,\n // it's smaller and faster than some fancy\n // merging deep-merge algorithm script.\n\n if (settings.hasOwnProperty('classes')) {\n options.classes = Object.assign({}, defaults.classes, settings.classes);\n\n if (settings.classes.hasOwnProperty('direction')) {\n options.classes.direction = Object.assign({}, defaults.classes.direction, settings.classes.direction);\n }\n\n if (settings.classes.hasOwnProperty('type')) {\n options.classes.type = Object.assign({}, defaults.classes.type, settings.classes.type);\n }\n\n if (settings.classes.hasOwnProperty('slide')) {\n options.classes.slide = Object.assign({}, defaults.classes.slide, settings.classes.slide);\n }\n\n if (settings.classes.hasOwnProperty('arrow')) {\n options.classes.arrow = Object.assign({}, defaults.classes.arrow, settings.classes.arrow);\n }\n\n if (settings.classes.hasOwnProperty('nav')) {\n options.classes.nav = Object.assign({}, defaults.classes.nav, settings.classes.nav);\n }\n }\n\n if (settings.hasOwnProperty('breakpoints')) {\n options.breakpoints = Object.assign({}, defaults.breakpoints, settings.breakpoints);\n }\n\n return options;\n}\n\nvar EventsBus = /*#__PURE__*/function () {\n /**\n * Construct a EventBus instance.\n *\n * @param {Object} events\n */\n function EventsBus() {\n var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBus);\n\n this.events = events;\n this.hop = events.hasOwnProperty;\n }\n /**\n * Adds listener to the specifed event.\n *\n * @param {String|Array} event\n * @param {Function} handler\n */\n\n\n _createClass(EventsBus, [{\n key: \"on\",\n value: function on(event, handler) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.on(event[i], handler);\n }\n\n return;\n } // Create the event's object if not yet created\n\n\n if (!this.hop.call(this.events, event)) {\n this.events[event] = [];\n } // Add the handler to queue\n\n\n var index = this.events[event].push(handler) - 1; // Provide handle back for removal of event\n\n return {\n remove: function remove() {\n delete this.events[event][index];\n }\n };\n }\n /**\n * Runs registered handlers for specified event.\n *\n * @param {String|Array} event\n * @param {Object=} context\n */\n\n }, {\n key: \"emit\",\n value: function emit(event, context) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.emit(event[i], context);\n }\n\n return;\n } // If the event doesn't exist, or there's no handlers in queue, just leave\n\n\n if (!this.hop.call(this.events, event)) {\n return;\n } // Cycle through events queue, fire!\n\n\n this.events[event].forEach(function (item) {\n item(context || {});\n });\n }\n }]);\n\n return EventsBus;\n}();\n\nvar Glide$1 = /*#__PURE__*/function () {\n /**\r\n * Construct glide.\r\n *\r\n * @param {String} selector\r\n * @param {Object} options\r\n */\n function Glide(selector) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Glide);\n\n this._c = {};\n this._t = [];\n this._e = new EventsBus();\n this.disabled = false;\n this.selector = selector;\n this.settings = mergeOptions(defaults, options);\n this.index = this.settings.startAt;\n }\n /**\r\n * Initializes glide.\r\n *\r\n * @param {Object} extensions Collection of extensions to initialize.\r\n * @return {Glide}\r\n */\n\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount$1() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._e.emit('mount.before');\n\n if (isObject(extensions)) {\n this._c = mount(this, extensions, this._e);\n } else {\n warn('You need to provide a object on `mount()`');\n }\n\n this._e.emit('mount.after');\n\n return this;\n }\n /**\r\n * Collects an instance `translate` transformers.\r\n *\r\n * @param {Array} transformers Collection of transformers.\r\n * @return {Void}\r\n */\n\n }, {\n key: \"mutate\",\n value: function mutate() {\n var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (isArray(transformers)) {\n this._t = transformers;\n } else {\n warn('You need to provide a array on `mutate()`');\n }\n\n return this;\n }\n /**\r\n * Updates glide with specified settings.\r\n *\r\n * @param {Object} settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"update\",\n value: function update() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.settings = mergeOptions(this.settings, settings);\n\n if (settings.hasOwnProperty('startAt')) {\n this.index = settings.startAt;\n }\n\n this._e.emit('update');\n\n return this;\n }\n /**\r\n * Change slide with specified pattern. A pattern must be in the special format:\r\n * `>` - Move one forward\r\n * `<` - Move one backward\r\n * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide)\r\n * `>>` - Rewinds to end (last slide)\r\n * `<<` - Rewinds to start (first slide)\r\n * `|>` - Move one viewport forward\r\n * `|<` - Move one viewport backward\r\n *\r\n * @param {String} pattern\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"go\",\n value: function go(pattern) {\n this._c.Run.make(pattern);\n\n return this;\n }\n /**\r\n * Move track by specified distance.\r\n *\r\n * @param {String} distance\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"move\",\n value: function move(distance) {\n this._c.Transition.disable();\n\n this._c.Move.make(distance);\n\n return this;\n }\n /**\r\n * Destroy instance and revert all changes done by this._c.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this._e.emit('destroy');\n\n return this;\n }\n /**\r\n * Start instance autoplaying.\r\n *\r\n * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"play\",\n value: function play() {\n var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (interval) {\n this.settings.autoplay = interval;\n }\n\n this._e.emit('play');\n\n return this;\n }\n /**\r\n * Stop instance autoplaying.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"pause\",\n value: function pause() {\n this._e.emit('pause');\n\n return this;\n }\n /**\r\n * Sets glide into a idle status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"disable\",\n value: function disable() {\n this.disabled = true;\n return this;\n }\n /**\r\n * Sets glide into a active status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"enable\",\n value: function enable() {\n this.disabled = false;\n return this;\n }\n /**\r\n * Adds cuutom event listener with handler.\r\n *\r\n * @param {String|Array} event\r\n * @param {Function} handler\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"on\",\n value: function on(event, handler) {\n this._e.on(event, handler);\n\n return this;\n }\n /**\r\n * Checks if glide is a precised type.\r\n *\r\n * @param {String} name\r\n * @return {Boolean}\r\n */\n\n }, {\n key: \"isType\",\n value: function isType(name) {\n return this.settings.type === name;\n }\n /**\r\n * Gets value of the core options.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: \"settings\",\n get: function get() {\n return this._o;\n }\n /**\r\n * Sets value of the core options.\r\n *\r\n * @param {Object} o\r\n * @return {Void}\r\n */\n ,\n set: function set(o) {\n if (isObject(o)) {\n this._o = o;\n } else {\n warn('Options must be an `object` instance.');\n }\n }\n /**\r\n * Gets current index of the slider.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: \"index\",\n get: function get() {\n return this._i;\n }\n /**\r\n * Sets current index a slider.\r\n *\r\n * @return {Object}\r\n */\n ,\n set: function set(i) {\n this._i = toInt(i);\n }\n /**\r\n * Gets type name of the slider.\r\n *\r\n * @return {String}\r\n */\n\n }, {\n key: \"type\",\n get: function get() {\n return this.settings.type;\n }\n /**\r\n * Gets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n\n }, {\n key: \"disabled\",\n get: function get() {\n return this._d;\n }\n /**\r\n * Sets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n ,\n set: function set(status) {\n this._d = !!status;\n }\n }]);\n\n return Glide;\n}();\n\nfunction Run (Glide, Components, Events) {\n var Run = {\n /**\n * Initializes autorunning of the glide.\n *\n * @return {Void}\n */\n mount: function mount() {\n this._o = false;\n },\n\n /**\n * Makes glides running based on the passed moving schema.\n *\n * @param {String} move\n */\n make: function make(move) {\n var _this = this;\n\n if (!Glide.disabled) {\n !Glide.settings.waitForTransition || Glide.disable();\n this.move = move;\n Events.emit('run.before', this.move);\n this.calculate();\n Events.emit('run', this.move);\n Components.Transition.after(function () {\n if (_this.isStart()) {\n Events.emit('run.start', _this.move);\n }\n\n if (_this.isEnd()) {\n Events.emit('run.end', _this.move);\n }\n\n if (_this.isOffset()) {\n _this._o = false;\n Events.emit('run.offset', _this.move);\n }\n\n Events.emit('run.after', _this.move);\n Glide.enable();\n });\n }\n },\n\n /**\n * Calculates current index based on defined move.\n *\n * @return {Number|Undefined}\n */\n calculate: function calculate() {\n var move = this.move,\n length = this.length;\n var steps = move.steps,\n direction = move.direction; // By default assume that size of view is equal to one slide\n\n var viewSize = 1; // While direction is `=` we want jump to\n // a specified index described in steps.\n\n if (direction === '=') {\n // Check if bound is true, \n // as we want to avoid whitespaces.\n if (Glide.settings.bound && toInt(steps) > length) {\n Glide.index = length;\n return;\n }\n\n Glide.index = steps;\n return;\n } // When pattern is equal to `>>` we want\n // fast forward to the last slide.\n\n\n if (direction === '>' && steps === '>') {\n Glide.index = length;\n return;\n } // When pattern is equal to `<<` we want\n // fast forward to the first slide.\n\n\n if (direction === '<' && steps === '<') {\n Glide.index = 0;\n return;\n } // pagination movement\n\n\n if (direction === '|') {\n viewSize = Glide.settings.perView || 1;\n } // we are moving forward\n\n\n if (direction === '>' || direction === '|' && steps === '>') {\n var index = calculateForwardIndex(viewSize);\n\n if (index > length) {\n this._o = true;\n }\n\n Glide.index = normalizeForwardIndex(index, viewSize);\n return;\n } // we are moving backward\n\n\n if (direction === '<' || direction === '|' && steps === '<') {\n var _index = calculateBackwardIndex(viewSize);\n\n if (_index < 0) {\n this._o = true;\n }\n\n Glide.index = normalizeBackwardIndex(_index, viewSize);\n return;\n }\n\n warn(\"Invalid direction pattern [\".concat(direction).concat(steps, \"] has been used\"));\n },\n\n /**\n * Checks if we are on the first slide.\n *\n * @return {Boolean}\n */\n isStart: function isStart() {\n return Glide.index <= 0;\n },\n\n /**\n * Checks if we are on the last slide.\n *\n * @return {Boolean}\n */\n isEnd: function isEnd() {\n return Glide.index >= this.length;\n },\n\n /**\n * Checks if we are making a offset run.\n *\n * @param {String} direction\n * @return {Boolean}\n */\n isOffset: function isOffset() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n if (!direction) {\n return this._o;\n }\n\n if (!this._o) {\n return false;\n } // did we view to the right?\n\n\n if (direction === '|>') {\n return this.move.direction === '|' && this.move.steps === '>';\n } // did we view to the left?\n\n\n if (direction === '|<') {\n return this.move.direction === '|' && this.move.steps === '<';\n }\n\n return this.move.direction === direction;\n },\n\n /**\n * Checks if bound mode is active\n *\n * @return {Boolean}\n */\n isBound: function isBound() {\n return Glide.isType('slider') && Glide.settings.focusAt !== 'center' && Glide.settings.bound;\n }\n };\n /**\n * Returns index value to move forward/to the right\n *\n * @param viewSize\n * @returns {Number}\n */\n\n function calculateForwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index + viewSize;\n }\n\n return index + (viewSize - index % viewSize);\n }\n /**\n * Normalizes the given forward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {Number}\n */\n\n\n function normalizeForwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index <= length) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index - (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on the last possible index value given by bound\n if (Run.isBound() && !Run.isEnd()) {\n return length;\n }\n\n return 0;\n }\n\n if (Run.isBound()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n /**\n * Calculates index value to move backward/to the left\n *\n * @param viewSize\n * @returns {Number}\n */\n\n\n function calculateBackwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index - viewSize;\n } // ensure our back navigation results in the same index as a forward navigation\n // to experience a homogeneous paging\n\n\n var view = Math.ceil(index / viewSize);\n return (view - 1) * viewSize;\n }\n /**\n * Normalizes the given backward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {*}\n */\n\n\n function normalizeBackwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index >= 0) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index + (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on first possible index value before we to rewind to the length given by bound\n if (Run.isBound() && Run.isStart()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n\n return 0;\n }\n\n define(Run, 'move', {\n /**\n * Gets value of the move schema.\n *\n * @returns {Object}\n */\n get: function get() {\n return this._m;\n },\n\n /**\n * Sets value of the move schema.\n *\n * @returns {Object}\n */\n set: function set(value) {\n var step = value.substr(1);\n this._m = {\n direction: value.substr(0, 1),\n steps: step ? toInt(step) ? toInt(step) : step : 0\n };\n }\n });\n define(Run, 'length', {\n /**\n * Gets value of the running distance based\n * on zero-indexing number of slides.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n var length = Components.Html.slides.length; // If the `bound` option is active, a maximum running distance should be\n // reduced by `perView` and `focusAt` settings. Running distance\n // should end before creating an empty space after instance.\n\n if (this.isBound()) {\n return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n }\n\n return length - 1;\n }\n });\n define(Run, 'offset', {\n /**\n * Gets status of the offsetting flag.\n *\n * @return {Boolean}\n */\n get: function get() {\n return this._o;\n }\n });\n return Run;\n}\n\n/**\n * Returns a current time.\n *\n * @return {Number}\n */\nfunction now() {\n return new Date().getTime();\n}\n\n/**\n * Returns a function, that, when invoked, will only be triggered\n * at most once during a given window of time.\n *\n * @param {Function} func\n * @param {Number} wait\n * @param {Object=} options\n * @return {Function}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function later() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function throttled() {\n var at = now();\n if (!previous && options.leading === false) previous = at;\n var remaining = wait - (at - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = at;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n\nvar MARGIN_TYPE = {\n ltr: ['marginLeft', 'marginRight'],\n rtl: ['marginRight', 'marginLeft']\n};\nfunction Gaps (Glide, Components, Events) {\n var Gaps = {\n /**\n * Applies gaps between slides. First and last\n * slides do not receive it's edge margins.\n *\n * @param {HTMLCollection} slides\n * @return {Void}\n */\n apply: function apply(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n var direction = Components.Direction.value;\n\n if (i !== 0) {\n style[MARGIN_TYPE[direction][0]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][0]] = '';\n }\n\n if (i !== slides.length - 1) {\n style[MARGIN_TYPE[direction][1]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][1]] = '';\n }\n }\n },\n\n /**\n * Removes gaps from the slides.\n *\n * @param {HTMLCollection} slides\n * @returns {Void}\n */\n remove: function remove(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n style.marginLeft = '';\n style.marginRight = '';\n }\n }\n };\n define(Gaps, 'value', {\n /**\n * Gets value of the gap.\n *\n * @returns {Number}\n */\n get: function get() {\n return toInt(Glide.settings.gap);\n }\n });\n define(Gaps, 'grow', {\n /**\n * Gets additional dimensions value caused by gaps.\n * Used to increase width of the slides wrapper.\n *\n * @returns {Number}\n */\n get: function get() {\n return Gaps.value * Components.Sizes.length;\n }\n });\n define(Gaps, 'reductor', {\n /**\n * Gets reduction value caused by gaps.\n * Used to subtract width of the slides.\n *\n * @returns {Number}\n */\n get: function get() {\n var perView = Glide.settings.perView;\n return Gaps.value * (perView - 1) / perView;\n }\n });\n /**\n * Apply calculated gaps:\n * - after building, so slides (including clones) will receive proper margins\n * - on updating via API, to recalculate gaps with new options\n */\n\n Events.on(['build.after', 'update'], throttle(function () {\n Gaps.apply(Components.Html.wrapper.children);\n }, 30));\n /**\n * Remove gaps:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Gaps.remove(Components.Html.wrapper.children);\n });\n return Gaps;\n}\n\n/**\n * Finds siblings nodes of the passed node.\n *\n * @param {Element} node\n * @return {Array}\n */\nfunction siblings(node) {\n if (node && node.parentNode) {\n var n = node.parentNode.firstChild;\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== node) {\n matched.push(n);\n }\n }\n\n return matched;\n }\n\n return [];\n}\n/**\n * Checks if passed node exist and is a valid element.\n *\n * @param {Element} node\n * @return {Boolean}\n */\n\nfunction exist(node) {\n if (node && node instanceof window.HTMLElement) {\n return true;\n }\n\n return false;\n}\n/**\n * Coerces a NodeList to an Array.\n *\n * @param {NodeList} nodeList\n * @return {Array}\n */\n\nfunction toArray(nodeList) {\n return Array.prototype.slice.call(nodeList);\n}\n\nvar TRACK_SELECTOR = '[data-glide-el=\"track\"]';\nfunction Html (Glide, Components, Events) {\n var Html = {\n /**\n * Setup slider HTML nodes.\n *\n * @param {Glide} glide\n */\n mount: function mount() {\n this.root = Glide.selector;\n this.track = this.root.querySelector(TRACK_SELECTOR);\n this.collectSlides();\n },\n\n /**\n * Collect slides\n */\n collectSlides: function collectSlides() {\n this.slides = toArray(this.wrapper.children).filter(function (slide) {\n return !slide.classList.contains(Glide.settings.classes.slide.clone);\n });\n }\n };\n define(Html, 'root', {\n /**\n * Gets node of the glide main element.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._r;\n },\n\n /**\n * Sets node of the glide main element.\n *\n * @return {Object}\n */\n set: function set(r) {\n if (isString(r)) {\n r = document.querySelector(r);\n }\n\n if (exist(r)) {\n Html._r = r;\n } else {\n warn('Root element must be a existing Html node');\n }\n }\n });\n define(Html, 'track', {\n /**\n * Gets node of the glide track with slides.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._t;\n },\n\n /**\n * Sets node of the glide track with slides.\n *\n * @return {Object}\n */\n set: function set(t) {\n if (exist(t)) {\n Html._t = t;\n } else {\n warn(\"Could not find track element. Please use \".concat(TRACK_SELECTOR, \" attribute.\"));\n }\n }\n });\n define(Html, 'wrapper', {\n /**\n * Gets node of the slides wrapper.\n *\n * @return {Object}\n */\n get: function get() {\n return Html.track.children[0];\n }\n });\n /**\n * Add/remove/reorder dynamic slides\n */\n\n Events.on('update', function () {\n Html.collectSlides();\n });\n return Html;\n}\n\nfunction Peek (Glide, Components, Events) {\n var Peek = {\n /**\n * Setups how much to peek based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.peek;\n }\n };\n define(Peek, 'value', {\n /**\n * Gets value of the peek.\n *\n * @returns {Number|Object}\n */\n get: function get() {\n return Peek._v;\n },\n\n /**\n * Sets value of the peek.\n *\n * @param {Number|Object} value\n * @return {Void}\n */\n set: function set(value) {\n if (isObject(value)) {\n value.before = toInt(value.before);\n value.after = toInt(value.after);\n } else {\n value = toInt(value);\n }\n\n Peek._v = value;\n }\n });\n define(Peek, 'reductor', {\n /**\n * Gets reduction value caused by peek.\n *\n * @returns {Number}\n */\n get: function get() {\n var value = Peek.value;\n var perView = Glide.settings.perView;\n\n if (isObject(value)) {\n return value.before / perView + value.after / perView;\n }\n\n return value * 2 / perView;\n }\n });\n /**\n * Recalculate peeking sizes on:\n * - when resizing window to update to proper percents\n */\n\n Events.on(['resize', 'update'], function () {\n Peek.mount();\n });\n return Peek;\n}\n\nfunction Move (Glide, Components, Events) {\n var Move = {\n /**\n * Constructs move component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n this._o = 0;\n },\n\n /**\n * Calculates a movement value based on passed offset and currently active index.\n *\n * @param {Number} offset\n * @return {Void}\n */\n make: function make() {\n var _this = this;\n\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this.offset = offset;\n Events.emit('move', {\n movement: this.value\n });\n Components.Transition.after(function () {\n Events.emit('move.after', {\n movement: _this.value\n });\n });\n }\n };\n define(Move, 'offset', {\n /**\n * Gets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n get: function get() {\n return Move._o;\n },\n\n /**\n * Sets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n set: function set(value) {\n Move._o = !isUndefined(value) ? toInt(value) : 0;\n }\n });\n define(Move, 'translate', {\n /**\n * Gets a raw movement value.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Sizes.slideWidth * Glide.index;\n }\n });\n define(Move, 'value', {\n /**\n * Gets an actual movement value corrected by offset.\n *\n * @return {Number}\n */\n get: function get() {\n var offset = this.offset;\n var translate = this.translate;\n\n if (Components.Direction.is('rtl')) {\n return translate + offset;\n }\n\n return translate - offset;\n }\n });\n /**\n * Make movement to proper slide on:\n * - before build, so glide will start at `startAt` index\n * - on each standard run to move to newly calculated index\n */\n\n Events.on(['build.before', 'run'], function () {\n Move.make();\n });\n return Move;\n}\n\nfunction Sizes (Glide, Components, Events) {\n var Sizes = {\n /**\n * Setups dimensions of slides.\n *\n * @return {Void}\n */\n setupSlides: function setupSlides() {\n var width = \"\".concat(this.slideWidth, \"px\");\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = width;\n }\n },\n\n /**\n * Setups dimensions of slides wrapper.\n *\n * @return {Void}\n */\n setupWrapper: function setupWrapper() {\n Components.Html.wrapper.style.width = \"\".concat(this.wrapperSize, \"px\");\n },\n\n /**\n * Removes applied styles from HTML elements.\n *\n * @returns {Void}\n */\n remove: function remove() {\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = '';\n }\n\n Components.Html.wrapper.style.width = '';\n }\n };\n define(Sizes, 'length', {\n /**\n * Gets count number of the slides.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.slides.length;\n }\n });\n define(Sizes, 'width', {\n /**\n * Gets width value of the slider (visible area).\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.track.offsetWidth;\n }\n });\n define(Sizes, 'wrapperSize', {\n /**\n * Gets size of the slides wrapper.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow;\n }\n });\n define(Sizes, 'slideWidth', {\n /**\n * Gets width value of a single slide.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor;\n }\n });\n /**\n * Apply calculated glide's dimensions:\n * - before building, so other dimensions (e.g. translate) will be calculated propertly\n * - when resizing window to recalculate sildes dimensions\n * - on updating via API, to calculate dimensions based on new options\n */\n\n Events.on(['build.before', 'resize', 'update'], function () {\n Sizes.setupSlides();\n Sizes.setupWrapper();\n });\n /**\n * Remove calculated glide's dimensions:\n * - on destoting to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Sizes.remove();\n });\n return Sizes;\n}\n\nfunction Build (Glide, Components, Events) {\n var Build = {\n /**\n * Init glide building. Adds classes, sets\n * dimensions and setups initial state.\n *\n * @return {Void}\n */\n mount: function mount() {\n Events.emit('build.before');\n this.typeClass();\n this.activeClass();\n Events.emit('build.after');\n },\n\n /**\n * Adds `type` class to the glide element.\n *\n * @return {Void}\n */\n typeClass: function typeClass() {\n Components.Html.root.classList.add(Glide.settings.classes.type[Glide.settings.type]);\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n activeClass: function activeClass() {\n var classes = Glide.settings.classes;\n var slide = Components.Html.slides[Glide.index];\n\n if (slide) {\n slide.classList.add(classes.slide.active);\n siblings(slide).forEach(function (sibling) {\n sibling.classList.remove(classes.slide.active);\n });\n }\n },\n\n /**\n * Removes HTML classes applied at building.\n *\n * @return {Void}\n */\n removeClasses: function removeClasses() {\n var _Glide$settings$class = Glide.settings.classes,\n type = _Glide$settings$class.type,\n slide = _Glide$settings$class.slide;\n Components.Html.root.classList.remove(type[Glide.settings.type]);\n Components.Html.slides.forEach(function (sibling) {\n sibling.classList.remove(slide.active);\n });\n }\n };\n /**\n * Clear building classes:\n * - on destroying to bring HTML to its initial state\n * - on updating to remove classes before remounting component\n */\n\n Events.on(['destroy', 'update'], function () {\n Build.removeClasses();\n });\n /**\n * Remount component:\n * - on resizing of the window to calculate new dimensions\n * - on updating settings via API\n */\n\n Events.on(['resize', 'update'], function () {\n Build.mount();\n });\n /**\n * Swap active class of current slide:\n * - after each move to the new index\n */\n\n Events.on('move.after', function () {\n Build.activeClass();\n });\n return Build;\n}\n\nfunction Clones (Glide, Components, Events) {\n var Clones = {\n /**\n * Create pattern map and collect slides to be cloned.\n */\n mount: function mount() {\n this.items = [];\n\n if (Glide.isType('carousel')) {\n this.items = this.collect();\n }\n },\n\n /**\n * Collect clones with pattern.\n *\n * @return {[]}\n */\n collect: function collect() {\n var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var slides = Components.Html.slides;\n var _Glide$settings = Glide.settings,\n perView = _Glide$settings.perView,\n classes = _Glide$settings.classes,\n cloningRatio = _Glide$settings.cloningRatio;\n\n if (slides.length !== 0) {\n var peekIncrementer = +!!Glide.settings.peek;\n var cloneCount = perView + peekIncrementer + Math.round(perView / 2);\n var append = slides.slice(0, cloneCount).reverse();\n var prepend = slides.slice(cloneCount * -1);\n\n for (var r = 0; r < Math.max(cloningRatio, Math.floor(perView / slides.length)); r++) {\n for (var i = 0; i < append.length; i++) {\n var clone = append[i].cloneNode(true);\n clone.classList.add(classes.slide.clone);\n items.push(clone);\n }\n\n for (var _i = 0; _i < prepend.length; _i++) {\n var _clone = prepend[_i].cloneNode(true);\n\n _clone.classList.add(classes.slide.clone);\n\n items.unshift(_clone);\n }\n }\n }\n\n return items;\n },\n\n /**\n * Append cloned slides with generated pattern.\n *\n * @return {Void}\n */\n append: function append() {\n var items = this.items;\n var _Components$Html = Components.Html,\n wrapper = _Components$Html.wrapper,\n slides = _Components$Html.slides;\n var half = Math.floor(items.length / 2);\n var prepend = items.slice(0, half).reverse();\n var append = items.slice(half * -1).reverse();\n var width = \"\".concat(Components.Sizes.slideWidth, \"px\");\n\n for (var i = 0; i < append.length; i++) {\n wrapper.appendChild(append[i]);\n }\n\n for (var _i2 = 0; _i2 < prepend.length; _i2++) {\n wrapper.insertBefore(prepend[_i2], slides[0]);\n }\n\n for (var _i3 = 0; _i3 < items.length; _i3++) {\n items[_i3].style.width = width;\n }\n },\n\n /**\n * Remove all cloned slides.\n *\n * @return {Void}\n */\n remove: function remove() {\n var items = this.items;\n\n for (var i = 0; i < items.length; i++) {\n Components.Html.wrapper.removeChild(items[i]);\n }\n }\n };\n define(Clones, 'grow', {\n /**\n * Gets additional dimensions value caused by clones.\n *\n * @return {Number}\n */\n get: function get() {\n return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length;\n }\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('update', function () {\n Clones.remove();\n Clones.mount();\n Clones.append();\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('build.before', function () {\n if (Glide.isType('carousel')) {\n Clones.append();\n }\n });\n /**\n * Remove clones HTMLElements:\n * - on destroying, to bring HTML to its initial state\n */\n\n Events.on('destroy', function () {\n Clones.remove();\n });\n return Clones;\n}\n\nvar EventsBinder = /*#__PURE__*/function () {\n /**\n * Construct a EventsBinder instance.\n */\n function EventsBinder() {\n var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBinder);\n\n this.listeners = listeners;\n }\n /**\n * Adds events listeners to arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Function} closure\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n\n _createClass(EventsBinder, [{\n key: \"on\",\n value: function on(events, el, closure) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n this.listeners[events[i]] = closure;\n el.addEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Removes event listeners from arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n }, {\n key: \"off\",\n value: function off(events, el) {\n var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n el.removeEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Destroy collected listeners.\n *\n * @returns {Void}\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n delete this.listeners;\n }\n }]);\n\n return EventsBinder;\n}();\n\nfunction Resize (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Resize = {\n /**\n * Initializes window bindings.\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `rezsize` listener to the window.\n * It's a costly event, so we are debouncing it.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('resize', window, throttle(function () {\n Events.emit('resize');\n }, Glide.settings.throttle));\n },\n\n /**\n * Unbinds listeners from the window.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('resize', window);\n }\n };\n /**\n * Remove bindings from window:\n * - on destroying, to remove added EventListener\n */\n\n Events.on('destroy', function () {\n Resize.unbind();\n Binder.destroy();\n });\n return Resize;\n}\n\nvar VALID_DIRECTIONS = ['ltr', 'rtl'];\nvar FLIPED_MOVEMENTS = {\n '>': '<',\n '<': '>',\n '=': '='\n};\nfunction Direction (Glide, Components, Events) {\n var Direction = {\n /**\n * Setups gap value based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.direction;\n },\n\n /**\n * Resolves pattern based on direction value\n *\n * @param {String} pattern\n * @returns {String}\n */\n resolve: function resolve(pattern) {\n var token = pattern.slice(0, 1);\n\n if (this.is('rtl')) {\n return pattern.split(token).join(FLIPED_MOVEMENTS[token]);\n }\n\n return pattern;\n },\n\n /**\n * Checks value of direction mode.\n *\n * @param {String} direction\n * @returns {Boolean}\n */\n is: function is(direction) {\n return this.value === direction;\n },\n\n /**\n * Applies direction class to the root HTML element.\n *\n * @return {Void}\n */\n addClass: function addClass() {\n Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]);\n },\n\n /**\n * Removes direction class from the root HTML element.\n *\n * @return {Void}\n */\n removeClass: function removeClass() {\n Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]);\n }\n };\n define(Direction, 'value', {\n /**\n * Gets value of the direction.\n *\n * @returns {Number}\n */\n get: function get() {\n return Direction._v;\n },\n\n /**\n * Sets value of the direction.\n *\n * @param {String} value\n * @return {Void}\n */\n set: function set(value) {\n if (VALID_DIRECTIONS.indexOf(value) > -1) {\n Direction._v = value;\n } else {\n warn('Direction value must be `ltr` or `rtl`');\n }\n }\n });\n /**\n * Clear direction class:\n * - on destroy to bring HTML to its initial state\n * - on update to remove class before reappling bellow\n */\n\n Events.on(['destroy', 'update'], function () {\n Direction.removeClass();\n });\n /**\n * Remount component:\n * - on update to reflect changes in direction value\n */\n\n Events.on('update', function () {\n Direction.mount();\n });\n /**\n * Apply direction class:\n * - before building to apply class for the first time\n * - on updating to reapply direction class that may changed\n */\n\n Events.on(['build.before', 'update'], function () {\n Direction.addClass();\n });\n return Direction;\n}\n\n/**\n * Reflects value of glide movement.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Rtl (Glide, Components) {\n return {\n /**\n * Negates the passed translate if glide is in RTL option.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Components.Direction.is('rtl')) {\n return -translate;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `gap` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Gap (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with number in the `gap` settings.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var multiplier = Math.floor(translate / Components.Sizes.slideWidth);\n return translate + Components.Gaps.value * multiplier;\n }\n };\n}\n\n/**\n * Updates glide movement with width of additional clones width.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Grow (Glide, Components) {\n return {\n /**\n * Adds to the passed translate width of the half of clones.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Clones.grow / 2;\n }\n };\n}\n\n/**\n * Updates glide movement with a `peek` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\nfunction Peeking (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with a `peek` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Glide.settings.focusAt >= 0) {\n var peek = Components.Peek.value;\n\n if (isObject(peek)) {\n return translate - peek.before;\n }\n\n return translate - peek;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `focusAt` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Focusing (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with index in the `focusAt` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var gap = Components.Gaps.value;\n var width = Components.Sizes.width;\n var focusAt = Glide.settings.focusAt;\n var slideWidth = Components.Sizes.slideWidth;\n\n if (focusAt === 'center') {\n return translate - (width / 2 - slideWidth / 2);\n }\n\n return translate - slideWidth * focusAt - gap * focusAt;\n }\n };\n}\n\n/**\n * Applies diffrent transformers on translate value.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\nfunction mutator (Glide, Components, Events) {\n /**\n * Merge instance transformers with collection of default transformers.\n * It's important that the Rtl component be last on the list,\n * so it reflects all previous transformations.\n *\n * @type {Array}\n */\n var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]);\n return {\n /**\n * Piplines translate value with registered transformers.\n *\n * @param {Number} translate\n * @return {Number}\n */\n mutate: function mutate(translate) {\n for (var i = 0; i < TRANSFORMERS.length; i++) {\n var transformer = TRANSFORMERS[i];\n\n if (isFunction(transformer) && isFunction(transformer().modify)) {\n translate = transformer(Glide, Components, Events).modify(translate);\n } else {\n warn('Transformer should be a function that returns an object with `modify()` method');\n }\n }\n\n return translate;\n }\n };\n}\n\nfunction Translate (Glide, Components, Events) {\n var Translate = {\n /**\n * Sets value of translate on HTML element.\n *\n * @param {Number} value\n * @return {Void}\n */\n set: function set(value) {\n var transform = mutator(Glide, Components).mutate(value);\n var translate3d = \"translate3d(\".concat(-1 * transform, \"px, 0px, 0px)\");\n Components.Html.wrapper.style.mozTransform = translate3d; // needed for supported Firefox 10-15\n\n Components.Html.wrapper.style.webkitTransform = translate3d; // needed for supported Chrome 10-35, Safari 5.1-8, and Opera 15-22\n\n Components.Html.wrapper.style.transform = translate3d;\n },\n\n /**\n * Removes value of translate from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transform = '';\n },\n\n /**\n * @return {number}\n */\n getStartIndex: function getStartIndex() {\n var length = Components.Sizes.length;\n var index = Glide.index;\n var perView = Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n return length + (index - perView);\n } // \"modulo length\" converts an index that equals length to zero\n\n\n return (index + perView) % length;\n },\n\n /**\n * @return {number}\n */\n getTravelDistance: function getTravelDistance() {\n var travelDistance = Components.Sizes.slideWidth * Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n // reverse travel distance so that we don't have to change subtract operations\n return travelDistance * -1;\n }\n\n return travelDistance;\n }\n };\n /**\n * Set new translate value:\n * - on move to reflect index change\n * - on updating via API to reflect possible changes in options\n */\n\n Events.on('move', function (context) {\n if (!Glide.isType('carousel') || !Components.Run.isOffset()) {\n return Translate.set(context.movement);\n }\n\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n Translate.set(Components.Sizes.slideWidth * Glide.index);\n });\n var startWidth = Components.Sizes.slideWidth * Components.Translate.getStartIndex();\n return Translate.set(startWidth - Components.Translate.getTravelDistance());\n });\n /**\n * Remove translate:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Translate.remove();\n });\n return Translate;\n}\n\nfunction Transition (Glide, Components, Events) {\n /**\n * Holds inactivity status of transition.\n * When true transition is not applied.\n *\n * @type {Boolean}\n */\n var disabled = false;\n var Transition = {\n /**\n * Composes string of the CSS transition.\n *\n * @param {String} property\n * @return {String}\n */\n compose: function compose(property) {\n var settings = Glide.settings;\n\n if (!disabled) {\n return \"\".concat(property, \" \").concat(this.duration, \"ms \").concat(settings.animationTimingFunc);\n }\n\n return \"\".concat(property, \" 0ms \").concat(settings.animationTimingFunc);\n },\n\n /**\n * Sets value of transition on HTML element.\n *\n * @param {String=} property\n * @return {Void}\n */\n set: function set() {\n var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n Components.Html.wrapper.style.transition = this.compose(property);\n },\n\n /**\n * Removes value of transition from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transition = '';\n },\n\n /**\n * Runs callback after animation.\n *\n * @param {Function} callback\n * @return {Void}\n */\n after: function after(callback) {\n setTimeout(function () {\n callback();\n }, this.duration);\n },\n\n /**\n * Enable transition.\n *\n * @return {Void}\n */\n enable: function enable() {\n disabled = false;\n this.set();\n },\n\n /**\n * Disable transition.\n *\n * @return {Void}\n */\n disable: function disable() {\n disabled = true;\n this.set();\n }\n };\n define(Transition, 'duration', {\n /**\n * Gets duration of the transition based\n * on currently running animation type.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n\n if (Glide.isType('slider') && Components.Run.offset) {\n return settings.rewindDuration;\n }\n\n return settings.animationDuration;\n }\n });\n /**\n * Set transition `style` value:\n * - on each moving, because it may be cleared by offset move\n */\n\n Events.on('move', function () {\n Transition.set();\n });\n /**\n * Disable transition:\n * - before initial build to avoid transitioning from `0` to `startAt` index\n * - while resizing window and recalculating dimensions\n * - on jumping from offset transition at start and end edges in `carousel` type\n */\n\n Events.on(['build.before', 'resize', 'translate.jump'], function () {\n Transition.disable();\n });\n /**\n * Enable transition:\n * - on each running, because it may be disabled by offset move\n */\n\n Events.on('run', function () {\n Transition.enable();\n });\n /**\n * Remove transition:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Transition.remove();\n });\n return Transition;\n}\n\n/**\n * Test via a getter in the options object to see\n * if the passive property is accessed.\n *\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n */\nvar supportsPassive = false;\n\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n} catch (e) {}\n\nvar supportsPassive$1 = supportsPassive;\n\nvar START_EVENTS = ['touchstart', 'mousedown'];\nvar MOVE_EVENTS = ['touchmove', 'mousemove'];\nvar END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\nvar MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\nfunction Swipe (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var swipeSin = 0;\n var swipeStartX = 0;\n var swipeStartY = 0;\n var disabled = false;\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Swipe = {\n /**\n * Initializes swipe bindings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bindSwipeStart();\n },\n\n /**\n * Handler for `swipestart` event. Calculates entry points of the user's tap.\n *\n * @param {Object} event\n * @return {Void}\n */\n start: function start(event) {\n if (!disabled && !Glide.disabled) {\n this.disable();\n var swipe = this.touches(event);\n swipeSin = null;\n swipeStartX = toInt(swipe.pageX);\n swipeStartY = toInt(swipe.pageY);\n this.bindSwipeMove();\n this.bindSwipeEnd();\n Events.emit('swipe.start');\n }\n },\n\n /**\n * Handler for `swipemove` event. Calculates user's tap angle and distance.\n *\n * @param {Object} event\n */\n move: function move(event) {\n if (!Glide.disabled) {\n var _Glide$settings = Glide.settings,\n touchAngle = _Glide$settings.touchAngle,\n touchRatio = _Glide$settings.touchRatio,\n classes = _Glide$settings.classes;\n var swipe = this.touches(event);\n var subExSx = toInt(swipe.pageX) - swipeStartX;\n var subEySy = toInt(swipe.pageY) - swipeStartY;\n var powEX = Math.abs(subExSx << 2);\n var powEY = Math.abs(subEySy << 2);\n var swipeHypotenuse = Math.sqrt(powEX + powEY);\n var swipeCathetus = Math.sqrt(powEY);\n swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n if (swipeSin * 180 / Math.PI < touchAngle) {\n event.stopPropagation();\n Components.Move.make(subExSx * toFloat(touchRatio));\n Components.Html.root.classList.add(classes.dragging);\n Events.emit('swipe.move');\n } else {\n return false;\n }\n }\n },\n\n /**\n * Handler for `swipeend` event. Finitializes user's tap and decides about glide move.\n *\n * @param {Object} event\n * @return {Void}\n */\n end: function end(event) {\n if (!Glide.disabled) {\n var _Glide$settings2 = Glide.settings,\n perSwipe = _Glide$settings2.perSwipe,\n touchAngle = _Glide$settings2.touchAngle,\n classes = _Glide$settings2.classes;\n var swipe = this.touches(event);\n var threshold = this.threshold(event);\n var swipeDistance = swipe.pageX - swipeStartX;\n var swipeDeg = swipeSin * 180 / Math.PI;\n this.enable();\n\n if (swipeDistance > threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\n } else if (swipeDistance < -threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n } else {\n // While swipe don't reach distance apply previous transform.\n Components.Move.make();\n }\n\n Components.Html.root.classList.remove(classes.dragging);\n this.unbindSwipeMove();\n this.unbindSwipeEnd();\n Events.emit('swipe.end');\n }\n },\n\n /**\n * Binds swipe's starting event.\n *\n * @return {Void}\n */\n bindSwipeStart: function bindSwipeStart() {\n var _this = this;\n\n var _Glide$settings3 = Glide.settings,\n swipeThreshold = _Glide$settings3.swipeThreshold,\n dragThreshold = _Glide$settings3.dragThreshold;\n\n if (swipeThreshold) {\n Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n\n if (dragThreshold) {\n Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n },\n\n /**\n * Unbinds swipe's starting event.\n *\n * @return {Void}\n */\n unbindSwipeStart: function unbindSwipeStart() {\n Binder.off(START_EVENTS[0], Components.Html.wrapper, capture);\n Binder.off(START_EVENTS[1], Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's moving event.\n *\n * @return {Void}\n */\n bindSwipeMove: function bindSwipeMove() {\n var _this2 = this;\n\n Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) {\n _this2.move(event);\n }, Glide.settings.throttle), capture);\n },\n\n /**\n * Unbinds swipe's moving event.\n *\n * @return {Void}\n */\n unbindSwipeMove: function unbindSwipeMove() {\n Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's ending event.\n *\n * @return {Void}\n */\n bindSwipeEnd: function bindSwipeEnd() {\n var _this3 = this;\n\n Binder.on(END_EVENTS, Components.Html.wrapper, function (event) {\n _this3.end(event);\n });\n },\n\n /**\n * Unbinds swipe's ending event.\n *\n * @return {Void}\n */\n unbindSwipeEnd: function unbindSwipeEnd() {\n Binder.off(END_EVENTS, Components.Html.wrapper);\n },\n\n /**\n * Normalizes event touches points accorting to different types.\n *\n * @param {Object} event\n */\n touches: function touches(event) {\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return event;\n }\n\n return event.touches[0] || event.changedTouches[0];\n },\n\n /**\n * Gets value of minimum swipe distance settings based on event type.\n *\n * @return {Number}\n */\n threshold: function threshold(event) {\n var settings = Glide.settings;\n\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return settings.dragThreshold;\n }\n\n return settings.swipeThreshold;\n },\n\n /**\n * Enables swipe event.\n *\n * @return {self}\n */\n enable: function enable() {\n disabled = false;\n Components.Transition.enable();\n return this;\n },\n\n /**\n * Disables swipe event.\n *\n * @return {self}\n */\n disable: function disable() {\n disabled = true;\n Components.Transition.disable();\n return this;\n }\n };\n /**\n * Add component class:\n * - after initial building\n */\n\n Events.on('build.after', function () {\n Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n });\n /**\n * Remove swiping bindings:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Swipe.unbindSwipeStart();\n Swipe.unbindSwipeMove();\n Swipe.unbindSwipeEnd();\n Binder.destroy();\n });\n return Swipe;\n}\n\nfunction Images (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Images = {\n /**\n * Binds listener to glide wrapper.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `dragstart` event on wrapper to prevent dragging images.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('dragstart', Components.Html.wrapper, this.dragstart);\n },\n\n /**\n * Unbinds `dragstart` event on wrapper.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('dragstart', Components.Html.wrapper);\n },\n\n /**\n * Event handler. Prevents dragging.\n *\n * @return {Void}\n */\n dragstart: function dragstart(event) {\n event.preventDefault();\n }\n };\n /**\n * Remove bindings from images:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Images.unbind();\n Binder.destroy();\n });\n return Images;\n}\n\nfunction Anchors (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds detaching status of anchors.\n * Prevents detaching of already detached anchors.\n *\n * @private\n * @type {Boolean}\n */\n\n var detached = false;\n /**\n * Holds preventing status of anchors.\n * If `true` redirection after click will be disabled.\n *\n * @private\n * @type {Boolean}\n */\n\n var prevented = false;\n var Anchors = {\n /**\n * Setups a initial state of anchors component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n /**\n * Holds collection of anchors elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._a = Components.Html.wrapper.querySelectorAll('a');\n this.bind();\n },\n\n /**\n * Binds events to anchors inside a track.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('click', Components.Html.wrapper, this.click);\n },\n\n /**\n * Unbinds events attached to anchors inside a track.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('click', Components.Html.wrapper);\n },\n\n /**\n * Handler for click event. Prevents clicks when glide is in `prevent` status.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n if (prevented) {\n event.stopPropagation();\n event.preventDefault();\n }\n },\n\n /**\n * Detaches anchors click event inside glide.\n *\n * @return {self}\n */\n detach: function detach() {\n prevented = true;\n\n if (!detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = false;\n }\n\n detached = true;\n }\n\n return this;\n },\n\n /**\n * Attaches anchors click events inside glide.\n *\n * @return {self}\n */\n attach: function attach() {\n prevented = false;\n\n if (detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = true;\n }\n\n detached = false;\n }\n\n return this;\n }\n };\n define(Anchors, 'items', {\n /**\n * Gets collection of the arrows HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Anchors._a;\n }\n });\n /**\n * Detach anchors inside slides:\n * - on swiping, so they won't redirect to its `href` attributes\n */\n\n Events.on('swipe.move', function () {\n Anchors.detach();\n });\n /**\n * Attach anchors inside slides:\n * - after swiping and transitions ends, so they can redirect after click again\n */\n\n Events.on('swipe.end', function () {\n Components.Transition.after(function () {\n Anchors.attach();\n });\n });\n /**\n * Unbind anchors inside slides:\n * - on destroying, to bring anchors to its initial state\n */\n\n Events.on('destroy', function () {\n Anchors.attach();\n Anchors.unbind();\n Binder.destroy();\n });\n return Anchors;\n}\n\nvar NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\nvar CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\nvar PREVIOUS_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\"<\\\"]\");\nvar NEXT_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\">\\\"]\");\nfunction Controls (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Controls = {\n /**\n * Inits arrows. Binds events listeners\n * to the arrows HTML elements.\n *\n * @return {Void}\n */\n mount: function mount() {\n /**\n * Collection of navigation HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR);\n /**\n * Collection of controls HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n\n this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n /**\n * Collection of arrow control HTML elements.\n *\n * @private\n * @type {Object}\n */\n\n this._arrowControls = {\n previous: Components.Html.root.querySelectorAll(PREVIOUS_CONTROLS_SELECTOR),\n next: Components.Html.root.querySelectorAll(NEXT_CONTROLS_SELECTOR)\n };\n this.addBindings();\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n setActive: function setActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.addClass(this._n[i].children);\n }\n },\n\n /**\n * Removes active class to current slide.\n *\n * @return {Void}\n */\n removeActive: function removeActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.removeClass(this._n[i].children);\n }\n },\n\n /**\n * Toggles active class on items inside navigation.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n addClass: function addClass(controls) {\n var settings = Glide.settings;\n var item = controls[Glide.index];\n\n if (!item) {\n return;\n }\n\n if (item) {\n item.classList.add(settings.classes.nav.active);\n siblings(item).forEach(function (sibling) {\n sibling.classList.remove(settings.classes.nav.active);\n });\n }\n },\n\n /**\n * Removes active class from active control.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n removeClass: function removeClass(controls) {\n var item = controls[Glide.index];\n\n if (item) {\n item.classList.remove(Glide.settings.classes.nav.active);\n }\n },\n\n /**\n * Calculates, removes or adds `Glide.settings.classes.disabledArrow` class on the control arrows\n */\n setArrowState: function setArrowState() {\n if (Glide.settings.rewind) {\n return;\n }\n\n var next = Controls._arrowControls.next;\n var previous = Controls._arrowControls.previous;\n this.resetArrowState(next, previous);\n\n if (Glide.index === 0) {\n this.disableArrow(previous);\n }\n\n if (Glide.index === Components.Run.length) {\n this.disableArrow(next);\n }\n },\n\n /**\n * Removes `Glide.settings.classes.disabledArrow` from given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n resetArrowState: function resetArrowState() {\n var settings = Glide.settings;\n\n for (var _len = arguments.length, lists = new Array(_len), _key = 0; _key < _len; _key++) {\n lists[_key] = arguments[_key];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.remove(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds `Glide.settings.classes.disabledArrow` to given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n disableArrow: function disableArrow() {\n var settings = Glide.settings;\n\n for (var _len2 = arguments.length, lists = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n lists[_key2] = arguments[_key2];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.add(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds handles to the each group of controls.\n *\n * @return {Void}\n */\n addBindings: function addBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.bind(this._c[i].children);\n }\n },\n\n /**\n * Removes handles from the each group of controls.\n *\n * @return {Void}\n */\n removeBindings: function removeBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.unbind(this._c[i].children);\n }\n },\n\n /**\n * Binds events to arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n bind: function bind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.on('click', elements[i], this.click);\n Binder.on('touchstart', elements[i], this.click, capture);\n }\n },\n\n /**\n * Unbinds events binded to the arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n unbind: function unbind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.off(['click', 'touchstart'], elements[i]);\n }\n },\n\n /**\n * Handles `click` event on the arrows HTML elements.\n * Moves slider in direction given via the\n * `data-glide-dir` attribute.\n *\n * @param {Object} event\n * @return {void}\n */\n click: function click(event) {\n if (!supportsPassive$1 && event.type === 'touchstart') {\n event.preventDefault();\n }\n\n var direction = event.currentTarget.getAttribute('data-glide-dir');\n Components.Run.make(Components.Direction.resolve(direction));\n }\n };\n define(Controls, 'items', {\n /**\n * Gets collection of the controls HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Controls._c;\n }\n });\n /**\n * Swap active class of current navigation item:\n * - after mounting to set it to initial index\n * - after each move to the new index\n */\n\n Events.on(['mount.after', 'move.after'], function () {\n Controls.setActive();\n });\n /**\n * Add or remove disabled class of arrow elements\n */\n\n Events.on(['mount.after', 'run'], function () {\n Controls.setArrowState();\n });\n /**\n * Remove bindings and HTML Classes:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Controls.removeBindings();\n Controls.removeActive();\n Binder.destroy();\n });\n return Controls;\n}\n\nfunction Keyboard (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Keyboard = {\n /**\n * Binds keyboard events on component mount.\n *\n * @return {Void}\n */\n mount: function mount() {\n if (Glide.settings.keyboard) {\n this.bind();\n }\n },\n\n /**\n * Adds keyboard press events.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('keyup', document, this.press);\n },\n\n /**\n * Removes keyboard press events.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('keyup', document);\n },\n\n /**\n * Handles keyboard's arrows press and moving glide foward and backward.\n *\n * @param {Object} event\n * @return {Void}\n */\n press: function press(event) {\n var perSwipe = Glide.settings.perSwipe;\n\n if (event.code === 'ArrowRight') {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n }\n\n if (event.code === 'ArrowLeft') {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\n }\n }\n };\n /**\n * Remove bindings from keyboard:\n * - on destroying to remove added events\n * - on updating to remove events before remounting\n */\n\n Events.on(['destroy', 'update'], function () {\n Keyboard.unbind();\n });\n /**\n * Remount component\n * - on updating to reflect potential changes in settings\n */\n\n Events.on('update', function () {\n Keyboard.mount();\n });\n /**\n * Destroy binder:\n * - on destroying to remove listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Keyboard;\n}\n\nfunction Autoplay (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Autoplay = {\n /**\n * Initializes autoplaying and events.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.enable();\n this.start();\n\n if (Glide.settings.hoverpause) {\n this.bind();\n }\n },\n\n /**\n * Enables autoplaying\n *\n * @returns {Void}\n */\n enable: function enable() {\n this._e = true;\n },\n\n /**\n * Disables autoplaying.\n *\n * @returns {Void}\n */\n disable: function disable() {\n this._e = false;\n },\n\n /**\n * Starts autoplaying in configured interval.\n *\n * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings\n * @return {Void}\n */\n start: function start() {\n var _this = this;\n\n if (!this._e) {\n return;\n }\n\n this.enable();\n\n if (Glide.settings.autoplay) {\n if (isUndefined(this._i)) {\n this._i = setInterval(function () {\n _this.stop();\n\n Components.Run.make('>');\n\n _this.start();\n\n Events.emit('autoplay');\n }, this.time);\n }\n }\n },\n\n /**\n * Stops autorunning of the glide.\n *\n * @return {Void}\n */\n stop: function stop() {\n this._i = clearInterval(this._i);\n },\n\n /**\n * Stops autoplaying while mouse is over glide's area.\n *\n * @return {Void}\n */\n bind: function bind() {\n var _this2 = this;\n\n Binder.on('mouseover', Components.Html.root, function () {\n if (_this2._e) {\n _this2.stop();\n }\n });\n Binder.on('mouseout', Components.Html.root, function () {\n if (_this2._e) {\n _this2.start();\n }\n });\n },\n\n /**\n * Unbind mouseover events.\n *\n * @returns {Void}\n */\n unbind: function unbind() {\n Binder.off(['mouseover', 'mouseout'], Components.Html.root);\n }\n };\n define(Autoplay, 'time', {\n /**\n * Gets time period value for the autoplay interval. Prioritizes\n * times in `data-glide-autoplay` attrubutes over options.\n *\n * @return {Number}\n */\n get: function get() {\n var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay');\n\n if (autoplay) {\n return toInt(autoplay);\n }\n\n return toInt(Glide.settings.autoplay);\n }\n });\n /**\n * Stop autoplaying and unbind events:\n * - on destroying, to clear defined interval\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['destroy', 'update'], function () {\n Autoplay.unbind();\n });\n /**\n * Stop autoplaying:\n * - before each run, to restart autoplaying\n * - on pausing via API\n * - on destroying, to clear defined interval\n * - while starting a swipe\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['run.before', 'swipe.start', 'update'], function () {\n Autoplay.stop();\n });\n Events.on(['pause', 'destroy'], function () {\n Autoplay.disable();\n Autoplay.stop();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['run.after', 'swipe.end'], function () {\n Autoplay.start();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['play'], function () {\n Autoplay.enable();\n Autoplay.start();\n });\n /**\n * Remount autoplaying:\n * - on updating via API to reset interval that may changed\n */\n\n Events.on('update', function () {\n Autoplay.mount();\n });\n /**\n * Destroy a binder:\n * - on destroying glide instance to clearup listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Autoplay;\n}\n\n/**\n * Sorts keys of breakpoint object so they will be ordered from lower to bigger.\n *\n * @param {Object} points\n * @returns {Object}\n */\n\nfunction sortBreakpoints(points) {\n if (isObject(points)) {\n return sortKeys(points);\n } else {\n warn(\"Breakpoints option must be an object\");\n }\n\n return {};\n}\n\nfunction Breakpoints (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds reference to settings.\n *\n * @type {Object}\n */\n\n var settings = Glide.settings;\n /**\n * Holds reference to breakpoints object in settings. Sorts breakpoints\n * from smaller to larger. It is required in order to proper\n * matching currently active breakpoint settings.\n *\n * @type {Object}\n */\n\n var points = sortBreakpoints(settings.breakpoints);\n /**\n * Cache initial settings before overwritting.\n *\n * @type {Object}\n */\n\n var defaults = Object.assign({}, settings);\n var Breakpoints = {\n /**\n * Matches settings for currectly matching media breakpoint.\n *\n * @param {Object} points\n * @returns {Object}\n */\n match: function match(points) {\n if (typeof window.matchMedia !== 'undefined') {\n for (var point in points) {\n if (points.hasOwnProperty(point)) {\n if (window.matchMedia(\"(max-width: \".concat(point, \"px)\")).matches) {\n return points[point];\n }\n }\n }\n }\n\n return defaults;\n }\n };\n /**\n * Overwrite instance settings with currently matching breakpoint settings.\n * This happens right after component initialization.\n */\n\n Object.assign(settings, Breakpoints.match(points));\n /**\n * Update glide with settings of matched brekpoint:\n * - window resize to update slider\n */\n\n Binder.on('resize', window, throttle(function () {\n Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n }, Glide.settings.throttle));\n /**\n * Resort and update default settings:\n * - on reinit via API, so breakpoint matching will be performed with options\n */\n\n Events.on('update', function () {\n points = sortBreakpoints(points);\n defaults = Object.assign({}, settings);\n });\n /**\n * Unbind resize listener:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Binder.off('resize', window);\n });\n return Breakpoints;\n}\n\nvar COMPONENTS = {\n // Required\n Html: Html,\n Translate: Translate,\n Transition: Transition,\n Direction: Direction,\n Peek: Peek,\n Sizes: Sizes,\n Gaps: Gaps,\n Move: Move,\n Clones: Clones,\n Resize: Resize,\n Build: Build,\n Run: Run,\n // Optional\n Swipe: Swipe,\n Images: Images,\n Anchors: Anchors,\n Controls: Controls,\n Keyboard: Keyboard,\n Autoplay: Autoplay,\n Breakpoints: Breakpoints\n};\n\nvar Glide = /*#__PURE__*/function (_Core) {\n _inherits(Glide, _Core);\n\n var _super = _createSuper(Glide);\n\n function Glide() {\n _classCallCheck(this, Glide);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return _get(_getPrototypeOf(Glide.prototype), \"mount\", this).call(this, Object.assign({}, COMPONENTS, extensions));\n }\n }]);\n\n return Glide;\n}(Glide$1);\n\nexport { Glide as default };\n","import Util from \"../utils/util.js\";\r\nimport Glide from '@glidejs/glide';\r\nclass FeatureMedia {\r\n constructor() {\r\n this.initFeatureMedia();\r\n }\r\n initFeatureMedia(){\r\n let featureMedia = Util.$('.js-feature-media');\r\n if(featureMedia.length> 0){\r\n featureMedia.forEach(el => {\r\n let slider = Util.$('.js-feature-media__slider', el);\r\n if(slider.length > 0){\r\n let activeSlideIndicator = Util.$('.js-feature-media__ctrl-count-current', el)[0];\r\n let totalSlideIndicator = Util.$('.js-feature-media__ctrl-count-total', el)[0];\r\n let slideCount = Util.$('.js-glide__slide', el).length;\r\n let current = 1;\r\n let activeSlide = '';\r\n let canShift = false;\r\n let showMultiple = el.classList.contains('-show-multiple');\r\n let thisSlider = \"\";\r\n if(!showMultiple){\r\n thisSlider = new Glide(el, {\r\n rewind : false,\r\n animationDuration : 350,\r\n animationTimingFunc: 'ease-out'\r\n });\r\n }else{\r\n thisSlider = new Glide(el, {\r\n rewind : false,\r\n animationDuration : 350,\r\n animationTimingFunc: 'ease-out',\r\n gap: 30\r\n });\r\n }\r\n\r\n thisSlider.on('run.before', function(ev){\r\n activeSlide = Util.$('.glide__slide.glide__slide--active', el)[0];\r\n \r\n if(ev.direction === \">\"){\r\n if(current < slideCount){\r\n current = current + 1;\r\n canShift = true;\r\n }else{\r\n canShift = false;\r\n }\r\n \r\n }else{\r\n if(current > 1){\r\n current = current - 1;\r\n canShift = true;\r\n }else{\r\n canShift = false;\r\n }\r\n }\r\n if(canShift){\r\n if(!showMultiple){\r\n activeSlide.classList.add('-leaving');\r\n }\r\n if (activeSlideIndicator)\r\n activeSlideIndicator.textContent = current;\r\n }\r\n \r\n });\r\n thisSlider.on('run.after', function(ev){\r\n if(canShift && !showMultiple){\r\n activeSlide.classList.remove('-leaving');\r\n }\r\n });\r\n thisSlider.on('mount.before', function(ev){\r\n if (activeSlideIndicator)\r\n activeSlideIndicator.textContent = current;\r\n if (totalSlideIndicator)\r\n totalSlideIndicator.textContent = slideCount;\r\n });\r\n thisSlider.mount();\r\n }\r\n });\r\n }\r\n \r\n }\r\n}\r\nexport default FeatureMedia;","import Util from \"../utils/util.js\";\r\nimport Glide from '@glidejs/glide';\r\nimport lightGallery from 'lightgallery';\r\n\r\n// Plugins\r\nimport lgZoom from 'lightgallery/plugins/zoom'\r\nclass ParagraphBannerSlider {\r\n constructor() {\r\n this.initParagraphBannerSlider();\r\n }\r\n initParagraphBannerSlider(){\r\n let paragraphBannerSlider = Util.$('.js-paragraph-banner-slider');\r\n if(paragraphBannerSlider.length > 0){\r\n paragraphBannerSlider.forEach(el => {\r\n let slider = Util.$('.js-paragraph-banner-slider__media-slider', el);\r\n if(slider.length > 0){\r\n lightGallery(slider[0], {\r\n plugins: [lgZoom],\r\n licenseKey: 'C94E7EDA-1939-4C9D-A24B-8E652BE5EFBD',\r\n speed: 500,\r\n download: false,\r\n selector: '.js-paragraph-banner-slider__lightbox-link'\r\n });\r\n let thisSlider = new Glide(slider[0], {\r\n rewind : false,\r\n animationDuration : 350,\r\n animationTimingFunc: 'ease-out'\r\n });\r\n let ctrls = Util.$('.js-paragraph-banner-slider__bullets', el);\r\n let slides = Util.$('.js-glide__slide', el);\r\n let index = 0;\r\n let lightboxLink = Util.$('.js-paragraph-banner-slider__lightbox-toggle', el)[0];\r\n lightboxLink.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n let currentSlide = Util.$('.js-glide__slide.glide__slide--active', el)[0];\r\n let currentSlideLink = Util.$('.js-paragraph-banner-slider__lightbox-link', currentSlide)[0];\r\n currentSlideLink.click();\r\n });\r\n slides.forEach(el => {\r\n let bullet = document.createElement('button');\r\n bullet.setAttribute('data-glide-dir', \"=\" + index );\r\n bullet.setAttribute('class', 'glide__bullet' );\r\n ctrls[0].append(bullet);\r\n index = index + 1;\r\n });\r\n thisSlider.mount();\r\n }\r\n });\r\n }\r\n \r\n }\r\n}\r\nexport default ParagraphBannerSlider;","import { gsap } from \"gsap/gsap-core\";\r\nimport { CSSPlugin } from 'gsap/CSSPlugin';\r\nimport Util from \"../utils/util.js\";\r\ngsap.registerPlugin(CSSPlugin);\r\nclass Amenities {\r\n constructor() {\r\n this.initAmenities();\r\n }\r\n settings = {\r\n desktop: '1056px',\r\n toggleClass: '-item-active'\r\n }\r\n mobileCheck(){\r\n if(window.matchMedia('(min-width:'+ this.settings.desktop +')').matches){\r\n return false;\r\n }else{\r\n return true;\r\n }\r\n }\r\n initAmenities(){\r\n let amenities = Util.$('.js-amenities');\r\n let a = this;\r\n amenities.forEach(function(el){\r\n let toggle = Util.$('.js-amenities__mobile-toggle', el)[0];\r\n let content = Util.$('.js-amenities__group-wrapper', el)[0];\r\n a.bindAmenitiesToggle(el, toggle, content);\r\n });\r\n //this.bindDropdownToggle(mainNav[0], menuButton[0], header[0], '-main-nav-open');\r\n }\r\n bindAmenitiesToggle(amenities, toggle, content){\r\n // FOR ALL MENU TOGGLE BUTTONS - TOGGLE CLASS ON ITEM AND DROPDOWN\r\n let h = this;\r\n \r\n \r\n toggle.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n toggle.classList.add('-hidden');\r\n amenities.classList.add('-show-all');\r\n });\r\n }\r\n showAmenities(accordion, container, height){\r\n let tween = {height: ''};\r\n tween.height = height;\r\n tween.onComplete = function(accordion){\r\n console.log('CALLBACK');\r\n console.log(accordion);\r\n accordion.classList.add('-open');\r\n };\r\n tween.onCompleteParams = [accordion];\r\n gsap.to(container, tween);\r\n }\r\n hideAmenities(accordion, container){\r\n let tween = {height: '0px'};\r\n tween.onComplete = function(accordion){\r\n console.log('CALLBACK');\r\n console.log(accordion);\r\n accordion.classList.remove('-open');\r\n };\r\n tween.onCompleteParams = [accordion];\r\n gsap.to(container, tween);\r\n } \r\n}\r\nexport default Amenities;","import { gsap } from \"gsap/gsap-core\";\r\nimport { CSSPlugin } from 'gsap/CSSPlugin';\r\nimport Util from \"../utils/util.js\";\r\nimport * as fecha from \"fecha\";\r\nimport HotelDatepicker from \"hotel-datepicker\";\r\n\r\ngsap.registerPlugin(CSSPlugin);\r\nclass Booking {\r\n constructor() {\r\n this.initBooking();\r\n }\r\n settings = {\r\n desktop: '1056px',\r\n toggleClass: '-item-active'\r\n }\r\n mobileCheck(){\r\n if(window.matchMedia('(min-width:'+ this.settings.desktop +')').matches){\r\n return false;\r\n }else{\r\n return true;\r\n }\r\n }\r\n initBooking(){\r\n let bookingbar = Util.$('.js-booking');\r\n let lpb = this;\r\n \r\n \r\n \r\n if(bookingbar.length > 0){\r\n //lpb.bindBookingBarToggle(el, toggle, content);\r\n bookingbar.forEach(function(el){\r\n let thisBar = el;\r\n let formGroups = Util.$('.js-booking__input-ctrl-group', thisBar);\r\n let submit = Util.$('.js-booking__input-submit-btn', thisBar)[0];\r\n let mobileToggle = Util.$('.js-booking__mobile-toggle-btn', thisBar)[0];\r\n let mobileToggleDropdown = Util.$('.js-booking__bar',thisBar)[0];\r\n let mobileToggleDropdownContent = Util.$('.js-booking__bar-wrapper',thisBar)[0];\r\n const labels = Util.$('.js-booking__input-date',thisBar);\r\n labels.forEach(function(el){\r\n const thisSvg = el.nextElementSibling;\r\n thisSvg.addEventListener('click', function(e) {\r\n el.focus();\r\n });\r\n });\r\n formGroups.forEach(function(el){\r\n lpb.bindIncrements(el);\r\n });\r\n lpb.bindSearch(submit);\r\n lpb.bindMobileToggle(mobileToggle, mobileToggleDropdown, mobileToggleDropdownContent);\r\n });\r\n }\r\n\r\n const bookingToggle = document.querySelector('.js-booking__toggle');\r\n if (bookingToggle) {\r\n //Show primary dropdown\r\n bookingToggle.addEventListener('click', function(e) {\r\n e.preventDefault();\r\n const bookingToggleDropdown = document.querySelector('.js-booking__callout');\r\n const mobileToggle = document.querySelector('.js-booking__mobile-toggle-btn');\r\n if (bookingToggleDropdown.classList.contains('-open')) {\r\n let tween = {height: '0px'};\r\n if (window.matchMedia('(min-width: 1056px)').matches){\r\n gsap.to(bookingToggleDropdown, tween);\r\n }else{\r\n mobileToggle.click();\r\n }\r\n bookingToggleDropdown.classList.remove('-open');\r\n bookingToggle.parentElement.classList.remove('-active');\r\n } else {\r\n let tween = {height: ''};\r\n if (window.matchMedia('(min-width: 1056px)').matches){\r\n tween.height = 340;\r\n gsap.to(bookingToggleDropdown, tween);\r\n }else{\r\n tween.height = 60;\r\n mobileToggle.click();\r\n }\r\n \r\n \r\n bookingToggleDropdown.classList.add('-open');\r\n bookingToggle.parentElement.classList.add('-active');\r\n }\r\n });\r\n }\r\n \r\n\r\n const inputArrival = document.getElementById('arrival');\r\n const inputDeparture = document.getElementById('departure');\r\n\r\n if (inputArrival && inputDeparture) {\r\n \r\n const datePickerOptions = {\r\n topbarPosition: 'bottom',\r\n autoClose: false,\r\n clearButton: true,\r\n submitButton: true,\r\n submitButtonName: 'Submit',\r\n moveBothMonths: true\r\n };\r\n const inputArrivalDatePicker = new HotelDatepicker(inputArrival, datePickerOptions);\r\n const inputDepartureDatePicker = new HotelDatepicker(inputDeparture, datePickerOptions);\r\n const labelArrival = document.querySelector('.booking__mobile-date.-arrival');\r\n const labelDeparture = document.querySelector('.booking__mobile-date.-departure');\r\n\r\n inputArrival.addEventListener('afterClose', function () {\r\n let arrivalDate = inputArrivalDatePicker.start;\r\n let departureDate = inputArrivalDatePicker.end;\r\n if (arrivalDate && departureDate) {\r\n arrivalDate = new Date(arrivalDate);\r\n departureDate = new Date(departureDate);\r\n const\r\n arrivalDateVal = arrivalDate.toISOString().substring(0, 10),\r\n arrivalDateTxt = arrivalDate.toLocaleDateString('en-us', { month:\"short\", day:\"numeric\"})\r\n const\r\n departureDateVal = departureDate.toISOString().substring(0, 10),\r\n departureDateTxt = departureDate.toLocaleDateString('en-us', { month:\"short\", day:\"numeric\"});\r\n\r\n inputArrival.dataset.value = arrivalDateVal;\r\n inputDeparture.dataset.value = departureDateVal;\r\n inputArrival.value = arrivalDateTxt;\r\n inputDeparture.value = departureDateTxt;\r\n\r\n if (labelArrival)\r\n labelArrival.innerHTML = arrivalDateTxt;\r\n if (labelDeparture)\r\n labelDeparture.innerHTML = departureDateTxt;\r\n \r\n inputDepartureDatePicker.start = arrivalDate;\r\n inputDepartureDatePicker.end = departureDate;\r\n } else {\r\n Date.prototype.addDays = function(days) {\r\n var date = new Date(this.valueOf());\r\n date.setDate(date.getDate() + days);\r\n return date;\r\n }\r\n const today = new Date();\r\n const tomorrow = today.addDays(1);\r\n const firstDay = tomorrow.toLocaleDateString('en-us', { month:\"short\", day:\"numeric\"});\r\n const twoDays = tomorrow.addDays(2);\r\n const lastDay = twoDays.toLocaleDateString('en-us', { month:\"short\", day:\"numeric\"});\r\n inputArrival.value = firstDay;\r\n inputDeparture.value = lastDay;\r\n }\r\n }, false);\r\n\r\n inputDeparture.addEventListener('afterClose', function () {\r\n const arrivalDate = new Date(inputDepartureDatePicker.start);\r\n const departureDate = new Date(inputDepartureDatePicker.end);\r\n if (arrivalDate && departureDate) {\r\n const testDate = arrivalDate.toLocaleDateString('en-us', { month:\"short\", day:\"numeric\"});\r\n let\r\n arrivalDateVal,\r\n arrivalDateTxt;\r\n let\r\n departureDateVal,\r\n departureDateTxt;\r\n // inputArrival.value = arrivalDateVal;\r\n // inputDeparture.value = departureDateVal;\r\n // inputArrivalDatePicker.start = arrivalDate;\r\n // inputArrivalDatePicker.end = departureDate;\r\n \r\n // FIXING DATE PICKER BUG\r\n // TODO - Clean up this code\r\n if(testDate === \"Dec 31\" || testDate === \"Jan 1\"){\r\n const today = new Date();\r\n Date.prototype.addDays = function(days) {\r\n var date = new Date(this.valueOf());\r\n date.setDate(date.getDate() + days);\r\n return date;\r\n }\r\n const tomorrow = today.addDays(1);\r\n const twoDays = tomorrow.addDays(2);\r\n arrivalDateVal = tomorrow.toISOString().substring(0, 10);\r\n arrivalDateTxt = tomorrow.toLocaleDateString('en-us', { month:\"short\", day:\"numeric\"});\r\n departureDateVal = twoDays.toISOString().substring(0, 10);\r\n departureDateTxt = twoDays.toLocaleDateString('en-us', { month:\"short\", day:\"numeric\"});\r\n\r\n }else{\r\n arrivalDateVal = arrivalDate.toISOString().substring(0, 10);\r\n arrivalDateTxt = arrivalDate.toLocaleDateString('en-us', { month:\"short\", day:\"numeric\"});\r\n departureDateVal = departureDate.toISOString().substring(0, 10);\r\n departureDateTxt = departureDate.toLocaleDateString('en-us', { month:\"short\", day:\"numeric\"});\r\n\r\n }\r\n\r\n inputArrival.dataset.value = arrivalDateVal;\r\n inputDeparture.dataset.value = departureDateVal;\r\n inputArrival.value = arrivalDateTxt;\r\n inputDeparture.value = departureDateTxt;\r\n\r\n if (labelArrival)\r\n labelArrival.innerHTML = arrivalDateTxt;\r\n if (labelDeparture)\r\n labelDeparture.innerHTML = departureDateTxt;\r\n \r\n inputDepartureDatePicker.start = arrivalDate;\r\n inputDepartureDatePicker.end = departureDate;\r\n } else {\r\n Date.prototype.addDays = function(days) {\r\n var date = new Date(this.valueOf());\r\n date.setDate(date.getDate() + days);\r\n return date;\r\n }\r\n const today = new Date();\r\n const tomorrow = today.addDays(1);\r\n const firstDay = tomorrow.toLocaleDateString('en-us', { month:\"short\", day:\"numeric\"});\r\n const twoDays = tomorrow.addDays(2);\r\n const lastDay = twoDays.toLocaleDateString('en-us', { month:\"short\", day:\"numeric\"});\r\n inputArrival.value = firstDay;\r\n inputDeparture.value = lastDay;\r\n }\r\n }, false);\r\n }\r\n \r\n }\r\n bindIncrements(formGroup){\r\n let formInput = Util.$('.js-booking__input', formGroup)[0];\r\n let formBtns = Util.$('.js-booking__input-btn', formGroup);\r\n formBtns.forEach(function(el){\r\n el.addEventListener('click', function(ev){\r\n if(el.classList.contains('-less')){\r\n if(parseInt(formInput.value)> 0){\r\n formInput.value = parseInt(formInput.value) - 1;\r\n }\r\n }else{\r\n formInput.value = parseInt(formInput.value) + 1;\r\n }\r\n });\r\n });\r\n }\r\n bindSearch(btn){\r\n btn.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n let url = \"https://inntopia.travel/Ecomm/Shop/Lodging/5707625/en-US/\";\r\n let queryString = \"?\";\r\n let arrival = document.getElementById(\"arrival\").dataset.value;\r\n let departure = document.getElementById(\"departure\").dataset.value;\r\n let adultCount = document.getElementById(\"adults\").value;\r\n let childCount = document.getElementById(\"children\").value;\r\n queryString = queryString + 'arrivalDate='+arrival+'&departureDate='+departure+'&adultcount='+adultCount+'&childcount='+childCount;\r\n url = url+queryString;\r\n window.open(url, \"_blank\");\r\n })\r\n }\r\n bindMobileToggle(toggle, dropdown, content){\r\n // FOR ALL MENU TOGGLE BUTTONS - TOGGLE CLASS ON ITEM AND DROPDOWN\r\n let h = this;\r\n \r\n toggle.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n if(toggle.classList.contains('-active')){\r\n h.hideDropdown(dropdown);\r\n toggle.classList.remove('-active');\r\n }else{\r\n let height = content.offsetHeight + 30;\r\n h.showDropdown(dropdown, height);\r\n toggle.classList.add('-active');\r\n }\r\n });\r\n \r\n }\r\n showDropdown(dropdown,height){\r\n let tween = {height: ''};\r\n tween.height = height;\r\n gsap.to(dropdown, tween);\r\n }\r\n hideDropdown(dropdown){\r\n let tween = {height: '0px'};\r\n gsap.to(dropdown, tween);\r\n }\r\n}\r\nexport default Booking;","import Shuffle from 'shufflejs';\r\n\r\nclass Weddings {\r\n constructor() {\r\n this.initWeddings();\r\n }\r\n initWeddings(){\r\n\r\n // Check for result groups\r\n const resultGroups = document.querySelectorAll('.js-shuffle__results');\r\n // TODO: clean up this conditional\r\n if (resultGroups.length > 0 && resultGroups[0].classList.contains('weddings__result-list')) {\r\n // For each result group\r\n for (let results of resultGroups) {\r\n const resultsId = results.getAttribute('id');\r\n\r\n // TODO: remove load more from weddings entirely\r\n let loadMore = false;\r\n\r\n // Check for filters\r\n const filters = document.querySelector('.js-filters[data-results=\"' + resultsId + '\"]');\r\n\r\n // Check for results counter\r\n const resultsCounter = results.parentElement.querySelector('.js-shuffle__count');\r\n let lastLoadMoreCount = 0;\r\n\r\n // Count functionality\r\n function updateCount(filtersCount, resultsCount, filtersCounter, resultsCounter, resultsText, loadMore, reset) {\r\n if (filtersCount && filtersCounter) {\r\n filtersCounter.innerHTML = filtersCount;\r\n }\r\n if (resultsCount >= 0 && resultsText) {\r\n const counterTotal = resultsCounter.querySelector('.js-shuffle__count-total');\r\n const counterVisible = resultsCounter.querySelector('.js-shuffle__count-visible');\r\n if (counterTotal)\r\n counterTotal.innerHTML = resultsCount;\r\n if (counterVisible)\r\n counterVisible.innerHTML = resultsCount;\r\n\r\n const noResultsText = resultsText.nextElementSibling;\r\n const loadMoreBtn = resultsText.parentElement.querySelector('.js-shuffle__btn');\r\n\r\n if (resultsCount == 0 && !reset) {\r\n\r\n if (loadMoreBtn) {\r\n loadMoreBtn.click();\r\n } else {\r\n resultsText.classList.remove('-active');\r\n if (noResultsText)\r\n noResultsText.classList.add('-active');\r\n }\r\n } else {\r\n if (loadMoreBtn) {\r\n loadMoreBtn.removeAttribute('data-reset');\r\n reset = null;\r\n }\r\n resultsText.classList.add('-active');\r\n if (noResultsText)\r\n noResultsText.classList.remove('-active');\r\n }\r\n }\r\n }\r\n\r\n // Shuffle setup TODO: init on select click;\r\n let shuffleInstance;\r\n //let shuffleInitialized = false;\r\n if (filters) {\r\n const isWeddings = filters.classList.contains('weddings__filter-group');\r\n // TODO: Find a way to intial everything long after page\r\n // filters.addEventListener('click', function(ev){\r\n // console.log('filter click');\r\n // if(!shuffleInitialized){\r\n // console.log('FIRST INIT');\r\n // shuffleInstance = new Shuffle(document.getElementById(resultsId), {\r\n // itemSelector: '.js-shuffle__result',\r\n // sizer: '.js-shuffle__sizer',\r\n // columnThreshold: 1,\r\n // delimiter: ',',\r\n // filterMode: 'all'\r\n // });\r\n // shuffleInitialized = true;\r\n // }\r\n // });\r\n if (isWeddings) {\r\n shuffleInstance = new Shuffle(document.getElementById(resultsId), {\r\n itemSelector: '.js-shuffle__result',\r\n sizer: '.js-shuffle__sizer',\r\n columnThreshold: 1,\r\n delimiter: ',',\r\n filterMode: 'all'\r\n });\r\n } else {\r\n shuffleInstance = new Shuffle(document.getElementById(resultsId), {\r\n itemSelector: '.js-shuffle__result',\r\n columnThreshold: 1,\r\n delimiter: ',',\r\n });\r\n }\r\n } else {\r\n shuffleInstance = new Shuffle(document.getElementById(resultsId), {\r\n itemSelector: '.js-shuffle__result',\r\n sizer: '.js-shuffle__sizer',\r\n columnThreshold: 1,\r\n delimiter: ',',\r\n });\r\n }\r\n \r\n // Check for filters\r\n if (filters) {\r\n let selectedFilters = [];\r\n let selectedDateRange = '';\r\n let submittedOnce = false;\r\n let filterDateRange = [];\r\n let hasTag = false;\r\n let datesInRange = false;\r\n\r\n // Programtically trigger select changes\r\n function triggerChange(element) {\r\n let changeEvent = new Event('change');\r\n element.dispatchEvent(changeEvent);\r\n }\r\n\r\n // Custom select functionality\r\n // TODO: Remove or adjust\r\n function initSelects(selects) {\r\n \r\n for (let select of selects) {\r\n \r\n const native = select.querySelector('.js-select__native');\r\n\r\n if (native) {\r\n\r\n native.onclick = () => {\r\n \r\n let thisSelect = select;\r\n for (let select of selects) { \r\n if(thisSelect != select){\r\n select.classList.remove('-open');\r\n select.querySelector('.js-select__native').classList.remove('-focused');\r\n //native.blur();\r\n } \r\n \r\n }\r\n select.classList.add('-open');\r\n native.classList.add('-focused');\r\n };\r\n native.onchange = () => {\r\n select.classList.remove('-open');\r\n native.classList.remove('-focused');\r\n };\r\n\r\n const custom = select.querySelector('.js-select__custom');\r\n const customOptions = custom.querySelectorAll('a');\r\n\r\n if (customOptions.length > 0) {\r\n\r\n for (let customOption of customOptions) {\r\n\r\n if (!customOption.classList.contains('select__faux')) {\r\n customOption.onclick = (event) => {\r\n event.preventDefault();\r\n const group = customOption.getAttribute('data-group');\r\n const text = customOption.innerHTML;\r\n native.value = group;\r\n triggerChange(native);\r\n custom.querySelector('li:first-child a').innerHTML = text;\r\n };\r\n }\r\n else {\r\n customOption.onclick = (event) => {\r\n event.preventDefault();\r\n select.classList.remove('-open');\r\n native.classList.remove('-focused');\r\n };\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Reset filters functionality\r\n function resetFilters(selects, shuffleInstance, filtersCounter, resultsCounter, resultsText, resultsList) {\r\n if (selects.length > 0) {\r\n for (let select of selects) {\r\n let selectNative = select.querySelector('.js-select__native');\r\n selectNative.value = '';\r\n triggerChange(selectNative);\r\n }\r\n }\r\n \r\n let resultsItems = resultsList.querySelectorAll('.js-shuffle__results');\r\n const loadMoreBtn = resultsList.parentElement.querySelector('.js-shuffle__btn');\r\n\r\n shuffleInstance.filter();\r\n updateCount(null, shuffleInstance.visibleItems, null, resultsCounter, resultsText, false, true);\r\n selectedFilters = [];\r\n selectedDateRange = '';\r\n submittedOnce = false;\r\n filterDateRange = [];\r\n }\r\n\r\n // Submit filters functionality\r\n function submitFilters(submit, resets, selects, shuffleInstance, filtersCounter, resultsCounter, resultsText, filtersLightbox, results, loadMore) {\r\n let i = 0;\r\n let shuffleFilters = [];\r\n \r\n if (selects.length > 0) {\r\n for (let select of selects) {\r\n const selectNative = select.querySelector('.js-select__native');\r\n\r\n if (selectNative.value) {\r\n shuffleFilters.push(selectNative.value);\r\n i++;\r\n }\r\n }\r\n }\r\n\r\n if (!loadMore) {\r\n Shuffle.FilterMode.ALL;\r\n }\r\n if (shuffleFilters.length > 0) {\r\n shuffleInstance.filter(shuffleFilters);\r\n } else {\r\n shuffleInstance.filter();\r\n }\r\n\r\n let filteredResults = results.querySelectorAll('.shuffle-item--visible.-visible');\r\n if (!loadMore) {\r\n filteredResults = results.querySelectorAll('.shuffle-item--visible');\r\n }\r\n\r\n if (filteredResults.length > 0) {\r\n if (loadMore) {\r\n if (filteredResults != shuffleInstance.visibleItems)\r\n updateCount(shuffleFilters.length, filteredResults.length, filtersCounter, resultsCounter, resultsText, true, false)\r\n else\r\n updateCount(shuffleFilters.length, shuffleInstance.visibleItems, filtersCounter, resultsCounter, resultsText, true, false);\r\n } else {\r\n if (filteredResults != shuffleInstance.visibleItems)\r\n updateCount(null, filteredResults.length, filtersCounter, resultsCounter, resultsText, true, false)\r\n else\r\n updateCount(null, shuffleInstance.visibleItems, filtersCounter, resultsCounter, resultsText, true, false);\r\n }\r\n } else {\r\n updateCount(0, 0, filtersCounter, resultsCounter, resultsText, true, false);\r\n }\r\n }\r\n\r\n // Activate filter controls for a set of results\r\n function initFilterControls(filterGroup, shuffleInstance, filtersCounter, resultsCounter, resultsText, filtersLightbox, filterLightboxTrigger, results) {\r\n\r\n if (filterGroup) {\r\n \r\n let resets;\r\n resets = document.querySelectorAll('.js-filters__btn-reset');\r\n\r\n // Gather filter controls\r\n const selects = filterGroup.querySelectorAll('.js-select__wrap');\r\n const submit = filterGroup.querySelector('.js-filters__btn-submit');\r\n\r\n\r\n if (selectedFilters.length > 0) {\r\n\r\n for (let filter of selectedFilters) {\r\n \r\n for (let select of selects) {\r\n const options = select.querySelectorAll('option');\r\n for (let option of options) {\r\n if (option.getAttribute('data-group') === filter) {\r\n option.selected = true;\r\n triggerChange(select);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Initiate all filter controls\r\n if (selects.length > 0)\r\n initSelects(selects);\r\n\r\n if (resets.length > 0) {\r\n\r\n for (let reset of resets) {\r\n reset.onclick = () => resetFilters(selects, shuffleInstance, filtersCounter, resultsCounter, resultsText, results);\r\n }\r\n }\r\n if (submit)\r\n submit.onclick = () => submitFilters(submit, resets, selects, shuffleInstance, filtersCounter, resultsCounter, resultsText, filtersLightbox, results, loadMore);\r\n\r\n // Update counters with visible count on page load\r\n window.addEventListener('load', () => {\r\n let thisCount = document.querySelectorAll('.js-shuffle__result').length;\r\n updateCount(0, thisCount, filtersCounter, resultsCounter, resultsText, true, false); updateCount(0, thisCount, filtersCounter, resultsCounter, resultsText, true, false); \r\n });\r\n }\r\n }\r\n\r\n // Check for lightbox content\r\n const filtersLightbox = filters.parentElement;\r\n \r\n initFilterControls(filters, shuffleInstance, null, resultsCounter, resultsCounter, null, null, results);\r\n }\r\n }// End loop of result group\r\n }\r\n }\r\n}\r\nexport default Weddings;\r\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","import { getWindow, getDocument } from 'ssr-window';\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowEl && slideEl.shadowEl.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction findElementsInElements(elements = [], selector = '') {\n const found = [];\n elements.forEach(el => {\n found.push(...el.querySelectorAll(selector));\n });\n return found;\n}\nfunction elementChildren(element, selector = '') {\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction createElement(tag, classes = []) {\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : [classes]));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty, getSlideTransformEl,\n// dom\nfindElementsInElements, createElement, elementChildren, elementOffset, elementPrevAll, elementNextAll, elementStyle, elementIndex, elementParents, elementTransitionEnd, elementOuterSize };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n return {\n isSafari: needPerspectiveFix || isSafari(),\n needPerspectiveFix,\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\nexport { getBrowser };","/* eslint-disable no-underscore-dangle */\n\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};","export const processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n const lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nexport const preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","import { elementStyle } from '../../shared/utils.js';\nexport default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { elementChildren, elementOuterSize, elementStyle, setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}","export default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass);\n });\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides[i].classList.add(params.slideVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}","export default function updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}","import { elementChildren, elementNextAll, elementPrevAll } from '../../shared/utils.js';\nexport default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n });\n let activeSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n activeSlide = slides[activeIndex];\n }\n if (activeSlide) {\n // Active classes\n activeSlide.classList.add(params.slideActiveClass);\n\n // Next Slide\n let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n if (nextSlide) {\n nextSlide.classList.add(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n if (prevSlide) {\n prevSlide.classList.add(params.slidePrevClass);\n }\n }\n swiper.emitSlidesClasses();\n}","import { preload } from '../../shared/process-lazy-preloader.js';\nexport function getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nexport default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n }\n return;\n }\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (swiper.slides[activeIndex]) {\n realIndex = parseInt(swiper.slides[activeIndex].getAttribute('data-swiper-slide-index') || activeIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","export default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = e.closest(`.${params.slideClass}, swiper-slide`);\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled) return swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import { elementChildren, nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { elementChildren } from '../../shared/utils.js';\nexport default function loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}","export default function loopFix({\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n} = {}) {\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));\n let loopedSlides = params.loopedSlides || slidesPerView;\n if (loopedSlides % params.slidesPerGroup !== 0) {\n loopedSlides += params.slidesPerGroup - loopedSlides % params.slidesPerGroup;\n }\n swiper.loopedSlides = loopedSlides;\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(swiper.slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n // prepend last slides before start\n if (activeSlideIndex < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeSlideIndex, params.slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeSlideIndex; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n prependSlidesIndexes.push(slides.length - index - 1);\n }\n } else if (activeSlideIndex /* + slidesPerView */ > swiper.slides.length - loopedSlides * 2) {\n slidesAppended = Math.max(activeSlideIndex - (swiper.slides.length - loopedSlides * 2), params.slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlidesIndexes.push(index);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n }\n }\n } else {\n if (setTranslate) {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n }\n }\n } else {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n slideTo: false,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix(loopParams);\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix(loopParams);\n }\n }\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}","import { getWindow, getDocument } from 'ssr-window';\nimport { now } from '../../shared/utils.js';\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n data.evCache.push(event);\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) data.evCache[pointerIndex] = e;\n const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e;\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n prevX: swiper.touches.currentX,\n prevY: swiper.touches.currentY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n if (!data.isMoved) {\n if (isLoop) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n if (data.isMoved && prevTouchesDirection !== swiper.touchesDirection && isLoop && Math.abs(diff) >= 1) {\n // need another loop fix\n swiper.loopFix({\n direction: swiper.swipeDirection,\n setTranslate: true\n });\n loopFixed = true;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && !loopFixed && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && !loopFixed && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === event.pointerId);\n if (pointerIndex >= 0) {\n data.evCache.splice(pointerIndex, 1);\n }\n if (['pointercancel', 'pointerout', 'pointerleave'].includes(event.type)) {\n const proceed = event.type === 'pointercancel' && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { processLazyPreloader } from '../../shared/process-lazy-preloader.js';\nexport default function onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nimport onLoad from './onLoad.js';\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n if (!dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n }\n swiper.emit('breakpoint', breakpointParams);\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}","export default {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopedSlides: null,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { extend, deleteProps, createElement, elementChildren, elementStyle, elementIndex } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nimport { processLazyPreloader, preload } from '../shared/process-lazy-preloader.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n evCache: []\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.shadowEl) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement ? el : wrapperEl,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n el.removeAttribute('style');\n wrapperEl.removeAttribute('style');\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n swiper.el.swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n }\n swiper.emit('setTransition', duration, byController);\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}","export default function unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nexport default {\n checkOverflow\n};","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nimport { elementParents } from '../../../shared/utils.js';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.el);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.el, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","/* eslint-disable consistent-return */\nimport { getWindow } from 'ssr-window';\nimport { now, nextTick } from '../../shared/utils.js';\nexport default function Mousewheel({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n noMousewheelClass: 'swiper-no-mousewheel'\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n\n // Ignore event if the target or its parents have the swiper-no-mousewheel class\n if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;\n const params = swiper.params.mousewheel;\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n const targetElContainsTarget = targetEl && targetEl.contains(e.target);\n if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n if (delta === 0) return true;\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n if (swiper.params.loop) {\n swiper.loopFix({\n direction: newEvent.direction < 0 ? 'next' : 'prev',\n byMousewheel: true\n });\n }\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n function events(method) {\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n targetEl[method]('mouseenter', handleMouseEnter);\n targetEl[method]('mouseleave', handleMouseLeave);\n targetEl[method]('wheel', handle);\n }\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n if (swiper.mousewheel.enabled) return false;\n events('addEventListener');\n swiper.mousewheel.enabled = true;\n return true;\n }\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n if (!swiper.mousewheel.enabled) return false;\n events('removeEventListener');\n swiper.mousewheel.enabled = false;\n return true;\n }\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n}","import { createElement, elementChildren } from './utils.js';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null\n };\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.shadowRoot.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nimport { createElement, elementOffset, nextTick } from '../../shared/utils.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Scrollbar({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null\n };\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\n dragEl.style.width = `${newSize}px`;\n } else {\n dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\n dragEl.style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(timeout);\n el.style.opacity = 1;\n timeout = setTimeout(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n }\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\n }\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n dragEl.style.width = '';\n dragEl.style.height = '';\n trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n if (swiper.isHorizontal()) {\n dragEl.style.width = `${dragSize}px`;\n } else {\n dragEl.style.height = `${dragSize}px`;\n }\n if (divider >= 1) {\n el.style.display = 'none';\n } else {\n el.style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n el.style.opacity = 0;\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);\n }\n }\n function getPointerPosition(e) {\n return swiper.isHorizontal() ? e.clientX : e.clientY;\n }\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n wrapperEl.style.transitionDuration = '100ms';\n dragEl.style.transitionDuration = '100ms';\n setDragPosition(e);\n clearTimeout(dragTimeout);\n el.style.transitionDuration = '0ms';\n if (params.hide) {\n el.style.opacity = 1;\n }\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = 'none';\n }\n emit('scrollbarDragStart', e);\n }\n function onDragMove(e) {\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n wrapperEl.style.transitionDuration = '0ms';\n el.style.transitionDuration = '0ms';\n dragEl.style.transitionDuration = '0ms';\n emit('scrollbarDragMove', e);\n }\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = '';\n wrapperEl.style.transitionDuration = '';\n }\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n function events(method) {\n const {\n scrollbar,\n params\n } = swiper;\n const el = scrollbar.el;\n if (!el) return;\n const target = el;\n const activeListener = params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n target[eventMethod]('pointerdown', onDragStart, activeListener);\n document[eventMethod]('pointermove', onDragMove, activeListener);\n document[eventMethod]('pointerup', onDragEnd, passiveListener);\n }\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n function init() {\n const {\n scrollbar,\n el: swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.shadowRoot.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = document.querySelectorAll(params.el);\n } else if (!el) {\n el = params.el;\n }\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {\n el = swiperEl.querySelector(params.el);\n }\n if (el.length > 0) el = el[0];\n el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let dragEl;\n if (el) {\n dragEl = el.querySelector(`.${swiper.params.scrollbar.dragClass}`);\n if (!dragEl) {\n dragEl = createElement('div', swiper.params.scrollbar.dragClass);\n el.append(dragEl);\n }\n }\n Object.assign(scrollbar, {\n el,\n dragEl\n });\n if (params.draggable) {\n enableDraggable();\n }\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);\n }\n }\n function destroy() {\n const params = swiper.params.scrollbar;\n const el = swiper.scrollbar.el;\n if (el) {\n el.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n }\n disableDraggable();\n }\n on('init', () => {\n if (swiper.params.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n el\n } = swiper.scrollbar;\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n init();\n updateSize();\n setTranslate();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n destroy();\n };\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}","/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.3.0\n * https://www.chartjs.org\n * (c) 2023 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for(i = len - 1; i >= 0; i--){\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for(i = 0, ilen = a0.length; i < ilen; ++i){\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n if (isArray(source)) {\n return source.map(clone);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for(; k < klen; ++k){\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for(let k = 0, klen = keys.length; k < klen; ++k){\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': (v)=>v,\n // default resolvers\n x: (o)=>o.x,\n y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts){\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a){\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for(i = 1; i < sqrt; i++){\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b)=>a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for(i = 0, ilen = array.length; i < ilen; i++){\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while(Math.round(x * e) / e !== x){\n e *= 10;\n p++;\n }\n return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < -0.5 * PI) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index)=>table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while(hi - lo > 1){\n mid = lo + hi >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while(start < end && values[start] < min){\n start++;\n }\n while(end > start && values[end - 1] > max){\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [\n listener\n ]\n }\n });\n arrayEvents.forEach((key)=>{\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value (...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object)=>{\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key)=>{\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, ()=>{\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const { iScale , _parsed } = meta;\n const axis = iScale.axis;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n const { xScale , yScale , _scaleRanges } = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: (t)=>t * t * t,\n easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: (t)=>t * t * t * t,\n easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: (t)=>t * t * t * t * t,\n easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n easeOutSine: (t)=>Math.sin(t * HALF_PI),\n easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic (t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack (t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack (t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack (t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n easeOutBounce (t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < 1 / d) {\n return m * t * t;\n }\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: (v)=>v | 0\n }\n }\n }\n });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n return isArray(value) ? value : '' + value;\n },\n numeric (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options)=>options.lineWidth,\n tickColor: (_ctx, options)=>options.color,\n offset: false\n },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for(let i = 0, n = keys.length; i < n; ++i){\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n constructor(_descriptors, _appliers){\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get () {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set (value) {\n this[privateName] = value;\n }\n }\n });\n }\n apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n _scriptable: (name)=>!name.startsWith('on'),\n _indexable: (name)=>name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n}, [\n applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for(i = 0; i < ilen; i++){\n thing = arrayOfThings[i];\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for(j = 0, jlen = thing.length; j < jlen; j++){\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for(i = 0; i < gcLen; i++){\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch(style){\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */ case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */ case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */ const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for(i = 0; i < lines.length; ++i){\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += Number(font.lineHeight);\n }\n ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch(matches[3]){\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight'\n ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for(i = 0, ilen = inputs.length; i < ilen; ++i){\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n const { min , max } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\n const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys } = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n let value = _proxy[prop]; // resolve from proxy\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n const { _proxy , _context , _subProxy , _stack } = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter((s)=>s !== arr);\n value = [];\n for (const item of arr){\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes){\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes){\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes){\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes){\n for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen - 1; ++i){\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for(i = 0, ilen = points.length; i < ilen; ++i){\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt)=>!pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for(i = 0, ilen = points.length; i < ilen; ++i){\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */ /**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for(let i = 0; i < 4; i++){\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const { canvas , currentDevicePixelRatio } = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const { x , y , box } = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let { width , height } = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let { width , height } = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x (x) {\n return rectX + rectX + width - x;\n },\n setWidth (w) {\n width = w;\n },\n textAlign (align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus (x, value) {\n return x - value;\n },\n leftForLtr (x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x (x) {\n return x;\n },\n setWidth (w) {},\n textAlign (align) {\n return align;\n },\n xPlus (x, value) {\n return x + value;\n },\n leftForLtr (x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction')\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n return {\n between: _isBetween,\n compare: (a, b)=>a - b,\n normalize: (x)=>x\n };\n}\nfunction normalizeSegment({ start , end , count , loop , style }) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const { property , start: startBound , end: endBound } = bounds;\n const { between , normalize } = propertyFn(property);\n const count = points.length;\n let { start , end , loop } = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for(i = 0, ilen = count; i < ilen; ++i){\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n segment\n ];\n }\n const { property , start: startBound , end: endBound } = bounds;\n const count = points.length;\n const { compare , between , normalize } = propertyFn(property);\n const { start , end , loop , style } = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = ()=>inside || startIsBefore();\n const shouldStop = ()=>!inside || endIsBefore();\n for(let i = start, prev = start; i <= end; ++i){\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for(let i = 0; i < segments.length; i++){\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while(start < count && !points[start].skip){\n start++;\n }\n }\n while(start < count && points[start].skip){\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while(end > start && points[end % count].skip){\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\n function solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for(end = start + 1; end <= max; ++end){\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const { start , end } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [\n {\n start,\n end,\n loop\n }\n ], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const { _datasetIndex: datasetIndex , options: { spanGaps } } = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while(points[s % count].skip){\n s -= dir;\n }\n while(points[e % count].skip){\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments){\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for(i = start + 1; i <= segment.end; i++){\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, fontString as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, overrideTextDirection as aA, _textX as aB, restoreTextDirection as aC, drawPointLegend as aD, distanceBetweenPoints as aE, noop as aF, _setMinAndMaxByKey as aG, niceNum as aH, almostWhole as aI, almostEquals as aJ, _decimalPlaces as aK, Ticks as aL, log10 as aM, _longestText as aN, _filterBetween as aO, _lookup as aP, isPatternOrGradient as aQ, getHoverColor as aR, clone as aS, _merger as aT, _mergerIf as aU, _deprecated as aV, _splitKey as aW, toFontString as aX, splineCurve as aY, splineCurveMonotone as aZ, getStyle as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, _elementsEqual as ah, _isClickEvent as ai, _isBetween as aj, _readValueToProps as ak, _updateBezierControlPoints as al, _computeSegments as am, _boundSegments as an, _steppedInterpolation as ao, _bezierInterpolation as ap, _pointInLine as aq, _steppedLineTo as ar, _bezierCurveTo as as, drawPoint as at, addRoundedRectPath as au, toTRBL as av, toTRBLCorners as aw, _boundSegment as ax, _normalizeAngle as ay, getRtlAdapter as az, isArray as b, toLineHeight as b0, PITAU as b1, INFINITY as b2, RAD_PER_DEG as b3, QUARTER_PI as b4, TWO_THIRDS_PI as b5, _angleDiff as b6, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.segment.js.map\n","/*!\n * Chart.js v4.3.0\n * https://www.chartjs.org\n * (c) 2023 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as _elementsEqual, ai as _isClickEvent, aj as _isBetween, ak as _readValueToProps, al as _updateBezierControlPoints, am as _computeSegments, an as _boundSegments, ao as _steppedInterpolation, ap as _bezierInterpolation, aq as _pointInLine, ar as _steppedLineTo, as as _bezierCurveTo, at as drawPoint, au as addRoundedRectPath, av as toTRBL, aw as toTRBLCorners, ax as _boundSegment, ay as _normalizeAngle, az as getRtlAdapter, aA as overrideTextDirection, aB as _textX, aC as restoreTextDirection, aD as drawPointLegend, aE as distanceBetweenPoints, aF as noop, aG as _setMinAndMaxByKey, aH as niceNum, aI as almostWhole, aJ as almostEquals, aK as _decimalPlaces, aL as Ticks, aM as log10, aN as _longestText, aO as _filterBetween, aP as _lookup } from './chunks/helpers.segment.js';\nimport '@kurkle/color';\n\nclass Animator {\n constructor(){\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach((fn)=>fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, ()=>{\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart)=>{\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for(; i >= 0; --i){\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for(; i >= 0; --i){\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean (from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color (from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number (from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to){\n const currentValue = target[prop];\n to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej)=>{\n promises.push({\n res,\n rej\n });\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for(let i = 0; i < promises.length; i++){\n promises[i][method]();\n }\n }\n}\n\nclass Animations {\n constructor(chart, config){\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach((key)=>{\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions){\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [\n key\n ]).forEach((prop)=>{\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(()=>{\n target.options = newOptions;\n }, ()=>{\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for(i = props.length - 1; i >= 0; --i){\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for(let i = 0; i < keys.length; i++){\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const { min , max , minDefined , maxDefined } = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n const value = stack[meta.index];\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const { chart , _cachedMeta: meta } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const { iScale , vScale , index: datasetIndex } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for(let i = 0; i < ilen; ++i){\n const item = parsed[i];\n const { [iAxis]: index , [vAxis]: value } = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n });\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items){\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const { _cachedMeta: meta , _data: data } = this;\n const { iScale , _stacked } = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n for(i = 0; i < count; ++i){\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for(i = 0; i < ilen; ++i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for(i = ilen - 1; i >= 0; --i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for(i = start; i < start + count; ++i){\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList){\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr)=>{\n arr.length += count;\n for(i = arr.length - 1; i >= end; i--){\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for(i = start; i < end; ++i){\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n }\n return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = ()=>{\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for(i = 0, ilen = values.length; i < ilen; ++i){\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for(i = start, ilen = start + count; i < ilen; ++i){\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const { start , end , reverse , top , bottom } = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n };\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for(i = start, ilen = start + count; i < ilen; ++i){\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const { iScale , vScale } = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const { index , _cachedMeta: { vScale } } = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const skipNull = (meta)=>{\n const parsed = meta.controller.getParsed(dataIndex);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const { _cachedMeta: { vScale , _stacked , index: datasetIndex } , options: { base: baseValue , minBarLength } } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for(; i < ilen; ++i){\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\n\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i)=>+data[i];\n if (isObject(data[start])) {\n const { key ='value' } = this._parsing;\n getter = (i)=>+resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for(i = start, ilen = start + count; i < ilen; ++i){\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for(let i = 0; i < this.chart.data.datasets.length; ++i){\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\n update(mode) {\n const chart = this.chart;\n const { chartArea } = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const { circumference , rotation } = this._getRotationExtents();\n const { ratioX , ratioY , offsetX , offsetY } = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for(i = 0; i < start; ++i){\n startAngle += this._circumference(i, reset);\n }\n for(i = start; i < start + count; ++i){\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for(i = 0; i < metaData.length; i++){\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for(i = 0, ilen = arcs.length; i < ilen; ++i){\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for(let i = 0; i < datasetIndex; ++i){\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for(i = 0; i < start; ++i){\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for(i = start; i < start + count; i++){\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n const { dataset: line , _dataset } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = start; i < start + count; ++i){\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const { controller , data , _sorted } = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n const { index , data } = metasets[i];\n const { lo , hi } = binarySearch(metasets[i], axis, value, intersect);\n for(let j = lo; j <= hi; ++j){\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n function getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for(let i = 0; i < data.length; ++i){\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\nfunction filterByPosition(array, position) {\n return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b)=>{\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n box = boxes[i];\n ({ position: pos , options: { stack , stackWeight =1 } } = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts){\n const { stack , pos , stackWeight } = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const { vBoxMaxWidth , hBoxMaxHeight } = params;\n let i, ilen, layout;\n for(i = 0, ilen = layouts.length; i < ilen; ++i){\n layout = layouts[i];\n const { fullSize } = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const { pos , box } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const { same , other } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let { x , y } = chartArea;\n for (const layout of boxes){\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n const weight = layout.stackWeight / stack.weight || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [\n {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\n }\n ];\n };\n chart.boxes.push(item);\n },\n removeBox (chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure (chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update (chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, (box)=>{\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, (layout)=>{\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const { x , y } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart)=>{\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height)=>{\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver((entries)=>{\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event)=>{\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n [\n 'height',\n 'width'\n ].forEach((prop)=>{\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key)=>{\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach((prop)=>{\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for(i = 0; i < ticks.length; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while(next < 0){\n count++;\n next = Math.round(start + count * spacing);\n }\n for(i = Math.max(start, 0); i < end; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n function getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for(diff = arr[0], i = 1; i < len; ++i){\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for(; i < len; i += increment){\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n function garbageCollect(caches, length) {\n each(caches, (cache)=>{\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for(i = 0; i < gcLen; ++i){\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const { top , left , bottom , right , chart } = scale;\n const { chartArea , scales } = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg){\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let { _userMin , _userMax , _suggestedMin , _suggestedMax } = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n max\n };\n }\n const metas = this.getMatchingVisibleMetas();\n for(let i = 0, ilen = metas.length; i < ilen; ++i){\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\n }\n update(maxWidth, maxHeight, margins) {\n const { beginAtZero , grace , ticks: tickOpts } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [\n this\n ]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const { first , last , widest , highest } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const { ticks: { align , padding } , position } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\n }\n isHorizontal() {\n const { axis , position } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const { ctx , _longestTextCache: caches } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for(i = 0; i < length; i += increment){\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for(j = 0, jlen = label.length; j < jlen; ++j){\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx)=>({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const { min , max } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const { grid , position , border } = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for(i = 0; i < ticksLength; i += step){\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const { position , ticks: optionTicks } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const { align , crossAlign , padding , mirror } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch(textBaseline){\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch(textAlign){\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const { position , ticks: { crossAlign , mirror , padding } } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n drawBackground() {\n const { ctx , options: { backgroundColor } , left , top , width , height } = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex((t)=>t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style)=>{\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for(i = 0, ilen = items.length; i < ilen; ++i){\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const { chart , ctx , options: { border , grid } } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this.getLabelItems(chartArea);\n for (const item of items){\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const { ctx , options: { position , title , reverse } } = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const { titleX , titleY , maxWidth , rotation } = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\n }\n ];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override){\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach((property)=>{\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [\n scope\n ].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor(){\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [\n this.controllers,\n this.scales,\n this.elements\n ];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [\n ...args\n ].forEach((arg)=>{\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n this._exec(method, reg, arg);\n } else {\n each(arg, (item)=>{\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for(let i = 0; i < this._typedRegistries.length; i++){\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors){\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [\n chart,\n args,\n descriptor.options\n ];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n function allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for(let i = 0; i < keys.length; i++){\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for(let i = 0; i < local.length; i++){\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, { plugins , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins){\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, { plugin , local }, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions){\n const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n axis\n };\n }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n Object.keys(configScales).forEach((id)=>{\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\n });\n config.data.datasets.forEach((dataset)=>{\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config){\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, ()=>[\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n [\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]\n ]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`, ()=>[\n [\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || []\n ]\n ]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const { options , type } = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach((keys)=>{\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n }\n keys.forEach((key)=>addIfFound(scopes, options, key));\n keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach((key)=>addIfFound(scopes, defaults, key));\n keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const { options , type } = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\n const { resolver , subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names){\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).reduce((acc, key)=>acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n const { isScriptable , isIndexable } = _descriptors(proxy);\n for (const prop of names){\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.3.0\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys){\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nfunction getDatasetArea(meta) {\n const { xScale , yScale } = meta;\n if (xScale && yScale) {\n return {\n left: xScale.left,\n right: xScale.right,\n top: yScale.top,\n bottom: yScale.bottom\n };\n }\n}\nclass Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n constructor(item, userConfig){\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const { options: { aspectRatio , maintainAspectRatio } , width , height , _aspectRatio } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n height\n };\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID)=>{\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id)=>{\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map((id)=>{\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n each(items, (item)=>{\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id)=>{\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale)=>{\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b)=>a.index - b.index);\n if (numMeta > numData) {\n for(let i = numData; i < numMeta; ++i){\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const { _metasets: metasets , data: { datasets } } = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index)=>{\n if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for(i = 0, ilen = datasets.length; i < ilen; i++){\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const { datasetElementType , dataElementType } = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex)=>{\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n const { controller } = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller)=>{\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const { _active , _lastEvent } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const { _hiddenIndices } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const { method , start , count } of changes){\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n const changeSet = makeSet(0);\n for(let i = 1; i < datasetCount; i++){\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box)=>{\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index)=>{\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this.getDatasetMeta(i).controller.configure();\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._updateDataset(i, isFunction(mode) ? mode({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const layers = this._layers;\n for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for(; i < layers.length; ++i){\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta) || this.chartArea;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener)=>{\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val)=>{\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n const { x , y , startAngle: start , pixelMargin , innerRadius: innerR } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const { outerStart , outerEnd , innerStart , innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle , borderDash , borderDashOffset } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\n constructor(cfg){\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\n const { startAngle , endAngle , innerRadius , outerRadius , circumference } = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , startAngle , endAngle , innerRadius , outerRadius } = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const { offset , spacing } = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const { options , circumference } = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\n}\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const { start: paramsStart = 0 , end: paramsEnd = count - 1 } = params;\n const { start: segmentStart , end: segmentEnd } = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n function pathSegment(ctx, line, segment, params) {\n const { points , options } = line;\n const { count , start , loop , ilen } = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let { move =true , reverse } = params || {};\n let i, point, prev;\n for(i = 0; i <= ilen; ++i){\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const { count , start , ilen } = pathVars(points, segment, params);\n const { move =true , reverse } = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n const drawX = ()=>{\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for(i = 0; i <= ilen; ++i){\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\n function _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const { segments , options } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments){\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n static id = 'line';\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg){\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for(i = 0, ilen = segments.length; i < ilen; ++i){\n const { start , end } = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments){\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\n */ static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const { enableBorderRadius } = bar.getProps([\n 'enableBorderRadius'\n ]);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const { inflateAmount , options: { borderColor , backgroundColor } } = this;\n const { inner , outer } = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , base , horizontal } = this.getProps([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n if (!options.forceOverride && (containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements))) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for(i = 0; i < samples - 2; i++){\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for(j = avgRangeStart; j < avgRangeEnd; j++){\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const { x: pointAx , y: pointAy } = data[a];\n maxArea = area = -1;\n for(j = rangeOffs; j < rangeTo; j++){\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for(i = start; i < start + count; ++i){\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset)=>{\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const { iScale } = meta;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options)=>{\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex)=>{\n const { _data , indexAxis } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch(options.algorithm){\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments){\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources){\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const { x =null , y =null } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({ start , end })=>{\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for(; end > start; end--){\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\n let target;\n if (!propagate) {\n return fill;\n }\n while(fill !== false && visited.indexOf(fill) === -1){\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const { scale , index , line } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n for(let j = segment.start; j <= segment.end; j++){\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\n function getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for(let i = 0; i < metas.length; i++){\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for(let j = 0; j < linesBelow.length; j++){\n const line = linesBelow[j];\n const { first , last , point } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const { x , y , radius } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const { scale , fill } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const { line , scale , axis } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const { above =color , below =color } = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const { line , target , above , below , area , scale } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const { top , bottom } = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw (chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw (chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n let { boxHeight =fontSize , boxWidth =fontSize } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [\n this.chart\n ], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const { options , ctx } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const { boxWidth , itemHeight } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const { ctx , maxWidth , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [\n 0\n ];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i)=>{\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const { ctx , maxHeight , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i)=>{\n const { itemWidth , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const { legendHitBoxes: hitboxes , options: { align , labels: { padding } , rtl } } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes){\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes){\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const { options: opts , columnSizes , lineWidths , ctx } = this;\n const { align , labels: labelOpts } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const { padding } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const { boxWidth , boxHeight , itemHeight } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i)=>{\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight);\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for(i = 0; i < lh.length; ++i){\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length + 0.5 : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop (chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate (chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate (chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent (chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick (e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx)=>ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels (chart) {\n const datasets = chart.data.datasets;\n const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta)=>{\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx)=>ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: (name)=>!name.startsWith('on'),\n labels: {\n _scriptable: (name)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].includes(name)\n }\n }\n};\n\nclass Title extends Element {\n constructor(config){\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const { top , left , bottom , right , options } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const { titleX , titleY , maxWidth , rotation } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start (chart, _args, options) {\n createTitle(chart, options);\n },\n stop (chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate (chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start (chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop (chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate (chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst positioners = {\n average (items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest (items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\n function splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n function createTooltipItem(chart, item) {\n const { element , datasetIndex , index } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const { label , value } = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n function getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const { body , footer , title } = tooltip;\n const { boxWidth , boxHeight } = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, (bodyItem)=>{\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const { y , height } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const { x , width } = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const { x , width } = size;\n const { width: chartWidth , chartArea: { left , right } } = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let { x , width } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let { y , height } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n const { caretSize , caretPadding , cornerRadius } = options;\n const { xAlign , yAlign } = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n beforeTitle: noop,\n title (tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label (tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor () {\n return this.options.bodyColor;\n },\n labelPointStyle (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n constructor(config){\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const { callbacks } = options;\n const bodyItems = [];\n each(tooltipItems, (context)=>{\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for(i = 0, len = active.length; i < len; ++i){\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n }\n each(tooltipItems, (context)=>{\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const { xAlign , yAlign } = this;\n const { caretSize , cornerRadius } = options;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n const { x: ptX , y: ptY } = tooltipPoint;\n const { width , height } = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const { boxHeight , boxWidth } = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const { body } = this;\n const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding } = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const { xAlign , yAlign } = this;\n const { x , y } = pt;\n const { width , height } = tooltipSize;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const { caretX , caretY , options } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts)=>opts.bodyFont.size,\n boxWidth: (ctx, opts)=>opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg){\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const { index , label } of added){\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for(let value = min; value <= max; value++){\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds } = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const { min: rmin , max: rmax } = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for(; j < numSpaces; ++j){\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation }) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const { beginAtZero } = this.options;\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let { maxTicksLimit , stepSize } = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while(steps(min, max, rangeExp) > 10){\n rangeExp++;\n }\n while(steps(min, max, rangeExp) < 10){\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max }) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while(value < max){\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [\n raw,\n index\n ]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [\n label\n ];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\n function fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const { extra , additionalAngle , padding , size } = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n visible: true,\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const { left , top , right , bottom } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const { centerPointLabels , display } = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n for(let i = 0; i < valueCount; i++){\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n const { left , top , right , bottom } = item;\n const { backdropColor } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const { x , y , textAlign } = item;\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const { ctx } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for(let i = 1; i < labelCount; i++){\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const { color , lineWidth } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const { left , top , right , bottom } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const { backgroundColor , grid: { circular } } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index)=>{\n if (index !== 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index)=>{\n if (index === 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const { parser , round , isoWeekday } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n function addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const { lo , hi } = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for(i = 0; i < ilen; ++i){\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props){\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort((a, b)=>a - b).map((x)=>+x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\n }\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n exampleTime\n ], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for(i = 0, ilen = labels.length; i < ilen; ++i){\n timestamps.push(parse(this, labels[i]));\n }\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({ lo , hi } = _lookupByKey(table, 'pos', val));\n }\n ({ pos: prevSource , time: prevTarget } = table[lo]);\n ({ pos: nextSource , time: nextTarget } = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({ lo , hi } = _lookupByKey(table, 'time', val));\n }\n ({ time: prevSource , pos: prevTarget } = table[lo]);\n ({ time: nextSource , pos: nextTarget } = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const { min , max } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {\n time: min,\n pos: 0\n },\n {\n time: max,\n pos: 1\n }\n ];\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n","/*!\n * chartjs-plugin-datalabels v2.2.0\n * https://chartjs-plugin-datalabels.netlify.app\n * (c) 2017-2022 chartjs-plugin-datalabels contributors\n * Released under the MIT license\n */\nimport { isNullOrUndef, merge, toFont, resolve, toPadding, valueOrDefault, callback, isObject, each } from 'chart.js/helpers';\nimport { defaults as defaults$1, ArcElement, PointElement, BarElement } from 'chart.js';\n\nvar devicePixelRatio = (function() {\n if (typeof window !== 'undefined') {\n if (window.devicePixelRatio) {\n return window.devicePixelRatio;\n }\n\n // devicePixelRatio is undefined on IE10\n // https://stackoverflow.com/a/20204180/8837887\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/85\n var screen = window.screen;\n if (screen) {\n return (screen.deviceXDPI || 1) / (screen.logicalXDPI || 1);\n }\n }\n\n return 1;\n}());\n\nvar utils = {\n // @todo move this in Chart.helpers.toTextLines\n toTextLines: function(inputs) {\n var lines = [];\n var input;\n\n inputs = [].concat(inputs);\n while (inputs.length) {\n input = inputs.pop();\n if (typeof input === 'string') {\n lines.unshift.apply(lines, input.split('\\n'));\n } else if (Array.isArray(input)) {\n inputs.push.apply(inputs, input);\n } else if (!isNullOrUndef(inputs)) {\n lines.unshift('' + input);\n }\n }\n\n return lines;\n },\n\n // @todo move this in Chart.helpers.canvas.textSize\n // @todo cache calls of measureText if font doesn't change?!\n textSize: function(ctx, lines, font) {\n var items = [].concat(lines);\n var ilen = items.length;\n var prev = ctx.font;\n var width = 0;\n var i;\n\n ctx.font = font.string;\n\n for (i = 0; i < ilen; ++i) {\n width = Math.max(ctx.measureText(items[i]).width, width);\n }\n\n ctx.font = prev;\n\n return {\n height: ilen * font.lineHeight,\n width: width\n };\n },\n\n /**\n * Returns value bounded by min and max. This is equivalent to max(min, min(value, max)).\n * @todo move this method in Chart.helpers.bound\n * https://doc.qt.io/qt-5/qtglobal.html#qBound\n */\n bound: function(min, value, max) {\n return Math.max(min, Math.min(value, max));\n },\n\n /**\n * Returns an array of pair [value, state] where state is:\n * * -1: value is only in a0 (removed)\n * * 1: value is only in a1 (added)\n */\n arrayDiff: function(a0, a1) {\n var prev = a0.slice();\n var updates = [];\n var i, j, ilen, v;\n\n for (i = 0, ilen = a1.length; i < ilen; ++i) {\n v = a1[i];\n j = prev.indexOf(v);\n\n if (j === -1) {\n updates.push([v, 1]);\n } else {\n prev.splice(j, 1);\n }\n }\n\n for (i = 0, ilen = prev.length; i < ilen; ++i) {\n updates.push([prev[i], -1]);\n }\n\n return updates;\n },\n\n /**\n * https://github.com/chartjs/chartjs-plugin-datalabels/issues/70\n */\n rasterize: function(v) {\n return Math.round(v * devicePixelRatio) / devicePixelRatio;\n }\n};\n\nfunction orient(point, origin) {\n var x0 = origin.x;\n var y0 = origin.y;\n\n if (x0 === null) {\n return {x: 0, y: -1};\n }\n if (y0 === null) {\n return {x: 1, y: 0};\n }\n\n var dx = point.x - x0;\n var dy = point.y - y0;\n var ln = Math.sqrt(dx * dx + dy * dy);\n\n return {\n x: ln ? dx / ln : 0,\n y: ln ? dy / ln : -1\n };\n}\n\nfunction aligned(x, y, vx, vy, align) {\n switch (align) {\n case 'center':\n vx = vy = 0;\n break;\n case 'bottom':\n vx = 0;\n vy = 1;\n break;\n case 'right':\n vx = 1;\n vy = 0;\n break;\n case 'left':\n vx = -1;\n vy = 0;\n break;\n case 'top':\n vx = 0;\n vy = -1;\n break;\n case 'start':\n vx = -vx;\n vy = -vy;\n break;\n case 'end':\n // keep natural orientation\n break;\n default:\n // clockwise rotation (in degree)\n align *= (Math.PI / 180);\n vx = Math.cos(align);\n vy = Math.sin(align);\n break;\n }\n\n return {\n x: x,\n y: y,\n vx: vx,\n vy: vy\n };\n}\n\n// Line clipping (Cohen–Sutherland algorithm)\n// https://en.wikipedia.org/wiki/Cohen–Sutherland_algorithm\n\nvar R_INSIDE = 0;\nvar R_LEFT = 1;\nvar R_RIGHT = 2;\nvar R_BOTTOM = 4;\nvar R_TOP = 8;\n\nfunction region(x, y, rect) {\n var res = R_INSIDE;\n\n if (x < rect.left) {\n res |= R_LEFT;\n } else if (x > rect.right) {\n res |= R_RIGHT;\n }\n if (y < rect.top) {\n res |= R_TOP;\n } else if (y > rect.bottom) {\n res |= R_BOTTOM;\n }\n\n return res;\n}\n\nfunction clipped(segment, area) {\n var x0 = segment.x0;\n var y0 = segment.y0;\n var x1 = segment.x1;\n var y1 = segment.y1;\n var r0 = region(x0, y0, area);\n var r1 = region(x1, y1, area);\n var r, x, y;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (!(r0 | r1) || (r0 & r1)) {\n // both points inside or on the same side: no clipping\n break;\n }\n\n // at least one point is outside\n r = r0 || r1;\n\n if (r & R_TOP) {\n x = x0 + (x1 - x0) * (area.top - y0) / (y1 - y0);\n y = area.top;\n } else if (r & R_BOTTOM) {\n x = x0 + (x1 - x0) * (area.bottom - y0) / (y1 - y0);\n y = area.bottom;\n } else if (r & R_RIGHT) {\n y = y0 + (y1 - y0) * (area.right - x0) / (x1 - x0);\n x = area.right;\n } else if (r & R_LEFT) {\n y = y0 + (y1 - y0) * (area.left - x0) / (x1 - x0);\n x = area.left;\n }\n\n if (r === r0) {\n x0 = x;\n y0 = y;\n r0 = region(x0, y0, area);\n } else {\n x1 = x;\n y1 = y;\n r1 = region(x1, y1, area);\n }\n }\n\n return {\n x0: x0,\n x1: x1,\n y0: y0,\n y1: y1\n };\n}\n\nfunction compute$1(range, config) {\n var anchor = config.anchor;\n var segment = range;\n var x, y;\n\n if (config.clamp) {\n segment = clipped(segment, config.area);\n }\n\n if (anchor === 'start') {\n x = segment.x0;\n y = segment.y0;\n } else if (anchor === 'end') {\n x = segment.x1;\n y = segment.y1;\n } else {\n x = (segment.x0 + segment.x1) / 2;\n y = (segment.y0 + segment.y1) / 2;\n }\n\n return aligned(x, y, range.vx, range.vy, config.align);\n}\n\nvar positioners = {\n arc: function(el, config) {\n var angle = (el.startAngle + el.endAngle) / 2;\n var vx = Math.cos(angle);\n var vy = Math.sin(angle);\n var r0 = el.innerRadius;\n var r1 = el.outerRadius;\n\n return compute$1({\n x0: el.x + vx * r0,\n y0: el.y + vy * r0,\n x1: el.x + vx * r1,\n y1: el.y + vy * r1,\n vx: vx,\n vy: vy\n }, config);\n },\n\n point: function(el, config) {\n var v = orient(el, config.origin);\n var rx = v.x * el.options.radius;\n var ry = v.y * el.options.radius;\n\n return compute$1({\n x0: el.x - rx,\n y0: el.y - ry,\n x1: el.x + rx,\n y1: el.y + ry,\n vx: v.x,\n vy: v.y\n }, config);\n },\n\n bar: function(el, config) {\n var v = orient(el, config.origin);\n var x = el.x;\n var y = el.y;\n var sx = 0;\n var sy = 0;\n\n if (el.horizontal) {\n x = Math.min(el.x, el.base);\n sx = Math.abs(el.base - el.x);\n } else {\n y = Math.min(el.y, el.base);\n sy = Math.abs(el.base - el.y);\n }\n\n return compute$1({\n x0: x,\n y0: y + sy,\n x1: x + sx,\n y1: y,\n vx: v.x,\n vy: v.y\n }, config);\n },\n\n fallback: function(el, config) {\n var v = orient(el, config.origin);\n\n return compute$1({\n x0: el.x,\n y0: el.y,\n x1: el.x + (el.width || 0),\n y1: el.y + (el.height || 0),\n vx: v.x,\n vy: v.y\n }, config);\n }\n};\n\nvar rasterize = utils.rasterize;\n\nfunction boundingRects(model) {\n var borderWidth = model.borderWidth || 0;\n var padding = model.padding;\n var th = model.size.height;\n var tw = model.size.width;\n var tx = -tw / 2;\n var ty = -th / 2;\n\n return {\n frame: {\n x: tx - padding.left - borderWidth,\n y: ty - padding.top - borderWidth,\n w: tw + padding.width + borderWidth * 2,\n h: th + padding.height + borderWidth * 2\n },\n text: {\n x: tx,\n y: ty,\n w: tw,\n h: th\n }\n };\n}\n\nfunction getScaleOrigin(el, context) {\n var scale = context.chart.getDatasetMeta(context.datasetIndex).vScale;\n\n if (!scale) {\n return null;\n }\n\n if (scale.xCenter !== undefined && scale.yCenter !== undefined) {\n return {x: scale.xCenter, y: scale.yCenter};\n }\n\n var pixel = scale.getBasePixel();\n return el.horizontal ?\n {x: pixel, y: null} :\n {x: null, y: pixel};\n}\n\nfunction getPositioner(el) {\n if (el instanceof ArcElement) {\n return positioners.arc;\n }\n if (el instanceof PointElement) {\n return positioners.point;\n }\n if (el instanceof BarElement) {\n return positioners.bar;\n }\n return positioners.fallback;\n}\n\nfunction drawRoundedRect(ctx, x, y, w, h, radius) {\n var HALF_PI = Math.PI / 2;\n\n if (radius) {\n var r = Math.min(radius, h / 2, w / 2);\n var left = x + r;\n var top = y + r;\n var right = x + w - r;\n var bottom = y + h - r;\n\n ctx.moveTo(x, top);\n if (left < right && top < bottom) {\n ctx.arc(left, top, r, -Math.PI, -HALF_PI);\n ctx.arc(right, top, r, -HALF_PI, 0);\n ctx.arc(right, bottom, r, 0, HALF_PI);\n ctx.arc(left, bottom, r, HALF_PI, Math.PI);\n } else if (left < right) {\n ctx.moveTo(left, y);\n ctx.arc(right, top, r, -HALF_PI, HALF_PI);\n ctx.arc(left, top, r, HALF_PI, Math.PI + HALF_PI);\n } else if (top < bottom) {\n ctx.arc(left, top, r, -Math.PI, 0);\n ctx.arc(left, bottom, r, 0, Math.PI);\n } else {\n ctx.arc(left, top, r, -Math.PI, Math.PI);\n }\n ctx.closePath();\n ctx.moveTo(x, y);\n } else {\n ctx.rect(x, y, w, h);\n }\n}\n\nfunction drawFrame(ctx, rect, model) {\n var bgColor = model.backgroundColor;\n var borderColor = model.borderColor;\n var borderWidth = model.borderWidth;\n\n if (!bgColor && (!borderColor || !borderWidth)) {\n return;\n }\n\n ctx.beginPath();\n\n drawRoundedRect(\n ctx,\n rasterize(rect.x) + borderWidth / 2,\n rasterize(rect.y) + borderWidth / 2,\n rasterize(rect.w) - borderWidth,\n rasterize(rect.h) - borderWidth,\n model.borderRadius);\n\n ctx.closePath();\n\n if (bgColor) {\n ctx.fillStyle = bgColor;\n ctx.fill();\n }\n\n if (borderColor && borderWidth) {\n ctx.strokeStyle = borderColor;\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = 'miter';\n ctx.stroke();\n }\n}\n\nfunction textGeometry(rect, align, font) {\n var h = font.lineHeight;\n var w = rect.w;\n var x = rect.x;\n var y = rect.y + h / 2;\n\n if (align === 'center') {\n x += w / 2;\n } else if (align === 'end' || align === 'right') {\n x += w;\n }\n\n return {\n h: h,\n w: w,\n x: x,\n y: y\n };\n}\n\nfunction drawTextLine(ctx, text, cfg) {\n var shadow = ctx.shadowBlur;\n var stroked = cfg.stroked;\n var x = rasterize(cfg.x);\n var y = rasterize(cfg.y);\n var w = rasterize(cfg.w);\n\n if (stroked) {\n ctx.strokeText(text, x, y, w);\n }\n\n if (cfg.filled) {\n if (shadow && stroked) {\n // Prevent drawing shadow on both the text stroke and fill, so\n // if the text is stroked, remove the shadow for the text fill.\n ctx.shadowBlur = 0;\n }\n\n ctx.fillText(text, x, y, w);\n\n if (shadow && stroked) {\n ctx.shadowBlur = shadow;\n }\n }\n}\n\nfunction drawText(ctx, lines, rect, model) {\n var align = model.textAlign;\n var color = model.color;\n var filled = !!color;\n var font = model.font;\n var ilen = lines.length;\n var strokeColor = model.textStrokeColor;\n var strokeWidth = model.textStrokeWidth;\n var stroked = strokeColor && strokeWidth;\n var i;\n\n if (!ilen || (!filled && !stroked)) {\n return;\n }\n\n // Adjust coordinates based on text alignment and line height\n rect = textGeometry(rect, align, font);\n\n ctx.font = font.string;\n ctx.textAlign = align;\n ctx.textBaseline = 'middle';\n ctx.shadowBlur = model.textShadowBlur;\n ctx.shadowColor = model.textShadowColor;\n\n if (filled) {\n ctx.fillStyle = color;\n }\n if (stroked) {\n ctx.lineJoin = 'round';\n ctx.lineWidth = strokeWidth;\n ctx.strokeStyle = strokeColor;\n }\n\n for (i = 0, ilen = lines.length; i < ilen; ++i) {\n drawTextLine(ctx, lines[i], {\n stroked: stroked,\n filled: filled,\n w: rect.w,\n x: rect.x,\n y: rect.y + rect.h * i\n });\n }\n}\n\nvar Label = function(config, ctx, el, index) {\n var me = this;\n\n me._config = config;\n me._index = index;\n me._model = null;\n me._rects = null;\n me._ctx = ctx;\n me._el = el;\n};\n\nmerge(Label.prototype, {\n /**\n * @private\n */\n _modelize: function(display, lines, config, context) {\n var me = this;\n var index = me._index;\n var font = toFont(resolve([config.font, {}], context, index));\n var color = resolve([config.color, defaults$1.color], context, index);\n\n return {\n align: resolve([config.align, 'center'], context, index),\n anchor: resolve([config.anchor, 'center'], context, index),\n area: context.chart.chartArea,\n backgroundColor: resolve([config.backgroundColor, null], context, index),\n borderColor: resolve([config.borderColor, null], context, index),\n borderRadius: resolve([config.borderRadius, 0], context, index),\n borderWidth: resolve([config.borderWidth, 0], context, index),\n clamp: resolve([config.clamp, false], context, index),\n clip: resolve([config.clip, false], context, index),\n color: color,\n display: display,\n font: font,\n lines: lines,\n offset: resolve([config.offset, 4], context, index),\n opacity: resolve([config.opacity, 1], context, index),\n origin: getScaleOrigin(me._el, context),\n padding: toPadding(resolve([config.padding, 4], context, index)),\n positioner: getPositioner(me._el),\n rotation: resolve([config.rotation, 0], context, index) * (Math.PI / 180),\n size: utils.textSize(me._ctx, lines, font),\n textAlign: resolve([config.textAlign, 'start'], context, index),\n textShadowBlur: resolve([config.textShadowBlur, 0], context, index),\n textShadowColor: resolve([config.textShadowColor, color], context, index),\n textStrokeColor: resolve([config.textStrokeColor, color], context, index),\n textStrokeWidth: resolve([config.textStrokeWidth, 0], context, index)\n };\n },\n\n update: function(context) {\n var me = this;\n var model = null;\n var rects = null;\n var index = me._index;\n var config = me._config;\n var value, label, lines;\n\n // We first resolve the display option (separately) to avoid computing\n // other options in case the label is hidden (i.e. display: false).\n var display = resolve([config.display, true], context, index);\n\n if (display) {\n value = context.dataset.data[index];\n label = valueOrDefault(callback(config.formatter, [value, context]), value);\n lines = isNullOrUndef(label) ? [] : utils.toTextLines(label);\n\n if (lines.length) {\n model = me._modelize(display, lines, config, context);\n rects = boundingRects(model);\n }\n }\n\n me._model = model;\n me._rects = rects;\n },\n\n geometry: function() {\n return this._rects ? this._rects.frame : {};\n },\n\n rotation: function() {\n return this._model ? this._model.rotation : 0;\n },\n\n visible: function() {\n return this._model && this._model.opacity;\n },\n\n model: function() {\n return this._model;\n },\n\n draw: function(chart, center) {\n var me = this;\n var ctx = chart.ctx;\n var model = me._model;\n var rects = me._rects;\n var area;\n\n if (!this.visible()) {\n return;\n }\n\n ctx.save();\n\n if (model.clip) {\n area = model.area;\n ctx.beginPath();\n ctx.rect(\n area.left,\n area.top,\n area.right - area.left,\n area.bottom - area.top);\n ctx.clip();\n }\n\n ctx.globalAlpha = utils.bound(0, model.opacity, 1);\n ctx.translate(rasterize(center.x), rasterize(center.y));\n ctx.rotate(model.rotation);\n\n drawFrame(ctx, rects.frame, model);\n drawText(ctx, model.lines, rects.text, model);\n\n ctx.restore();\n }\n});\n\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991; // eslint-disable-line es/no-number-minsafeinteger\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; // eslint-disable-line es/no-number-maxsafeinteger\n\nfunction rotated(point, center, angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n var cx = center.x;\n var cy = center.y;\n\n return {\n x: cx + cos * (point.x - cx) - sin * (point.y - cy),\n y: cy + sin * (point.x - cx) + cos * (point.y - cy)\n };\n}\n\nfunction projected(points, axis) {\n var min = MAX_INTEGER;\n var max = MIN_INTEGER;\n var origin = axis.origin;\n var i, pt, vx, vy, dp;\n\n for (i = 0; i < points.length; ++i) {\n pt = points[i];\n vx = pt.x - origin.x;\n vy = pt.y - origin.y;\n dp = axis.vx * vx + axis.vy * vy;\n min = Math.min(min, dp);\n max = Math.max(max, dp);\n }\n\n return {\n min: min,\n max: max\n };\n}\n\nfunction toAxis(p0, p1) {\n var vx = p1.x - p0.x;\n var vy = p1.y - p0.y;\n var ln = Math.sqrt(vx * vx + vy * vy);\n\n return {\n vx: (p1.x - p0.x) / ln,\n vy: (p1.y - p0.y) / ln,\n origin: p0,\n ln: ln\n };\n}\n\nvar HitBox = function() {\n this._rotation = 0;\n this._rect = {\n x: 0,\n y: 0,\n w: 0,\n h: 0\n };\n};\n\nmerge(HitBox.prototype, {\n center: function() {\n var r = this._rect;\n return {\n x: r.x + r.w / 2,\n y: r.y + r.h / 2\n };\n },\n\n update: function(center, rect, rotation) {\n this._rotation = rotation;\n this._rect = {\n x: rect.x + center.x,\n y: rect.y + center.y,\n w: rect.w,\n h: rect.h\n };\n },\n\n contains: function(point) {\n var me = this;\n var margin = 1;\n var rect = me._rect;\n\n point = rotated(point, me.center(), -me._rotation);\n\n return !(point.x < rect.x - margin\n || point.y < rect.y - margin\n || point.x > rect.x + rect.w + margin * 2\n || point.y > rect.y + rect.h + margin * 2);\n },\n\n // Separating Axis Theorem\n // https://gamedevelopment.tutsplus.com/tutorials/collision-detection-using-the-separating-axis-theorem--gamedev-169\n intersects: function(other) {\n var r0 = this._points();\n var r1 = other._points();\n var axes = [\n toAxis(r0[0], r0[1]),\n toAxis(r0[0], r0[3])\n ];\n var i, pr0, pr1;\n\n if (this._rotation !== other._rotation) {\n // Only separate with r1 axis if the rotation is different,\n // else it's enough to separate r0 and r1 with r0 axis only!\n axes.push(\n toAxis(r1[0], r1[1]),\n toAxis(r1[0], r1[3])\n );\n }\n\n for (i = 0; i < axes.length; ++i) {\n pr0 = projected(r0, axes[i]);\n pr1 = projected(r1, axes[i]);\n\n if (pr0.max < pr1.min || pr1.max < pr0.min) {\n return false;\n }\n }\n\n return true;\n },\n\n /**\n * @private\n */\n _points: function() {\n var me = this;\n var rect = me._rect;\n var angle = me._rotation;\n var center = me.center();\n\n return [\n rotated({x: rect.x, y: rect.y}, center, angle),\n rotated({x: rect.x + rect.w, y: rect.y}, center, angle),\n rotated({x: rect.x + rect.w, y: rect.y + rect.h}, center, angle),\n rotated({x: rect.x, y: rect.y + rect.h}, center, angle)\n ];\n }\n});\n\nfunction coordinates(el, model, geometry) {\n var point = model.positioner(el, model);\n var vx = point.vx;\n var vy = point.vy;\n\n if (!vx && !vy) {\n // if aligned center, we don't want to offset the center point\n return {x: point.x, y: point.y};\n }\n\n var w = geometry.w;\n var h = geometry.h;\n\n // take in account the label rotation\n var rotation = model.rotation;\n var dx = Math.abs(w / 2 * Math.cos(rotation)) + Math.abs(h / 2 * Math.sin(rotation));\n var dy = Math.abs(w / 2 * Math.sin(rotation)) + Math.abs(h / 2 * Math.cos(rotation));\n\n // scale the unit vector (vx, vy) to get at least dx or dy equal to\n // w or h respectively (else we would calculate the distance to the\n // ellipse inscribed in the bounding rect)\n var vs = 1 / Math.max(Math.abs(vx), Math.abs(vy));\n dx *= vx * vs;\n dy *= vy * vs;\n\n // finally, include the explicit offset\n dx += model.offset * vx;\n dy += model.offset * vy;\n\n return {\n x: point.x + dx,\n y: point.y + dy\n };\n}\n\nfunction collide(labels, collider) {\n var i, j, s0, s1;\n\n // IMPORTANT Iterate in the reverse order since items at the end of the\n // list have an higher weight/priority and thus should be less impacted\n // by the overlapping strategy.\n\n for (i = labels.length - 1; i >= 0; --i) {\n s0 = labels[i].$layout;\n\n for (j = i - 1; j >= 0 && s0._visible; --j) {\n s1 = labels[j].$layout;\n\n if (s1._visible && s0._box.intersects(s1._box)) {\n collider(s0, s1);\n }\n }\n }\n\n return labels;\n}\n\nfunction compute(labels) {\n var i, ilen, label, state, geometry, center, proxy;\n\n // Initialize labels for overlap detection\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n state = label.$layout;\n\n if (state._visible) {\n // Chart.js 3 removed el._model in favor of getProps(), making harder to\n // abstract reading values in positioners. Also, using string arrays to\n // read values (i.e. var {a,b,c} = el.getProps([\"a\",\"b\",\"c\"])) would make\n // positioners inefficient in the normal case (i.e. not the final values)\n // and the code a bit ugly, so let's use a Proxy instead.\n proxy = new Proxy(label._el, {get: (el, p) => el.getProps([p], true)[p]});\n\n geometry = label.geometry();\n center = coordinates(proxy, label.model(), geometry);\n state._box.update(center, geometry, label.rotation());\n }\n }\n\n // Auto hide overlapping labels\n return collide(labels, function(s0, s1) {\n var h0 = s0._hidable;\n var h1 = s1._hidable;\n\n if ((h0 && h1) || h1) {\n s1._visible = false;\n } else if (h0) {\n s0._visible = false;\n }\n });\n}\n\nvar layout = {\n prepare: function(datasets) {\n var labels = [];\n var i, j, ilen, jlen, label;\n\n for (i = 0, ilen = datasets.length; i < ilen; ++i) {\n for (j = 0, jlen = datasets[i].length; j < jlen; ++j) {\n label = datasets[i][j];\n labels.push(label);\n label.$layout = {\n _box: new HitBox(),\n _hidable: false,\n _visible: true,\n _set: i,\n _idx: label._index\n };\n }\n }\n\n // TODO New `z` option: labels with a higher z-index are drawn\n // of top of the ones with a lower index. Lowest z-index labels\n // are also discarded first when hiding overlapping labels.\n labels.sort(function(a, b) {\n var sa = a.$layout;\n var sb = b.$layout;\n\n return sa._idx === sb._idx\n ? sb._set - sa._set\n : sb._idx - sa._idx;\n });\n\n this.update(labels);\n\n return labels;\n },\n\n update: function(labels) {\n var dirty = false;\n var i, ilen, label, model, state;\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n model = label.model();\n state = label.$layout;\n state._hidable = model && model.display === 'auto';\n state._visible = label.visible();\n dirty |= state._hidable;\n }\n\n if (dirty) {\n compute(labels);\n }\n },\n\n lookup: function(labels, point) {\n var i, state;\n\n // IMPORTANT Iterate in the reverse order since items at the end of\n // the list have an higher z-index, thus should be picked first.\n\n for (i = labels.length - 1; i >= 0; --i) {\n state = labels[i].$layout;\n\n if (state && state._visible && state._box.contains(point)) {\n return labels[i];\n }\n }\n\n return null;\n },\n\n draw: function(chart, labels) {\n var i, ilen, label, state, geometry, center;\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n state = label.$layout;\n\n if (state._visible) {\n geometry = label.geometry();\n center = coordinates(label._el, label.model(), geometry);\n state._box.update(center, geometry, label.rotation());\n label.draw(chart, center);\n }\n }\n }\n};\n\nvar formatter = function(value) {\n if (isNullOrUndef(value)) {\n return null;\n }\n\n var label = value;\n var keys, klen, k;\n if (isObject(value)) {\n if (!isNullOrUndef(value.label)) {\n label = value.label;\n } else if (!isNullOrUndef(value.r)) {\n label = value.r;\n } else {\n label = '';\n keys = Object.keys(value);\n for (k = 0, klen = keys.length; k < klen; ++k) {\n label += (k !== 0 ? ', ' : '') + keys[k] + ': ' + value[keys[k]];\n }\n }\n }\n\n return '' + label;\n};\n\n/**\n * IMPORTANT: make sure to also update tests and TypeScript definition\n * files (`/test/specs/defaults.spec.js` and `/types/options.d.ts`)\n */\n\nvar defaults = {\n align: 'center',\n anchor: 'center',\n backgroundColor: null,\n borderColor: null,\n borderRadius: 0,\n borderWidth: 0,\n clamp: false,\n clip: false,\n color: undefined,\n display: true,\n font: {\n family: undefined,\n lineHeight: 1.2,\n size: undefined,\n style: undefined,\n weight: null\n },\n formatter: formatter,\n labels: undefined,\n listeners: {},\n offset: 4,\n opacity: 1,\n padding: {\n top: 4,\n right: 4,\n bottom: 4,\n left: 4\n },\n rotation: 0,\n textAlign: 'start',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n textShadowBlur: 0,\n textShadowColor: undefined\n};\n\n/**\n * @see https://github.com/chartjs/Chart.js/issues/4176\n */\n\nvar EXPANDO_KEY = '$datalabels';\nvar DEFAULT_KEY = '$default';\n\nfunction configure(dataset, options) {\n var override = dataset.datalabels;\n var listeners = {};\n var configs = [];\n var labels, keys;\n\n if (override === false) {\n return null;\n }\n if (override === true) {\n override = {};\n }\n\n options = merge({}, [options, override]);\n labels = options.labels || {};\n keys = Object.keys(labels);\n delete options.labels;\n\n if (keys.length) {\n keys.forEach(function(key) {\n if (labels[key]) {\n configs.push(merge({}, [\n options,\n labels[key],\n {_key: key}\n ]));\n }\n });\n } else {\n // Default label if no \"named\" label defined.\n configs.push(options);\n }\n\n // listeners: {: {: }}\n listeners = configs.reduce(function(target, config) {\n each(config.listeners || {}, function(fn, event) {\n target[event] = target[event] || {};\n target[event][config._key || DEFAULT_KEY] = fn;\n });\n\n delete config.listeners;\n return target;\n }, {});\n\n return {\n labels: configs,\n listeners: listeners\n };\n}\n\nfunction dispatchEvent(chart, listeners, label, event) {\n if (!listeners) {\n return;\n }\n\n var context = label.$context;\n var groups = label.$groups;\n var callback$1;\n\n if (!listeners[groups._set]) {\n return;\n }\n\n callback$1 = listeners[groups._set][groups._key];\n if (!callback$1) {\n return;\n }\n\n if (callback(callback$1, [context, event]) === true) {\n // Users are allowed to tweak the given context by injecting values that can be\n // used in scriptable options to display labels differently based on the current\n // event (e.g. highlight an hovered label). That's why we update the label with\n // the output context and schedule a new chart render by setting it dirty.\n chart[EXPANDO_KEY]._dirty = true;\n label.update(context);\n }\n}\n\nfunction dispatchMoveEvents(chart, listeners, previous, label, event) {\n var enter, leave;\n\n if (!previous && !label) {\n return;\n }\n\n if (!previous) {\n enter = true;\n } else if (!label) {\n leave = true;\n } else if (previous !== label) {\n leave = enter = true;\n }\n\n if (leave) {\n dispatchEvent(chart, listeners.leave, previous, event);\n }\n if (enter) {\n dispatchEvent(chart, listeners.enter, label, event);\n }\n}\n\nfunction handleMoveEvents(chart, event) {\n var expando = chart[EXPANDO_KEY];\n var listeners = expando._listeners;\n var previous, label;\n\n if (!listeners.enter && !listeners.leave) {\n return;\n }\n\n if (event.type === 'mousemove') {\n label = layout.lookup(expando._labels, event);\n } else if (event.type !== 'mouseout') {\n return;\n }\n\n previous = expando._hovered;\n expando._hovered = label;\n dispatchMoveEvents(chart, listeners, previous, label, event);\n}\n\nfunction handleClickEvents(chart, event) {\n var expando = chart[EXPANDO_KEY];\n var handlers = expando._listeners.click;\n var label = handlers && layout.lookup(expando._labels, event);\n if (label) {\n dispatchEvent(chart, handlers, label, event);\n }\n}\n\nvar plugin = {\n id: 'datalabels',\n\n defaults: defaults,\n\n beforeInit: function(chart) {\n chart[EXPANDO_KEY] = {\n _actives: []\n };\n },\n\n beforeUpdate: function(chart) {\n var expando = chart[EXPANDO_KEY];\n expando._listened = false;\n expando._listeners = {}; // {: {: {: }}}\n expando._datasets = []; // per dataset labels: [Label[]]\n expando._labels = []; // layouted labels: Label[]\n },\n\n afterDatasetUpdate: function(chart, args, options) {\n var datasetIndex = args.index;\n var expando = chart[EXPANDO_KEY];\n var labels = expando._datasets[datasetIndex] = [];\n var visible = chart.isDatasetVisible(datasetIndex);\n var dataset = chart.data.datasets[datasetIndex];\n var config = configure(dataset, options);\n var elements = args.meta.data || [];\n var ctx = chart.ctx;\n var i, j, ilen, jlen, cfg, key, el, label;\n\n ctx.save();\n\n for (i = 0, ilen = elements.length; i < ilen; ++i) {\n el = elements[i];\n el[EXPANDO_KEY] = [];\n\n if (visible && el && chart.getDataVisibility(i) && !el.skip) {\n for (j = 0, jlen = config.labels.length; j < jlen; ++j) {\n cfg = config.labels[j];\n key = cfg._key;\n\n label = new Label(cfg, ctx, el, i);\n label.$groups = {\n _set: datasetIndex,\n _key: key || DEFAULT_KEY\n };\n label.$context = {\n active: false,\n chart: chart,\n dataIndex: i,\n dataset: dataset,\n datasetIndex: datasetIndex\n };\n\n label.update(label.$context);\n el[EXPANDO_KEY].push(label);\n labels.push(label);\n }\n }\n }\n\n ctx.restore();\n\n // Store listeners at the chart level and per event type to optimize\n // cases where no listeners are registered for a specific event.\n merge(expando._listeners, config.listeners, {\n merger: function(event, target, source) {\n target[event] = target[event] || {};\n target[event][args.index] = source[event];\n expando._listened = true;\n }\n });\n },\n\n afterUpdate: function(chart) {\n chart[EXPANDO_KEY]._labels = layout.prepare(chart[EXPANDO_KEY]._datasets);\n },\n\n // Draw labels on top of all dataset elements\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/29\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/32\n afterDatasetsDraw: function(chart) {\n layout.draw(chart, chart[EXPANDO_KEY]._labels);\n },\n\n beforeEvent: function(chart, args) {\n // If there is no listener registered for this chart, `listened` will be false,\n // meaning we can immediately ignore the incoming event and avoid useless extra\n // computation for users who don't implement label interactions.\n if (chart[EXPANDO_KEY]._listened) {\n var event = args.event;\n switch (event.type) {\n case 'mousemove':\n case 'mouseout':\n handleMoveEvents(chart, event);\n break;\n case 'click':\n handleClickEvents(chart, event);\n break;\n }\n }\n },\n\n afterEvent: function(chart) {\n var expando = chart[EXPANDO_KEY];\n var previous = expando._actives;\n var actives = expando._actives = chart.getActiveElements();\n var updates = utils.arrayDiff(previous, actives);\n var i, ilen, j, jlen, update, label, labels;\n\n for (i = 0, ilen = updates.length; i < ilen; ++i) {\n update = updates[i];\n if (update[1]) {\n labels = update[0].element[EXPANDO_KEY] || [];\n for (j = 0, jlen = labels.length; j < jlen; ++j) {\n label = labels[j];\n label.$context.active = (update[1] === 1);\n label.update(label.$context);\n }\n }\n }\n\n if (expando._dirty || updates.length) {\n layout.update(expando._labels);\n chart.render();\n }\n\n delete expando._dirty;\n }\n};\n\nexport { plugin as default };\n","import Swiper, { Navigation, Mousewheel } from 'swiper';\r\nimport Chart from 'chart.js/auto';\r\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\r\n\r\nclass MountainConditions {\r\n constructor() {\r\n this.initMountainConditions();\r\n }\r\n initMountainConditions(){\r\n\r\n // Global variables\r\n const html = document.querySelector('html');\r\n const isSV = window.location.href.includes('sv.html') || window.location.href.includes('sunvalley');\r\n const isSB = window.location.href.includes('sb.html') || window.location.href.includes('snowbasin');\r\n //const isSafari = typeof window.GestureEvent === 'function';\r\n\r\n if (isSV)\r\n html.classList.add('isSV')\r\n else if (isSB)\r\n html.classList.add('isSB');\r\n //if (isSafari)\r\n //html.classList.add('isSafari');\r\n\r\n html.classList.remove('no-js');\r\n \r\n // Media queries\r\n const isLargeScreen = window.matchMedia('all and (min-width: 1024px)').matches;\r\n\r\n // Resize trail tables for flex column wrap\r\n const tables = document.querySelectorAll('.js-mc__table');\r\n if (tables.length > 0) {\r\n for (let table of tables) {\r\n const tbody = table.querySelector('tbody');\r\n const trHeight = tbody.querySelector('tr').offsetHeight;\r\n const trCount = tbody.childElementCount;\r\n\r\n if (trCount > 5) {\r\n if (isLargeScreen) {\r\n tbody.setAttribute('style', 'height:' + (Math.round(trCount / 2) * trHeight) + 'px');\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Initiate parking progress bar\r\n\r\n const parkingGraph = document.getElementById('mc-parking__graph');\r\n\r\n if (parkingGraph) {\r\n const parkingGraphData = JSON.parse(decodeURIComponent(parkingGraph.getAttribute('data-values')));\r\n const parkingColorPlugin = {\r\n id: 'customCanvasBackgroundColor',\r\n beforeDraw: (chart, args, options) => {\r\n const {ctx} = chart;\r\n ctx.save();\r\n ctx.globalCompositeOperation = 'destination-over';\r\n ctx.fillStyle = options.color || '#E9EEF4';\r\n ctx.fillRect(0, 0, chart.width, chart.height);\r\n ctx.restore();\r\n }\r\n };\r\n \r\n new Chart(parkingGraph, {\r\n type: 'bar',\r\n data: {\r\n labels: [''],\r\n datasets: [{\r\n label: '',\r\n data: parkingGraphData\r\n }]\r\n },\r\n options: {\r\n scales: {\r\n y: {\r\n beginAtZero: true\r\n },\r\n x: {\r\n grid: {\r\n display: false\r\n }\r\n }\r\n },\r\n backgroundColor: '#1D4F91',\r\n indexAxis: 'y',\r\n barPercentage: 1,\r\n autoPadding: false,\r\n plugins: {\r\n customCanvasBackgroundColor: {\r\n color: '#E9EEF4'\r\n },\r\n legend: {\r\n display: false\r\n },\r\n tooltip: {\r\n enabled: false\r\n },\r\n title: {\r\n display: false\r\n }\r\n }\r\n },\r\n plugins: [parkingColorPlugin]\r\n });\r\n }\r\n \r\n\r\n // Initiate lifts bar graphs\r\n\r\n const barGraphs = document.querySelectorAll('.js-mc__graph-bar-canvas');\r\n\r\n if (barGraphs[0]) {\r\n\r\n for (let graph of barGraphs) {\r\n\r\n const graphData = JSON.parse(decodeURIComponent(graph.getAttribute('data-values')));\r\n let graphColor = '';\r\n let canvasColor = '';\r\n if (isSV) {\r\n graphColor = '#a4792c';\r\n canvasColor = '#193D67';\r\n } else if (isSB) {\r\n graphColor = '#fccf45';\r\n canvasColor = '#235ead';\r\n }\r\n const backgroundColorPlugin = {\r\n id: 'customCanvasBackgroundColor',\r\n beforeDraw: (chart, args, options) => {\r\n const {ctx} = chart;\r\n ctx.save();\r\n ctx.globalCompositeOperation = 'destination-over';\r\n ctx.fillStyle = options.color || '#E9EEF4';\r\n ctx.fillRect(0, 0, chart.width, chart.height);\r\n ctx.restore();\r\n }\r\n };\r\n \r\n new Chart(graph, {\r\n type: 'bar',\r\n data: {\r\n labels: [''],\r\n datasets: [{\r\n label: '',\r\n data: graphData\r\n }]\r\n },\r\n options: {\r\n scales: {\r\n y: {\r\n beginAtZero: true\r\n },\r\n x: {\r\n grid: {\r\n display: false\r\n }\r\n }\r\n },\r\n backgroundColor: graphColor,\r\n indexAxis: 'y',\r\n barPercentage: 1,\r\n autoPadding: false,\r\n plugins: {\r\n customCanvasBackgroundColor: {\r\n color: canvasColor\r\n },\r\n legend: {\r\n display: false\r\n },\r\n tooltip: {\r\n enabled: false\r\n },\r\n title: {\r\n display: false\r\n }\r\n }\r\n },\r\n plugins: [backgroundColorPlugin]\r\n });\r\n \r\n }\r\n\r\n }\r\n\r\n \r\n // Initiate trails pie graphs\r\n\r\n const pieGraphs = document.querySelectorAll('.js-mc__graph-pie-canvas');\r\n\r\n if (pieGraphs[0]) {\r\n\r\n for (let graph of pieGraphs) {\r\n\r\n const graphData = JSON.parse(decodeURIComponent(graph.dataset.values));\r\n const graphColors = JSON.parse(decodeURIComponent(graph.dataset.colors));\r\n const graphLabels = graph.hasAttribute('data-labels');\r\n \r\n if (graphLabels) {\r\n\r\n if (isSV) {\r\n new Chart(graph, {\r\n type: 'pie',\r\n data: {\r\n labels: [''],\r\n datasets: [{\r\n label: '',\r\n data: graphData,\r\n backgroundColor: graphColors\r\n }]\r\n },\r\n options: {\r\n borderWidth: 0,\r\n plugins: {\r\n legend: {\r\n display: false\r\n },\r\n tooltip: {\r\n enabled: false\r\n },\r\n title: {\r\n display: false\r\n },\r\n datalabels: {\r\n color: '#FFFFFF',\r\n font: {\r\n size: '50px',\r\n family: 'FreightDisplayProBold',\r\n weight: '500'\r\n }\r\n }\r\n }\r\n },\r\n plugins: \r\n [ChartDataLabels]\r\n });\r\n } else if (isSB) {\r\n new Chart(graph, {\r\n type: 'pie',\r\n data: {\r\n labels: [''],\r\n datasets: [{\r\n label: '',\r\n data: graphData,\r\n backgroundColor: graphColors\r\n }]\r\n },\r\n options: {\r\n borderWidth: 0,\r\n plugins: {\r\n legend: {\r\n display: false\r\n },\r\n tooltip: {\r\n enabled: false\r\n },\r\n title: {\r\n display: false\r\n },\r\n datalabels: {\r\n color: '#FFFFFF',\r\n font: {\r\n size: '50px',\r\n family: 'AspiraLight',\r\n weight: '500'\r\n }\r\n }\r\n }\r\n },\r\n plugins: \r\n [ChartDataLabels]\r\n });\r\n }\r\n \r\n } else {\r\n new Chart(graph, {\r\n type: 'pie',\r\n data: {\r\n labels: [''],\r\n datasets: [{\r\n label: '',\r\n data: graphData,\r\n backgroundColor: graphColors\r\n }]\r\n },\r\n options: {\r\n borderWidth: 0,\r\n plugins: {\r\n legend: {\r\n display: false\r\n },\r\n tooltip: {\r\n enabled: false\r\n },\r\n title: {\r\n display: false\r\n }\r\n }\r\n }\r\n });\r\n }\r\n \r\n }\r\n\r\n }\r\n\r\n\r\n // On window load\r\n\r\n window.addEventListener('load', () => {\r\n\r\n\r\n // Initiate forecast sliders\r\n\r\n const forecastSliders = document.querySelectorAll('.js-mc-forecast__slider');\r\n\r\n if (forecastSliders[0]) {\r\n\r\n let swiper = new Swiper('.js-mc-forecast__slider', {\r\n modules: [Navigation],\r\n slidesPerView: \"auto\",\r\n spaceBetween: 25,\r\n mousewheel: {\r\n forceToAxis: true,\r\n },\r\n navigation: {\r\n nextEl: '.mc__ctrl-slide-btn-next',\r\n prevEl: '.mc__ctrl-slide-btn-prev',\r\n }\r\n });\r\n }\r\n \r\n // Add tab functionality\r\n\r\n const ctrls = document.querySelectorAll('.js-mc__ctrl-tab-btn');\r\n\r\n if (ctrls[0]) {\r\n\r\n for (let ctrl of ctrls) {\r\n\r\n const tabName = ctrl.getAttribute('data-tab');\r\n const tabs = document.querySelectorAll('.js-mc__tab[data-tab=\"' + tabName + '\"]');\r\n\r\n if (tabs.length > 0) {\r\n\r\n for (let tab of tabs) {\r\n var tabSiblings = n => [...n.parentElement.children].filter(c=>c!=n);\r\n var ctrlSiblings = n => [...n.parentElement.parentElement.children].filter(c=>c!=n);\r\n \r\n ctrl.addEventListener('click', () => {\r\n for (let tabSibling of tabSiblings(tab)) {\r\n tabSibling.classList.remove('-active');\r\n }\r\n for (let ctrlSibling of ctrlSiblings(ctrl)) {\r\n ctrlSibling.querySelector('.js-mc__ctrl-btn').classList.remove('-active');\r\n }\r\n tab.classList.add('-active');\r\n ctrl.classList.add('-active');\r\n });\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n // Force click on first control for all control groups to set default active state\r\n\r\n const ctrlGroups = document.querySelectorAll('.js-mc__ctrls');\r\n\r\n if (ctrlGroups[0]) {\r\n\r\n for (let group of ctrlGroups) {\r\n let firstCtrl = group.querySelectorAll('.js-mc__ctrl-btn')[0];\r\n firstCtrl.click(); \r\n }\r\n\r\n }\r\n\r\n const tabGroups = document.querySelectorAll('.js-mc__ctrls-tabs');\r\n\r\n if (tabGroups[0]) {\r\n for (let tabGroup of tabGroups) {\r\n let firstTab = tabGroup.querySelector('.js-mc__ctrl-tab').querySelector('.js-mc__ctrl-tab-btn');\r\n firstTab.click(); \r\n }\r\n }\r\n \r\n });\r\n }\r\n}\r\nexport default MountainConditions;\r\n","import Util from \"../utils/util.js\";\r\nimport Swiper, { Navigation, Scrollbar, Mousewheel } from 'swiper';\r\n//import Swiper from 'swiper/bundle';\r\nclass CustomCards {\r\n constructor() {\r\n this.initCustomCards();\r\n }\r\n initCustomCards(){\r\n let customCards = Util.$('.js-custom-card');\r\n if(customCards.length> 0){\r\n customCards.forEach(el => {\r\n let slider = Util.$('.js-custom-card__slider', el);\r\n if(slider.length > 0){\r\n let activeSlideIndicator = Util.$('.js-feature-media__ctrl-count-current', el)[0];\r\n let totalSlideIndicator = Util.$('.js-feature-media__ctrl-count-total', el)[0];\r\n let slideCount = Util.$('.js-glide__slide', el).length;\r\n let current = 1;\r\n let activeSlide = '';\r\n let canShift = false;\r\n let thisSlider = \"\";\r\n const swiper = new Swiper('.swiper', {\r\n modules: [Navigation, Scrollbar, Mousewheel],\r\n slidesPerView: \"auto\",\r\n spaceBetween: 30,\r\n mousewheel: {\r\n forceToAxis: true,\r\n\r\n },\r\n // Navigation arrows\r\n navigation: {\r\n nextEl: '.js-ctrl-next',\r\n prevEl: '.js-ctrl-prev',\r\n },\r\n \r\n // And if we need scrollbar\r\n scrollbar: {\r\n el: \".swiper-scrollbar\"\r\n },\r\n });\r\n // thisSlider = new Glide(el, {\r\n // rewind : false,\r\n // bound: true,\r\n // gap: 30,\r\n // perView: 4,\r\n // perTouch: 4,\r\n // touchRatio: 1,\r\n // breakpoints: {\r\n // 1024: {\r\n // perView: 3,\r\n // perTouch: 3,\r\n // },\r\n // 700: {\r\n // perView: 2,\r\n // perTouch: 2\r\n // },\r\n // 500: {\r\n // perView: 1,\r\n // perTouch: 1\r\n // }\r\n // }\r\n // });\r\n\r\n // thisSlider.on('run.before', function(ev){\r\n // // activeSlide = Util.$('.glide__slide.glide__slide--active', el)[0];\r\n \r\n // // if(ev.direction === \">\"){\r\n // // if(current < slideCount){\r\n // // current = current + 1;\r\n // // canShift = true;\r\n // // }else{\r\n // // canShift = false;\r\n // // }\r\n \r\n // // }else{\r\n // // if(current > 1){\r\n // // current = current - 1;\r\n // // canShift = true;\r\n // // }else{\r\n // // canShift = false;\r\n // // }\r\n // // }\r\n // // if(canShift){\r\n // // if(!showMultiple){\r\n // // activeSlide.classList.add('-leaving');\r\n // // }\r\n // // if (activeSlideIndicator)\r\n // // activeSlideIndicator.textContent = current;\r\n // // }\r\n \r\n // });\r\n // thisSlider.on('run.after', function(ev){\r\n // if(canShift && !showMultiple){\r\n // activeSlide.classList.remove('-leaving');\r\n // }\r\n // });\r\n // thisSlider.on('mount.before', function(ev){\r\n // // if (activeSlideIndicator)\r\n // // activeSlideIndicator.textContent = current;\r\n // // if (totalSlideIndicator)\r\n // // totalSlideIndicator.textContent = slideCount;\r\n // });\r\n // thisSlider.mount();\r\n }\r\n });\r\n }\r\n \r\n }\r\n}\r\nexport default CustomCards;","import { gsap } from \"gsap/gsap-core\";\r\nimport { CSSPlugin } from 'gsap/CSSPlugin';\r\nimport Util from \"../utils/util.js\";\r\ngsap.registerPlugin(CSSPlugin);\r\nclass SeasonToggle {\r\n constructor() {\r\n this.initSeasonToggle();\r\n }\r\n initSeasonToggle(){\r\n const body = document.getElementsByTagName( 'body' )[0];\r\n const seasonSwitch = Util.$('.js-season-toggle');\r\n const thisEvent = new Event('seasonalchange');\r\n // On page load check season toggle query parameter\r\n let urlSearchParams = new URLSearchParams(window.location.search);\r\n let season = urlSearchParams.get('season');\r\n const s = this;\r\n // TEST FOR SEASON SESSION STORAGE IF NO URL SEARCH PARAMS\r\n if(season != 'winter' && season != 'summer'){\r\n let sessionData = sessionStorage.getItem(\"season\");\r\n if(sessionData === \"winter\"){\r\n seasonSwitch.forEach(function(el){\r\n const winterSwitch = Util.$('.js-toggle.-winter', el)[0];\r\n const summerSwitch = Util.$('.js-toggle.-summer', el)[0];\r\n const indicator = Util.$('.js-main-nav__switch', el)[0];\r\n summerSwitch.classList.remove('-active');\r\n indicator.classList.remove('-summer');\r\n indicator.classList.add('-winter');\r\n winterSwitch.classList.add('-active');\r\n });\r\n body.classList.add('-winter-season');\r\n body.classList.remove('-summer-season');\r\n urlSearchParams.set('season', 'winter');\r\n let newRelativePathQuery = window.location.pathname + '?' + urlSearchParams.toString();\r\n history.pushState(null, '', newRelativePathQuery);\r\n }else if(sessionData === \"summer\"){\r\n seasonSwitch.forEach(function(el){\r\n const winterSwitch = Util.$('.js-toggle.-winter', el)[0];\r\n const summerSwitch = Util.$('.js-toggle.-summer', el)[0];\r\n const indicator = Util.$('.js-main-nav__switch', el)[0];\r\n winterSwitch.classList.remove('-active');\r\n summerSwitch.classList.add('-active');\r\n indicator.classList.remove('-winter');\r\n indicator.classList.add('-summmer');\r\n });\r\n body.classList.add('-summer-season');\r\n body.classList.remove('-winter-season');\r\n urlSearchParams.set('season', 'summer');\r\n let newRelativePathQuery = window.location.pathname + '?' + urlSearchParams.toString();\r\n history.pushState(null, '', newRelativePathQuery);\r\n }else{\r\n //CHECK FOR BODY CLASS NAME\r\n if(body.classList.contains('-summer-season')){\r\n seasonSwitch.forEach(function(el){\r\n const winterSwitch = Util.$('.js-toggle.-winter', el)[0];\r\n const summerSwitch = Util.$('.js-toggle.-summer', el)[0];\r\n const indicator = Util.$('.js-main-nav__switch', el)[0];\r\n winterSwitch.classList.remove('-active');\r\n summerSwitch.classList.add('-active');\r\n indicator.classList.remove('-winter');\r\n indicator.classList.add('-summmer');\r\n });\r\n }else if(body.classList.contains('-winter-season')){\r\n seasonSwitch.forEach(function(el){\r\n const winterSwitch = Util.$('.js-toggle.-winter', el)[0];\r\n const summerSwitch = Util.$('.js-toggle.-summer', el)[0];\r\n const indicator = Util.$('.js-main-nav__switch', el)[0];\r\n winterSwitch.classList.add('-active');\r\n summerSwitch.classList.remove('-active');\r\n indicator.classList.remove('-summer');\r\n indicator.classList.add('-winter');\r\n });\r\n }\r\n }\r\n }\r\n if(seasonSwitch){\r\n window.addEventListener(\"seasonalchange\", (e) => {\r\n let season = sessionStorage.getItem(\"season\");\r\n seasonSwitch.forEach(function(el){\r\n const winterSwitch = Util.$('.js-toggle.-winter', el)[0];\r\n const summerSwitch = Util.$('.js-toggle.-summer', el)[0];\r\n const indicator = Util.$('.js-main-nav__switch', el)[0];\r\n if(season === \"winter\" && indicator.classList.contains('-summer')){\r\n indicator.classList.add('-winter');\r\n indicator.classList.remove('-summer');\r\n winterSwitch.classList.add('-active');\r\n summerSwitch.classList.remove('-active');\r\n }else if(season === \"summer\" && indicator.classList.contains('-winter')){\r\n indicator.classList.remove('-winter');\r\n indicator.classList.add('-summer');\r\n winterSwitch.classList.remove('-active');\r\n summerSwitch.classList.add('-active');\r\n }\r\n });\r\n });\r\n\r\n seasonSwitch.forEach(function(el){\r\n const winterSwitch = Util.$('.js-toggle.-winter', el)[0];\r\n const summerSwitch = Util.$('.js-toggle.-summer', el)[0];\r\n const indicator = Util.$('.js-main-nav__switch', el)[0];\r\n if(season === 'winter'){\r\n body.classList.add('-winter-season');\r\n body.classList.remove('-summer-season');\r\n winterSwitch.classList.add('-active');\r\n indicator.classList.add('-winter');\r\n sessionStorage.setItem(\"season\", \"winter\");\r\n }else if(season === 'summer'){\r\n body.classList.add('-summer-season');\r\n body.classList.remove('-winter-season');\r\n summerSwitch.classList.add('-active');\r\n sessionStorage.setItem(\"season\", \"winter\");\r\n }else{\r\n if(indicator.classList.contains('-winter')){\r\n winterSwitch.classList.add('-active');\r\n }else{\r\n summerSwitch.classList.add('-active');\r\n }\r\n }\r\n \r\n winterSwitch.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n if(!indicator.classList.contains('-winter')){\r\n sessionStorage.setItem(\"season\", \"winter\");\r\n s.winterToggle(body, winterSwitch, summerSwitch, indicator, urlSearchParams, thisEvent);\r\n urlSearchParams.set('season', 'winter');\r\n let newRelativePathQuery = window.location.pathname + '?' + urlSearchParams.toString();\r\n history.pushState(null, '', newRelativePathQuery);\r\n }\r\n });\r\n summerSwitch.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n if(!indicator.classList.contains('-summer')){\r\n sessionStorage.setItem(\"season\", \"summer\");\r\n s.summerToggle(body, winterSwitch, summerSwitch, indicator, urlSearchParams, thisEvent);\r\n urlSearchParams.set('season', 'summer');\r\n let newRelativePathQuery = window.location.pathname + '?' + urlSearchParams.toString();\r\n history.pushState(null, '', newRelativePathQuery);\r\n }\r\n });\r\n const infoBtn = Util.$('.js-season-toggle__info-btn', el)[0];\r\n const infoBubble = Util.$('.js-season-toggle__info')[0];\r\n const infoBubbleCloseBtn = Util.$('.js-season-toggle__btn')[0];\r\n if(infoBtn){\r\n infoBtn.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n if(infoBubble.classList.contains('-active')){\r\n infoBubble.classList.remove('-active');\r\n }else{\r\n infoBubble.classList.add('-active')\r\n }\r\n });\r\n infoBubbleCloseBtn.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n infoBubble.classList.remove('-active');\r\n });\r\n }\r\n });\r\n }\r\n \r\n \r\n }\r\n \r\n winterToggle(body, winterSwitch, summerSwitch, indicator, urlSearchParams, thisEvent){\r\n summerSwitch.classList.remove('-active');\r\n indicator.classList.remove('-summer');\r\n indicator.classList.add('-winter');\r\n winterSwitch.classList.add('-active');\r\n body.classList.add('-winter-transition');\r\n urlSearchParams.set('season', 'winter');\r\n window.dispatchEvent(thisEvent);\r\n setTimeout(function(){\r\n body.classList.add('-winter-season');\r\n body.classList.remove('-summer-season');\r\n \r\n }, 350);\r\n setTimeout(function(){\r\n body.classList.remove('-winter-transition');\r\n }, 360);\r\n }\r\n summerToggle(body, winterSwitch, summerSwitch, indicator, urlSearchParams, thisEvent){\r\n body.classList.add('-summer-transition');\r\n winterSwitch.classList.remove('-active');\r\n summerSwitch.classList.add('-active');\r\n indicator.classList.remove('-winter');\r\n indicator.classList.add('-summmer');\r\n urlSearchParams.set('season', 'summer');\r\n window.dispatchEvent(thisEvent);\r\n setTimeout(function(){\r\n body.classList.remove('-winter-season');\r\n body.classList.add('-summer-season');\r\n \r\n }, 350);\r\n setTimeout(function(){\r\n body.classList.remove('-summer-transition');\r\n }, 360);\r\n } \r\n}\r\nexport default SeasonToggle;","import { gsap } from \"gsap/gsap-core\";\r\nimport { CSSPlugin } from 'gsap/CSSPlugin';\r\nimport Util from \"../utils/util.js\";\r\ngsap.registerPlugin(CSSPlugin);\r\nclass MountainReportDropdown {\r\n constructor() {\r\n this.initMountainReportDropdown();\r\n }\r\n settings = {\r\n desktop: '1024px'\r\n }\r\n mobileCheck(){\r\n if(window.matchMedia('(min-width:'+ this.settings.desktop +')').matches){\r\n return false;\r\n }else{\r\n return true;\r\n }\r\n }\r\n initMountainReportDropdown(){\r\n let t = this; \r\n document.addEventListener(\"DOMContentLoaded\",function(){\r\n let header = Util.$('.js-header');\r\n let weatherButton = Util.$('.js-header__utility-weather-toggle', header[0]);\r\n let mountainConditionDropdown = Util.$('.js-mountain-report-dropdown' , header[0]);\r\n let dropdownClose = Util.$('.mountain-report-dropdown__close-btn' , header[0]);\r\n if(mountainConditionDropdown.length > 0 && weatherButton.length > 0){\r\n t.bindDropdownToggle(mountainConditionDropdown[0], weatherButton[0], header[0], '-mountain-report-open', dropdownClose[0]);\r\n }\r\n })\r\n \r\n }\r\n bindDropdownToggle(dropdown, item, parent, className, closeBtn){\r\n // FOR ALL MENU TOGGLE BUTTONS - TOGGLE CLASS ON ITEM AND DROPDOWN\r\n let h = this;\r\n item.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n let active = item.classList.contains('-active');\r\n let body = document.getElementsByTagName( 'body' )[0];\r\n let menuActive = body.classList.contains('menu-open');\r\n let searchActive = body.classList.contains('search-open');\r\n if(active){\r\n item.classList.remove('-active');\r\n dropdown.classList.remove('-active');\r\n parent.classList.remove(className);\r\n body.classList.remove('weather-open');\r\n h.hideDropdown(dropdown);\r\n if(menuActive){\r\n setTimeout(function(){\r\n parent.classList.add('-main-nav-open');\r\n }, 350);\r\n }\r\n if(searchActive){\r\n window.setTimeout(350, function(){\r\n parent.classList.add('-search-open');\r\n });\r\n }\r\n }else{\r\n if(menuActive){\r\n parent.classList.remove('-main-nav-open');\r\n }\r\n if(searchActive){\r\n parent.classList.remove('-search-open');\r\n }\r\n item.classList.add('-active');\r\n dropdown.classList.add('-active');\r\n parent.classList.add(className);\r\n body.classList.add('weather-open');\r\n h.showDropdown(dropdown);\r\n\r\n let delayedWebcams = document.querySelectorAll('.webcam__delay-load');\r\n if (delayedWebcams && delayedWebcams.length > 0) {\r\n delayedWebcams.forEach(delayedWebcam => {\r\n let elementId = delayedWebcam.getAttribute('id'), \r\n webcamId = delayedWebcam.getAttribute('data-webcamid');\r\n\r\n if (elementId && webcamId) {\r\n HDRelay.create({ target: elementId, id: webcamId });\r\n setTimeout( () => {\r\n const hdrelayPlayer = delayedWebcam.shadowRoot.querySelector('.hdrelay-default-player');\r\n if (hdrelayPlayer) {\r\n hdrelayPlayer.insertAdjacentHTML('beforeend', '');\r\n delayedWebcam.classList.remove('webcam__delay-load');\r\n }\r\n }, 2000); // Is there an event when the HDRelay load is complete? */\r\n }\r\n });\r\n }\r\n }\r\n \r\n });\r\n closeBtn.addEventListener('click', function(ev){\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n item.click();\r\n })\r\n }\r\n showDropdown(dropdown){\r\n gsap.to(dropdown, {height: '100vh'});\r\n }\r\n hideDropdown(dropdown){\r\n gsap.to(dropdown, {height: '0vh'});\r\n }\r\n \r\n}\r\nexport default MountainReportDropdown;","import Util from \"../utils/util.js\";\r\n\r\nclass VisitInfo {\r\n constructor() {\r\n this.initVisitInfo();\r\n }\r\n initVisitInfo(){\r\n const visitInfoProgress = Util.$('.js-visit-info__progress');\r\n if(visitInfoProgress.length> 0){\r\n const totalProgress = +visitInfoProgress[0].getAttribute('data-progress_range');\r\n const markers = Util.$('.js-visit-info__progress-marker', visitInfoProgress[0]);\r\n const progressBar = Util.$('.js-visit-info__progress-bar-indicator', visitInfoProgress[0]);\r\n const progressNum = +progressBar[0].getAttribute('data-progress_current');\r\n const progressPercent = (progressNum/totalProgress)*100;\r\n \r\n progressBar[0].style.width = progressPercent +'%';\r\n markers.forEach(function(el){\r\n const milestone = +el.getAttribute('data-progress_milestone');\r\n const milestoneLocation = (milestone/totalProgress)*100;\r\n el.style.left = milestoneLocation +'%';\r\n });\r\n }\r\n \r\n }\r\n}\r\nexport default VisitInfo;","import { gsap } from \"gsap/gsap-core\";\r\nimport { CSSPlugin } from 'gsap/CSSPlugin';\r\nimport Util from \"../utils/util.js\";\r\ngsap.registerPlugin(CSSPlugin);\r\nclass Welcome {\r\n constructor() {\r\n this.initWelcome();\r\n }\r\n initWelcome(){\r\n const welcome = Util.$('.js-welcome__dismissable');\r\n if(welcome.length> 0){\r\n const sessionName = 'welcome' + welcome[0].getAttribute('data-message');\r\n const dismissBtn = Util.$('.js-welcome__dismiss-btn', welcome[0]);\r\n let sessionData = localStorage.getItem(sessionName);\r\n if(sessionData != 'dismissed'){\r\n const welcomeContent = Util.$('.js-welcome__dismissable-wrapper', welcome[0]);\r\n let height = welcomeContent.offsetHeight;\r\n let tween = {height: ''};\r\n tween.height = height;\r\n tween.onComplete = function(message){\r\n message.classList.remove('-dismissed');\r\n };\r\n tween.onCompleteParams = [welcome[0]];\r\n gsap.to(welcome[0], tween);\r\n dismissBtn[0].addEventListener('click', function(ev){\r\n let tween = {height: ''};\r\n console.log('CLICKED');\r\n tween.height = 0;\r\n tween.onComplete = function(message){\r\n message.classList.add('-dismissed');\r\n \r\n };\r\n tween.onCompleteParams = [welcome[0]];\r\n gsap.to(welcome[0], tween);\r\n localStorage.setItem(sessionName, 'dismissed');\r\n });\r\n }\r\n }\r\n \r\n }\r\n}\r\nexport default Welcome;","import Util from \"../utils/util.js\";\r\nimport Swiper, { Navigation, Scrollbar, Mousewheel } from 'swiper';\r\n//import Swiper from 'swiper/bundle';\r\nclass AchievementInfo {\r\n constructor() {\r\n this.initAchievementInfo();\r\n }\r\n initAchievementInfo(){\r\n let achievementInfoCarousel = Util.$('.js-achievement-info__carousel');\r\n if(achievementInfoCarousel.length> 0){\r\n achievementInfoCarousel.forEach(el => {\r\n let slider = el;\r\n if(slider){\r\n const swiper = new Swiper('.js-achievement-info__carousel', {\r\n modules: [Navigation, Mousewheel],\r\n slidesPerView: \"auto\",\r\n spaceBetween: 15,\r\n mousewheel: {\r\n forceToAxis: true,\r\n },\r\n // Navigation arrows\r\n navigation: {\r\n nextEl: '.js-ctrl-next',\r\n prevEl: '.js-ctrl-prev',\r\n }\r\n });\r\n // thisSlider = new Glide(el, {\r\n // rewind : false,\r\n // bound: true,\r\n // gap: 30,\r\n // perView: 4,\r\n // perTouch: 4,\r\n // touchRatio: 1,\r\n // breakpoints: {\r\n // 1024: {\r\n // perView: 3,\r\n // perTouch: 3,\r\n // },\r\n // 700: {\r\n // perView: 2,\r\n // perTouch: 2\r\n // },\r\n // 500: {\r\n // perView: 1,\r\n // perTouch: 1\r\n // }\r\n // }\r\n // });\r\n\r\n // thisSlider.on('run.before', function(ev){\r\n // // activeSlide = Util.$('.glide__slide.glide__slide--active', el)[0];\r\n \r\n // // if(ev.direction === \">\"){\r\n // // if(current < slideCount){\r\n // // current = current + 1;\r\n // // canShift = true;\r\n // // }else{\r\n // // canShift = false;\r\n // // }\r\n \r\n // // }else{\r\n // // if(current > 1){\r\n // // current = current - 1;\r\n // // canShift = true;\r\n // // }else{\r\n // // canShift = false;\r\n // // }\r\n // // }\r\n // // if(canShift){\r\n // // if(!showMultiple){\r\n // // activeSlide.classList.add('-leaving');\r\n // // }\r\n // // if (activeSlideIndicator)\r\n // // activeSlideIndicator.textContent = current;\r\n // // }\r\n \r\n // });\r\n // thisSlider.on('run.after', function(ev){\r\n // if(canShift && !showMultiple){\r\n // activeSlide.classList.remove('-leaving');\r\n // }\r\n // });\r\n // thisSlider.on('mount.before', function(ev){\r\n // // if (activeSlideIndicator)\r\n // // activeSlideIndicator.textContent = current;\r\n // // if (totalSlideIndicator)\r\n // // totalSlideIndicator.textContent = slideCount;\r\n // });\r\n // thisSlider.mount();\r\n }\r\n });\r\n }\r\n \r\n }\r\n}\r\nexport default AchievementInfo;","//import './scss/critical-sv.scss';\r\nimport './scss/style-sv.scss';\r\nimport './js/fe-core-sv.js';\r\nimport FeCore from './js/fe-core-sv.js';\r\n\r\nconst feCore = new FeCore();","import Header from \"./global/header.js\";\r\nimport MainNav from \"./global/main-nav.js\";\r\nimport Search from \"./global/search.js\";\r\nimport Breadcrumbs from \"./global/breadcrumbs.js\";\r\nimport Video from \"./widgets/video.js\";\r\nimport TrailMap from \"./widgets/trail-map.js\";\r\nimport Accordion from \"./widgets/accordion.js\";\r\nimport Alerts from \"./global/alert.js\";\r\nimport LocalNav from \"./global/local-nav.js\";\r\nimport Filters from \"./global/filters.js\";\r\nimport LoadMore from \"./global/load-more.js\";\r\nimport Tabs from \"./global/tabs.js\";\r\nimport FeatureMedia from \"./page-type-components/feature-media.js\";\r\nimport ParagraphBannerSlider from \"./page-type-components/paragraph-banner-slider.js\";\r\nimport Amenities from \"./page-type-components/amenities.js\";\r\nimport Booking from \"./widgets/booking.js\";\r\nimport Weddings from \"./page-type-components/weddings.js\";\r\nimport MountainConditions from \"./page-type-components/mountain-conditions.js\";\r\nimport CustomCards from \"./widgets/custom-cards.js\";\r\nimport SeasonToggle from \"./widgets/season-toggle.js\";\r\nimport MountainReportDropdown from \"./global/mountain-report-dropdown.js\";\r\nimport VisitInfo from \"./page-type-components/visit-info.js\";\r\nimport Welcome from \"./page-type-components/welcome.js\";\r\nimport AchievementInfo from \"./page-type-components/achievement-info.js\";\r\n\r\nclass FeCore {\r\n constructor() {\r\n this.initCore();\r\n \r\n }\r\n initCore(){ \r\n \r\n const header = new Header;\r\n const mainnav = new MainNav;\r\n const search = new Search;\r\n const breadcrumbs = new Breadcrumbs;\r\n const video = new Video;\r\n const trailMap = new TrailMap;\r\n const alerts = new Alerts;\r\n const localnav = new LocalNav;\r\n const filters = new Filters;\r\n const loadMore = new LoadMore;\r\n const tabs = new Tabs;\r\n const featureMedia = new FeatureMedia;\r\n const weddings = new Weddings;\r\n const mountainConditions = new MountainConditions;\r\n const paragraphBannerSlider = new ParagraphBannerSlider;\r\n const accordion = new Accordion;\r\n const amenities = new Amenities;\r\n const booking = new Booking;\r\n const customCards = new CustomCards;\r\n const seasonToggle = new SeasonToggle;\r\n const mountainReportDropdown = new MountainReportDropdown;\r\n const visitInfo = new VisitInfo;\r\n const welcome = new Welcome;\r\n const achievementInfo = new AchievementInfo;\r\n }\r\n}\r\nexport default FeCore;"],"names":["global","factory","_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","uid","Date","now","extend","extended","deep","arguments","toString","call","merge","prop","hasOwnProperty","each","collection","callback","isNode","window","document","isArrayLike","isObject","size","l","has","getNodeEvents","node","name","undefined","fn","cache","data","all","evt","found","cl","eventName","addEvent","_ref","onElement","withCallback","_ref$avoidDuplicate","avoidDuplicate","_ref$once","once","_ref$useCapture","useCapture","thisArg","element","handler","event","isFunction","this","destroy","isString","querySelectorAll","el","events","splice","removeEventListener","addEventListener","push","addClass","split","classList","add","removeClass","remove","hasClass","contains","closest","elem","selector","body","parentElement","matches","msMatchesSelector","animateElement","animation","animationEnd","t","createElement","animations","OAnimation","MozAnimation","WebkitAnimation","style","whichAnimationEvent","animationNames","cssTransform","translate","webkitTransform","MozTransform","msTransform","OTransform","transform","show","display","hide","createHTML","htmlStr","frag","createDocumentFragment","temp","innerHTML","firstChild","appendChild","windowSize","width","innerWidth","documentElement","clientWidth","height","innerHeight","clientHeight","waitUntil","check","onComplete","delay","timeout","timeoutPointer","intervalPointer","setInterval","clearInterval","clearTimeout","setTimeout","injectAssets","url","waitFor","isNil","console","error","indexOf","head","getElementsByTagName","headStyles","link","rel","type","href","media","insertBefore","script","src","onload","isMobile","navigator","userAgent","match","f","s","nodeType","isArray","ar","Array","isFinite","o","keys","k","isNumber","n","isNaN","parseFloat","getNextFocusElement","current","btns","parseInt","orders","btn","getAttribute","highestOrder","Math","max","apply","map","order","newIndex","nextFocus","filter","sort","querySelector","concat","getLen","v","sqrt","x","y","EventsHandlerAdmin","handlers","value","len","wrapFunc","EventshandlerAdmin","TouchEvents","option","start","bind","move","end","cancel","preV","pinchStartLen","zoom","isDoubleTap","noop","rotate","touchStart","multipointStart","multipointEnd","pinch","swipe","tap","doubleTap","longTap","singleTap","pressMove","twoFingerPressMove","touchMove","touchEnd","touchCancel","translateContainer","_cancelAllHandler","cancelAll","delta","last","tapTimeout","singleTapTimeout","longTapTimeout","swipeTimeout","x1","x2","y1","y2","preTapPosition","touches","nodeName","toLowerCase","log","pageX","pageY","dispatch","abs","_cancelLongTap","_cancelSingleTap","_preventTap","currentX","currentY","sCurrentX","sCurrentY","angle","v1","v2","mr","r","dot","acos","getAngle","cross","PI","sx2","deltaX","deltaY","sy2","movedX","movedY","preventDefault","changedTouches","self","direction","_swipeDirection","del","resetSlideMove","slide","transitionEnd","transitions","transition","OTransition","MozTransition","WebkitTransition","whichTransitionEvent","windowWidth","container","desc","opacity","ZoomImages","_this","onclose","img","setZoomEvents","active","zoomedIn","dragging","initialX","initialY","xOffset","yOffset","e","dragStart","dragEnd","drag","zoomOut","zoomIn","winWidth","widowWidth","setAttribute","maxWidth","naturalWidth","maxHeight","naturalHeight","centerX","setTranslate","parentNode","clientX","clientY","_this2","isDragging","xPos","yPos","DragSlides","config","dragEl","_config$toleranceX","toleranceX","_config$toleranceY","toleranceY","_config$slide","_config$instance","lastDirection","toleranceReached","dragContainer","clicked","doSlideChange","preventOutsideClick","prevSlide","nextSlide","doSlideClose","close","currentXInt","currentYInt","doChange","shouldChange","settings","dragAutoSnap","doClose","shouldClose","dragDir","lastChild","animated","slideVideo","index","slideContainer","videoID","slideMedia","videoPlayers","getAllPlayers","videoWrapper","plyr","css","protocol","location","replace","videoSource","embedID","customPlaceholder","js","vimeoID","exec","youtubeID","getYoutubeID","html","format","pop","sources","mp4","ogg","webm","videoFile","placeholder","playerConfig","player","Plyr","on","detail","dataset","ready","resize","handleMediaFullScreen","slideInline","innerContent","hash","trim","content","className","div","getElementById","cloned","cloneNode","slideIframe","iframe","allow","appendTo","createIframe","SlideConfigParser","slideParamas","defaults","sizes","srcset","title","description","alt","descPosition","effect","zoomable","draggable","origin","sourceType","objectData","setSize","val","nodeData","sanitizeValue","cleanKeys","join","str","regex","RegExp","substring","DOMException","nodeDesc","slideConfig","defaultWith","checkSize","videosWidth","defaultHeight","_hasCustomWidth","_hasCustomHeight","Slide","isMobileDevice","beforeSlideLoad","position","slideTitle","slideText","slideDesc","finalCallback","titleID","textID","afterSlideLoad","getSlidePlayerInstance","removeChild","id","moreLength","smallDescription","slideShortDesc","moreText","descriptionEvents","dragToleranceX","dragToleranceY","Image","slideImage","offsetWidth","string","wordBoundary","useWordBoundary","innerText","subString","substr","moreLink","shortEvent","slideHTML","parser","slideExtraAttributes","parseConfig","isMobile$1","isTouch$1","createTouch","msMaxTouchPoints","elements","skin","theme","closeButton","startAt","autoplayVideos","autofocusVideos","beforeSlideChange","afterSlideChange","slideInserted","slideRemoved","onOpen","onClose","loop","preload","oneSlidePerOpen","touchNavigation","touchFollowAxis","keyboardNavigation","closeOnOutsideClick","plugins","ratio","fullscreen","enabled","iosNative","youtube","noCookie","showinfo","iv_load_policy","vimeo","byline","portrait","transparent","openEffect","closeEffect","slideEffect","cssEfects","fade","out","slideBack","none","svg","next","prev","GlightboxInit","options","customOptions","effectsClasses","getAnimationClasses","apiEvents","fullElementsList","getSelector","baseEvents","open","getElements","activeSlide","prevActiveSlideIndex","prevActiveSlide","gallery","getGalleryElements","getElementIndex","build","overlay","scrollBar","styleSheet","showSlide","prevButton","nextButton","lightboxOpen","trigger","hDistance","vDistance","isInlined","winSize","winHeight","process","currentSlide","mediaImage","doingMove","initScale","currentScale","doingZoom","imageZoomed","zoomedPosX","zoomedPosY","lastZoomedPosX","lastZoomedPosY","hDistancePercent","vDistancePercent","vSwipe","hSwipe","startCoords","endCoords","xDown","yDown","sliderWrapper","touchInstance","targetTouches","offsetHeight","moved","xUp","yUp","xDiff","yDiff","h","scaleX","scaleY","scale","mhDistance","mvDistance","keyCode","focusedButton","activeElement","toLocaleLowerCase","first","focus","loader","slidesContainer","slideAnimateOut","slideNode","slideAnimateIn","slideData","slideIndex","setContent","slideDescription","slideDescriptionContained","preloadSlide","updateNavigationClasses","_this3","goToSlide","getConfig","slideInfo","newSlide","create","totalSlides","addedSlideNode","addedSlidePlayer","existingSlide","getActiveSlideIndex","_this4","prevData","nextData","slidePlayerPlay","effectName","animIn","animOut","slidePlayerPause","playing","pause","play","_this5","newElements","_this6","list","elData","nodes","effects","_this7","built","children","childNodes","bodyChildElms","charAt","hasAttribute","nextSVG","prevSVG","closeSVG","lightboxHTML","modal","bodyHiddenChildElms","video","image","descriptionResize","descHeight","_imgNode","containerWidth","containerHeight","divisor","videoRatio","videoWidth","floor","vwidth","vheight","_ratio","vsize","init","loopAtEnd","_this8","closing","removeAttribute","_key","styles","clearAllEvents","_this9","onceTriggered","exports","_typeof2","module","define","GLightbox","Lightbox","_classCallCheck2","initLightbox","A","L","P","O","a","d","c","u","g","T","C","p","m","b","S","I","w","E","M","z","Y","N","D","_","q","W","H","V","F","videoProvider","R","G","Z","U","$","j","J","K","Q","ee","in","te","X","touch","B","keyboard","muted","outClose","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","amdO","getter","__esModule","definition","get","hmd","set","Error","_assertThisInitialized","ReferenceError","_inheritsLoose","subClass","superClass","__proto__","_suppressOverwrites","_reverting","_context","_globalTimeline","_win","_coreInitted","_doc","_coreReady","_lastRenderedFrame","_quickTween","_tickerActive","n1","easeOut","_config","autoSleep","force3D","nullTargetWarn","units","lineHeight","_defaults","duration","overwrite","_bigNum","_tinyNum","_2PI","_HALF_PI","_gsID","_sqrt","_cos","cos","_sin","sin","_isString","_isFunction","_isNumber","_isUndefined","_isObject","_isNotFalse","_windowExists","_isFuncOrString","_isTypedArray","ArrayBuffer","isView","_isArray","_strictNumExp","_numExp","_numWithUnitExp","_complexStringNumExp","_relExp","_delimitedValueExp","_unitExp","_globals","_installScope","_install","scope","_merge","gsap","_missingPlugin","property","warn","_warn","message","suppress","_addGlobal","_emptyFunc","_startAtRevertConfig","suppressEvents","isStart","kill","_revertConfigNoKill","_revertConfig","_reservedProps","_lazyTweens","_lazyLookup","_plugins","_effects","_nextGCFrame","_harnessPlugins","_callbackNames","_harness","targets","harnessPlugin","_gsap","harness","targetTest","GSCache","_getCache","toArray","_getProperty","_forEachName","names","func","forEach","_round","round","_roundPrecise","_parseRelative","operator","_arrayContainsAny","toSearch","toFind","_lazyRender","tween","slice","_lazy","render","_lazySafeRender","time","force","_initted","_startAt","_numericIfPossible","_passThrough","_setDefaults","base","toMerge","_mergeDeep","_copyExcluding","excluding","copy","_inheritDefaults","vars","excludeDuration","parent","keyframes","inherit","_dp","_addLinkedListItem","child","firstProp","lastProp","sortBy","_prev","_next","_removeLinkedListItem","_removeFromParent","onlyIfParentHasAutoRemove","autoRemoveChildren","_act","_uncache","_end","_dur","_start","_dirty","_rewindStartAt","totalTime","revert","immediateRender","autoRevert","_hasNoPausedAncestors","_ts","_elapsedCycleDuration","_repeat","_animationCycle","_tTime","_rDelay","tTime","cycleDuration","whole","_parentToChildTotalTime","parentTime","totalDuration","_tDur","_setEnd","_rts","_alignPlayhead","smoothChildTiming","_time","_postAddChecks","timeline","rawTime","_clamp","_zTime","_addToTimeline","skipChecks","_parsePosition","_delay","timeScale","_sort","_isFromOrFromStart","_recent","_scrollTrigger","ScrollTrigger","_attemptInitTween","_initTween","_pt","lazy","_ticker","frame","_parentPlayheadIsBeforeStart","_lock","_ref2","_setDuration","skipUncache","leavePlayhead","repeat","dur","totalProgress","_onUpdateTotalDuration","Timeline","_zeroPosition","endTime","percentAnimation","offset","isPercent","labels","recent","clippedDuration","_createTweenType","params","irVars","isLegacy","varsIndex","runBackwards","Tween","_conditionalReturn","min","getUnit","_slice","_isArrayLike","nonEmpty","leaveStrings","_wake","accumulator","_accumulator","_flatten","nativeElement","shuffle","random","distribute","ease","_parseEase","from","isDecimal","ratios","axis","ratioX","ratioY","center","edges","originX","originY","wrapAt","distances","grid","getBoundingClientRect","left","amount","_invertEase","_roundModifier","pow","raw","snap","snapTo","radius","is2D","values","increment","dx","dy","roundingIncrement","returnFunction","_wrapArray","wrapper","_replaceRandom","nums","mapRange","inMin","inMax","outMin","outMax","inRange","outRange","_getLabelInDirection","fromTime","backward","distance","label","_callback","executeLazyFirst","result","prevContext","context","_ctx","callbackScope","_interrupt","scrollTrigger","progress","_registerPluginQueue","_createPlugin","isFunc","Plugin","_props","instanceDefaults","_renderPropTweens","_addPropTween","_killPropTweensOf","modifier","_addPluginModifier","rawVars","statics","getSetter","_getSetter","aliases","register","toUpperCase","PropTween","_255","_colorLookup","aqua","lime","silver","black","maroon","teal","blue","navy","white","olive","yellow","orange","gray","purple","green","red","pink","cyan","_hue","m1","m2","splitColor","toHSL","forceAlpha","wasHSL","Number","_colorOrderData","_colorExp","_formatColors","orderMatchData","shell","colors","color","shift","_hslExp","_colorStringFilter","combined","lastIndex","test","_id","_req","_raf","_self","_delta","_i","_getTime","_lagThreshold","_adjustedLag","_startTime","_lastUpdate","_gap","_nextTime","_listeners","_tick","overlap","elapsed","manual","tick","deltaRatio","fps","wake","gsapVersions","version","GreenSockGlobals","requestAnimationFrame","sleep","cancelAnimationFrame","lagSmoothing","threshold","adjustedLag","Infinity","_fps","prioritize","_easeMap","_customEaseExp","_quotesExp","_parseObjectInString","parsedVal","lastIndexOf","_propagateYoyoEase","isYoyo","_first","yoyoEase","_yoyo","_ease","_yEase","defaultEase","nested","_valueInParentheses","_CE","_configEaseFromString","_insertEase","easeIn","easeInOut","lowercaseName","_easeInOutFromOut","_configElastic","amplitude","period","p1","p2","p3","asin","_configBack","overshoot","power","Linear","easeNone","SteppedEase","steps","immediateStart","Animation","repeatDelay","yoyo","_proto","startTime","_totalTime","_ptLookup","_pTime","iteration","_ps","_recacheAncestors","paused","includeRepeats","wrapRepeats","prevIsReverting","globalTime","_sat","seek","restart","includeDelay","reversed","reverse","atTime","resume","invalidate","isActive","eventCallback","_onUpdate","then","onFulfilled","Promise","resolve","_resolve","_then","_prom","_Animation","sortChildren","_proto2","to","fromTo","fromVars","toVars","delayedCall","staggerTo","stagger","onCompleteAll","onCompleteAllParams","onCompleteParams","staggerFrom","staggerFromTo","prevPaused","pauseTween","prevStart","prevIteration","prevTime","tDur","crossingStart","rewinding","doesWrap","repeatRefresh","onRepeat","_hasPause","_forcing","_last","_findNextPauseTween","onUpdate","adjustedTime","addLabel","getChildren","tweens","timelines","ignoreBeforeTime","getById","removeLabel","killTweensOf","_totalTime2","addPause","removePause","onlyActive","getTweensOf","_overwritingTween","parsedTargets","isGlobalTime","_targets","tweenTo","initted","tl","_vars","_onStart","onStart","onStartParams","tweenFromTo","fromPosition","toPosition","nextLabel","afterTime","previousLabel","beforeTime","currentLabel","shiftChildren","adjustLabels","soft","clear","includeLabels","updateRoot","_forceAllPropTweens","_addComplexStringPropTween","setter","stringFilter","funcParam","startNums","endNum","chunk","startNum","hasRandom","pt","_renderComplexString","matchIndex","fp","optional","currentValue","parsedStart","_setterFuncWithParam","_setterFunc","_setterPlain","_renderBoolean","_renderPlain","_checkPlugin","plugin","ptLookup","_parseFuncOrString","_processVars","priority","cleanVars","hasPriority","gsData","harnessVars","overwritten","onUpdateParams","prevStartAt","fullTargets","autoOverwrite","_overwrite","_from","_ptCache","_op","_sortPropTweensByPriority","_onInit","_parseKeyframe","allProps","easeEach","_staggerTweenProps","_staggerPropsToSkip","_Animation2","skipInherit","curTarget","staggerFunc","staggerVarsToMerge","_this3$vars","kf","_proto3","isNegative","prevRatio","_renderZeroDurationTween","resetTo","startIsRelative","rootPT","lookup","ptCache","_updatePropTweens","overwrittenProps","curLookup","curOverwriteProps","killingTargets","propTweenLookup","firstPT","a1","a2","_arraysMatch","propertyAliases","_addAliasesToVars","onReverseComplete","onReverseCompleteParams","_setterAttribute","hasNonDependentRemaining","op","dep","_setterWithModifier","mSet","mt","pt2","pr","change","renderer","TweenMax","TweenLite","TimelineLite","TimelineMax","_media","_emptyArray","_lastMediaTime","_dispatch","_onMediaChange","anyMatch","toggled","queries","conditions","matchMedia","onMatch","Context","_r","isReverted","_proto5","prevSelector","ignore","getTweens","MatchMedia","contexts","_proto6","mq","cond","addListener","registerPlugin","_len2","args","_key2","getProperty","unit","uncache","quickSetter","setters","quickTo","_merge2","isTweening","registerEffect","_ref3","extendTimeline","pluginName","registerEase","parseEase","exportRoot","includeDelayedCalls","matchMediaRefresh","utils","wrap","range","wrapYoyo","total","normalize","clamp","pipe","_len","functions","reduce","unitize","interpolate","mutate","interpolators","il","master","install","ticker","globalTimeline","core","globals","getCache","reverting","toAdd","suppressOverwrites","_getPluginPropTween","_buildModifierPlugin","modifiers","_addModifiers","Power0","Power1","Power2","Power3","Power4","Quad","Cubic","Quart","Quint","Strong","Elastic","Back","Bounce","Sine","Expo","Circ","_docElement","_pluginInitted","_tempDiv","_recentSetterPlugin","_supports3D","_transformProps","_RAD2DEG","_DEG2RAD","_atan2","atan2","_capsExp","_horizontalExp","_complexExp","_propertyAliases","autoAlpha","alpha","_renderCSSProp","_renderPropWithEnd","_renderCSSPropWithBeginning","_renderRoundedCSSProp","_renderNonTweeningValue","_renderNonTweeningValueOnlyAtEnd","_setterCSSStyle","_setterCSSProp","setProperty","_setterTransform","_setterScale","_setterScaleWithRender","renderTransform","_setterTransformWithRender","_transformProp","_transformOriginProp","_saveStyle","isNotCSS","tfm","_get","svgo","_removeIndependentTransforms","removeProperty","_revertStyle","_getStyleSaver","properties","saver","save","_createElement","ns","createElementNS","_getComputedProperty","skipPrefixFallback","cs","getComputedStyle","getPropertyValue","_checkPropPrefix","_prefixes","preferPrefix","_initCore","cssText","_getBBoxHack","swapIfPossible","bbox","ownerSVGElement","oldParent","oldSibling","nextSibling","oldCSS","getBBox","_gsapBBox","_getAttributeFallbacks","attributesArray","_getBBox","bounds","_isSVG","getCTM","_removeProperty","_addNonTweeningPT","beginning","onlySetAtEnd","_nonConvertibleUnits","deg","rad","turn","_nonStandardLayouts","flex","_convertToUnit","px","isSVG","curValue","curUnit","horizontal","isRootSVG","tagName","measureProperty","toPixels","toPercent","_parseTransform","_firstTwoOnly","zOrigin","_specialProps","_tweenComplexCSSString","startValues","startValue","endValue","endUnit","startUnit","_keywordToPercent","top","bottom","right","_convertKeywordsToPercentages","_renderClearProps","clearTransforms","clearProps","_identity2DMatrix","_rotationalProperties","_isNullTransform","_getComputedTransformMatrixAsArray","matrixString","_getMatrix","force2D","addedToDOM","matrix","baseVal","consolidate","offsetParent","nextElementSibling","_applySVGOrigin","originIsAbsolute","smooth","matrixArray","pluginToAddPropTweensTo","determinant","xOriginOld","xOrigin","yOriginOld","yOrigin","xOffsetOld","yOffsetOld","tx","ty","originSplit","rotation","rotationX","rotationY","skewX","skewY","perspective","a12","a22","t1","t2","t3","a13","a23","a33","a42","a43","a32","invertedScaleX","forceCSS","xPercent","yPercent","transformPerspective","_renderSVGTransforms","_renderCSSTransforms","_renderNon3DTransforms","_addPxTranslate","_zeroDeg","_zeroPx","_endParenthesis","transforms","use3D","a11","a21","tan","_addRotationalPropTween","cap","finalValue","_assign","source","_addRawTransformPTs","endCache","startCache","side","CSSPlugin","specialProp","relative","isTransformRelated","transformPropTween","inlineProps","visibility","parseTransform","smoothOrigin","autoRound","checkPrefix","getStyleSaver","positionAndScale","Util","deferTimer","wait","callbackArgs","later","in_min","in_max","out_min","out_max","Header","_defineProperty","desktop","initHeader","header","hero","homepageHero","menuButton","mainNav","booknowButton","booknowDropdown","booknowDropdownContent","heroImg","heroVid","bindDropdownToggle","bindDesktopDropdownToggle","scrollBehavior","dropdown","item","ev","searchActive","weatherActive","hideDropdown","showDropdown","hideDesktopDropdown","stopPropagation","showDesktopDropdown","latestKnownScrollY","scrollCountStart","scrollDist","ticking","update","prevScroll","scrollY","pageYOffset","MainNav","toggleClass","initMainMenu","toggleItem","thisLink","thisDropdown","bindSubnavToggle","subnav","siblings","theListitem","theList","theSiblings","findSiblings","activeListItem","activeMenuItem","thisMenu","nav","findActive","hideSubmenu","mobileCheck","showSubmenu","currentActive","Search","initSearch","searchButton","searchDropdown","searchDropdownClose","closeBtn","menuActive","click","Breadcrumbs","initBreadcrumbs","breadcrumbs","breadcrumbLinks","configureLinks","links","shrunkLinks","step","__assign","assign","lGEvents","lightGalleryCoreSettings","mode","easing","speed","licenseKey","startClass","backdropDuration","startAnimationDuration","zoomFromOrigin","hideBarsDelay","showBarsAfter","slideDelay","supportLegacyBrowser","allowMediaOverlap","videoMaxSize","loadYouTubePoster","defaultCaptionHeight","ariaLabelledby","ariaDescribedby","resetScrollPosition","hideScrollbar","closable","swipeToClose","closeOnTap","showCloseIcon","showMaximizeIcon","escKey","keyPress","trapFocus","controls","slideEndAnimation","hideControlOnEnd","mousewheel","getCaptionFromTitleOrAlt","appendSubHtmlTo","subHtmlSelectorRelative","numberOfSlideItemsInDom","selectWithin","nextHtml","prevHtml","iframeWidth","iframeHeight","iframeMaxWidth","iframeMaxHeight","download","counter","appendCounterTo","swipeThreshold","enableSwipe","enableDrag","dynamic","dynamicEl","extraProps","exThumbImage","mobileSettings","strings","closeGallery","toggleMaximize","previousSlide","playVideo","lgQuery","cssVenderPrefixes","_getSelector","firstElement","_getFirstEl","generateUUID","_each","_setCssVendorPrefix","cssProperty","group1","isEventMatched","eventNamespace","every","attr","find","$LG","eq","removeAttr","attributes","attrs","classNames","attribute","listener","eventListeners","off","customEvent","CustomEvent","dispatchEvent","load","fetch","res","text","append","insertAdjacentHTML","prepend","empty","scrollTop","scrollLeft","pageXOffset","rect","bodyMarginLeft","marginLeft","currentStyle","paddingLeft","paddingRight","paddingTop","paddingBottom","bubbles","cancelable","createEvent","initCustomEvent","Element","webkitMatchesSelector","defaultDynamicOptions","convertToData","spacing","defaultLgSize","lgSize","isResponsiveSizes","wWidth","size_1","cWidth","cHeight","imageSize","LGel","containerRect","wHeight","elWidth","elHeight","elStyle","borderLeft","borderTop","altAttr","imgMarkup","sourceTag","JSON","parse","lgId","LightGallery","lgOpened","lGalleryOn","lgBusy","currentItemsInDom","prevScrollTop","bodyPaddingRight","isDummyImageRemoved","dragOrSwipeEnabled","mediaContainerPosition","generateSettings","buildModules","galleryItems","getItems","normalizeSettings","validateLicense","addSlideVideoInfo","buildStructure","triggerPosterClick","arrow","openGalleryOnItemClick","_loop_1","this_1","items","$element","uuid","currentItemIndex","openGallery","getSlideItem","getSlideItemId","getIdName","manageSingleSlideClassName","outer","$container","subHtmlCont","addClasses","containerClassName","closeIcon","maximizeIcon","template","$lgComponents","$backdrop","$inner","$content","$toolbar","outerClassNames","refreshOnResize","hideBars","manageCloseGallery","initModules","__slideVideoInfo","getMediaContainerPosition","_a","top_1","currentImageSize","resizeVideoSlide","imgStyle","getDummyImgStyles","lgVideoStyle","getVideoContStyle","updateSlides","currentSrc","updateControls","_index","some","galleryItem","itemIndex","organizeSlideItems","loadContent","updateCurrentCounter","dynamicElements","availableDynamicOptions","jl","__spreadArrays","specified","dynamicAttr","currentItem","thumb","subHtml","shouldHideScrollbar","bodyRect","scrollbarWidth","resetScrollBar","itemsToBeInsertedToDom","getItemsToBeInsertedToDom","addHtml","setMediaContainerPosition","currentSlide_1","captionHeight","thumbContainer","hideBarTimeout","initPictureFill","$img","picturefill","counterHtml","subHtmlUrl","fL","getDummyImageContent","$currentSlide","$currentItem","_dummyImgSrc","dummyImgContent","setImgMarkup","currentGalleryItem","isFirstSlideWithZoomAnimation","onSlideObjectLoad","$slide","isHTML5VideoWithoutPoster","onLoad","onError","mediaObject","complete","onLgObjectLoad","isFirstSlide","triggerSlideItemLoad","_speed","getSlideType","poster","isHTML5VIdeo","html5","wistia","rec","_html5Video","responsive","srcDyItms","srcItms","rsWidth","rsSrc","_src","videoInfo","top_2","videoSize","markup","iframeTitle","dummyImg","_poster","videoContStyle","playVideoString","_isVideo","html5Video","hasPoster","loadContentOnFirstSlideLoad","prevIndex","numberOfItems","possibleNumberOfItems","prevIndexItem","_element","idx","numberOfExistingItems","getPreviousSlideIndex","currentItemId","setDownloadValue","downloadUrl","$download","makeSlideAnimation","currentSlideItem","previousSlideItem","fromTouch","fromThumb","numberOfGalleryItems","previousSlideItem_1","top_3","arrowDisable","touchPrev","touchNext","updateCounterTotal","distanceX","distanceY","allowSwipe","swipeDirection","gutter","triggerClick","distanceAbs","goToNextSlide","goToPrevSlide","isPosterElement","isMoved","isSwiping","$item","touchAction","manageSwipeClass","isDraging","_touchNext","_touchPrev","_loop","$prev","$next","$el","xValue","yValue","lastCall","getTime","isSlideElement","playButton","invalidateItems","preventScroll","focusableEls","firstFocusableEl","lastFocusableEl","shiftKey","mousedown","top_4","_b","destroyModules","removeTimeout","blur","err","refresh","destroyGallery","closeTimeout","zoomSettings","actualSize","showZoomInOutIcons","actualSizeIcons","enableZoomAfter","zoomPluginStrings","viewActualSize","Zoom","buildTemplates","zoomIcons","enableZoom","zoomableTimeout","isImageSlide","setZoomEssentials","enableZoomOnSlideItemLoad","getDragCords","getSwipeCords","getDragAllowedAxises","scaleDiff","$image","allowY","allowX","zoomImage","reposition","resetToMax","originalX","originalY","offsetX","offsetY","positionChanged","dragAllowedAxises","possibleSwipeCords","getPossibleSwipeDragCords","_x","_y","scaleVal","isBeyondPossibleLeft","minX","isBeyondPossibleRight","maxX","isBeyondPossibleTop","minY","isBeyondPossibleBottom","maxY","setZoomStyles","setZoomImageSize","resetImageTranslate","imageReset","actualSizeScale","getCurrentImageActualSizeScale","ZOOM_TRANSITION_DURATION","$imageWrap","$dummyImage","setActualSize","prevScale","getScale","setPageCords","beginZoom","getNaturalWidth","getActualSizeScale","getPageCords","cords","pageCords","manageActualPixelClassNames","resetZoom","tapped","$target","_LGel","setZoomSwipeStyles","zoomDrag","pinchZoom","zoomSwipe","$actualSize","getTouchDistance","startDist","pinchStarted","endDist","_scale","EPSILON","diff","touchendZoom","touchDuration","distanceXnew","distanceYnew","speedX","speedY","getZoomSwipeCords","diffMinY","diffMaxY","diffMinX","difMaxX","imgRect","imageHeight","imageWidth","valueOf","TrailMap","initTrailMap","trailMaps","lightGallery","lgZoom","Accordion","initAccordion","accordions","toggle","bindAccordionToggle","accordion","hideAccordion","showAccordion","Alerts","initAlert","alertButton","alertDropdown","alertDropdownContent","alerts","clearAll","activeAlerts","thisClear","LocalNav","initLocalNav","activeNavItems","mobileToggle","localNav","localNavMobileDropdown","localNavMobileDropdownContent","navItems","resetDesktopActive","setMobileActive","offsetLeft","localNavLink","localNavDropdown","localNavDropdownContent","activeKids","parentNav","token","twoDigitsOptional","twoDigits","word","literal","shorten","arr","sLen","newArr","monthUpdate","arrName","i18n","lowerCaseArr","origObj","args_1","dayNames","monthNames","monthNamesShort","globalI18n","dayNamesShort","amPm","DoFn","dayOfMonth","regexEscape","pad","String","formatFlags","dateObj","getDate","DD","Do","getDay","dd","ddd","dddd","getMonth","MM","MMM","MMMM","YY","getFullYear","YYYY","getHours","hh","HH","getMinutes","mm","getSeconds","ss","getMilliseconds","SS","SSS","ZZ","getTimezoneOffset","monthParse","emptyDigits","emptyWord","timezoneOffset","parts","minutes","parseFlags","cent","globalMasks","default","shortDate","mediumDate","longDate","fullDate","isoDate","isoDateTime","shortTime","mediumTime","longTime","mask","literals","$0","$1","combinedI18nSettings","dateStr","dateInfo","year","month","day","hour","minute","second","millisecond","isPm","parseInfo","newFormat","specifiedFields","requiredFields","info","field","requiredField","dateTZ","validateFields","UTC","idCounter","HotelDatepicker","input","_boundedEventHandlers","getNewId","opts","infoFormat","ariaDayFormat","separator","startOfWeek","startDate","endDate","minNights","maxNights","selectForward","disabledDates","noCheckInDates","noCheckOutDates","disabledDaysOfWeek","noCheckInDaysOfWeek","noCheckOutDaysOfWeek","enableCheckout","preventContainerClose","animationSpeed","hoveringTooltip","autoClose","showTopbar","topbarPosition","moveBothMonths","inline","clearButton","submitButton","Boolean","submitButtonName","selected","night","nights","button","getValue","setValue","onDayClick","onOpenDatepicker","onSelectRange","extraDayText","addBoundedListener","capture","boundedHandler","removeAllBoundedListeners","eventHandlers","static","setFechaI18n","getWeekDayNames","week","lang","getMonthDom","getMonthTableId","getMonthName","getDatepickerId","generateId","getCloseButtonId","getClearButtonId","getSubmitButtonId","getTooltipId","getNextMonth","_m","setMonth","getPrevMonth","getDateString","date","parseDate","minDays","maxDays","isTouchDevice","isOpen","changed","justEsc","isOnFocus","createDom","defaultTime","compareMonth","parseDisabledDates","getDisabledDays","showMonth","setDayIndexes","topBarDefaultText","openDatepicker","disabled","addListeners","isFirstDisabledDate","lastDisabledDate","setDayAriaAttributes","nextButtons","datepicker","getElementsByClassName","goToNextMonth","prevButtons","goToPreviousMonth","closeDatepicker","clearDatepicker","onResizeDatepicker","datepickerHover","datepickerMouseOut","checkAndSetDefaultValue","doKeyDown","checkOnFocus","domString","createDatepickerDomString","wrapperClass","wrapperStyle","topBarHtml","buttonsHtml","setHours","monthDom","monthName","monthBody","textContent","emptyElement","createMonthDomString","updateSelectableRange","_date","days","valid","setDate","dayOfWeek","currentMonth","_day","isValidDate","compareDay","addDays","classes","getDayClasses","dayAttributes","daytype","class","role","tabindex","extraText","printAttributes","slideDown","showSelectedDays","disableNextPrevButtons","documentClick","slideUp","initEvent","autoclose","dayClicked","dayHovering","isToday","isStartDate","isDisabled","isNoCheckIn","isNoCheckOut","isDayOfWeekDisabled","isFirstEnabledDate","isDayBeforeDisabledDate","dateString","limit","getClosestDisabledDates","substractDays","countDays","daysBeforeNextDisabledDate","daysAfterPrevDisabledDate","checkAndSetDayClasses","onresize","dates","_format","setDateRange","clearSelection","date1","date2","tmp","setTime","checkSelection","showSelectedInfo","dateRangeValue","selectedInfo","elStart","elEnd","elSelected","count","countText","firstElementChild","isSelectStart","startDayEl","clearHovering","getClosestDisabledDays","numberOfDays","bar","errorValue","topBarErrorText","daysFrom1970","day1","day2","month1","month2","toLocalTimestamp","_obj","forceBoth","thisMonth","isInteger","isMonth2","nextMonth","isSingleMonth","isMonthOutOfRange","prevMonth","isVisible","topBarText","errorText","isSelecting","hoverTime","tooltip","dayBounding","datepickerBounding","_left","_top","tooltipContainer","_tmp","disabledDatesTime","bestPrevDate","bestNextDate","maxDateValue","bestPrevDiff","bestNextDiff","currDiff","allDays","disabledDays","disabledDaysIndexes","classRegex","getClientRects","recalc","DocumentTouch","ariaDisabled","ariaLabel","includes","replacei18n","setActiveDay","setFocusToInput","moveMonthFromKeyboard","handleReturn","$direction","activeEl","currentIndex","currentWeekdayIndex","nextIndex","nextDay","setDayFocus","nextWeekdayIndex","prevDay","prevWeekdayIndex","setInitialActiveDay","today","checkin","visibleDay","removeDaysTabIndex","dayIndex","getDatePicker","setRange","d1","d2","getNights","tinyEmitter","getNumber","ctx","emit","evtArr","evts","liveEvents","TinyEmitter","Point","Rect","Classes","BASE","SHUFFLE_ITEM","VISIBLE","HIDDEN","id$1","ShuffleItem","isRTL","isHidden","applyCss","Css","INITIAL","DIRECTION","rtl","ltr","Scale","point","removeClasses","dispose","willChange","before","after","transitionDelay","testComputedSize","getNumberStyle","borderTopWidth","borderBottomWidth","borderLeftWidth","borderRightWidth","by","compare","randomize","sorter","original","array","valA","valB","cancelTransitionEnd","arrayMax","getColumnSpan","itemWidth","columnWidth","columns","columnSpan","ceil","getAvailablePositions","positions","available","getShortColumn","buffer","minPosition","getCenteredPositions","itemRects","rowMap","itemRect","rects","rows","centeredRows","lastItem","finalRects","canMove","newRects","newRect","noOverlap","intersects","intersectingRect","rowIndex","findIndex","flat","arrayUnique","Set","Shuffle","super","lastSort","group","ALL_ITEMS","lastFilter","isEnabled","isDestroyed","isInitialized","_transitions","isTransitioning","_queue","_getElementOption","_init","_getItems","sortedItems","sizer","_initItems","readyState","layout","containerCss","getSize","_validateStyles","_setColumns","initialSort","_rafId","_resizeObserver","ResizeObserver","_handleResizeCallback","observe","setItemTransitions","jquery","overflow","_filter","category","_getFilteredSets","_toggleFilterClasses","visible","hidden","_doesPassFilter","FILTER_ATTRIBUTE_KEY","delimiter","testCategory","filterMode","FilterMode","ANY","_disposeItems","_updateItemCount","visibleItems","_getFilteredItems","positionProps","useTransforms","cssProps","transitionDuration","transitionTimingFunction","transitionProperty","itemSelector","_mergeNewItems","_getConcealedItems","_getColumnSize","gutterSize","_getGutterSize","gutterWidth","calculatedColumns","columnThreshold","cols","colWidth","_setContainerSize","_getContainerSize","_getStaggerAmount","staggerAmount","staggerAmountMax","_resetCols","_layout","itemPositions","_getNextPositions","equals","getStylesForTransition","isCentered","itemsData","itemSize","_getItemPosition","getTransformedPositions","gridSize","span","setY","shortColumnIndex","setHeight","getItemPosition","_shrink","entries","entry","contentRect","styleObject","sign","roundTransforms","_whenTransitionDone","itemCallback","done","currentTarget","onTransitionEnd","_getTransitionFunction","_processQueue","_cancelMovement","hasSpeed","hasQueue","_startTransitions","_styleImmediately","EventType","LAYOUT","fns","pending","finished","results","maybeDone","arrayParallel","_movementFinished","objects","_skipTransitions","sortOptions","recalculateSizes","newItems","allSortedItemsSet","isNewItem","applyHiddenState","disable","enable","isUpdateLayout","oldItems","getItemByElement","REMOVED","resetItems","unobserve","includeMargins","ALL","__sorter","__getColumnSpan","__getAvailablePositions","__getShortColumn","__getCenteredPositions","Filters","initFilters","filterInit","filterBtn","activateFilters","resultGroups","_step","_iterator","_createForOfIteratorHelper","resultsId","filters","_step2","largestHeight","_iterator2","_step3","_iterator3","setEqualRowHeight","resultsCounter","updateCount","filtersCount","resultsCount","totalCount","filtersCounter","resultsText","loadMore","reset","counterTotal","counterVisible","shuffleInstance","triggerChange","changeEvent","Event","getDatesInRange","resetFilters","selects","checkboxes","radios","datepickers","resultsList","_step12","_iterator12","selectNative","_step13","_iterator13","checkbox","checked","_step14","_iterator14","radio","_step15","_iterator15","selectedFilters","selectedDateRange","submittedOnce","filterDateRange","initFilterControls","filterGroup","filtersLightbox","filterLightboxTrigger","resets","onclick","submit","_step21","_iterator21","_step22","_iterator22","_step23","_iterator23","_step24","_iterator24","_step25","_iterator25","_step26","select","_iterator26","_step4","_iterator4","_loop2","native","_step5","_iterator5","onchange","custom","_step6","_iterator6","_loop3","customOption","initSelects","_step7","_iterator7","initDatepickers","_step27","_iterator27","shuffleFilters","_step16","_iterator16","_step17","_iterator17","_step18","_iterator18","filterStartDate","filterEndDate","_step19","_iterator19","filterTags","resultTags","resultStartDate","resultEndDate","datesInRange","tagsAllMatch","matchCount","_step8","_iterator8","_step9","filterTag","_iterator9","resultDateRange","_step10","_iterator10","resultDate","toISOString","_step11","_iterator11","filterDate","inDateRange","groups","filteredResults","_step20","_iterator20","submitFilters","filtersLightboxTrigger","previousElementSibling","filtersLightboxContent","glightbox","LoadMore","initLoadMore","loadMoreBtn","itemsLoaded","page","perPage","loadMoreCount","Tabs","initTabs","ctrlSets","ctrls","ctrl","tabName","tab","tabSiblings","_toConsumableArray","ctrlSiblings","_getPrototypeOf","setPrototypeOf","getPrototypeOf","_setPrototypeOf","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","_isNativeReflectConstruct","Super","NewTarget","_possibleConstructorReturn","receiver","object","_superPropBase","getOwnPropertyDescriptor","perView","focusAt","gap","autoplay","hoverpause","bound","dragThreshold","perSwipe","touchRatio","touchAngle","animationDuration","rewind","rewindDuration","animationTimingFunc","waitForTransition","throttle","peek","cloningRatio","breakpoints","swipeable","slider","carousel","clone","msg","toInt","isUndefined","mergeOptions","EventsBus","hop","Glide$1","Glide","_c","_t","_e","extensions","glide","components","_name","mount","transformers","pattern","Run","make","Transition","Move","interval","_o","_d","status","previous","leading","throttled","at","remaining","trailing","MARGIN_TYPE","matched","exist","HTMLElement","nodeList","TRACK_SELECTOR","EventsBinder","listeners","closure","VALID_DIRECTIONS","FLIPED_MOVEMENTS","Rtl","Components","modify","Direction","is","Gap","multiplier","Sizes","slideWidth","Gaps","Grow","Clones","grow","Peeking","Peek","Focusing","supportsPassive","supportsPassive$1","START_EVENTS","MOVE_EVENTS","END_EVENTS","MOUSE_EVENTS","CONTROLS_SELECTOR","PREVIOUS_CONTROLS_SELECTOR","NEXT_CONTROLS_SELECTOR","sortBreakpoints","points","COMPONENTS","Html","Events","root","track","collectSlides","slides","Translate","TRANSFORMERS","transformer","mutator","translate3d","mozTransform","getStartIndex","isOffset","getTravelDistance","travelDistance","isType","movement","startWidth","compose","_v","setupSlides","setupWrapper","wrapperSize","reductor","marginRight","collect","_Glide$settings","cloneCount","_clone","unshift","_Components$Html","half","_i2","_i3","Resize","Binder","unbind","Build","typeClass","activeClass","sibling","_Glide$settings$class","calculate","isEnd","viewSize","calculateForwardIndex","isBound","normalizeForwardIndex","calculateBackwardIndex","normalizeBackwardIndex","Swipe","swipeSin","swipeStartX","swipeStartY","passive","bindSwipeStart","bindSwipeMove","bindSwipeEnd","subExSx","subEySy","powEX","powEY","swipeHypotenuse","swipeCathetus","toFloat","_Glide$settings2","swipeDistance","swipeDeg","unbindSwipeMove","unbindSwipeEnd","_Glide$settings3","unbindSwipeStart","Images","dragstart","Anchors","detached","prevented","detach","attach","Controls","_n","_arrowControls","addBindings","setActive","removeActive","setArrowState","resetArrowState","disableArrow","lists","removeBindings","Keyboard","press","code","Autoplay","stop","Breakpoints","_Core","_inherits","_super","FeatureMedia","initFeatureMedia","featureMedia","activeSlideIndicator","totalSlideIndicator","slideCount","canShift","showMultiple","thisSlider","ParagraphBannerSlider","initParagraphBannerSlider","paragraphBannerSlider","bullet","Amenities","initAmenities","amenities","bindAmenitiesToggle","Booking","initBooking","bookingbar","lpb","thisBar","formGroups","mobileToggleDropdown","mobileToggleDropdownContent","bindIncrements","bindSearch","bindMobileToggle","bookingToggle","bookingToggleDropdown","inputArrival","inputDeparture","datePickerOptions","inputArrivalDatePicker","inputDepartureDatePicker","labelArrival","labelDeparture","arrivalDate","departureDate","arrivalDateVal","arrivalDateTxt","toLocaleDateString","departureDateVal","departureDateTxt","tomorrow","firstDay","lastDay","testDate","twoDays","formGroup","formInput","queryString","Weddings","initWeddings","noResultsText","isWeddings","_selectedFilters","thisSelect","thisCount","ssrDocument","importNode","host","hostname","pathname","search","doc","ssrWindow","history","replaceState","pushState","go","back","screen","win","noExtend","nextSource","keysArray","nextKey","__swiper__","varName","varValue","animateCSSModeScroll","swiper","targetPosition","startPosition","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","animate","easeProgress","currentPosition","scrollTo","tag","elementStyle","previousSibling","support","deviceCached","browser","getSupport","smoothScroll","calcSupport","eventsListeners","destroyed","method","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","processLazyPreloader","imageEl","slideEl","isElement","slideClass","lazyEl","lazyPreloaderClass","unlazy","lazyPreloadPrevNext","slidesPerView","slidesPerViewDynamic","activeIndex","activeColumn","preloadColumns","column","slideIndexLastInView","realIndex","updateSize","isHorizontal","isVertical","getDirectionLabel","getDirectionPropertyValue","slidesEl","swiperSize","rtlTranslate","wrongRTL","isVirtual","virtual","previousSlidesLength","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginBottom","marginTop","centeredSlides","cssMode","gridEnabled","slideSize","initSlides","shouldResetSlideSize","updateSlide","slideStyles","currentTransform","currentWebKitTransform","roundLengths","boxSizing","swiperSlideSize","slidesPerGroup","slidesPerGroupSkip","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","slidesBefore","slidesAfter","groupSize","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","getSlideIndexByData","visibleSlides","minusOffset","offsetTop","swiperSlideOffset","cssOverflowAdjustment","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","originalProgress","updateProgress","translatesDiff","maxTranslate","isBeginning","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","autoHeight","updateSlidesClasses","getFilteredSlide","slideActiveClass","slideNextClass","slidePrevClass","nextEls","elementNextAll","prevEls","elementPrevAll","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","normalizeSlideIndex","getActiveIndexByTranslate","skip","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","transitionEmit","runCallbacks","slideTo","internal","initial","animating","preventInteractionOnTransition","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","transitionStart","isH","_immediateVirtual","_cssModeVirtualInitialSet","initialSlide","behavior","onSlideToWrapperTransitionEnd","slideToLoop","slideNext","perGroup","slidesPerGroupAuto","loopPreventsSliding","loopFix","_clientLeft","clientLeft","slidePrev","normalizedSnapGrid","prevSnap","prevSnapIndex","slideReset","slideToClosest","currentSnap","slideToIndex","slideSelector","loopedSlides","getSlideIndex","loopCreate","slideRealIndex","activeSlideIndex","byController","byMousewheel","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","swiperLoopMoveDOM","recalcSlides","currentSlideTranslate","controller","control","loopParams","loopDestroy","newSlidesOrder","swiperSlideIndex","onTouchStart","touchEventsData","evCache","simulateTouch","pointerType","originalEvent","targetEl","touchEventsTarget","which","isTouched","swipingClassHasValue","noSwipingClass","eventPath","composedPath","path","shadowRoot","noSwipingSelector","isTargetShadow","noSwiping","__closestFrom","assignedSlot","getRootNode","closestElement","allowClick","swipeHandler","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchMove","pointerIndex","cachedEv","pointerId","targetTouch","preventedByNestedSwiper","prevX","prevY","touchReleaseOnEdges","diffX","diffY","touchMoveStopPropagation","touchesDiff","previousX","previousY","oneWayMovement","prevTouchesDirection","touchesDirection","isLoop","startTranslate","getTranslate","allowMomentumBounce","grabCursor","setGrabCursor","loopFixed","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchEnd","isSafari","isWebView","touchEndTime","timeDiff","pathTree","lastClickTime","currentPos","stopIndex","rewindFirstIndex","rewindLastIndex","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","isVirtualLoop","running","resizeTimeout","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","newProgress","previousTranslate","dummyEventAttached","dummyEventListener","device","domMethod","swiperMethod","updateOnWindowResize","ios","android","isGridEnabled","breakpoint","getBreakpoint","breakpointsBase","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","wasModuleEnabled","isModuleEnabled","directionChanged","needsReLoop","changeDirection","containerEl","currentHeight","minRatio","resizeObserver","createElements","virtualTranslate","uniqueNavElements","passiveListeners","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","MsTransform","m41","m42","translateTo","translateBounds","newTranslate","onTranslateToWrapperTransitionEnd","moving","isLocked","__preventObserver__","cursor","unsetGrabCursor","attachEvents","detachEvents","wasLocked","lastSlideRightEdge","suffixes","prefix","resultClasses","prepareClasses","extendedDefaults","Swiper","swipers","newParams","overrides","platform","ua","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","getDevice","needPerspectiveFix","major","minor","num","calcBrowser","modules","__modules__","mod","extendParams","swiperParams","passedParams","velocity","trunc","clickTimeout","velocities","imagesToLoad","imagesLoaded","setProgress","cls","getSlideClasses","updates","view","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","changeLanguageDirection","mounted","shadowEl","getWrapperSelector","deleteInstance","cleanStyles","deleteProps","newDefaults","installModule","prototypeGroup","protoMethod","use","observer","animationFrame","resizeHandler","orientationChangeHandler","newWidth","contentBoxSize","inlineSize","blockSize","observers","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","parents","disconnect","Mousewheel","releaseOnEdges","invert","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","noMousewheelClass","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","handle","targetElContainsTarget","rtlFactor","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaMode","spinX","spinY","pixelX","pixelY","ignoreWheelEvents","sticky","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","releaseScroll","returnValue","checkProps","Navigation","hideOnClick","disabledClass","hiddenClass","lockClass","navigationDisabledClass","makeElementsArray","getEl","toggleEl","subEl","onPrevClick","onNextClick","initButton","destroyButton","_s","pagination","clickable","Scrollbar","dragStartPos","dragSize","trackSize","divider","dragTimeout","scrollbar","newSize","newPos","getPointerPosition","setDragPosition","positionRatio","box","clientTop","scrollX","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","passiveListener","eventMethod","swiperEl","horizontalClass","verticalClass","dragClass","scrollbarDisabledClass","lim","p2b","n2b","b2n","n2p","map$1","hex","h1","h2","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb","rgb2hsl","hueValue","calln","hsl2rgb","hue","names$1","OiceXe","antiquewEte","aquamarRe","azuY","beige","bisque","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","RGB_RE","modHSL","proto","fromObject","functionParse","rgbParse","hwb2rgb","hsv2rgb","hueParse","Color","ret","unpacked","tkeys","ok","nk","unpack","nameParse","_rgb","_valid","rgbString","hexString","isShort","hslString","mix","weight","c1","c2","w2","w1","rgb1","rgb2","clearer","greyscale","opaquer","negate","lighten","darken","saturate","desaturate","isNullOrUndef","isNumberFinite","finiteOrDefault","defaultValue","valueOrDefault","toDimension","dimension","endsWith","loopable","_elementsEqual","a0","ilen","v0","datasetIndex","klen","isValidKey","_merger","tval","sval","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","resolver","part","_splitKey","_getKeyResolver","_capitalize","defined","setsEqual","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","almostEquals","epsilon","niceNum","roundedRange","niceRange","fraction","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","distanceBetweenPoints","pt1","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","table","cmp","mid","hi","lo","_lookupByKey","ti","_rlookupByKey","arrayEvents","unlistenArrayEvents","stub","_chartjs","_arrayUnique","requestAnimFrame","argsToUse","_toLeftRightCenter","align","_alignStartEnd","_getStartAndCountOfVisiblePoints","meta","animationsDisabled","pointCount","_sorted","iScale","_parsed","minDefined","maxDefined","getUserBounds","getPixelForValue","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","atEdge","elasticIn","elasticOut","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","numbers","intlCache","Map","formatNumber","locale","cacheKey","stringify","formatter","Intl","NumberFormat","getNumberFormat","formatters","numeric","tickValue","ticks","chart","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","Ticks","descriptors","getScope$1","Defaults","_descriptors","_appliers","backgroundColor","borderColor","datasets","devicePixelRatio","getDevicePixelRatio","font","family","hover","hoverBackgroundColor","hoverBorderColor","hoverColor","indexAxis","interaction","intersect","includeInvisible","maintainAspectRatio","onHover","parsing","scales","showLine","drawActiveElementsOnTop","describe","override","route","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","local","appliers","_scriptable","startsWith","_indexable","_fallback","autoPadding","padding","beginAtZero","grace","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","tickColor","border","dash","dashOffset","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","_measureText","gc","longest","textWidth","measureText","_longestText","arrayOfThings","garbageCollect","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","drawPoint","drawPointLegend","cornerRadius","xOffsetW","yOffsetW","pointStyle","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","borderWidth","stroke","_isPointInArea","area","margin","clipArea","clip","unclipArea","_steppedLineTo","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","decorateText","line","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","fillStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","lines","strokeWidth","strokeColor","translation","textAlign","textBaseline","setRenderOpts","backdrop","strokeText","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","_readValueToProps","objProps","read","toTRBL","toTRBLCorners","toPadding","toFont","fallback","toFontString","inputs","cacheable","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","deleteProperty","_keys","_cached","proxy","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_subProxy","_stack","setContext","isScriptable","delete","_resolveScriptable","isIndexable","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","parsed","getPoint","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","capControlPoint","_updateBezierControlPoints","controlPoints","spanGaps","cubicInterpolationMode","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","iPixel","vPixel","monotoneCompute","splineCurveMonotone","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","ownerDocument","defaultView","getPositionedStyle","suffix","pos","useOffsetPos","getRelativePosition","borderBox","paddings","borders","getCanvasPosition","round1","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","readUsedSize","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRightToLeftAdapter","rectX","setWidth","xPlus","leftForLtr","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","getPropertyPriority","prevTextDirection","restoreTextDirection","propertyFn","between","normalizeSegment","_boundSegment","segment","startBound","endBound","getSegment","prevValue","inside","subStart","_boundSegments","segments","sub","readStyle","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","styleChanged","prevStyle","replacer","Animator","_request","_charts","_running","_lastDate","_notify","anims","callbacks","numSteps","currentStep","_refresh","_update","draw","_active","_total","_getAnims","charts","listen","cb","acc","cur","_duration","animator","boolean","factor","c0","number","cfg","_fn","_easing","_target","_prop","_to","_promises","promises","rej","resolved","Animations","_chart","_properties","configure","animationOptions","animatedProps","getOwnPropertyNames","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","_cachedMeta","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_bottom","_visualValues","getFirstScaleId","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","initialize","linkScales","_stacked","addElements","isPluginEnabled","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","_destroy","_dataCheck","adata","convertObjectDataToArray","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","createStack","NEGATIVE_INFINITY","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","_clip","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","createDataContext","createDatasetContext","_resolveElementOptions","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","updateElements","removed","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","_cache","$bar","visibleMetas","getAllScaleValues","curr","_length","updateMinAndPrev","getPixelForTick","parseValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","setBorderSkipped","edge","borderSkipped","borderProps","enableBorderRadius","parseEdge","orig","startEnd","setInflateAmount","inflateAmount","DoughnutController","animateRotate","animateScale","cutout","circumference","aspectRatio","legend","generateLabels","fontColor","getDataVisibility","legendItem","toggleDataVisibility","innerRadius","outerRadius","_getRotation","_getCircumference","_getRotationExtents","isDatasetVisible","arcs","getMaxBorderWidth","getMaxOffset","maxSize","toPercentage","chartWeight","_getRingWeight","startAngle","endAngle","endX","endY","calcMax","calcMin","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","calculateCircumference","animationOpts","centerY","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","PolarAreaController","angleLines","circular","pointLabels","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","controllers","BarController","categoryPercentage","barPercentage","grouped","_index_","_value_","iAxisKey","vAxisKey","bars","getBasePixel","ruler","_getRuler","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","_getStacks","skipNull","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","baseValue","minBarLength","actualBase","floating","barSign","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","percent","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","BubbleController","LineController","_dataset","_datasetIndex","_decimated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","registry","getElement","DateAdapterBase","members","formats","startOf","endOf","adapters","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","isPointInArea","getNearestItems","distanceMetric","useX","useY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestCartesianItems","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","outerWidth","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","fullSize","setBoxDims","placeBoxes","userPadding","placed","stackWeight","layouts","addBox","_layers","removeBox","layoutItem","minPadding","availableWidth","availableHeight","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","vBoxMaxWidth","hBoxMaxHeight","buildStacks","setLayoutDims","updatePos","handleMaxPadding","BasePlatform","acquireContext","releaseContext","getMaximumSize","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","createAttachObserver","addedNodes","removedNodes","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","listenDevicePixelRatioChanges","releaseObserver","unlistenDevicePixelRatioChanges","createProxyAndListen","fromNativeEvent","DomPlatform","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","bbWidth","bbHeight","margins","containerSize","containerStyle","containerBorder","containerPadding","getContainerSize","isConnected","tooltipPosition","hasValue","final","newTicks","majorStart","majorEnd","reverseAlign","offsetFromEdge","getTicksLimit","ticksLength","maxTicksLimit","sample","numItems","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","_margins","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_maxLength","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","tickOpts","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","determinedMaxTicks","_tickSize","maxScale","maxChart","determineMaxTicks","ticksLimit","majorIndices","getMajorIndices","numMajorIndices","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","decimal","_int16Range","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","positionAxisID","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","drawGrid","drawLine","setLineDash","lineDashOffset","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","titleX","titleY","titleArgs","tz","gz","bz","axisID","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","parentScope","isIChartComponent","itemDefaults","defaultRoutes","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","Registry","_typedRegistries","addControllers","addPlugins","addScales","getController","getPlugin","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","PluginService","notify","hook","_createDescriptors","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","idMatchesAxis","determineAxis","scaleOptions","getAxisFromDataset","initOptions","chartDefaults","configScales","chartIndexAxis","scaleConf","boundDs","retrieveAxisFromDatasets","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","initConfig","_scopeCache","_resolverCache","clearCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onAnimationProgress","onProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_options","_aspectRatio","_metasets","_lastEvent","_responsiveListeners","_sortedMetasets","_hiddenIndices","attached","_doResize","debounce","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newRatio","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","getDatasetArea","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","rThetaToXY","theta","pathArc","pixelMargin","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStart","outerEnd","innerStart","innerEnd","angleDelta","toRadiusCorners","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","parseBorderRadius$1","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","ArcElement","fullCircles","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","inner","lineJoin","angleMargin","clipArc","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","LineElement","_path","_points","_segments","_pointsUpdated","segmentOptions","findStartAndEnd","chartContext","baseStyle","addStyle","st","p0","p0DataIndex","p1DataIndex","doSplitByStyles","splitByStyles","solidSegments","_computeSegments","_interpolate","_getInterpolationMethod","interpolated","segmentMethod","strokePathWithCache","strokePathDirect","inRange$1","hitRadius","PointElement","hoverRadius","mouseX","mouseY","inXRange","inYRange","getBarBounds","skipOrLimit","skipX","skipY","addNormalRectPath","inflateRect","refRect","BarElement","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","boundingRects","addRectPath","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","containsColorsDefinitions","plugin_colors","forceOverride","_args","chartOptions","colorizer","colorizeDoughnutDataset","colorizePolarAreaDataset","colorizeDefaultDataset","getColorizer","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","decimated","getStartAndCountOfVisiblePointsSimplified","samples","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAy","pointAx","lttbDecimation","minIndex","maxIndex","startIndex","xMin","intermediateIndex1","intermediateIndex2","minMaxDecimation","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","linePoints","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","_drawfill","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_getTargetPixel","computeLinearBoundary","computeBoundary","lineOpts","above","clipVertical","doFill","clipY","lineLoop","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","legendItemText","calculateItemWidth","fontLineHeight","calculateLegendItemHeight","calculateItemHeight","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","onLeave","isListened","hoveredItem","sameItem","plugin_legend","afterEvent","ci","useBorderRadius","Title","_padding","textSize","_drawArgs","fontOpts","plugin_title","titleBlock","createTitle","WeakMap","plugin_subtitle","positioners","average","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","formattedValue","getTooltipSize","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","defaultCallbacks","beforeTitle","tooltipItems","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","Colors","Decimation","Filler","SubTitle","_getLabelForValue","relativeLabelSize","minSpacing","LinearScaleBase","_startValue","_endValue","_valueRange","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","maxTicks","stepSize","computeTickLimit","generationOptions","dataRange","precision","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","generateTicks$1","LinearScale","log10Floor","changeExponent","isMajor","tickVal","rangeExp","rangeStep","LogarithmicScale","_zero","minExp","exp","startExp","lastTick","generateTicks","getTickBackdropHeight","determineLimits","updateLimits","limits","hLimits","vLimits","createPointLabelItem","itemOpts","outerDistance","drawingArea","extra","additionalAngle","pointLabelPosition","getPointPosition","yForAngle","getTextAlignForAngle","isNotOverlapped","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","RadialLinearScale","centerPointLabels","_pointLabels","_pointLabelItems","valueCount","pointLabelOpts","getPointLabelContext","plFont","setCenterPoint","buildPointLabelItems","fitWithPointLabels","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","INTERVALS","common","quarter","UNITS","adapter","_adapter","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","MAX_SAFE_INTEGER","addTick","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","displayFormats","_unit","_majorUnit","_offsets","_normalized","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","weekday","hasWeekday","getDataTimestamps","tooltipFormat","datetime","fmt","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","prevTarget","nextTarget","CategoryScale","_addedLabels","added","addedLabels","addIfString","findOrAddLabel","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables","deviceXDPI","logicalXDPI","orient","x0","y0","ln","R_INSIDE","R_LEFT","R_RIGHT","R_BOTTOM","R_TOP","region","compute$1","anchor","r0","r1","clipped","vx","vy","aligned","rx","ry","sx","sy","rasterize","getScaleOrigin","drawTextLine","shadow","shadowBlur","stroked","filled","Label","me","_model","_rects","_el","_modelize","positioner","textShadowBlur","textShadowColor","model","th","tw","geometry","bgColor","drawRoundedRect","drawFrame","textGeometry","shadowColor","drawText","MIN_INTEGER","MIN_SAFE_INTEGER","MAX_INTEGER","rotated","cx","cy","projected","dp","toAxis","HitBox","_rotation","_rect","coordinates","vs","pr0","pr1","axes","prepare","$layout","_box","_hidable","_visible","_set","sa","sb","state","dirty","collider","s0","s1","collide","h0","compute","DEFAULT_KEY","callback$1","$groups","beforeInit","_actives","expando","_listened","_datasets","_labels","afterDatasetUpdate","datalabels","configs","afterDatasetsDraw","beforeEvent","enter","leave","_hovered","dispatchMoveEvents","handleMoveEvents","handleClickEvents","MountainConditions","initMountainConditions","isSV","isSB","isLargeScreen","tables","tbody","trHeight","trCount","childElementCount","parkingGraph","parkingGraphData","decodeURIComponent","customCanvasBackgroundColor","globalCompositeOperation","barGraphs","graph","graphData","graphColor","canvasColor","pieGraphs","graphColors","ChartDataLabels","tabs","ctrlGroups","tabGroups","CustomCards","initCustomCards","customCards","SeasonToggle","initSeasonToggle","seasonSwitch","thisEvent","urlSearchParams","URLSearchParams","season","sessionData","sessionStorage","getItem","winterSwitch","summerSwitch","indicator","newRelativePathQuery","setItem","winterToggle","summerToggle","infoBtn","infoBubble","infoBubbleCloseBtn","MountainReportDropdown","initMountainReportDropdown","weatherButton","mountainConditionDropdown","dropdownClose","delayedWebcams","delayedWebcam","elementId","webcamId","HDRelay","hdrelayPlayer","VisitInfo","initVisitInfo","visitInfoProgress","markers","progressBar","progressPercent","milestoneLocation","Welcome","initWelcome","welcome","sessionName","dismissBtn","localStorage","AchievementInfo","initAchievementInfo","achievementInfoCarousel","FeCore","initCore","Video"],"sourceRoot":""}