File: D:/HostingSpaces/blijegasten/blijegasten.be/wwwroot/js/site/vendor.js.map
{"version":3,"sources":["webpack:///./node_modules/flatpickr/dist/l10n/nl.js","webpack:///./node_modules/objectFitPolyfill/dist/objectFitPolyfill.min.js","webpack:///./node_modules/body-scroll-lock/lib/bodyScrollLock.min.js","webpack:///./node_modules/hammerjs/hammer.js","webpack:///./node_modules/flatpickr/dist/flatpickr.js"],"names":["exports","fp","window","undefined","flatpickr","l10ns","Dutch","weekdays","shorthand","longhand","months","firstDayOfWeek","weekAbbreviation","rangeSeparator","scrollTitle","toggleTitle","time_24hr","ordinal","nth","nl","default","Object","defineProperty","value","factory","t","navigator","userAgent","match","n","parseInt","document","documentElement","style","o","e","i","l","a","d","split","length","clientWidth","clientHeight","indexOf","dataset","objectFit","getAttribute","objectPosition","parentNode","getComputedStyle","getPropertyValue","position","overflow","display","height","className","top","right","bottom","left","width","marginTop","marginLeft","Event","querySelectorAll","nodeName","toLowerCase","complete","addEventListener","this","readyState","objectFitPolyfill","Array","isArray","from","removeEventListener","u","some","options","allowTouchMove","c","event","target","touches","preventDefault","setTimeout","m","body","paddingRight","f","platform","test","maxTouchPoints","s","v","disableBodyScroll","r","console","error","targetElement","concat","ontouchstart","targetTouches","clientY","ontouchmove","scrollTop","scrollHeight","stopPropagation","passive","reserveScrollBarGap","innerWidth","clearAllBodyScrollLocks","forEach","enableBodyScroll","filter","exportName","assign","VENDOR_PREFIXES","TEST_ELEMENT","createElement","round","Math","abs","now","Date","setTimeoutContext","fn","timeout","context","bindFn","invokeArrayArg","arg","each","obj","iterator","call","hasOwnProperty","deprecate","method","name","message","deprecationMessage","Error","stack","replace","log","warn","apply","arguments","TypeError","output","index","source","nextKey","extend","dest","src","merge","keys","inherit","child","base","properties","childP","baseP","prototype","create","constructor","_super","boolOrFn","val","args","ifUndefined","val1","val2","addEventListeners","types","handler","splitStr","type","removeEventListeners","hasParent","node","parent","inStr","str","find","trim","inArray","findByKey","toArray","slice","uniqueArray","key","sort","results","values","push","b","prefixed","property","prefix","prop","camelProp","toUpperCase","_uniqueId","getWindowForElement","element","doc","ownerDocument","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","PROPS_XY","PROPS_CLIENT_XY","Input","manager","callback","self","inputTarget","domHandler","ev","enable","init","inputHandler","eventType","input","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","offset","offsetDelta","prevDelta","prevInput","x","deltaX","y","deltaY","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","scale","start","end","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","direction","last","lastInterval","computeIntervalInputData","srcEvent","computeInputData","emit","recognize","clientX","p1","p2","props","sqrt","atan2","PI","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MouseInput","pressed","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","store","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","splice","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SingleTouchInput","started","normalizeSingleTouches","all","changed","changedTouches","TOUCH_INPUT_MAP","TouchInput","targetIds","getTouches","allTouches","identifier","changedTargetTouches","touch","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","set","compute","actions","update","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","join","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","DIRECTION_LEFT","DIRECTION_UP","preventSrc","Recognizer","defaults","id","state","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","get","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","count","Hammer","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","isValid","threshold","DIRECTION_HORIZONTAL","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","clearTimeout","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","handlers","oldCssProps","toggleCssProps","item","add","stop","force","stopped","curRecognizer","existing","remove","on","events","off","data","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","DIRECTION_NONE","DIRECTION_RIGHT","DIRECTION_DOWN","DIRECTION_VERTICAL","DIRECTION_ALL","Tap","Pan","Swipe","Pinch","Rotate","Press","module","__assign","p","HOOKS","_disable","_enable","allowInput","altFormat","altInput","altInputClass","animate","ariaDateFormat","clickOpens","closeOnSelect","conjunction","dateFormat","defaultHour","defaultMinute","defaultSeconds","disable","disableMobile","enableSeconds","enableTime","errorHandler","err","getWeek","givenDate","date","getTime","setHours","setDate","getDate","getDay","week1","getFullYear","hourIncrement","ignoredFocusElements","inline","locale","minuteIncrement","mode","monthSelectorType","nextArrow","noCalendar","onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition","plugins","positionElement","prevArrow","shorthandCurrentMonth","showMonths","static","weekNumbers","wrap","english","daysInMonth","amPM","yearAriaLabel","hourAriaLabel","minuteAriaLabel","pad","number","int","bool","debounce","func","wait","immediate","arrayify","toggleClass","elem","classList","tag","content","textContent","clearNode","firstChild","removeChild","createNumberInput","inputClassName","opts","wrapper","numInput","arrowUp","arrowDown","pattern","setAttribute","appendChild","doNothing","monthToStr","monthNumber","revFormat","D","F","dateObj","monthName","setMonth","G","hour","parseFloat","H","J","day","K","getHours","RegExp","M","shortMonth","S","seconds","setSeconds","U","_","unixSeconds","W","weekNum","weekNumber","Y","year","setFullYear","Z","ISODate","h","minutes","setMinutes","j","month","unixMillSeconds","w","tokenRegex","formats","toISOString","getMonth","getSeconds","getMinutes","String","substring","createDateFormatter","_a","_b","config","_c","l10n","frmt","overrideLocale","formatDate","map","arr","createDateParser","givenFormat","timeless","customLocale","parsedDate","dateOrig","toFixed","format","datestr","parseDate","matched","ops","matchIndex","regexStr","token_1","isBackSlash","escaped","exec","isNaN","compareDates","date1","date2","duration","FlatpickrInstance","instanceConfig","defaultConfig","bindToInstance","bind","setCalendarWidth","requestAnimationFrame","calendarContainer","visibility","daysContainer","daysWidth","days","offsetWidth","weekWrapper","removeProperty","updateTime","selectedDates","setDefaultTime","isKeyDown","min","max","step","curValue","delta","newValue","isHourElem","hourElement","isMinuteElem","minuteElement","incrementNumInput","timeWrapper","prevValue","setHoursFromInputs","updateValue","_debouncedChange","hours","secondElement","limitMinHours","minTime","minDate","minDateHasTime","latestSelectedDateObj","maxTime","maxDate","maxDateHasTime","setHoursFromDate","setDefaultHours","minHr","minMinutes","maxHr","maxMinutes","isMobile","onYearInput","toString","changeYear","el","_handlers","onClick","evt","triggerChange","triggerEvent","jumpToDate","jumpDate","jumpTo","oldYear","currentYear","oldMonth","currentMonth","buildMonthSwitch","redraw","timeIncrement","contains","inputElem","createDay","dayNumber","dateIsEnabled","isEnabled","dayElement","$i","todayDateElem","tabIndex","isDateSelected","selectedDateElem","isDateInRange","insertAdjacentHTML","focusOnDayElem","targetNode","focus","onMouseOver","getFirstAvailableDay","startMonth","endMonth","children","startIndex","endIndex","focusOnDay","current","dayFocused","isInView","activeElement","startElem","givenMonth","loopDelta","numMonthDays","changeMonth","getNextAvailableDay","buildMonthDays","firstOfMonth","prevMonthDays","utils","getDaysInMonth","createDocumentFragment","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayIndex","dayNum","dayContainer","buildDays","frag","shouldBuildMonth","monthsDropdownContainer","innerHTML","selected","buildMonth","monthElement","container","monthNavFragment","selectedMonth","yearInput","tabindex","yearElement","getElementsByTagName","disabled","buildMonths","monthNav","prevMonthNav","yearElements","monthElements","nextMonthNav","buildWeekdays","weekdayContainer","updateWeekdays","isOffset","_hidePrevMonthArrow","_hideNextMonthArrow","updateNavigationCurrentMonth","isCalendarElem","appendTo","documentClick","isOpen","eventTarget_1","composedPath","isCalendarElement","isInput","path","lostFocus","relatedTarget","isIgnored","timeContainer","close","clear","newYear","newYearNum","isNewYear","dateToCheck","array","parsed","to","allowKeydown","allowInlineKeydown","keyCode","blur","open","isTimeObj","focusAndClose","selectDate","delta_1","ctrlKey","currentYearElement","elems","pluginElements","shiftKey","charAt","hoverDate","firstElementChild","initialDate","rangeStartDate","rangeEndDate","containsDisabled","minRange","maxRange","_loop_1","ts","ts1","ts2","dayElem","timestamp","outOfRange","onResize","positionCalendar","minMaxDateSetter","inverseDateObj","removeAttribute","setupLocale","JSON","parse","stringify","customPositionElement","_positionElement","calendarHeight","reduce","acc","offsetHeight","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","getBoundingClientRect","distanceFromBottom","innerHeight","showOnTop","pageYOffset","pageXOffset","rightMost","centerMost","styleSheets","bodyWidth","centerLeft","centerIndex","cssRules","centerStyle","insertRule","centerBefore","msMaxTouchPoints","findParent","condition","selectedDate","shouldChangeMonth","selectedIndex","showTimeInput","single","range","loadedPlugins","_bind","_setHoursFromDate","_positionCalendar","triggerChangeEvent","toInitial","mobileInput","_initialDate","_createElement","lastChild","insertBefore","_type","k","click","wasOpen","select","option","CALLBACKS","setSelectedDate","toggle","inputDate","dates","parseDateRules","rule","hooks","getDateStr","dObj","mobileFormatStr","onMonthNavClick","isPrevMonth","isNextMonth","boolOpts","userConfig","timeMode","defaultDateFormat","defaultAltFormat","_minDate","_maxDate","minMaxTimeSetter","_minTime","_maxTime","hook","pluginConf","parseConfig","querySelector","placeholder","required","nextSibling","preloadedDate","defaultDate","_showTimeInput","setupDates","yr","fragment","__hidePrevMonthArrow","__hideNextMonthArrow","innerContainer","buildWeeks","rContainer","separator","hourInput","minuteInput","military2ampm","secondInput","title","buildTime","customAppend","nodeType","build","inputType","defaultValue","setupMobile","debouncedResize","capture","bindEvents","isSafari","_flatpickr","nodeList","nodes","HTMLElement","instances","_i","args_1","HTMLCollection","NodeList","selector","Node","en","localize","setDefaults","jQuery","fp_incr"],"mappings":"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","file":"/js/site/vendor.js","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = global || self, factory(global.nl = {}));\n}(this, function (exports) { 'use strict';\n\n var fp = typeof window !== \"undefined\" && window.flatpickr !== undefined\n ? window.flatpickr\n : {\n l10ns: {}\n };\n var Dutch = {\n weekdays: {\n shorthand: [\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"],\n longhand: [\n \"zondag\",\n \"maandag\",\n \"dinsdag\",\n \"woensdag\",\n \"donderdag\",\n \"vrijdag\",\n \"zaterdag\",\n ]\n },\n months: {\n shorthand: [\n \"jan\",\n \"feb\",\n \"mrt\",\n \"apr\",\n \"mei\",\n \"jun\",\n \"jul\",\n \"aug\",\n \"sept\",\n \"okt\",\n \"nov\",\n \"dec\",\n ],\n longhand: [\n \"januari\",\n \"februari\",\n \"maart\",\n \"april\",\n \"mei\",\n \"juni\",\n \"juli\",\n \"augustus\",\n \"september\",\n \"oktober\",\n \"november\",\n \"december\",\n ]\n },\n firstDayOfWeek: 1,\n weekAbbreviation: \"wk\",\n rangeSeparator: \" tot \",\n scrollTitle: \"Scroll voor volgende / vorige\",\n toggleTitle: \"Klik om te wisselen\",\n time_24hr: true,\n ordinal: function (nth) {\n if (nth === 1 || nth === 8 || nth >= 20)\n return \"ste\";\n return \"de\";\n }\n };\n fp.l10ns.nl = Dutch;\n var nl = fp.l10ns;\n\n exports.Dutch = Dutch;\n exports.default = nl;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n","!function(){\"use strict\";if(\"undefined\"!=typeof window){var t=window.navigator.userAgent.match(/Edge\\/(\\d{2})\\./),n=!!t&&16<=parseInt(t[1],10);if(!(\"objectFit\"in document.documentElement.style!=!1)||n){var o=function(t,e,i){var n,o,l,a,d;if((i=i.split(\" \")).length<2&&(i[1]=i[0]),\"x\"===t)n=i[0],o=i[1],l=\"left\",a=\"right\",d=e.clientWidth;else{if(\"y\"!==t)return;n=i[1],o=i[0],l=\"top\",a=\"bottom\",d=e.clientHeight}if(n!==l&&o!==l){if(n!==a&&o!==a)return\"center\"===n||\"50%\"===n?(e.style[l]=\"50%\",void(e.style[\"margin-\"+l]=d/-2+\"px\")):void(0<=n.indexOf(\"%\")?(n=parseInt(n))<50?(e.style[l]=n+\"%\",e.style[\"margin-\"+l]=d*(n/-100)+\"px\"):(n=100-n,e.style[a]=n+\"%\",e.style[\"margin-\"+a]=d*(n/-100)+\"px\"):e.style[l]=n);e.style[a]=\"0\"}else e.style[l]=\"0\"},l=function(t){var e=t.dataset?t.dataset.objectFit:t.getAttribute(\"data-object-fit\"),i=t.dataset?t.dataset.objectPosition:t.getAttribute(\"data-object-position\");e=e||\"cover\",i=i||\"50% 50%\";var n=t.parentNode;return function(t){var e=window.getComputedStyle(t,null),i=e.getPropertyValue(\"position\"),n=e.getPropertyValue(\"overflow\"),o=e.getPropertyValue(\"display\");i&&\"static\"!==i||(t.style.position=\"relative\"),\"hidden\"!==n&&(t.style.overflow=\"hidden\"),o&&\"inline\"!==o||(t.style.display=\"block\"),0===t.clientHeight&&(t.style.height=\"100%\"),-1===t.className.indexOf(\"object-fit-polyfill\")&&(t.className=t.className+\" object-fit-polyfill\")}(n),function(t){var e=window.getComputedStyle(t,null),i={\"max-width\":\"none\",\"max-height\":\"none\",\"min-width\":\"0px\",\"min-height\":\"0px\",top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\",\"margin-top\":\"0px\",\"margin-right\":\"0px\",\"margin-bottom\":\"0px\",\"margin-left\":\"0px\"};for(var n in i)e.getPropertyValue(n)!==i[n]&&(t.style[n]=i[n])}(t),t.style.position=\"absolute\",t.style.width=\"auto\",t.style.height=\"auto\",\"scale-down\"===e&&(e=t.clientWidth<n.clientWidth&&t.clientHeight<n.clientHeight?\"none\":\"contain\"),\"none\"===e?(o(\"x\",t,i),void o(\"y\",t,i)):\"fill\"===e?(t.style.width=\"100%\",t.style.height=\"100%\",o(\"x\",t,i),void o(\"y\",t,i)):(t.style.height=\"100%\",void(\"cover\"===e&&t.clientWidth>n.clientWidth||\"contain\"===e&&t.clientWidth<n.clientWidth?(t.style.top=\"0\",t.style.marginTop=\"0\",o(\"x\",t,i)):(t.style.width=\"100%\",t.style.height=\"auto\",t.style.left=\"0\",t.style.marginLeft=\"0\",o(\"y\",t,i))))},e=function(t){if(void 0===t||t instanceof Event)t=document.querySelectorAll(\"[data-object-fit]\");else if(t&&t.nodeName)t=[t];else{if(\"object\"!=typeof t||!t.length||!t[0].nodeName)return!1;t=t}for(var e=0;e<t.length;e++)if(t[e].nodeName){var i=t[e].nodeName.toLowerCase();if(\"img\"===i){if(n)continue;t[e].complete?l(t[e]):t[e].addEventListener(\"load\",function(){l(this)})}else\"video\"===i?0<t[e].readyState?l(t[e]):t[e].addEventListener(\"loadedmetadata\",function(){l(this)}):l(t[e])}return!0};\"loading\"===document.readyState?document.addEventListener(\"DOMContentLoaded\",e):e(),window.addEventListener(\"resize\",e),window.objectFitPolyfill=e}else window.objectFitPolyfill=function(){return!1}}}();","!function(e,t){if(\"function\"==typeof define&&define.amd)define([\"exports\"],t);else if(\"undefined\"!=typeof exports)t(exports);else{var o={};t(o),e.bodyScrollLock=o}}(this,function(exports){\"use strict\";function i(e){if(Array.isArray(e)){for(var t=0,o=Array(e.length);t<e.length;t++)o[t]=e[t];return o}return Array.from(e)}Object.defineProperty(exports,\"__esModule\",{value:!0});var l=!1;if(\"undefined\"!=typeof window){var e={get passive(){l=!0}};window.addEventListener(\"testPassive\",null,e),window.removeEventListener(\"testPassive\",null,e)}function d(t){return u.some(function(e){return!(!e.options.allowTouchMove||!e.options.allowTouchMove(t))})}function c(e){var t=e||window.event;return!!d(t.target)||(1<t.touches.length||(t.preventDefault&&t.preventDefault(),!1))}function o(){setTimeout(function(){void 0!==m&&(document.body.style.paddingRight=m,m=void 0),void 0!==f&&(document.body.style.overflow=f,f=void 0)})}var a=\"undefined\"!=typeof window&&window.navigator&&window.navigator.platform&&(/iP(ad|hone|od)/.test(window.navigator.platform)||\"MacIntel\"===window.navigator.platform&&1<window.navigator.maxTouchPoints),u=[],s=!1,v=-1,f=void 0,m=void 0;exports.disableBodyScroll=function(r,e){if(a){if(!r)return void console.error(\"disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.\");if(r&&!u.some(function(e){return e.targetElement===r})){var t={targetElement:r,options:e||{}};u=[].concat(i(u),[t]),r.ontouchstart=function(e){1===e.targetTouches.length&&(v=e.targetTouches[0].clientY)},r.ontouchmove=function(e){var t,o,n,i;1===e.targetTouches.length&&(o=r,i=(t=e).targetTouches[0].clientY-v,d(t.target)||(o&&0===o.scrollTop&&0<i||(n=o)&&n.scrollHeight-n.scrollTop<=n.clientHeight&&i<0?c(t):t.stopPropagation()))},s||(document.addEventListener(\"touchmove\",c,l?{passive:!1}:void 0),s=!0)}}else{n=e,setTimeout(function(){if(void 0===m){var e=!!n&&!0===n.reserveScrollBarGap,t=window.innerWidth-document.documentElement.clientWidth;e&&0<t&&(m=document.body.style.paddingRight,document.body.style.paddingRight=t+\"px\")}void 0===f&&(f=document.body.style.overflow,document.body.style.overflow=\"hidden\")});var o={targetElement:r,options:e||{}};u=[].concat(i(u),[o])}var n},exports.clearAllBodyScrollLocks=function(){a?(u.forEach(function(e){e.targetElement.ontouchstart=null,e.targetElement.ontouchmove=null}),s&&(document.removeEventListener(\"touchmove\",c,l?{passive:!1}:void 0),s=!1),u=[],v=-1):(o(),u=[])},exports.enableBodyScroll=function(t){if(a){if(!t)return void console.error(\"enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.\");t.ontouchstart=null,t.ontouchmove=null,u=u.filter(function(e){return e.targetElement!==t}),s&&0===u.length&&(document.removeEventListener(\"touchmove\",c,l?{passive:!1}:void 0),s=!1)}else(u=u.filter(function(e){return e.targetElement!==t})).length||o()}});\n","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","/* flatpickr v4.6.3, @license MIT */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.flatpickr = factory());\n}(this, function () { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation. All rights reserved.\r\n Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n this file except in compliance with the License. You may obtain a copy of the\r\n License at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n MERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\n See the Apache Version 2.0 License for specific language governing permissions\r\n and limitations under the License.\r\n ***************************************************************************** */\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\n\n var 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 ];\n var defaults = {\n _disable: [],\n _enable: [],\n allowInput: 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 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 enable: [],\n enableSeconds: false,\n enableTime: false,\n errorHandler: function (err) {\n return typeof console !== \"undefined\" && console.warn(err);\n },\n getWeek: function (givenDate) {\n var date = new Date(givenDate.getTime());\n date.setHours(0, 0, 0, 0);\n // Thursday in current week decides the year.\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n // January 4 is always in week 1.\n var week1 = new Date(date.getFullYear(), 0, 4);\n // Adjust to Thursday in week 1 and count number of weeks from date to week1.\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: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\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: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n shorthandCurrentMonth: false,\n showMonths: 1,\n static: false,\n time_24hr: false,\n weekNumbers: false,\n wrap: false\n };\n\n var 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: function (nth) {\n var 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 hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false\n };\n\n var pad = function (number) { return (\"0\" + number).slice(-2); };\n var int = function (bool) { return (bool === true ? 1 : 0); };\n /* istanbul ignore next */\n function debounce(func, wait, immediate) {\n if (immediate === void 0) { immediate = false; }\n var timeout;\n return function () {\n var context = this, args = arguments;\n timeout !== null && clearTimeout(timeout);\n timeout = window.setTimeout(function () {\n timeout = null;\n if (!immediate)\n func.apply(context, args);\n }, wait);\n if (immediate && !timeout)\n func.apply(context, args);\n };\n }\n var arrayify = function (obj) {\n return obj instanceof Array ? obj : [obj];\n };\n\n function toggleClass(elem, className, bool) {\n if (bool === true)\n return elem.classList.add(className);\n elem.classList.remove(className);\n }\n function createElement(tag, className, content) {\n var 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 }\n function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n }\n 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; // nothing found\n }\n function createNumberInput(inputClassName, opts) {\n var 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 (var 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 }\n function getEventTarget(event) {\n if (typeof event.composedPath === \"function\") {\n var path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n\n var doNothing = function () { return undefined; };\n var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\n var revFormat = {\n D: doNothing,\n F: function (dateObj, monthName, locale) {\n dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n },\n G: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n H: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n J: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n K: function (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: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n W: function (dateObj, weekNum, locale) {\n var weekNumber = parseInt(weekNum);\n var 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: function (dateObj, year) {\n dateObj.setFullYear(parseFloat(year));\n },\n Z: function (_, ISODate) { return new Date(ISODate); },\n d: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n h: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n i: function (dateObj, minutes) {\n dateObj.setMinutes(parseFloat(minutes));\n },\n j: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n l: doNothing,\n m: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n n: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n s: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n u: function (_, unixMillSeconds) {\n return new Date(parseFloat(unixMillSeconds));\n },\n w: doNothing,\n y: function (dateObj, year) {\n dateObj.setFullYear(2000 + parseFloat(year));\n }\n };\n var 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 };\n var formats = {\n // get the date in UTC\n Z: function (date) { return date.toISOString(); },\n // weekday name, short, e.g. Thu\n D: function (date, locale, options) {\n return locale.weekdays.shorthand[formats.w(date, locale, options)];\n },\n // full month name e.g. January\n F: function (date, locale, options) {\n return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n },\n // padded hour 1-12\n G: function (date, locale, options) {\n return pad(formats.h(date, locale, options));\n },\n // hours with leading zero e.g. 03\n H: function (date) { return pad(date.getHours()); },\n // day (1-30) with ordinal suffix e.g. 1st, 2nd\n J: function (date, locale) {\n return locale.ordinal !== undefined\n ? date.getDate() + locale.ordinal(date.getDate())\n : date.getDate();\n },\n // AM/PM\n K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n // shorthand month e.g. Jan, Sep, Oct, etc\n M: function (date, locale) {\n return monthToStr(date.getMonth(), true, locale);\n },\n // seconds 00-59\n S: function (date) { return pad(date.getSeconds()); },\n // unix timestamp\n U: function (date) { return date.getTime() / 1000; },\n W: function (date, _, options) {\n return options.getWeek(date);\n },\n // full year e.g. 2016\n Y: function (date) { return date.getFullYear(); },\n // day in month, padded (01-30)\n d: function (date) { return pad(date.getDate()); },\n // hour from 1-12 (am/pm)\n h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n // minutes, padded with leading zero e.g. 09\n i: function (date) { return pad(date.getMinutes()); },\n // day in month (1-30)\n j: function (date) { return date.getDate(); },\n // weekday name, full, e.g. Thursday\n l: function (date, locale) {\n return locale.weekdays.longhand[date.getDay()];\n },\n // padded month number (01-12)\n m: function (date) { return pad(date.getMonth() + 1); },\n // the month number (1-12)\n n: function (date) { return date.getMonth() + 1; },\n // seconds 0-59\n s: function (date) { return date.getSeconds(); },\n // Unix Milliseconds\n u: function (date) { return date.getTime(); },\n // number of the day of the week\n w: function (date) { return date.getDay(); },\n // last two digits of year e.g. 16 for 2016\n y: function (date) { return String(date.getFullYear()).substring(2); }\n };\n\n var createDateFormatter = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (dateObj, frmt, overrideLocale) {\n var locale = overrideLocale || l10n;\n if (config.formatDate !== undefined) {\n return config.formatDate(dateObj, frmt, locale);\n }\n return frmt\n .split(\"\")\n .map(function (c, i, arr) {\n return formats[c] && arr[i - 1] !== \"\\\\\"\n ? formats[c](dateObj, locale, config)\n : c !== \"\\\\\"\n ? c\n : \"\";\n })\n .join(\"\");\n };\n };\n var createDateParser = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (date, givenFormat, timeless, customLocale) {\n if (date !== 0 && !date)\n return undefined;\n var locale = customLocale || l10n;\n var parsedDate;\n var dateOrig = date;\n if (date instanceof Date)\n parsedDate = new Date(date.getTime());\n else if (typeof date !== \"string\" &&\n date.toFixed !== undefined // timestamp\n )\n // create a copy\n parsedDate = new Date(date);\n else if (typeof date === \"string\") {\n // date string\n var format = givenFormat || (config || defaults).dateFormat;\n var 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) // datestrings w/ timezone\n )\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 var matched = void 0, ops = [];\n for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n var token_1 = format[i];\n var isBackSlash = token_1 === \"\\\\\";\n var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n if (tokenRegex[token_1] && !escaped) {\n regexStr += tokenRegex[token_1];\n var match = new RegExp(regexStr).exec(date);\n if (match && (matched = true)) {\n ops[token_1 !== \"Y\" ? \"push\" : \"unshift\"]({\n fn: revFormat[token_1],\n val: match[++matchIndex]\n });\n }\n }\n else if (!isBackSlash)\n regexStr += \".\"; // don't really care\n ops.forEach(function (_a) {\n var fn = _a.fn, val = _a.val;\n return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n });\n }\n parsedDate = matched ? parsedDate : undefined;\n }\n }\n /* istanbul ignore next */\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 };\n };\n /**\n * Compute the difference in dates, measured in ms\n */\n function compareDates(date1, date2, timeless) {\n if (timeless === void 0) { 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 }\n var isBetween = function (ts, ts1, ts2) {\n return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n };\n var duration = {\n DAY: 86400000\n };\n\n if (typeof Object.assign !== \"function\") {\n Object.assign = function (target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!target) {\n throw TypeError(\"Cannot convert undefined or null to object\");\n }\n var _loop_1 = function (source) {\n if (source) {\n Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n }\n };\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n var source = args_1[_a];\n _loop_1(source);\n }\n return target;\n };\n }\n\n var DEBOUNCED_CHANGE_MS = 300;\n function FlatpickrInstance(element, instanceConfig) {\n var self = {\n config: __assign({}, defaults, 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: function (month, yr) {\n if (month === void 0) { month = self.currentMonth; }\n if (yr === void 0) { 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\n ? self.latestSelectedDateObj || self.config.minDate\n : undefined);\n }\n updateValue(false);\n }\n setCalendarWidth();\n self.showTimeInput =\n self.selectedDates.length > 0 || self.config.noCalendar;\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n /* TODO: investigate this further\n \n Currently, there is weird positioning behavior in safari causing pages\n to scroll up. https://github.com/chmln/flatpickr/issues/563\n \n However, most browsers are not Safari and positioning is expensive when used\n in scale. https://github.com/chmln/flatpickr/issues/1096\n */\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 var config = self.config;\n if (config.weekNumbers === false && config.showMonths === 1)\n return;\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 var 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 /**\n * The handler for all events targeting the time inputs\n */\n function updateTime(e) {\n if (self.selectedDates.length === 0) {\n setDefaultTime();\n }\n if (e !== undefined && e.type !== \"blur\") {\n timeWrapper(e);\n }\n var 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 /**\n * Syncs the selected date object time with user's time input\n */\n function setHoursFromInputs() {\n if (self.hourElement === undefined || self.minuteElement === undefined)\n return;\n var 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 var 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 var 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 var 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 var 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())\n minutes = Math.max(minutes, minTime.getMinutes());\n if (minutes === minTime.getMinutes())\n seconds = Math.max(seconds, minTime.getSeconds());\n }\n setHours(hours, minutes, seconds);\n }\n /**\n * Syncs time input values with a date\n */\n function setHoursFromDate(dateObj) {\n var date = dateObj || self.latestSelectedDateObj;\n if (date)\n setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n }\n function setDefaultHours() {\n var hours = self.config.defaultHour;\n var minutes = self.config.defaultMinute;\n var seconds = self.config.defaultSeconds;\n if (self.config.minDate !== undefined) {\n var minHr = self.config.minDate.getHours();\n var minMinutes = self.config.minDate.getMinutes();\n hours = Math.max(hours, minHr);\n if (hours === minHr)\n minutes = Math.max(minMinutes, minutes);\n if (hours === minHr && minutes === minMinutes)\n seconds = self.config.minDate.getSeconds();\n }\n if (self.config.maxDate !== undefined) {\n var maxHr = self.config.maxDate.getHours();\n var maxMinutes = self.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 = self.config.maxDate.getSeconds();\n }\n setHours(hours, minutes, seconds);\n }\n /**\n * Sets the hours, minutes, and optionally seconds\n * of the latest selected date object and the\n * corresponding time inputs\n * @param {Number} hours the hour. whether its military\n * or am-pm gets inferred from config\n * @param {Number} minutes the minutes\n * @param {Number} seconds the seconds (optional)\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 /**\n * Handles the year input and incrementing events\n * @param {Event} event the keyup or increment event\n */\n function onYearInput(event) {\n var year = parseInt(event.target.value) + (event.delta || 0);\n if (year / 1000 > 1 ||\n (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n changeYear(year);\n }\n }\n /**\n * Essentially addEventListener + tracking\n * @param {Element} element the element to addEventListener to\n * @param {String} event the event name\n * @param {Function} handler the event handler\n */\n function bind(element, event, handler, options) {\n if (event instanceof Array)\n return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n if (element instanceof Array)\n return element.forEach(function (el) { return bind(el, event, handler, options); });\n element.addEventListener(event, handler, options);\n self._handlers.push({\n element: element,\n event: event,\n handler: handler,\n options: options\n });\n }\n /**\n * A mousedown handler which mimics click.\n * Minimizes latency, since we don't need to wait for mouseup in most cases.\n * Also, avoids handling right clicks.\n *\n * @param {Function} handler the event handler\n */\n function onClick(handler) {\n return function (evt) {\n evt.which === 1 && handler(evt);\n };\n }\n function triggerChange() {\n triggerEvent(\"onChange\");\n }\n /**\n * Adds all the necessary event listeners\n */\n function bindEvents() {\n if (self.config.wrap) {\n [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n return bind(el, \"click\", self[evt]);\n });\n });\n }\n if (self.isMobile) {\n setupMobile();\n return;\n }\n var 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\", function (e) {\n if (self.config.mode === \"range\")\n onMouseOver(e.target);\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\", onClick(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, \"mousedown\", onClick(self.open));\n }\n if (self.daysContainer !== undefined) {\n bind(self.monthNav, \"mousedown\", onClick(onMonthNavClick));\n bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n bind(self.daysContainer, \"mousedown\", onClick(selectDate));\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n var selText = function (e) {\n return e.target.select();\n };\n bind(self.timeContainer, [\"increment\"], updateTime);\n bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n bind(self.timeContainer, \"mousedown\", onClick(timeIncrement));\n bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n if (self.secondElement !== undefined)\n bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n if (self.amPM !== undefined) {\n bind(self.amPM, \"mousedown\", onClick(function (e) {\n updateTime(e);\n triggerChange();\n }));\n }\n }\n }\n /**\n * Set the calendar view to a particular date.\n * @param {Date} jumpDate the date to set the view to\n * @param {boolean} triggerChange if change events should be triggered\n */\n function jumpToDate(jumpDate, triggerChange) {\n var 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 var oldYear = self.currentYear;\n var 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 /* istanbul ignore next */\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 /**\n * The up/down arrow handler for time inputs\n * @param {Event} e the click event\n */\n function timeIncrement(e) {\n if (~e.target.className.indexOf(\"arrow\"))\n incrementNumInput(e, e.target.classList.contains(\"arrowUp\") ? 1 : -1);\n }\n /**\n * Increments/decrements the value of input associ-\n * ated with the up/down arrow by dispatching an\n * \"increment\" event on the input.\n *\n * @param {Event} e the click event\n * @param {Number} delta the diff (usually 1 or -1)\n * @param {Element} inputElem the input element\n */\n function incrementNumInput(e, delta, inputElem) {\n var target = e && e.target;\n var input = inputElem ||\n (target && target.parentNode && target.parentNode.firstChild);\n var event = createEvent(\"increment\");\n event.delta = delta;\n input && input.dispatchEvent(event);\n }\n function build() {\n var 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 var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\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 var 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 var 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 var 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\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\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 var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n for (var m = startMonth; m != endMonth; m += delta) {\n var month = self.daysContainer.children[m];\n var startIndex = delta > 0 ? 0 : month.children.length - 1;\n var endIndex = delta > 0 ? month.children.length : -1;\n for (var i = startIndex; i != endIndex; i += delta) {\n var 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 var givenMonth = current.className.indexOf(\"Month\") === -1\n ? current.dateObj.getMonth()\n : self.currentMonth;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n var loopDelta = delta > 0 ? 1 : -1;\n for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n var month = self.daysContainer.children[m];\n var startIndex = givenMonth - self.currentMonth === m\n ? current.$i + delta\n : delta < 0\n ? month.children.length - 1\n : 0;\n var numMonthDays = month.children.length;\n for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n var 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 var dayFocused = isInView(document.activeElement || document.body);\n var 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 return self._input.focus();\n if (!dayFocused)\n return focusOnDayElem(startElem);\n getNextAvailableDay(startElem, offset);\n }\n function buildMonthDays(year, month) {\n var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12);\n var daysInMonth = self.utils.getDaysInMonth(month), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n // prepend days from the ending of previous month\n for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n }\n // Start at 1 since there is no 0th day\n for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n }\n // append days from the next month\n for (var 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 //updateNavigationCurrentMonth();\n var 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 // TODO: week numbers for each month\n if (self.weekNumbers)\n clearNode(self.weekNumbers);\n var frag = document.createDocumentFragment();\n for (var i = 0; i < self.config.showMonths; i++) {\n var 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 var 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 (var i = 0; i < 12; i++) {\n if (!shouldBuildMonth(i))\n continue;\n var 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 var container = createElement(\"div\", \"flatpickr-month\");\n var monthNavFragment = window.document.createDocumentFragment();\n var 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 bind(self.monthsDropdownContainer, \"change\", function (e) {\n var target = e.target;\n var selectedMonth = parseInt(target.value, 10);\n self.changeMonth(selectedMonth - self.currentMonth);\n triggerEvent(\"onMonthChange\");\n });\n buildMonthSwitch();\n monthElement = self.monthsDropdownContainer;\n }\n var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n var 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 var 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: container,\n yearElement: yearElement,\n monthElement: 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 (var m = self.config.showMonths; m--;) {\n var 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: function () { return self.__hidePrevMonthArrow; },\n set: function (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: function () { return self.__hideNextMonthArrow; },\n set: function (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 self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n self.timeContainer.tabIndex = -1;\n var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n var hourInput = createNumberInput(\"flatpickr-hour\", {\n \"aria-label\": self.l10n.hourAriaLabel\n });\n self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n var 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 ? self.config.defaultHour\n : military2ampm(self.config.defaultHour));\n self.minuteElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getMinutes()\n : self.config.defaultMinute);\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.minuteElement.setAttribute(\"min\", \"0\");\n self.minuteElement.setAttribute(\"max\", \"59\");\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 var secondInput = createNumberInput(\"flatpickr-second\");\n self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n self.secondElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getSeconds()\n : self.config.defaultSeconds);\n self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n self.secondElement.setAttribute(\"min\", \"0\");\n self.secondElement.setAttribute(\"max\", \"59\");\n self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n self.timeContainer.appendChild(secondInput);\n }\n if (!self.config.time_24hr) {\n // add self.amPM if appropriate\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 (var i = self.config.showMonths; i--;) {\n var 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 var firstDayOfWeek = self.l10n.firstDayOfWeek;\n var weekdays = self.l10n.weekdays.shorthand.slice();\n if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n weekdays = weekdays.splice(firstDayOfWeek, weekdays.length).concat(weekdays.splice(0, firstDayOfWeek));\n }\n for (var i = self.config.showMonths; i--;) {\n self.weekdayContainer.children[i].innerHTML = \"\\n <span class='flatpickr-weekday'>\\n \" + weekdays.join(\"</span><span class='flatpickr-weekday'>\") + \"\\n </span>\\n \";\n }\n }\n /* istanbul ignore next */\n function buildWeeks() {\n self.calendarContainer.classList.add(\"hasWeeks\");\n var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n weekWrapper.appendChild(weekNumbers);\n return {\n weekWrapper: weekWrapper,\n weekNumbers: weekNumbers\n };\n }\n function changeMonth(value, isOffset) {\n if (isOffset === void 0) { isOffset = true; }\n var 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, toInitial) {\n if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n if (toInitial === void 0) { 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 self.showTimeInput = false;\n if (self.config.enableTime === true) {\n setDefaultHours();\n }\n self.redraw();\n if (triggerChangeEvent)\n // triggerChangeEvent is true (default) or an Event\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 (var i = self._handlers.length; i--;) {\n var h = self._handlers[i];\n h.element.removeEventListener(h.event, h.handler, h.options);\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 var 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 self.input.value = \"\";\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(function (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 var eventTarget_1 = getEventTarget(e);\n var isCalendarElement = isCalendarElem(eventTarget_1);\n var isInput = eventTarget_1 === self.input ||\n eventTarget_1 === self.altInput ||\n self.element.contains(eventTarget_1) ||\n // web components\n // e.path is not present in all browsers. circumventing typechecks\n (e.path &&\n e.path.indexOf &&\n (~e.path.indexOf(self.input) ||\n ~e.path.indexOf(self.altInput)));\n var lostFocus = e.type === \"blur\"\n ? isInput &&\n e.relatedTarget &&\n !isCalendarElem(e.relatedTarget)\n : !isInput &&\n !isCalendarElement &&\n !isCalendarElem(e.relatedTarget);\n var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n return elem.contains(eventTarget_1);\n });\n if (lostFocus && isIgnored) {\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n updateTime();\n }\n self.close();\n if (self.config.mode === \"range\" && 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 var 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) {\n if (timeless === void 0) { timeless = true; }\n var dateToCheck = self.parseDate(date, undefined, timeless); // 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.length === 0 && self.config.disable.length === 0)\n return true;\n if (dateToCheck === undefined)\n return false;\n var bool = self.config.enable.length > 0, array = bool ? self.config.enable : self.config.disable;\n for (var i = 0, d = void 0; i < array.length; i++) {\n d = array[i];\n if (typeof d === \"function\" &&\n d(dateToCheck) // disabled by function\n )\n return bool;\n else if (d instanceof Date &&\n dateToCheck !== undefined &&\n d.getTime() === dateToCheck.getTime())\n // disabled by date\n return bool;\n else if (typeof d === \"string\" && dateToCheck !== undefined) {\n // disabled by date string\n var parsed = self.parseDate(d, undefined, true);\n return parsed && parsed.getTime() === dateToCheck.getTime()\n ? bool\n : !bool;\n }\n else if (\n // disabled by range\n 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 self.daysContainer.contains(elem));\n return false;\n }\n function onKeyDown(e) {\n // e.key e.keyCode\n // \"Backspace\" 8\n // \"Tab\" 9\n // \"Enter\" 13\n // \"Escape\" (IE \"Esc\") 27\n // \"ArrowLeft\" (IE \"Left\") 37\n // \"ArrowUp\" (IE \"Up\") 38\n // \"ArrowRight\" (IE \"Right\") 39\n // \"ArrowDown\" (IE \"Down\") 40\n // \"Delete\" (IE \"Del\") 46\n var isInput = e.target === self._input;\n var allowInput = self.config.allowInput;\n var allowKeydown = self.isOpen && (!allowInput || !isInput);\n var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n if (e.keyCode === 13 && isInput) {\n if (allowInput) {\n self.setDate(self._input.value, true, e.target === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n return e.target.blur();\n }\n else {\n self.open();\n }\n }\n else if (isCalendarElem(e.target) ||\n allowKeydown ||\n allowInlineKeydown) {\n var isTimeObj = !!self.timeContainer &&\n self.timeContainer.contains(e.target);\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: // escape\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 var delta_1 = e.keyCode === 39 ? 1 : -1;\n if (!e.ctrlKey)\n focusOnDay(undefined, delta_1);\n else {\n e.stopPropagation();\n changeMonth(delta_1);\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 var delta = e.keyCode === 40 ? 1 : -1;\n if ((self.daysContainer && e.target.$i !== undefined) ||\n e.target === self.input ||\n e.target === 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 (e.target === 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 var elems = [\n self.hourElement,\n self.minuteElement,\n self.secondElement,\n self.amPM,\n ]\n .concat(self.pluginElements)\n .filter(function (x) { return x; });\n var i = elems.indexOf(e.target);\n if (i !== -1) {\n var 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(e.target) &&\n e.shiftKey) {\n e.preventDefault();\n self._input.focus();\n }\n break;\n default:\n break;\n }\n }\n if (self.amPM !== undefined && e.target === 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(e.target)) {\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 var 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 var containsDisabled = false;\n var minRange = 0, maxRange = 0;\n for (var 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 (var m = 0; m < self.config.showMonths; m++) {\n var month = self.daysContainer.children[m];\n var _loop_1 = function (i, l) {\n var dayElem = month.children[i], date = dayElem.dateObj;\n var timestamp = date.getTime();\n var outOfRange = (minRange > 0 && timestamp < minRange) ||\n (maxRange > 0 && timestamp > maxRange);\n if (outOfRange) {\n dayElem.classList.add(\"notAllowed\");\n [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n return \"continue\";\n }\n else if (containsDisabled && !outOfRange)\n return \"continue\";\n [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (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 for (var i = 0, l = month.children.length; i < l; i++) {\n _loop_1(i, l);\n }\n }\n }\n function onResize() {\n if (self.isOpen && !self.config.static && !self.config.inline)\n positionCalendar();\n }\n function setDefaultTime() {\n self.setDate(self.config.minDate !== undefined\n ? new Date(self.config.minDate.getTime())\n : new Date(), true);\n setDefaultHours();\n updateValue();\n }\n function open(e, positionElement) {\n if (positionElement === void 0) { positionElement = self._positionElement; }\n if (self.isMobile === true) {\n if (e) {\n e.preventDefault();\n e.target && e.target.blur();\n }\n if (self.mobileInput !== undefined) {\n self.mobileInput.focus();\n self.mobileInput.click();\n }\n triggerEvent(\"onOpen\");\n return;\n }\n if (self._input.disabled || self.config.inline)\n return;\n var 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.selectedDates.length === 0) {\n setDefaultTime();\n }\n if (self.config.allowInput === false &&\n (e === undefined ||\n !self.timeContainer.contains(e.relatedTarget))) {\n setTimeout(function () { return self.hourElement.select(); }, 50);\n }\n }\n }\n function minMaxDateSetter(type) {\n return function (date) {\n var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n var 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(function (d) { return 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 var boolOpts = [\n \"wrap\",\n \"weekNumbers\",\n \"allowInput\",\n \"clickOpens\",\n \"time_24hr\",\n \"enableTime\",\n \"noCalendar\",\n \"altInput\",\n \"shorthandCurrentMonth\",\n \"inline\",\n \"static\",\n \"enableSeconds\",\n \"disableMobile\",\n ];\n var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));\n var formats = {};\n self.config.parseDate = userConfig.parseDate;\n self.config.formatDate = userConfig.formatDate;\n Object.defineProperty(self.config, \"enable\", {\n get: function () { return self.config._enable; },\n set: function (dates) {\n self.config._enable = parseDateRules(dates);\n }\n });\n Object.defineProperty(self.config, \"disable\", {\n get: function () { return self.config._disable; },\n set: function (dates) {\n self.config._disable = parseDateRules(dates);\n }\n });\n var timeMode = userConfig.mode === \"time\";\n if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.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 var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.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 if (!userConfig.altInputClass) {\n self.config.altInputClass =\n self.input.className + \" \" + self.config.altInputClass;\n }\n Object.defineProperty(self.config, \"minDate\", {\n get: function () { return self.config._minDate; },\n set: minMaxDateSetter(\"min\")\n });\n Object.defineProperty(self.config, \"maxDate\", {\n get: function () { return self.config._maxDate; },\n set: minMaxDateSetter(\"max\")\n });\n var minMaxTimeSetter = function (type) { return function (val) {\n self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n }; };\n Object.defineProperty(self.config, \"minTime\", {\n get: function () { return self.config._minTime; },\n set: minMaxTimeSetter(\"min\")\n });\n Object.defineProperty(self.config, \"maxTime\", {\n get: function () { return 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 (var 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(function (hook) { return self.config[hook] !== undefined; }).forEach(function (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.length &&\n !self.config.weekNumbers &&\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n for (var i = 0; i < self.config.plugins.length; i++) {\n var pluginConf = self.config.plugins[i](self) || {};\n for (var 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 triggerEvent(\"onParseConfig\");\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 = __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 var userConfig = __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 (self.calendarContainer === undefined)\n return;\n triggerEvent(\"onPreCalendarPosition\");\n var positionElement = customPositionElement || self._positionElement;\n var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return 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 var 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 var left = window.pageXOffset +\n inputBounds.left -\n (configPosHorizontal != null && configPosHorizontal === \"center\"\n ? (calendarWidth - inputBounds.width) / 2\n : 0);\n var right = window.document.body.offsetWidth - (window.pageXOffset + inputBounds.right);\n var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n var 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 var doc = document.styleSheets[0];\n // some testing environments don't have css support\n if (doc === undefined)\n return;\n var bodyWidth = window.document.body.offsetWidth;\n var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n var centerBefore = \".flatpickr-calendar.centerMost:before\";\n var centerAfter = \".flatpickr-calendar.centerMost:after\";\n var centerIndex = doc.cssRules.length;\n var 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 redraw() {\n if (self.config.noCalendar || self.isMobile)\n return;\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 // hack - bugs in the way IE handles focus keeps the calendar open\n setTimeout(self.close, 0);\n }\n else {\n self.close();\n }\n }\n function selectDate(e) {\n e.preventDefault();\n e.stopPropagation();\n var isSelectable = function (day) {\n return day.classList &&\n day.classList.contains(\"flatpickr-day\") &&\n !day.classList.contains(\"flatpickr-disabled\") &&\n !day.classList.contains(\"notAllowed\");\n };\n var t = findParent(e.target, isSelectable);\n if (t === undefined)\n return;\n var target = t;\n var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n var 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 var 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 // unless selecting same date twice, sort ascendingly\n if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n setHoursFromInputs();\n if (shouldChangeMonth) {\n var 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 (self.config.enableTime)\n setTimeout(function () { return (self.showTimeInput = true); }, 50);\n // maintain focus\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 var single = self.config.mode === \"single\" && !self.config.enableTime;\n var 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 var CALLBACKS = {\n locale: [setupLocale, updateWeekdays],\n showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n minDate: [jumpToDate],\n maxDate: [jumpToDate]\n };\n function set(option, value) {\n if (option !== null && typeof option === \"object\") {\n Object.assign(self.config, option);\n for (var key in option) {\n if (CALLBACKS[key] !== undefined)\n CALLBACKS[key].forEach(function (x) { return x(); });\n }\n }\n else {\n self.config[option] = value;\n if (CALLBACKS[option] !== undefined)\n CALLBACKS[option].forEach(function (x) { return x(); });\n else if (HOOKS.indexOf(option) > -1)\n self.config[option] = arrayify(value);\n }\n self.redraw();\n updateValue(false);\n }\n function setSelectedDate(inputDate, format) {\n var dates = [];\n if (inputDate instanceof Array)\n dates = inputDate.map(function (d) { return 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(function (date) { return self.parseDate(date, format); });\n break;\n case \"range\":\n dates = inputDate\n .split(self.l10n.rangeSeparator)\n .map(function (date) { return 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 = dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); });\n if (self.config.mode === \"range\")\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n function setDate(date, triggerChange, format) {\n if (triggerChange === void 0) { triggerChange = false; }\n if (format === void 0) { 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.showTimeInput = self.selectedDates.length > 0;\n self.latestSelectedDateObj =\n self.selectedDates[self.selectedDates.length - 1];\n self.redraw();\n jumpToDate();\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(function (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(function (x) { return x; }); // remove falsy values\n }\n function setupDates() {\n self.selectedDates = [];\n self.now = self.parseDate(self.config.now) || new Date();\n // Workaround IE11 setting placeholder as the input's value\n var 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 Object.defineProperty(self, \"showTimeInput\", {\n get: function () { return self._showTimeInput; },\n set: function (bool) {\n self._showTimeInput = bool;\n if (self.calendarContainer)\n toggleClass(self.calendarContainer, \"showTimeInput\", bool);\n self.isOpen && positionCalendar();\n }\n });\n }\n function setupInputs() {\n self.input = self.config.wrap\n ? element.querySelector(\"[data-input]\")\n : element;\n /* istanbul ignore next */\n if (!self.input) {\n self.config.errorHandler(new Error(\"Invalid input element specified\"));\n return;\n }\n // hack: store previous type to restore it after destroy()\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 // replicate self.element\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 var 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.step = self.input.getAttribute(\"step\") || \"any\";\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 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\", function (e) {\n self.setDate(e.target.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 the instance has been destroyed already, all hooks have been removed\n if (self.config === undefined)\n return;\n var hooks = self.config[event];\n if (hooks !== undefined && hooks.length > 0) {\n for (var 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 // many front-end frameworks bind to the input event\n self.input.dispatchEvent(createEvent(\"input\"));\n }\n }\n function createEvent(name) {\n var e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n return e;\n }\n function isDateSelected(date) {\n for (var 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(function (yearElement, i) {\n var 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(function (dObj) { return self.formatDate(dObj, format); })\n .filter(function (d, i, arr) {\n return self.config.mode !== \"range\" ||\n self.config.enableTime ||\n arr.indexOf(d) === i;\n })\n .join(self.config.mode !== \"range\"\n ? self.config.conjunction\n : self.l10n.rangeSeparator);\n }\n /**\n * Updates the values of inputs associated with the calendar\n */\n function updateValue(triggerChange) {\n if (triggerChange === void 0) { 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 var isPrevMonth = self.prevMonthNav.contains(e.target);\n var isNextMonth = self.nextMonthNav.contains(e.target);\n if (isPrevMonth || isNextMonth) {\n changeMonth(isPrevMonth ? -1 : 1);\n }\n else if (self.yearElements.indexOf(e.target) >= 0) {\n e.target.select();\n }\n else if (e.target.classList.contains(\"arrowUp\")) {\n self.changeYear(self.currentYear + 1);\n }\n else if (e.target.classList.contains(\"arrowDown\")) {\n self.changeYear(self.currentYear - 1);\n }\n }\n function timeWrapper(e) {\n e.preventDefault();\n var isKeyDown = e.type === \"keydown\", input = e.target;\n if (self.amPM !== undefined && e.target === self.amPM) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n var 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 var newValue = curValue + step * delta;\n if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n var 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 }\n /* istanbul ignore next */\n function _flatpickr(nodeList, config) {\n // static list\n var nodes = Array.prototype.slice\n .call(nodeList)\n .filter(function (x) { return x instanceof HTMLElement; });\n var instances = [];\n for (var i = 0; i < nodes.length; i++) {\n var 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 }\n /* istanbul ignore next */\n if (typeof HTMLElement !== \"undefined\" &&\n typeof HTMLCollection !== \"undefined\" &&\n typeof NodeList !== \"undefined\") {\n // browser env\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 }\n /* istanbul ignore next */\n var 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 };\n /* istanbul ignore next */\n flatpickr.defaultConfig = {};\n flatpickr.l10ns = {\n en: __assign({}, english),\n \"default\": __assign({}, english)\n };\n flatpickr.localize = function (l10n) {\n flatpickr.l10ns[\"default\"] = __assign({}, flatpickr.l10ns[\"default\"], l10n);\n };\n flatpickr.setDefaults = function (config) {\n flatpickr.defaultConfig = __assign({}, flatpickr.defaultConfig, config);\n };\n flatpickr.parseDate = createDateParser({});\n flatpickr.formatDate = createDateFormatter({});\n flatpickr.compareDates = compareDates;\n /* istanbul ignore next */\n if (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n jQuery.fn.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n }\n // eslint-disable-next-line @typescript-eslint/camelcase\n Date.prototype.fp_incr = function (days) {\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n };\n if (typeof window !== \"undefined\") {\n window.flatpickr = flatpickr;\n }\n\n return flatpickr;\n\n}));\n"],"sourceRoot":""}