{"version":3,"file":"/scripts/vendor.js","mappings":"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","sources":["webpack://baseline/./node_modules/flatpickr/dist/esm/types/options.js","webpack://baseline/./node_modules/flatpickr/dist/esm/l10n/default.js","webpack://baseline/./node_modules/flatpickr/dist/esm/utils/index.js","webpack://baseline/./node_modules/flatpickr/dist/esm/utils/dom.js","webpack://baseline/./node_modules/flatpickr/dist/esm/utils/formatting.js","webpack://baseline/./node_modules/flatpickr/dist/esm/utils/dates.js","webpack://baseline/./node_modules/flatpickr/dist/esm/index.js","webpack://baseline/./node_modules/flatpickr/dist/esm/utils/polyfills.js","webpack://baseline/./node_modules/lazysizes/lazysizes.js","webpack://baseline/./node_modules/object-fit-images/dist/ofi.common-js.js","webpack://baseline/./node_modules/object-fit-videos/object-fit-videos.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/raf.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/caf.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/extend.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/checkStorageValue.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/setLocalStorage.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/getBody.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/docElement.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/setFakeBody.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/resetFakeBody.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/addCSSRule.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/getCssRulesLength.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/forEach.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/classListSupport.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/hasClass.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/addClass.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/removeClass.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/hasAttr.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/getAttr.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/isNodeList.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/setAttrs.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/removeAttrs.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/arrayFromNodeList.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/hideElement.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/showElement.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/isVisible.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/whichProperty.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/getEndProperty.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/passiveOption.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/addEvents.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/removeEvents.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/events.js","webpack://baseline/./node_modules/tiny-slider/src/tiny-slider.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/calc.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/percentageLayout.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/mediaquerySupport.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/has3DTransforms.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/getSlideId.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/createStyleSheet.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/jsTransform.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/removeCSSRule.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/toDegree.js","webpack://baseline/./node_modules/tiny-slider/src/helpers/getTouchDirection.js"],"sourcesContent":["export const HOOKS = [\n \"onChange\",\n \"onClose\",\n \"onDayCreate\",\n \"onDestroy\",\n \"onKeyDown\",\n \"onMonthChange\",\n \"onOpen\",\n \"onParseConfig\",\n \"onReady\",\n \"onValueUpdate\",\n \"onYearChange\",\n \"onPreCalendarPosition\",\n];\nexport const defaults = {\n _disable: [],\n allowInput: false,\n allowInvalidPreload: false,\n altFormat: \"F j, Y\",\n altInput: false,\n altInputClass: \"form-control input\",\n animate: typeof window === \"object\" &&\n window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n ariaDateFormat: \"F j, Y\",\n autoFillDefaultTime: true,\n clickOpens: true,\n closeOnSelect: true,\n conjunction: \", \",\n dateFormat: \"Y-m-d\",\n defaultHour: 12,\n defaultMinute: 0,\n defaultSeconds: 0,\n disable: [],\n disableMobile: false,\n enableSeconds: false,\n enableTime: false,\n errorHandler: (err) => typeof console !== \"undefined\" && console.warn(err),\n getWeek: (givenDate) => {\n const date = new Date(givenDate.getTime());\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n var week1 = new Date(date.getFullYear(), 0, 4);\n return (1 +\n Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getDay() + 6) % 7)) /\n 7));\n },\n hourIncrement: 1,\n ignoredFocusElements: [],\n inline: false,\n locale: \"default\",\n minuteIncrement: 5,\n mode: \"single\",\n monthSelectorType: \"dropdown\",\n nextArrow: \"\",\n noCalendar: false,\n now: new Date(),\n onChange: [],\n onClose: [],\n onDayCreate: [],\n onDestroy: [],\n onKeyDown: [],\n onMonthChange: [],\n onOpen: [],\n onParseConfig: [],\n onReady: [],\n onValueUpdate: [],\n onYearChange: [],\n onPreCalendarPosition: [],\n plugins: [],\n position: \"auto\",\n positionElement: undefined,\n prevArrow: \"\",\n shorthandCurrentMonth: false,\n showMonths: 1,\n static: false,\n time_24hr: false,\n weekNumbers: false,\n wrap: false,\n};\n","export const english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n },\n daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: (nth) => {\n const s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n monthAriaLabel: \"Month\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false,\n};\nexport default english;\n","export const pad = (number, length = 2) => `000${number}`.slice(length * -1);\nexport const int = (bool) => (bool === true ? 1 : 0);\nexport function debounce(fn, wait) {\n let t;\n return function () {\n clearTimeout(t);\n t = setTimeout(() => fn.apply(this, arguments), wait);\n };\n}\nexport const arrayify = (obj) => obj instanceof Array ? obj : [obj];\n","export function toggleClass(elem, className, bool) {\n if (bool === true)\n return elem.classList.add(className);\n elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n const e = window.document.createElement(tag);\n className = className || \"\";\n content = content || \"\";\n e.className = className;\n if (content !== undefined)\n e.textContent = content;\n return e;\n}\nexport function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n}\nexport function findParent(node, condition) {\n if (condition(node))\n return node;\n else if (node.parentNode)\n return findParent(node.parentNode, condition);\n return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n const wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n numInput.type = \"number\";\n }\n else {\n numInput.type = \"text\";\n numInput.pattern = \"\\\\d*\";\n }\n if (opts !== undefined)\n for (const key in opts)\n numInput.setAttribute(key, opts[key]);\n wrapper.appendChild(numInput);\n wrapper.appendChild(arrowUp);\n wrapper.appendChild(arrowDown);\n return wrapper;\n}\nexport function getEventTarget(event) {\n try {\n if (typeof event.composedPath === \"function\") {\n const path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n catch (error) {\n return event.target;\n }\n}\n","import { int, pad } from \"../utils\";\nconst doNothing = () => undefined;\nexport const monthToStr = (monthNumber, shorthand, locale) => locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber];\nexport const revFormat = {\n D: doNothing,\n F: function (dateObj, monthName, locale) {\n dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n },\n G: (dateObj, hour) => {\n dateObj.setHours(parseFloat(hour));\n },\n H: (dateObj, hour) => {\n dateObj.setHours(parseFloat(hour));\n },\n J: (dateObj, day) => {\n dateObj.setDate(parseFloat(day));\n },\n K: (dateObj, amPM, locale) => {\n dateObj.setHours((dateObj.getHours() % 12) +\n 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n },\n M: function (dateObj, shortMonth, locale) {\n dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n },\n S: (dateObj, seconds) => {\n dateObj.setSeconds(parseFloat(seconds));\n },\n U: (_, unixSeconds) => new Date(parseFloat(unixSeconds) * 1000),\n W: function (dateObj, weekNum, locale) {\n const weekNumber = parseInt(weekNum);\n const date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n return date;\n },\n Y: (dateObj, year) => {\n dateObj.setFullYear(parseFloat(year));\n },\n Z: (_, ISODate) => new Date(ISODate),\n d: (dateObj, day) => {\n dateObj.setDate(parseFloat(day));\n },\n h: (dateObj, hour) => {\n dateObj.setHours(parseFloat(hour));\n },\n i: (dateObj, minutes) => {\n dateObj.setMinutes(parseFloat(minutes));\n },\n j: (dateObj, day) => {\n dateObj.setDate(parseFloat(day));\n },\n l: doNothing,\n m: (dateObj, month) => {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n n: (dateObj, month) => {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n s: (dateObj, seconds) => {\n dateObj.setSeconds(parseFloat(seconds));\n },\n u: (_, unixMillSeconds) => new Date(parseFloat(unixMillSeconds)),\n w: doNothing,\n y: (dateObj, year) => {\n dateObj.setFullYear(2000 + parseFloat(year));\n },\n};\nexport const tokenRegex = {\n D: \"(\\\\w+)\",\n F: \"(\\\\w+)\",\n G: \"(\\\\d\\\\d|\\\\d)\",\n H: \"(\\\\d\\\\d|\\\\d)\",\n J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n K: \"\",\n M: \"(\\\\w+)\",\n S: \"(\\\\d\\\\d|\\\\d)\",\n U: \"(.+)\",\n W: \"(\\\\d\\\\d|\\\\d)\",\n Y: \"(\\\\d{4})\",\n Z: \"(.+)\",\n d: \"(\\\\d\\\\d|\\\\d)\",\n h: \"(\\\\d\\\\d|\\\\d)\",\n i: \"(\\\\d\\\\d|\\\\d)\",\n j: \"(\\\\d\\\\d|\\\\d)\",\n l: \"(\\\\w+)\",\n m: \"(\\\\d\\\\d|\\\\d)\",\n n: \"(\\\\d\\\\d|\\\\d)\",\n s: \"(\\\\d\\\\d|\\\\d)\",\n u: \"(.+)\",\n w: \"(\\\\d\\\\d|\\\\d)\",\n y: \"(\\\\d{2})\",\n};\nexport const formats = {\n Z: (date) => date.toISOString(),\n D: function (date, locale, options) {\n return locale.weekdays.shorthand[formats.w(date, locale, options)];\n },\n F: function (date, locale, options) {\n return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n },\n G: function (date, locale, options) {\n return pad(formats.h(date, locale, options));\n },\n H: (date) => pad(date.getHours()),\n J: function (date, locale) {\n return locale.ordinal !== undefined\n ? date.getDate() + locale.ordinal(date.getDate())\n : date.getDate();\n },\n K: (date, locale) => locale.amPM[int(date.getHours() > 11)],\n M: function (date, locale) {\n return monthToStr(date.getMonth(), true, locale);\n },\n S: (date) => pad(date.getSeconds()),\n U: (date) => date.getTime() / 1000,\n W: function (date, _, options) {\n return options.getWeek(date);\n },\n Y: (date) => pad(date.getFullYear(), 4),\n d: (date) => pad(date.getDate()),\n h: (date) => (date.getHours() % 12 ? date.getHours() % 12 : 12),\n i: (date) => pad(date.getMinutes()),\n j: (date) => date.getDate(),\n l: function (date, locale) {\n return locale.weekdays.longhand[date.getDay()];\n },\n m: (date) => pad(date.getMonth() + 1),\n n: (date) => date.getMonth() + 1,\n s: (date) => date.getSeconds(),\n u: (date) => date.getTime(),\n w: (date) => date.getDay(),\n y: (date) => String(date.getFullYear()).substring(2),\n};\n","import { tokenRegex, revFormat, formats, } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport const createDateFormatter = ({ config = defaults, l10n = english, isMobile = false, }) => (dateObj, frmt, overrideLocale) => {\n const locale = overrideLocale || l10n;\n if (config.formatDate !== undefined && !isMobile) {\n return config.formatDate(dateObj, frmt, locale);\n }\n return frmt\n .split(\"\")\n .map((c, i, arr) => formats[c] && arr[i - 1] !== \"\\\\\"\n ? formats[c](dateObj, locale, config)\n : c !== \"\\\\\"\n ? c\n : \"\")\n .join(\"\");\n};\nexport const createDateParser = ({ config = defaults, l10n = english }) => (date, givenFormat, timeless, customLocale) => {\n if (date !== 0 && !date)\n return undefined;\n const locale = customLocale || l10n;\n let parsedDate;\n const dateOrig = date;\n if (date instanceof Date)\n parsedDate = new Date(date.getTime());\n else if (typeof date !== \"string\" &&\n date.toFixed !== undefined)\n parsedDate = new Date(date);\n else if (typeof date === \"string\") {\n const format = givenFormat || (config || defaults).dateFormat;\n const datestr = String(date).trim();\n if (datestr === \"today\") {\n parsedDate = new Date();\n timeless = true;\n }\n else if (/Z$/.test(datestr) ||\n /GMT$/.test(datestr))\n parsedDate = new Date(date);\n else if (config && config.parseDate)\n parsedDate = config.parseDate(date, format);\n else {\n parsedDate =\n !config || !config.noCalendar\n ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n : new Date(new Date().setHours(0, 0, 0, 0));\n let matched, ops = [];\n for (let i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n const token = format[i];\n const isBackSlash = token === \"\\\\\";\n const escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n if (tokenRegex[token] && !escaped) {\n regexStr += tokenRegex[token];\n const match = new RegExp(regexStr).exec(date);\n if (match && (matched = true)) {\n ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n fn: revFormat[token],\n val: match[++matchIndex],\n });\n }\n }\n else if (!isBackSlash)\n regexStr += \".\";\n ops.forEach(({ fn, val }) => (parsedDate = fn(parsedDate, val, locale) || parsedDate));\n }\n parsedDate = matched ? parsedDate : undefined;\n }\n }\n if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n config.errorHandler(new Error(`Invalid date provided: ${dateOrig}`));\n return undefined;\n }\n if (timeless === true)\n parsedDate.setHours(0, 0, 0, 0);\n return parsedDate;\n};\nexport function compareDates(date1, date2, timeless = true) {\n if (timeless !== false) {\n return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n new Date(date2.getTime()).setHours(0, 0, 0, 0));\n }\n return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n return (3600 * (date1.getHours() - date2.getHours()) +\n 60 * (date1.getMinutes() - date2.getMinutes()) +\n date1.getSeconds() -\n date2.getSeconds());\n}\nexport const isBetween = (ts, ts1, ts2) => {\n return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport const duration = {\n DAY: 86400000,\n};\nexport function getDefaultHours(config) {\n let hours = config.defaultHour;\n let minutes = config.defaultMinute;\n let seconds = config.defaultSeconds;\n if (config.minDate !== undefined) {\n const minHour = config.minDate.getHours();\n const minMinutes = config.minDate.getMinutes();\n const minSeconds = config.minDate.getSeconds();\n if (hours < minHour) {\n hours = minHour;\n }\n if (hours === minHour && minutes < minMinutes) {\n minutes = minMinutes;\n }\n if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n seconds = config.minDate.getSeconds();\n }\n if (config.maxDate !== undefined) {\n const maxHr = config.maxDate.getHours();\n const maxMinutes = config.maxDate.getMinutes();\n hours = Math.min(hours, maxHr);\n if (hours === maxHr)\n minutes = Math.min(maxMinutes, minutes);\n if (hours === maxHr && minutes === maxMinutes)\n seconds = config.maxDate.getSeconds();\n }\n return { hours, minutes, seconds };\n}\n","import { defaults as defaultOptions, HOOKS, } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget, } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, getDefaultHours, } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nconst DEBOUNCED_CHANGE_MS = 300;\nfunction FlatpickrInstance(element, instanceConfig) {\n const self = {\n config: Object.assign(Object.assign({}, defaultOptions), flatpickr.defaultConfig),\n l10n: English,\n };\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n self._handlers = [];\n self.pluginElements = [];\n self.loadedPlugins = [];\n self._bind = bind;\n self._setHoursFromDate = setHoursFromDate;\n self._positionCalendar = positionCalendar;\n self.changeMonth = changeMonth;\n self.changeYear = changeYear;\n self.clear = clear;\n self.close = close;\n self._createElement = createElement;\n self.destroy = destroy;\n self.isEnabled = isEnabled;\n self.jumpToDate = jumpToDate;\n self.open = open;\n self.redraw = redraw;\n self.set = set;\n self.setDate = setDate;\n self.toggle = toggle;\n function setupHelperFunctions() {\n self.utils = {\n getDaysInMonth(month = self.currentMonth, yr = self.currentYear) {\n if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n return 29;\n return self.l10n.daysInMonth[month];\n },\n };\n }\n function init() {\n self.element = self.input = element;\n self.isOpen = false;\n parseConfig();\n setupLocale();\n setupInputs();\n setupDates();\n setupHelperFunctions();\n if (!self.isMobile)\n build();\n bindEvents();\n if (self.selectedDates.length || self.config.noCalendar) {\n if (self.config.enableTime) {\n setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n }\n updateValue(false);\n }\n setCalendarWidth();\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n if (!self.isMobile && isSafari) {\n positionCalendar();\n }\n triggerEvent(\"onReady\");\n }\n function bindToInstance(fn) {\n return fn.bind(self);\n }\n function setCalendarWidth() {\n const config = self.config;\n if (config.weekNumbers === false && config.showMonths === 1) {\n return;\n }\n else if (config.noCalendar !== true) {\n window.requestAnimationFrame(function () {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.style.visibility = \"hidden\";\n self.calendarContainer.style.display = \"block\";\n }\n if (self.daysContainer !== undefined) {\n const daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n self.daysContainer.style.width = daysWidth + \"px\";\n self.calendarContainer.style.width =\n daysWidth +\n (self.weekWrapper !== undefined\n ? self.weekWrapper.offsetWidth\n : 0) +\n \"px\";\n self.calendarContainer.style.removeProperty(\"visibility\");\n self.calendarContainer.style.removeProperty(\"display\");\n }\n });\n }\n }\n function updateTime(e) {\n if (self.selectedDates.length === 0) {\n const defaultDate = self.config.minDate === undefined ||\n compareDates(new Date(), self.config.minDate) >= 0\n ? new Date()\n : new Date(self.config.minDate.getTime());\n const defaults = getDefaultHours(self.config);\n defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n self.selectedDates = [defaultDate];\n self.latestSelectedDateObj = defaultDate;\n }\n if (e !== undefined && e.type !== \"blur\") {\n timeWrapper(e);\n }\n const prevValue = self._input.value;\n setHoursFromInputs();\n updateValue();\n if (self._input.value !== prevValue) {\n self._debouncedChange();\n }\n }\n function ampm2military(hour, amPM) {\n return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n }\n function military2ampm(hour) {\n switch (hour % 24) {\n case 0:\n case 12:\n return 12;\n default:\n return hour % 12;\n }\n }\n function setHoursFromInputs() {\n if (self.hourElement === undefined || self.minuteElement === undefined)\n return;\n let hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n ? (parseInt(self.secondElement.value, 10) || 0) % 60\n : 0;\n if (self.amPM !== undefined) {\n hours = ampm2military(hours, self.amPM.textContent);\n }\n const limitMinHours = self.config.minTime !== undefined ||\n (self.config.minDate &&\n self.minDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n 0);\n const limitMaxHours = self.config.maxTime !== undefined ||\n (self.config.maxDate &&\n self.maxDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n 0);\n if (limitMaxHours) {\n const maxTime = self.config.maxTime !== undefined\n ? self.config.maxTime\n : self.config.maxDate;\n hours = Math.min(hours, maxTime.getHours());\n if (hours === maxTime.getHours())\n minutes = Math.min(minutes, maxTime.getMinutes());\n if (minutes === maxTime.getMinutes())\n seconds = Math.min(seconds, maxTime.getSeconds());\n }\n if (limitMinHours) {\n const minTime = self.config.minTime !== undefined\n ? self.config.minTime\n : self.config.minDate;\n hours = Math.max(hours, minTime.getHours());\n if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n minutes = minTime.getMinutes();\n if (minutes === minTime.getMinutes())\n seconds = Math.max(seconds, minTime.getSeconds());\n }\n setHours(hours, minutes, seconds);\n }\n function setHoursFromDate(dateObj) {\n const date = dateObj || self.latestSelectedDateObj;\n if (date) {\n setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n }\n }\n function setHours(hours, minutes, seconds) {\n if (self.latestSelectedDateObj !== undefined) {\n self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n }\n if (!self.hourElement || !self.minuteElement || self.isMobile)\n return;\n self.hourElement.value = pad(!self.config.time_24hr\n ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n : hours);\n self.minuteElement.value = pad(minutes);\n if (self.amPM !== undefined)\n self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n if (self.secondElement !== undefined)\n self.secondElement.value = pad(seconds);\n }\n function onYearInput(event) {\n const eventTarget = getEventTarget(event);\n const year = parseInt(eventTarget.value) + (event.delta || 0);\n if (year / 1000 > 1 ||\n (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n changeYear(year);\n }\n }\n function bind(element, event, handler, options) {\n if (event instanceof Array)\n return event.forEach((ev) => bind(element, ev, handler, options));\n if (element instanceof Array)\n return element.forEach((el) => bind(el, event, handler, options));\n element.addEventListener(event, handler, options);\n self._handlers.push({\n remove: () => element.removeEventListener(event, handler),\n });\n }\n function triggerChange() {\n triggerEvent(\"onChange\");\n }\n function bindEvents() {\n if (self.config.wrap) {\n [\"open\", \"close\", \"toggle\", \"clear\"].forEach((evt) => {\n Array.prototype.forEach.call(self.element.querySelectorAll(`[data-${evt}]`), (el) => bind(el, \"click\", self[evt]));\n });\n }\n if (self.isMobile) {\n setupMobile();\n return;\n }\n const debouncedResize = debounce(onResize, 50);\n self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n bind(self.daysContainer, \"mouseover\", (e) => {\n if (self.config.mode === \"range\")\n onMouseOver(getEventTarget(e));\n });\n bind(window.document.body, \"keydown\", onKeyDown);\n if (!self.config.inline && !self.config.static)\n bind(window, \"resize\", debouncedResize);\n if (window.ontouchstart !== undefined)\n bind(window.document, \"touchstart\", documentClick);\n else\n bind(window.document, \"mousedown\", documentClick);\n bind(window.document, \"focus\", documentClick, { capture: true });\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n if (self.daysContainer !== undefined) {\n bind(self.monthNav, \"click\", onMonthNavClick);\n bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n bind(self.daysContainer, \"click\", selectDate);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n const selText = (e) => getEventTarget(e).select();\n bind(self.timeContainer, [\"increment\"], updateTime);\n bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n bind(self.timeContainer, \"click\", timeIncrement);\n bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n if (self.secondElement !== undefined)\n bind(self.secondElement, \"focus\", () => self.secondElement && self.secondElement.select());\n if (self.amPM !== undefined) {\n bind(self.amPM, \"click\", (e) => {\n updateTime(e);\n triggerChange();\n });\n }\n }\n if (self.config.allowInput) {\n bind(self._input, \"blur\", onBlur);\n }\n }\n function jumpToDate(jumpDate, triggerChange) {\n const jumpTo = jumpDate !== undefined\n ? self.parseDate(jumpDate)\n : self.latestSelectedDateObj ||\n (self.config.minDate && self.config.minDate > self.now\n ? self.config.minDate\n : self.config.maxDate && self.config.maxDate < self.now\n ? self.config.maxDate\n : self.now);\n const oldYear = self.currentYear;\n const oldMonth = self.currentMonth;\n try {\n if (jumpTo !== undefined) {\n self.currentYear = jumpTo.getFullYear();\n self.currentMonth = jumpTo.getMonth();\n }\n }\n catch (e) {\n e.message = \"Invalid date supplied: \" + jumpTo;\n self.config.errorHandler(e);\n }\n if (triggerChange && self.currentYear !== oldYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n if (triggerChange &&\n (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n triggerEvent(\"onMonthChange\");\n }\n self.redraw();\n }\n function timeIncrement(e) {\n const eventTarget = getEventTarget(e);\n if (~eventTarget.className.indexOf(\"arrow\"))\n incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n }\n function incrementNumInput(e, delta, inputElem) {\n const target = e && getEventTarget(e);\n const input = inputElem ||\n (target && target.parentNode && target.parentNode.firstChild);\n const event = createEvent(\"increment\");\n event.delta = delta;\n input && input.dispatchEvent(event);\n }\n function build() {\n const fragment = window.document.createDocumentFragment();\n self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n self.calendarContainer.tabIndex = -1;\n if (!self.config.noCalendar) {\n fragment.appendChild(buildMonthNav());\n self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n if (self.config.weekNumbers) {\n const { weekWrapper, weekNumbers } = buildWeeks();\n self.innerContainer.appendChild(weekWrapper);\n self.weekNumbers = weekNumbers;\n self.weekWrapper = weekWrapper;\n }\n self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n self.rContainer.appendChild(buildWeekdays());\n if (!self.daysContainer) {\n self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n self.daysContainer.tabIndex = -1;\n }\n buildDays();\n self.rContainer.appendChild(self.daysContainer);\n self.innerContainer.appendChild(self.rContainer);\n fragment.appendChild(self.innerContainer);\n }\n if (self.config.enableTime) {\n fragment.appendChild(buildTime());\n }\n toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n self.calendarContainer.appendChild(fragment);\n const customAppend = self.config.appendTo !== undefined &&\n self.config.appendTo.nodeType !== undefined;\n if (self.config.inline || self.config.static) {\n self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n if (self.config.inline) {\n if (!customAppend && self.element.parentNode)\n self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n else if (self.config.appendTo !== undefined)\n self.config.appendTo.appendChild(self.calendarContainer);\n }\n if (self.config.static) {\n const wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n if (self.element.parentNode)\n self.element.parentNode.insertBefore(wrapper, self.element);\n wrapper.appendChild(self.element);\n if (self.altInput)\n wrapper.appendChild(self.altInput);\n wrapper.appendChild(self.calendarContainer);\n }\n }\n if (!self.config.static && !self.config.inline)\n (self.config.appendTo !== undefined\n ? self.config.appendTo\n : window.document.body).appendChild(self.calendarContainer);\n }\n function createDay(className, date, dayNumber, i) {\n const dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", \"flatpickr-day \" + className, date.getDate().toString());\n dayElement.dateObj = date;\n dayElement.$i = i;\n dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n if (className.indexOf(\"hidden\") === -1 &&\n compareDates(date, self.now) === 0) {\n self.todayDateElem = dayElement;\n dayElement.classList.add(\"today\");\n dayElement.setAttribute(\"aria-current\", \"date\");\n }\n if (dateIsEnabled) {\n dayElement.tabIndex = -1;\n if (isDateSelected(date)) {\n dayElement.classList.add(\"selected\");\n self.selectedDateElem = dayElement;\n if (self.config.mode === \"range\") {\n toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n compareDates(date, self.selectedDates[0], true) === 0);\n toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n compareDates(date, self.selectedDates[1], true) === 0);\n if (className === \"nextMonthDay\")\n dayElement.classList.add(\"inRange\");\n }\n }\n }\n else {\n dayElement.classList.add(\"flatpickr-disabled\");\n }\n if (self.config.mode === \"range\") {\n if (isDateInRange(date) && !isDateSelected(date))\n dayElement.classList.add(\"inRange\");\n }\n if (self.weekNumbers &&\n self.config.showMonths === 1 &&\n className !== \"prevMonthDay\" &&\n dayNumber % 7 === 1) {\n self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"\" + self.config.getWeek(date) + \"\");\n }\n triggerEvent(\"onDayCreate\", dayElement);\n return dayElement;\n }\n function focusOnDayElem(targetNode) {\n targetNode.focus();\n if (self.config.mode === \"range\")\n onMouseOver(targetNode);\n }\n function getFirstAvailableDay(delta) {\n const startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n const endMonth = delta > 0 ? self.config.showMonths : -1;\n for (let m = startMonth; m != endMonth; m += delta) {\n const month = self.daysContainer.children[m];\n const startIndex = delta > 0 ? 0 : month.children.length - 1;\n const endIndex = delta > 0 ? month.children.length : -1;\n for (let i = startIndex; i != endIndex; i += delta) {\n const c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n return c;\n }\n }\n return undefined;\n }\n function getNextAvailableDay(current, delta) {\n const givenMonth = current.className.indexOf(\"Month\") === -1\n ? current.dateObj.getMonth()\n : self.currentMonth;\n const endMonth = delta > 0 ? self.config.showMonths : -1;\n const loopDelta = delta > 0 ? 1 : -1;\n for (let m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n const month = self.daysContainer.children[m];\n const startIndex = givenMonth - self.currentMonth === m\n ? current.$i + delta\n : delta < 0\n ? month.children.length - 1\n : 0;\n const numMonthDays = month.children.length;\n for (let i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n const c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 &&\n isEnabled(c.dateObj) &&\n Math.abs(current.$i - i) >= Math.abs(delta))\n return focusOnDayElem(c);\n }\n }\n self.changeMonth(loopDelta);\n focusOnDay(getFirstAvailableDay(loopDelta), 0);\n return undefined;\n }\n function focusOnDay(current, offset) {\n const dayFocused = isInView(document.activeElement || document.body);\n const startElem = current !== undefined\n ? current\n : dayFocused\n ? document.activeElement\n : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n ? self.selectedDateElem\n : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n ? self.todayDateElem\n : getFirstAvailableDay(offset > 0 ? 1 : -1);\n if (startElem === undefined) {\n self._input.focus();\n }\n else if (!dayFocused) {\n focusOnDayElem(startElem);\n }\n else {\n getNextAvailableDay(startElem, offset);\n }\n }\n function buildMonthDays(year, month) {\n const firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n const prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n const daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n let dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n }\n for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n }\n for (let dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n }\n const dayContainer = createElement(\"div\", \"dayContainer\");\n dayContainer.appendChild(days);\n return dayContainer;\n }\n function buildDays() {\n if (self.daysContainer === undefined) {\n return;\n }\n clearNode(self.daysContainer);\n if (self.weekNumbers)\n clearNode(self.weekNumbers);\n const frag = document.createDocumentFragment();\n for (let i = 0; i < self.config.showMonths; i++) {\n const d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n }\n self.daysContainer.appendChild(frag);\n self.days = self.daysContainer.firstChild;\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n onMouseOver();\n }\n }\n function buildMonthSwitch() {\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType !== \"dropdown\")\n return;\n const shouldBuildMonth = function (month) {\n if (self.config.minDate !== undefined &&\n self.currentYear === self.config.minDate.getFullYear() &&\n month < self.config.minDate.getMonth()) {\n return false;\n }\n return !(self.config.maxDate !== undefined &&\n self.currentYear === self.config.maxDate.getFullYear() &&\n month > self.config.maxDate.getMonth());\n };\n self.monthsDropdownContainer.tabIndex = -1;\n self.monthsDropdownContainer.innerHTML = \"\";\n for (let i = 0; i < 12; i++) {\n if (!shouldBuildMonth(i))\n continue;\n const month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n month.value = new Date(self.currentYear, i).getMonth().toString();\n month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n month.tabIndex = -1;\n if (self.currentMonth === i) {\n month.selected = true;\n }\n self.monthsDropdownContainer.appendChild(month);\n }\n }\n function buildMonth() {\n const container = createElement(\"div\", \"flatpickr-month\");\n const monthNavFragment = window.document.createDocumentFragment();\n let monthElement;\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n monthElement = createElement(\"span\", \"cur-month\");\n }\n else {\n self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n bind(self.monthsDropdownContainer, \"change\", (e) => {\n const target = getEventTarget(e);\n const selectedMonth = parseInt(target.value, 10);\n self.changeMonth(selectedMonth - self.currentMonth);\n triggerEvent(\"onMonthChange\");\n });\n buildMonthSwitch();\n monthElement = self.monthsDropdownContainer;\n }\n const yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n const yearElement = yearInput.getElementsByTagName(\"input\")[0];\n yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n if (self.config.minDate) {\n yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n }\n if (self.config.maxDate) {\n yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n yearElement.disabled =\n !!self.config.minDate &&\n self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n }\n const currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n currentMonth.appendChild(monthElement);\n currentMonth.appendChild(yearInput);\n monthNavFragment.appendChild(currentMonth);\n container.appendChild(monthNavFragment);\n return {\n container,\n yearElement,\n monthElement,\n };\n }\n function buildMonths() {\n clearNode(self.monthNav);\n self.monthNav.appendChild(self.prevMonthNav);\n if (self.config.showMonths) {\n self.yearElements = [];\n self.monthElements = [];\n }\n for (let m = self.config.showMonths; m--;) {\n const month = buildMonth();\n self.yearElements.push(month.yearElement);\n self.monthElements.push(month.monthElement);\n self.monthNav.appendChild(month.container);\n }\n self.monthNav.appendChild(self.nextMonthNav);\n }\n function buildMonthNav() {\n self.monthNav = createElement(\"div\", \"flatpickr-months\");\n self.yearElements = [];\n self.monthElements = [];\n self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n self.prevMonthNav.innerHTML = self.config.prevArrow;\n self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n self.nextMonthNav.innerHTML = self.config.nextArrow;\n buildMonths();\n Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n get: () => self.__hidePrevMonthArrow,\n set(bool) {\n if (self.__hidePrevMonthArrow !== bool) {\n toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n self.__hidePrevMonthArrow = bool;\n }\n },\n });\n Object.defineProperty(self, \"_hideNextMonthArrow\", {\n get: () => self.__hideNextMonthArrow,\n set(bool) {\n if (self.__hideNextMonthArrow !== bool) {\n toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n self.__hideNextMonthArrow = bool;\n }\n },\n });\n self.currentYearElement = self.yearElements[0];\n updateNavigationCurrentMonth();\n return self.monthNav;\n }\n function buildTime() {\n self.calendarContainer.classList.add(\"hasTime\");\n if (self.config.noCalendar)\n self.calendarContainer.classList.add(\"noCalendar\");\n const defaults = getDefaultHours(self.config);\n self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n self.timeContainer.tabIndex = -1;\n const separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n const hourInput = createNumberInput(\"flatpickr-hour\", {\n \"aria-label\": self.l10n.hourAriaLabel,\n });\n self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n const minuteInput = createNumberInput(\"flatpickr-minute\", {\n \"aria-label\": self.l10n.minuteAriaLabel,\n });\n self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n self.hourElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getHours()\n : self.config.time_24hr\n ? defaults.hours\n : military2ampm(defaults.hours));\n self.minuteElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getMinutes()\n : defaults.minutes);\n self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n self.hourElement.setAttribute(\"maxlength\", \"2\");\n self.minuteElement.setAttribute(\"min\", \"0\");\n self.minuteElement.setAttribute(\"max\", \"59\");\n self.minuteElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(hourInput);\n self.timeContainer.appendChild(separator);\n self.timeContainer.appendChild(minuteInput);\n if (self.config.time_24hr)\n self.timeContainer.classList.add(\"time24hr\");\n if (self.config.enableSeconds) {\n self.timeContainer.classList.add(\"hasSeconds\");\n const secondInput = createNumberInput(\"flatpickr-second\");\n self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n self.secondElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getSeconds()\n : defaults.seconds);\n self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n self.secondElement.setAttribute(\"min\", \"0\");\n self.secondElement.setAttribute(\"max\", \"59\");\n self.secondElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n self.timeContainer.appendChild(secondInput);\n }\n if (!self.config.time_24hr) {\n self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n ? self.hourElement.value\n : self.config.defaultHour) > 11)]);\n self.amPM.title = self.l10n.toggleTitle;\n self.amPM.tabIndex = -1;\n self.timeContainer.appendChild(self.amPM);\n }\n return self.timeContainer;\n }\n function buildWeekdays() {\n if (!self.weekdayContainer)\n self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n else\n clearNode(self.weekdayContainer);\n for (let i = self.config.showMonths; i--;) {\n const container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n self.weekdayContainer.appendChild(container);\n }\n updateWeekdays();\n return self.weekdayContainer;\n }\n function updateWeekdays() {\n if (!self.weekdayContainer) {\n return;\n }\n const firstDayOfWeek = self.l10n.firstDayOfWeek;\n let weekdays = [...self.l10n.weekdays.shorthand];\n if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n weekdays = [\n ...weekdays.splice(firstDayOfWeek, weekdays.length),\n ...weekdays.splice(0, firstDayOfWeek),\n ];\n }\n for (let i = self.config.showMonths; i--;) {\n self.weekdayContainer.children[i].innerHTML = `\n \n ${weekdays.join(\"\")}\n \n `;\n }\n }\n function buildWeeks() {\n self.calendarContainer.classList.add(\"hasWeeks\");\n const weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n const weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n weekWrapper.appendChild(weekNumbers);\n return {\n weekWrapper,\n weekNumbers,\n };\n }\n function changeMonth(value, isOffset = true) {\n const delta = isOffset ? value : value - self.currentMonth;\n if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n (delta > 0 && self._hideNextMonthArrow === true))\n return;\n self.currentMonth += delta;\n if (self.currentMonth < 0 || self.currentMonth > 11) {\n self.currentYear += self.currentMonth > 11 ? 1 : -1;\n self.currentMonth = (self.currentMonth + 12) % 12;\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n buildDays();\n triggerEvent(\"onMonthChange\");\n updateNavigationCurrentMonth();\n }\n function clear(triggerChangeEvent = true, toInitial = true) {\n self.input.value = \"\";\n if (self.altInput !== undefined)\n self.altInput.value = \"\";\n if (self.mobileInput !== undefined)\n self.mobileInput.value = \"\";\n self.selectedDates = [];\n self.latestSelectedDateObj = undefined;\n if (toInitial === true) {\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n }\n if (self.config.enableTime === true) {\n const { hours, minutes, seconds } = getDefaultHours(self.config);\n setHours(hours, minutes, seconds);\n }\n self.redraw();\n if (triggerChangeEvent)\n triggerEvent(\"onChange\");\n }\n function close() {\n self.isOpen = false;\n if (!self.isMobile) {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.classList.remove(\"open\");\n }\n if (self._input !== undefined) {\n self._input.classList.remove(\"active\");\n }\n }\n triggerEvent(\"onClose\");\n }\n function destroy() {\n if (self.config !== undefined)\n triggerEvent(\"onDestroy\");\n for (let i = self._handlers.length; i--;) {\n self._handlers[i].remove();\n }\n self._handlers = [];\n if (self.mobileInput) {\n if (self.mobileInput.parentNode)\n self.mobileInput.parentNode.removeChild(self.mobileInput);\n self.mobileInput = undefined;\n }\n else if (self.calendarContainer && self.calendarContainer.parentNode) {\n if (self.config.static && self.calendarContainer.parentNode) {\n const wrapper = self.calendarContainer.parentNode;\n wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n if (wrapper.parentNode) {\n while (wrapper.firstChild)\n wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n }\n }\n else\n self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n }\n if (self.altInput) {\n self.input.type = \"text\";\n if (self.altInput.parentNode)\n self.altInput.parentNode.removeChild(self.altInput);\n delete self.altInput;\n }\n if (self.input) {\n self.input.type = self.input._type;\n self.input.classList.remove(\"flatpickr-input\");\n self.input.removeAttribute(\"readonly\");\n }\n [\n \"_showTimeInput\",\n \"latestSelectedDateObj\",\n \"_hideNextMonthArrow\",\n \"_hidePrevMonthArrow\",\n \"__hideNextMonthArrow\",\n \"__hidePrevMonthArrow\",\n \"isMobile\",\n \"isOpen\",\n \"selectedDateElem\",\n \"minDateHasTime\",\n \"maxDateHasTime\",\n \"days\",\n \"daysContainer\",\n \"_input\",\n \"_positionElement\",\n \"innerContainer\",\n \"rContainer\",\n \"monthNav\",\n \"todayDateElem\",\n \"calendarContainer\",\n \"weekdayContainer\",\n \"prevMonthNav\",\n \"nextMonthNav\",\n \"monthsDropdownContainer\",\n \"currentMonthElement\",\n \"currentYearElement\",\n \"navigationCurrentMonth\",\n \"selectedDateElem\",\n \"config\",\n ].forEach((k) => {\n try {\n delete self[k];\n }\n catch (_) { }\n });\n }\n function isCalendarElem(elem) {\n if (self.config.appendTo && self.config.appendTo.contains(elem))\n return true;\n return self.calendarContainer.contains(elem);\n }\n function documentClick(e) {\n if (self.isOpen && !self.config.inline) {\n const eventTarget = getEventTarget(e);\n const isCalendarElement = isCalendarElem(eventTarget);\n const isInput = eventTarget === self.input ||\n eventTarget === self.altInput ||\n self.element.contains(eventTarget) ||\n (e.path &&\n e.path.indexOf &&\n (~e.path.indexOf(self.input) ||\n ~e.path.indexOf(self.altInput)));\n const lostFocus = e.type === \"blur\"\n ? isInput &&\n e.relatedTarget &&\n !isCalendarElem(e.relatedTarget)\n : !isInput &&\n !isCalendarElement &&\n !isCalendarElem(e.relatedTarget);\n const isIgnored = !self.config.ignoredFocusElements.some((elem) => elem.contains(eventTarget));\n if (lostFocus && isIgnored) {\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined &&\n self.input.value !== \"\" &&\n self.input.value !== undefined) {\n updateTime();\n }\n self.close();\n if (self.config &&\n self.config.mode === \"range\" &&\n self.selectedDates.length === 1) {\n self.clear(false);\n self.redraw();\n }\n }\n }\n }\n function changeYear(newYear) {\n if (!newYear ||\n (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n return;\n const newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n self.currentYear = newYearNum || self.currentYear;\n if (self.config.maxDate &&\n self.currentYear === self.config.maxDate.getFullYear()) {\n self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n }\n else if (self.config.minDate &&\n self.currentYear === self.config.minDate.getFullYear()) {\n self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n }\n if (isNewYear) {\n self.redraw();\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n }\n function isEnabled(date, timeless = true) {\n var _a;\n const dateToCheck = self.parseDate(date, undefined, timeless);\n if ((self.config.minDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n (self.config.maxDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n return false;\n if (!self.config.enable && self.config.disable.length === 0)\n return true;\n if (dateToCheck === undefined)\n return false;\n const bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n for (let i = 0, d; i < array.length; i++) {\n d = array[i];\n if (typeof d === \"function\" &&\n d(dateToCheck))\n return bool;\n else if (d instanceof Date &&\n dateToCheck !== undefined &&\n d.getTime() === dateToCheck.getTime())\n return bool;\n else if (typeof d === \"string\") {\n const parsed = self.parseDate(d, undefined, true);\n return parsed && parsed.getTime() === dateToCheck.getTime()\n ? bool\n : !bool;\n }\n else if (typeof d === \"object\" &&\n dateToCheck !== undefined &&\n d.from &&\n d.to &&\n dateToCheck.getTime() >= d.from.getTime() &&\n dateToCheck.getTime() <= d.to.getTime())\n return bool;\n }\n return !bool;\n }\n function isInView(elem) {\n if (self.daysContainer !== undefined)\n return (elem.className.indexOf(\"hidden\") === -1 &&\n elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n self.daysContainer.contains(elem));\n return false;\n }\n function onBlur(e) {\n const isInput = e.target === self._input;\n if (isInput &&\n (self.selectedDates.length > 0 || self._input.value.length > 0) &&\n !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n self.setDate(self._input.value, true, e.target === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n }\n function onKeyDown(e) {\n const eventTarget = getEventTarget(e);\n const isInput = self.config.wrap\n ? element.contains(eventTarget)\n : eventTarget === self._input;\n const allowInput = self.config.allowInput;\n const allowKeydown = self.isOpen && (!allowInput || !isInput);\n const allowInlineKeydown = self.config.inline && isInput && !allowInput;\n if (e.keyCode === 13 && isInput) {\n if (allowInput) {\n self.setDate(self._input.value, true, eventTarget === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n return eventTarget.blur();\n }\n else {\n self.open();\n }\n }\n else if (isCalendarElem(eventTarget) ||\n allowKeydown ||\n allowInlineKeydown) {\n const isTimeObj = !!self.timeContainer &&\n self.timeContainer.contains(eventTarget);\n switch (e.keyCode) {\n case 13:\n if (isTimeObj) {\n e.preventDefault();\n updateTime();\n focusAndClose();\n }\n else\n selectDate(e);\n break;\n case 27:\n e.preventDefault();\n focusAndClose();\n break;\n case 8:\n case 46:\n if (isInput && !self.config.allowInput) {\n e.preventDefault();\n self.clear();\n }\n break;\n case 37:\n case 39:\n if (!isTimeObj && !isInput) {\n e.preventDefault();\n if (self.daysContainer !== undefined &&\n (allowInput === false ||\n (document.activeElement && isInView(document.activeElement)))) {\n const delta = e.keyCode === 39 ? 1 : -1;\n if (!e.ctrlKey)\n focusOnDay(undefined, delta);\n else {\n e.stopPropagation();\n changeMonth(delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n }\n }\n else if (self.hourElement)\n self.hourElement.focus();\n break;\n case 38:\n case 40:\n e.preventDefault();\n const delta = e.keyCode === 40 ? 1 : -1;\n if ((self.daysContainer &&\n eventTarget.$i !== undefined) ||\n eventTarget === self.input ||\n eventTarget === self.altInput) {\n if (e.ctrlKey) {\n e.stopPropagation();\n changeYear(self.currentYear - delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n else if (!isTimeObj)\n focusOnDay(undefined, delta * 7);\n }\n else if (eventTarget === self.currentYearElement) {\n changeYear(self.currentYear - delta);\n }\n else if (self.config.enableTime) {\n if (!isTimeObj && self.hourElement)\n self.hourElement.focus();\n updateTime(e);\n self._debouncedChange();\n }\n break;\n case 9:\n if (isTimeObj) {\n const elems = [\n self.hourElement,\n self.minuteElement,\n self.secondElement,\n self.amPM,\n ]\n .concat(self.pluginElements)\n .filter((x) => x);\n const i = elems.indexOf(eventTarget);\n if (i !== -1) {\n const target = elems[i + (e.shiftKey ? -1 : 1)];\n e.preventDefault();\n (target || self._input).focus();\n }\n }\n else if (!self.config.noCalendar &&\n self.daysContainer &&\n self.daysContainer.contains(eventTarget) &&\n e.shiftKey) {\n e.preventDefault();\n self._input.focus();\n }\n break;\n default:\n break;\n }\n }\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n switch (e.key) {\n case self.l10n.amPM[0].charAt(0):\n case self.l10n.amPM[0].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[0];\n setHoursFromInputs();\n updateValue();\n break;\n case self.l10n.amPM[1].charAt(0):\n case self.l10n.amPM[1].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[1];\n setHoursFromInputs();\n updateValue();\n break;\n }\n }\n if (isInput || isCalendarElem(eventTarget)) {\n triggerEvent(\"onKeyDown\", e);\n }\n }\n function onMouseOver(elem) {\n if (self.selectedDates.length !== 1 ||\n (elem &&\n (!elem.classList.contains(\"flatpickr-day\") ||\n elem.classList.contains(\"flatpickr-disabled\"))))\n return;\n const hoverDate = elem\n ? elem.dateObj.getTime()\n : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n let containsDisabled = false;\n let minRange = 0, maxRange = 0;\n for (let t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n if (!isEnabled(new Date(t), true)) {\n containsDisabled =\n containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n if (t < initialDate && (!minRange || t > minRange))\n minRange = t;\n else if (t > initialDate && (!maxRange || t < maxRange))\n maxRange = t;\n }\n }\n for (let m = 0; m < self.config.showMonths; m++) {\n const month = self.daysContainer.children[m];\n for (let i = 0, l = month.children.length; i < l; i++) {\n const dayElem = month.children[i], date = dayElem.dateObj;\n const timestamp = date.getTime();\n const outOfRange = (minRange > 0 && timestamp < minRange) ||\n (maxRange > 0 && timestamp > maxRange);\n if (outOfRange) {\n dayElem.classList.add(\"notAllowed\");\n [\"inRange\", \"startRange\", \"endRange\"].forEach((c) => {\n dayElem.classList.remove(c);\n });\n continue;\n }\n else if (containsDisabled && !outOfRange)\n continue;\n [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach((c) => {\n dayElem.classList.remove(c);\n });\n if (elem !== undefined) {\n elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n ? \"startRange\"\n : \"endRange\");\n if (initialDate < hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"startRange\");\n else if (initialDate > hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"endRange\");\n if (timestamp >= minRange &&\n (maxRange === 0 || timestamp <= maxRange) &&\n isBetween(timestamp, initialDate, hoverDate))\n dayElem.classList.add(\"inRange\");\n }\n }\n }\n }\n function onResize() {\n if (self.isOpen && !self.config.static && !self.config.inline)\n positionCalendar();\n }\n function open(e, positionElement = self._positionElement) {\n if (self.isMobile === true) {\n if (e) {\n e.preventDefault();\n const eventTarget = getEventTarget(e);\n if (eventTarget) {\n eventTarget.blur();\n }\n }\n if (self.mobileInput !== undefined) {\n self.mobileInput.focus();\n self.mobileInput.click();\n }\n triggerEvent(\"onOpen\");\n return;\n }\n else if (self._input.disabled || self.config.inline) {\n return;\n }\n const wasOpen = self.isOpen;\n self.isOpen = true;\n if (!wasOpen) {\n self.calendarContainer.classList.add(\"open\");\n self._input.classList.add(\"active\");\n triggerEvent(\"onOpen\");\n positionCalendar(positionElement);\n }\n if (self.config.enableTime === true && self.config.noCalendar === true) {\n if (self.config.allowInput === false &&\n (e === undefined ||\n !self.timeContainer.contains(e.relatedTarget))) {\n setTimeout(() => self.hourElement.select(), 50);\n }\n }\n }\n function minMaxDateSetter(type) {\n return (date) => {\n const dateObj = (self.config[`_${type}Date`] = self.parseDate(date, self.config.dateFormat));\n const inverseDateObj = self.config[`_${type === \"min\" ? \"max\" : \"min\"}Date`];\n if (dateObj !== undefined) {\n self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n dateObj.getHours() > 0 ||\n dateObj.getMinutes() > 0 ||\n dateObj.getSeconds() > 0;\n }\n if (self.selectedDates) {\n self.selectedDates = self.selectedDates.filter((d) => isEnabled(d));\n if (!self.selectedDates.length && type === \"min\")\n setHoursFromDate(dateObj);\n updateValue();\n }\n if (self.daysContainer) {\n redraw();\n if (dateObj !== undefined)\n self.currentYearElement[type] = dateObj.getFullYear().toString();\n else\n self.currentYearElement.removeAttribute(type);\n self.currentYearElement.disabled =\n !!inverseDateObj &&\n dateObj !== undefined &&\n inverseDateObj.getFullYear() === dateObj.getFullYear();\n }\n };\n }\n function parseConfig() {\n const boolOpts = [\n \"wrap\",\n \"weekNumbers\",\n \"allowInput\",\n \"allowInvalidPreload\",\n \"clickOpens\",\n \"time_24hr\",\n \"enableTime\",\n \"noCalendar\",\n \"altInput\",\n \"shorthandCurrentMonth\",\n \"inline\",\n \"static\",\n \"enableSeconds\",\n \"disableMobile\",\n ];\n const userConfig = Object.assign(Object.assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n const formats = {};\n self.config.parseDate = userConfig.parseDate;\n self.config.formatDate = userConfig.formatDate;\n Object.defineProperty(self.config, \"enable\", {\n get: () => self.config._enable,\n set: (dates) => {\n self.config._enable = parseDateRules(dates);\n },\n });\n Object.defineProperty(self.config, \"disable\", {\n get: () => self.config._disable,\n set: (dates) => {\n self.config._disable = parseDateRules(dates);\n },\n });\n const timeMode = userConfig.mode === \"time\";\n if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n const defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n formats.dateFormat =\n userConfig.noCalendar || timeMode\n ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n }\n if (userConfig.altInput &&\n (userConfig.enableTime || timeMode) &&\n !userConfig.altFormat) {\n const defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n formats.altFormat =\n userConfig.noCalendar || timeMode\n ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n : defaultAltFormat + ` h:i${userConfig.enableSeconds ? \":S\" : \"\"} K`;\n }\n Object.defineProperty(self.config, \"minDate\", {\n get: () => self.config._minDate,\n set: minMaxDateSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxDate\", {\n get: () => self.config._maxDate,\n set: minMaxDateSetter(\"max\"),\n });\n const minMaxTimeSetter = (type) => (val) => {\n self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n };\n Object.defineProperty(self.config, \"minTime\", {\n get: () => self.config._minTime,\n set: minMaxTimeSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxTime\", {\n get: () => self.config._maxTime,\n set: minMaxTimeSetter(\"max\"),\n });\n if (userConfig.mode === \"time\") {\n self.config.noCalendar = true;\n self.config.enableTime = true;\n }\n Object.assign(self.config, formats, userConfig);\n for (let i = 0; i < boolOpts.length; i++)\n self.config[boolOpts[i]] =\n self.config[boolOpts[i]] === true ||\n self.config[boolOpts[i]] === \"true\";\n HOOKS.filter((hook) => self.config[hook] !== undefined).forEach((hook) => {\n self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n });\n self.isMobile =\n !self.config.disableMobile &&\n !self.config.inline &&\n self.config.mode === \"single\" &&\n !self.config.disable.length &&\n !self.config.enable &&\n !self.config.weekNumbers &&\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n for (let i = 0; i < self.config.plugins.length; i++) {\n const pluginConf = self.config.plugins[i](self) || {};\n for (const key in pluginConf) {\n if (HOOKS.indexOf(key) > -1) {\n self.config[key] = arrayify(pluginConf[key])\n .map(bindToInstance)\n .concat(self.config[key]);\n }\n else if (typeof userConfig[key] === \"undefined\")\n self.config[key] = pluginConf[key];\n }\n }\n if (!userConfig.altInputClass) {\n self.config.altInputClass =\n getInputElem().className + \" \" + self.config.altInputClass;\n }\n triggerEvent(\"onParseConfig\");\n }\n function getInputElem() {\n return self.config.wrap\n ? element.querySelector(\"[data-input]\")\n : element;\n }\n function setupLocale() {\n if (typeof self.config.locale !== \"object\" &&\n typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n self.config.errorHandler(new Error(`flatpickr: invalid locale ${self.config.locale}`));\n self.l10n = Object.assign(Object.assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n ? self.config.locale\n : self.config.locale !== \"default\"\n ? flatpickr.l10ns[self.config.locale]\n : undefined));\n tokenRegex.K = `(${self.l10n.amPM[0]}|${self.l10n.amPM[1]}|${self.l10n.amPM[0].toLowerCase()}|${self.l10n.amPM[1].toLowerCase()})`;\n const userConfig = Object.assign(Object.assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n if (userConfig.time_24hr === undefined &&\n flatpickr.defaultConfig.time_24hr === undefined) {\n self.config.time_24hr = self.l10n.time_24hr;\n }\n self.formatDate = createDateFormatter(self);\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n }\n function positionCalendar(customPositionElement) {\n if (typeof self.config.position === \"function\") {\n return void self.config.position(self, customPositionElement);\n }\n if (self.calendarContainer === undefined)\n return;\n triggerEvent(\"onPreCalendarPosition\");\n const positionElement = customPositionElement || self._positionElement;\n const calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, ((acc, child) => acc + child.offsetHeight), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n (configPosVertical !== \"below\" &&\n distanceFromBottom < calendarHeight &&\n inputBounds.top > calendarHeight);\n const top = window.pageYOffset +\n inputBounds.top +\n (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n if (self.config.inline)\n return;\n let left = window.pageXOffset + inputBounds.left;\n let isCenter = false;\n let isRight = false;\n if (configPosHorizontal === \"center\") {\n left -= (calendarWidth - inputBounds.width) / 2;\n isCenter = true;\n }\n else if (configPosHorizontal === \"right\") {\n left -= calendarWidth - inputBounds.width;\n isRight = true;\n }\n toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n const right = window.document.body.offsetWidth -\n (window.pageXOffset + inputBounds.right);\n const rightMost = left + calendarWidth > window.document.body.offsetWidth;\n const centerMost = right + calendarWidth > window.document.body.offsetWidth;\n toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n if (self.config.static)\n return;\n self.calendarContainer.style.top = `${top}px`;\n if (!rightMost) {\n self.calendarContainer.style.left = `${left}px`;\n self.calendarContainer.style.right = \"auto\";\n }\n else if (!centerMost) {\n self.calendarContainer.style.left = \"auto\";\n self.calendarContainer.style.right = `${right}px`;\n }\n else {\n const doc = getDocumentStyleSheet();\n if (doc === undefined)\n return;\n const bodyWidth = window.document.body.offsetWidth;\n const centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n const centerBefore = \".flatpickr-calendar.centerMost:before\";\n const centerAfter = \".flatpickr-calendar.centerMost:after\";\n const centerIndex = doc.cssRules.length;\n const centerStyle = `{left:${inputBounds.left}px;right:auto;}`;\n toggleClass(self.calendarContainer, \"rightMost\", false);\n toggleClass(self.calendarContainer, \"centerMost\", true);\n doc.insertRule(`${centerBefore},${centerAfter}${centerStyle}`, centerIndex);\n self.calendarContainer.style.left = `${centerLeft}px`;\n self.calendarContainer.style.right = \"auto\";\n }\n }\n function getDocumentStyleSheet() {\n let editableSheet = null;\n for (let i = 0; i < document.styleSheets.length; i++) {\n const sheet = document.styleSheets[i];\n try {\n sheet.cssRules;\n }\n catch (err) {\n continue;\n }\n editableSheet = sheet;\n break;\n }\n return editableSheet != null ? editableSheet : createStyleSheet();\n }\n function createStyleSheet() {\n const style = document.createElement(\"style\");\n document.head.appendChild(style);\n return style.sheet;\n }\n function redraw() {\n if (self.config.noCalendar || self.isMobile)\n return;\n buildMonthSwitch();\n updateNavigationCurrentMonth();\n buildDays();\n }\n function focusAndClose() {\n self._input.focus();\n if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.msMaxTouchPoints !== undefined) {\n setTimeout(self.close, 0);\n }\n else {\n self.close();\n }\n }\n function selectDate(e) {\n e.preventDefault();\n e.stopPropagation();\n const isSelectable = (day) => day.classList &&\n day.classList.contains(\"flatpickr-day\") &&\n !day.classList.contains(\"flatpickr-disabled\") &&\n !day.classList.contains(\"notAllowed\");\n const t = findParent(getEventTarget(e), isSelectable);\n if (t === undefined)\n return;\n const target = t;\n const selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n const shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n selectedDate.getMonth() >\n self.currentMonth + self.config.showMonths - 1) &&\n self.config.mode !== \"range\";\n self.selectedDateElem = target;\n if (self.config.mode === \"single\")\n self.selectedDates = [selectedDate];\n else if (self.config.mode === \"multiple\") {\n const selectedIndex = isDateSelected(selectedDate);\n if (selectedIndex)\n self.selectedDates.splice(parseInt(selectedIndex), 1);\n else\n self.selectedDates.push(selectedDate);\n }\n else if (self.config.mode === \"range\") {\n if (self.selectedDates.length === 2) {\n self.clear(false, false);\n }\n self.latestSelectedDateObj = selectedDate;\n self.selectedDates.push(selectedDate);\n if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n self.selectedDates.sort((a, b) => a.getTime() - b.getTime());\n }\n setHoursFromInputs();\n if (shouldChangeMonth) {\n const isNewYear = self.currentYear !== selectedDate.getFullYear();\n self.currentYear = selectedDate.getFullYear();\n self.currentMonth = selectedDate.getMonth();\n if (isNewYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n triggerEvent(\"onMonthChange\");\n }\n updateNavigationCurrentMonth();\n buildDays();\n updateValue();\n if (!shouldChangeMonth &&\n self.config.mode !== \"range\" &&\n self.config.showMonths === 1)\n focusOnDayElem(target);\n else if (self.selectedDateElem !== undefined &&\n self.hourElement === undefined) {\n self.selectedDateElem && self.selectedDateElem.focus();\n }\n if (self.hourElement !== undefined)\n self.hourElement !== undefined && self.hourElement.focus();\n if (self.config.closeOnSelect) {\n const single = self.config.mode === \"single\" && !self.config.enableTime;\n const range = self.config.mode === \"range\" &&\n self.selectedDates.length === 2 &&\n !self.config.enableTime;\n if (single || range) {\n focusAndClose();\n }\n }\n triggerChange();\n }\n const CALLBACKS = {\n locale: [setupLocale, updateWeekdays],\n showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n minDate: [jumpToDate],\n maxDate: [jumpToDate],\n clickOpens: [\n () => {\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n else {\n self._input.removeEventListener(\"focus\", self.open);\n self._input.removeEventListener(\"click\", self.open);\n }\n },\n ],\n };\n function set(option, value) {\n if (option !== null && typeof option === \"object\") {\n Object.assign(self.config, option);\n for (const key in option) {\n if (CALLBACKS[key] !== undefined)\n CALLBACKS[key].forEach((x) => x());\n }\n }\n else {\n self.config[option] = value;\n if (CALLBACKS[option] !== undefined)\n CALLBACKS[option].forEach((x) => x());\n else if (HOOKS.indexOf(option) > -1)\n self.config[option] = arrayify(value);\n }\n self.redraw();\n updateValue(true);\n }\n function setSelectedDate(inputDate, format) {\n let dates = [];\n if (inputDate instanceof Array)\n dates = inputDate.map((d) => self.parseDate(d, format));\n else if (inputDate instanceof Date || typeof inputDate === \"number\")\n dates = [self.parseDate(inputDate, format)];\n else if (typeof inputDate === \"string\") {\n switch (self.config.mode) {\n case \"single\":\n case \"time\":\n dates = [self.parseDate(inputDate, format)];\n break;\n case \"multiple\":\n dates = inputDate\n .split(self.config.conjunction)\n .map((date) => self.parseDate(date, format));\n break;\n case \"range\":\n dates = inputDate\n .split(self.l10n.rangeSeparator)\n .map((date) => self.parseDate(date, format));\n break;\n default:\n break;\n }\n }\n else\n self.config.errorHandler(new Error(`Invalid date supplied: ${JSON.stringify(inputDate)}`));\n self.selectedDates = (self.config.allowInvalidPreload\n ? dates\n : dates.filter((d) => d instanceof Date && isEnabled(d, false)));\n if (self.config.mode === \"range\")\n self.selectedDates.sort((a, b) => a.getTime() - b.getTime());\n }\n function setDate(date, triggerChange = false, format = self.config.dateFormat) {\n if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n return self.clear(triggerChange);\n setSelectedDate(date, format);\n self.latestSelectedDateObj =\n self.selectedDates[self.selectedDates.length - 1];\n self.redraw();\n jumpToDate(undefined, triggerChange);\n setHoursFromDate();\n if (self.selectedDates.length === 0) {\n self.clear(false);\n }\n updateValue(triggerChange);\n if (triggerChange)\n triggerEvent(\"onChange\");\n }\n function parseDateRules(arr) {\n return arr\n .slice()\n .map((rule) => {\n if (typeof rule === \"string\" ||\n typeof rule === \"number\" ||\n rule instanceof Date) {\n return self.parseDate(rule, undefined, true);\n }\n else if (rule &&\n typeof rule === \"object\" &&\n rule.from &&\n rule.to)\n return {\n from: self.parseDate(rule.from, undefined),\n to: self.parseDate(rule.to, undefined),\n };\n return rule;\n })\n .filter((x) => x);\n }\n function setupDates() {\n self.selectedDates = [];\n self.now = self.parseDate(self.config.now) || new Date();\n const preloadedDate = self.config.defaultDate ||\n ((self.input.nodeName === \"INPUT\" ||\n self.input.nodeName === \"TEXTAREA\") &&\n self.input.placeholder &&\n self.input.value === self.input.placeholder\n ? null\n : self.input.value);\n if (preloadedDate)\n setSelectedDate(preloadedDate, self.config.dateFormat);\n self._initialDate =\n self.selectedDates.length > 0\n ? self.selectedDates[0]\n : self.config.minDate &&\n self.config.minDate.getTime() > self.now.getTime()\n ? self.config.minDate\n : self.config.maxDate &&\n self.config.maxDate.getTime() < self.now.getTime()\n ? self.config.maxDate\n : self.now;\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n if (self.selectedDates.length > 0)\n self.latestSelectedDateObj = self.selectedDates[0];\n if (self.config.minTime !== undefined)\n self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n if (self.config.maxTime !== undefined)\n self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n self.minDateHasTime =\n !!self.config.minDate &&\n (self.config.minDate.getHours() > 0 ||\n self.config.minDate.getMinutes() > 0 ||\n self.config.minDate.getSeconds() > 0);\n self.maxDateHasTime =\n !!self.config.maxDate &&\n (self.config.maxDate.getHours() > 0 ||\n self.config.maxDate.getMinutes() > 0 ||\n self.config.maxDate.getSeconds() > 0);\n }\n function setupInputs() {\n self.input = getInputElem();\n if (!self.input) {\n self.config.errorHandler(new Error(\"Invalid input element specified\"));\n return;\n }\n self.input._type = self.input.type;\n self.input.type = \"text\";\n self.input.classList.add(\"flatpickr-input\");\n self._input = self.input;\n if (self.config.altInput) {\n self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n self._input = self.altInput;\n self.altInput.placeholder = self.input.placeholder;\n self.altInput.disabled = self.input.disabled;\n self.altInput.required = self.input.required;\n self.altInput.tabIndex = self.input.tabIndex;\n self.altInput.type = \"text\";\n self.input.setAttribute(\"type\", \"hidden\");\n if (!self.config.static && self.input.parentNode)\n self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n }\n if (!self.config.allowInput)\n self._input.setAttribute(\"readonly\", \"readonly\");\n self._positionElement = self.config.positionElement || self._input;\n }\n function setupMobile() {\n const inputType = self.config.enableTime\n ? self.config.noCalendar\n ? \"time\"\n : \"datetime-local\"\n : \"date\";\n self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n self.mobileInput.tabIndex = 1;\n self.mobileInput.type = inputType;\n self.mobileInput.disabled = self.input.disabled;\n self.mobileInput.required = self.input.required;\n self.mobileInput.placeholder = self.input.placeholder;\n self.mobileFormatStr =\n inputType === \"datetime-local\"\n ? \"Y-m-d\\\\TH:i:S\"\n : inputType === \"date\"\n ? \"Y-m-d\"\n : \"H:i:S\";\n if (self.selectedDates.length > 0) {\n self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n }\n if (self.config.minDate)\n self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n if (self.config.maxDate)\n self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n if (self.input.getAttribute(\"step\"))\n self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n self.input.type = \"hidden\";\n if (self.altInput !== undefined)\n self.altInput.type = \"hidden\";\n try {\n if (self.input.parentNode)\n self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n }\n catch (_a) { }\n bind(self.mobileInput, \"change\", (e) => {\n self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n triggerEvent(\"onChange\");\n triggerEvent(\"onClose\");\n });\n }\n function toggle(e) {\n if (self.isOpen === true)\n return self.close();\n self.open(e);\n }\n function triggerEvent(event, data) {\n if (self.config === undefined)\n return;\n const hooks = self.config[event];\n if (hooks !== undefined && hooks.length > 0) {\n for (let i = 0; hooks[i] && i < hooks.length; i++)\n hooks[i](self.selectedDates, self.input.value, self, data);\n }\n if (event === \"onChange\") {\n self.input.dispatchEvent(createEvent(\"change\"));\n self.input.dispatchEvent(createEvent(\"input\"));\n }\n }\n function createEvent(name) {\n const e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n return e;\n }\n function isDateSelected(date) {\n for (let i = 0; i < self.selectedDates.length; i++) {\n if (compareDates(self.selectedDates[i], date) === 0)\n return \"\" + i;\n }\n return false;\n }\n function isDateInRange(date) {\n if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n return false;\n return (compareDates(date, self.selectedDates[0]) >= 0 &&\n compareDates(date, self.selectedDates[1]) <= 0);\n }\n function updateNavigationCurrentMonth() {\n if (self.config.noCalendar || self.isMobile || !self.monthNav)\n return;\n self.yearElements.forEach((yearElement, i) => {\n const d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n self.monthElements[i].textContent =\n monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n }\n else {\n self.monthsDropdownContainer.value = d.getMonth().toString();\n }\n yearElement.value = d.getFullYear().toString();\n });\n self._hidePrevMonthArrow =\n self.config.minDate !== undefined &&\n (self.currentYear === self.config.minDate.getFullYear()\n ? self.currentMonth <= self.config.minDate.getMonth()\n : self.currentYear < self.config.minDate.getFullYear());\n self._hideNextMonthArrow =\n self.config.maxDate !== undefined &&\n (self.currentYear === self.config.maxDate.getFullYear()\n ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n : self.currentYear > self.config.maxDate.getFullYear());\n }\n function getDateStr(format) {\n return self.selectedDates\n .map((dObj) => self.formatDate(dObj, format))\n .filter((d, i, arr) => self.config.mode !== \"range\" ||\n self.config.enableTime ||\n arr.indexOf(d) === i)\n .join(self.config.mode !== \"range\"\n ? self.config.conjunction\n : self.l10n.rangeSeparator);\n }\n function updateValue(triggerChange = true) {\n if (self.mobileInput !== undefined && self.mobileFormatStr) {\n self.mobileInput.value =\n self.latestSelectedDateObj !== undefined\n ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n : \"\";\n }\n self.input.value = getDateStr(self.config.dateFormat);\n if (self.altInput !== undefined) {\n self.altInput.value = getDateStr(self.config.altFormat);\n }\n if (triggerChange !== false)\n triggerEvent(\"onValueUpdate\");\n }\n function onMonthNavClick(e) {\n const eventTarget = getEventTarget(e);\n const isPrevMonth = self.prevMonthNav.contains(eventTarget);\n const isNextMonth = self.nextMonthNav.contains(eventTarget);\n if (isPrevMonth || isNextMonth) {\n changeMonth(isPrevMonth ? -1 : 1);\n }\n else if (self.yearElements.indexOf(eventTarget) >= 0) {\n eventTarget.select();\n }\n else if (eventTarget.classList.contains(\"arrowUp\")) {\n self.changeYear(self.currentYear + 1);\n }\n else if (eventTarget.classList.contains(\"arrowDown\")) {\n self.changeYear(self.currentYear - 1);\n }\n }\n function timeWrapper(e) {\n e.preventDefault();\n const isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n const min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n let newValue = curValue + step * delta;\n if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n const isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n if (newValue < min) {\n newValue =\n max +\n newValue +\n int(!isHourElem) +\n (int(isHourElem) && int(!self.amPM));\n if (isMinuteElem)\n incrementNumInput(undefined, -1, self.hourElement);\n }\n else if (newValue > max) {\n newValue =\n input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n if (isMinuteElem)\n incrementNumInput(undefined, 1, self.hourElement);\n }\n if (self.amPM &&\n isHourElem &&\n (step === 1\n ? newValue + curValue === 23\n : Math.abs(newValue - curValue) > step)) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n input.value = pad(newValue);\n }\n }\n init();\n return self;\n}\nfunction _flatpickr(nodeList, config) {\n const nodes = Array.prototype.slice\n .call(nodeList)\n .filter((x) => x instanceof HTMLElement);\n const instances = [];\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n try {\n if (node.getAttribute(\"data-fp-omit\") !== null)\n continue;\n if (node._flatpickr !== undefined) {\n node._flatpickr.destroy();\n node._flatpickr = undefined;\n }\n node._flatpickr = FlatpickrInstance(node, config || {});\n instances.push(node._flatpickr);\n }\n catch (e) {\n console.error(e);\n }\n }\n return instances.length === 1 ? instances[0] : instances;\n}\nif (typeof HTMLElement !== \"undefined\" &&\n typeof HTMLCollection !== \"undefined\" &&\n typeof NodeList !== \"undefined\") {\n HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n HTMLElement.prototype.flatpickr = function (config) {\n return _flatpickr([this], config);\n };\n}\nvar flatpickr = function (selector, config) {\n if (typeof selector === \"string\") {\n return _flatpickr(window.document.querySelectorAll(selector), config);\n }\n else if (selector instanceof Node) {\n return _flatpickr([selector], config);\n }\n else {\n return _flatpickr(selector, config);\n }\n};\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n en: Object.assign({}, English),\n default: Object.assign({}, English),\n};\nflatpickr.localize = (l10n) => {\n flatpickr.l10ns.default = Object.assign(Object.assign({}, flatpickr.l10ns.default), l10n);\n};\nflatpickr.setDefaults = (config) => {\n flatpickr.defaultConfig = Object.assign(Object.assign({}, flatpickr.defaultConfig), config);\n};\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n jQuery.fn.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n}\nDate.prototype.fp_incr = function (days) {\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\nif (typeof window !== \"undefined\") {\n window.flatpickr = flatpickr;\n}\nexport default flatpickr;\n","\"use strict\";\nif (typeof Object.assign !== \"function\") {\n Object.assign = function (target, ...args) {\n if (!target) {\n throw TypeError(\"Cannot convert undefined or null to object\");\n }\n for (const source of args) {\n if (source) {\n Object.keys(source).forEach((key) => (target[key] = source[key]));\n }\n }\n return target;\n };\n}\n","(function(window, factory) {\n\tvar lazySizes = factory(window, window.document, Date);\n\twindow.lazySizes = lazySizes;\n\tif(typeof module == 'object' && module.exports){\n\t\tmodule.exports = lazySizes;\n\t}\n}(typeof window != 'undefined' ?\n window : {}, \n/**\n * import(\"./types/global\")\n * @typedef { import(\"./types/lazysizes-config\").LazySizesConfigPartial } LazySizesConfigPartial\n */\nfunction l(window, document, Date) { // Pass in the window Date function also for SSR because the Date class can be lost\n\t'use strict';\n\t/*jshint eqnull:true */\n\n\tvar lazysizes,\n\t\t/**\n\t\t * @type { LazySizesConfigPartial }\n\t\t */\n\t\tlazySizesCfg;\n\n\t(function(){\n\t\tvar prop;\n\n\t\tvar lazySizesDefaults = {\n\t\t\tlazyClass: 'lazyload',\n\t\t\tloadedClass: 'lazyloaded',\n\t\t\tloadingClass: 'lazyloading',\n\t\t\tpreloadClass: 'lazypreload',\n\t\t\terrorClass: 'lazyerror',\n\t\t\t//strictClass: 'lazystrict',\n\t\t\tautosizesClass: 'lazyautosizes',\n\t\t\tfastLoadedClass: 'ls-is-cached',\n\t\t\tiframeLoadMode: 0,\n\t\t\tsrcAttr: 'data-src',\n\t\t\tsrcsetAttr: 'data-srcset',\n\t\t\tsizesAttr: 'data-sizes',\n\t\t\t//preloadAfterLoad: false,\n\t\t\tminSize: 40,\n\t\t\tcustomMedia: {},\n\t\t\tinit: true,\n\t\t\texpFactor: 1.5,\n\t\t\thFac: 0.8,\n\t\t\tloadMode: 2,\n\t\t\tloadHidden: true,\n\t\t\tricTimeout: 0,\n\t\t\tthrottleDelay: 125,\n\t\t};\n\n\t\tlazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {};\n\n\t\tfor(prop in lazySizesDefaults){\n\t\t\tif(!(prop in lazySizesCfg)){\n\t\t\t\tlazySizesCfg[prop] = lazySizesDefaults[prop];\n\t\t\t}\n\t\t}\n\t})();\n\n\tif (!document || !document.getElementsByClassName) {\n\t\treturn {\n\t\t\tinit: function () {},\n\t\t\t/**\n\t\t\t * @type { LazySizesConfigPartial }\n\t\t\t */\n\t\t\tcfg: lazySizesCfg,\n\t\t\t/**\n\t\t\t * @type { true }\n\t\t\t */\n\t\t\tnoSupport: true,\n\t\t};\n\t}\n\n\tvar docElem = document.documentElement;\n\n\tvar supportPicture = window.HTMLPictureElement;\n\n\tvar _addEventListener = 'addEventListener';\n\n\tvar _getAttribute = 'getAttribute';\n\n\t/**\n\t * Update to bind to window because 'this' becomes null during SSR\n\t * builds.\n\t */\n\tvar addEventListener = window[_addEventListener].bind(window);\n\n\tvar setTimeout = window.setTimeout;\n\n\tvar requestAnimationFrame = window.requestAnimationFrame || setTimeout;\n\n\tvar requestIdleCallback = window.requestIdleCallback;\n\n\tvar regPicture = /^picture$/i;\n\n\tvar loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];\n\n\tvar regClassCache = {};\n\n\tvar forEach = Array.prototype.forEach;\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar hasClass = function(ele, cls) {\n\t\tif(!regClassCache[cls]){\n\t\t\tregClassCache[cls] = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n\t\t}\n\t\treturn regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];\n\t};\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar addClass = function(ele, cls) {\n\t\tif (!hasClass(ele, cls)){\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);\n\t\t}\n\t};\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar removeClass = function(ele, cls) {\n\t\tvar reg;\n\t\tif ((reg = hasClass(ele,cls))) {\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));\n\t\t}\n\t};\n\n\tvar addRemoveLoadEvents = function(dom, fn, add){\n\t\tvar action = add ? _addEventListener : 'removeEventListener';\n\t\tif(add){\n\t\t\taddRemoveLoadEvents(dom, fn);\n\t\t}\n\t\tloadEvents.forEach(function(evt){\n\t\t\tdom[action](evt, fn);\n\t\t});\n\t};\n\n\t/**\n\t * @param elem { Element }\n\t * @param name { string }\n\t * @param detail { any }\n\t * @param noBubbles { boolean }\n\t * @param noCancelable { boolean }\n\t * @returns { CustomEvent }\n\t */\n\tvar triggerEvent = function(elem, name, detail, noBubbles, noCancelable){\n\t\tvar event = document.createEvent('Event');\n\n\t\tif(!detail){\n\t\t\tdetail = {};\n\t\t}\n\n\t\tdetail.instance = lazysizes;\n\n\t\tevent.initEvent(name, !noBubbles, !noCancelable);\n\n\t\tevent.detail = detail;\n\n\t\telem.dispatchEvent(event);\n\t\treturn event;\n\t};\n\n\tvar updatePolyfill = function (el, full){\n\t\tvar polyfill;\n\t\tif( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){\n\t\t\tif(full && full.src && !el[_getAttribute]('srcset')){\n\t\t\t\tel.setAttribute('srcset', full.src);\n\t\t\t}\n\t\t\tpolyfill({reevaluate: true, elements: [el]});\n\t\t} else if(full && full.src){\n\t\t\tel.src = full.src;\n\t\t}\n\t};\n\n\tvar getCSS = function (elem, style){\n\t\treturn (getComputedStyle(elem, null) || {})[style];\n\t};\n\n\t/**\n\t *\n\t * @param elem { Element }\n\t * @param parent { Element }\n\t * @param [width] {number}\n\t * @returns {number}\n\t */\n\tvar getWidth = function(elem, parent, width){\n\t\twidth = width || elem.offsetWidth;\n\n\t\twhile(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){\n\t\t\twidth = parent.offsetWidth;\n\t\t\tparent = parent.parentNode;\n\t\t}\n\n\t\treturn width;\n\t};\n\n\tvar rAF = (function(){\n\t\tvar running, waiting;\n\t\tvar firstFns = [];\n\t\tvar secondFns = [];\n\t\tvar fns = firstFns;\n\n\t\tvar run = function(){\n\t\t\tvar runFns = fns;\n\n\t\t\tfns = firstFns.length ? secondFns : firstFns;\n\n\t\t\trunning = true;\n\t\t\twaiting = false;\n\n\t\t\twhile(runFns.length){\n\t\t\t\trunFns.shift()();\n\t\t\t}\n\n\t\t\trunning = false;\n\t\t};\n\n\t\tvar rafBatch = function(fn, queue){\n\t\t\tif(running && !queue){\n\t\t\t\tfn.apply(this, arguments);\n\t\t\t} else {\n\t\t\t\tfns.push(fn);\n\n\t\t\t\tif(!waiting){\n\t\t\t\t\twaiting = true;\n\t\t\t\t\t(document.hidden ? setTimeout : requestAnimationFrame)(run);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\trafBatch._lsFlush = run;\n\n\t\treturn rafBatch;\n\t})();\n\n\tvar rAFIt = function(fn, simple){\n\t\treturn simple ?\n\t\t\tfunction() {\n\t\t\t\trAF(fn);\n\t\t\t} :\n\t\t\tfunction(){\n\t\t\t\tvar that = this;\n\t\t\t\tvar args = arguments;\n\t\t\t\trAF(function(){\n\t\t\t\t\tfn.apply(that, args);\n\t\t\t\t});\n\t\t\t}\n\t\t;\n\t};\n\n\tvar throttle = function(fn){\n\t\tvar running;\n\t\tvar lastTime = 0;\n\t\tvar gDelay = lazySizesCfg.throttleDelay;\n\t\tvar rICTimeout = lazySizesCfg.ricTimeout;\n\t\tvar run = function(){\n\t\t\trunning = false;\n\t\t\tlastTime = Date.now();\n\t\t\tfn();\n\t\t};\n\t\tvar idleCallback = requestIdleCallback && rICTimeout > 49 ?\n\t\t\tfunction(){\n\t\t\t\trequestIdleCallback(run, {timeout: rICTimeout});\n\n\t\t\t\tif(rICTimeout !== lazySizesCfg.ricTimeout){\n\t\t\t\t\trICTimeout = lazySizesCfg.ricTimeout;\n\t\t\t\t}\n\t\t\t} :\n\t\t\trAFIt(function(){\n\t\t\t\tsetTimeout(run);\n\t\t\t}, true)\n\t\t;\n\n\t\treturn function(isPriority){\n\t\t\tvar delay;\n\n\t\t\tif((isPriority = isPriority === true)){\n\t\t\t\trICTimeout = 33;\n\t\t\t}\n\n\t\t\tif(running){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trunning = true;\n\n\t\t\tdelay = gDelay - (Date.now() - lastTime);\n\n\t\t\tif(delay < 0){\n\t\t\t\tdelay = 0;\n\t\t\t}\n\n\t\t\tif(isPriority || delay < 9){\n\t\t\t\tidleCallback();\n\t\t\t} else {\n\t\t\t\tsetTimeout(idleCallback, delay);\n\t\t\t}\n\t\t};\n\t};\n\n\t//based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html\n\tvar debounce = function(func) {\n\t\tvar timeout, timestamp;\n\t\tvar wait = 99;\n\t\tvar run = function(){\n\t\t\ttimeout = null;\n\t\t\tfunc();\n\t\t};\n\t\tvar later = function() {\n\t\t\tvar last = Date.now() - timestamp;\n\n\t\t\tif (last < wait) {\n\t\t\t\tsetTimeout(later, wait - last);\n\t\t\t} else {\n\t\t\t\t(requestIdleCallback || run)(run);\n\t\t\t}\n\t\t};\n\n\t\treturn function() {\n\t\t\ttimestamp = Date.now();\n\n\t\t\tif (!timeout) {\n\t\t\t\ttimeout = setTimeout(later, wait);\n\t\t\t}\n\t\t};\n\t};\n\n\tvar loader = (function(){\n\t\tvar preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;\n\n\t\tvar eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden;\n\n\t\tvar regImg = /^img$/i;\n\t\tvar regIframe = /^iframe$/i;\n\n\t\tvar supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent));\n\n\t\tvar shrinkExpand = 0;\n\t\tvar currentExpand = 0;\n\n\t\tvar isLoading = 0;\n\t\tvar lowRuns = -1;\n\n\t\tvar resetPreloading = function(e){\n\t\t\tisLoading--;\n\t\t\tif(!e || isLoading < 0 || !e.target){\n\t\t\t\tisLoading = 0;\n\t\t\t}\n\t\t};\n\n\t\tvar isVisible = function (elem) {\n\t\t\tif (isBodyHidden == null) {\n\t\t\t\tisBodyHidden = getCSS(document.body, 'visibility') == 'hidden';\n\t\t\t}\n\n\t\t\treturn isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden');\n\t\t};\n\n\t\tvar isNestedVisible = function(elem, elemExpand){\n\t\t\tvar outerRect;\n\t\t\tvar parent = elem;\n\t\t\tvar visible = isVisible(elem);\n\n\t\t\teLtop -= elemExpand;\n\t\t\teLbottom += elemExpand;\n\t\t\teLleft -= elemExpand;\n\t\t\teLright += elemExpand;\n\n\t\t\twhile(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){\n\t\t\t\tvisible = ((getCSS(parent, 'opacity') || 1) > 0);\n\n\t\t\t\tif(visible && getCSS(parent, 'overflow') != 'visible'){\n\t\t\t\t\touterRect = parent.getBoundingClientRect();\n\t\t\t\t\tvisible = eLright > outerRect.left &&\n\t\t\t\t\t\teLleft < outerRect.right &&\n\t\t\t\t\t\teLbottom > outerRect.top - 1 &&\n\t\t\t\t\t\teLtop < outerRect.bottom + 1\n\t\t\t\t\t;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn visible;\n\t\t};\n\n\t\tvar checkElements = function() {\n\t\t\tvar eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal,\n\t\t\t\tbeforeExpandVal, defaultExpand, preloadExpand, hFac;\n\t\t\tvar lazyloadElems = lazysizes.elements;\n\n\t\t\tif((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){\n\n\t\t\t\ti = 0;\n\n\t\t\t\tlowRuns++;\n\n\t\t\t\tfor(; i < eLlen; i++){\n\n\t\t\t\t\tif(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;}\n\n\t\t\t\t\tif(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;}\n\n\t\t\t\t\tif(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){\n\t\t\t\t\t\telemExpand = currentExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!defaultExpand) {\n\t\t\t\t\t\tdefaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ?\n\t\t\t\t\t\t\tdocElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 :\n\t\t\t\t\t\t\tlazySizesCfg.expand;\n\n\t\t\t\t\t\tlazysizes._defEx = defaultExpand;\n\n\t\t\t\t\t\tpreloadExpand = defaultExpand * lazySizesCfg.expFactor;\n\t\t\t\t\t\thFac = lazySizesCfg.hFac;\n\t\t\t\t\t\tisBodyHidden = null;\n\n\t\t\t\t\t\tif(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){\n\t\t\t\t\t\t\tcurrentExpand = preloadExpand;\n\t\t\t\t\t\t\tlowRuns = 0;\n\t\t\t\t\t\t} else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){\n\t\t\t\t\t\t\tcurrentExpand = defaultExpand;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentExpand = shrinkExpand;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(beforeExpandVal !== elemExpand){\n\t\t\t\t\t\teLvW = innerWidth + (elemExpand * hFac);\n\t\t\t\t\t\telvH = innerHeight + elemExpand;\n\t\t\t\t\t\telemNegativeExpand = elemExpand * -1;\n\t\t\t\t\t\tbeforeExpandVal = elemExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\trect = lazyloadElems[i].getBoundingClientRect();\n\n\t\t\t\t\tif ((eLbottom = rect.bottom) >= elemNegativeExpand &&\n\t\t\t\t\t\t(eLtop = rect.top) <= elvH &&\n\t\t\t\t\t\t(eLright = rect.right) >= elemNegativeExpand * hFac &&\n\t\t\t\t\t\t(eLleft = rect.left) <= eLvW &&\n\t\t\t\t\t\t(eLbottom || eLright || eLleft || eLtop) &&\n\t\t\t\t\t\t(lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) &&\n\t\t\t\t\t\t((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){\n\t\t\t\t\t\tunveilElement(lazyloadElems[i]);\n\t\t\t\t\t\tloadedSomething = true;\n\t\t\t\t\t\tif(isLoading > 9){break;}\n\t\t\t\t\t} else if(!loadedSomething && isCompleted && !autoLoadElem &&\n\t\t\t\t\t\tisLoading < 4 && lowRuns < 4 && loadMode > 2 &&\n\t\t\t\t\t\t(preloadElems[0] || lazySizesCfg.preloadAfterLoad) &&\n\t\t\t\t\t\t(preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){\n\t\t\t\t\t\tautoLoadElem = preloadElems[0] || lazyloadElems[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(autoLoadElem && !loadedSomething){\n\t\t\t\t\tunveilElement(autoLoadElem);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar throttledCheckElements = throttle(checkElements);\n\n\t\tvar switchLoadingClass = function(e){\n\t\t\tvar elem = e.target;\n\n\t\t\tif (elem._lazyCache) {\n\t\t\t\tdelete elem._lazyCache;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresetPreloading(e);\n\t\t\taddClass(elem, lazySizesCfg.loadedClass);\n\t\t\tremoveClass(elem, lazySizesCfg.loadingClass);\n\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass);\n\t\t\ttriggerEvent(elem, 'lazyloaded');\n\t\t};\n\t\tvar rafedSwitchLoadingClass = rAFIt(switchLoadingClass);\n\t\tvar rafSwitchLoadingClass = function(e){\n\t\t\trafedSwitchLoadingClass({target: e.target});\n\t\t};\n\n\t\tvar changeIframeSrc = function(elem, src){\n\t\t\tvar loadMode = elem.getAttribute('data-load-mode') || lazySizesCfg.iframeLoadMode;\n\n\t\t\t// loadMode can be also a string!\n\t\t\tif (loadMode == 0) {\n\t\t\t\telem.contentWindow.location.replace(src);\n\t\t\t} else if (loadMode == 1) {\n\t\t\t\telem.src = src;\n\t\t\t}\n\t\t};\n\n\t\tvar handleSources = function(source){\n\t\t\tvar customMedia;\n\n\t\t\tvar sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr);\n\n\t\t\tif( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){\n\t\t\t\tsource.setAttribute('media', customMedia);\n\t\t\t}\n\n\t\t\tif(sourceSrcset){\n\t\t\t\tsource.setAttribute('srcset', sourceSrcset);\n\t\t\t}\n\t\t};\n\n\t\tvar lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){\n\t\t\tvar src, srcset, parent, isPicture, event, firesLoad;\n\n\t\t\tif(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){\n\n\t\t\t\tif(sizes){\n\t\t\t\t\tif(isAuto){\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.autosizesClass);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.setAttribute('sizes', sizes);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsrcset = elem[_getAttribute](lazySizesCfg.srcsetAttr);\n\t\t\t\tsrc = elem[_getAttribute](lazySizesCfg.srcAttr);\n\n\t\t\t\tif(isImg) {\n\t\t\t\t\tparent = elem.parentNode;\n\t\t\t\t\tisPicture = parent && regPicture.test(parent.nodeName || '');\n\t\t\t\t}\n\n\t\t\t\tfiresLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture));\n\n\t\t\t\tevent = {target: elem};\n\n\t\t\t\taddClass(elem, lazySizesCfg.loadingClass);\n\n\t\t\t\tif(firesLoad){\n\t\t\t\t\tclearTimeout(resetPreloadingTimer);\n\t\t\t\t\tresetPreloadingTimer = setTimeout(resetPreloading, 2500);\n\t\t\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass, true);\n\t\t\t\t}\n\n\t\t\t\tif(isPicture){\n\t\t\t\t\tforEach.call(parent.getElementsByTagName('source'), handleSources);\n\t\t\t\t}\n\n\t\t\t\tif(srcset){\n\t\t\t\t\telem.setAttribute('srcset', srcset);\n\t\t\t\t} else if(src && !isPicture){\n\t\t\t\t\tif(regIframe.test(elem.nodeName)){\n\t\t\t\t\t\tchangeIframeSrc(elem, src);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.src = src;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(isImg && (srcset || isPicture)){\n\t\t\t\t\tupdatePolyfill(elem, {src: src});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(elem._lazyRace){\n\t\t\t\tdelete elem._lazyRace;\n\t\t\t}\n\t\t\tremoveClass(elem, lazySizesCfg.lazyClass);\n\n\t\t\trAF(function(){\n\t\t\t\t// Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015)\n\t\t\t\tvar isLoaded = elem.complete && elem.naturalWidth > 1;\n\n\t\t\t\tif( !firesLoad || isLoaded){\n\t\t\t\t\tif (isLoaded) {\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.fastLoadedClass);\n\t\t\t\t\t}\n\t\t\t\t\tswitchLoadingClass(event);\n\t\t\t\t\telem._lazyCache = true;\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\tif ('_lazyCache' in elem) {\n\t\t\t\t\t\t\tdelete elem._lazyCache;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 9);\n\t\t\t\t}\n\t\t\t\tif (elem.loading == 'lazy') {\n\t\t\t\t\tisLoading--;\n\t\t\t\t}\n\t\t\t}, true);\n\t\t});\n\n\t\t/**\n\t\t *\n\t\t * @param elem { Element }\n\t\t */\n\t\tvar unveilElement = function (elem){\n\t\t\tif (elem._lazyRace) {return;}\n\t\t\tvar detail;\n\n\t\t\tvar isImg = regImg.test(elem.nodeName);\n\n\t\t\t//allow using sizes=\"auto\", but don't use. it's invalid. Use data-sizes=\"auto\" or a valid value for sizes instead (i.e.: sizes=\"80vw\")\n\t\t\tvar sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes'));\n\t\t\tvar isAuto = sizes == 'auto';\n\n\t\t\tif( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;}\n\n\t\t\tdetail = triggerEvent(elem, 'lazyunveilread').detail;\n\n\t\t\tif(isAuto){\n\t\t\t\t autoSizer.updateElem(elem, true, elem.offsetWidth);\n\t\t\t}\n\n\t\t\telem._lazyRace = true;\n\t\t\tisLoading++;\n\n\t\t\tlazyUnveil(elem, detail, isAuto, sizes, isImg);\n\t\t};\n\n\t\tvar afterScroll = debounce(function(){\n\t\t\tlazySizesCfg.loadMode = 3;\n\t\t\tthrottledCheckElements();\n\t\t});\n\n\t\tvar altLoadmodeScrollListner = function(){\n\t\t\tif(lazySizesCfg.loadMode == 3){\n\t\t\t\tlazySizesCfg.loadMode = 2;\n\t\t\t}\n\t\t\tafterScroll();\n\t\t};\n\n\t\tvar onload = function(){\n\t\t\tif(isCompleted){return;}\n\t\t\tif(Date.now() - started < 999){\n\t\t\t\tsetTimeout(onload, 999);\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\tisCompleted = true;\n\n\t\t\tlazySizesCfg.loadMode = 3;\n\n\t\t\tthrottledCheckElements();\n\n\t\t\taddEventListener('scroll', altLoadmodeScrollListner, true);\n\t\t};\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tstarted = Date.now();\n\n\t\t\t\tlazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass);\n\t\t\t\tpreloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass);\n\n\t\t\t\taddEventListener('scroll', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('resize', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('pageshow', function (e) {\n\t\t\t\t\tif (e.persisted) {\n\t\t\t\t\t\tvar loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass);\n\n\t\t\t\t\t\tif (loadingElements.length && loadingElements.forEach) {\n\t\t\t\t\t\t\trequestAnimationFrame(function () {\n\t\t\t\t\t\t\t\tloadingElements.forEach( function (img) {\n\t\t\t\t\t\t\t\t\tif (img.complete) {\n\t\t\t\t\t\t\t\t\t\tunveilElement(img);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(window.MutationObserver){\n\t\t\t\t\tnew MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} );\n\t\t\t\t} else {\n\t\t\t\t\tdocElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);\n\t\t\t\t\tdocElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);\n\t\t\t\t\tsetInterval(throttledCheckElements, 999);\n\t\t\t\t}\n\n\t\t\t\taddEventListener('hashchange', throttledCheckElements, true);\n\n\t\t\t\t//, 'fullscreenchange'\n\t\t\t\t['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){\n\t\t\t\t\tdocument[_addEventListener](name, throttledCheckElements, true);\n\t\t\t\t});\n\n\t\t\t\tif((/d$|^c/.test(document.readyState))){\n\t\t\t\t\tonload();\n\t\t\t\t} else {\n\t\t\t\t\taddEventListener('load', onload);\n\t\t\t\t\tdocument[_addEventListener]('DOMContentLoaded', throttledCheckElements);\n\t\t\t\t\tsetTimeout(onload, 20000);\n\t\t\t\t}\n\n\t\t\t\tif(lazysizes.elements.length){\n\t\t\t\t\tcheckElements();\n\t\t\t\t\trAF._lsFlush();\n\t\t\t\t} else {\n\t\t\t\t\tthrottledCheckElements();\n\t\t\t\t}\n\t\t\t},\n\t\t\tcheckElems: throttledCheckElements,\n\t\t\tunveil: unveilElement,\n\t\t\t_aLSL: altLoadmodeScrollListner,\n\t\t};\n\t})();\n\n\n\tvar autoSizer = (function(){\n\t\tvar autosizesElems;\n\n\t\tvar sizeElement = rAFIt(function(elem, parent, event, width){\n\t\t\tvar sources, i, len;\n\t\t\telem._lazysizesWidth = width;\n\t\t\twidth += 'px';\n\n\t\t\telem.setAttribute('sizes', width);\n\n\t\t\tif(regPicture.test(parent.nodeName || '')){\n\t\t\t\tsources = parent.getElementsByTagName('source');\n\t\t\t\tfor(i = 0, len = sources.length; i < len; i++){\n\t\t\t\t\tsources[i].setAttribute('sizes', width);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!event.detail.dataAttr){\n\t\t\t\tupdatePolyfill(elem, event.detail);\n\t\t\t}\n\t\t});\n\t\t/**\n\t\t *\n\t\t * @param elem {Element}\n\t\t * @param dataAttr\n\t\t * @param [width] { number }\n\t\t */\n\t\tvar getSizeElement = function (elem, dataAttr, width){\n\t\t\tvar event;\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif(parent){\n\t\t\t\twidth = getWidth(elem, parent, width);\n\t\t\t\tevent = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr});\n\n\t\t\t\tif(!event.defaultPrevented){\n\t\t\t\t\twidth = event.detail.width;\n\n\t\t\t\t\tif(width && width !== elem._lazysizesWidth){\n\t\t\t\t\t\tsizeElement(elem, parent, event, width);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar updateElementsSizes = function(){\n\t\t\tvar i;\n\t\t\tvar len = autosizesElems.length;\n\t\t\tif(len){\n\t\t\t\ti = 0;\n\n\t\t\t\tfor(; i < len; i++){\n\t\t\t\t\tgetSizeElement(autosizesElems[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar debouncedUpdateElementsSizes = debounce(updateElementsSizes);\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tautosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass);\n\t\t\t\taddEventListener('resize', debouncedUpdateElementsSizes);\n\t\t\t},\n\t\t\tcheckElems: debouncedUpdateElementsSizes,\n\t\t\tupdateElem: getSizeElement\n\t\t};\n\t})();\n\n\tvar init = function(){\n\t\tif(!init.i && document.getElementsByClassName){\n\t\t\tinit.i = true;\n\t\t\tautoSizer._();\n\t\t\tloader._();\n\t\t}\n\t};\n\n\tsetTimeout(function(){\n\t\tif(lazySizesCfg.init){\n\t\t\tinit();\n\t\t}\n\t});\n\n\tlazysizes = {\n\t\t/**\n\t\t * @type { LazySizesConfigPartial }\n\t\t */\n\t\tcfg: lazySizesCfg,\n\t\tautoSizer: autoSizer,\n\t\tloader: loader,\n\t\tinit: init,\n\t\tuP: updatePolyfill,\n\t\taC: addClass,\n\t\trC: removeClass,\n\t\thC: hasClass,\n\t\tfire: triggerEvent,\n\t\tgW: getWidth,\n\t\trAF: rAF,\n\t};\n\n\treturn lazysizes;\n}\n));\n","/*! npm.im/object-fit-images 3.2.4 */\n'use strict';\n\nvar OFI = 'bfred-it:object-fit-images';\nvar propRegex = /(object-fit|object-position)\\s*:\\s*([-.\\w\\s%]+)/g;\nvar testImg = typeof Image === 'undefined' ? {style: {'object-position': 1}} : new Image();\nvar supportsObjectFit = 'object-fit' in testImg.style;\nvar supportsObjectPosition = 'object-position' in testImg.style;\nvar supportsOFI = 'background-size' in testImg.style;\nvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\nvar nativeGetAttribute = testImg.getAttribute;\nvar nativeSetAttribute = testImg.setAttribute;\nvar autoModeEnabled = false;\n\nfunction createPlaceholder(w, h) {\n\treturn (\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\");\n}\n\nfunction polyfillCurrentSrc(el) {\n\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\tvar pf = window.picturefill._;\n\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t// force synchronous srcset parsing\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\tif (!el[pf.ns].curSrc) {\n\t\t\t// force picturefill to parse srcset\n\t\t\tel[pf.ns].supported = false;\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\t// retrieve parsed currentSrc, if any\n\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t}\n}\n\nfunction getStyle(el) {\n\tvar style = getComputedStyle(el).fontFamily;\n\tvar parsed;\n\tvar props = {};\n\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\tprops[parsed[1]] = parsed[2];\n\t}\n\treturn props;\n}\n\nfunction setPlaceholder(img, width, height) {\n\t// Default: fill width, no height\n\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t// Only set placeholder if it's different\n\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t}\n}\n\nfunction onImageReady(img, callback) {\n\t// naturalWidth is only available when the image headers are loaded,\n\t// this loop will poll it every 100ms.\n\tif (img.naturalWidth) {\n\t\tcallback(img);\n\t} else {\n\t\tsetTimeout(onImageReady, 100, img, callback);\n\t}\n}\n\nfunction fixOne(el) {\n\tvar style = getStyle(el);\n\tvar ofi = el[OFI];\n\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t// Avoid running where unnecessary, unless OFI had already done its deed\n\tif (!ofi.img) {\n\t\t// fill is the default behavior so no action is necessary\n\t\tif (style['object-fit'] === 'fill') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\tif (\n\t\t\t!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t\t!style['object-position'] // unless object-position is used\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// keep a clone in memory while resetting the original to a blank\n\tif (!ofi.img) {\n\t\tofi.img = new Image(el.width, el.height);\n\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t// preserve for any future cloneNode calls\n\t\t// https://github.com/bfred-it/object-fit-images/issues/53\n\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\tif (el.srcset) {\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t}\n\n\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t// remove srcset because it overrides src\n\t\tif (el.srcset) {\n\t\t\tel.srcset = '';\n\t\t}\n\t\ttry {\n\t\t\tkeepSrcUsable(el);\n\t\t} catch (err) {\n\t\t\tif (window.console) {\n\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t}\n\t\t}\n\t}\n\n\tpolyfillCurrentSrc(ofi.img);\n\n\tel.style.backgroundImage = \"url(\\\"\" + ((ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"')) + \"\\\")\";\n\tel.style.backgroundPosition = style['object-position'] || 'center';\n\tel.style.backgroundRepeat = 'no-repeat';\n\tel.style.backgroundOrigin = 'content-box';\n\n\tif (/scale-down/.test(style['object-fit'])) {\n\t\tonImageReady(ofi.img, function () {\n\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t} else {\n\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t}\n\t\t});\n\t} else {\n\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t}\n\n\tonImageReady(ofi.img, function (img) {\n\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t});\n}\n\nfunction keepSrcUsable(el) {\n\tvar descriptors = {\n\t\tget: function get(prop) {\n\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t},\n\t\tset: function set(value, prop) {\n\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\tnativeSetAttribute.call(el, (\"data-ofi-\" + prop), value); // preserve for any future cloneNode\n\t\t\tfixOne(el);\n\t\t\treturn value;\n\t\t}\n\t};\n\tObject.defineProperty(el, 'src', descriptors);\n\tObject.defineProperty(el, 'currentSrc', {\n\t\tget: function () { return descriptors.get('currentSrc'); }\n\t});\n\tObject.defineProperty(el, 'srcset', {\n\t\tget: function () { return descriptors.get('srcset'); },\n\t\tset: function (ss) { return descriptors.set(ss, 'srcset'); }\n\t});\n}\n\nfunction hijackAttributes() {\n\tfunction getOfiImageMaybe(el, name) {\n\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t}\n\tif (!supportsObjectPosition) {\n\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t};\n\n\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t};\n\t}\n}\n\nfunction fix(imgs, opts) {\n\tvar startAutoMode = !autoModeEnabled && !imgs;\n\topts = opts || {};\n\timgs = imgs || 'img';\n\n\tif ((supportsObjectPosition && !opts.skipTest) || !supportsOFI) {\n\t\treturn false;\n\t}\n\n\t// use imgs as a selector or just select all images\n\tif (imgs === 'img') {\n\t\timgs = document.getElementsByTagName('img');\n\t} else if (typeof imgs === 'string') {\n\t\timgs = document.querySelectorAll(imgs);\n\t} else if (!('length' in imgs)) {\n\t\timgs = [imgs];\n\t}\n\n\t// apply fix to all\n\tfor (var i = 0; i < imgs.length; i++) {\n\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\tskipTest: opts.skipTest\n\t\t};\n\t\tfixOne(imgs[i]);\n\t}\n\n\tif (startAutoMode) {\n\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\tfix(e.target, {\n\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t});\n\t\t\t}\n\t\t}, true);\n\t\tautoModeEnabled = true;\n\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t}\n\n\t// if requested, watch media queries for object-fit change\n\tif (opts.watchMQ) {\n\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\tskipTest: opts.skipTest\n\t\t}));\n\t}\n}\n\nfix.supportsObjectFit = supportsObjectFit;\nfix.supportsObjectPosition = supportsObjectPosition;\n\nhijackAttributes();\n\nmodule.exports = fix;\n","/**\n * Object Fit Videos\n * Polyfill for object-fit and object-position CSS properties on video elements\n * Covers IE9, IE10, IE11, Edge, Safari <10\n *\n * Usage\n * In your CSS, add a special font-family tag for IE/Edge\n * video {\n * object-fit: cover;\n * font-family: 'object-fit: cover;';\n * }\n *\n * Before the closing body tag, or whenever the DOM is ready,\n * make the JavaScript call\n * objectFitVideos();\n *\n * All video elements with the special CSS property will be targeted\n *\n * @license MIT (https://opensource.org/licenses/MIT)\n * @author Todd Miller \n * @version 1.0.2\n * @changelog\n * 2016-08-19 - Adds object-position support.\n * 2016-08-19 - Add throttle function for more performant resize events\n * 2016-08-19 - Initial release with object-fit support, and\n * object-position default 'center'\n * 2016-10-14 - No longer relies on window load event, instead requires a specific\n * function call to initialize the videos for object fit and position.\n * 2016-11-28 - Support CommonJS environment, courtesy of @msorensson\n * 2016-12-05 - Refactors the throttling function to support IE\n * 2017-09-26 - Fix an issue with autplay not working on polyfilled videos\n * - Adds the capability to specify elements to polyfill,\n * instead of just checking every video element for the\n * CSS property. Slight performance gain in most usecases,\n * and a bigger gain in a few usecases.\n * 2017-10-24 - Add user agent check to enable polyfill for all Edge browsers.\n * object-fit is supported on Edge >= 16, but currently just for images.\n */\nvar objectFitVideos = function (videos) {\n 'use strict';\n\n var isEdge = navigator.userAgent.indexOf('Edge/') >= 0;\n\n var testImg = new Image(),\n supportsObjectFit = 'object-fit' in testImg.style && !isEdge,\n supportsObjectPosition = 'object-position' in testImg.style && !isEdge,\n propRegex = /(object-fit|object-position)\\s*:\\s*([-\\w\\s%]+)/g;\n\n if (!supportsObjectFit || !supportsObjectPosition) {\n initialize(videos);\n throttle('resize', 'optimizedResize');\n }\n\n /**\n * Parse the style and look for the special font-family tag\n * @param {object} $el The element to parse\n * @return {object} The font-family properties we're interested in\n */\n function getStyle ($el) {\n var style = getComputedStyle($el).fontFamily,\n parsed = null,\n props = {};\n\n while ((parsed = propRegex.exec(style)) !== null) {\n props[parsed[1]] = parsed[2];\n }\n\n if (props['object-position'])\n return parsePosition(props);\n\n return props;\n }\n\n /**\n * Initialize all the relevant video elements and get them fitted\n */\n function initialize (videos) {\n var index = -1;\n\n if (!videos) {\n // if no videos given, query all video elements\n videos = document.querySelectorAll('video');\n } else if (!('length' in videos)) {\n // convert to an array for proper looping if an array or NodeList\n // was not given\n videos = [videos];\n }\n\n while (videos[++index]) {\n var style = getStyle(videos[index]);\n\n // only do work if the property is on the element\n if (style['object-fit'] || style['object-position']) {\n // set the default values\n style['object-fit'] = style['object-fit'] || 'fill';\n fitIt(videos[index], style);\n }\n }\n }\n\n /**\n * Object Fit\n * @param {object} $el Element to fit\n * @return {object} The element's relevant properties\n */\n function fitIt ($el, style) {\n // fill is the default behavior, no action is necessary\n if (style['object-fit'] === 'fill')\n return;\n\n // convenience style properties on the source element\n var setCss = $el.style,\n getCss = window.getComputedStyle($el);\n\n // create and insert a wrapper element\n var $wrap = document.createElement('object-fit');\n $wrap.appendChild($el.parentNode.replaceChild($wrap, $el));\n\n // style the wrapper element to mostly match the source element\n var wrapCss = {\n height: '100%',\n width: '100%',\n boxSizing: 'content-box',\n display: 'inline-block',\n overflow: 'hidden'\n };\n\n 'backgroundColor backgroundImage borderColor borderStyle borderWidth bottom fontSize lineHeight left opacity margin position right top visibility'.replace(/\\w+/g, function (key) {\n wrapCss[key] = getCss[key];\n });\n\n for (var key in wrapCss)\n $wrap.style[key] = wrapCss[key];\n\n // give the source element some saner styles\n setCss.border = setCss.margin = setCss.padding = 0;\n setCss.display = 'block';\n setCss.opacity = 1;\n\n // set up the event handlers\n $el.addEventListener('loadedmetadata', doWork);\n window.addEventListener('optimizedResize', doWork);\n\n // we may have missed the loadedmetadata event, so if the video has loaded\n // enough data, just drop the event listener and execute\n if ($el.readyState >= 1) {\n $el.removeEventListener('loadedmetadata', doWork);\n doWork();\n }\n\n /**\n * Do the actual sizing. Math.\n * @methodOf fitIt\n */\n function doWork () {\n // the actual size and ratio of the video\n // we do this here, even though it doesn't change, because\n // at this point we can be sure the metadata has loaded\n var videoWidth = $el.videoWidth,\n videoHeight = $el.videoHeight,\n videoRatio = videoWidth / videoHeight;\n\n var wrapWidth = $wrap.clientWidth,\n wrapHeight = $wrap.clientHeight,\n wrapRatio = wrapWidth / wrapHeight;\n\n var newHeight = 0,\n newWidth = 0;\n setCss.marginLeft = setCss.marginTop = 0;\n\n // basically we do the opposite action for contain and cover,\n // depending on whether the video aspect ratio is less than or\n // greater than the wrapper's aspect ratio\n if (videoRatio < wrapRatio ?\n style['object-fit'] === 'contain' : style['object-fit'] === 'cover') {\n newHeight = wrapHeight * videoRatio;\n newWidth = wrapWidth / videoRatio;\n\n setCss.width = Math.round(newHeight) + 'px';\n setCss.height = wrapHeight + 'px';\n\n if (style['object-position-x'] === 'left')\n setCss.marginLeft = 0;\n else if (style['object-position-x'] === 'right')\n setCss.marginLeft = Math.round(wrapWidth - newHeight) + 'px';\n else\n setCss.marginLeft = Math.round((wrapWidth - newHeight) / 2) + 'px';\n } else {\n newWidth = wrapWidth / videoRatio;\n\n setCss.width = wrapWidth + 'px';\n setCss.height = Math.round(newWidth) + 'px';\n\n if (style['object-position-y'] === 'top')\n setCss.marginTop = 0;\n else if (style['object-position-y'] === 'bottom')\n setCss.marginTop = Math.round(wrapHeight - newWidth) + 'px';\n else\n setCss.marginTop = Math.round((wrapHeight - newWidth) / 2) + 'px';\n }\n\n // play the video if autoplay is set\n if ($el.autoplay)\n $el.play();\n }\n }\n\n /**\n * Split the object-position property into x and y position properties\n * @param {object} style Relevant element styles\n * @return {object} The style object with the added x and y props\n */\n function parsePosition (style) {\n if (~style['object-position'].indexOf('left'))\n style['object-position-x'] = 'left';\n else if (~style['object-position'].indexOf('right'))\n style['object-position-x'] = 'right';\n else\n style['object-position-x'] = 'center';\n\n if (~style['object-position'].indexOf('top'))\n style['object-position-y'] = 'top';\n else if (~style['object-position'].indexOf('bottom'))\n style['object-position-y'] = 'bottom';\n else\n style['object-position-y'] = 'center';\n\n return style;\n }\n\n /**\n * Throttle an event with RequestAnimationFrame API for better performance\n * @param {string} type The event to throttle\n * @param {string} name Custom event name to listen for\n * @param {object} obj Optional object to attach the event to\n */\n function throttle (type, name, obj) {\n obj = obj || window;\n var running = false,\n evt = null;\n\n // IE does not support the CustomEvent constructor\n // so if that fails do it the old way\n try {\n evt = new CustomEvent(name);\n } catch (e) {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n var func = function () {\n if (running) return;\n\n running = true;\n requestAnimationFrame(function () {\n obj.dispatchEvent(evt);\n running = false;\n });\n };\n\n obj.addEventListener(type, func);\n }\n};\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined')\n module.exports = objectFitVideos;\n","var win = window;\n\nexport var raf = win.requestAnimationFrame\n || win.webkitRequestAnimationFrame\n || win.mozRequestAnimationFrame\n || win.msRequestAnimationFrame\n || function(cb) { return setTimeout(cb, 16); };\n","var win = window;\n\nexport var caf = win.cancelAnimationFrame\n || win.mozCancelAnimationFrame\n || function(id){ clearTimeout(id); };\n","export function extend() {\n var obj, name, copy,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length;\n\n for (; i < length; i++) {\n if ((obj = arguments[i]) !== null) {\n for (name in obj) {\n copy = obj[name];\n\n if (target === copy) {\n continue;\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n}","export function checkStorageValue (value) {\n return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\n}","export function setLocalStorage(storage, key, value, access) {\n if (access) {\n try { storage.setItem(key, value); } catch (e) {}\n }\n return value;\n}","export function getBody () {\n var doc = document,\n body = doc.body;\n\n if (!body) {\n body = doc.createElement('body');\n body.fake = true;\n }\n\n return body;\n}","export var docElement = document.documentElement;","import { docElement } from './docElement.js';\n\nexport function setFakeBody (body) {\n var docOverflow = '';\n if (body.fake) {\n docOverflow = docElement.style.overflow;\n //avoid crashing IE8, if background image is used\n body.style.background = '';\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n body.style.overflow = docElement.style.overflow = 'hidden';\n docElement.appendChild(body);\n }\n\n return docOverflow;\n}","import { docElement } from './docElement.js';\n\nexport function resetFakeBody (body, docOverflow) {\n if (body.fake) {\n body.remove();\n docElement.style.overflow = docOverflow;\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n // eslint-disable-next-line\n docElement.offsetHeight;\n }\n}","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function addCSSRule(sheet, selector, rules, index) {\n // return raf(function() {\n 'insertRule' in sheet ?\n sheet.insertRule(selector + '{' + rules + '}', index) :\n sheet.addRule(selector, rules, index);\n // });\n}","export function getCssRulesLength(sheet) {\n var rule = ('insertRule' in sheet) ? sheet.cssRules : sheet.rules;\n return rule.length;\n}","// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\nexport function forEach (arr, callback, scope) {\n for (var i = 0, l = arr.length; i < l; i++) {\n callback.call(scope, arr[i], i);\n }\n}","export var classListSupport = 'classList' in document.createElement('_');","import { classListSupport } from './classListSupport.js';\n\nvar hasClass = classListSupport ?\n function (el, str) { return el.classList.contains(str); } :\n function (el, str) { return el.className.indexOf(str) >= 0; };\n\nexport { classListSupport, hasClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar addClass = classListSupport ?\n function (el, str) {\n if (!hasClass(el, str)) { el.classList.add(str); }\n } :\n function (el, str) {\n if (!hasClass(el, str)) { el.className += ' ' + str; }\n };\n\nexport { addClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar removeClass = classListSupport ?\n function (el, str) {\n if (hasClass(el, str)) { el.classList.remove(str); }\n } :\n function (el, str) {\n if (hasClass(el, str)) { el.className = el.className.replace(str, ''); }\n };\n\nexport { removeClass };","export function hasAttr(el, attr) {\n return el.hasAttribute(attr);\n}","export function getAttr(el, attr) {\n return el.getAttribute(attr);\n}","export function isNodeList(el) {\n // Only NodeList has the \"item()\" function\n return typeof el.item !== \"undefined\"; \n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function setAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n if (Object.prototype.toString.call(attrs) !== '[object Object]') { return; }\n\n for (var i = els.length; i--;) {\n for(var key in attrs) {\n els[i].setAttribute(key, attrs[key]);\n }\n }\n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function removeAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n attrs = (attrs instanceof Array) ? attrs : [attrs];\n\n var attrLength = attrs.length;\n for (var i = els.length; i--;) {\n for (var j = attrLength; j--;) {\n els[i].removeAttribute(attrs[j]);\n }\n }\n}","export function arrayFromNodeList (nl) {\n var arr = [];\n for (var i = 0, l = nl.length; i < l; i++) {\n arr.push(nl[i]);\n }\n return arr;\n}","export function hideElement(el, forceHide) {\n if (el.style.display !== 'none') { el.style.display = 'none'; }\n}","export function showElement(el, forceHide) {\n if (el.style.display === 'none') { el.style.display = ''; }\n}","export function isVisible(el) {\n return window.getComputedStyle(el).display !== 'none';\n}","export function whichProperty(props){\n if (typeof props === 'string') {\n var arr = [props],\n Props = props.charAt(0).toUpperCase() + props.substr(1),\n prefixes = ['Webkit', 'Moz', 'ms', 'O'];\n \n prefixes.forEach(function(prefix) {\n if (prefix !== 'ms' || props === 'transform') {\n arr.push(prefix + Props);\n }\n });\n\n props = arr;\n }\n\n var el = document.createElement('fakeelement'),\n len = props.length;\n for(var i = 0; i < props.length; i++){\n var prop = props[i];\n if( el.style[prop] !== undefined ){ return prop; }\n }\n\n return false; // explicit for ie9-\n}\n","// get transitionend, animationend based on transitionDuration\n// @propin: string\n// @propOut: string, first-letter uppercase\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\nexport function getEndProperty(propIn, propOut) {\n var endProp = false;\n if (/^Webkit/.test(propIn)) {\n endProp = 'webkit' + propOut + 'End';\n } else if (/^O/.test(propIn)) {\n endProp = 'o' + propOut + 'End';\n } else if (propIn) {\n endProp = propOut.toLowerCase() + 'end';\n }\n return endProp;\n}","// Test via a getter in the options object to see if the passive property is accessed\nvar supportsPassive = false;\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n} catch (e) {}\nexport var passiveOption = supportsPassive ? { passive: true } : false;","import { passiveOption } from './passiveOption.js';\n\nexport function addEvents(el, obj, preventScrolling) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 && !preventScrolling ? passiveOption : false;\n el.addEventListener(prop, obj[prop], option);\n }\n}","import { passiveOption } from './passiveOption.js';\n\nexport function removeEvents(el, obj) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 ? passiveOption : false;\n el.removeEventListener(prop, obj[prop], option);\n }\n}","export function Events() {\n return {\n topics: {},\n on: function (eventName, fn) {\n this.topics[eventName] = this.topics[eventName] || [];\n this.topics[eventName].push(fn);\n },\n off: function(eventName, fn) {\n if (this.topics[eventName]) {\n for (var i = 0; i < this.topics[eventName].length; i++) {\n if (this.topics[eventName][i] === fn) {\n this.topics[eventName].splice(i, 1);\n break;\n }\n }\n }\n },\n emit: function (eventName, data) {\n data.type = eventName;\n if (this.topics[eventName]) {\n this.topics[eventName].forEach(function(fn) {\n fn(data, eventName);\n });\n }\n }\n };\n};","// Object.keys\nif (!Object.keys) {\n Object.keys = function(object) {\n var keys = [];\n for (var name in object) {\n if (Object.prototype.hasOwnProperty.call(object, name)) {\n keys.push(name);\n }\n }\n return keys;\n };\n}\n\n// ChildNode.remove\nif(!(\"remove\" in Element.prototype)){\n Element.prototype.remove = function(){\n if(this.parentNode) {\n this.parentNode.removeChild(this);\n }\n };\n}\n\nimport { raf } from './helpers/raf.js';\nimport { caf } from './helpers/caf.js';\nimport { extend } from './helpers/extend.js';\nimport { checkStorageValue } from './helpers/checkStorageValue.js';\nimport { setLocalStorage } from './helpers/setLocalStorage.js';\nimport { getSlideId } from './helpers/getSlideId.js';\nimport { calc } from './helpers/calc.js';\nimport { percentageLayout } from './helpers/percentageLayout.js';\nimport { mediaquerySupport } from './helpers/mediaquerySupport.js';\nimport { createStyleSheet } from './helpers/createStyleSheet.js';\nimport { addCSSRule } from './helpers/addCSSRule.js';\nimport { removeCSSRule } from './helpers/removeCSSRule.js';\nimport { getCssRulesLength } from './helpers/getCssRulesLength.js';\nimport { toDegree } from './helpers/toDegree.js';\nimport { getTouchDirection } from './helpers/getTouchDirection.js';\nimport { forEach } from './helpers/forEach.js';\nimport { hasClass } from './helpers/hasClass.js';\nimport { addClass } from './helpers/addClass.js';\nimport { removeClass } from './helpers/removeClass.js';\nimport { hasAttr } from './helpers/hasAttr.js';\nimport { getAttr } from './helpers/getAttr.js';\nimport { setAttrs } from './helpers/setAttrs.js';\nimport { removeAttrs } from './helpers/removeAttrs.js';\nimport { arrayFromNodeList } from './helpers/arrayFromNodeList.js';\nimport { hideElement } from './helpers/hideElement.js';\nimport { showElement } from './helpers/showElement.js';\nimport { isVisible } from './helpers/isVisible.js';\nimport { whichProperty } from './helpers/whichProperty.js';\nimport { has3DTransforms } from './helpers/has3DTransforms.js';\nimport { getEndProperty } from './helpers/getEndProperty.js';\nimport { addEvents } from './helpers/addEvents.js';\nimport { removeEvents } from './helpers/removeEvents.js';\nimport { Events } from './helpers/events.js';\nimport { jsTransform } from './helpers/jsTransform.js';\n\nexport var tns = function(options) {\n options = extend({\n container: '.slider',\n mode: 'carousel',\n axis: 'horizontal',\n items: 1,\n gutter: 0,\n edgePadding: 0,\n fixedWidth: false,\n autoWidth: false,\n viewportMax: false,\n slideBy: 1,\n center: false,\n controls: true,\n controlsPosition: 'top',\n controlsText: ['prev', 'next'],\n controlsContainer: false,\n prevButton: false,\n nextButton: false,\n nav: true,\n navPosition: 'top',\n navContainer: false,\n navAsThumbnails: false,\n arrowKeys: false,\n speed: 300,\n autoplay: false,\n autoplayPosition: 'top',\n autoplayTimeout: 5000,\n autoplayDirection: 'forward',\n autoplayText: ['start', 'stop'],\n autoplayHoverPause: false,\n autoplayButton: false,\n autoplayButtonOutput: true,\n autoplayResetOnVisibility: true,\n animateIn: 'tns-fadeIn',\n animateOut: 'tns-fadeOut',\n animateNormal: 'tns-normal',\n animateDelay: false,\n loop: true,\n rewind: false,\n autoHeight: false,\n responsive: false,\n lazyload: false,\n lazyloadSelector: '.tns-lazy-img',\n touch: true,\n mouseDrag: false,\n swipeAngle: 15,\n nested: false,\n preventActionWhenRunning: false,\n preventScrollOnTouch: false,\n freezable: true,\n onInit: false,\n useLocalStorage: true,\n nonce: false\n }, options || {});\n\n var doc = document,\n win = window,\n KEYS = {\n ENTER: 13,\n SPACE: 32,\n LEFT: 37,\n RIGHT: 39\n },\n tnsStorage = {},\n localStorageAccess = options.useLocalStorage;\n\n if (localStorageAccess) {\n // check browser version and local storage access\n var browserInfo = navigator.userAgent;\n var uid = new Date;\n\n try {\n tnsStorage = win.localStorage;\n if (tnsStorage) {\n tnsStorage.setItem(uid, uid);\n localStorageAccess = tnsStorage.getItem(uid) == uid;\n tnsStorage.removeItem(uid);\n } else {\n localStorageAccess = false;\n }\n if (!localStorageAccess) { tnsStorage = {}; }\n } catch(e) {\n localStorageAccess = false;\n }\n\n if (localStorageAccess) {\n // remove storage when browser version changes\n if (tnsStorage['tnsApp'] && tnsStorage['tnsApp'] !== browserInfo) {\n ['tC', 'tPL', 'tMQ', 'tTf', 't3D', 'tTDu', 'tTDe', 'tADu', 'tADe', 'tTE', 'tAE'].forEach(function(item) { tnsStorage.removeItem(item); });\n }\n // update browserInfo\n localStorage['tnsApp'] = browserInfo;\n }\n }\n\n var CALC = tnsStorage['tC'] ? checkStorageValue(tnsStorage['tC']) : setLocalStorage(tnsStorage, 'tC', calc(), localStorageAccess),\n PERCENTAGELAYOUT = tnsStorage['tPL'] ? checkStorageValue(tnsStorage['tPL']) : setLocalStorage(tnsStorage, 'tPL', percentageLayout(), localStorageAccess),\n CSSMQ = tnsStorage['tMQ'] ? checkStorageValue(tnsStorage['tMQ']) : setLocalStorage(tnsStorage, 'tMQ', mediaquerySupport(), localStorageAccess),\n TRANSFORM = tnsStorage['tTf'] ? checkStorageValue(tnsStorage['tTf']) : setLocalStorage(tnsStorage, 'tTf', whichProperty('transform'), localStorageAccess),\n HAS3DTRANSFORMS = tnsStorage['t3D'] ? checkStorageValue(tnsStorage['t3D']) : setLocalStorage(tnsStorage, 't3D', has3DTransforms(TRANSFORM), localStorageAccess),\n TRANSITIONDURATION = tnsStorage['tTDu'] ? checkStorageValue(tnsStorage['tTDu']) : setLocalStorage(tnsStorage, 'tTDu', whichProperty('transitionDuration'), localStorageAccess),\n TRANSITIONDELAY = tnsStorage['tTDe'] ? checkStorageValue(tnsStorage['tTDe']) : setLocalStorage(tnsStorage, 'tTDe', whichProperty('transitionDelay'), localStorageAccess),\n ANIMATIONDURATION = tnsStorage['tADu'] ? checkStorageValue(tnsStorage['tADu']) : setLocalStorage(tnsStorage, 'tADu', whichProperty('animationDuration'), localStorageAccess),\n ANIMATIONDELAY = tnsStorage['tADe'] ? checkStorageValue(tnsStorage['tADe']) : setLocalStorage(tnsStorage, 'tADe', whichProperty('animationDelay'), localStorageAccess),\n TRANSITIONEND = tnsStorage['tTE'] ? checkStorageValue(tnsStorage['tTE']) : setLocalStorage(tnsStorage, 'tTE', getEndProperty(TRANSITIONDURATION, 'Transition'), localStorageAccess),\n ANIMATIONEND = tnsStorage['tAE'] ? checkStorageValue(tnsStorage['tAE']) : setLocalStorage(tnsStorage, 'tAE', getEndProperty(ANIMATIONDURATION, 'Animation'), localStorageAccess);\n\n // get element nodes from selectors\n var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\n tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'],\n optionsElements = {};\n\n tnsList.forEach(function(item) {\n if (typeof options[item] === 'string') {\n var str = options[item],\n el = doc.querySelector(str);\n optionsElements[item] = str;\n\n if (el && el.nodeName) {\n options[item] = el;\n } else {\n if (supportConsoleWarn) { console.warn('Can\\'t find', options[item]); }\n return;\n }\n }\n });\n\n // make sure at least 1 slide\n if (options.container.children.length < 1) {\n if (supportConsoleWarn) { console.warn('No slides found in', options.container); }\n return;\n }\n\n // update options\n var responsive = options.responsive,\n nested = options.nested,\n carousel = options.mode === 'carousel' ? true : false;\n\n if (responsive) {\n // apply responsive[0] to options and remove it\n if (0 in responsive) {\n options = extend(options, responsive[0]);\n delete responsive[0];\n }\n\n var responsiveTem = {};\n for (var key in responsive) {\n var val = responsive[key];\n // update responsive\n // from: 300: 2\n // to:\n // 300: {\n // items: 2\n // }\n val = typeof val === 'number' ? {items: val} : val;\n responsiveTem[key] = val;\n }\n responsive = responsiveTem;\n responsiveTem = null;\n }\n\n // update options\n function updateOptions (obj) {\n for (var key in obj) {\n if (!carousel) {\n if (key === 'slideBy') { obj[key] = 'page'; }\n if (key === 'edgePadding') { obj[key] = false; }\n if (key === 'autoHeight') { obj[key] = false; }\n }\n\n // update responsive options\n if (key === 'responsive') { updateOptions(obj[key]); }\n }\n }\n if (!carousel) { updateOptions(options); }\n\n\n // === define and set variables ===\n if (!carousel) {\n options.axis = 'horizontal';\n options.slideBy = 'page';\n options.edgePadding = false;\n\n var animateIn = options.animateIn,\n animateOut = options.animateOut,\n animateDelay = options.animateDelay,\n animateNormal = options.animateNormal;\n }\n\n var horizontal = options.axis === 'horizontal' ? true : false,\n outerWrapper = doc.createElement('div'),\n innerWrapper = doc.createElement('div'),\n middleWrapper,\n container = options.container,\n containerParent = container.parentNode,\n containerHTML = container.outerHTML,\n slideItems = container.children,\n slideCount = slideItems.length,\n breakpointZone,\n windowWidth = getWindowWidth(),\n isOn = false;\n if (responsive) { setBreakpointZone(); }\n if (carousel) { container.className += ' tns-vpfix'; }\n\n // fixedWidth: viewport > rightBoundary > indexMax\n var autoWidth = options.autoWidth,\n fixedWidth = getOption('fixedWidth'),\n edgePadding = getOption('edgePadding'),\n gutter = getOption('gutter'),\n viewport = getViewportWidth(),\n center = getOption('center'),\n items = !autoWidth ? Math.floor(getOption('items')) : 1,\n slideBy = getOption('slideBy'),\n viewportMax = options.viewportMax || options.fixedWidthViewportWidth,\n arrowKeys = getOption('arrowKeys'),\n speed = getOption('speed'),\n rewind = options.rewind,\n loop = rewind ? false : options.loop,\n autoHeight = getOption('autoHeight'),\n controls = getOption('controls'),\n controlsText = getOption('controlsText'),\n nav = getOption('nav'),\n touch = getOption('touch'),\n mouseDrag = getOption('mouseDrag'),\n autoplay = getOption('autoplay'),\n autoplayTimeout = getOption('autoplayTimeout'),\n autoplayText = getOption('autoplayText'),\n autoplayHoverPause = getOption('autoplayHoverPause'),\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility'),\n sheet = createStyleSheet(null, getOption('nonce')),\n lazyload = options.lazyload,\n lazyloadSelector = options.lazyloadSelector,\n slidePositions, // collection of slide positions\n slideItemsOut = [],\n cloneCount = loop ? getCloneCountForLoop() : 0,\n slideCountNew = !carousel ? slideCount + cloneCount : slideCount + cloneCount * 2,\n hasRightDeadZone = (fixedWidth || autoWidth) && !loop ? true : false,\n rightBoundary = fixedWidth ? getRightBoundary() : null,\n updateIndexBeforeTransform = (!carousel || !loop) ? true : false,\n // transform\n transformAttr = horizontal ? 'left' : 'top',\n transformPrefix = '',\n transformPostfix = '',\n // index\n getIndexMax = (function () {\n if (fixedWidth) {\n return function() { return center && !loop ? slideCount - 1 : Math.ceil(- rightBoundary / (fixedWidth + gutter)); };\n } else if (autoWidth) {\n return function() {\n for (var i = 0; i < slideCountNew; i++) {\n if (slidePositions[i] >= - rightBoundary) { return i; }\n }\n };\n } else {\n return function() {\n if (center && carousel && !loop) {\n return slideCount - 1;\n } else {\n return loop || carousel ? Math.max(0, slideCountNew - Math.ceil(items)) : slideCountNew - 1;\n }\n };\n }\n })(),\n index = getStartIndex(getOption('startIndex')),\n indexCached = index,\n displayIndex = getCurrentSlide(),\n indexMin = 0,\n indexMax = !autoWidth ? getIndexMax() : null,\n // resize\n resizeTimer,\n preventActionWhenRunning = options.preventActionWhenRunning,\n swipeAngle = options.swipeAngle,\n moveDirectionExpected = swipeAngle ? '?' : true,\n running = false,\n onInit = options.onInit,\n events = new Events(),\n // id, class\n newContainerClasses = ' tns-slider tns-' + options.mode,\n slideId = container.id || getSlideId(),\n disable = getOption('disable'),\n disabled = false,\n freezable = options.freezable,\n freeze = freezable && !autoWidth ? getFreeze() : false,\n frozen = false,\n controlsEvents = {\n 'click': onControlsClick,\n 'keydown': onControlsKeydown\n },\n navEvents = {\n 'click': onNavClick,\n 'keydown': onNavKeydown\n },\n hoverEvents = {\n 'mouseover': mouseoverPause,\n 'mouseout': mouseoutRestart\n },\n visibilityEvent = {'visibilitychange': onVisibilityChange},\n docmentKeydownEvent = {'keydown': onDocumentKeydown},\n touchEvents = {\n 'touchstart': onPanStart,\n 'touchmove': onPanMove,\n 'touchend': onPanEnd,\n 'touchcancel': onPanEnd\n }, dragEvents = {\n 'mousedown': onPanStart,\n 'mousemove': onPanMove,\n 'mouseup': onPanEnd,\n 'mouseleave': onPanEnd\n },\n hasControls = hasOption('controls'),\n hasNav = hasOption('nav'),\n navAsThumbnails = autoWidth ? true : options.navAsThumbnails,\n hasAutoplay = hasOption('autoplay'),\n hasTouch = hasOption('touch'),\n hasMouseDrag = hasOption('mouseDrag'),\n slideActiveClass = 'tns-slide-active',\n slideClonedClass = 'tns-slide-cloned',\n imgCompleteClass = 'tns-complete',\n imgEvents = {\n 'load': onImgLoaded,\n 'error': onImgFailed\n },\n imgsComplete,\n liveregionCurrent,\n preventScroll = options.preventScrollOnTouch === 'force' ? true : false;\n\n // controls\n if (hasControls) {\n var controlsContainer = options.controlsContainer,\n controlsContainerHTML = options.controlsContainer ? options.controlsContainer.outerHTML : '',\n prevButton = options.prevButton,\n nextButton = options.nextButton,\n prevButtonHTML = options.prevButton ? options.prevButton.outerHTML : '',\n nextButtonHTML = options.nextButton ? options.nextButton.outerHTML : '',\n prevIsButton,\n nextIsButton;\n }\n\n // nav\n if (hasNav) {\n var navContainer = options.navContainer,\n navContainerHTML = options.navContainer ? options.navContainer.outerHTML : '',\n navItems,\n pages = autoWidth ? slideCount : getPages(),\n pagesCached = 0,\n navClicked = -1,\n navCurrentIndex = getCurrentNavIndex(),\n navCurrentIndexCached = navCurrentIndex,\n navActiveClass = 'tns-nav-active',\n navStr = 'Carousel Page ',\n navStrCurrent = ' (Current Slide)';\n }\n\n // autoplay\n if (hasAutoplay) {\n var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\n autoplayButton = options.autoplayButton,\n autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\n autoplayHtmlStrings = ['', ' animation'],\n autoplayTimer,\n animating,\n autoplayHoverPaused,\n autoplayUserPaused,\n autoplayVisibilityPaused;\n }\n\n if (hasTouch || hasMouseDrag) {\n var initPosition = {},\n lastPosition = {},\n translateInit,\n disX,\n disY,\n panStart = false,\n rafIndex,\n getDist = horizontal ?\n function(a, b) { return a.x - b.x; } :\n function(a, b) { return a.y - b.y; };\n }\n\n // disable slider when slidecount <= items\n if (!autoWidth) { resetVariblesWhenDisable(disable || freeze); }\n\n if (TRANSFORM) {\n transformAttr = TRANSFORM;\n transformPrefix = 'translate';\n\n if (HAS3DTRANSFORMS) {\n transformPrefix += horizontal ? '3d(' : '3d(0px, ';\n transformPostfix = horizontal ? ', 0px, 0px)' : ', 0px)';\n } else {\n transformPrefix += horizontal ? 'X(' : 'Y(';\n transformPostfix = ')';\n }\n\n }\n\n if (carousel) { container.className = container.className.replace('tns-vpfix', ''); }\n initStructure();\n initSheet();\n initSliderTransform();\n\n // === COMMON FUNCTIONS === //\n function resetVariblesWhenDisable (condition) {\n if (condition) {\n controls = nav = touch = mouseDrag = arrowKeys = autoplay = autoplayHoverPause = autoplayResetOnVisibility = false;\n }\n }\n\n function getCurrentSlide () {\n var tem = carousel ? index - cloneCount : index;\n while (tem < 0) { tem += slideCount; }\n return tem%slideCount + 1;\n }\n\n function getStartIndex (ind) {\n ind = ind ? Math.max(0, Math.min(loop ? slideCount - 1 : slideCount - items, ind)) : 0;\n return carousel ? ind + cloneCount : ind;\n }\n\n function getAbsIndex (i) {\n if (i == null) { i = index; }\n\n if (carousel) { i -= cloneCount; }\n while (i < 0) { i += slideCount; }\n\n return Math.floor(i%slideCount);\n }\n\n function getCurrentNavIndex () {\n var absIndex = getAbsIndex(),\n result;\n\n result = navAsThumbnails ? absIndex :\n fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) :\n Math.floor(absIndex / items);\n\n // set active nav to the last one when reaches the right edge\n if (!loop && carousel && index === indexMax) { result = pages - 1; }\n\n return result;\n }\n\n function getItemsMax () {\n // fixedWidth or autoWidth while viewportMax is not available\n if (autoWidth || (fixedWidth && !viewportMax)) {\n return slideCount - 1;\n // most cases\n } else {\n var str = fixedWidth ? 'fixedWidth' : 'items',\n arr = [];\n\n if (fixedWidth || options[str] < slideCount) { arr.push(options[str]); }\n\n if (responsive) {\n for (var bp in responsive) {\n var tem = responsive[bp][str];\n if (tem && (fixedWidth || tem < slideCount)) { arr.push(tem); }\n }\n }\n\n if (!arr.length) { arr.push(0); }\n\n return Math.ceil(fixedWidth ? viewportMax / Math.min.apply(null, arr) : Math.max.apply(null, arr));\n }\n }\n\n function getCloneCountForLoop () {\n var itemsMax = getItemsMax(),\n result = carousel ? Math.ceil((itemsMax * 5 - slideCount)/2) : (itemsMax * 4 - slideCount);\n result = Math.max(itemsMax, result);\n\n return hasOption('edgePadding') ? result + 1 : result;\n }\n\n function getWindowWidth () {\n return win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;\n }\n\n function getInsertPosition (pos) {\n return pos === 'top' ? 'afterbegin' : 'beforeend';\n }\n\n function getClientWidth (el) {\n if (el == null) { return; }\n var div = doc.createElement('div'), rect, width;\n el.appendChild(div);\n rect = div.getBoundingClientRect();\n width = rect.right - rect.left;\n div.remove();\n return width || getClientWidth(el.parentNode);\n }\n\n function getViewportWidth () {\n var gap = edgePadding ? edgePadding * 2 - gutter : 0;\n return getClientWidth(containerParent) - gap;\n }\n\n function hasOption (item) {\n if (options[item]) {\n return true;\n } else {\n if (responsive) {\n for (var bp in responsive) {\n if (responsive[bp][item]) { return true; }\n }\n }\n return false;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n function getOption (item, ww) {\n if (ww == null) { ww = windowWidth; }\n\n if (item === 'items' && fixedWidth) {\n return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\n\n } else {\n var result = options[item];\n\n if (responsive) {\n for (var bp in responsive) {\n // bp: convert string to number\n if (ww >= parseInt(bp)) {\n if (item in responsive[bp]) { result = responsive[bp][item]; }\n }\n }\n }\n\n if (item === 'slideBy' && result === 'page') { result = getOption('items'); }\n if (!carousel && (item === 'slideBy' || item === 'items')) { result = Math.floor(result); }\n\n return result;\n }\n }\n\n function getSlideMarginLeft (i) {\n return CALC ?\n CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' :\n i * 100 / slideCountNew + '%';\n }\n\n function getInnerWrapperStyles (edgePaddingTem, gutterTem, fixedWidthTem, speedTem, autoHeightBP) {\n var str = '';\n\n if (edgePaddingTem !== undefined) {\n var gap = edgePaddingTem;\n if (gutterTem) { gap -= gutterTem; }\n str = horizontal ?\n 'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' :\n 'margin: ' + edgePaddingTem + 'px 0 ' + gap + 'px 0;';\n } else if (gutterTem && !fixedWidthTem) {\n var gutterTemUnit = '-' + gutterTem + 'px',\n dir = horizontal ? gutterTemUnit + ' 0 0' : '0 ' + gutterTemUnit + ' 0';\n str = 'margin: 0 ' + dir + ';'\n }\n\n if (!carousel && autoHeightBP && TRANSITIONDURATION && speedTem) { str += getTransitionDurationStyle(speedTem); }\n return str;\n }\n\n function getContainerWidth (fixedWidthTem, gutterTem, itemsTem) {\n if (fixedWidthTem) {\n return (fixedWidthTem + gutterTem) * slideCountNew + 'px';\n } else {\n return CALC ?\n CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' :\n slideCountNew * 100 / itemsTem + '%';\n }\n }\n\n function getSlideWidthStyle (fixedWidthTem, gutterTem, itemsTem) {\n var width;\n\n if (fixedWidthTem) {\n width = (fixedWidthTem + gutterTem) + 'px';\n } else {\n if (!carousel) { itemsTem = Math.floor(itemsTem); }\n var dividend = carousel ? slideCountNew : itemsTem;\n width = CALC ?\n CALC + '(100% / ' + dividend + ')' :\n 100 / dividend + '%';\n }\n\n width = 'width:' + width;\n\n // inner slider: overwrite outer slider styles\n return nested !== 'inner' ? width + ';' : width + ' !important;';\n }\n\n function getSlideGutterStyle (gutterTem) {\n var str = '';\n\n // gutter maybe interger || 0\n // so can't use 'if (gutter)'\n if (gutterTem !== false) {\n var prop = horizontal ? 'padding-' : 'margin-',\n dir = horizontal ? 'right' : 'bottom';\n str = prop + dir + ': ' + gutterTem + 'px;';\n }\n\n return str;\n }\n\n function getCSSPrefix (name, num) {\n var prefix = name.substring(0, name.length - num).toLowerCase();\n if (prefix) { prefix = '-' + prefix + '-'; }\n\n return prefix;\n }\n\n function getTransitionDurationStyle (speed) {\n return getCSSPrefix(TRANSITIONDURATION, 18) + 'transition-duration:' + speed / 1000 + 's;';\n }\n\n function getAnimationDurationStyle (speed) {\n return getCSSPrefix(ANIMATIONDURATION, 17) + 'animation-duration:' + speed / 1000 + 's;';\n }\n\n function initStructure () {\n var classOuter = 'tns-outer',\n classInner = 'tns-inner',\n hasGutter = hasOption('gutter');\n\n outerWrapper.className = classOuter;\n innerWrapper.className = classInner;\n outerWrapper.id = slideId + '-ow';\n innerWrapper.id = slideId + '-iw';\n\n // set container properties\n if (container.id === '') { container.id = slideId; }\n newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\n newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\n if (autoWidth) { newContainerClasses += ' tns-autowidth'; }\n newContainerClasses += ' tns-' + options.axis;\n container.className += newContainerClasses;\n\n // add constrain layer for carousel\n if (carousel) {\n middleWrapper = doc.createElement('div');\n middleWrapper.id = slideId + '-mw';\n middleWrapper.className = 'tns-ovh';\n\n outerWrapper.appendChild(middleWrapper);\n middleWrapper.appendChild(innerWrapper);\n } else {\n outerWrapper.appendChild(innerWrapper);\n }\n\n if (autoHeight) {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.className += ' tns-ah';\n }\n\n containerParent.insertBefore(outerWrapper, container);\n innerWrapper.appendChild(container);\n\n // add id, class, aria attributes\n // before clone slides\n forEach(slideItems, function(item, i) {\n addClass(item, 'tns-item');\n if (!item.id) { item.id = slideId + '-item' + i; }\n if (!carousel && animateNormal) { addClass(item, animateNormal); }\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n });\n\n // ## clone slides\n // carousel: n + slides + n\n // gallery: slides + n\n if (cloneCount) {\n var fragmentBefore = doc.createDocumentFragment(),\n fragmentAfter = doc.createDocumentFragment();\n\n for (var j = cloneCount; j--;) {\n var num = j%slideCount,\n cloneFirst = slideItems[num].cloneNode(true);\n addClass(cloneFirst, slideClonedClass);\n removeAttrs(cloneFirst, 'id');\n fragmentAfter.insertBefore(cloneFirst, fragmentAfter.firstChild);\n\n if (carousel) {\n var cloneLast = slideItems[slideCount - 1 - num].cloneNode(true);\n addClass(cloneLast, slideClonedClass);\n removeAttrs(cloneLast, 'id');\n fragmentBefore.appendChild(cloneLast);\n }\n }\n\n container.insertBefore(fragmentBefore, container.firstChild);\n container.appendChild(fragmentAfter);\n slideItems = container.children;\n }\n\n }\n\n function initSliderTransform () {\n // ## images loaded/failed\n if (hasOption('autoHeight') || autoWidth || !horizontal) {\n var imgs = container.querySelectorAll('img');\n\n // add img load event listener\n forEach(imgs, function(img) {\n var src = img.src;\n\n if (!lazyload) {\n // not data img\n if (src && src.indexOf('data:image') < 0) {\n img.src = '';\n addEvents(img, imgEvents);\n addClass(img, 'loading');\n\n img.src = src;\n // data img\n } else {\n imgLoaded(img);\n }\n }\n });\n\n // set imgsComplete\n raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), function() { imgsComplete = true; }); });\n\n // reset imgs for auto height: check visible imgs only\n if (hasOption('autoHeight')) { imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1)); }\n\n lazyload ? initSliderTransformStyleCheck() : raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck); });\n\n } else {\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n }\n\n function initSliderTransformStyleCheck () {\n if (autoWidth && slideCount > 1) {\n // check styles application\n var num = loop ? index : slideCount - 1;\n\n (function stylesApplicationCheck() {\n var left = slideItems[num].getBoundingClientRect().left;\n var right = slideItems[num - 1].getBoundingClientRect().right;\n\n (Math.abs(left - right) <= 1) ?\n initSliderTransformCore() :\n setTimeout(function(){ stylesApplicationCheck() }, 16);\n })();\n\n } else {\n initSliderTransformCore();\n }\n }\n\n\n function initSliderTransformCore () {\n // run Fn()s which are rely on image loading\n if (!horizontal || autoWidth) {\n setSlidePositions();\n\n if (autoWidth) {\n rightBoundary = getRightBoundary();\n if (freezable) { freeze = getFreeze(); }\n indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\n resetVariblesWhenDisable(disable || freeze);\n } else {\n updateContentWrapperHeight();\n }\n }\n\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n\n function initSheet () {\n // gallery:\n // set animation classes and left value for gallery slider\n if (!carousel) {\n for (var i = index, l = index + Math.min(slideCount, items); i < l; i++) {\n var item = slideItems[i];\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // #### LAYOUT\n\n // ## INLINE-BLOCK VS FLOAT\n\n // ## PercentageLayout:\n // slides: inline-block\n // remove blank space between slides by set font-size: 0\n\n // ## Non PercentageLayout:\n // slides: float\n // margin-right: -100%\n // margin-left: ~\n\n // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\n if (horizontal) {\n if (PERCENTAGELAYOUT || autoWidth) {\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', 'font-size:' + win.getComputedStyle(slideItems[0]).fontSize + ';', getCssRulesLength(sheet));\n addCSSRule(sheet, '#' + slideId, 'font-size:0;', getCssRulesLength(sheet));\n } else if (carousel) {\n forEach(slideItems, function (slide, i) {\n slide.style.marginLeft = getSlideMarginLeft(i);\n });\n }\n }\n\n\n // ## BASIC STYLES\n if (CSSMQ) {\n // middle wrapper style\n if (TRANSITIONDURATION) {\n var str = middleWrapper && options.autoHeight ? getTransitionDurationStyle(options.speed) : '';\n addCSSRule(sheet, '#' + slideId + '-mw', str, getCssRulesLength(sheet));\n }\n\n // inner wrapper styles\n str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\n addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet));\n\n // container styles\n if (carousel) {\n str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\n }\n\n // slide styles\n str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\n if (options.gutter) { str += getSlideGutterStyle(options.gutter); }\n // set gallery items transition-duration\n if (!carousel) {\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n if (ANIMATIONDURATION) { str += getAnimationDurationStyle(speed); }\n }\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n\n // non CSS mediaqueries: IE8\n // ## update inner wrapper, container, slides if needed\n // set inline styles for inner wrapper & container\n // insert stylesheet (one line) for slides only (since slides are many)\n } else {\n // middle wrapper styles\n update_carousel_transition_duration();\n\n // inner wrapper styles\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight);\n\n // container styles\n if (carousel && horizontal && !autoWidth) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\n if (gutter) { str += getSlideGutterStyle(gutter); }\n\n // append to the last line\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n }\n\n // ## MEDIAQUERIES\n if (responsive && CSSMQ) {\n for (var bp in responsive) {\n // bp: convert string to number\n bp = parseInt(bp);\n\n var opts = responsive[bp],\n str = '',\n middleWrapperStr = '',\n innerWrapperStr = '',\n containerStr = '',\n slideStr = '',\n itemsBP = !autoWidth ? getOption('items', bp) : null,\n fixedWidthBP = getOption('fixedWidth', bp),\n speedBP = getOption('speed', bp),\n edgePaddingBP = getOption('edgePadding', bp),\n autoHeightBP = getOption('autoHeight', bp),\n gutterBP = getOption('gutter', bp);\n\n // middle wrapper string\n if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\n middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\n }\n\n // inner wrapper string\n if ('edgePadding' in opts || 'gutter' in opts) {\n innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\n }\n\n // container string\n if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || (fixedWidth && 'gutter' in opts))) {\n containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\n }\n if (TRANSITIONDURATION && 'speed' in opts) {\n containerStr += getTransitionDurationStyle(speedBP);\n }\n if (containerStr) {\n containerStr = '#' + slideId + '{' + containerStr + '}';\n }\n\n // slide string\n if ('fixedWidth' in opts || (fixedWidth && 'gutter' in opts) || !carousel && 'items' in opts) {\n slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\n }\n if ('gutter' in opts) {\n slideStr += getSlideGutterStyle(gutterBP);\n }\n // set gallery items transition-duration\n if (!carousel && 'speed' in opts) {\n if (TRANSITIONDURATION) { slideStr += getTransitionDurationStyle(speedBP); }\n if (ANIMATIONDURATION) { slideStr += getAnimationDurationStyle(speedBP); }\n }\n if (slideStr) { slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}'; }\n\n // add up\n str = middleWrapperStr + innerWrapperStr + containerStr + slideStr;\n\n if (str) {\n sheet.insertRule('@media (min-width: ' + bp / 16 + 'em) {' + str + '}', sheet.cssRules.length);\n }\n }\n }\n }\n\n function initTools () {\n // == slides ==\n updateSlideStatus();\n\n // == live region ==\n outerWrapper.insertAdjacentHTML('afterbegin', '
slide ' + getLiveRegionStr() + ' of ' + slideCount + '
');\n liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current');\n\n // == autoplayInit ==\n if (hasAutoplay) {\n var txt = autoplay ? 'stop' : 'start';\n if (autoplayButton) {\n setAttrs(autoplayButton, {'data-action': txt});\n } else if (options.autoplayButtonOutput) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '');\n autoplayButton = outerWrapper.querySelector('[data-action]');\n }\n\n // add event\n if (autoplayButton) {\n addEvents(autoplayButton, {'click': toggleAutoplay});\n }\n\n if (autoplay) {\n startAutoplay();\n if (autoplayHoverPause) { addEvents(container, hoverEvents); }\n if (autoplayResetOnVisibility) { addEvents(container, visibilityEvent); }\n }\n }\n\n // == navInit ==\n if (hasNav) {\n var initIndex = !carousel ? 0 : cloneCount;\n // customized nav\n // will not hide the navs in case they're thumbnails\n if (navContainer) {\n setAttrs(navContainer, {'aria-label': 'Carousel Pagination'});\n navItems = navContainer.children;\n forEach(navItems, function(item, i) {\n setAttrs(item, {\n 'data-nav': i,\n 'tabindex': '-1',\n 'aria-label': navStr + (i + 1),\n 'aria-controls': slideId,\n });\n });\n\n // generated nav\n } else {\n var navHtml = '',\n hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\n for (var i = 0; i < slideCount; i++) {\n // hide nav items by default\n navHtml += '';\n }\n navHtml = '
' + navHtml + '
';\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\n\n navContainer = outerWrapper.querySelector('.tns-nav');\n navItems = navContainer.children;\n }\n\n updateNavVisibility();\n\n // add transition\n if (TRANSITIONDURATION) {\n var prefix = TRANSITIONDURATION.substring(0, TRANSITIONDURATION.length - 18).toLowerCase(),\n str = 'transition: all ' + speed / 1000 + 's';\n\n if (prefix) {\n str = '-' + prefix + '-' + str;\n }\n\n addCSSRule(sheet, '[aria-controls^=' + slideId + '-item]', str, getCssRulesLength(sheet));\n }\n\n setAttrs(navItems[navCurrentIndex], {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navItems[navCurrentIndex], 'tabindex');\n addClass(navItems[navCurrentIndex], navActiveClass);\n\n // add events\n addEvents(navContainer, navEvents);\n }\n\n\n\n // == controlsInit ==\n if (hasControls) {\n if (!controlsContainer && (!prevButton || !nextButton)) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '
');\n\n controlsContainer = outerWrapper.querySelector('.tns-controls');\n }\n\n if (!prevButton || !nextButton) {\n prevButton = controlsContainer.children[0];\n nextButton = controlsContainer.children[1];\n }\n\n if (options.controlsContainer) {\n setAttrs(controlsContainer, {\n 'aria-label': 'Carousel Navigation',\n 'tabindex': '0'\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs([prevButton, nextButton], {\n 'aria-controls': slideId,\n 'tabindex': '-1',\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs(prevButton, {'data-controls' : 'prev'});\n setAttrs(nextButton, {'data-controls' : 'next'});\n }\n\n prevIsButton = isButton(prevButton);\n nextIsButton = isButton(nextButton);\n\n updateControlsStatus();\n\n // add events\n if (controlsContainer) {\n addEvents(controlsContainer, controlsEvents);\n } else {\n addEvents(prevButton, controlsEvents);\n addEvents(nextButton, controlsEvents);\n }\n }\n\n // hide tools if needed\n disableUI();\n }\n\n function initEvents () {\n // add events\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n addEvents(container, eve);\n }\n\n if (touch) { addEvents(container, touchEvents, options.preventScrollOnTouch); }\n if (mouseDrag) { addEvents(container, dragEvents); }\n if (arrowKeys) { addEvents(doc, docmentKeydownEvent); }\n\n if (nested === 'inner') {\n events.on('outerResized', function () {\n resizeTasks();\n events.emit('innerLoaded', info());\n });\n } else if (responsive || fixedWidth || autoWidth || autoHeight || !horizontal) {\n addEvents(win, {'resize': onResize});\n }\n\n if (autoHeight) {\n if (nested === 'outer') {\n events.on('innerLoaded', doAutoHeight);\n } else if (!disable) { doAutoHeight(); }\n }\n\n doLazyLoad();\n if (disable) { disableSlider(); } else if (freeze) { freezeSlider(); }\n\n events.on('indexChanged', additionalUpdates);\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n if (typeof onInit === 'function') { onInit(info()); }\n isOn = true;\n }\n\n function destroy () {\n // sheet\n sheet.disabled = true;\n if (sheet.ownerNode) { sheet.ownerNode.remove(); }\n\n // remove win event listeners\n removeEvents(win, {'resize': onResize});\n\n // arrowKeys, controls, nav\n if (arrowKeys) { removeEvents(doc, docmentKeydownEvent); }\n if (controlsContainer) { removeEvents(controlsContainer, controlsEvents); }\n if (navContainer) { removeEvents(navContainer, navEvents); }\n\n // autoplay\n removeEvents(container, hoverEvents);\n removeEvents(container, visibilityEvent);\n if (autoplayButton) { removeEvents(autoplayButton, {'click': toggleAutoplay}); }\n if (autoplay) { clearInterval(autoplayTimer); }\n\n // container\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n removeEvents(container, eve);\n }\n if (touch) { removeEvents(container, touchEvents); }\n if (mouseDrag) { removeEvents(container, dragEvents); }\n\n // cache Object values in options && reset HTML\n var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\n\n tnsList.forEach(function(item, i) {\n var el = item === 'container' ? outerWrapper : options[item];\n\n if (typeof el === 'object' && el) {\n var prevEl = el.previousElementSibling ? el.previousElementSibling : false,\n parentEl = el.parentNode;\n el.outerHTML = htmlList[i];\n options[item] = prevEl ? prevEl.nextElementSibling : parentEl.firstElementChild;\n }\n });\n\n\n // reset variables\n tnsList = animateIn = animateOut = animateDelay = animateNormal = horizontal = outerWrapper = innerWrapper = container = containerParent = containerHTML = slideItems = slideCount = breakpointZone = windowWidth = autoWidth = fixedWidth = edgePadding = gutter = viewport = items = slideBy = viewportMax = arrowKeys = speed = rewind = loop = autoHeight = sheet = lazyload = slidePositions = slideItemsOut = cloneCount = slideCountNew = hasRightDeadZone = rightBoundary = updateIndexBeforeTransform = transformAttr = transformPrefix = transformPostfix = getIndexMax = index = indexCached = indexMin = indexMax = resizeTimer = swipeAngle = moveDirectionExpected = running = onInit = events = newContainerClasses = slideId = disable = disabled = freezable = freeze = frozen = controlsEvents = navEvents = hoverEvents = visibilityEvent = docmentKeydownEvent = touchEvents = dragEvents = hasControls = hasNav = navAsThumbnails = hasAutoplay = hasTouch = hasMouseDrag = slideActiveClass = imgCompleteClass = imgEvents = imgsComplete = controls = controlsText = controlsContainer = controlsContainerHTML = prevButton = nextButton = prevIsButton = nextIsButton = nav = navContainer = navContainerHTML = navItems = pages = pagesCached = navClicked = navCurrentIndex = navCurrentIndexCached = navActiveClass = navStr = navStrCurrent = autoplay = autoplayTimeout = autoplayDirection = autoplayText = autoplayHoverPause = autoplayButton = autoplayButtonHTML = autoplayResetOnVisibility = autoplayHtmlStrings = autoplayTimer = animating = autoplayHoverPaused = autoplayUserPaused = autoplayVisibilityPaused = initPosition = lastPosition = translateInit = disX = disY = panStart = rafIndex = getDist = touch = mouseDrag = null;\n // check variables\n // [animateIn, animateOut, animateDelay, animateNormal, horizontal, outerWrapper, innerWrapper, container, containerParent, containerHTML, slideItems, slideCount, breakpointZone, windowWidth, autoWidth, fixedWidth, edgePadding, gutter, viewport, items, slideBy, viewportMax, arrowKeys, speed, rewind, loop, autoHeight, sheet, lazyload, slidePositions, slideItemsOut, cloneCount, slideCountNew, hasRightDeadZone, rightBoundary, updateIndexBeforeTransform, transformAttr, transformPrefix, transformPostfix, getIndexMax, index, indexCached, indexMin, indexMax, resizeTimer, swipeAngle, moveDirectionExpected, running, onInit, events, newContainerClasses, slideId, disable, disabled, freezable, freeze, frozen, controlsEvents, navEvents, hoverEvents, visibilityEvent, docmentKeydownEvent, touchEvents, dragEvents, hasControls, hasNav, navAsThumbnails, hasAutoplay, hasTouch, hasMouseDrag, slideActiveClass, imgCompleteClass, imgEvents, imgsComplete, controls, controlsText, controlsContainer, controlsContainerHTML, prevButton, nextButton, prevIsButton, nextIsButton, nav, navContainer, navContainerHTML, navItems, pages, pagesCached, navClicked, navCurrentIndex, navCurrentIndexCached, navActiveClass, navStr, navStrCurrent, autoplay, autoplayTimeout, autoplayDirection, autoplayText, autoplayHoverPause, autoplayButton, autoplayButtonHTML, autoplayResetOnVisibility, autoplayHtmlStrings, autoplayTimer, animating, autoplayHoverPaused, autoplayUserPaused, autoplayVisibilityPaused, initPosition, lastPosition, translateInit, disX, disY, panStart, rafIndex, getDist, touch, mouseDrag ].forEach(function(item) { if (item !== null) { console.log(item); } });\n\n for (var a in this) {\n if (a !== 'rebuild') { this[a] = null; }\n }\n isOn = false;\n }\n\n// === ON RESIZE ===\n // responsive || fixedWidth || autoWidth || !horizontal\n function onResize (e) {\n raf(function(){ resizeTasks(getEvent(e)); });\n }\n\n function resizeTasks (e) {\n if (!isOn) { return; }\n if (nested === 'outer') { events.emit('outerResized', info(e)); }\n windowWidth = getWindowWidth();\n var bpChanged,\n breakpointZoneTem = breakpointZone,\n needContainerTransform = false;\n\n if (responsive) {\n setBreakpointZone();\n bpChanged = breakpointZoneTem !== breakpointZone;\n // if (hasRightDeadZone) { needContainerTransform = true; } // *?\n if (bpChanged) { events.emit('newBreakpointStart', info(e)); }\n }\n\n var indChanged,\n itemsChanged,\n itemsTem = items,\n disableTem = disable,\n freezeTem = freeze,\n arrowKeysTem = arrowKeys,\n controlsTem = controls,\n navTem = nav,\n touchTem = touch,\n mouseDragTem = mouseDrag,\n autoplayTem = autoplay,\n autoplayHoverPauseTem = autoplayHoverPause,\n autoplayResetOnVisibilityTem = autoplayResetOnVisibility,\n indexTem = index;\n\n if (bpChanged) {\n var fixedWidthTem = fixedWidth,\n autoHeightTem = autoHeight,\n controlsTextTem = controlsText,\n centerTem = center,\n autoplayTextTem = autoplayText;\n\n if (!CSSMQ) {\n var gutterTem = gutter,\n edgePaddingTem = edgePadding;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n arrowKeys = getOption('arrowKeys');\n controls = getOption('controls');\n nav = getOption('nav');\n touch = getOption('touch');\n center = getOption('center');\n mouseDrag = getOption('mouseDrag');\n autoplay = getOption('autoplay');\n autoplayHoverPause = getOption('autoplayHoverPause');\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility');\n\n if (bpChanged) {\n disable = getOption('disable');\n fixedWidth = getOption('fixedWidth');\n speed = getOption('speed');\n autoHeight = getOption('autoHeight');\n controlsText = getOption('controlsText');\n autoplayText = getOption('autoplayText');\n autoplayTimeout = getOption('autoplayTimeout');\n\n if (!CSSMQ) {\n edgePadding = getOption('edgePadding');\n gutter = getOption('gutter');\n }\n }\n // update options\n resetVariblesWhenDisable(disable);\n\n viewport = getViewportWidth(); // <= edgePadding, gutter\n if ((!horizontal || autoWidth) && !disable) {\n setSlidePositions();\n if (!horizontal) {\n updateContentWrapperHeight(); // <= setSlidePositions\n needContainerTransform = true;\n }\n }\n if (fixedWidth || autoWidth) {\n rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\n // fixedWidth: <= viewport, fixedWidth, gutter\n indexMax = getIndexMax(); // autoWidth: <= rightBoundary, slidePositions\n // fixedWidth: <= rightBoundary, fixedWidth, gutter\n }\n\n if (bpChanged || fixedWidth) {\n items = getOption('items');\n slideBy = getOption('slideBy');\n itemsChanged = items !== itemsTem;\n\n if (itemsChanged) {\n if (!fixedWidth && !autoWidth) { indexMax = getIndexMax(); } // <= items\n // check index before transform in case\n // slider reach the right edge then items become bigger\n updateIndex();\n }\n }\n\n if (bpChanged) {\n if (disable !== disableTem) {\n if (disable) {\n disableSlider();\n } else {\n enableSlider(); // <= slidePositions, rightBoundary, indexMax\n }\n }\n }\n\n if (freezable && (bpChanged || fixedWidth || autoWidth)) {\n freeze = getFreeze(); // <= autoWidth: slidePositions, gutter, viewport, rightBoundary\n // <= fixedWidth: fixedWidth, gutter, rightBoundary\n // <= others: items\n\n if (freeze !== freezeTem) {\n if (freeze) {\n doContainerTransform(getContainerTransformValue(getStartIndex(0)));\n freezeSlider();\n } else {\n unfreezeSlider();\n needContainerTransform = true;\n }\n }\n }\n\n resetVariblesWhenDisable(disable || freeze); // controls, nav, touch, mouseDrag, arrowKeys, autoplay, autoplayHoverPause, autoplayResetOnVisibility\n if (!autoplay) { autoplayHoverPause = autoplayResetOnVisibility = false; }\n\n if (arrowKeys !== arrowKeysTem) {\n arrowKeys ?\n addEvents(doc, docmentKeydownEvent) :\n removeEvents(doc, docmentKeydownEvent);\n }\n if (controls !== controlsTem) {\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n } else {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n if (nav !== navTem) {\n if (nav) {\n showElement(navContainer);\n updateNavVisibility();\n } else {\n hideElement(navContainer)\n }\n }\n if (touch !== touchTem) {\n touch ?\n addEvents(container, touchEvents, options.preventScrollOnTouch) :\n removeEvents(container, touchEvents);\n }\n if (mouseDrag !== mouseDragTem) {\n mouseDrag ?\n addEvents(container, dragEvents) :\n removeEvents(container, dragEvents);\n }\n if (autoplay !== autoplayTem) {\n if (autoplay) {\n if (autoplayButton) { showElement(autoplayButton); }\n if (!animating && !autoplayUserPaused) { startAutoplay(); }\n } else {\n if (autoplayButton) { hideElement(autoplayButton); }\n if (animating) { stopAutoplay(); }\n }\n }\n if (autoplayHoverPause !== autoplayHoverPauseTem) {\n autoplayHoverPause ?\n addEvents(container, hoverEvents) :\n removeEvents(container, hoverEvents);\n }\n if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\n autoplayResetOnVisibility ?\n addEvents(doc, visibilityEvent) :\n removeEvents(doc, visibilityEvent);\n }\n\n if (bpChanged) {\n if (fixedWidth !== fixedWidthTem || center !== centerTem) { needContainerTransform = true; }\n\n if (autoHeight !== autoHeightTem) {\n if (!autoHeight) { innerWrapper.style.height = ''; }\n }\n\n if (controls && controlsText !== controlsTextTem) {\n prevButton.innerHTML = controlsText[0];\n nextButton.innerHTML = controlsText[1];\n }\n\n if (autoplayButton && autoplayText !== autoplayTextTem) {\n var i = autoplay ? 1 : 0,\n html = autoplayButton.innerHTML,\n len = html.length - autoplayTextTem[i].length;\n if (html.substring(len) === autoplayTextTem[i]) {\n autoplayButton.innerHTML = html.substring(0, len) + autoplayText[i];\n }\n }\n } else {\n if (center && (fixedWidth || autoWidth)) { needContainerTransform = true; }\n }\n\n if (itemsChanged || fixedWidth && !autoWidth) {\n pages = getPages();\n updateNavVisibility();\n }\n\n indChanged = index !== indexTem;\n if (indChanged) {\n events.emit('indexChanged', info());\n needContainerTransform = true;\n } else if (itemsChanged) {\n if (!indChanged) { additionalUpdates(); }\n } else if (fixedWidth || autoWidth) {\n doLazyLoad();\n updateSlideStatus();\n updateLiveRegion();\n }\n\n if (itemsChanged && !carousel) { updateGallerySlidePositions(); }\n\n if (!disable && !freeze) {\n // non-mediaqueries: IE8\n if (bpChanged && !CSSMQ) {\n // middle wrapper styles\n\n // inner wrapper styles\n if (edgePadding !== edgePaddingTem || gutter !== gutterTem) {\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, speed, autoHeight);\n }\n\n if (horizontal) {\n // container styles\n if (carousel) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = getSlideWidthStyle(fixedWidth, gutter, items) +\n getSlideGutterStyle(gutter);\n\n // remove the last line and\n // add new styles\n removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\n }\n }\n\n // auto height\n if (autoHeight) { doAutoHeight(); }\n\n if (needContainerTransform) {\n doContainerTransformSilent();\n indexCached = index;\n }\n }\n\n if (bpChanged) { events.emit('newBreakpointEnd', info(e)); }\n }\n\n\n\n\n\n // === INITIALIZATION FUNCTIONS === //\n function getFreeze () {\n if (!fixedWidth && !autoWidth) {\n var a = center ? items - (items - 1) / 2 : items;\n return slideCount <= a;\n }\n\n var width = fixedWidth ? (fixedWidth + gutter) * slideCount : slidePositions[slideCount],\n vp = edgePadding ? viewport + edgePadding * 2 : viewport + gutter;\n\n if (center) {\n vp -= fixedWidth ? (viewport - fixedWidth) / 2 : (viewport - (slidePositions[index + 1] - slidePositions[index] - gutter)) / 2;\n }\n\n return width <= vp;\n }\n\n function setBreakpointZone () {\n breakpointZone = 0;\n for (var bp in responsive) {\n bp = parseInt(bp); // convert string to number\n if (windowWidth >= bp) { breakpointZone = bp; }\n }\n }\n\n // (slideBy, indexMin, indexMax) => index\n var updateIndex = (function () {\n return loop ?\n carousel ?\n // loop + carousel\n function () {\n var leftEdge = indexMin,\n rightEdge = indexMax;\n\n leftEdge += slideBy;\n rightEdge -= slideBy;\n\n // adjust edges when has edge paddings\n // or fixed-width slider with extra space on the right side\n if (edgePadding) {\n leftEdge += 1;\n rightEdge -= 1;\n } else if (fixedWidth) {\n if ((viewport + gutter)%(fixedWidth + gutter)) { rightEdge -= 1; }\n }\n\n if (cloneCount) {\n if (index > rightEdge) {\n index -= slideCount;\n } else if (index < leftEdge) {\n index += slideCount;\n }\n }\n } :\n // loop + gallery\n function() {\n if (index > indexMax) {\n while (index >= indexMin + slideCount) { index -= slideCount; }\n } else if (index < indexMin) {\n while (index <= indexMax - slideCount) { index += slideCount; }\n }\n } :\n // non-loop\n function() {\n index = Math.max(indexMin, Math.min(indexMax, index));\n };\n })();\n\n function disableUI () {\n if (!autoplay && autoplayButton) { hideElement(autoplayButton); }\n if (!nav && navContainer) { hideElement(navContainer); }\n if (!controls) {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n\n function enableUI () {\n if (autoplay && autoplayButton) { showElement(autoplayButton); }\n if (nav && navContainer) { showElement(navContainer); }\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n }\n }\n\n function freezeSlider () {\n if (frozen) { return; }\n\n // remove edge padding from inner wrapper\n if (edgePadding) { innerWrapper.style.margin = '0px'; }\n\n // add class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { addClass(slideItems[i], str); }\n addClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n disableUI();\n\n frozen = true;\n }\n\n function unfreezeSlider () {\n if (!frozen) { return; }\n\n // restore edge padding for inner wrapper\n // for mordern browsers\n if (edgePadding && CSSMQ) { innerWrapper.style.margin = ''; }\n\n // remove class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { removeClass(slideItems[i], str); }\n removeClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n enableUI();\n\n frozen = false;\n }\n\n function disableSlider () {\n if (disabled) { return; }\n\n sheet.disabled = true;\n container.className = container.className.replace(newContainerClasses.substring(1), '');\n removeAttrs(container, ['style']);\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { hideElement(slideItems[j]); }\n hideElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // vertical slider\n if (!horizontal || !carousel) { removeAttrs(innerWrapper, ['style']); }\n\n // gallery\n if (!carousel) {\n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i];\n removeAttrs(item, ['style']);\n removeClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // update tools\n disableUI();\n\n disabled = true;\n }\n\n function enableSlider () {\n if (!disabled) { return; }\n\n sheet.disabled = false;\n container.className += newContainerClasses;\n doContainerTransformSilent();\n\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { showElement(slideItems[j]); }\n showElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // gallery\n if (!carousel) {\n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i],\n classN = i < index + items ? animateIn : animateNormal;\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, classN);\n }\n }\n\n // update tools\n enableUI();\n\n disabled = false;\n }\n\n function updateLiveRegion () {\n var str = getLiveRegionStr();\n if (liveregionCurrent.innerHTML !== str) { liveregionCurrent.innerHTML = str; }\n }\n\n function getLiveRegionStr () {\n var arr = getVisibleSlideRange(),\n start = arr[0] + 1,\n end = arr[1] + 1;\n return start === end ? start + '' : start + ' to ' + end;\n }\n\n function getVisibleSlideRange (val) {\n if (val == null) { val = getContainerTransformValue(); }\n var start = index, end, rangestart, rangeend;\n\n // get range start, range end for autoWidth and fixedWidth\n if (center || edgePadding) {\n if (autoWidth || fixedWidth) {\n rangestart = - (parseFloat(val) + edgePadding);\n rangeend = rangestart + viewport + edgePadding * 2;\n }\n } else {\n if (autoWidth) {\n rangestart = slidePositions[index];\n rangeend = rangestart + viewport;\n }\n }\n\n // get start, end\n // - check auto width\n if (autoWidth) {\n slidePositions.forEach(function(point, i) {\n if (i < slideCountNew) {\n if ((center || edgePadding) && point <= rangestart + 0.5) { start = i; }\n if (rangeend - point >= 0.5) { end = i; }\n }\n });\n\n // - check percentage width, fixed width\n } else {\n\n if (fixedWidth) {\n var cell = fixedWidth + gutter;\n if (center || edgePadding) {\n start = Math.floor(rangestart/cell);\n end = Math.ceil(rangeend/cell - 1);\n } else {\n end = start + Math.ceil(viewport/cell) - 1;\n }\n\n } else {\n if (center || edgePadding) {\n var a = items - 1;\n if (center) {\n start -= a / 2;\n end = index + a / 2;\n } else {\n end = index + a;\n }\n\n if (edgePadding) {\n var b = edgePadding * items / viewport;\n start -= b;\n end += b;\n }\n\n start = Math.floor(start);\n end = Math.ceil(end);\n } else {\n end = start + items - 1;\n }\n }\n\n start = Math.max(start, 0);\n end = Math.min(end, slideCountNew - 1);\n }\n\n return [start, end];\n }\n\n function doLazyLoad () {\n if (lazyload && !disable) {\n var arg = getVisibleSlideRange();\n arg.push(lazyloadSelector);\n\n getImageArray.apply(null, arg).forEach(function (img) {\n if (!hasClass(img, imgCompleteClass)) {\n // stop propagation transitionend event to container\n var eve = {};\n eve[TRANSITIONEND] = function (e) { e.stopPropagation(); };\n addEvents(img, eve);\n\n addEvents(img, imgEvents);\n\n // update src\n img.src = getAttr(img, 'data-src');\n\n // update srcset\n var srcset = getAttr(img, 'data-srcset');\n if (srcset) { img.srcset = srcset; }\n\n addClass(img, 'loading');\n }\n });\n }\n }\n\n function onImgLoaded (e) {\n imgLoaded(getTarget(e));\n }\n\n function onImgFailed (e) {\n imgFailed(getTarget(e));\n }\n\n function imgLoaded (img) {\n addClass(img, 'loaded');\n imgCompleted(img);\n }\n\n function imgFailed (img) {\n addClass(img, 'failed');\n imgCompleted(img);\n }\n\n function imgCompleted (img) {\n addClass(img, imgCompleteClass);\n removeClass(img, 'loading');\n removeEvents(img, imgEvents);\n }\n\n function getImageArray (start, end, imgSelector) {\n var imgs = [];\n if (!imgSelector) { imgSelector = 'img'; }\n\n while (start <= end) {\n forEach(slideItems[start].querySelectorAll(imgSelector), function (img) { imgs.push(img); });\n start++;\n }\n\n return imgs;\n }\n\n // check if all visible images are loaded\n // and update container height if it's done\n function doAutoHeight () {\n var imgs = getImageArray.apply(null, getVisibleSlideRange());\n raf(function(){ imgsLoadedCheck(imgs, updateInnerWrapperHeight); });\n }\n\n function imgsLoadedCheck (imgs, cb) {\n // execute callback function if all images are complete\n if (imgsComplete) { return cb(); }\n\n // check image classes\n imgs.forEach(function (img, index) {\n if (!lazyload && img.complete) { imgCompleted(img); } // Check image.complete\n if (hasClass(img, imgCompleteClass)) { imgs.splice(index, 1); }\n });\n\n // execute callback function if selected images are all complete\n if (!imgs.length) { return cb(); }\n\n // otherwise execute this functiona again\n raf(function(){ imgsLoadedCheck(imgs, cb); });\n }\n\n function additionalUpdates () {\n doLazyLoad();\n updateSlideStatus();\n updateLiveRegion();\n updateControlsStatus();\n updateNavStatus();\n }\n\n\n function update_carousel_transition_duration () {\n if (carousel && autoHeight) {\n middleWrapper.style[TRANSITIONDURATION] = speed / 1000 + 's';\n }\n }\n\n function getMaxSlideHeight (slideStart, slideRange) {\n var heights = [];\n for (var i = slideStart, l = Math.min(slideStart + slideRange, slideCountNew); i < l; i++) {\n heights.push(slideItems[i].offsetHeight);\n }\n\n return Math.max.apply(null, heights);\n }\n\n // update inner wrapper height\n // 1. get the max-height of the visible slides\n // 2. set transitionDuration to speed\n // 3. update inner wrapper height to max-height\n // 4. set transitionDuration to 0s after transition done\n function updateInnerWrapperHeight () {\n var maxHeight = autoHeight ? getMaxSlideHeight(index, items) : getMaxSlideHeight(cloneCount, slideCount),\n wp = middleWrapper ? middleWrapper : innerWrapper;\n\n if (wp.style.height !== maxHeight) { wp.style.height = maxHeight + 'px'; }\n }\n\n // get the distance from the top edge of the first slide to each slide\n // (init) => slidePositions\n function setSlidePositions () {\n slidePositions = [0];\n var attr = horizontal ? 'left' : 'top',\n attr2 = horizontal ? 'right' : 'bottom',\n base = slideItems[0].getBoundingClientRect()[attr];\n\n forEach(slideItems, function(item, i) {\n // skip the first slide\n if (i) { slidePositions.push(item.getBoundingClientRect()[attr] - base); }\n // add the end edge\n if (i === slideCountNew - 1) { slidePositions.push(item.getBoundingClientRect()[attr2] - base); }\n });\n }\n\n // update slide\n function updateSlideStatus () {\n var range = getVisibleSlideRange(),\n start = range[0],\n end = range[1];\n\n forEach(slideItems, function(item, i) {\n // show slides\n if (i >= start && i <= end) {\n if (hasAttr(item, 'aria-hidden')) {\n removeAttrs(item, ['aria-hidden', 'tabindex']);\n addClass(item, slideActiveClass);\n }\n // hide slides\n } else {\n if (!hasAttr(item, 'aria-hidden')) {\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n removeClass(item, slideActiveClass);\n }\n }\n });\n }\n\n // gallery: update slide position\n function updateGallerySlidePositions () {\n var l = index + Math.min(slideCount, items);\n for (var i = slideCountNew; i--;) {\n var item = slideItems[i];\n\n if (i >= index && i < l) {\n // add transitions to visible slides when adjusting their positions\n addClass(item, 'tns-moving');\n\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n } else if (item.style.left) {\n item.style.left = '';\n addClass(item, animateNormal);\n removeClass(item, animateIn);\n }\n\n // remove outlet animation\n removeClass(item, animateOut);\n }\n\n // removing '.tns-moving'\n setTimeout(function() {\n forEach(slideItems, function(el) {\n removeClass(el, 'tns-moving');\n });\n }, 300);\n }\n\n // set tabindex on Nav\n function updateNavStatus () {\n // get current nav\n if (nav) {\n navCurrentIndex = navClicked >= 0 ? navClicked : getCurrentNavIndex();\n navClicked = -1;\n\n if (navCurrentIndex !== navCurrentIndexCached) {\n var navPrev = navItems[navCurrentIndexCached],\n navCurrent = navItems[navCurrentIndex];\n\n setAttrs(navPrev, {\n 'tabindex': '-1',\n 'aria-label': navStr + (navCurrentIndexCached + 1)\n });\n removeClass(navPrev, navActiveClass);\n\n setAttrs(navCurrent, {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navCurrent, 'tabindex');\n addClass(navCurrent, navActiveClass);\n\n navCurrentIndexCached = navCurrentIndex;\n }\n }\n }\n\n function getLowerCaseNodeName (el) {\n return el.nodeName.toLowerCase();\n }\n\n function isButton (el) {\n return getLowerCaseNodeName(el) === 'button';\n }\n\n function isAriaDisabled (el) {\n return el.getAttribute('aria-disabled') === 'true';\n }\n\n function disEnableElement (isButton, el, val) {\n if (isButton) {\n el.disabled = val;\n } else {\n el.setAttribute('aria-disabled', val.toString());\n }\n }\n\n // set 'disabled' to true on controls when reach the edges\n function updateControlsStatus () {\n if (!controls || rewind || loop) { return; }\n\n var prevDisabled = (prevIsButton) ? prevButton.disabled : isAriaDisabled(prevButton),\n nextDisabled = (nextIsButton) ? nextButton.disabled : isAriaDisabled(nextButton),\n disablePrev = (index <= indexMin) ? true : false,\n disableNext = (!rewind && index >= indexMax) ? true : false;\n\n if (disablePrev && !prevDisabled) {\n disEnableElement(prevIsButton, prevButton, true);\n }\n if (!disablePrev && prevDisabled) {\n disEnableElement(prevIsButton, prevButton, false);\n }\n if (disableNext && !nextDisabled) {\n disEnableElement(nextIsButton, nextButton, true);\n }\n if (!disableNext && nextDisabled) {\n disEnableElement(nextIsButton, nextButton, false);\n }\n }\n\n // set duration\n function resetDuration (el, str) {\n if (TRANSITIONDURATION) { el.style[TRANSITIONDURATION] = str; }\n }\n\n function getSliderWidth () {\n return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\n }\n\n function getCenterGap (num) {\n if (num == null) { num = index; }\n\n var gap = edgePadding ? gutter : 0;\n return autoWidth ? ((viewport - gap) - (slidePositions[num + 1] - slidePositions[num] - gutter))/2 :\n fixedWidth ? (viewport - fixedWidth) / 2 :\n (items - 1) / 2;\n }\n\n function getRightBoundary () {\n var gap = edgePadding ? gutter : 0,\n result = (viewport + gap) - getSliderWidth();\n\n if (center && !loop) {\n result = fixedWidth ? - (fixedWidth + gutter) * (slideCountNew - 1) - getCenterGap() :\n getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\n }\n if (result > 0) { result = 0; }\n\n return result;\n }\n\n function getContainerTransformValue (num) {\n if (num == null) { num = index; }\n\n var val;\n if (horizontal && !autoWidth) {\n if (fixedWidth) {\n val = - (fixedWidth + gutter) * num;\n if (center) { val += getCenterGap(); }\n } else {\n var denominator = TRANSFORM ? slideCountNew : items;\n if (center) { num -= getCenterGap(); }\n val = - num * 100 / denominator;\n }\n } else {\n val = - slidePositions[num];\n if (center && autoWidth) {\n val += getCenterGap();\n }\n }\n\n if (hasRightDeadZone) { val = Math.max(val, rightBoundary); }\n\n val += (horizontal && !autoWidth && !fixedWidth) ? '%' : 'px';\n\n return val;\n }\n\n function doContainerTransformSilent (val) {\n resetDuration(container, '0s');\n doContainerTransform(val);\n }\n\n function doContainerTransform (val) {\n if (val == null) { val = getContainerTransformValue(); }\n container.style[transformAttr] = transformPrefix + val + transformPostfix;\n }\n\n function animateSlide (number, classOut, classIn, isOut) {\n var l = number + items;\n if (!loop) { l = Math.min(l, slideCountNew); }\n\n for (var i = number; i < l; i++) {\n var item = slideItems[i];\n\n // set item positions\n if (!isOut) { item.style.left = (i - index) * 100 / items + '%'; }\n\n if (animateDelay && TRANSITIONDELAY) {\n item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\n }\n removeClass(item, classOut);\n addClass(item, classIn);\n\n if (isOut) { slideItemsOut.push(item); }\n }\n }\n\n // make transfer after click/drag:\n // 1. change 'transform' property for mordern browsers\n // 2. change 'left' property for legacy browsers\n var transformCore = (function () {\n return carousel ?\n function () {\n resetDuration(container, '');\n if (TRANSITIONDURATION || !speed) {\n // for morden browsers with non-zero duration or\n // zero duration for all browsers\n doContainerTransform();\n // run fallback function manually\n // when duration is 0 / container is hidden\n if (!speed || !isVisible(container)) { onTransitionEnd(); }\n\n } else {\n // for old browser with non-zero duration\n jsTransform(container, transformAttr, transformPrefix, transformPostfix, getContainerTransformValue(), speed, onTransitionEnd);\n }\n\n if (!horizontal) { updateContentWrapperHeight(); }\n } :\n function () {\n slideItemsOut = [];\n\n var eve = {};\n eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\n removeEvents(slideItems[indexCached], eve);\n addEvents(slideItems[index], eve);\n\n animateSlide(indexCached, animateIn, animateOut, true);\n animateSlide(index, animateNormal, animateIn);\n\n // run fallback function manually\n // when transition or animation not supported / duration is 0\n if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) { onTransitionEnd(); }\n };\n })();\n\n function render (e, sliderMoved) {\n if (updateIndexBeforeTransform) { updateIndex(); }\n\n // render when slider was moved (touch or drag) even though index may not change\n if (index !== indexCached || sliderMoved) {\n // events\n events.emit('indexChanged', info());\n events.emit('transitionStart', info());\n if (autoHeight) { doAutoHeight(); }\n\n // pause autoplay when click or keydown from user\n if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) { stopAutoplay(); }\n\n running = true;\n transformCore();\n }\n }\n\n /*\n * Transfer prefixed properties to the same format\n * CSS: -Webkit-Transform => webkittransform\n * JS: WebkitTransform => webkittransform\n * @param {string} str - property\n *\n */\n function strTrans (str) {\n return str.toLowerCase().replace(/-/g, '');\n }\n\n // AFTER TRANSFORM\n // Things need to be done after a transfer:\n // 1. check index\n // 2. add classes to visible slide\n // 3. disable controls buttons when reach the first/last slide in non-loop slider\n // 4. update nav status\n // 5. lazyload images\n // 6. update container height\n function onTransitionEnd (event) {\n // check running on gallery mode\n // make sure trantionend/animationend events run only once\n if (carousel || running) {\n events.emit('transitionEnd', info(event));\n\n if (!carousel && slideItemsOut.length > 0) {\n for (var i = 0; i < slideItemsOut.length; i++) {\n var item = slideItemsOut[i];\n // set item positions\n item.style.left = '';\n\n if (ANIMATIONDELAY && TRANSITIONDELAY) {\n item.style[ANIMATIONDELAY] = '';\n item.style[TRANSITIONDELAY] = '';\n }\n removeClass(item, animateOut);\n addClass(item, animateNormal);\n }\n }\n\n /* update slides, nav, controls after checking ...\n * => legacy browsers who don't support 'event'\n * have to check event first, otherwise event.target will cause an error\n * => or 'gallery' mode:\n * + event target is slide item\n * => or 'carousel' mode:\n * + event target is container,\n * + event.property is the same with transform attribute\n */\n if (!event ||\n !carousel && event.target.parentNode === container ||\n event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\n\n if (!updateIndexBeforeTransform) {\n var indexTem = index;\n updateIndex();\n if (index !== indexTem) {\n events.emit('indexChanged', info());\n\n doContainerTransformSilent();\n }\n }\n\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n running = false;\n indexCached = index;\n }\n }\n\n }\n\n // # ACTIONS\n function goTo (targetIndex, e) {\n if (freeze) { return; }\n\n // prev slideBy\n if (targetIndex === 'prev') {\n onControlsClick(e, -1);\n\n // next slideBy\n } else if (targetIndex === 'next') {\n onControlsClick(e, 1);\n\n // go to exact slide\n } else {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n var absIndex = getAbsIndex(),\n indexGap = 0;\n\n if (targetIndex === 'first') {\n indexGap = - absIndex;\n } else if (targetIndex === 'last') {\n indexGap = carousel ? slideCount - items - absIndex : slideCount - 1 - absIndex;\n } else {\n if (typeof targetIndex !== 'number') { targetIndex = parseInt(targetIndex); }\n\n if (!isNaN(targetIndex)) {\n // from directly called goTo function\n if (!e) { targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex)); }\n\n indexGap = targetIndex - absIndex;\n }\n }\n\n // gallery: make sure new page won't overlap with current page\n if (!carousel && indexGap && Math.abs(indexGap) < items) {\n var factor = indexGap > 0 ? 1 : -1;\n indexGap += (index + indexGap - slideCount) >= indexMin ? slideCount * factor : slideCount * 2 * factor * -1;\n }\n\n index += indexGap;\n\n // make sure index is in range\n if (carousel && loop) {\n if (index < indexMin) { index += slideCount; }\n if (index > indexMax) { index -= slideCount; }\n }\n\n // if index is changed, start rendering\n if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\n render(e);\n }\n\n }\n }\n\n // on controls click\n function onControlsClick (e, dir) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n var passEventObject;\n\n if (!dir) {\n e = getEvent(e);\n var target = getTarget(e);\n\n while (target !== controlsContainer && [prevButton, nextButton].indexOf(target) < 0) { target = target.parentNode; }\n\n var targetIn = [prevButton, nextButton].indexOf(target);\n if (targetIn >= 0) {\n passEventObject = true;\n dir = targetIn === 0 ? -1 : 1;\n }\n }\n\n if (rewind) {\n if (index === indexMin && dir === -1) {\n goTo('last', e);\n return;\n } else if (index === indexMax && dir === 1) {\n goTo('first', e);\n return;\n }\n }\n\n if (dir) {\n index += slideBy * dir;\n if (autoWidth) { index = Math.floor(index); }\n // pass e when click control buttons or keydown\n render((passEventObject || (e && e.type === 'keydown')) ? e : null);\n }\n }\n\n // on nav click\n function onNavClick (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n e = getEvent(e);\n var target = getTarget(e), navIndex;\n\n // find the clicked nav item\n while (target !== navContainer && !hasAttr(target, 'data-nav')) { target = target.parentNode; }\n if (hasAttr(target, 'data-nav')) {\n var navIndex = navClicked = Number(getAttr(target, 'data-nav')),\n targetIndexBase = fixedWidth || autoWidth ? navIndex * slideCount / pages : navIndex * items,\n targetIndex = navAsThumbnails ? navIndex : Math.min(Math.ceil(targetIndexBase), slideCount - 1);\n goTo(targetIndex, e);\n\n if (navCurrentIndex === navIndex) {\n if (animating) { stopAutoplay(); }\n navClicked = -1; // reset navClicked\n }\n }\n }\n\n // autoplay functions\n function setAutoplayTimer () {\n autoplayTimer = setInterval(function () {\n onControlsClick(null, autoplayDirection);\n }, autoplayTimeout);\n\n animating = true;\n }\n\n function stopAutoplayTimer () {\n clearInterval(autoplayTimer);\n animating = false;\n }\n\n function updateAutoplayButton (action, txt) {\n setAttrs(autoplayButton, {'data-action': action});\n autoplayButton.innerHTML = autoplayHtmlStrings[0] + action + autoplayHtmlStrings[1] + txt;\n }\n\n function startAutoplay () {\n setAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('stop', autoplayText[1]); }\n }\n\n function stopAutoplay () {\n stopAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('start', autoplayText[0]); }\n }\n\n // programaitcally play/pause the slider\n function play () {\n if (autoplay && !animating) {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n function pause () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n }\n }\n\n function toggleAutoplay () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n } else {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n\n function onVisibilityChange () {\n if (doc.hidden) {\n if (animating) {\n stopAutoplayTimer();\n autoplayVisibilityPaused = true;\n }\n } else if (autoplayVisibilityPaused) {\n setAutoplayTimer();\n autoplayVisibilityPaused = false;\n }\n }\n\n function mouseoverPause () {\n if (animating) {\n stopAutoplayTimer();\n autoplayHoverPaused = true;\n }\n }\n\n function mouseoutRestart () {\n if (autoplayHoverPaused) {\n setAutoplayTimer();\n autoplayHoverPaused = false;\n }\n }\n\n // keydown events on document\n function onDocumentKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n onControlsClick(e, keyIndex === 0 ? -1 : 1);\n }\n }\n\n // on key control\n function onControlsKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (!prevButton.disabled) { onControlsClick(e, -1); }\n } else if (!nextButton.disabled) {\n onControlsClick(e, 1);\n }\n }\n }\n\n // set focus\n function setFocus (el) {\n el.focus();\n }\n\n // on key nav\n function onNavKeydown (e) {\n e = getEvent(e);\n var curElement = doc.activeElement;\n if (!hasAttr(curElement, 'data-nav')) { return; }\n\n // var code = e.keyCode,\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE].indexOf(e.keyCode),\n navIndex = Number(getAttr(curElement, 'data-nav'));\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (navIndex > 0) { setFocus(navItems[navIndex - 1]); }\n } else if (keyIndex === 1) {\n if (navIndex < pages - 1) { setFocus(navItems[navIndex + 1]); }\n } else {\n navClicked = navIndex;\n goTo(navIndex, e);\n }\n }\n }\n\n function getEvent (e) {\n e = e || win.event;\n return isTouchEvent(e) ? e.changedTouches[0] : e;\n }\n function getTarget (e) {\n return e.target || win.event.srcElement;\n }\n\n function isTouchEvent (e) {\n return e.type.indexOf('touch') >= 0;\n }\n\n function preventDefaultBehavior (e) {\n e.preventDefault ? e.preventDefault() : e.returnValue = false;\n }\n\n function getMoveDirectionExpected () {\n return getTouchDirection(toDegree(lastPosition.y - initPosition.y, lastPosition.x - initPosition.x), swipeAngle) === options.axis;\n }\n\n function onPanStart (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n if (autoplay && animating) { stopAutoplayTimer(); }\n\n panStart = true;\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n\n var $ = getEvent(e);\n events.emit(isTouchEvent(e) ? 'touchStart' : 'dragStart', info(e));\n\n if (!isTouchEvent(e) && ['img', 'a'].indexOf(getLowerCaseNodeName(getTarget(e))) >= 0) {\n preventDefaultBehavior(e);\n }\n\n lastPosition.x = initPosition.x = $.clientX;\n lastPosition.y = initPosition.y = $.clientY;\n if (carousel) {\n translateInit = parseFloat(container.style[transformAttr].replace(transformPrefix, ''));\n resetDuration(container, '0s');\n }\n }\n\n function onPanMove (e) {\n if (panStart) {\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n\n if (carousel) {\n if (!rafIndex) { rafIndex = raf(function(){ panUpdate(e); }); }\n } else {\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) { preventScroll = true; }\n }\n\n if ((typeof e.cancelable !== 'boolean' || e.cancelable) && preventScroll) {\n e.preventDefault();\n }\n }\n }\n\n function panUpdate (e) {\n if (!moveDirectionExpected) {\n panStart = false;\n return;\n }\n caf(rafIndex);\n if (panStart) { rafIndex = raf(function(){ panUpdate(e); }); }\n\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) {\n if (!preventScroll && isTouchEvent(e)) { preventScroll = true; }\n\n try {\n if (e.type) { events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e)); }\n } catch(err) {}\n\n var x = translateInit,\n dist = getDist(lastPosition, initPosition);\n if (!horizontal || fixedWidth || autoWidth) {\n x += dist;\n x += 'px';\n } else {\n var percentageX = TRANSFORM ? dist * items * 100 / ((viewport + gutter) * slideCountNew): dist * 100 / (viewport + gutter);\n x += percentageX;\n x += '%';\n }\n\n container.style[transformAttr] = transformPrefix + x + transformPostfix;\n }\n }\n\n function onPanEnd (e) {\n if (panStart) {\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n if (carousel) { resetDuration(container, ''); }\n panStart = false;\n\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n var dist = getDist(lastPosition, initPosition);\n\n if (Math.abs(dist)) {\n // drag vs click\n if (!isTouchEvent(e)) {\n // prevent \"click\"\n var target = getTarget(e);\n addEvents(target, {'click': function preventClick (e) {\n preventDefaultBehavior(e);\n removeEvents(target, {'click': preventClick});\n }});\n }\n\n if (carousel) {\n rafIndex = raf(function() {\n if (horizontal && !autoWidth) {\n var indexMoved = - dist * items / (viewport + gutter);\n indexMoved = dist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\n index += indexMoved;\n } else {\n var moved = - (translateInit + dist);\n if (moved <= 0) {\n index = indexMin;\n } else if (moved >= slidePositions[slideCountNew - 1]) {\n index = indexMax;\n } else {\n var i = 0;\n while (i < slideCountNew && moved >= slidePositions[i]) {\n index = i;\n if (moved > slidePositions[i] && dist < 0) { index += 1; }\n i++;\n }\n }\n }\n\n render(e, dist);\n events.emit(isTouchEvent(e) ? 'touchEnd' : 'dragEnd', info(e));\n });\n } else {\n if (moveDirectionExpected) {\n onControlsClick(e, dist > 0 ? -1 : 1);\n }\n }\n }\n }\n\n // reset\n if (options.preventScrollOnTouch === 'auto') { preventScroll = false; }\n if (swipeAngle) { moveDirectionExpected = '?'; }\n if (autoplay && !animating) { setAutoplayTimer(); }\n }\n\n // === RESIZE FUNCTIONS === //\n // (slidePositions, index, items) => vertical_conentWrapper.height\n function updateContentWrapperHeight () {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.style.height = slidePositions[index + items] - slidePositions[index] + 'px';\n }\n\n function getPages () {\n var rough = fixedWidth ? (fixedWidth + gutter) * slideCount / viewport : slideCount / items;\n return Math.min(Math.ceil(rough), slideCount);\n }\n\n /*\n * 1. update visible nav items list\n * 2. add \"hidden\" attributes to previous visible nav items\n * 3. remove \"hidden\" attrubutes to new visible nav items\n */\n function updateNavVisibility () {\n if (!nav || navAsThumbnails) { return; }\n\n if (pages !== pagesCached) {\n var min = pagesCached,\n max = pages,\n fn = showElement;\n\n if (pagesCached > pages) {\n min = pages;\n max = pagesCached;\n fn = hideElement;\n }\n\n while (min < max) {\n fn(navItems[min]);\n min++;\n }\n\n // cache pages\n pagesCached = pages;\n }\n }\n\n function info (e) {\n return {\n container: container,\n slideItems: slideItems,\n navContainer: navContainer,\n navItems: navItems,\n controlsContainer: controlsContainer,\n hasControls: hasControls,\n prevButton: prevButton,\n nextButton: nextButton,\n items: items,\n slideBy: slideBy,\n cloneCount: cloneCount,\n slideCount: slideCount,\n slideCountNew: slideCountNew,\n index: index,\n indexCached: indexCached,\n displayIndex: getCurrentSlide(),\n navCurrentIndex: navCurrentIndex,\n navCurrentIndexCached: navCurrentIndexCached,\n pages: pages,\n pagesCached: pagesCached,\n sheet: sheet,\n isOn: isOn,\n event: e || {},\n };\n }\n\n return {\n version: '2.9.3',\n getInfo: info,\n events: events,\n goTo: goTo,\n play: play,\n pause: pause,\n isOn: isOn,\n updateSliderHeight: updateInnerWrapperHeight,\n refresh: initSliderTransform,\n destroy: destroy,\n rebuild: function() {\n return tns(extend(options, optionsElements));\n }\n };\n};\n","// get css-calc \n// @return - false | calc | -webkit-calc | -moz-calc\n// @usage - var calc = getCalc(); \nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function calc() {\n var doc = document, \n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'), \n result = false;\n\n body.appendChild(div);\n try {\n var str = '(10px * 10)',\n vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\n val;\n for (var i = 0; i < 3; i++) {\n val = vals[i];\n div.style.width = val;\n if (div.offsetWidth === 100) { \n result = val.replace(str, ''); \n break;\n }\n }\n } catch (e) {}\n \n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return result;\n}","// get subpixel support value\n// @return - boolean\nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function percentageLayout() {\n // check subpixel layout supporting\n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n wrapper = doc.createElement('div'),\n outer = doc.createElement('div'),\n str = '',\n count = 70,\n perPage = 3,\n supported = false;\n\n wrapper.className = \"tns-t-subp2\";\n outer.className = \"tns-t-ct\";\n\n for (var i = 0; i < count; i++) {\n str += '
';\n }\n\n outer.innerHTML = str;\n wrapper.appendChild(outer);\n body.appendChild(wrapper);\n\n supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\n\n body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\n\n return supported;\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function mediaquerySupport () {\n if (window.matchMedia || window.msMatchMedia) {\n return true;\n }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'),\n style = doc.createElement('style'),\n rule = '@media all and (min-width:1px){.tns-mq-test{position:absolute}}',\n position;\n\n style.type = 'text/css';\n div.className = 'tns-mq-test';\n\n body.appendChild(style);\n body.appendChild(div);\n\n if (style.styleSheet) {\n style.styleSheet.cssText = rule;\n } else {\n style.appendChild(doc.createTextNode(rule));\n }\n\n position = window.getComputedStyle ? window.getComputedStyle(div).position : div.currentStyle['position'];\n\n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return position === \"absolute\";\n}\n","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function has3DTransforms(tf){\n if (!tf) { return false; }\n if (!window.getComputedStyle) { return false; }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n el = doc.createElement('p'),\n has3d,\n cssTF = tf.length > 9 ? '-' + tf.slice(0, -9).toLowerCase() + '-' : '';\n\n cssTF += 'transform';\n\n // Add it to the body to get the computed style\n body.insertBefore(el, null);\n\n el.style[tf] = 'translate3d(1px,1px,1px)';\n has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\n\n body.fake ? resetFakeBody(body, docOverflow) : el.remove();\n\n return (has3d !== undefined && has3d.length > 0 && has3d !== \"none\");\n}\n","export function getSlideId() {\n var id = window.tnsId;\n window.tnsId = !id ? 1 : id + 1;\n \n return 'tns' + window.tnsId;\n}","// create and append style sheet\nexport function createStyleSheet (media, nonce) {\n // Create the