{"version":3,"file":"3441.f13f9495.js","mappings":"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","sources":["webpack://@finviz/website/../node_modules/flux/index.js","webpack://@finviz/website/../node_modules/flux/lib/Dispatcher.js","webpack://@finviz/website/../node_modules/flux/lib/invariant.js","webpack://@finviz/website/../node_modules/hammerjs/hammer.js","webpack://@finviz/website/../node_modules/jsonp/index.js","webpack://@finviz/website/../node_modules/jsonp/node_modules/debug/src/browser.js","webpack://@finviz/website/../node_modules/jsonp/node_modules/debug/src/debug.js","webpack://@finviz/website/../node_modules/jsonp/node_modules/ms/index.js","webpack://@finviz/website/../node_modules/keymirror/index.js","webpack://@finviz/website/../node_modules/react-router-dom/dist/index.js","webpack://@finviz/website/../node_modules/@ariakit/react-core/esm/__chunks/5KB2YIDT.js","webpack://@finviz/website/../node_modules/@ariakit/react-core/esm/__chunks/JJ3MV4KB.js","webpack://@finviz/website/../node_modules/@tanstack/query-core/build/lib/mutationObserver.mjs","webpack://@finviz/website/../node_modules/@tanstack/react-query/build/lib/useMutation.mjs","webpack://@finviz/website/../node_modules/react-share/dist/index.js"],"sourcesContent":["/**\n * Copyright (c) 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\nmodule.exports.Dispatcher = require('./lib/Dispatcher')\n","/*\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Dispatcher\n * @typechecks\n */\n\n\"use strict\";\n\nvar invariant = require('./invariant');\n\nvar _lastID = 1;\nvar _prefix = 'ID_';\n\n/**\n * Dispatcher is used to broadcast payloads to registered callbacks. This is\n * different from generic pub-sub systems in two ways:\n *\n * 1) Callbacks are not subscribed to particular events. Every payload is\n * dispatched to every registered callback.\n * 2) Callbacks can be deferred in whole or part until other callbacks have\n * been executed.\n *\n * For example, consider this hypothetical flight destination form, which\n * selects a default city when a country is selected:\n *\n * var flightDispatcher = new Dispatcher();\n *\n * // Keeps track of which country is selected\n * var CountryStore = {country: null};\n *\n * // Keeps track of which city is selected\n * var CityStore = {city: null};\n *\n * // Keeps track of the base flight price of the selected city\n * var FlightPriceStore = {price: null}\n *\n * When a user changes the selected city, we dispatch the payload:\n *\n * flightDispatcher.dispatch({\n * actionType: 'city-update',\n * selectedCity: 'paris'\n * });\n *\n * This payload is digested by `CityStore`:\n *\n * flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'city-update') {\n * CityStore.city = payload.selectedCity;\n * }\n * });\n *\n * When the user selects a country, we dispatch the payload:\n *\n * flightDispatcher.dispatch({\n * actionType: 'country-update',\n * selectedCountry: 'australia'\n * });\n *\n * This payload is digested by both stores:\n *\n * CountryStore.dispatchToken = flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'country-update') {\n * CountryStore.country = payload.selectedCountry;\n * }\n * });\n *\n * When the callback to update `CountryStore` is registered, we save a reference\n * to the returned token. Using this token with `waitFor()`, we can guarantee\n * that `CountryStore` is updated before the callback that updates `CityStore`\n * needs to query its data.\n *\n * CityStore.dispatchToken = flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'country-update') {\n * // `CountryStore.country` may not be updated.\n * flightDispatcher.waitFor([CountryStore.dispatchToken]);\n * // `CountryStore.country` is now guaranteed to be updated.\n *\n * // Select the default city for the new country\n * CityStore.city = getDefaultCityForCountry(CountryStore.country);\n * }\n * });\n *\n * The usage of `waitFor()` can be chained, for example:\n *\n * FlightPriceStore.dispatchToken =\n * flightDispatcher.register(function(payload) {\n * switch (payload.actionType) {\n * case 'country-update':\n * flightDispatcher.waitFor([CityStore.dispatchToken]);\n * FlightPriceStore.price =\n * getFlightPriceStore(CountryStore.country, CityStore.city);\n * break;\n *\n * case 'city-update':\n * FlightPriceStore.price =\n * FlightPriceStore(CountryStore.country, CityStore.city);\n * break;\n * }\n * });\n *\n * The `country-update` payload will be guaranteed to invoke the stores'\n * registered callbacks in order: `CountryStore`, `CityStore`, then\n * `FlightPriceStore`.\n */\n\n function Dispatcher() {\n this.$Dispatcher_callbacks = {};\n this.$Dispatcher_isPending = {};\n this.$Dispatcher_isHandled = {};\n this.$Dispatcher_isDispatching = false;\n this.$Dispatcher_pendingPayload = null;\n }\n\n /**\n * Registers a callback to be invoked with every dispatched payload. Returns\n * a token that can be used with `waitFor()`.\n *\n * @param {function} callback\n * @return {string}\n */\n Dispatcher.prototype.register=function(callback) {\n var id = _prefix + _lastID++;\n this.$Dispatcher_callbacks[id] = callback;\n return id;\n };\n\n /**\n * Removes a callback based on its token.\n *\n * @param {string} id\n */\n Dispatcher.prototype.unregister=function(id) {\n invariant(\n this.$Dispatcher_callbacks[id],\n 'Dispatcher.unregister(...): `%s` does not map to a registered callback.',\n id\n );\n delete this.$Dispatcher_callbacks[id];\n };\n\n /**\n * Waits for the callbacks specified to be invoked before continuing execution\n * of the current callback. This method should only be used by a callback in\n * response to a dispatched payload.\n *\n * @param {array} ids\n */\n Dispatcher.prototype.waitFor=function(ids) {\n invariant(\n this.$Dispatcher_isDispatching,\n 'Dispatcher.waitFor(...): Must be invoked while dispatching.'\n );\n for (var ii = 0; ii < ids.length; ii++) {\n var id = ids[ii];\n if (this.$Dispatcher_isPending[id]) {\n invariant(\n this.$Dispatcher_isHandled[id],\n 'Dispatcher.waitFor(...): Circular dependency detected while ' +\n 'waiting for `%s`.',\n id\n );\n continue;\n }\n invariant(\n this.$Dispatcher_callbacks[id],\n 'Dispatcher.waitFor(...): `%s` does not map to a registered callback.',\n id\n );\n this.$Dispatcher_invokeCallback(id);\n }\n };\n\n /**\n * Dispatches a payload to all registered callbacks.\n *\n * @param {object} payload\n */\n Dispatcher.prototype.dispatch=function(payload) {\n invariant(\n !this.$Dispatcher_isDispatching,\n 'Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.'\n );\n this.$Dispatcher_startDispatching(payload);\n try {\n for (var id in this.$Dispatcher_callbacks) {\n if (this.$Dispatcher_isPending[id]) {\n continue;\n }\n this.$Dispatcher_invokeCallback(id);\n }\n } finally {\n this.$Dispatcher_stopDispatching();\n }\n };\n\n /**\n * Is this Dispatcher currently dispatching.\n *\n * @return {boolean}\n */\n Dispatcher.prototype.isDispatching=function() {\n return this.$Dispatcher_isDispatching;\n };\n\n /**\n * Call the callback stored with the given id. Also do some internal\n * bookkeeping.\n *\n * @param {string} id\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_invokeCallback=function(id) {\n this.$Dispatcher_isPending[id] = true;\n this.$Dispatcher_callbacks[id](this.$Dispatcher_pendingPayload);\n this.$Dispatcher_isHandled[id] = true;\n };\n\n /**\n * Set up bookkeeping needed when dispatching.\n *\n * @param {object} payload\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_startDispatching=function(payload) {\n for (var id in this.$Dispatcher_callbacks) {\n this.$Dispatcher_isPending[id] = false;\n this.$Dispatcher_isHandled[id] = false;\n }\n this.$Dispatcher_pendingPayload = payload;\n this.$Dispatcher_isDispatching = true;\n };\n\n /**\n * Clear bookkeeping used for dispatching.\n *\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_stopDispatching=function() {\n this.$Dispatcher_pendingPayload = null;\n this.$Dispatcher_isDispatching = false;\n };\n\n\nmodule.exports = Dispatcher;\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule invariant\n */\n\n\"use strict\";\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (false) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n 'Invariant Violation: ' +\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\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.\\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","/**\n * Module dependencies\n */\n\nvar debug = require('debug')('jsonp');\n\n/**\n * Module exports.\n */\n\nmodule.exports = jsonp;\n\n/**\n * Callback index.\n */\n\nvar count = 0;\n\n/**\n * Noop function.\n */\n\nfunction noop(){}\n\n/**\n * JSONP handler\n *\n * Options:\n * - param {String} qs parameter (`callback`)\n * - prefix {String} qs parameter (`__jp`)\n * - name {String} qs parameter (`prefix` + incr)\n * - timeout {Number} how long after a timeout error is emitted (`60000`)\n *\n * @param {String} url\n * @param {Object|Function} optional options / callback\n * @param {Function} optional callback\n */\n\nfunction jsonp(url, opts, fn){\n if ('function' == typeof opts) {\n fn = opts;\n opts = {};\n }\n if (!opts) opts = {};\n\n var prefix = opts.prefix || '__jp';\n\n // use the callback name that was passed if one was provided.\n // otherwise generate a unique name by incrementing our counter.\n var id = opts.name || (prefix + (count++));\n\n var param = opts.param || 'callback';\n var timeout = null != opts.timeout ? opts.timeout : 60000;\n var enc = encodeURIComponent;\n var target = document.getElementsByTagName('script')[0] || document.head;\n var script;\n var timer;\n\n\n if (timeout) {\n timer = setTimeout(function(){\n cleanup();\n if (fn) fn(new Error('Timeout'));\n }, timeout);\n }\n\n function cleanup(){\n if (script.parentNode) script.parentNode.removeChild(script);\n window[id] = noop;\n if (timer) clearTimeout(timer);\n }\n\n function cancel(){\n if (window[id]) {\n cleanup();\n }\n }\n\n window[id] = function(data){\n debug('jsonp got', data);\n cleanup();\n if (fn) fn(null, data);\n };\n\n // add qs component\n url += (~url.indexOf('?') ? '&' : '?') + param + '=' + enc(id);\n url = url.replace('?&', '?');\n\n debug('jsonp req \"%s\"', url);\n\n // create script\n script = document.createElement('script');\n script.src = url;\n target.parentNode.insertBefore(script, target);\n\n return cancel;\n}\n","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","/**\n * Copyright 2013-2014 Facebook, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n\"use strict\";\n\n/**\n * Constructs an enumeration with keys equal to their value.\n *\n * For example:\n *\n * var COLORS = keyMirror({blue: null, red: null});\n * var myColor = COLORS.blue;\n * var isColorValid = !!COLORS[myColor];\n *\n * The last line could not be performed if the values of the generated enum were\n * not equal to their keys.\n *\n * Input: {key1: val1, key2: val2}\n * Output: {key1: key1, key2: key2}\n *\n * @param {object} obj\n * @return {object}\n */\nvar keyMirror = function(obj) {\n var ret = {};\n var key;\n if (!(obj instanceof Object && !Array.isArray(obj))) {\n throw new Error('keyMirror(...): Argument must be an object.');\n }\n for (key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n ret[key] = key;\n }\n return ret;\n};\n\nmodule.exports = keyMirror;\n","/**\n * React Router DOM v6.16.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { UNSAFE_mapRouteProperties, Router, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, UNSAFE_DataRouterStateContext, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, unstable_useBlocker, UNSAFE_DataRouterContext } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, RouterProvider, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, resolvePath, unstable_useBlocker, useActionData, useAsyncError, useAsyncValue, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths } from '@remix-run/router';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n return event.button === 0 && (\n // Ignore everything but left clicks\n !target || target === \"_self\") &&\n // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nfunction createSearchParams(init) {\n if (init === void 0) {\n init = \"\";\n }\n return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n let searchParams = createSearchParams(locationSearch);\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach(value => {\n searchParams.append(key, value);\n });\n }\n });\n }\n return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0);\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n if (encType != null && !supportedFormEncTypes.has(encType)) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `
`/`` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n return null;\n }\n return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n let method;\n let action;\n let encType;\n let formData;\n let body;\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(target);\n } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n let form = target.form;\n if (form == null) {\n throw new Error(\"Cannot submit a