{"version":3,"file":"what-input-BO9sh7l2.js","sources":["../../../node_modules/what-input/dist/what-input.js"],"sourcesContent":["/**\n * what-input - A global utility for tracking the current input method (mouse, keyboard or touch).\n * @version v5.2.11\n * @link https://github.com/ten1seven/what-input\n * @license MIT\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"whatInput\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"whatInput\"] = factory();\n\telse\n\t\troot[\"whatInput\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\tmodule.exports = function () {\n\t /*\n\t * bail out if there is no document or window\n\t * (i.e. in a node/non-DOM environment)\n\t *\n\t * Return a stubbed API instead\n\t */\n\t if (typeof document === 'undefined' || typeof window === 'undefined') {\n\t return {\n\t // always return \"initial\" because no interaction will ever be detected\n\t ask: function ask() {\n\t return 'initial';\n\t },\n\n\t // always return null\n\t element: function element() {\n\t return null;\n\t },\n\n\t // no-op\n\t ignoreKeys: function ignoreKeys() {},\n\n\t // no-op\n\t specificKeys: function specificKeys() {},\n\n\t // no-op\n\t registerOnChange: function registerOnChange() {},\n\n\t // no-op\n\t unRegisterOnChange: function unRegisterOnChange() {}\n\t };\n\t }\n\n\t /*\n\t * variables\n\t */\n\n\t // cache document.documentElement\n\t var docElem = document.documentElement;\n\n\t // currently focused dom element\n\t var currentElement = null;\n\n\t // last used input type\n\t var currentInput = 'initial';\n\n\t // last used input intent\n\t var currentIntent = currentInput;\n\n\t // UNIX timestamp of current event\n\t var currentTimestamp = Date.now();\n\n\t // check for a `data-whatpersist` attribute on either the `html` or `body` elements, defaults to `true`\n\t var shouldPersist = 'false';\n\n\t // form input types\n\t var formInputs = ['button', 'input', 'select', 'textarea'];\n\n\t // empty array for holding callback functions\n\t var functionList = [];\n\n\t // list of modifier keys commonly used with the mouse and\n\t // can be safely ignored to prevent false keyboard detection\n\t var ignoreMap = [16, // shift\n\t 17, // control\n\t 18, // alt\n\t 91, // Windows key / left Apple cmd\n\t 93 // Windows menu / right Apple cmd\n\t ];\n\n\t var specificMap = [];\n\n\t // mapping of events to input types\n\t var inputMap = {\n\t keydown: 'keyboard',\n\t keyup: 'keyboard',\n\t mousedown: 'mouse',\n\t mousemove: 'mouse',\n\t MSPointerDown: 'pointer',\n\t MSPointerMove: 'pointer',\n\t pointerdown: 'pointer',\n\t pointermove: 'pointer',\n\t touchstart: 'touch',\n\t touchend: 'touch'\n\n\t // boolean: true if the page is being scrolled\n\t };var isScrolling = false;\n\n\t // store current mouse position\n\t var mousePos = {\n\t x: null,\n\t y: null\n\n\t // map of IE 10 pointer events\n\t };var pointerMap = {\n\t 2: 'touch',\n\t 3: 'touch', // treat pen like touch\n\t 4: 'mouse'\n\n\t // check support for passive event listeners\n\t };var supportsPassive = false;\n\n\t try {\n\t var opts = Object.defineProperty({}, 'passive', {\n\t get: function get() {\n\t supportsPassive = true;\n\t }\n\t });\n\n\t window.addEventListener('test', null, opts);\n\t } catch (e) {}\n\t // fail silently\n\n\n\t /*\n\t * set up\n\t */\n\n\t var setUp = function setUp() {\n\t // add correct mouse wheel event mapping to `inputMap`\n\t inputMap[detectWheel()] = 'mouse';\n\n\t addListeners();\n\t };\n\n\t /*\n\t * events\n\t */\n\n\t var addListeners = function addListeners() {\n\t // `pointermove`, `MSPointerMove`, `mousemove` and mouse wheel event binding\n\t // can only demonstrate potential, but not actual, interaction\n\t // and are treated separately\n\t var options = supportsPassive ? { passive: true, capture: true } : true;\n\n\t document.addEventListener('DOMContentLoaded', setPersist, true);\n\n\t // pointer events (mouse, pen, touch)\n\t if (window.PointerEvent) {\n\t window.addEventListener('pointerdown', setInput, true);\n\t window.addEventListener('pointermove', setIntent, true);\n\t } else if (window.MSPointerEvent) {\n\t window.addEventListener('MSPointerDown', setInput, true);\n\t window.addEventListener('MSPointerMove', setIntent, true);\n\t } else {\n\t // mouse events\n\t window.addEventListener('mousedown', setInput, true);\n\t window.addEventListener('mousemove', setIntent, true);\n\n\t // touch events\n\t if ('ontouchstart' in window) {\n\t window.addEventListener('touchstart', setInput, options);\n\t window.addEventListener('touchend', setInput, true);\n\t }\n\t }\n\n\t // mouse wheel\n\t window.addEventListener(detectWheel(), setIntent, options);\n\n\t // keyboard events\n\t window.addEventListener('keydown', setInput, true);\n\t window.addEventListener('keyup', setInput, true);\n\n\t // focus events\n\t window.addEventListener('focusin', setElement, true);\n\t window.addEventListener('focusout', clearElement, true);\n\t };\n\n\t // checks if input persistence should happen and\n\t // get saved state from session storage if true (defaults to `false`)\n\t var setPersist = function setPersist() {\n\t shouldPersist = !(docElem.getAttribute('data-whatpersist') || document.body.getAttribute('data-whatpersist') === 'false');\n\n\t if (shouldPersist) {\n\t // check for session variables and use if available\n\t try {\n\t if (window.sessionStorage.getItem('what-input')) {\n\t currentInput = window.sessionStorage.getItem('what-input');\n\t }\n\n\t if (window.sessionStorage.getItem('what-intent')) {\n\t currentIntent = window.sessionStorage.getItem('what-intent');\n\t }\n\t } catch (e) {\n\t // fail silently\n\t }\n\t }\n\n\t // always run these so at least `initial` state is set\n\t doUpdate('input');\n\t doUpdate('intent');\n\t };\n\n\t // checks conditions before updating new input\n\t var setInput = function setInput(event) {\n\t var eventKey = event.which;\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t var ignoreMatch = !specificMap.length && ignoreMap.indexOf(eventKey) === -1;\n\n\t var specificMatch = specificMap.length && specificMap.indexOf(eventKey) !== -1;\n\n\t var shouldUpdate = value === 'keyboard' && eventKey && (ignoreMatch || specificMatch) || value === 'mouse' || value === 'touch';\n\n\t // prevent touch detection from being overridden by event execution order\n\t if (validateTouch(value)) {\n\t shouldUpdate = false;\n\t }\n\n\t if (shouldUpdate && currentInput !== value) {\n\t currentInput = value;\n\n\t persistInput('input', currentInput);\n\t doUpdate('input');\n\t }\n\n\t if (shouldUpdate && currentIntent !== value) {\n\t // preserve intent for keyboard interaction with form fields\n\t var activeElem = document.activeElement;\n\t var notFormInput = activeElem && activeElem.nodeName && (formInputs.indexOf(activeElem.nodeName.toLowerCase()) === -1 || activeElem.nodeName.toLowerCase() === 'button' && !checkClosest(activeElem, 'form'));\n\n\t if (notFormInput) {\n\t currentIntent = value;\n\n\t persistInput('intent', currentIntent);\n\t doUpdate('intent');\n\t }\n\t }\n\t };\n\n\t // updates the doc and `inputTypes` array with new input\n\t var doUpdate = function doUpdate(which) {\n\t docElem.setAttribute('data-what' + which, which === 'input' ? currentInput : currentIntent);\n\n\t fireFunctions(which);\n\t };\n\n\t // updates input intent for `mousemove` and `pointermove`\n\t var setIntent = function setIntent(event) {\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t // test to see if `mousemove` happened relative to the screen to detect scrolling versus mousemove\n\t detectScrolling(event);\n\n\t // only execute if scrolling isn't happening\n\t if ((!isScrolling && !validateTouch(value) || isScrolling && event.type === 'wheel' || event.type === 'mousewheel' || event.type === 'DOMMouseScroll') && currentIntent !== value) {\n\t currentIntent = value;\n\n\t persistInput('intent', currentIntent);\n\t doUpdate('intent');\n\t }\n\t };\n\n\t var setElement = function setElement(event) {\n\t if (!event.target.nodeName) {\n\t // If nodeName is undefined, clear the element\n\t // This can happen if click inside an element.\n\t clearElement();\n\t return;\n\t }\n\n\t currentElement = event.target.nodeName.toLowerCase();\n\t docElem.setAttribute('data-whatelement', currentElement);\n\n\t if (event.target.classList && event.target.classList.length) {\n\t docElem.setAttribute('data-whatclasses', event.target.classList.toString().replace(' ', ','));\n\t }\n\t };\n\n\t var clearElement = function clearElement() {\n\t currentElement = null;\n\n\t docElem.removeAttribute('data-whatelement');\n\t docElem.removeAttribute('data-whatclasses');\n\t };\n\n\t var persistInput = function persistInput(which, value) {\n\t if (shouldPersist) {\n\t try {\n\t window.sessionStorage.setItem('what-' + which, value);\n\t } catch (e) {\n\t // fail silently\n\t }\n\t }\n\t };\n\n\t /*\n\t * utilities\n\t */\n\n\t var pointerType = function pointerType(event) {\n\t if (typeof event.pointerType === 'number') {\n\t return pointerMap[event.pointerType];\n\t } else {\n\t // treat pen like touch\n\t return event.pointerType === 'pen' ? 'touch' : event.pointerType;\n\t }\n\t };\n\n\t // prevent touch detection from being overridden by event execution order\n\t var validateTouch = function validateTouch(value) {\n\t var timestamp = Date.now();\n\n\t var touchIsValid = value === 'mouse' && currentInput === 'touch' && timestamp - currentTimestamp < 200;\n\n\t currentTimestamp = timestamp;\n\n\t return touchIsValid;\n\t };\n\n\t // detect version of mouse wheel event to use\n\t // via https://developer.mozilla.org/en-US/docs/Web/API/Element/wheel_event\n\t var detectWheel = function detectWheel() {\n\t var wheelType = null;\n\n\t // Modern browsers support \"wheel\"\n\t if ('onwheel' in document.createElement('div')) {\n\t wheelType = 'wheel';\n\t } else {\n\t // Webkit and IE support at least \"mousewheel\"\n\t // or assume that remaining browsers are older Firefox\n\t wheelType = document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\n\t }\n\n\t return wheelType;\n\t };\n\n\t // runs callback functions\n\t var fireFunctions = function fireFunctions(type) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].type === type) {\n\t functionList[i].fn.call(undefined, type === 'input' ? currentInput : currentIntent);\n\t }\n\t }\n\t };\n\n\t // finds matching element in an object\n\t var objPos = function objPos(match) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].fn === match) {\n\t return i;\n\t }\n\t }\n\t };\n\n\t var detectScrolling = function detectScrolling(event) {\n\t if (mousePos.x !== event.screenX || mousePos.y !== event.screenY) {\n\t isScrolling = false;\n\n\t mousePos.x = event.screenX;\n\t mousePos.y = event.screenY;\n\t } else {\n\t isScrolling = true;\n\t }\n\t };\n\n\t // manual version of `closest()`\n\t var checkClosest = function checkClosest(elem, tag) {\n\t var ElementPrototype = window.Element.prototype;\n\n\t if (!ElementPrototype.matches) {\n\t ElementPrototype.matches = ElementPrototype.msMatchesSelector || ElementPrototype.webkitMatchesSelector;\n\t }\n\n\t if (!ElementPrototype.closest) {\n\t do {\n\t if (elem.matches(tag)) {\n\t return elem;\n\t }\n\n\t elem = elem.parentElement || elem.parentNode;\n\t } while (elem !== null && elem.nodeType === 1);\n\n\t return null;\n\t } else {\n\t return elem.closest(tag);\n\t }\n\t };\n\n\t /*\n\t * init\n\t */\n\n\t // don't start script unless browser cuts the mustard\n\t // (also passes if polyfills are used)\n\t if ('addEventListener' in window && Array.prototype.indexOf) {\n\t setUp();\n\t }\n\n\t /*\n\t * api\n\t */\n\n\t return {\n\t // returns string: the current input type\n\t // opt: 'intent'|'input'\n\t // 'input' (default): returns the same value as the `data-whatinput` attribute\n\t // 'intent': includes `data-whatintent` value if it's different than `data-whatinput`\n\t ask: function ask(opt) {\n\t return opt === 'intent' ? currentIntent : currentInput;\n\t },\n\n\t // returns string: the currently focused element or null\n\t element: function element() {\n\t return currentElement;\n\t },\n\n\t // overwrites ignored keys with provided array\n\t ignoreKeys: function ignoreKeys(arr) {\n\t ignoreMap = arr;\n\t },\n\n\t // overwrites specific char keys to update on\n\t specificKeys: function specificKeys(arr) {\n\t specificMap = arr;\n\t },\n\n\t // attach functions to input and intent \"events\"\n\t // funct: function to fire on change\n\t // eventType: 'input'|'intent'\n\t registerOnChange: function registerOnChange(fn, eventType) {\n\t functionList.push({\n\t fn: fn,\n\t type: eventType || 'input'\n\t });\n\t },\n\n\t unRegisterOnChange: function unRegisterOnChange(fn) {\n\t var position = objPos(fn);\n\n\t if (position || position === 0) {\n\t functionList.splice(position, 1);\n\t }\n\t },\n\n\t clearStorage: function clearStorage() {\n\t window.sessionStorage.clear();\n\t }\n\t };\n\t}();\n\n/***/ })\n/******/ ])\n});\n;\n"],"names":["root","factory","module","this","modules","installedModules","__webpack_require__","moduleId","exports","docElem","currentElement","currentInput","currentIntent","currentTimestamp","shouldPersist","formInputs","functionList","ignoreMap","specificMap","inputMap","isScrolling","mousePos","pointerMap","supportsPassive","opts","setUp","detectWheel","addListeners","options","setPersist","setInput","setIntent","setElement","clearElement","doUpdate","event","eventKey","value","pointerType","ignoreMatch","specificMatch","shouldUpdate","validateTouch","persistInput","activeElem","notFormInput","checkClosest","which","fireFunctions","detectScrolling","timestamp","touchIsValid","wheelType","type","i","len","objPos","match","elem","tag","ElementPrototype","opt","arr","fn","eventType","position"],"mappings":"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","x_google_ignoreList":[0]}