{"version":3,"sources":["webpack:///./src/components/TourGuide/ProgressBar.vue?d725","webpack:///./src/assets/images/tour-guide/double-check.png","webpack:///./src/assets/images/tour-guide/greenClockVector.png","webpack:///./node_modules/core-js/modules/es.array.flat-map.js","webpack:///./node_modules/core-js/modules/es.array.unscopables.flat-map.js","webpack:///./src/components/TourGuide/TourGuideCards.vue?fc51","webpack:///./src/components/TourGuide/Arrows.vue?26a8","webpack:///../../../src/components/VGrid/VContainer.ts","webpack:///./src/views/EventViews/EventDashboard/EventDashboard.vue?f2da","webpack:///./src/components/TourGuide/TourGuideCards.vue?5155","webpack:///./src/components/TourGuide/Arrows.vue?023d","webpack:///src/components/TourGuide/Arrows.vue","webpack:///./src/components/TourGuide/Arrows.vue?20a7","webpack:///./src/components/TourGuide/Arrows.vue?2298","webpack:///./src/components/TourGuide/ProgressBar.vue?a1c3","webpack:///src/components/TourGuide/ProgressBar.vue","webpack:///./src/components/TourGuide/ProgressBar.vue?2033","webpack:///./src/components/TourGuide/ProgressBar.vue?2bdb","webpack:///./src/components/TourGuide/stepMappings.js","webpack:///src/components/TourGuide/TourGuideCards.vue","webpack:///./src/components/TourGuide/TourGuideCards.vue?6c09","webpack:///./src/components/TourGuide/TourGuideCards.vue?17a2","webpack:///src/views/EventViews/EventDashboard/EventDashboard.vue","webpack:///./src/views/EventViews/EventDashboard/EventDashboard.vue?be10","webpack:///./src/views/EventViews/EventDashboard/EventDashboard.vue","webpack:///./node_modules/hammerjs/hammer.js","webpack:///./src/assets/images/tour-guide/conversation.png","webpack:///../../../src/components/VGrid/grid.ts","webpack:///./src/@core/utils/ImageFromApi.js"],"names":["module","exports","$","flattenIntoArray","aCallable","toObject","lengthOfArrayLike","arraySpeciesCreate","target","proto","flatMap","callbackfn","A","O","this","sourceLen","length","arguments","undefined","addToUnscopables","Grid","extend","name","functional","props","id","String","tag","type","default","fluid","Boolean","render","h","classes","data","children","attrs","Object","keys","filter","key","value","startsWith","domProps","mergeData","staticClass","class","Array","concat","_vm","_h","$createElement","_c","_self","$store","state","tourGuideShow","_e","staticRenderFns","model","callback","$$v","$set","expression","style","$vuetify","breakpoint","width","xsOnly","smAndDown","on","closeTourGuide","_v","_s","$t","steps","currentStep","autoMoveToNextStep","moveToNextStep","moveToPreviousStep","ref","_l","step","index","directives","rawName","component","selectedPackage","$event","isLastStep","currentStepName","nextButtonClass","icons","mdiChevronLeft","mdiChevronRight","isFirstStep","prevButtonClass","required","stepsCount","computed","rtl","setup","VAvatar","VBtn","VIcon","Math","floor","segmentStyle","totalDuration","localCurrentStep","progress","intervalId","updateFrequency","watch","newStep","durationStepMapping","resetProgress","startProgress","mounted","beforeDestroy","clearInterval","methods","fill","updateProgress","setInterval","transition","backgroundColor","VCol","VRow","stepComponents","WelcomePagePreview","InvitationPagePreview","PackageSelection","MessagesPreview","CallsPreview","TimingPreview","UploadGuestsPreview","MessageSystemSelection","stepImages","require","components","ProgressBar","Arrows","tourGuideTop","behavior","plannedSteps","isVisible","disableAutoMove","loadComponents","imagePromises","Promise","loading","store","activeCall","scrollToTop","onMounted","hammer","touchAction","inputClass","recognizers","direction","isRtl","swipeNext","initializeSteps","onUnmounted","VCard","VContainer","VDialog","VProgressCircular","TourGuideCards","isLoading","dispatch","catch","finally","eventId","window","document","exportName","assign","VENDOR_PREFIXES","TEST_ELEMENT","createElement","TYPE_FUNCTION","round","abs","now","Date","setTimeoutContext","fn","timeout","context","setTimeout","bindFn","invokeArrayArg","arg","isArray","each","obj","iterator","i","forEach","call","hasOwnProperty","deprecate","method","message","deprecationMessage","e","Error","stack","replace","log","console","warn","apply","TypeError","output","source","nextKey","dest","src","merge","inherit","child","base","properties","childP","baseP","prototype","create","constructor","_super","boolOrFn","val","args","ifUndefined","val1","val2","addEventListeners","types","handler","splitStr","addEventListener","removeEventListeners","removeEventListener","hasParent","node","parent","parentNode","inStr","str","find","indexOf","trim","split","inArray","findByKey","toArray","slice","uniqueArray","sort","results","values","push","a","b","prefixed","property","prefix","prop","camelProp","toUpperCase","_uniqueId","uniqueId","getWindowForElement","element","doc","ownerDocument","defaultView","parentWindow","MOBILE_REGEX","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","test","navigator","userAgent","INPUT_TYPE_TOUCH","INPUT_TYPE_PEN","INPUT_TYPE_MOUSE","INPUT_TYPE_KINECT","COMPUTE_INTERVAL","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","Input","manager","self","options","inputTarget","domHandler","ev","enable","init","createInputInstance","Type","PointerEventInput","TouchInput","TouchMouseInput","MouseInput","inputHandler","eventType","input","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","computeInputData","emit","recognize","prevInput","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","computeDeltaXY","offsetDirection","getDirection","deltaX","deltaY","overallVelocity","getVelocity","overallVelocityX","x","overallVelocityY","y","scale","getScale","rotation","getRotation","maxPointers","computeIntervalInputData","srcEvent","offset","offsetDelta","prevDelta","velocity","velocityX","velocityY","last","lastInterval","v","clientX","clientY","p1","p2","sqrt","atan2","PI","start","end","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","pressed","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","toLowerCase","isTouch","storeIndex","pointerId","splice","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","SingleTouchInput","started","normalizeSingleTouches","all","touches","changed","changedTouches","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","targetIds","getTouches","allTouches","identifier","targetTouches","changedTargetTouches","touch","DEDUP_TIMEOUT","DEDUP_DISTANCE","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","removeLastTouch","isSyntheticEvent","t","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","getTouchActionProps","TouchAction","set","cleanTouchActions","actions","hasPanX","hasPanY","touchMap","cssSupports","CSS","supports","compute","update","recognizer","getTouchAction","join","preventDefaults","prevented","preventDefault","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","Recognizer","defaults","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","get","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","count","Hammer","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","event","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","isValid","threshold","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","clearTimeout","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","STOP","FORCED_STOP","handlers","oldCssProps","toggleCssProps","item","add","triggerDomEvent","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","stop","force","stopped","curRecognizer","existing","remove","events","off","Tap","Pan","Swipe","Pinch","Rotate","Press","freeGlobal","VGrid","Vue","getFullImageUrl","image"],"mappings":"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","file":"js/chunk-dd8fe8d8.8f24f701.js","sourcesContent":["export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProgressBar.vue?vue&type=style&index=0&id=6f86bc71&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/double-check.917d5f9d.png\";","module.exports = __webpack_public_path__ + \"img/greenClockVector.8f1d5cda.png\";","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-array.prototype.flatmap\n$({ target: 'Array', proto: true }, {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen = lengthOfArrayLike(O);\n var A;\n aCallable(callbackfn);\n A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return A;\n }\n});\n","// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flatMap');\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TourGuideCards.vue?vue&type=style&index=0&id=5c60916f&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Arrows.vue?vue&type=style&index=0&id=7eb24c32&scoped=true&lang=css&\"","import './_grid.sass'\nimport './VGrid.sass'\n\nimport Grid from './grid'\n\nimport mergeData from '../../util/mergeData'\n\n/* @vue/component */\nexport default Grid('container').extend({\n name: 'v-container',\n functional: true,\n props: {\n id: String,\n tag: {\n type: String,\n default: 'div',\n },\n fluid: {\n type: Boolean,\n default: false,\n },\n },\n render (h, { props, data, children }) {\n let classes\n const { attrs } = data\n if (attrs) {\n // reset attrs to extract utility clases like pa-3\n data.attrs = {}\n classes = Object.keys(attrs).filter(key => {\n // TODO: Remove once resolved\n // https://github.com/vuejs/vue/issues/7841\n if (key === 'slot') return false\n\n const value = attrs[key]\n\n // add back data attributes like data-test=\"foo\" but do not\n // add them as classes\n if (key.startsWith('data-')) {\n data.attrs![key] = value\n return false\n }\n\n return value || typeof value === 'string'\n })\n }\n\n if (props.id) {\n data.domProps = data.domProps || {}\n data.domProps.id = props.id\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'container',\n class: Array({\n 'container--fluid': props.fluid,\n }).concat(classes || []),\n }),\n children\n )\n },\n})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition',{attrs:{\"name\":\"scroll-x-transition\",\"mode\":\"out-in\",\"appear\":\"\"}},[(_vm.isLoading)?_c('div',{staticClass:\"d-flex justify-center\"},[_c('v-progress-circular',{attrs:{\"size\":50,\"indeterminate\":\"\",\"color\":\"primary\"}})],1):_c('div',[(_vm.$store.state.tourGuideShow.value)?_c('TourGuideCards'):_vm._e(),_c('router-view')],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"tour-guide-cards\"}},[_c('v-dialog',{attrs:{\"fullscreen\":\"\",\"hide-overlay\":\"\",\"persistent\":\"\",\"scrollable\":\"\"},model:{value:(_vm.$store.state.tourGuideShow.value),callback:function ($$v) {_vm.$set(_vm.$store.state.tourGuideShow, \"value\", $$v)},expression:\"$store.state.tourGuideShow.value\"}},[_c('v-container',{staticClass:\"d-flex justify-center dialog-container\",style:(_vm.$vuetify.breakpoint.width > 300 ? 'background: #fafafa;' : ''),attrs:{\"id\":\"tour-guide-dialog-container\",\"fluid\":\"\"}},[(_vm.loading)?_c('div',{staticClass:\"loading-container\"},[_c('v-progress-circular',{attrs:{\"size\":40,\"indeterminate\":\"\",\"color\":\"primary\"}})],1):_c('div',{staticClass:\"d-flex justify-center card-container\"},[_c('v-card',{staticClass:\"centered-card pb-0\",style:((\"height: 100%; width: 100%; \" + (_vm.$vuetify.breakpoint.xsOnly ? '' : 'max-width: 390px;') + \" \" + (_vm.$vuetify.breakpoint.smAndDown ? 'height: 100%;' : 'margin-top: 20px;'))),attrs:{\"flat\":\"\",\"color\":\"veryLightGreen\"}},[_c('div',{staticClass:\"justify-center align-center text-center fixed sticky-story\"},[(_vm.$store.state.tourGuideShow.type !== 'newEvent')?_c('v-btn',{staticClass:\"pa-0 ma-0\",attrs:{\"color\":\"transparent\",\"text\":\"\"},on:{\"click\":_vm.closeTourGuide}},[_c('div',{staticClass:\"black--text\"},[_vm._v(\" \"+_vm._s(_vm.$t('Close'))+\" \")])]):_c('div',{staticClass:\"pt-4\"}),(_vm.steps[_vm.currentStep])?_c('ProgressBar',{staticClass:\"pb-5\",attrs:{\"current-step-name\":_vm.steps[_vm.currentStep].name,\"current-step\":_vm.currentStep,\"steps-count\":_vm.steps.length,\"move-to-next-step\":_vm.autoMoveToNextStep}}):_vm._e()],1),_c('arrows',{attrs:{\"current-step\":_vm.currentStep,\"steps-count\":_vm.steps.length,\"move-to-next-step\":_vm.moveToNextStep,\"move-to-previous-step\":_vm.moveToPreviousStep,\"current-step-name\":_vm.steps[_vm.currentStep].name}}),_c('div',{ref:\"tourGuideTop\"},[_c('div',{staticClass:\"card-content mt-8\"},_vm._l((_vm.steps),function(step,index){return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentStep === index),expression:\"currentStep === index\"}],key:index},[_c(step.component,{tag:\"component\",attrs:{\"step-index\":index,\"current-step\":_vm.currentStep,\"steps-count\":_vm.steps.length,\"move-to-next-step\":_vm.moveToNextStep,\"move-to-previous-step\":_vm.moveToPreviousStep,\"selected-package\":_vm.selectedPackage},on:{\"update:selectedPackage\":function($event){_vm.selectedPackage=$event},\"update:selected-package\":function($event){_vm.selectedPackage=$event}}})],1)}),0)])],1)],1)])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"d-flex arrows-container\"},[(!_vm.isLastStep && _vm.currentStepName !== 'PackageSelection' && _vm.currentStepName !== 'MessageSystemSelection')?_c('v-btn',{class:_vm.nextButtonClass,attrs:{\"icon\":\"\"},on:{\"click\":_vm.moveToNextStep}},[_c('v-avatar',{staticClass:\"v-avatar-light-bg\",attrs:{\"size\":\"40\"}},[(_vm.$vuetify.rtl)?_c('v-icon',{attrs:{\"size\":\"40\"}},[_vm._v(\" \"+_vm._s(_vm.icons.mdiChevronLeft)+\" \")]):_c('v-icon',{attrs:{\"size\":\"40\"}},[_vm._v(\" \"+_vm._s(_vm.icons.mdiChevronRight)+\" \")])],1)],1):_vm._e(),(!_vm.isFirstStep)?_c('v-btn',{class:_vm.prevButtonClass,attrs:{\"icon\":\"\"},on:{\"click\":_vm.moveToPreviousStep}},[_c('v-avatar',{staticClass:\"v-avatar-light-bg\",attrs:{\"size\":\"40\"}},[(_vm.$vuetify.rtl)?_c('v-icon',{attrs:{\"size\":\"40\"}},[_vm._v(\" \"+_vm._s(_vm.icons.mdiChevronRight)+\" \")]):_c('v-icon',{attrs:{\"size\":\"40\"}},[_vm._v(\" \"+_vm._s(_vm.icons.mdiChevronLeft)+\" \")])],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Arrows.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Arrows.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Arrows.vue?vue&type=template&id=7eb24c32&scoped=true&\"\nimport script from \"./Arrows.vue?vue&type=script&lang=js&\"\nexport * from \"./Arrows.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Arrows.vue?vue&type=style&index=0&id=7eb24c32&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7eb24c32\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAvatar } from 'vuetify/lib/components/VAvatar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VAvatar,VBtn,VIcon})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-row',{staticClass:\"progress-row\",attrs:{\"no-gutters\":\"\",\"justify\":\"center\"}},_vm._l((_vm.stepsCount),function(step,index){return _c('v-col',{key:index,staticClass:\"progress-segment\",attrs:{\"cols\":Math.floor(12 / _vm.stepsCount)- 0.1}},[_c('div',{staticClass:\"segment-inner\",style:(_vm.segmentStyle(index))})])}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProgressBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProgressBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProgressBar.vue?vue&type=template&id=6f86bc71&scoped=true&\"\nimport script from \"./ProgressBar.vue?vue&type=script&lang=js&\"\nexport * from \"./ProgressBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ProgressBar.vue?vue&type=style&index=0&id=6f86bc71&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6f86bc71\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VCol,VRow})\n","// src/stepMappings.js\nexport const stepComponents = {\n WelcomePagePreview: () => import('@/components/TourGuide/TourGuideSteps/WelcomePagePreview.vue'),\n InvitationPagePreview: () => import('@/components/TourGuide/TourGuideSteps/InvitationPagePreview.vue'),\n PackageSelection: () => import('@/components/TourGuide/TourGuideSteps/PackageSelection.vue'),\n MessagesPreview: () => import('@/components/TourGuide/TourGuideSteps/MessagesPreview.vue'),\n CallsPreview: () => import('@/components/TourGuide/TourGuideSteps/CallsPreview.vue'),\n TimingPreview: () => import('@/components/TourGuide/TourGuideSteps/TimingPreview.vue'),\n UploadGuestsPreview: () => import('@/components/TourGuide/TourGuideSteps/UploadGuestsPreview.vue'),\n MessageSystemSelection: () => import('@/components/TourGuide/TourGuideSteps/MessageSystemSelection.vue'),\n}\n\nexport const stepImages = {\n WelcomePagePreview: [require('@/assets/images/tour-guide/greenClockVector.png')],\n PackageSelection: [require('@/assets/images/tour-guide/conversation.png')],\n MessageSystemSelection: [require('@/assets/images/tour-guide/double-check.png')],\n\n // UploadGuestsPreview: [require('@/assets/images/tour-guide/contacts-book.png')],\n}\n","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TourGuideCards.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TourGuideCards.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TourGuideCards.vue?vue&type=template&id=5c60916f&scoped=true&\"\nimport script from \"./TourGuideCards.vue?vue&type=script&lang=js&\"\nexport * from \"./TourGuideCards.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TourGuideCards.vue?vue&type=style&index=0&id=5c60916f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5c60916f\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\ninstallComponents(component, {VBtn,VCard,VContainer,VDialog,VProgressCircular})\n","\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EventDashboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EventDashboard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EventDashboard.vue?vue&type=template&id=370315d0&\"\nimport script from \"./EventDashboard.vue?vue&type=script&lang=js&\"\nexport * from \"./EventDashboard.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\ninstallComponents(component, {VProgressCircular})\n","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","module.exports = __webpack_public_path__ + \"img/conversation.c61c5837.png\";","// Types\nimport Vue, { VNode } from 'vue'\n\nexport default function VGrid (name: string) {\n /* @vue/component */\n return Vue.extend({\n name: `v-${name}`,\n\n functional: true,\n\n props: {\n id: String,\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n render (h, { props, data, children }): VNode {\n data.staticClass = (`${name} ${data.staticClass || ''}`).trim()\n\n const { attrs } = data\n if (attrs) {\n // reset attrs to extract utility clases like pa-3\n data.attrs = {}\n const classes = Object.keys(attrs).filter(key => {\n // TODO: Remove once resolved\n // https://github.com/vuejs/vue/issues/7841\n if (key === 'slot') return false\n\n const value = attrs[key]\n\n // add back data attributes like data-test=\"foo\" but do not\n // add them as classes\n if (key.startsWith('data-')) {\n data.attrs![key] = value\n return false\n }\n\n return value || typeof value === 'string'\n })\n\n if (classes.length) data.staticClass += ` ${classes.join(' ')}`\n }\n\n if (props.id) {\n data.domProps = data.domProps || {}\n data.domProps.id = props.id\n }\n\n return h(props.tag, data, children)\n },\n })\n}\n","export const getFullImageUrl = image => {\n return image ? `${process.env.VUE_APP_LOCAL_HOST}event/images/${image}` : ''\n}"],"sourceRoot":""}