{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src-code/app/app.component.ts","webpack:///./src-code/app/common/Fetcher.ts","webpack:///./src-code/@kilopix/core.module.ts","webpack:///./src-code/index.ts","webpack:///./src-code/@kilopix/utils.module.ts","webpack:///./src-code/app/header/header.component.ts","webpack:///./src-code/app/slider/slider.component.ts","webpack:///./node_modules/@egjs/hammerjs/dist/hammer.esm.js","webpack:///./src-code/app/context/context.component.ts","webpack:///./src-code/app/bundle/bundle.component.ts","webpack:///./src-code/app/gift/gift.component.ts","webpack:///./src-code/app/footer/footer.component.ts","webpack:///./src-code/app/cookie-banner/cookie-banner.component.ts","webpack:///./src-code/app/call-to-action/call-to-action.component.ts","webpack:///./src-code/app/stores/StoresRoot.component.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","App","AppData","core_module_1","utils_module_1","header_component_1","slider_component_1","context_component_1","bundle_component_1","gift_component_1","footer_component_1","cookie_banner_component_1","call_to_action_component_1","StoresRoot_component_1","AppComponent","this","sliders","contexts","getInstance","instance","html","document","getElementsByTagName","env","JSON","parse","getElementById","innerHTML","isPreview","classList","add","applicationPath","language","IDnode","cookiesConsent","run","_this","currentPage","body","getAttribute","replace","isMobile","window","addEventListener","load","scroll","resize","header","Header","footer","Footer","bundle","Bundle","gift","Gift","sliderNodes","querySelectorAll","length","forEach","slider","push","Slider","contextsNodes","context","htmlContext","Context","contains","callToActionRootElement","querySelector","callToAction","CallToAction","storesRoot","StoresRoot","storesRootCallback","mapsStart","masterCookieConsentSet","CookieBanner","consentSet","isLoaded","delay","mediaQuery","Core","getMediaQuery","size","getSize","orientation","getOrientation","clearTimeout","resizeTimeout","setTimeout","resizeSpacer","remove","undefined","scrollTop","getScrollTop","scrollBottom","getScrollBottom","scrollPerc","getScrollPerc","scrollDirection","getScrollDirection","Utils","Fetcher","url","onSuccess","onError","formData","FormData","xhr","XMLHttpRequest","onreadystatechange","e","readyState","DONE","status","responseText","jsonValue","message","upload","percentage","Math","ceil","loaded","total","_onProgress","open","abort","onProgress","append","delete","getAll","has","send","getDocumentSize","documentElement","getBoundingClientRect","getWindowSize","width","innerWidth","height","innerHeight","mediaQueries","matchMedia","matches","parseInt","element","top","pageYOffset","elementContent","bottom","offsetHeight","direction","lastScrollPosition","getTransitionEnd","el","createElement","transitions","style","getAnimationEnd","animations","test","navigator","userAgent","HeaderNodes","root","buttonToggleNav","buttonToggleSearch","navWrap","nav","menu","toggle","preventDefault","click","app_component_1","hammerjs_1","nodes","data","init","listeners","getVisibleItems","previousVisibleItems","pageId","setCounter","setListWidth","setItemsWidth","setListPosition","updateNavigation","wrap","items","list","li","prev","next","counter","counterCurrent","counterTotal","type","isAnimate","isSwipe","getTotalPages","item","link","propertyName","hammer","default","set","threshold","on","offsetDirection","keyCode","setAttribute","removeAttribute","margin","getItemWidth","position","webkitTransform","transform","x","getListPosition","counterData","getCounterData","current","getLastPageItems","lastPageItems","visibleItems","area","offsetWidth","floor","to","from","offset","getNumberPrefix","number","_extends","assign","target","arguments","source","apply","_inheritsLoose","subClass","superClass","constructor","__proto__","_assertThisInitialized","self","ReferenceError","win","assign$1","TypeError","output","index","nextKey","VENDOR_PREFIXES","TEST_ELEMENT","round","abs","now","Date","prefixed","obj","prefix","prop","camelProp","toUpperCase","slice","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","val","getTouchActionProps","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","PROPS_XY","PROPS_CLIENT_XY","each","iterator","boolOrFn","args","inStr","str","find","indexOf","TouchAction","manager","_proto","compute","actions","toLowerCase","trim","update","options","touchAction","recognizers","recognizer","enable","concat","getTouchAction","hasPanX","hasPanY","cleanTouchActions","join","preventDefaults","input","srcEvent","session","prevented","hasNone","isTapPointer","pointers","isTapMovement","distance","isTapTouchTime","deltaTime","preventSrc","hasParent","node","parent","parentNode","getCenter","pointersLength","clientX","y","clientY","simpleCloneInputData","timeStamp","center","deltaX","deltaY","getDistance","p1","p2","props","sqrt","getAngle","atan2","PI","getDirection","getVelocity","computeInputData","firstInput","firstMultiple","offsetCenter","angle","offsetDelta","prevDelta","prevInput","eventType","computeDeltaXY","start","end","overallVelocity","overallVelocityX","overallVelocityY","scale","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","last","lastInterval","v","computeIntervalInputData","srcEventTarget","composedPath","path","inputHandler","pointersLen","changedPointersLen","changedPointers","isFirst","isFinal","emit","recognize","splitStr","split","addEventListeners","types","handler","removeEventListeners","removeEventListener","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","Input","callback","inputTarget","domHandler","ev","evEl","evTarget","evWin","destroy","inArray","src","findByKey","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","MSPointerEvent","PointerEvent","PointerEventInput","_Input","proto","store","pointerEvents","removePointer","eventTypeNormalized","pointerType","isTouch","storeIndex","pointerId","button","splice","toArray","Array","uniqueArray","sort","results","values","a","b","TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TouchInput","targetIds","touches","getTouches","targetTouches","allTouches","identifier","changedTouches","changedTargetTouches","filter","touch","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MouseInput","pressed","which","setLastTouch","eventData","primaryTouch","lastTouch","lts","lastTouches","recordTouches","isSyntheticEvent","dx","dy","TouchMouseInput","_manager","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","mouse","invokeArrayArg","arg","fn","isArray","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","_uniqueId","getRecognizerByNameIfManager","otherRecognizer","stateStr","state","Recognizer","id","simultaneous","requireFail","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","event","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","TapRecognizer","_Recognizer","taps","interval","time","posThreshold","pTime","pCenter","_timer","_input","count","_this2","validPointers","validMovement","validTouchTime","failTimeout","validInterval","validMultiTap","_this3","tapCount","AttrRecognizer","attrTest","optionPointers","isRecognized","isValid","directionStr","PanRecognizer","_AttrRecognizer","pX","pY","directionTest","hasMoved","SwipeRecognizer","PinchRecognizer","inOut","RotateRecognizer","PressRecognizer","validTime","defaults","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","preset","toggleCssProps","oldCssProps","Manager","handlers","stop","force","stopped","curRecognizer","existing","targetRecognizer","events","off","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","SINGLE_TOUCH_INPUT_MAP","SingleTouchInput","started","normalizeSingleTouches","all","changed","deprecate","method","deprecationMessage","Error","stack","log","console","warn","extend","dest","merge","keys","inherit","child","base","properties","childP","baseP","_super","bindFn","Hammer","VERSION","Tap","Pan","Swipe","Pinch","Rotate","Press","defaults$1","title","cover","text","content","links","washingButton","instructions","washing","buttonInstructionsDownload","stopImmediatePropagation","restore","titleHeight","coverHeight","setHeight","Fetcher_1","GiftNodes","form","fields","submit","emailRegex","phoneRegex","isLoading","errorsRemove","field","fieldValue","field_1","label","files","checked","serialize","validate","checkText","checkEmail","checkPhone","location","href","fetcher","display","containerMessage","parentElement","insertBefore","innerText","success","showErrors","errors","showError","errorsList","appendChild","getErrorsList","error","errorsContainers","removeChild","email","FooterNodes","newsletter","checkbox","isRegistered","envNode","drawMessage","setSubmitStatus","showMessage","overflow","action","cookieBanner","toString","SearchMode","ResultsLoadMode","searchMode","Basic","resultsLoadMode","XHR","resultsLoadDelay","resultsLoadFetcher","productThumbTemplate","selector","basic","basicTitle","basicRootsSelect","basicRootsClear","basicValuesSelect","basicValuesClear","advanced","advancedTitle","advancedTypeSelect","advancedTypeClear","advancedSubtypeSelect","advancedSubtypeClear","advancedColorSelect","advancedColorClear","advancedCollectionSelect","advancedCollectionClear","advancedMaterialSelect","advancedMaterialClear","advancedYearSelect","advancedYearClear","advancedDesignerSelect","advancedDesignerClear","orderBySelect","loading","resultsPlaceholder","toggleSearchMode","basicRootChange","clearSelection","basicSubmit","advancedFillSubTypes","advancedSubmit","resultsReload","Advanced","disabled","imagesLoader","query","execute","popstate","visible","configurable","stateSearchMode","setBreadcrumbsLast","searchModeRelatedPageData","selectValueSet","Event","sortMode","resultsRender","forceReload","rootValue","selectedIndex","valueValue","parameters","generalSubmit","rootName","optionsClear","select","optionsClone","IDtype","selectValueGet","IDsubType","subtype","IDcolor","color","IDcollection","collection","IDmaterial","material","IDyear","year","IDdesigner","designer","typeData","dataGetType","optionAdd","st","querystring","substring","finalURL","Redirect","loadingVisible","resultsLoadTimeout","state_1","history","pushState","currentTarget","IDselect","dataset","lastIndexOf","resultsClear","hasChildNodes","firstChild","products","createTextNode","no_results","product","productThumb","populateTemplate","selectFrom","selectTo","option","cloneNode","a_img","u","img","crop","imageURL","tools","missing_image","a_name","collectionA","cn","cu","designDiv","ds","design","designerA","designerAcloned","lastBreadCrumb","pages","timeout","executeInternal","tempNodes","queue","isIntoView","executeLoadNext","firstImage","dataSrc","shift","rect","elemTop","elemBottom","isVisible","LocatorStatus","settings","earthRadius","iconStandard","iconPriority","geolocationPosition","_locatorStatus","NotSet","markers","markerCluster","rootNode","locatorMessage","locatorMessageClose","locator","locationInput","locationReset","distanceSelect","distanceReset","storesItems","mapPlaceholder","mapSearch","setSelected","localStorage","setItem","geolocate","_loop_1","cursor","this_1","stores","priority","marker","setAnimation","google","maps","Animation","BOUNCE","animationTimeout","map","panTo","getPosition","setZoom","locatorEnabledStoredValue","getItem","Enabled","Disabled","geolocationSuccess","geolocationError","locatorStatus","geolocation","getCurrentPosition","autocomplete","places","Autocomplete","addListener","mapOptions","zoom","minZoom","LatLng","mapTypeControlOptions","mapTypeIds","MapTypeId","ROADMAP","mapTypeControl","mapApplyStyle","map_styles","mapsRenderMarkers","place","getPlace","geometry","lat","lng","coords","latitude","longitude","radius","distanceValue","bound","LatLngBounds","mlat","lt","mlng","ln","dLat","mapsRad","dLong","sin","cos","order","showDistance","fitBounds","behavior","mcOptions","gridSize","styles","fontFamily","textColor","textSize","maxZoom","MarkerClusterer","Size","origin","Point","anchor","lg","Marker","icon","setMap","addMarkers","mapObj","mapStyle","styledMap","StyledMapType","Map","mapTypes","setMapTypeId","mapsItemDetailsClear","mapsItemDetailsShow","h3","tag","parent_1","top_1"],"mappings":"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","file":"app.js","sourcesContent":[" \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 \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\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.l = 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// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.App = exports.AppData = void 0;\r\n// Imports\r\nvar core_module_1 = require(\"../@kilopix/core.module\");\r\nvar utils_module_1 = require(\"../@kilopix/utils.module\");\r\nvar header_component_1 = require(\"./header/header.component\");\r\nvar slider_component_1 = require(\"./slider/slider.component\");\r\nvar context_component_1 = require(\"./context/context.component\");\r\nvar bundle_component_1 = require(\"./bundle/bundle.component\");\r\nvar gift_component_1 = require(\"./gift/gift.component\");\r\nvar footer_component_1 = require(\"./footer/footer.component\");\r\nvar cookie_banner_component_1 = require(\"./cookie-banner/cookie-banner.component\");\r\nvar call_to_action_component_1 = require(\"./call-to-action/call-to-action.component\");\r\nvar StoresRoot_component_1 = require(\"./stores/StoresRoot.component\");\r\n// App Component (Singleton pattern)\r\nvar AppComponent = /** @class */ (function () {\r\n // Constructor\r\n function AppComponent() {\r\n this.sliders = [];\r\n this.contexts = [];\r\n }\r\n // Get instance\r\n AppComponent.getInstance = function () {\r\n if (!AppComponent.instance) {\r\n AppComponent.instance = new AppComponent();\r\n AppComponent.instance.html = document.getElementsByTagName(\"html\")[0];\r\n var env = JSON.parse(document.getElementById(\"env\").innerHTML);\r\n if (env.isPreview) {\r\n AppComponent.instance.html.classList.add(\"is-preview\");\r\n exports.AppData.isPreview = true;\r\n }\r\n exports.AppData.applicationPath = env.applicationPath;\r\n exports.AppData.language = env.language;\r\n exports.AppData.IDnode = env.IDnode;\r\n exports.AppData.cookiesConsent = env.cookiesConsent;\r\n }\r\n return AppComponent.instance;\r\n };\r\n // Run\r\n AppComponent.prototype.run = function () {\r\n var _this = this;\r\n exports.AppData.currentPage = document.body.getAttribute(\"class\");\r\n this.html.classList.replace(\"no-js\", \"js\");\r\n this.html.classList.add(exports.AppData.isMobile ? \"mobile\" : \"no-mobile\");\r\n window.addEventListener(\"load\", function () { _this.load(); });\r\n window.addEventListener(\"scroll\", function () { _this.scroll(); });\r\n window.addEventListener(\"resize\", function () { _this.resize(500); });\r\n this.header = new header_component_1.Header();\r\n this.footer = new footer_component_1.Footer();\r\n this.bundle = new bundle_component_1.Bundle();\r\n this.gift = new gift_component_1.Gift();\r\n // Sliders\r\n var sliderNodes = document.querySelectorAll(\".slider\");\r\n if (sliderNodes.length) {\r\n sliderNodes.forEach(function (slider) {\r\n _this.sliders.push(new slider_component_1.Slider(slider));\r\n });\r\n }\r\n // Contexts\r\n var contextsNodes = document.querySelectorAll(\".context\");\r\n if (contextsNodes.length) {\r\n contextsNodes.forEach(function (context) {\r\n var htmlContext = context;\r\n _this.contexts.push(new context_component_1.Context(htmlContext));\r\n });\r\n }\r\n // CallToAction (aka Products)\r\n if (document.body.classList.contains(\"products-root\")) {\r\n var callToActionRootElement = document.querySelector(\".call-to-action\");\r\n this.callToAction = new call_to_action_component_1.CallToAction(callToActionRootElement);\r\n }\r\n // StoresRoot\r\n if (document.body.classList.contains(\"stores-root\")) {\r\n this.storesRoot = new StoresRoot_component_1.StoresRoot();\r\n window.storesRootCallback = function () { _this.storesRoot.mapsStart(); };\r\n }\r\n //\r\n this.resize();\r\n /**\r\n *\tRendo globale la funzione che gestisce le operazioni di accettazione\r\n *\tdei cookies. Passaggio obbligato visto che la chiamata alla funzione\r\n *\tavviene inline, nel tag html\r\n */\r\n window.masterCookieConsentSet = cookie_banner_component_1.CookieBanner.consentSet;\r\n };\r\n // Load\r\n AppComponent.prototype.load = function () {\r\n exports.AppData.isLoaded = true;\r\n //\r\n this.resize();\r\n };\r\n // Resize\r\n AppComponent.prototype.resize = function (delay) {\r\n if (delay === void 0) { delay = 0; }\r\n exports.AppData.mediaQuery = core_module_1.Core.getMediaQuery();\r\n exports.AppData.size = core_module_1.Core.getSize();\r\n exports.AppData.orientation = core_module_1.Core.getOrientation();\r\n AppComponent.instance.html.classList.add(\"no-transition\");\r\n clearTimeout(AppComponent.resizeTimeout);\r\n AppComponent.resizeTimeout = setTimeout(function () {\r\n cookie_banner_component_1.CookieBanner.resizeSpacer();\r\n AppComponent.instance.html.classList.remove(\"no-transition\");\r\n }, delay);\r\n this.header.resize();\r\n if (this.sliders.length) {\r\n this.sliders.forEach(function (slider) {\r\n slider.resize();\r\n });\r\n }\r\n if (this.contexts.length) {\r\n this.contexts.forEach(function (context) {\r\n context.resize();\r\n });\r\n }\r\n if (this.callToAction !== undefined)\r\n this.callToAction.resize();\r\n this.scroll();\r\n };\r\n // Scroll\r\n AppComponent.prototype.scroll = function () {\r\n exports.AppData.scrollTop = core_module_1.Core.getScrollTop();\r\n exports.AppData.scrollBottom = core_module_1.Core.getScrollBottom();\r\n exports.AppData.scrollPerc = core_module_1.Core.getScrollPerc();\r\n exports.AppData.scrollDirection = core_module_1.Core.getScrollDirection();\r\n //\r\n if (this.callToAction !== undefined)\r\n this.callToAction.scroll();\r\n };\r\n return AppComponent;\r\n}());\r\n// Exports\r\nexports.AppData = {\r\n mode: process.env.NODE_ENV,\r\n mediaQuery: 0,\r\n size: \"xs\",\r\n orientation: \"portrait\",\r\n scrollTop: 0,\r\n scrollBottom: 0,\r\n scrollPerc: 0,\r\n scrollDirection: \"down\",\r\n isMobile: utils_module_1.Utils.isMobile(),\r\n isLoaded: false,\r\n applicationPath: \"\",\r\n language: \"\",\r\n IDnode: 0,\r\n cookiesConsent: false,\r\n isPreview: false,\r\n currentPage: \"\"\r\n};\r\nexports.App = AppComponent.getInstance();\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Fetcher = void 0;\r\nvar Fetcher = /** @class */ (function () {\r\n //\r\n function Fetcher(url, onSuccess, onError) {\r\n var _this = this;\r\n this.onSuccess = onSuccess;\r\n this.onError = onError;\r\n this.formData = new FormData();\r\n //\r\n this.xhr = new XMLHttpRequest();\r\n this.xhr.onreadystatechange = function (e) {\r\n if (_this.xhr.readyState == XMLHttpRequest.DONE) {\r\n if (_this.xhr.status == 200 && _this.xhr.responseText != \"undefined\") {\r\n // SUCCESS\r\n if (_this.onSuccess !== undefined)\r\n _this.onSuccess(JSON.parse(_this.xhr.responseText));\r\n }\r\n else {\r\n // ERROR\r\n if (_this.onError !== undefined) {\r\n var jsonValue = undefined;\r\n var message = undefined;\r\n try {\r\n jsonValue = JSON.parse(_this.xhr.responseText);\r\n message = jsonValue.message;\r\n }\r\n catch (e) { }\r\n _this.onError(_this.xhr.status, jsonValue, message);\r\n }\r\n }\r\n }\r\n };\r\n this.xhr.upload.addEventListener(\"progress\", function (e) {\r\n var percentage = Math.ceil((e.loaded * 100) / e.total);\r\n if (_this._onProgress !== undefined)\r\n _this._onProgress(percentage, e);\r\n });\r\n //\r\n this.xhr.open(\"POST\", url, true);\r\n }\r\n Fetcher.prototype.abort = function () {\r\n this.xhr.abort();\r\n return this;\r\n };\r\n Fetcher.prototype.onProgress = function (onProgress) {\r\n this._onProgress = onProgress;\r\n return this;\r\n };\r\n Fetcher.prototype.append = function (key, value) {\r\n if (key === undefined || value === undefined)\r\n return this;\r\n //\r\n this.formData.append(key, value);\r\n return this;\r\n };\r\n Fetcher.prototype.delete = function (key) {\r\n this.formData.delete(key);\r\n return this;\r\n };\r\n Fetcher.prototype.get = function (key) {\r\n return this.formData.get(key);\r\n };\r\n Fetcher.prototype.getAll = function (key) {\r\n return this.formData.getAll(key);\r\n };\r\n Fetcher.prototype.has = function (key) {\r\n return this.formData.has(key);\r\n };\r\n Fetcher.prototype.send = function () {\r\n if (this.formData === undefined)\r\n this.xhr.send();\r\n else\r\n this.xhr.send(this.formData);\r\n return this;\r\n };\r\n return Fetcher;\r\n}());\r\nexports.Fetcher = Fetcher;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Core = void 0;\r\n// Core\r\nvar Core = /** @class */ (function () {\r\n function Core() {\r\n }\r\n // Get document size\r\n Core.getDocumentSize = function () {\r\n return document.documentElement.getBoundingClientRect();\r\n };\r\n // Get window size\r\n Core.getWindowSize = function () {\r\n return {\r\n width: window.innerWidth,\r\n height: window.innerHeight\r\n };\r\n };\r\n // Get media query\r\n Core.getMediaQuery = function () {\r\n var mediaQuery;\r\n for (var i in Core.mediaQueries) {\r\n if (window.matchMedia && window.matchMedia(\"screen and (min-width: \" + i + \")\").matches) {\r\n mediaQuery = parseInt(i);\r\n }\r\n }\r\n if (mediaQuery == null) {\r\n mediaQuery = 0;\r\n }\r\n return mediaQuery;\r\n };\r\n // Get size\r\n Core.getSize = function () {\r\n var mediaQuery = Core.getMediaQuery() + \"em\";\r\n return (parseInt(mediaQuery) === 0) ? \"xs\" : Core.mediaQueries[mediaQuery];\r\n };\r\n // Get orientation\r\n Core.getOrientation = function () {\r\n var orientation = \"portrait\";\r\n if (window.matchMedia(\"(orientation: landscape)\").matches) {\r\n orientation = \"landscape\";\r\n }\r\n return orientation;\r\n };\r\n // Get scroll top\r\n Core.getScrollTop = function (element) {\r\n var top = (element != null) ? element.scrollTop : window.pageYOffset;\r\n return (top < 0) ? 0 : top;\r\n };\r\n // Get scroll bottom\r\n Core.getScrollBottom = function (element, elementContent) {\r\n var height = (elementContent) ? elementContent.offsetHeight : Core.getDocumentSize()[\"height\"];\r\n var bottom = (height - Core.getWindowSize()[\"height\"]) - Core.getScrollTop(element);\r\n return (bottom < 0) ? 0 : bottom;\r\n };\r\n // Get scroll perc\r\n Core.getScrollPerc = function (element, elementContent) {\r\n var height = (!element) ? Core.getDocumentSize()[\"height\"] : elementContent.offsetHeight;\r\n return Core.getScrollTop(element) / (height - Core.getWindowSize()[\"height\"]);\r\n };\r\n // Get scroll direction\r\n Core.getScrollDirection = function (element) {\r\n var direction = (Core.getScrollTop(element) > Core.lastScrollPosition) ? \"down\" : \"up\";\r\n Core.lastScrollPosition = Core.getScrollTop(element);\r\n return direction;\r\n };\r\n // Get transition end\r\n Core.getTransitionEnd = function () {\r\n var el = document.createElement(\"fakeelement\");\r\n var transitions = {\r\n \"transition\": \"transitionend\",\r\n \"OTransition\": \"oTransitionEnd\",\r\n \"MozTransition\": \"transitionend\",\r\n \"WebkitTransition\": \"webkitTransitionEnd\"\r\n };\r\n var t = \"\";\r\n for (t in transitions) {\r\n if (el.style[t] !== undefined) {\r\n return transitions[t];\r\n }\r\n }\r\n };\r\n // Get animation end\r\n Core.getAnimationEnd = function () {\r\n var el = document.createElement(\"fakeelement\");\r\n var animations = {\r\n \"animation\": \"animationend\",\r\n \"OAnimation\": \"oAnimationEnd\",\r\n \"MozAnimation\": \"animationend\",\r\n \"WebkitAnimation\": \"webkitAnimationEnd\"\r\n };\r\n var t = \"\";\r\n for (t in animations) {\r\n if (el.style[t] !== undefined) {\r\n return animations[t];\r\n }\r\n }\r\n };\r\n Core.mediaQueries = {\r\n \"30em\": \"s\",\r\n \"48em\": \"m\",\r\n \"64em\": \"l\",\r\n \"80em\": \"xl\",\r\n \"90em\": \"xxl\",\r\n \"120em\": \"xxxl\"\r\n };\r\n return Core;\r\n}());\r\nexports.Core = Core;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n// Imports\r\nrequire(\"./index.scss\");\r\nvar app_component_1 = require(\"./app/app.component\");\r\n// Run app\r\napp_component_1.App.run();\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Utils = void 0;\r\n// Utils\r\nvar Utils = /** @class */ (function () {\r\n function Utils() {\r\n }\r\n // Is mobile\r\n Utils.isMobile = function () {\r\n if (/Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n return Utils;\r\n}());\r\nexports.Utils = Utils;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Header = exports.HeaderNodes = void 0;\r\n// Header nodes\r\nexports.HeaderNodes = {\r\n root: document.querySelector(\"body > header\"),\r\n buttonToggleNav: document.querySelector(\".button-toggle-nav\"),\r\n buttonToggleSearch: document.querySelector(\".button-toggle-search\"),\r\n navWrap: document.querySelector(\".nav-wrap > .wrap\"),\r\n nav: document.querySelector(\".nav-wrap nav\"),\r\n menu: document.querySelector(\".nav-wrap nav ul\")\r\n};\r\n// Header\r\nvar Header = /** @class */ (function () {\r\n function Header() {\r\n exports.HeaderNodes[\"buttonToggleNav\"].addEventListener(\"click\", function (e) {\r\n exports.HeaderNodes[\"root\"].classList.toggle(\"has-menu\");\r\n e.preventDefault();\r\n });\r\n exports.HeaderNodes[\"buttonToggleSearch\"].addEventListener(\"click\", function (e) {\r\n exports.HeaderNodes[\"root\"].classList.toggle(\"has-search\");\r\n e.preventDefault();\r\n });\r\n }\r\n // Resize\r\n Header.prototype.resize = function () {\r\n var manuWrapHeight = exports.HeaderNodes[\"navWrap\"].offsetHeight, menuHeight = exports.HeaderNodes[\"menu\"].offsetHeight;\r\n if (manuWrapHeight <= menuHeight) {\r\n exports.HeaderNodes[\"nav\"].classList.remove(\"nav-center\");\r\n }\r\n else {\r\n exports.HeaderNodes[\"nav\"].classList.add(\"nav-center\");\r\n }\r\n if (exports.HeaderNodes[\"root\"].classList.contains(\"has-menu\")) {\r\n exports.HeaderNodes[\"buttonToggleNav\"].click();\r\n }\r\n };\r\n return Header;\r\n}());\r\nexports.Header = Header;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Slider = void 0;\r\n// Imports\r\nvar core_module_1 = require(\"../../@kilopix/core.module\");\r\nvar app_component_1 = require(\"../app.component\");\r\nvar hammerjs_1 = require(\"@egjs/hammerjs\");\r\n// Slider\r\nvar Slider = /** @class */ (function () {\r\n function Slider(slider) {\r\n this.nodes = {};\r\n this.data = {};\r\n this.init(slider);\r\n this.listeners();\r\n }\r\n // Resize\r\n Slider.prototype.resize = function () {\r\n if (this.getVisibleItems() != this.data.previousVisibleItems) {\r\n this.data.previousVisibleItems = this.getVisibleItems();\r\n this.data.pageId = 0;\r\n this.setCounter();\r\n this.setListWidth();\r\n this.setItemsWidth();\r\n this.setListPosition(0);\r\n this.updateNavigation();\r\n return;\r\n }\r\n this.setCounter();\r\n this.setListWidth();\r\n this.setItemsWidth();\r\n this.setListPosition();\r\n this.updateNavigation();\r\n };\r\n // Init\r\n Slider.prototype.init = function (slider) {\r\n this.nodes.root = slider;\r\n this.nodes.wrap = slider.querySelector(\".slider-wrap\");\r\n this.nodes.items = slider.querySelector(\".slider-items\");\r\n this.nodes.list = slider.querySelector(\".slider-items ul\");\r\n this.nodes.li = slider.querySelectorAll(\".slider-items li\");\r\n this.nodes.prev = slider.querySelector(\"button:first-child\");\r\n this.nodes.next = slider.querySelector(\"button:last-child\");\r\n this.nodes.counter = slider.querySelector(\".counter\");\r\n this.nodes.counterCurrent = slider.querySelector(\".current\");\r\n this.nodes.counterTotal = slider.querySelector(\".total\");\r\n this.data.type = (slider.classList.contains(\"slider-mini\")) ? \"mini\" : \"default\";\r\n this.data.length = this.nodes.li.length;\r\n this.data.isAnimate = false;\r\n this.data.isSwipe = false;\r\n this.data.pageId = 0;\r\n if (this.data.type === \"mini\") {\r\n this.nodes.list.classList.add(\"no-transition\");\r\n }\r\n };\r\n // Listeners\r\n Slider.prototype.listeners = function () {\r\n var _this = this;\r\n if (this.data.type === \"default\") {\r\n this.nodes.prev.addEventListener(\"click\", function (e) {\r\n if ((_this.data.pageId - 1) < 0)\r\n return;\r\n _this.data.pageId--;\r\n _this.updateNavigation();\r\n _this.setListPosition();\r\n _this.setCounter();\r\n });\r\n }\r\n this.nodes.next.addEventListener(\"click\", function (e) {\r\n if (_this.data.type === \"mini\") {\r\n if (_this.data.isAnimate || _this.data.length == 1)\r\n return;\r\n _this.data.isAnimate = true;\r\n _this.data.pageId++;\r\n if (_this.data.pageId >= _this.data.length) {\r\n _this.data.pageId = 0;\r\n }\r\n _this.nodes.list.classList.remove(\"no-transition\");\r\n }\r\n else {\r\n if ((_this.data.pageId + 1) > _this.getTotalPages())\r\n return;\r\n _this.data.pageId++;\r\n _this.updateNavigation();\r\n }\r\n _this.setListPosition();\r\n _this.setCounter();\r\n });\r\n this.nodes.li.forEach(function (item) {\r\n var links = item.querySelectorAll(\"a\");\r\n links.forEach(function (link) {\r\n link.addEventListener(\"click\", function (e) {\r\n if (_this.data.isSwipe)\r\n e.preventDefault();\r\n });\r\n });\r\n /* (old)\r\n item.querySelector(\"a\").addEventListener(\"click\", (e) => {\r\n if (this.data.isSwipe) e.preventDefault();\r\n })\r\n */\r\n });\r\n if (this.data.type === \"mini\") {\r\n this.nodes.list.addEventListener(core_module_1.Core.getTransitionEnd(), function (e) {\r\n if (e.propertyName === \"filter\")\r\n return;\r\n if (_this.data.pageId === 0) {\r\n _this.nodes.list.classList.add(\"no-transition\");\r\n _this.nodes.list.classList.remove(\"loop\");\r\n _this.setListPosition(0);\r\n }\r\n if (_this.data.pageId === (_this.data.length - 1)) {\r\n _this.nodes.list.classList.add(\"loop\");\r\n }\r\n _this.data.isAnimate = false;\r\n });\r\n }\r\n // Swipe\r\n var hammer = new hammerjs_1.default(this.nodes.items);\r\n hammer.get('pan').set({ threshold: 1 });\r\n hammer.on(\"panstart\", function (e) {\r\n _this.data.isSwipe = true;\r\n });\r\n hammer.on(\"panend\", function (e) {\r\n setTimeout(function () {\r\n _this.data.isSwipe = false;\r\n }, 50);\r\n });\r\n hammer.on(\"swipe\", function (e) {\r\n if (e.offsetDirection === 4 && _this.data.type === \"default\")\r\n _this.nodes.prev.click();\r\n if (e.offsetDirection === 2)\r\n _this.nodes.next.click();\r\n });\r\n // Keyboard (default big slider only)\r\n if (this.data.type === \"default\") {\r\n document.addEventListener(\"keydown\", function (e) {\r\n if (e.keyCode === 39) {\r\n _this.nodes.next.click();\r\n }\r\n else if (e.keyCode === 37) {\r\n _this.nodes.prev.click();\r\n }\r\n });\r\n }\r\n };\r\n // Update navigation\r\n Slider.prototype.updateNavigation = function () {\r\n if (this.data.type === \"mini\") {\r\n if (this.data.length > 1) {\r\n this.nodes.next.classList.remove(\"hide\");\r\n }\r\n else {\r\n // Rimuovo i margini per centrare il contatore visto \r\n // che il bottone \"next\" è nascosto.\r\n this.nodes.counter.style.margin = \"0\";\r\n }\r\n return;\r\n }\r\n if (this.data.length <= this.getVisibleItems()) {\r\n this.nodes.prev.classList.add(\"hide\");\r\n this.nodes.next.classList.add(\"hide\");\r\n return;\r\n }\r\n this.nodes.next.classList.remove(\"hide\");\r\n this.nodes.prev.classList.remove(\"hide\");\r\n if (this.data.pageId <= 0) {\r\n this.nodes.prev.setAttribute(\"disabled\", true);\r\n this.nodes.next.removeAttribute(\"disabled\");\r\n }\r\n else if (this.data.pageId >= this.getTotalPages()) {\r\n this.nodes.next.setAttribute(\"disabled\", true);\r\n this.nodes.prev.removeAttribute(\"disabled\");\r\n }\r\n else {\r\n this.nodes.prev.removeAttribute(\"disabled\");\r\n this.nodes.next.removeAttribute(\"disabled\");\r\n }\r\n };\r\n // Set list width\r\n Slider.prototype.setListWidth = function () {\r\n this.nodes.list.style.width = this.getItemWidth() * this.data.length + \"px\";\r\n };\r\n // Set items width\r\n Slider.prototype.setItemsWidth = function () {\r\n var width = this.getItemWidth();\r\n for (var i = 0; i < this.data.length; i++) {\r\n var item = this.nodes.li[i];\r\n item.style.width = width + \"px\";\r\n }\r\n };\r\n // Set list position\r\n Slider.prototype.setListPosition = function (position) {\r\n if (position == 0) {\r\n this.nodes.list.style.webkitTransform = \"translateX(0)\";\r\n this.nodes.list.style.transform = \"translateX(0)\";\r\n return;\r\n }\r\n var x = this.getListPosition();\r\n this.nodes.list.style.webkitTransform = \"translateX(-\" + x + \"px)\";\r\n this.nodes.list.style.transform = \"translateX(-\" + x + \"px)\";\r\n };\r\n // Set counter\r\n Slider.prototype.setCounter = function () {\r\n var counterData = this.getCounterData();\r\n this.nodes.counterCurrent.innerHTML = counterData.current;\r\n this.nodes.counterTotal.innerHTML = counterData.total;\r\n };\r\n // Get visible items\r\n Slider.prototype.getVisibleItems = function () {\r\n var total = 1;\r\n if (this.data.type != \"mini\" && app_component_1.AppData.mediaQuery >= 30 && app_component_1.AppData.mediaQuery < 64)\r\n total = 2;\r\n if (this.data.type != \"mini\" && app_component_1.AppData.mediaQuery >= 64)\r\n total = 3;\r\n return total;\r\n };\r\n // Get last page items \r\n Slider.prototype.getLastPageItems = function () {\r\n var lastPageItems = this.data.length - (this.getVisibleItems() * this.getTotalPages());\r\n return this.getVisibleItems() - lastPageItems;\r\n };\r\n // Get total pages\r\n Slider.prototype.getTotalPages = function () {\r\n return Math.ceil(this.data.length / this.getVisibleItems()) - 1;\r\n };\r\n // Get item width\r\n Slider.prototype.getItemWidth = function () {\r\n var visibleItems = this.getVisibleItems(), area = this.nodes.items.offsetWidth;\r\n return (this.data.type === \"mini\" || visibleItems === 1) ? area : Math.floor(area / visibleItems);\r\n };\r\n // Get list position\r\n Slider.prototype.getListPosition = function () {\r\n var x = (this.getItemWidth() * this.getVisibleItems()) * this.data.pageId;\r\n if (this.data.type === \"mini\") {\r\n if (this.data.pageId === 0 && !this.nodes.list.classList.contains(\"no-transition\")) {\r\n return this.getItemWidth() * this.data.length;\r\n }\r\n }\r\n else {\r\n if (this.data.pageId === this.getTotalPages()) {\r\n return x - (this.getItemWidth() * this.getLastPageItems());\r\n }\r\n }\r\n return x;\r\n };\r\n // Get counter data\r\n Slider.prototype.getCounterData = function () {\r\n var to, from, offset;\r\n if (this.data.type === \"mini\" || this.getVisibleItems() === 1) {\r\n offset = this.getNumberPrefix(this.data.pageId + 1);\r\n }\r\n else {\r\n if (this.data.pageId === this.getTotalPages()) {\r\n to = this.data.length;\r\n }\r\n else {\r\n to = this.getVisibleItems() * (this.data.pageId + 1);\r\n }\r\n from = (to - this.getVisibleItems()) + 1;\r\n offset = this.getNumberPrefix(from) + \" ― \" + this.getNumberPrefix(to);\r\n }\r\n return {\r\n current: offset,\r\n total: this.getNumberPrefix(this.data.length)\r\n };\r\n };\r\n // Get number prefix\r\n Slider.prototype.getNumberPrefix = function (number) {\r\n return (number <= 9) ? \"0\" + number : \"\" + number;\r\n };\r\n return Slider;\r\n}());\r\nexports.Slider = Slider;\r\n","/*! Hammer.JS - v2.0.17-rc - 2019-12-16\n * http://naver.github.io/egjs\n *\n * Forked By Naver egjs\n * Copyright (c) hammerjs\n * Licensed under the MIT license */\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n/**\n * @private\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;\n\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\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n\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\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\nvar assign$1 = assign;\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = typeof document === \"undefined\" ? {\n style: {}\n} : document.createElement('div');\nvar TYPE_FUNCTION = 'function';\nvar round = Math.round,\n abs = Math.abs;\nvar now = Date.now;\n\n/**\n * @private\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\n\nfunction prefixed(obj, property) {\n var prefix;\n var prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n var i = 0;\n\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\n i++;\n }\n\n return undefined;\n}\n\n/* eslint-disable no-new-func, no-nested-ternary */\nvar win;\n\nif (typeof window === \"undefined\") {\n // window is undefined in node.js\n win = {};\n} else {\n win = window;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n\n var touchMap = {};\n var cssSupports = win.CSS && win.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) {\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 return touchMap[val] = cssSupports ? win.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\n\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\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\nvar SUPPORT_TOUCH = 'ontouchstart' in win;\nvar SUPPORT_POINTER_EVENTS = prefixed(win, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\nvar COMPUTE_INTERVAL = 25;\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * @private\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\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 * @private\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 */\n\nfunction boolOrFn(val, args) {\n if (typeof val === TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n\n return val;\n}\n\n/**\n * @private\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 * @private\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 */\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); // 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\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n } // pan-x OR pan-y\n\n\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n } // manipulation\n\n\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\n/**\n * @private\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\n\nvar TouchAction =\n/*#__PURE__*/\nfunction () {\n function TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n }\n /**\n * @private\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n\n\n var _proto = TouchAction.prototype;\n\n _proto.set = function set(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\n this.actions = value.toLowerCase().trim();\n };\n /**\n * @private\n * just re-set the touchAction value\n */\n\n\n _proto.update = function update() {\n this.set(this.manager.options.touchAction);\n };\n /**\n * @private\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n\n\n _proto.compute = function compute() {\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 * @private\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n\n\n _proto.preventDefaults = function preventDefaults(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection; // if the touch action did prevented once this session\n\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 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 || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n return this.preventSrc(srcEvent);\n }\n };\n /**\n * @private\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n\n\n _proto.preventSrc = function preventSrc(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n };\n\n return TouchAction;\n}();\n\n/**\n * @private\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\n node = node.parentNode;\n }\n\n return false;\n}\n\n/**\n * @private\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\n\nfunction getCenter(pointers) {\n var pointersLength = pointers.length; // no need to loop when only one touch\n\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;\n var y = 0;\n var i = 0;\n\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 * @private\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\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\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 * @private\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 */\n\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.sqrt(x * x + y * y);\n}\n\n/**\n * @private\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 */\n\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * @private\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\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\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center; // let { offsetDelta:offset = {}, prevDelta = {}, prevInput = {} } = session;\n // jscs throwing error on defalut destructured values and without defaults tests fail\n\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 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 * @private\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 * @private\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 */\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\n/**\n * @private\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 */\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 * @private\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\n\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input;\n var deltaTime = input.timeStamp - last.timeStamp;\n var velocity;\n var velocityX;\n var velocityY;\n var 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 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 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* @private\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\n\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length; // store the first input to calculate the distance and direction\n\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n } // to compute scale and rotation we need to store the multiple touches\n\n\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 firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\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 input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;\n computeIntervalInputData(session, input); // find the correct target\n\n var target = manager.element;\n var srcEvent = input.srcEvent;\n var srcEventTarget;\n\n if (srcEvent.composedPath) {\n srcEventTarget = srcEvent.composedPath()[0];\n } else if (srcEvent.path) {\n srcEventTarget = srcEvent.path[0];\n } else {\n srcEventTarget = srcEvent.target;\n }\n\n if (hasParent(srcEventTarget, target)) {\n target = srcEventTarget;\n }\n\n input.target = target;\n}\n\n/**\n * @private\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\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 input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n } // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n\n\n input.eventType = eventType; // compute scale, rotation etc\n\n computeInputData(manager, input); // emit secret event\n\n manager.emit('hammer.input', input);\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * @private\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 * @private\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * @private\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * @private\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\n/**\n * @private\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\n\nvar Input =\n/*#__PURE__*/\nfunction () {\n function 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; // 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\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 * @private\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n\n\n var _proto = Input.prototype;\n\n _proto.handler = function handler() {};\n /**\n * @private\n * bind the events\n */\n\n\n _proto.init = function init() {\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 * @private\n * unbind the events\n */\n\n\n _proto.destroy = function destroy() {\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 return Input;\n}();\n\n/**\n * @private\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\n while (i < src.length) {\n if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n // do not use === here, test fails\n return i;\n }\n\n i++;\n }\n\n return -1;\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}; // in IE10 the pointer types is defined as an enum\n\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'; // IE10 has prefixed support, and case-sensitive\n\nif (win.MSPointerEvent && !win.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n/**\n * @private\n * Pointer events input\n * @constructor\n * @extends Input\n */\n\n\nvar PointerEventInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(PointerEventInput, _Input);\n\n function PointerEventInput() {\n var _this;\n\n var proto = PointerEventInput.prototype;\n proto.evEl = POINTER_ELEMENT_EVENTS;\n proto.evWin = POINTER_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.store = _this.manager.session.pointerEvents = [];\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = PointerEventInput.prototype;\n\n _proto.handler = function handler(ev) {\n var store = this.store;\n var removePointer = false;\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 var isTouch = pointerType === INPUT_TYPE_TOUCH; // get index of the event in the store\n\n var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down\n\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 } // it not found, so the pointer hasn't been down (so it's probably a hover)\n\n\n if (storeIndex < 0) {\n return;\n } // update the event in the store\n\n\n store[storeIndex] = ev;\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 return PointerEventInput;\n}(Input);\n\n/**\n * @private\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 * @private\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 */\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\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\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 (a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\n\nvar TouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(TouchInput, _Input);\n\n function TouchInput() {\n var _this;\n\n TouchInput.prototype.evTarget = TOUCH_TARGET_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.targetIds = {}; // this.evTarget = TOUCH_TARGET_EVENTS;\n\n return _this;\n }\n\n var _proto = TouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n\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 return TouchInput;\n}(Input);\n\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds; // when there is only one touch, the process can be simplified\n\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 var targetTouches;\n var changedTouches = toArray(ev.changedTouches);\n var changedTargetTouches = [];\n var target = this.target; // get target touches from touches\n\n targetTouches = allTouches.filter(function (touch) {\n return hasParent(touch.target, target);\n }); // collect touches\n\n if (type === INPUT_START) {\n i = 0;\n\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n } // filter changed touches to only contain touches that exist in the collected target ids\n\n\n i = 0;\n\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n } // cleanup removed touches\n\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n/**\n * @private\n * Mouse events input\n * @constructor\n * @extends Input\n */\n\nvar MouseInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(MouseInput, _Input);\n\n function MouseInput() {\n var _this;\n\n var proto = MouseInput.prototype;\n proto.evEl = MOUSE_ELEMENT_EVENTS;\n proto.evWin = MOUSE_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.pressed = false; // mousedown state\n\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = MouseInput.prototype;\n\n _proto.handler = function handler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down\n\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 } // mouse must be down\n\n\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 return MouseInput;\n}(Input);\n\n/**\n * @private\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 setLastTouch(eventData) {\n var _eventData$changedPoi = eventData.changedPointers,\n touch = _eventData$changedPoi[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {\n x: touch.clientX,\n y: touch.clientY\n };\n var lts = this.lastTouches;\n this.lastTouches.push(lastTouch);\n\n var removeLastTouch = function removeLastTouch() {\n var i = lts.indexOf(lastTouch);\n\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\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 isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX;\n var y = eventData.srcEvent.clientY;\n\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x);\n var dy = Math.abs(y - t.y);\n\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n\n return false;\n}\n\nvar TouchMouseInput =\n/*#__PURE__*/\nfunction () {\n var TouchMouseInput =\n /*#__PURE__*/\n function (_Input) {\n _inheritsLoose(TouchMouseInput, _Input);\n\n function TouchMouseInput(_manager, callback) {\n var _this;\n\n _this = _Input.call(this, _manager, callback) || this;\n\n _this.handler = function (manager, inputEvent, inputData) {\n var isTouch = inputData.pointerType === INPUT_TYPE_TOUCH;\n var isMouse = inputData.pointerType === INPUT_TYPE_MOUSE;\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n } // when we're in a touch event, record touches to de-dupe synthetic mouse event\n\n\n if (isTouch) {\n recordTouches.call(_assertThisInitialized(_assertThisInitialized(_this)), inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(_assertThisInitialized(_assertThisInitialized(_this)), inputData)) {\n return;\n }\n\n _this.callback(manager, inputEvent, inputData);\n };\n\n _this.touch = new TouchInput(_this.manager, _this.handler);\n _this.mouse = new MouseInput(_this.manager, _this.handler);\n _this.primaryTouch = null;\n _this.lastTouches = [];\n return _this;\n }\n /**\n * @private\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n\n\n var _proto = TouchMouseInput.prototype;\n\n /**\n * @private\n * remove the event listeners\n */\n _proto.destroy = function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n };\n\n return TouchMouseInput;\n }(Input);\n\n return TouchMouseInput;\n}();\n\n/**\n * @private\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\n\nfunction createInputInstance(manager) {\n var Type; // let inputClass = manager.options.inputClass;\n\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\n return new Type(manager, inputHandler);\n}\n\n/**\n * @private\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 */\n\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n\n return false;\n}\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 * @private\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * @private\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\n if (manager) {\n return manager.get(otherRecognizer);\n }\n\n return otherRecognizer;\n}\n\n/**\n * @private\n * get a usable string, used as event postfix\n * @param {constant} state\n * @returns {String} state\n */\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\n return '';\n}\n\n/**\n * @private\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 */\n\n/**\n * @private\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\n\nvar Recognizer =\n/*#__PURE__*/\nfunction () {\n function Recognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n this.options = _extends({\n enable: true\n }, options);\n this.id = uniqueId();\n this.manager = null; // default is enable true\n\n this.state = STATE_POSSIBLE;\n this.simultaneous = {};\n this.requireFail = [];\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n\n\n var _proto = Recognizer.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state\n\n this.manager && this.manager.touchAction.update();\n return this;\n };\n /**\n * @private\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.recognizeWith = function recognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n\n return this;\n };\n /**\n * @private\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.dropRecognizeWith = function dropRecognizeWith(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 * @private\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.requireFailure = function requireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n\n return this;\n };\n /**\n * @private\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\n\n _proto.dropRequireFailure = function dropRequireFailure(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\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n\n return this;\n };\n /**\n * @private\n * has require failures boolean\n * @returns {boolean}\n */\n\n\n _proto.hasRequireFailures = function hasRequireFailures() {\n return this.requireFail.length > 0;\n };\n /**\n * @private\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n\n\n _proto.canRecognizeWith = function canRecognizeWith(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n };\n /**\n * @private\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\n\n _proto.emit = function emit(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n } // 'panstart' and 'panmove'\n\n\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) {\n // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n } // panend and pancancel\n\n\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n };\n /**\n * @private\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\n\n _proto.tryEmit = function tryEmit(input) {\n if (this.canEmit()) {\n return this.emit(input);\n } // it's failing anyway\n\n\n this.state = STATE_FAILED;\n };\n /**\n * @private\n * can we emit?\n * @returns {boolean}\n */\n\n\n _proto.canEmit = function canEmit() {\n var i = 0;\n\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n\n i++;\n }\n\n return true;\n };\n /**\n * @private\n * update the recognizer\n * @param {Object} inputData\n */\n\n\n _proto.recognize = function recognize(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$1({}, inputData); // is is enabled and allow recognizing?\n\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n } // reset when we've reached the end\n\n\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone); // the recognizer has recognized a gesture\n // so trigger an event\n\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n };\n /**\n * @private\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {constant} STATE\n */\n\n /* jshint ignore:start */\n\n\n _proto.process = function process(inputData) {};\n /* jshint ignore:end */\n\n /**\n * @private\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n\n\n _proto.getTouchAction = function getTouchAction() {};\n /**\n * @private\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\n\n _proto.reset = function reset() {};\n\n return Recognizer;\n}();\n\n/**\n * @private\n * A tap is recognized 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 */\n\nvar TapRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(TapRecognizer, _Recognizer);\n\n function TapRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300,\n // max time between the multi-tap taps\n time: 250,\n // max time of the pointer to be down (like finger on the screen)\n threshold: 9,\n // a minimal movement is ok, but keep it low\n posThreshold: 10\n }, options)) || this; // previous time and center,\n // used for tap counting\n\n _this.pTime = false;\n _this.pCenter = false;\n _this._timer = null;\n _this._input = null;\n _this.count = 0;\n return _this;\n }\n\n var _proto = TapRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_MANIPULATION];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n this.reset();\n\n if (input.eventType & INPUT_START && this.count === 0) {\n return this.failTimeout();\n } // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n\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 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; // if tap count matches we have recognized it,\n // else it has began recognizing...\n\n var tapCount = this.count % options.taps;\n\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 = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.interval);\n return STATE_BEGAN;\n }\n }\n }\n\n return STATE_FAILED;\n };\n\n _proto.failTimeout = function failTimeout() {\n var _this3 = this;\n\n this._timer = setTimeout(function () {\n _this3.state = STATE_FAILED;\n }, this.options.interval);\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit() {\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 return TapRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\n\nvar AttrRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(AttrRecognizer, _Recognizer);\n\n function AttrRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _Recognizer.call(this, _extends({\n pointers: 1\n }, options)) || this;\n }\n /**\n * @private\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\n\n var _proto = AttrRecognizer.prototype;\n\n _proto.attrTest = function attrTest(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n };\n /**\n * @private\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n\n\n _proto.process = function process(input) {\n var state = this.state;\n var eventType = input.eventType;\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED\n\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\n return state | STATE_CHANGED;\n }\n\n return STATE_FAILED;\n };\n\n return AttrRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * direction cons to string\n * @param {constant} direction\n * @returns {String}\n */\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\n return '';\n}\n\n/**\n * @private\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PanRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(PanRecognizer, _AttrRecognizer);\n\n function PanRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _AttrRecognizer.call(this, _extends({\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n }, options)) || this;\n _this.pX = null;\n _this.pY = null;\n return _this;\n }\n\n var _proto = PanRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n var direction = this.options.direction;\n var actions = [];\n\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n\n return actions;\n };\n\n _proto.directionTest = function directionTest(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; // lock to axis?\n\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\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n };\n\n _proto.attrTest = function attrTest(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) && ( // replace with a super call\n this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n };\n\n _proto.emit = function emit(input) {\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PanRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar SwipeRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(SwipeRecognizer, _AttrRecognizer);\n\n function SwipeRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n }, options)) || this;\n }\n\n var _proto = SwipeRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n };\n\n _proto.attrTest = function attrTest(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 _AttrRecognizer.prototype.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers === this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n };\n\n _proto.emit = function emit(input) {\n var direction = directionStr(input.offsetDirection);\n\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 return SwipeRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\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 */\n\nvar PinchRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(PinchRecognizer, _AttrRecognizer);\n\n function PinchRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'pinch',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = PinchRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n _proto.emit = function emit(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PinchRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar RotateRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(RotateRecognizer, _AttrRecognizer);\n\n function RotateRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'rotate',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = RotateRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n return RotateRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\n\nvar PressRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(PressRecognizer, _Recognizer);\n\n function PressRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'press',\n pointers: 1,\n time: 251,\n // minimal time of the pointer to be pressed\n threshold: 9\n }, options)) || this;\n _this._timer = null;\n _this._input = null;\n return _this;\n }\n\n var _proto = PressRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_AUTO];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\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 this._input = input; // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\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 = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.time);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit(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 return PressRecognizer;\n}(Recognizer);\n\nvar defaults = {\n /**\n * @private\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 * @private\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 * @private\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * @private\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 * @private\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * @private\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 * @private\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 * @private\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: \"none\",\n\n /**\n * @private\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 * @private\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: \"none\",\n\n /**\n * @private\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 * @private\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/**\n * @private\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * This is separated with other defaults because of tree-shaking.\n * @type {Array}\n */\n\nvar preset = [[RotateRecognizer, {\n enable: false\n}], [PinchRecognizer, {\n enable: false\n}, ['rotate']], [SwipeRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}], [PanRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}, ['swipe']], [TapRecognizer], [TapRecognizer, {\n event: 'doubletap',\n taps: 2\n}, ['tap']], [PressRecognizer]];\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n/**\n * @private\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\n\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n\n if (!element.style) {\n return;\n }\n\n var prop;\n each(manager.options.cssProps, function (value, name) {\n prop = prefixed(element.style, name);\n\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\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n/**\n * @private\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\n\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/**\n* @private\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n\nvar Manager =\n/*#__PURE__*/\nfunction () {\n function Manager(element, options) {\n var _this = this;\n\n this.options = assign$1({}, defaults, options || {});\n this.options.inputTarget = this.options.inputTarget || element;\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n toggleCssProps(this, true);\n each(this.options.recognizers, function (item) {\n var recognizer = _this.add(new item[0](item[1]));\n\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n\n\n var _proto = Manager.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // Options that need a little more setup\n\n if (options.touchAction) {\n this.touchAction.update();\n }\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\n return this;\n };\n /**\n * @private\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\n\n _proto.stop = function stop(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n };\n /**\n * @private\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\n\n _proto.recognize = function recognize(inputData) {\n var session = this.session;\n\n if (session.stopped) {\n return;\n } // run the touch-action polyfill\n\n\n this.touchAction.preventDefaults(inputData);\n var recognizer;\n var recognizers = this.recognizers; // 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\n var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized\n // or when we're in a new session\n\n if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n session.curRecognizer = null;\n curRecognizer = null;\n }\n\n var i = 0;\n\n while (i < recognizers.length) {\n recognizer = recognizers[i]; // 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\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer === curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) {\n // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\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\n\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n session.curRecognizer = recognizer;\n curRecognizer = recognizer;\n }\n\n i++;\n }\n };\n /**\n * @private\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n\n\n _proto.get = function get(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event === recognizer) {\n return recognizers[i];\n }\n }\n\n return null;\n };\n /**\n * @private 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\n\n _proto.add = function add(recognizer) {\n if (invokeArrayArg(recognizer, \"add\", this)) {\n return this;\n } // remove existing\n\n\n var existing = this.get(recognizer.options.event);\n\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n this.touchAction.update();\n return recognizer;\n };\n /**\n * @private\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n\n\n _proto.remove = function remove(recognizer) {\n if (invokeArrayArg(recognizer, \"remove\", this)) {\n return this;\n }\n\n var targetRecognizer = this.get(recognizer); // let's make sure this recognizer exists\n\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, targetRecognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n };\n /**\n * @private\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n\n\n _proto.on = function on(events, handler) {\n if (events === undefined || handler === undefined) {\n return this;\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 * @private unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n\n\n _proto.off = function off(events, handler) {\n if (events === undefined) {\n return this;\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 * @private emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n\n\n _proto.emit = function emit(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n } // no handlers, so skip it all\n\n\n var handlers = this.handlers[event] && this.handlers[event].slice();\n\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n\n data.preventDefault = function () {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n };\n /**\n * @private\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n\n\n _proto.destroy = function destroy() {\n this.element && toggleCssProps(this, false);\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n };\n\n return Manager;\n}();\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Touch events input\n * @constructor\n * @extends Input\n */\n\nvar SingleTouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(SingleTouchInput, _Input);\n\n function SingleTouchInput() {\n var _this;\n\n var proto = SingleTouchInput.prototype;\n proto.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n proto.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.started = false;\n return _this;\n }\n\n var _proto = SingleTouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events?\n\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); // when done, reset the started state\n\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 return SingleTouchInput;\n}(Input);\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\n/**\n * @private\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, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n var log = window.console && (window.console.warn || window.console.log);\n\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n\n return method.apply(this, arguments);\n };\n}\n\n/**\n * @private\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 */\n\nvar extend = deprecate(function (dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n\n while (i < keys.length) {\n if (!merge || merge && dest[keys[i]] === undefined) {\n dest[keys[i]] = src[keys[i]];\n }\n\n i++;\n }\n\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * @private\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 */\n\nvar merge = deprecate(function (dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * @private\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\n\nfunction inherit(child, base, properties) {\n var baseP = base.prototype;\n var childP;\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign$1(childP, properties);\n }\n}\n\n/**\n * @private\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 * @private\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\nvar Hammer =\n/*#__PURE__*/\nfunction () {\n var Hammer =\n /**\n * @private\n * @const {string}\n */\n function Hammer(element, options) {\n if (options === void 0) {\n options = {};\n }\n\n return new Manager(element, _extends({\n recognizers: preset.concat()\n }, options));\n };\n\n Hammer.VERSION = \"2.0.17-rc\";\n Hammer.DIRECTION_ALL = DIRECTION_ALL;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.DIRECTION_LEFT = DIRECTION_LEFT;\n Hammer.DIRECTION_RIGHT = DIRECTION_RIGHT;\n Hammer.DIRECTION_UP = DIRECTION_UP;\n Hammer.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL;\n Hammer.DIRECTION_VERTICAL = DIRECTION_VERTICAL;\n Hammer.DIRECTION_NONE = DIRECTION_NONE;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.INPUT_START = INPUT_START;\n Hammer.INPUT_MOVE = INPUT_MOVE;\n Hammer.INPUT_END = INPUT_END;\n Hammer.INPUT_CANCEL = INPUT_CANCEL;\n Hammer.STATE_POSSIBLE = STATE_POSSIBLE;\n Hammer.STATE_BEGAN = STATE_BEGAN;\n Hammer.STATE_CHANGED = STATE_CHANGED;\n Hammer.STATE_ENDED = STATE_ENDED;\n Hammer.STATE_RECOGNIZED = STATE_RECOGNIZED;\n Hammer.STATE_CANCELLED = STATE_CANCELLED;\n Hammer.STATE_FAILED = STATE_FAILED;\n Hammer.Manager = Manager;\n Hammer.Input = Input;\n Hammer.TouchAction = TouchAction;\n Hammer.TouchInput = TouchInput;\n Hammer.MouseInput = MouseInput;\n Hammer.PointerEventInput = PointerEventInput;\n Hammer.TouchMouseInput = TouchMouseInput;\n Hammer.SingleTouchInput = SingleTouchInput;\n Hammer.Recognizer = Recognizer;\n Hammer.AttrRecognizer = AttrRecognizer;\n Hammer.Tap = TapRecognizer;\n Hammer.Pan = PanRecognizer;\n Hammer.Swipe = SwipeRecognizer;\n Hammer.Pinch = PinchRecognizer;\n Hammer.Rotate = RotateRecognizer;\n Hammer.Press = PressRecognizer;\n Hammer.on = addEventListeners;\n Hammer.off = removeEventListeners;\n Hammer.each = each;\n Hammer.merge = merge;\n Hammer.extend = extend;\n Hammer.bindFn = bindFn;\n Hammer.assign = assign$1;\n Hammer.inherit = inherit;\n Hammer.bindFn = bindFn;\n Hammer.prefixed = prefixed;\n Hammer.toArray = toArray;\n Hammer.inArray = inArray;\n Hammer.uniqueArray = uniqueArray;\n Hammer.splitStr = splitStr;\n Hammer.boolOrFn = boolOrFn;\n Hammer.hasParent = hasParent;\n Hammer.addEventListeners = addEventListeners;\n Hammer.removeEventListeners = removeEventListeners;\n Hammer.defaults = assign$1({}, defaults, {\n preset: preset\n });\n return Hammer;\n}();\n\n// style loader but by script tag, not by the loader.\n\nvar defaults$1 = Hammer.defaults;\n\nexport default Hammer;\nexport { INPUT_START, INPUT_MOVE, INPUT_END, INPUT_CANCEL, STATE_POSSIBLE, STATE_BEGAN, STATE_CHANGED, STATE_ENDED, STATE_RECOGNIZED, STATE_CANCELLED, STATE_FAILED, DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, Manager, Input, TouchAction, TouchInput, MouseInput, PointerEventInput, TouchMouseInput, SingleTouchInput, Recognizer, AttrRecognizer, TapRecognizer as Tap, PanRecognizer as Pan, SwipeRecognizer as Swipe, PinchRecognizer as Pinch, RotateRecognizer as Rotate, PressRecognizer as Press, addEventListeners as on, removeEventListeners as off, each, merge, extend, assign$1 as assign, inherit, bindFn, prefixed, toArray, inArray, uniqueArray, splitStr, boolOrFn, hasParent, addEventListeners, removeEventListeners, defaults$1 as defaults };\n//# sourceMappingURL=hammer.esm.js.map\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Context = void 0;\r\n// Imports\r\nvar app_component_1 = require(\"../app.component\");\r\n// Context\r\nvar Context = /** @class */ (function () {\r\n function Context(context) {\r\n this.nodes = {};\r\n this.nodes.title = context.querySelector(\".grid-col:first-child\");\r\n this.nodes.cover = context.querySelector(\".grid-col:nth-child(2)\");\r\n this.nodes.text = context.querySelector(\".grid-col:last-child\");\r\n this.nodes.content = context.querySelector(\".content\");\r\n this.nodes.links = context.querySelector(\".links-bottom\");\r\n //this.nodes.washingButton = context.querySelector(\".washing-instructions span.text-bold\");\r\n this.nodes.washingButton = context.querySelector(\".washing-instructions a.text-bold\");\r\n this.nodes.instructions = context.querySelector(\".washing-instructions .instructions\");\r\n if (this.nodes.washingButton) {\r\n this.washing();\r\n }\r\n // washing instructions download: prevent instructions closing\r\n var buttonInstructionsDownload = context.querySelector(\".washing-instructions .instructions a\");\r\n if (buttonInstructionsDownload !== null) {\r\n buttonInstructionsDownload.addEventListener(\"click\", function (e) {\r\n e.stopImmediatePropagation();\r\n });\r\n }\r\n }\r\n // Resize\r\n Context.prototype.resize = function () {\r\n if (!this.nodes.links)\r\n return;\r\n if (app_component_1.AppData.mediaQuery < 64) {\r\n this.restore();\r\n return;\r\n }\r\n var titleHeight = this.nodes.title.offsetHeight, coverHeight = this.nodes.cover.offsetHeight, contentHeight = this.nodes.content.offsetHeight, linksHeight = this.nodes.links.offsetHeight;\r\n if ((contentHeight + linksHeight + 32) < (coverHeight - titleHeight)) {\r\n this.setHeight(coverHeight - titleHeight);\r\n }\r\n else {\r\n this.restore();\r\n }\r\n };\r\n // Washing\r\n Context.prototype.washing = function () {\r\n var _this = this;\r\n this.nodes.washingButton.addEventListener(\"click\", function () {\r\n _this.nodes.instructions.classList.add(\"show\");\r\n });\r\n this.nodes.instructions.addEventListener(\"click\", function () {\r\n _this.nodes.instructions.classList.remove(\"show\");\r\n });\r\n };\r\n // Set height\r\n Context.prototype.setHeight = function (height) {\r\n this.nodes.links.classList.add(\"links-sticky\");\r\n this.nodes.text.style.height = height + \"px\";\r\n };\r\n // Restore\r\n Context.prototype.restore = function () {\r\n this.nodes.links.classList.remove(\"links-sticky\");\r\n this.nodes.text.removeAttribute(\"style\");\r\n };\r\n return Context;\r\n}());\r\nexports.Context = Context;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Bundle = void 0;\r\n// Bundle nodes\r\nvar BundleNodes = {\r\n root: document.querySelector(\".bundle\")\r\n};\r\n// Bundle\r\nvar Bundle = /** @class */ (function () {\r\n // Constructor\r\n function Bundle() {\r\n if (BundleNodes.root) {\r\n // console.log(\"Bundle\");\r\n }\r\n }\r\n return Bundle;\r\n}());\r\nexports.Bundle = Bundle;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Gift = void 0;\r\n// Imports\r\nvar Fetcher_1 = require(\"../common/Fetcher\");\r\n// Gift nodes\r\nvar GiftNodes = {\r\n root: document.querySelector(\".gift\"),\r\n form: document.querySelector(\".gift form\"),\r\n fields: document.querySelectorAll(\".gift [name]\"),\r\n submit: document.querySelector(\".gift button\"),\r\n upload: document.querySelector(\".gift input[type='file']\")\r\n};\r\n// Gift\r\nvar Gift = /** @class */ (function () {\r\n // Constructor\r\n function Gift() {\r\n this.emailRegex = /^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$/;\r\n this.phoneRegex = /^[0-9\\s]+$/;\r\n this.isLoading = false;\r\n //private hasErrors: boolean = false;\r\n this.values = {};\r\n if (GiftNodes.root) {\r\n this.listeners();\r\n }\r\n }\r\n // Listeners\r\n Gift.prototype.listeners = function () {\r\n var _this = this;\r\n GiftNodes.form.addEventListener(\"submit\", function (e) {\r\n e.preventDefault();\r\n //if (!this.validate() || this.isLoading || this.hasErrors) return;\r\n //if (this.isLoading || this.hasErrors) return;\r\n if (_this.isLoading)\r\n return;\r\n //console.log(!this.validate());\r\n // remove errors\r\n _this.errorsRemove();\r\n // do it\r\n _this.submit();\r\n });\r\n GiftNodes.fields.forEach(function (field) {\r\n if (field.type != \"submit\") {\r\n var eventType = (field.type == \"checkbox\" || field.type == \"file\") ? \"change\" : \"keyup\";\r\n _this.values[field.name] = null;\r\n field.addEventListener(eventType, function (e) {\r\n var fieldValue;\r\n if (field.type === \"file\") {\r\n var field_1 = e.target, label = field_1.parentNode.querySelector(\"span\"), value = (field_1.value == \"\") ? label.getAttribute(\"data-label\") : field_1.files.item(0).name;\r\n label.innerHTML = fieldValue = value;\r\n }\r\n else if (field.type === \"checkbox\") {\r\n fieldValue = field.checked;\r\n }\r\n else {\r\n fieldValue = field.value;\r\n }\r\n _this.values[field.name] = fieldValue;\r\n console.log(_this.values);\r\n });\r\n }\r\n });\r\n };\r\n // Serialize\r\n Gift.prototype.serialize = function () {\r\n var formData = new FormData(), i = 0;\r\n for (; i < GiftNodes.fields.length; i++) {\r\n var field = GiftNodes.fields[i];\r\n if (field.type === \"checkbox\" || field.type === \"radio\") {\r\n formData.append(field.name, (field.checked == false) ? null : field.value);\r\n }\r\n else {\r\n if (field.type === \"file\") {\r\n if (field.files.length !== 0) {\r\n formData.append(field.name, field.files[0]);\r\n }\r\n }\r\n else {\r\n formData.append(field.name, field.value);\r\n }\r\n }\r\n }\r\n return formData;\r\n };\r\n // Validate\r\n Gift.prototype.validate = function () {\r\n for (var key in this.values) {\r\n if ((key === \"firstname\" || key === \"lastname\" || key === \"message\") && !this.checkText(this.values[key]))\r\n return false;\r\n if (key === \"email\" && this.checkEmail(this.values[key]))\r\n return false;\r\n if (key === \"phone\" && this.checkPhone(this.values[key]))\r\n return false;\r\n if (key === \"phone\" && this.checkPhone(this.values[key]))\r\n return false;\r\n if (key === \"privacy\" && (!this.values[key]))\r\n return false;\r\n /*if (requiredFields.indexOf(key) != -1 ) {\r\n console.log(\"Check text\");\r\n }*/\r\n //if (this.values.hasOwnProperty(key)) {\r\n console.log(key + \" : \" + this.values[key]);\r\n //}\r\n }\r\n return true;\r\n };\r\n // Send\r\n Gift.prototype.submit = function () {\r\n var _this = this;\r\n this.isLoading = true;\r\n GiftNodes.submit.classList.add(\"loading\");\r\n var url = document.location.href + \"?mode=xhr\", fetcher = new Fetcher_1.Fetcher(url, function (data) {\r\n _this.isLoading = false;\r\n // hide loading\r\n GiftNodes.submit.classList.remove(\"loading\");\r\n // some logging\r\n console.log(\"Success\");\r\n console.log(data);\r\n // hide form\r\n GiftNodes.form.style.display = \"none\";\r\n // render message\r\n var containerMessage = document.createElement(\"div\");\r\n GiftNodes.form.parentElement.insertBefore(containerMessage, GiftNodes.form);\r\n containerMessage.classList.add(\"success-message\");\r\n containerMessage.innerText = data.success;\r\n }, function (status, data) {\r\n _this.isLoading = false;\r\n GiftNodes.submit.classList.remove(\"loading\");\r\n if (status === 400) {\r\n _this.showErrors(data.errors);\r\n }\r\n else {\r\n _this.showError(data.errors);\r\n }\r\n });\r\n fetcher.formData = this.serialize();\r\n fetcher.send();\r\n };\r\n // Show errors\r\n Gift.prototype.showErrors = function (errors) {\r\n //this.hasErrors = true;\r\n var _this = this;\r\n GiftNodes.fields.forEach(function (field) {\r\n var name = field.name, type = field.type, parent;\r\n if (errors.hasOwnProperty(name)) {\r\n var errorsList = document.createElement(\"div\");\r\n switch (type) {\r\n case \"textarea\":\r\n parent = field.parentNode.parentNode;\r\n break;\r\n case \"checkbox\":\r\n parent = GiftNodes.submit.parentNode;\r\n break;\r\n default:\r\n parent = field.parentNode;\r\n break;\r\n }\r\n parent.classList.add(\"has-errors\");\r\n parent.appendChild(errorsList);\r\n errorsList.classList.add(\"errors\");\r\n errorsList.innerHTML = _this.getErrorsList(errors[name]);\r\n }\r\n });\r\n };\r\n // Show error\r\n Gift.prototype.showError = function (error) {\r\n console.log(error);\r\n };\r\n // Get errors list\r\n Gift.prototype.getErrorsList = function (data) {\r\n var errors = \"\";\r\n return errors;\r\n };\r\n // remove errors\r\n Gift.prototype.errorsRemove = function () {\r\n var errorsContainers = GiftNodes.form.querySelectorAll(\"div.errors\");\r\n for (var i = 0; i < errorsContainers.length; i++)\r\n errorsContainers[i].parentElement.removeChild(errorsContainers[i]);\r\n };\r\n // Check text\r\n Gift.prototype.checkText = function (text) {\r\n return text != null && text.length > 2;\r\n };\r\n // Check email\r\n Gift.prototype.checkEmail = function (email) {\r\n return this.emailRegex.test(email);\r\n };\r\n // Check phone\r\n Gift.prototype.checkPhone = function (number) {\r\n return number != null && this.phoneRegex.test(number);\r\n };\r\n return Gift;\r\n}());\r\nexports.Gift = Gift;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Footer = void 0;\r\n// Imports\r\nvar Fetcher_1 = require(\"../common/Fetcher\");\r\n// Footer nodes\r\nvar FooterNodes = {\r\n root: document.querySelector(\"body > footer\"),\r\n newsletter: document.querySelector(\".form-newsletter\"),\r\n field: document.querySelector(\".form-newsletter input[type='email']\"),\r\n checkbox: document.querySelector(\".form-newsletter input[type='checkbox']\"),\r\n submit: document.querySelector(\".form-newsletter button\")\r\n};\r\n// Footer\r\nvar Footer = /** @class */ (function () {\r\n function Footer() {\r\n this.emailRegex = /^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$/;\r\n this.email = \"\";\r\n this.isLoading = false;\r\n this.isRegistered = false;\r\n var envNode = document.getElementById(\"env\");\r\n if (envNode)\r\n this.env = JSON.parse(envNode.innerHTML);\r\n this.drawMessage();\r\n this.listeners();\r\n }\r\n // Draw message\r\n Footer.prototype.drawMessage = function () {\r\n var message = document.createElement(\"p\");\r\n message.classList.add(\"message\");\r\n message.classList.add(\"hide\");\r\n message.innerHTML = \"Message here...\";\r\n FooterNodes.newsletter.appendChild(message);\r\n FooterNodes.message = FooterNodes.newsletter.querySelector(\".message\");\r\n };\r\n // Listeners\r\n Footer.prototype.listeners = function () {\r\n var _this = this;\r\n FooterNodes.field.addEventListener(\"focus\", function () {\r\n if (_this.isRegistered)\r\n return;\r\n _this.toggle();\r\n });\r\n FooterNodes.field.addEventListener(\"keyup\", function (e) {\r\n if (_this.isRegistered)\r\n return;\r\n _this.email = e.target.value;\r\n _this.setSubmitStatus();\r\n _this.toggle();\r\n });\r\n FooterNodes.checkbox.addEventListener(\"change\", function (e) {\r\n _this.setSubmitStatus();\r\n });\r\n FooterNodes.submit.addEventListener(\"click\", function (e) {\r\n e.preventDefault();\r\n if (_this.validate() && !_this.isLoading) {\r\n _this.submit();\r\n }\r\n else {\r\n console.log(\"Submit not allowed\");\r\n }\r\n });\r\n };\r\n // Toggle\r\n Footer.prototype.toggle = function (open) {\r\n if (open === void 0) { open = true; }\r\n if (!open) {\r\n FooterNodes.newsletter.classList.remove(\"show-checkbox\");\r\n return;\r\n }\r\n if (this.email != \"\" && FooterNodes.newsletter.classList.contains(\"show-checkbox\"))\r\n return;\r\n if (this.email != \"\") {\r\n FooterNodes.newsletter.classList.add(\"show-checkbox\");\r\n FooterNodes.message.classList.add(\"hide\");\r\n }\r\n else {\r\n FooterNodes.newsletter.classList.remove(\"show-checkbox\");\r\n }\r\n };\r\n // Validate\r\n Footer.prototype.validate = function () {\r\n if (this.email === \"\" || !this.checkEmail(this.email) || !FooterNodes.checkbox.checked)\r\n return false;\r\n return true;\r\n };\r\n // Set submit status\r\n Footer.prototype.setSubmitStatus = function () {\r\n if (this.isLoading) {\r\n FooterNodes.submit.classList.add(\"loading\");\r\n }\r\n else {\r\n FooterNodes.submit.classList.remove(\"loading\");\r\n }\r\n if (this.validate() && !this.isLoading) {\r\n FooterNodes.submit.removeAttribute(\"disabled\");\r\n }\r\n else {\r\n FooterNodes.submit.setAttribute(\"disabled\", true);\r\n }\r\n };\r\n // Send\r\n Footer.prototype.submit = function () {\r\n var _this = this;\r\n this.isLoading = true;\r\n this.setSubmitStatus();\r\n var url = this.env.applicationPath + \"/Services.aspx?action=newsletter-subscribe&email=\" + this.email, fetcher = new Fetcher_1.Fetcher(url, function (data) {\r\n _this.showMessage(data.message);\r\n }, function (status, data) {\r\n _this.showMessage(data.message, \"error\");\r\n });\r\n fetcher.send();\r\n };\r\n // Show message\r\n Footer.prototype.showMessage = function (message, type) {\r\n if (type === void 0) { type = \"success\"; }\r\n this.isLoading = false;\r\n this.setSubmitStatus();\r\n if (type === \"error\") {\r\n this.toggle(false);\r\n }\r\n else {\r\n this.isRegistered = true;\r\n this.restore();\r\n }\r\n FooterNodes.message.classList.remove(\"hide\");\r\n FooterNodes.message.innerHTML = message;\r\n };\r\n // Restore\r\n Footer.prototype.restore = function () {\r\n this.toggle(false);\r\n FooterNodes.field.value = \"\";\r\n FooterNodes.checkbox.checked = false;\r\n FooterNodes.newsletter.removeChild(FooterNodes.submit);\r\n this.email = \"\";\r\n };\r\n // Check email\r\n Footer.prototype.checkEmail = function (email) {\r\n return this.emailRegex.test(email);\r\n };\r\n return Footer;\r\n}());\r\nexports.Footer = Footer;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.CookieBanner = void 0;\r\n//\tCookie banner\r\nvar CookieBanner = /** @class */ (function () {\r\n function CookieBanner() {\r\n }\r\n //\tContent set\r\n CookieBanner.consentSet = function () {\r\n var form = document.createElement(\"form\");\r\n var input = document.createElement(\"input\");\r\n form.style.height = \"0\";\r\n form.style.overflow = \"hidden\";\r\n form.action = document.location.href;\r\n form.method = \"post\";\r\n input.name = \"cookiesConsent\";\r\n input.value = \"y\";\r\n document.body.appendChild(form);\r\n form.appendChild(input);\r\n form.submit();\r\n //console.log( \"I've got a cookie!\" );\r\n };\r\n //\tResize spacer\r\n CookieBanner.resizeSpacer = function () {\r\n var cookieBanner = document.getElementById(\"script-cookie-banner\");\r\n if (cookieBanner) {\r\n var cookieBannerSpacer = document.getElementById(\"script-cookie-banner-spacer\");\r\n cookieBannerSpacer.style.height = cookieBanner.getBoundingClientRect().height.toString() + \"px\";\r\n }\r\n };\r\n return CookieBanner;\r\n}());\r\nexports.CookieBanner = CookieBanner;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.CallToAction = void 0;\r\nvar Fetcher_1 = require(\"../common/Fetcher\");\r\n// Context\r\nvar CallToAction = /** @class */ (function () {\r\n function CallToAction(context) {\r\n //console.log(\"CallToAction.construction\");\r\n var _this = this;\r\n this.searchMode = SearchMode.Basic;\r\n this.nodes = {};\r\n //\r\n this.resultsLoadMode = ResultsLoadMode.XHR;\r\n this.resultsLoadDelay = 100;\r\n this.resultsLoadFetcher = null;\r\n // all selects start disabled, asap they are enabled\r\n // load data\r\n this.data = JSON.parse(document.querySelector(\"script[data-id=\\\"products-search-data\\\"]\").innerHTML);\r\n //console.log(\"data\", this.data);\r\n // load template\r\n this.productThumbTemplate = document.querySelector(\"template#product-item\");\r\n // html nodes\r\n this.context = context;\r\n this.nodes.selector = context.querySelector(\".selector\");\r\n // BASIC\r\n this.nodes.basic = this.nodes.selector.querySelector(\"*[data-id=\\\"products-search-basic\\\"]\");\r\n this.nodes.basicTitle = this.nodes.basic.querySelector(\".title\");\r\n //\r\n this.nodes.basicRootsSelect = this.nodes.basic.querySelector(\"select[data-id=\\\"products-search-basic-roots\\\"]\");\r\n this.nodes.basicRootsClear = this.nodes.basic.querySelector(\"*[data-id=\\\"products-search-basic-roots-reset\\\"]\");\r\n //\r\n this.nodes.basicValuesSelect = this.nodes.basic.querySelector(\"select[data-id=\\\"products-search-basic-values\\\"]\");\r\n this.nodes.basicValuesClear = this.nodes.basic.querySelector(\"*[data-id=\\\"products-search-basic-values-reset\\\"]\");\r\n // ADVANCED\r\n this.nodes.advanced = this.nodes.selector.querySelector(\"*[data-id=\\\"products-search-advanced\\\"]\");\r\n this.nodes.advancedTitle = this.nodes.advanced.querySelector(\".title\");\r\n //\r\n this.nodes.advancedTypeSelect = this.nodes.advanced.querySelector(\"select[data-id=\\\"products-search-advanced-type\\\"]\");\r\n this.nodes.advancedTypeClear = this.nodes.advanced.querySelector(\"*[data-id=\\\"products-search-advanced-type-reset\\\"]\");\r\n //\r\n this.nodes.advancedSubtypeSelect = this.nodes.advanced.querySelector(\"select[data-id=\\\"products-search-advanced-subtype\\\"]\");\r\n this.nodes.advancedSubtypeClear = this.nodes.advanced.querySelector(\"*[data-id=\\\"products-search-advanced-subtype-reset\\\"]\");\r\n //\r\n this.nodes.advancedColorSelect = this.nodes.advanced.querySelector(\"select[data-id=\\\"products-search-advanced-color\\\"]\");\r\n this.nodes.advancedColorClear = this.nodes.advanced.querySelector(\"*[data-id=\\\"products-search-advanced-color-reset\\\"]\");\r\n //\r\n this.nodes.advancedCollectionSelect = this.nodes.advanced.querySelector(\"select[data-id=\\\"products-search-advanced-collection\\\"]\");\r\n this.nodes.advancedCollectionClear = this.nodes.advanced.querySelector(\"*[data-id=\\\"products-search-advanced-collection-reset\\\"]\");\r\n //\r\n this.nodes.advancedMaterialSelect = this.nodes.advanced.querySelector(\"select[data-id=\\\"products-search-advanced-material\\\"]\");\r\n this.nodes.advancedMaterialClear = this.nodes.advanced.querySelector(\"*[data-id=\\\"products-search-advanced-material-reset\\\"]\");\r\n //\r\n this.nodes.advancedYearSelect = this.nodes.advanced.querySelector(\"select[data-id=\\\"products-search-advanced-year\\\"]\");\r\n this.nodes.advancedYearClear = this.nodes.advanced.querySelector(\"*[data-id=\\\"products-search-advanced-year-reset\\\"]\");\r\n //\r\n this.nodes.advancedDesignerSelect = this.nodes.advanced.querySelector(\"select[data-id=\\\"products-search-advanced-designer\\\"]\");\r\n this.nodes.advancedDesignerClear = this.nodes.advanced.querySelector(\"*[data-id=\\\"products-search-advanced-designer-reset\\\"]\");\r\n // order-by\r\n this.nodes.orderBySelect = this.context.querySelector(\"select[data-id=\\\"order-by\\\"]\");\r\n // loading\r\n this.nodes.loading = this.context.querySelector(\"*[data-id=\\\"products-loading\\\"]\");\r\n // results\r\n this.nodes.resultsPlaceholder = document.querySelector(\"*[data-id=\\\"products-results\\\"]\");\r\n // selector events\r\n this.nodes.basicTitle.addEventListener(\"click\", function (e) { _this.toggleSearchMode(); });\r\n this.nodes.advancedTitle.addEventListener(\"click\", function (e) { _this.toggleSearchMode(); });\r\n // basic select events\r\n this.nodes.basicRootsSelect.addEventListener(\"change\", function (e) { _this.basicRootChange(); });\r\n this.nodes.basicRootsClear.addEventListener(\"click\", function (e) { _this.clearSelection(e); });\r\n this.nodes.basicValuesSelect.addEventListener(\"change\", function (e) { _this.basicSubmit(); });\r\n this.nodes.basicValuesClear.addEventListener(\"click\", function (e) { _this.clearSelection(e); });\r\n // advanced select events\r\n this.nodes.advancedTypeSelect.addEventListener(\"change\", function (e) { _this.advancedFillSubTypes(); _this.advancedSubmit(); });\r\n this.nodes.advancedTypeClear.addEventListener(\"click\", function (e) { _this.clearSelection(e); });\r\n //\r\n this.nodes.advancedSubtypeSelect.addEventListener(\"change\", function (e) { _this.advancedSubmit(); });\r\n this.nodes.advancedSubtypeClear.addEventListener(\"click\", function (e) { _this.clearSelection(e); });\r\n //\r\n this.nodes.advancedColorSelect.addEventListener(\"change\", function (e) { _this.advancedSubmit(); });\r\n this.nodes.advancedColorClear.addEventListener(\"click\", function (e) { _this.clearSelection(e); });\r\n //\r\n this.nodes.advancedCollectionSelect.addEventListener(\"change\", function (e) { _this.advancedSubmit(); });\r\n this.nodes.advancedCollectionClear.addEventListener(\"click\", function (e) { _this.clearSelection(e); });\r\n //\r\n this.nodes.advancedMaterialSelect.addEventListener(\"change\", function (e) { _this.advancedSubmit(); });\r\n this.nodes.advancedMaterialClear.addEventListener(\"click\", function (e) { _this.clearSelection(e); });\r\n //\r\n if (this.nodes.advancedYearSelect != null) {\r\n this.nodes.advancedYearSelect.addEventListener(\"change\", function (e) { _this.advancedSubmit(); });\r\n this.nodes.advancedYearClear.addEventListener(\"click\", function (e) { _this.clearSelection(e); });\r\n }\r\n //\r\n this.nodes.advancedDesignerSelect.addEventListener(\"change\", function (e) { _this.advancedSubmit(); });\r\n this.nodes.advancedDesignerClear.addEventListener(\"click\", function (e) { _this.clearSelection(e); });\r\n // order-by event\r\n this.nodes.orderBySelect = this.context.querySelector(\"select[data-id=\\\"order-by\\\"]\");\r\n this.nodes.orderBySelect.addEventListener(\"change\", function () { _this.resultsReload(); });\r\n // set starting search mode (basic/advanced)\r\n if (this.nodes.selector.classList.contains(\"advanced\"))\r\n this.searchMode = SearchMode.Advanced;\r\n // enable all selects\r\n // basic\r\n this.nodes.basicRootsSelect.disabled = false;\r\n this.nodes.basicValuesSelect.disabled = false;\r\n // advanced\r\n this.nodes.advancedTypeSelect.disabled = false;\r\n this.nodes.advancedSubtypeSelect.disabled = false;\r\n this.nodes.advancedColorSelect.disabled = false;\r\n this.nodes.advancedCollectionSelect.disabled = false;\r\n this.nodes.advancedMaterialSelect.disabled = false;\r\n if (this.nodes.advancedYearSelect != null)\r\n this.nodes.advancedYearSelect.disabled = false;\r\n this.nodes.advancedDesignerSelect.disabled = false;\r\n // order-by\r\n this.nodes.orderBySelect.disabled = false;\r\n // initialize imagesLoader\r\n imagesLoader.context = this.nodes.resultsPlaceholder;\r\n imagesLoader.query = \"img[data-src]\";\r\n imagesLoader.execute();\r\n // url management\r\n window.addEventListener(\"popstate\", function (e) {\r\n _this.popstate(e);\r\n });\r\n }\r\n Object.defineProperty(CallToAction.prototype, \"loadingVisible\", {\r\n //\r\n get: function () {\r\n return this.nodes.loading.classList.contains(\"visible\");\r\n },\r\n set: function (visible) {\r\n this.nodes.loading.classList.toggle(\"visible\", visible);\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n CallToAction.prototype.popstate = function (e) {\r\n // check\r\n if (e.state === null)\r\n return;\r\n // adjust search mode (page title is automated into SearchMode change)\r\n if (e.state.searchMode !== undefined) {\r\n var stateSearchMode = e.state.searchMode;\r\n if (this.searchMode !== stateSearchMode)\r\n this.toggleSearchMode();\r\n }\r\n // breadcrumbs\r\n this.setBreadcrumbsLast(this.searchModeRelatedPageData.name);\r\n // selects\r\n if (this.searchMode === SearchMode.Basic) {\r\n // basic selects\r\n for (var p in e.state) {\r\n if (e.state.hasOwnProperty(p) && p != \"sort\" && p != \"data\" && p != \"searchMode\") {\r\n this.selectValueSet(this.nodes.basicRootsSelect, p);\r\n this.nodes.basicRootsSelect.dispatchEvent(new Event(\"change\"));\r\n this.selectValueSet(this.nodes.basicValuesSelect, e.state[p]);\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n // advanced selects\r\n for (var p in e.state) {\r\n if (e.state.hasOwnProperty(p) && p != \"sort\" && p != \"data\" && p != \"searchMode\") {\r\n //\r\n var value = e.state[p];\r\n switch (p) {\r\n case \"type\":\r\n this.selectValueSet(this.nodes.advancedTypeSelect, value);\r\n this.advancedFillSubTypes();\r\n break;\r\n case \"subtype\":\r\n this.selectValueSet(this.nodes.advancedSubtypeSelect, value);\r\n break;\r\n case \"color\":\r\n this.selectValueSet(this.nodes.advancedColorSelect, value);\r\n break;\r\n case \"collection\":\r\n this.selectValueSet(this.nodes.advancedCollectionSelect, value);\r\n break;\r\n case \"material\":\r\n this.selectValueSet(this.nodes.advancedMaterialSelect, value);\r\n break;\r\n case \"year\":\r\n this.selectValueSet(this.nodes.advancedYearSelect, value);\r\n break;\r\n case \"designer\":\r\n this.selectValueSet(this.nodes.advancedDesignerSelect, value);\r\n break;\r\n default:\r\n console.warn(\"popstate e.state parameter not found \" + p);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n // sort mode\r\n if (e.state.sort !== undefined)\r\n this.sortMode = e.state.sort;\r\n // render items\r\n this.resultsRender(e.state.data);\r\n imagesLoader.execute();\r\n };\r\n // resize\r\n CallToAction.prototype.resize = function () {\r\n //console.log(\"CallToAction.resize\");\r\n imagesLoader.execute();\r\n };\r\n // scroll\r\n CallToAction.prototype.scroll = function () {\r\n //console.log(\"CallToAction.scroll\");\r\n imagesLoader.execute();\r\n };\r\n // toggle SearchMode\r\n CallToAction.prototype.toggleSearchMode = function () {\r\n //\r\n if (this.searchMode === SearchMode.Basic) {\r\n this.nodes.selector.classList.remove(\"basic\");\r\n this.nodes.selector.classList.add(\"advanced\");\r\n this.searchMode = SearchMode.Advanced;\r\n }\r\n else {\r\n this.nodes.selector.classList.remove(\"advanced\");\r\n this.nodes.selector.classList.add(\"basic\");\r\n this.searchMode = SearchMode.Basic;\r\n }\r\n // page title\r\n document.title = this.searchModeRelatedPageData.title;\r\n };\r\n // basic\r\n CallToAction.prototype.basicSubmit = function (forceReload) {\r\n if (forceReload === void 0) { forceReload = false; }\r\n //\r\n var rootValue = this.nodes.basicRootsSelect.options[this.nodes.basicRootsSelect.selectedIndex].value;\r\n var valueValue = \"\";\r\n if (this.nodes.basicValuesSelect.options.length !== 0 && this.nodes.basicValuesSelect.selectedIndex !== 0)\r\n valueValue = this.nodes.basicValuesSelect.options[this.nodes.basicValuesSelect.selectedIndex].value;\r\n //\r\n if ((rootValue !== \"\" && valueValue !== \"\") || forceReload === true) {\r\n var parameters = {};\r\n if (rootValue !== \"\" && valueValue !== \"\")\r\n parameters[rootValue] = valueValue;\r\n //console.log(\"parameters\", parameters);\r\n this.generalSubmit(parameters, forceReload);\r\n }\r\n };\r\n CallToAction.prototype.basicRootChange = function () {\r\n var rootName = this.nodes.basicRootsSelect.options[this.nodes.basicRootsSelect.selectedIndex].value;\r\n //console.log(rootName);\r\n // cleanup select values\r\n this.optionsClear(this.nodes.basicValuesSelect);\r\n //\r\n if (rootName !== \"\") {\r\n var select = this.context.querySelector(\"select[data-id=\\\"products-search-advanced-\" + rootName + \"\\\"]\");\r\n if (select !== null) {\r\n this.optionsClone(select, this.nodes.basicValuesSelect);\r\n }\r\n }\r\n };\r\n // advanced\r\n CallToAction.prototype.advancedSubmit = function (forceReload) {\r\n if (forceReload === void 0) { forceReload = false; }\r\n //\r\n var parameters = {};\r\n //\r\n var IDtype = this.selectValueGet(this.nodes.advancedTypeSelect);\r\n if (IDtype !== null && IDtype !== \"\")\r\n parameters.type = IDtype;\r\n //\r\n var IDsubType = this.selectValueGet(this.nodes.advancedSubtypeSelect);\r\n if (IDsubType !== null && IDsubType !== \"\")\r\n parameters.subtype = IDsubType;\r\n //\r\n var IDcolor = this.selectValueGet(this.nodes.advancedColorSelect);\r\n if (IDcolor !== null && IDcolor !== \"\")\r\n parameters.color = IDcolor;\r\n //\r\n var IDcollection = this.selectValueGet(this.nodes.advancedCollectionSelect);\r\n if (IDcollection !== null && IDcollection !== \"\")\r\n parameters.collection = IDcollection;\r\n //\r\n var IDmaterial = this.selectValueGet(this.nodes.advancedMaterialSelect);\r\n if (IDmaterial !== null && IDmaterial !== \"\")\r\n parameters.material = IDmaterial;\r\n //\r\n var IDyear = this.selectValueGet(this.nodes.advancedYearSelect);\r\n if (IDyear !== null && IDyear !== \"\")\r\n parameters.year = IDyear;\r\n //\r\n var IDdesigner = this.selectValueGet(this.nodes.advancedDesignerSelect);\r\n if (IDdesigner !== null && IDdesigner !== \"\")\r\n parameters.designer = IDdesigner;\r\n // execute request\r\n this.generalSubmit(parameters, forceReload);\r\n };\r\n CallToAction.prototype.advancedFillSubTypes = function () {\r\n //console.log(\"advancedFillSubTypes\");\r\n var IDtype = this.nodes.advancedTypeSelect.options[this.nodes.advancedTypeSelect.selectedIndex].value;\r\n // clear subtypes\r\n this.optionsClear(this.nodes.advancedSubtypeSelect);\r\n // get type from data\r\n var typeData = this.dataGetType(IDtype);\r\n if (typeData !== null) {\r\n // default\r\n this.optionAdd(this.nodes.advancedSubtypeSelect, this.data.language.select, \"\");\r\n // options\r\n for (var i = 0; i < typeData.st.length; i++) {\r\n var subtype = typeData.st[i];\r\n this.optionAdd(this.nodes.advancedSubtypeSelect, subtype.n, subtype.i);\r\n }\r\n }\r\n };\r\n // general\r\n CallToAction.prototype.generalSubmit = function (parameters, forceReload) {\r\n var _this = this;\r\n if (forceReload === void 0) { forceReload = false; }\r\n // build querystring\r\n var querystring = \"\";\r\n for (var prop in parameters) {\r\n if (parameters.hasOwnProperty(prop))\r\n querystring += \"&\" + prop + \"=\" + parameters[prop];\r\n }\r\n if (querystring === \"\" && forceReload == false)\r\n return;\r\n // add sorting\r\n querystring += \"&sort=\" + this.sortMode;\r\n querystring = querystring.substring(1);\r\n //\r\n var pageURL = this.searchModeRelatedPageData.url;\r\n var finalURL = pageURL + \"?\" + querystring;\r\n if (this.resultsLoadMode === ResultsLoadMode.Redirect) {\r\n document.location.href = finalURL;\r\n //console.log(\"redirect\");\r\n }\r\n else {\r\n //\r\n //finalURL += \"&mode=xhr\";\r\n //console.log(\"load XHR\", finalURL);\r\n // loading\r\n this.loadingVisible = false;\r\n // abort\r\n if (this.resultsLoadFetcher !== null)\r\n this.resultsLoadFetcher.abort();\r\n // clear timeout\r\n window.clearTimeout(this.resultsLoadTimeout);\r\n // state object\r\n var state_1 = Object.assign({}, parameters);\r\n state_1.searchMode = this.searchMode;\r\n state_1.sort = this.sortMode;\r\n // set timeout with proper delay\r\n this.resultsLoadTimeout = window.setTimeout(function () {\r\n // start loading\r\n _this.resultsLoadFetcher = new Fetcher_1.Fetcher(finalURL + \"&mode=xhr\", function (data) {\r\n _this.loadingVisible = false;\r\n // TODO: manage URL, page title and bred crumbs\r\n //console.warn(\":: \", finalURL);\r\n state_1.data = data;\r\n history.pushState(state_1, \"page title\", finalURL);\r\n // render\r\n _this.resultsRender(data);\r\n imagesLoader.execute();\r\n }, function (status, data, message) {\r\n _this.loadingVisible = false;\r\n console.error(\"error\", status, data, message);\r\n }).send();\r\n // loading\r\n _this.loadingVisible = true;\r\n }, this.resultsLoadDelay);\r\n }\r\n };\r\n CallToAction.prototype.clearSelection = function (e) {\r\n var target = e.currentTarget;\r\n var IDselect = target.dataset.id.substring(0, target.dataset.id.lastIndexOf(\"-\"));\r\n var select = this.context.querySelector(\"select[data-id=\\\"\" + IDselect + \"\\\"]\");\r\n if (select !== null && select.options.length != 0) {\r\n select.selectedIndex = 0;\r\n select.dispatchEvent(new Event('change'));\r\n }\r\n };\r\n CallToAction.prototype.resultsReload = function () {\r\n //console.log(\"resultsReload\");\r\n if (this.searchMode === SearchMode.Basic)\r\n this.basicSubmit(true);\r\n else\r\n this.advancedSubmit(true);\r\n };\r\n CallToAction.prototype.resultsClear = function () {\r\n //console.log(\"resultsClear\");\r\n while (this.nodes.resultsPlaceholder.hasChildNodes())\r\n this.nodes.resultsPlaceholder.removeChild(this.nodes.resultsPlaceholder.firstChild);\r\n };\r\n CallToAction.prototype.resultsRender = function (data) {\r\n //console.log(\"resultsRender\", data);\r\n // clear results\r\n this.resultsClear();\r\n // render no results\r\n if (data.products == null || data.products.length == 0) {\r\n var li = document.createElement(\"li\");\r\n this.nodes.resultsPlaceholder.appendChild(li);\r\n li.classList.add(\"grid-col\", \"no-results\");\r\n li.appendChild(document.createTextNode(this.data.language.no_results));\r\n return;\r\n }\r\n // render results\r\n for (var i = 0; i < data.products.length; i++) {\r\n var product = data.products[i];\r\n //\r\n var productThumb = this.populateTemplate(product);\r\n this.nodes.resultsPlaceholder.appendChild(productThumb);\r\n }\r\n };\r\n Object.defineProperty(CallToAction.prototype, \"sortMode\", {\r\n // utilities\r\n get: function () {\r\n return this.selectValueGet(this.nodes.orderBySelect);\r\n },\r\n set: function (value) {\r\n this.selectValueSet(this.nodes.orderBySelect, value);\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n CallToAction.prototype.selectValueGet = function (select) {\r\n if (select !== null && select.options.length != 0)\r\n return select.options[select.selectedIndex].value;\r\n return null;\r\n };\r\n CallToAction.prototype.selectValueSet = function (select, value) {\r\n for (var i = 0; i < select.options.length; i++)\r\n if (select.options[i].value === value) {\r\n select.selectedIndex = i;\r\n return true;\r\n }\r\n //\r\n return false;\r\n };\r\n CallToAction.prototype.optionsClone = function (selectFrom, selectTo) {\r\n // cleanup target select\r\n while (selectTo.hasChildNodes())\r\n selectTo.removeChild(selectTo.firstChild);\r\n // clone\r\n var options = selectFrom.querySelectorAll(\"option\");\r\n for (var i = 0; i < options.length; i++) {\r\n var option = options[i];\r\n selectTo.appendChild(option.cloneNode(true));\r\n }\r\n };\r\n CallToAction.prototype.optionsClear = function (select) {\r\n while (select.hasChildNodes())\r\n select.removeChild(select.firstChild);\r\n };\r\n CallToAction.prototype.optionAdd = function (select, text, value) {\r\n var option = document.createElement(\"option\");\r\n select.appendChild(option);\r\n option.setAttribute(\"value\", value);\r\n option.innerText = text;\r\n };\r\n CallToAction.prototype.dataGetType = function (IDtype) {\r\n var types = this.data.types;\r\n for (var i = 0; i < types.length; i++) {\r\n if (types[i].i === IDtype)\r\n return types[i];\r\n }\r\n return null;\r\n };\r\n CallToAction.prototype.populateTemplate = function (product) {\r\n //\r\n var element = this.productThumbTemplate.content.cloneNode(true);\r\n // a/img\r\n var a_img = element.querySelector(\"div.cover a\");\r\n a_img.href = product.u;\r\n // img\r\n var img = a_img.querySelector(\"img\");\r\n //\r\n var width = parseInt(img.getAttribute(\"width\"));\r\n var height = parseInt(img.getAttribute(\"height\"));\r\n var crop = (img.getAttribute(\"crop\") == \"true\");\r\n //\r\n img.removeAttribute(\"width\");\r\n img.removeAttribute(\"height\");\r\n img.removeAttribute(\"crop\");\r\n //\r\n var imageURL = product.i;\r\n if (imageURL === null || imageURL === undefined)\r\n imageURL = this.data.tools.missing_image;\r\n // fix image dimensions\r\n imageURL = imageURL.replace(/\\/(\\d+)x(\\d+)\\//, \"/\" + width.toString() + \"x\" + height.toString() + \"/\");\r\n if (crop)\r\n imageURL = imageURL.replace(\"/\\nocrop\\/\", \"/crop/\");\r\n else\r\n imageURL = imageURL.replace(\"/\\crop\\/\", \"/nocrop/\");\r\n img.dataset.src = imageURL;\r\n // name\r\n var a_name = element.querySelector(\"*[data-id=\\\"name\\\"]\");\r\n a_name.innerText = product.n;\r\n a_name.href = product.u;\r\n // collection\r\n var collectionSpan = element.querySelector(\"*[data-id=\\\"collection\\\"] span\");\r\n collectionSpan.innerText = this.data.language.collection;\r\n var collectionA = element.querySelector(\"*[data-id=\\\"collection\\\"] a\");\r\n collectionA.innerText = product.cn;\r\n collectionA.href = product.cu;\r\n // designer\r\n var designDiv = element.querySelector(\"*[data-id=\\\"design\\\"]\");\r\n if (product.ds === null || product.ds === undefined || product.ds.length === 0)\r\n designDiv.remove();\r\n else {\r\n var collectionSpan_1 = designDiv.querySelector(\"span\");\r\n collectionSpan_1.innerText = this.data.language.design;\r\n //\r\n var designerA = designDiv.querySelector(\"a\");\r\n if (designerA !== null) {\r\n designerA.innerText = \"\";\r\n for (var i = 0; i < product.ds.length; i++) {\r\n var designerAcloned = designerA.cloneNode(true);\r\n designerA.parentElement.appendChild(designerAcloned);\r\n //\r\n designerAcloned.innerText = product.ds[i].n;\r\n designerAcloned.href = product.ds[i].u;\r\n }\r\n designerA.parentElement.removeChild(designerA);\r\n }\r\n }\r\n //\r\n return element;\r\n };\r\n CallToAction.prototype.setBreadcrumbsLast = function (value) {\r\n var lastBreadCrumb = this.context.querySelector(\"ul.breadcrumbs li:last-child span\");\r\n if (lastBreadCrumb !== null)\r\n lastBreadCrumb.innerText = value;\r\n };\r\n Object.defineProperty(CallToAction.prototype, \"searchModeRelatedPageData\", {\r\n get: function () {\r\n return (this.searchMode === SearchMode.Basic) ? this.data.pages.basic : this.data.pages.advanced;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n return CallToAction;\r\n}());\r\nexports.CallToAction = CallToAction;\r\nvar SearchMode;\r\n(function (SearchMode) {\r\n SearchMode[SearchMode[\"Basic\"] = 0] = \"Basic\";\r\n SearchMode[SearchMode[\"Advanced\"] = 1] = \"Advanced\";\r\n})(SearchMode || (SearchMode = {}));\r\nvar ResultsLoadMode;\r\n(function (ResultsLoadMode) {\r\n ResultsLoadMode[ResultsLoadMode[\"XHR\"] = 0] = \"XHR\";\r\n ResultsLoadMode[ResultsLoadMode[\"Redirect\"] = 1] = \"Redirect\";\r\n})(ResultsLoadMode || (ResultsLoadMode = {}));\r\nvar imagesLoader = /** @class */ (function () {\r\n function imagesLoader() {\r\n }\r\n imagesLoader.execute = function () {\r\n //\r\n if (imagesLoader.context === null || imagesLoader.query === null)\r\n return;\r\n //\r\n window.clearTimeout(imagesLoader.timeout);\r\n imagesLoader.timeout = window.setTimeout(function () { imagesLoader.executeInternal(); }, imagesLoader.delay);\r\n };\r\n imagesLoader.executeInternal = function () {\r\n //console.warn(\"imagesLoader.executeInternal / \" + imagesLoader.timeout);\r\n // QUEUE\r\n var tempNodes = imagesLoader.context.querySelectorAll(imagesLoader.query);\r\n imagesLoader.queue = [];\r\n //console.log(\"total: \" + tempNodes.length);\r\n tempNodes.forEach(function (element) {\r\n var visible = imagesLoader.isIntoView(element);\r\n if (visible)\r\n imagesLoader.queue.push(element);\r\n });\r\n //\r\n //console.warn(\"imagesLoader: \" + imagesLoader.queue.length + \" images to load\");\r\n // START\r\n imagesLoader.executeLoadNext();\r\n };\r\n imagesLoader.executeLoadNext = function () {\r\n //console.warn(\"imagesLoader.executeLoadNext\", imagesLoader.queue.length);\r\n //\r\n if (imagesLoader.queue == null || imagesLoader.queue.length == 0)\r\n return;\r\n // GET FIRST\r\n var firstImage = imagesLoader.queue[0];\r\n var dataSrc = firstImage.dataset.src;\r\n if (dataSrc !== undefined) {\r\n //\r\n firstImage.removeAttribute(\"data-src\");\r\n // ONLOAD\r\n firstImage.addEventListener(\"load\", function () {\r\n firstImage.classList.remove(\"loading\");\r\n imagesLoader.queue.shift();\r\n imagesLoader.executeLoadNext();\r\n });\r\n // ONERROR\r\n firstImage.addEventListener(\"error\", function () {\r\n //console.warn(\"image \" + dataSrc + \" load error\");\r\n //\r\n firstImage.classList.remove(\"loading\");\r\n imagesLoader.queue.shift();\r\n imagesLoader.executeLoadNext();\r\n });\r\n // LOAD\r\n firstImage.src = dataSrc;\r\n //\r\n return;\r\n }\r\n //\r\n imagesLoader.queue.shift();\r\n imagesLoader.executeLoadNext();\r\n };\r\n imagesLoader.isIntoView = function (el) {\r\n var rect = el.getBoundingClientRect();\r\n var elemTop = rect.top;\r\n var elemBottom = rect.bottom;\r\n // Only completely visible elements return true:\r\n //var isVisible = (elemTop >= 0) && (elemBottom <= window.innerHeight);\r\n var isVisible = (elemTop >= 0) && (elemBottom <= (window.innerHeight * 2));\r\n if (isVisible)\r\n return true;\r\n // Partially visible elements return true:\r\n isVisible = elemTop < window.innerHeight && elemBottom >= 0;\r\n //\r\n return isVisible;\r\n };\r\n imagesLoader.queue = null;\r\n imagesLoader.delay = 50; // milliseconds\r\n imagesLoader.timeout = null;\r\n //\r\n imagesLoader.context = null;\r\n imagesLoader.query = null;\r\n return imagesLoader;\r\n}());\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.StoresRoot = void 0;\r\nvar app_component_1 = require(\"../app.component\");\r\nvar StoresRoot = /** @class */ (function () {\r\n function StoresRoot() {\r\n //console.log(\"StoresRoot constructor\");\r\n var _this = this;\r\n this.settings = {\r\n earthRadius: 6371,\r\n iconStandard: \"/assets/img/map-marker-standard.svg\",\r\n iconPriority: \"/assets/img/map-marker-priority.svg\"\r\n };\r\n this.nodes = {};\r\n this.geolocationPosition = null;\r\n //\r\n this._locatorStatus = LocatorStatus.NotSet;\r\n //\r\n this.data = null;\r\n this.markers = null;\r\n this.markerCluster = null;\r\n //\r\n this.rootNode = document.querySelector(\"*[data-id=\\\"stores-root\\\"]\");\r\n this.nodes.locatorMessage = document.querySelector(\"*[data-id=\\\"stores-locator-message\\\"]\");\r\n this.nodes.locatorMessageClose = document.querySelector(\"*[data-id=\\\"stores-locator-message-close\\\"]\");\r\n this.nodes.locator = document.querySelector(\"*[data-id=\\\"stores-locator\\\"]\");\r\n this.nodes.locationInput = document.querySelector(\"input[data-id=\\\"stores-location\\\"]\");\r\n this.nodes.locationReset = document.querySelector(\"*[data-id=\\\"stores-location-reset\\\"]\");\r\n this.nodes.distanceSelect = document.querySelector(\"select[data-id=\\\"stores-location-distance\\\"]\");\r\n this.nodes.distanceReset = document.querySelector(\"*[data-id=\\\"stores-location-distance-reset\\\"]\");\r\n //\r\n this.nodes.storesItems = document.querySelector(\"*[data-id=\\\"stores-items\\\"]\");\r\n //\r\n this.nodes.mapPlaceholder = document.querySelector(\".map-placeholder\");\r\n //\r\n //this.nodes.locationInput.addEventListener(\"keyup\", (e: KeyboardEvent) => { });\r\n this.nodes.locationReset.addEventListener(\"click\", function (e) {\r\n _this.nodes.locationInput.value = \"\";\r\n _this.geolocationPosition = null;\r\n _this.mapSearch();\r\n _this.setSelected(null);\r\n });\r\n this.nodes.distanceSelect.addEventListener(\"change\", function () {\r\n _this.mapSearch();\r\n });\r\n this.nodes.distanceReset.addEventListener(\"click\", function (e) {\r\n _this.nodes.distanceSelect.selectedIndex = 0;\r\n _this.nodes.distanceSelect.dispatchEvent(new Event(\"change\"));\r\n });\r\n // event message close\r\n this.nodes.locatorMessageClose.addEventListener(\"click\", function (e) {\r\n localStorage.setItem(\"locator_enabled\", \"false\");\r\n _this.nodes.locatorMessage.classList.remove(\"visible\");\r\n });\r\n // geolocation\r\n this.nodes.locator.addEventListener(\"click\", function () {\r\n _this.geolocate();\r\n _this.setSelected(null);\r\n });\r\n // initialize data\r\n this.data = JSON.parse(document.querySelector(\"script[data-id=\\\"stores-data\\\"]\").innerHTML);\r\n var _loop_1 = function (i) {\r\n var cursor = this_1.data.stores[i];\r\n // get item\r\n var item = this_1.nodes.storesItems.querySelector(\"*[data-id=\\\"\" + cursor.i.toString() + \"\\\"]\");\r\n if (item === null)\r\n console.error(\"Item not found for store with IDnode=\" + cursor.i.toString() + \".\");\r\n cursor.node = item;\r\n // adjust priority\r\n cursor.priority = (cursor.p === 1);\r\n // distance\r\n cursor.distance = undefined;\r\n // item on mouseenter\r\n item.addEventListener(\"mouseenter\", function () {\r\n //console.log(\"mouseenter\", cursor.marker);\r\n if (cursor.marker === null || cursor.marker === undefined)\r\n return;\r\n cursor.marker.setAnimation(google.maps.Animation.BOUNCE);\r\n window.clearTimeout(cursor.animationTimeout);\r\n cursor.animationTimeout = window.setTimeout(function () { cursor.marker.setAnimation(null); }, 750);\r\n });\r\n // item on click\r\n item.addEventListener(\"click\", function () {\r\n //console.log(\"click\", cursor.marker);\r\n if (cursor.marker === null || cursor.marker === undefined)\r\n return;\r\n _this.nodes.map.panTo(cursor.marker.getPosition());\r\n _this.nodes.map.setZoom(17);\r\n // bounce one\r\n cursor.marker.setAnimation(google.maps.Animation.BOUNCE);\r\n window.clearTimeout(cursor.animationTimeout);\r\n cursor.animationTimeout = window.setTimeout(function () { cursor.marker.setAnimation(null); }, 750);\r\n // set selected\r\n _this.setSelected(cursor);\r\n });\r\n };\r\n var this_1 = this;\r\n for (var i = 0; i < this.data.stores.length; i++) {\r\n _loop_1(i);\r\n }\r\n //console.log(this.data);\r\n }\r\n Object.defineProperty(StoresRoot.prototype, \"locatorStatus\", {\r\n get: function () {\r\n if (this._locatorStatus === LocatorStatus.NotSet) {\r\n var locatorEnabledStoredValue = localStorage.getItem(\"locator_enabled\");\r\n if (locatorEnabledStoredValue === \"true\")\r\n this._locatorStatus = LocatorStatus.Enabled;\r\n else if (locatorEnabledStoredValue === \"false\")\r\n this._locatorStatus = LocatorStatus.Disabled;\r\n }\r\n //\r\n return this._locatorStatus;\r\n },\r\n set: function (status) {\r\n this._locatorStatus = status;\r\n localStorage.setItem(\"locator_enabled\", this._locatorStatus);\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n StoresRoot.prototype.geolocationSuccess = function (position) {\r\n // set position\r\n this.geolocationPosition = position;\r\n //\r\n this.mapSearch();\r\n };\r\n StoresRoot.prototype.geolocationError = function (error) {\r\n console.error(\"error\", error);\r\n };\r\n StoresRoot.prototype.geolocate = function () {\r\n //console.log(\"geolocate\");\r\n var _this = this;\r\n // clear input\r\n this.nodes.locationInput.value = \"\";\r\n // locator\r\n this.locatorStatus = LocatorStatus.Enabled;\r\n this.nodes.locatorMessage.classList.remove(\"visible\");\r\n this.nodes.locator.classList.remove(\"unknown\");\r\n //\r\n //var geo_options = {\r\n //\tenableHighAccuracy: true,\r\n //\tmaximumAge: 30000,\r\n //\ttimeout: 27000\r\n //};\r\n var wpid = navigator.geolocation.getCurrentPosition(function (position) { _this.geolocationSuccess(position); }, function (error) { _this.geolocationError(error); }\r\n //, geo_options\r\n );\r\n };\r\n Object.defineProperty(StoresRoot.prototype, \"distanceValue\", {\r\n get: function () {\r\n return parseInt(this.nodes.distanceSelect.options[this.nodes.distanceSelect.selectedIndex].value);\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n StoresRoot.prototype.mapsStart = function () {\r\n //console.log(\"StoreLocatorMapsStart\");\r\n var _this = this;\r\n // search text\r\n this.autocomplete = new google.maps.places.Autocomplete(this.nodes.locationInput);\r\n this.autocomplete.addListener(\"place_changed\", function () {\r\n _this.mapSearch();\r\n });\r\n // map options\r\n var mapOptions = {\r\n zoom: 2,\r\n minZoom: 2,\r\n //maxZoom: 18,\r\n center: new google.maps.LatLng(0.0, 0.0),\r\n mapTypeControlOptions: {\r\n mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'map_style']\r\n }\r\n //, disableDefaultUI: true\r\n ,\r\n mapTypeControl: false\r\n };\r\n // render map\r\n this.nodes.map = this.mapApplyStyle(this.nodes.mapPlaceholder, mapOptions, this.data.tools.map_styles);\r\n // add markers\r\n this.mapsRenderMarkers();\r\n // check locator enabled\r\n if (\"geolocation\" in navigator) {\r\n this.nodes.locatorMessage.classList.toggle(\"visible\", (this.locatorStatus === LocatorStatus.NotSet));\r\n if (this.locatorStatus === LocatorStatus.Enabled) {\r\n this.geolocate();\r\n return;\r\n }\r\n }\r\n else {\r\n // disabled, hide geolocator\r\n this.nodes.locator.classList.add(\"invisible\");\r\n }\r\n };\r\n ;\r\n StoresRoot.prototype.mapSearch = function () {\r\n //console.log(\"mapSearch\");\r\n // center\r\n var center = null;\r\n if (this.autocomplete != null && this.nodes.locationInput.value.replace(/ /, \"\") != \"\") {\r\n var place = this.autocomplete.getPlace();\r\n if (place != null) {\r\n if (!place.geometry) {\r\n // User entered the name of a Place that was not suggested and\r\n // pressed the Enter key, or the Place Details request failed.\r\n //window.alert(\"No details available for input: '\" + place.name + \"'\");\r\n return;\r\n }\r\n //// If the place has a geometry, then present it on a map.\r\n //if (place.geometry.viewport)\r\n //{\r\n //\tmap.fitBounds(place.geometry.viewport);\r\n //} else\r\n //{\r\n //\tmap.setCenter(place.geometry.location);\r\n //\tmap.setZoom(17); // Why 17? Because it looks good.\r\n //}\r\n //marker.setPosition(place.geometry.location);\r\n //marker.setVisible(true);\r\n //console.log(place.geometry.location.lat());\r\n //console.log(place.geometry.location.lng());\r\n var center = { lat: place.geometry.location.lat(), lng: place.geometry.location.lng() };\r\n //console.log(\"center from place\", center);\r\n }\r\n }\r\n //\r\n if (center === null && this.geolocationPosition !== null) {\r\n center = { lat: this.geolocationPosition.coords.latitude, lng: this.geolocationPosition.coords.longitude };\r\n //console.log(\"center from geolocation\", center);\r\n }\r\n // radius\r\n var radius = 0;\r\n if (center !== null)\r\n radius = this.distanceValue;\r\n // center and radius, and bounds\r\n var bound = new google.maps.LatLngBounds();\r\n if (center != null) {\r\n for (var i = 0; i < this.data.stores.length; i++) {\r\n var cursor = this.data.stores[i];\r\n var mlat = cursor.lt;\r\n var mlng = cursor.ln;\r\n var dLat = this.mapsRad(mlat - center.lat);\r\n var dLong = this.mapsRad(mlng - center.lng);\r\n var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(this.mapsRad(center.lat)) * Math.cos(this.mapsRad(center.lat)) * Math.sin(dLong / 2) * Math.sin(dLong / 2);\r\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n var d = this.settings.earthRadius * c;\r\n // set distance\r\n cursor.distance = d;\r\n // order\r\n var order = Math.round(cursor.distance * 1000);\r\n if (!cursor.priority)\r\n order += 10000;\r\n cursor.node.style.order = order;\r\n this.showDistance(cursor);\r\n //console.log(i, cursor.distance);\r\n // use marker to get map bounds\r\n if (d < radius) {\r\n // add market to bounds\r\n if (cursor.marker !== null)\r\n bound.extend(cursor.marker.getPosition());\r\n }\r\n }\r\n }\r\n else {\r\n // get all markers\r\n for (var i = 0; i < this.data.stores.length; i++) {\r\n var cursor = this.data.stores[i];\r\n if (cursor.marker !== null)\r\n bound.extend(cursor.marker.getPosition());\r\n // clear distance \r\n cursor.distance = undefined;\r\n // order\r\n cursor.node.style.order = \"\";\r\n this.showDistance(cursor);\r\n }\r\n }\r\n // set bounds\r\n this.nodes.map.fitBounds(bound);\r\n // scroll top\r\n this.nodes.storesItems.scroll({\r\n top: top,\r\n behavior: \"smooth\" //auto, smooth, initial, inherit\r\n });\r\n };\r\n ;\r\n StoresRoot.prototype.mapsRenderMarkers = function () {\r\n //console.warn(\"mapsRenderMarkers:\", this.data.stores.length);\r\n var _this = this;\r\n // initialize markerCluster\r\n var clusterStyles = [{\r\n fontFamily: \"Body Regular, Helvetica Neue, Helvetica, Arial, sans-serif\",\r\n textColor: '#000000',\r\n textSize: 22,\r\n //style: 'font-family:Body Regular, Helvetica Neue, Helvetica, Arial, sans- serif; font-size:22px; font-weight:normal; font-style:normal; color:#000;',\r\n url: app_component_1.AppData.applicationPath + \"/assets/img/map-marker-many.svg\",\r\n height: 55,\r\n width: 55\r\n }];\r\n //var mcOptions = { gridSize: 50, styles: clusterStyles, maxZoom: 15 };\r\n var mcOptions = {\r\n gridSize: 100,\r\n styles: clusterStyles,\r\n maxZoom: 10\r\n };\r\n this.markerCluster = new MarkerClusterer(this.nodes.map, [], mcOptions);\r\n // prepare icons\r\n var iconStandard = {\r\n url: app_component_1.AppData.applicationPath + this.settings.iconStandard,\r\n size: new google.maps.Size(26, 26),\r\n origin: new google.maps.Point(0, 0),\r\n anchor: new google.maps.Point(13, 13)\r\n };\r\n var iconPriority = {\r\n url: app_component_1.AppData.applicationPath + this.settings.iconPriority,\r\n size: new google.maps.Size(26, 26),\r\n origin: new google.maps.Point(0, 0),\r\n anchor: new google.maps.Point(13, 13)\r\n };\r\n // add markers\r\n this.markers = this.data.stores.map(function (item, i) {\r\n // skip items w/out coords\r\n if (item.lt === 0 && item.lg === 0)\r\n return null;\r\n // create marker\r\n var marker = new google.maps.Marker({\r\n position: new google.maps.LatLng(item.lt, item.ln),\r\n title: item.n,\r\n icon: (item.priority) ? iconPriority : iconStandard,\r\n //\r\n item: item\r\n });\r\n //\r\n item.marker = marker;\r\n //\r\n marker.addListener(\"click\", function () {\r\n _this.setSelected(item);\r\n });\r\n //\r\n return marker;\r\n });\r\n // set markers\r\n var bound = new google.maps.LatLngBounds();\r\n for (var i = 0; i < this.markers.length; i++) {\r\n var marker = this.markers[i];\r\n marker.setMap(this.nodes.map);\r\n bound.extend(marker.getPosition());\r\n }\r\n // set zoom and position\r\n this.nodes.map.fitBounds(bound);\r\n //\r\n this.markerCluster.addMarkers(this.markers);\r\n //if (markers.length != 0)\r\n //\tdistributionObj.markerCluster.fitMapToMarkers();\r\n };\r\n StoresRoot.prototype.mapsRad = function (x) {\r\n return x * Math.PI / 180;\r\n };\r\n StoresRoot.prototype.mapApplyStyle = function (mapObj, mapOptions, mapStyle) {\r\n // create style\r\n var styledMap = new google.maps.StyledMapType(mapStyle, { name: \"map\" });\r\n // add options\r\n var map = new google.maps.Map(mapObj, mapOptions);\r\n // associate the styled map with the MapTypeId and set it to display.\r\n map.mapTypes.set('map_style', styledMap);\r\n map.setMapTypeId('map_style');\r\n //\r\n return map;\r\n };\r\n ;\r\n StoresRoot.prototype.mapsItemDetailsClear = function () {\r\n //console.log(\"mapsItemDetailsClear not yet developed.\");\r\n };\r\n ;\r\n StoresRoot.prototype.mapsItemDetailsShow = function (item) {\r\n //console.log(\"mapsItemDetailsShow not yet developed.\", item);\r\n };\r\n ;\r\n StoresRoot.prototype.showDistance = function (store) {\r\n var h3 = store.node.querySelector(\"h3\");\r\n if (h3 === null)\r\n return;\r\n var tag = h3.querySelector(\"span.distance\");\r\n if (store.distance === undefined) {\r\n if (tag !== null)\r\n tag.parentElement.removeChild(tag);\r\n }\r\n else {\r\n if (tag === null) {\r\n tag = document.createElement(\"span\");\r\n h3.appendChild(tag);\r\n tag.classList.add(\"distance\");\r\n }\r\n tag.innerText = Math.round(store.distance) + \" km\";\r\n }\r\n };\r\n StoresRoot.prototype.setSelected = function (store) {\r\n // cleanup\r\n for (var i = 0; i < this.data.stores.length; i++)\r\n this.data.stores[i].node.classList.remove(\"selected\");\r\n // select\r\n if (store !== null && store !== undefined) {\r\n store.node.classList.add(\"selected\");\r\n // scroll\r\n var parent_1 = store.node.parentElement;\r\n var top_1 = store.node.getBoundingClientRect().top - parent_1.getBoundingClientRect().top + parent_1.scrollTop;\r\n store.node.parentElement.scroll({\r\n top: top_1,\r\n behavior: \"smooth\" //auto, smooth, initial, inherit\r\n });\r\n }\r\n };\r\n return StoresRoot;\r\n}());\r\nexports.StoresRoot = StoresRoot;\r\nvar LocatorStatus;\r\n(function (LocatorStatus) {\r\n LocatorStatus[\"NotSet\"] = \"\";\r\n LocatorStatus[\"Enabled\"] = \"true\";\r\n LocatorStatus[\"Disabled\"] = \"false\";\r\n})(LocatorStatus || (LocatorStatus = {}));\r\n"],"sourceRoot":""}