{"version":3,"sources":["webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/is-basic-key/is-basic-key.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/is-basic-key/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/components/search/search.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/components/search/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/is-numeric.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/screen-dimensions/screen-dimensions.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/screen-dimensions/index.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/lodash/toNumber.js"],"names":["IsBasicKey","enteredKey","isNumeric","isAndroid","test","JS_HOOK_SEARCH_TOGGLE","JS_HOOK_SUGGESTIONS_HOLDER","JS_HOOK_HEADER","JS_HOOK_SEARCH_FORM_WRAPPER","JS_HOOK_SEARCH_FORM","JS_HOOK_SEARCH_SUGGESTIONS","JS_HOOK_SEARCH_INPUT","JS_HOOK_SUBMIT","JS_HOOK_CLEAR","JS_HOOK_CLOSE_BUTTON","CLASS_SEARCH_HTML","CLASS_SEARCH_INPUT_HTML","CLASS_ACTIVE","HIDDEN_CLASS","Search","constructor","element","ui","header","document","querySelector","formWrapper","form","toggleButton","clearButton","suggestions","suggestionsHolder","searchInput","closeButton","submitButton","settings","endpoint","dataset","url","minChars","isOpen","lastScrollTop","bindEvents","showSearchForm","Events","$trigger","classList","add","html","setTimeout","focus","hideSearchForm","remove","modalOpen","isIos","body","scrollTop","data","autoFocus","modalClose","value","blur","ScreenDimensions","isTabletLandscapeAndBigger","clearSuggestions","debounceGetSuggestions","debounce","e","getSuggestions","$on","addEventListener","event","onTyping","preventDefault","term","toggleSuggestionResults","action","key","keyCode","keyboardEventCode","enter","indexOf","length","lightTheme","target","escape","getSuggestionsSuccess","response","innerHTML","parser","DOMParser","content","parseFromString","firstChild","allowKey","API","get","encodeURIComponent","then","catch","clearInput","focusInput","n","Number","isNaN","parseFloat","isFinite","installMediaQueryWatcher","mediaQuery","layoutChangedCallback","mql","window","matchMedia","addListener","matches","media","MEDIA_QUERIES","reference","breakpoint","screenHeight","height","screenWidth","width","RafThrottle","set","namespace","fn","updateWidth","forEach","mqObject","index","innerWidth","innerHeight"],"mappings":"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AO,CAAC,mDAAW;;AAEhC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC7CA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACrBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;;ACRA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;;AClBA,eAAe,mBAAO,CAAC,qDAAY;AACnC,UAAU,mBAAO,CAAC,2CAAO;AACzB,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO,YAAY;AAC9B,WAAW,QAAQ;AACnB;AACA,WAAW,OAAO;AAClB;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,8CAA8C,kBAAkB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC9LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC5BA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,mBAAmB,mBAAO,CAAC,6DAAgB;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC5BA,WAAW,mBAAO,CAAC,+CAAS;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACtBA,eAAe,mBAAO,CAAC,uDAAa;AACpC,eAAe,mBAAO,CAAC,qDAAY;AACnC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA","file":"js/Search.js","sourcesContent":["import isNumeric from '@utilities/is-numeric'\nimport isAndroid from '@utilities/detect-os'\n\n/**\n * Only a-z, A-Z and 0-9 are allowed keys\n *\n * @param enteredKey\n * @returns {boolean}\n * @constructor\n */\nconst IsBasicKey = function (enteredKey) {\n // When a keyCode was passed along\n if (\n (isNumeric(enteredKey) && enteredKey >= 48 && enteredKey <= 57) ||\n (enteredKey >= 65 && enteredKey <= 90) ||\n (isAndroid && enteredKey === 229)\n )\n return true\n\n // When a key was passed along\n if (/^[a-zA-Z0-9]{0,1}$/.test(enteredKey)) return true\n\n return false\n}\n\nexport default IsBasicKey\n","import IsBasicKey from './is-basic-key'\n\nexport default IsBasicKey\n","import Events from '@utilities/events';\nimport keyboardEventCode from '@utilities/keyboard-event-code';\nimport IsBasicKey from '@utilities/is-basic-key';\nimport isIos from '@utilities/detect-os';\nimport debounce from 'lodash/debounce';\nimport API from '@utilities/api';\nimport ScreenDimensions from '@utilities/screen-dimensions';\nimport { body, html } from '@utilities/dom-elements';\n\nconst JS_HOOK_SEARCH_TOGGLE = '[js-hook-search-toggle]';\nconst JS_HOOK_SUGGESTIONS_HOLDER = '[js-hook-search-suggestions-holder]';\nconst JS_HOOK_HEADER = '[js-hook-header]';\nconst JS_HOOK_SEARCH_FORM_WRAPPER = '[js-hook-search-form-wrapper]';\nconst JS_HOOK_SEARCH_FORM = '[js-hook-search-form]';\nconst JS_HOOK_SEARCH_SUGGESTIONS = '[js-hook-search-suggestions]';\nconst JS_HOOK_SEARCH_INPUT = '[js-hook-search-input]';\nconst JS_HOOK_SUBMIT = '[js-hook-submit]';\nconst JS_HOOK_CLEAR = '[js-hook-clear]';\nconst JS_HOOK_CLOSE_BUTTON = '[js-hook-search-suggestions-close]';\nconst CLASS_SEARCH_HTML = 'search--is-open';\nconst CLASS_SEARCH_INPUT_HTML = 'search--is-in-focus';\nconst CLASS_ACTIVE = 'is--active';\nconst HIDDEN_CLASS = 'u-hidden';\n\nclass Search {\n constructor(element) {\n this.element = element;\n\n this.ui = {\n header: document.querySelector(JS_HOOK_HEADER),\n formWrapper: this.element.querySelector(JS_HOOK_SEARCH_FORM_WRAPPER),\n form: this.element.querySelector(JS_HOOK_SEARCH_FORM),\n toggleButton: this.element.querySelector(JS_HOOK_SEARCH_TOGGLE),\n clearButton: this.element.querySelector(JS_HOOK_CLEAR),\n suggestions: this.element.querySelector(JS_HOOK_SEARCH_SUGGESTIONS),\n suggestionsHolder: this.element.querySelector(JS_HOOK_SUGGESTIONS_HOLDER),\n searchInput: this.element.querySelector(JS_HOOK_SEARCH_INPUT),\n closeButton: this.element.querySelector(JS_HOOK_CLOSE_BUTTON),\n submitButton: this.element.querySelector(JS_HOOK_SUBMIT)\n };\n\n this.settings = {\n endpoint: this.ui.suggestionsHolder.dataset.url,\n minChars: 3,\n isOpen: false,\n lastScrollTop: false,\n };\n\n this.bindEvents();\n }\n\n showSearchForm() {\n Events.$trigger('search::input-open');\n this.ui.formWrapper.classList.add(CLASS_ACTIVE);\n html.classList.add(CLASS_SEARCH_INPUT_HTML);\n\n // without timeout causes page to scroll/jump up\n setTimeout(() => {\n this.ui.searchInput.focus();\n }, 400);\n }\n\n hideSearchForm() {\n this.ui.formWrapper.classList.remove(CLASS_ACTIVE);\n html.classList.remove(CLASS_SEARCH_INPUT_HTML);\n }\n\n modalOpen() {\n this.settings.isOpen = true;\n html.classList.add(CLASS_SEARCH_HTML);\n\n if (isIos) {\n // Scroll body to top to fix the iOs keyboard overlay which pushes the website up\n body.scrollTop = this.settings.lastScrollTop;\n body.scrollTop = 0;\n }\n\n Events.$trigger('focustrap::activate', {\n data: {\n element: this.element,\n autoFocus: false,\n },\n });\n\n this.ui.searchInput.focus();\n }\n\n modalClose() {\n this.settings.isOpen = false;\n\n if (this.settings.lastScrollTop) {\n body.scrollTop = this.settings.lastScrollTop;\n this.settings.lastScrollTop = null;\n }\n\n html.classList.remove(CLASS_SEARCH_HTML);\n\n Events.$trigger('focustrap::deactivate');\n\n this.ui.searchInput.value = '';\n this.ui.searchInput.blur();\n\n if (!ScreenDimensions.isTabletLandscapeAndBigger) {\n this.clearSuggestions();\n }\n }\n\n /**\n * Bind all general events\n */\n bindEvents() {\n const debounceGetSuggestions = debounce((e) => this.getSuggestions(e), 400);\n\n Events.$on(`modal[modal-search]::open`, () => this.modalOpen());\n Events.$on(`modal[modal-search]::close`, () => this.modalClose());\n\n this.ui.toggleButton.addEventListener('click', () => this.showSearchForm());\n\n this.ui.closeButton.addEventListener('click', () => {\n Events.$trigger('modal[modal-search]::close');\n this.hideSearchForm();\n });\n\n this.ui.clearButton.addEventListener('click', () => this.clearSuggestions(true, true));\n\n this.ui.searchInput.addEventListener('keydown', (event) => this.onTyping(event));\n\n this.ui.searchInput.addEventListener('keyup', (e) => debounceGetSuggestions(e));\n\n // this.ui.clearButton.addEventListener('click', (e) => {\n // e.preventDefault();\n // this.ui.form.reset();\n // });\n\n this.ui.form.addEventListener('submit', (e) => {\n if (this.ui.searchInput.value === '') {\n e.preventDefault();\n } else {\n Events.$trigger('gtm::push', {\n data: {\n event: 'search',\n term: this.ui.searchInput.value\n }\n });\n }\n });\n\n if (!ScreenDimensions.isTabletLandscapeAndBigger && !this.settings.isOpen) {\n this.ui.submitButton.addEventListener('click', () =>\n Events.$trigger('modal[modal-search]::open'),\n );\n }\n }\n\n toggleSuggestionResults(action) {\n this.ui.suggestionsHolder.classList[action === 'show' ? 'remove' : 'add'](HIDDEN_CLASS);\n }\n\n onTyping(event) {\n const key = event.key || event.keyCode;\n\n // If the search is not open yet, let enter open the search in stead of submitting\n if (!this.settings.isOpen && keyboardEventCode.enter.indexOf(key) !== -1) {\n event.preventDefault();\n }\n\n if (!this.settings.isOpen && this.ui.searchInput.value.length >= this.settings.minChars) {\n Events.$trigger('loader::show', {\n data: {\n lightTheme: true,\n target: this.ui.form,\n },\n });\n }\n\n if (keyboardEventCode.escape.indexOf(event.keyCode || event.key) !== -1) {\n Events.$trigger('loader::hide');\n }\n }\n\n /**\n * Process Ajax response for SearchServices-GetSuggestions\n *\n * @param {Object|string} response - Empty object literal if null response or string with rendered\n * suggestions template contents\n */\n getSuggestionsSuccess(response) {\n // Stop Loading\n Events.$trigger('loader::hide');\n\n // Empty Suggestions\n this.ui.suggestionsHolder.innerHTML = '';\n\n const parser = new DOMParser();\n const content = parser.parseFromString(response, 'text/html').body;\n\n if (!content) {\n this.clearSuggestions();\n return;\n }\n\n this.ui.suggestionsHolder.innerHTML = content.firstChild.innerHTML;\n\n // Lazyloaded images\n Events.$trigger('lazyimage::update');\n\n // Bind All Events\n Events.$trigger('events::dom-reinit');\n Events.$trigger('modal[modal-search]::open');\n\n // Chat buttons rebind event\n Events.$trigger('chat::reinit-buttons');\n }\n\n /**\n * Retrieve suggestions\n */\n getSuggestions(e) {\n const key = e.keyCode || e.key;\n const allowKey = IsBasicKey(key);\n\n if (!allowKey && (!this.settings.isOpen ? keyboardEventCode.enter.indexOf(key) === -1 : true)) {\n return;\n }\n\n const value = this.ui.searchInput.value || '';\n\n if (value.length >= this.settings.minChars) {\n Events.$trigger('loader::show', {\n data: {\n lightTheme: true,\n target: ScreenDimensions.isTabletLandscapeAndBigger ? this.ui.suggestions : this.ui.form,\n },\n });\n\n API.get(this.settings.endpoint + encodeURIComponent(value))\n .then((response) => this.getSuggestionsSuccess(response.data))\n .catch(() => this.clearSuggestions(true));\n }\n }\n\n /**\n * Clear suggestions div\n */\n clearSuggestions(clearInput, focusInput) {\n Events.$trigger('loader::hide');\n this.ui.suggestionsHolder.innerHTML = '';\n\n if (clearInput) {\n this.ui.searchInput.value = '';\n }\n\n if (focusInput) {\n this.ui.searchInput.focus();\n }\n }\n}\n\nexport default Search;\n","import Search from './search'\n\nexport default Search\n","const isNumeric = function (n) {\n return !Number.isNaN(parseFloat(n)) && Number.isFinite(n)\n};\n\nexport default isNumeric;\n","import RafThrottle from '@utilities/raf-throttle'\n\nconst installMediaQueryWatcher = (mediaQuery, layoutChangedCallback) => {\n const mql = window.matchMedia(mediaQuery)\n mql.addListener((event) => layoutChangedCallback(event.matches, event.media))\n layoutChangedCallback(mql.matches, mql.media)\n}\n\nconst MEDIA_QUERIES = [\n {\n reference: 'isMobile',\n breakpoint: 320,\n },\n {\n reference: 'isMobilePlus',\n breakpoint: 480,\n },\n {\n reference: 'isTabletPortrait',\n breakpoint: 768,\n },\n {\n reference: 'isTabletLandscape',\n breakpoint: 1024,\n },\n {\n reference: 'isLaptop',\n breakpoint: 1240,\n },\n {\n reference: 'isDesktop',\n breakpoint: 1600,\n },\n {\n reference: 'isWidescreen',\n breakpoint: 1920,\n },\n]\n\nclass ScreenDimensions {\n get screenHeight() {\n return this.height\n }\n\n get screenWidth() {\n return this.width\n }\n\n constructor() {\n RafThrottle.set([\n {\n element: window,\n event: 'resize',\n namespace: 'ScreenDimensionsWidthChange',\n fn: () => this.updateWidth(),\n },\n ])\n\n MEDIA_QUERIES.forEach((mqObject, index) => {\n const { breakpoint } = mqObject\n\n installMediaQueryWatcher(`(min-width: ${breakpoint}px)`, (matches) => {\n this[`${mqObject.reference}AndBigger`] = matches\n })\n\n if (!index) {\n installMediaQueryWatcher(`(max-width: ${breakpoint}px)`, (matches) => {\n this[mqObject.reference] = matches\n })\n } else if (MEDIA_QUERIES[index + 1]) {\n installMediaQueryWatcher(\n `(min-width: ${breakpoint}px) and (max-width: ${\n MEDIA_QUERIES[index + 1].breakpoint - 1\n }px)`,\n (matches) => {\n this[mqObject.reference] = matches\n },\n )\n } else {\n installMediaQueryWatcher(`(min-width: ${breakpoint}px)`, (matches) => {\n this[mqObject.reference] = matches\n })\n }\n })\n\n this.updateWidth()\n }\n\n updateWidth() {\n // eslint-disable-next-line\n ;(this.width = window.innerWidth), (this.height = window.innerHeight)\n }\n}\n\nexport default new ScreenDimensions()\n","/**\n * @shelf-version: 1.1.0\n */\n\nimport ScreenDimensions from './screen-dimensions'\n\nexport default ScreenDimensions\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n"],"sourceRoot":""}