{"version":3,"sources":["webpack:///../node_modules/hammerjs/hammer.js","webpack:///../node_modules/pp-amount-field/dist/pp-amount-field.basic.v2.umd.js","webpack:///../node_modules/react-hammerjs/dist/react-hammerjs.es.js"],"names":["window","document","exportName","undefined","assign","VENDOR_PREFIXES","TEST_ELEMENT","createElement","round","Math","abs","now","Date","setTimeoutContext","fn","timeout","context","setTimeout","bindFn","invokeArrayArg","arg","Array","isArray","each","obj","iterator","i","forEach","length","call","hasOwnProperty","deprecate","method","name","message","deprecationMessage","e","Error","stack","replace","log","console","warn","apply","this","arguments","Object","target","TypeError","output","index","source","nextKey","extend","dest","src","merge","keys","inherit","child","base","properties","childP","baseP","prototype","create","constructor","_super","boolOrFn","val","args","ifUndefined","val1","val2","addEventListeners","types","handler","splitStr","type","addEventListener","removeEventListeners","removeEventListener","hasParent","node","parent","parentNode","inStr","str","find","indexOf","trim","split","inArray","findByKey","toArray","slice","uniqueArray","key","sort","results","values","push","a","b","prefixed","property","prefix","prop","camelProp","toUpperCase","_uniqueId","getWindowForElement","element","doc","ownerDocument","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","test","navigator","userAgent","PROPS_XY","PROPS_CLIENT_XY","Input","manager","callback","self","options","inputTarget","domHandler","ev","enable","init","inputHandler","eventType","input","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","offset","offsetDelta","prevDelta","prevInput","x","deltaX","y","deltaY","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","scale","start","end","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","direction","last","lastInterval","v","computeIntervalInputData","srcEvent","computeInputData","emit","recognize","clientX","clientY","p1","p2","props","sqrt","atan2","PI","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MouseInput","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","PointerEventInput","store","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","toLowerCase","isTouch","storeIndex","pointerId","splice","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SingleTouchInput","started","normalizeSingleTouches","all","touches","changed","changedTouches","concat","TOUCH_INPUT_MAP","TouchInput","targetIds","getTouches","allTouches","identifier","targetTouches","changedTargetTouches","filter","touch","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","t","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","style","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","value","set","compute","actions","update","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","join","preventDefaults","prevented","preventDefault","hasNone","isTapPointer","isTapMovement","isTapTouchTime","DIRECTION_LEFT","DIRECTION_UP","preventSrc","Recognizer","defaults","id","state","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","DIRECTION_HORIZONTAL","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","clearTimeout","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","handlers","oldCssProps","toggleCssProps","item","add","stop","force","stopped","curRecognizer","existing","remove","on","events","off","data","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","DIRECTION_NONE","DIRECTION_RIGHT","DIRECTION_DOWN","DIRECTION_VERTICAL","DIRECTION_ALL","Tap","Pan","Swipe","Pinch","Rotate","Press","exports","React","React__default","_extends","_classCallCheck","instance","Constructor","_defineProperties","descriptor","enumerable","configurable","writable","defineProperty","_createClass","protoProps","staticProps","_typeof2","Symbol","_typeof","_assertThisInitialized","ReferenceError","_possibleConstructorReturn","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","_setPrototypeOf","p","_inherits","subClass","superClass","_defineProperty","_objectSpread","ownKeys","getOwnPropertySymbols","sym","getOwnPropertyDescriptor","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","commonjsGlobal","global","createCommonjsModule","module","classnames","hasOwn","classNames","classes","argType","inner","default","_freeGlobal","freeSelf","_Symbol","Function","objectProto","nativeObjectToString","toString","symToStringTag","toStringTag","_getRawTag","isOwn","tag","result","nativeObjectToString$1","_objectToString","symToStringTag$1","_baseGetTag","isObjectLike_1","isNumber_1","_isNaN","fontfaceobserver_standalone","l","attachEvent","r","setAttribute","appendChild","createTextNode","c","h","f","g","cssText","offsetWidth","width","scrollLeft","scrollWidth","z","k","A","family","weight","stretch","B","C","E","F","J","fonts","K","font","L","load","q","D","H","getTime","Promise","vendor","exec","parseInt","G","M","then","N","race","body","readyState","detachEvent","m","u","w","d","removeChild","n","dir","I","hidden","replaceNonDigits","formatUserCentsInput","currencyCode","currencyDecimal","userInput","currencyPrecision","JPY","TWD","HUF","getCurrencyPrecision","stringVal","formattedValue","sliceDigitsBeforeCurrencyDecimal","sliceDigitsAfterCurrencyDecimal","formatInput","stringValue","amount","numOfZeroesToAdd","max","repeat","prependWithZeroes","calcNewValue","measureTextSizeWithStyle","_ref2","fontSize","hostElement","text","hostElementStyles","getComputedStyle","spanElem","_hostElementStyles$fo","fontWeight","fontFamily","paddingLeft","paddingRight","borderWidth","position","top","left","innerHTML","_document$body2","clientWidth","_document$body","cssMeasurementToNumber","measurement","Number","moveCursorToTheEnd","setSelectionRange","callAllEventHandlers","_len","fns","_key","_len2","_key2","some","preventPPAmountFieldDefault","callAll","_len3","_key3","_len4","_key4","Boolean","SingleAmountField","_Component","_getPrototypeOf2","_this","_ref","handleChange","_ref2$target","_ref2$target$value","_objectSpread2","_props$refKey","refKey","ref","onChange","onFocus","onClick","rest","inputStyles","amountWidth","amountFontSize","autoComplete","autoFocus","readOnly","inputRef","handleInputChange","moveCursor","el","_objectSpread3","_props$refKey2","selectRef","handleSelectChange","currencyCodeWidth","_select","_this2","_isMounted","catch","err","forceUpdate","onFontLoaded","_ref3","_ref3$value","_ref3$currencyCode","cleanValue","numberValue","onInvalidInput","getInputProps","getSelectProps","_this$props","currencySymbolMap","fontSizeMapping","defaultFontSize","currencySymbol","getFormattedValue","digitCount","currencyCharCount","String","updateFontSize","ua","isFirefox","includes","isIE11","MSInputMethodContext","documentMode","isIE","extraSpaceToAccountForWeirdBrowserIssues","makeCalculations","children","getStateAndHelpers","Component","_jsxFileName","BasicAmountField","_React$Component","showInvalid","hideCursor","visible","setState","renderTimeoutId","_this3","_this$props$showConde","showCondensedUI","_this$props$renderAft","renderAfterInput","_this$props$arrowProp","arrowProps","_this$props$className","className","_this$props$inputProp","inputProps","_this$props$selectPro","selectProps","forwardToAmountField","_this$state","currencyCodeList","handleFontLoaded","__source","fileName","lineNumber","__self","inputWrapperClasses","currencySymbolClassNames","inputClassNames","dropdownWrapperClassNames","disabled","dropdownClassNames","visibility","color","required","onMouseDown","handleMouseDown","onMouseUp","handleMouseUp","map","code","ArrowIcon","viewBox","preserveAspectRatio","height","fill","stroke","strokeWidth","paddingBottom","AmountFieldWithCSS","version","stylesString","stylesId","head","querySelector","styles","append","factory","defineProperties","privateProps","vertical","handlerToEvent","action","onDoubleTap","onPan","onPanCancel","onPanEnd","onPanStart","onPinch","onPinchCancel","onPinchEnd","onPinchIn","onPinchOut","onPinchStart","onPress","onPressUp","onRotate","onRotateCancel","onRotateEnd","onRotateMove","onRotateStart","onSwipe","onSwipeRight","onSwipeLeft","onSwipeUp","onSwipeDown","onTap","updateHammer","hammer","directionProp","option","optionObj","HammerComponent","domElement","cloneElement","Children","only","displayName","propTypes","string"],"mappings":"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","file":"vendors~ppme-settings~ppme-slug.bundle.js","sourcesContent":["/*! 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","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :\n typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :\n (factory((global.PpAmountField = {}),global.React));\n}(this, (function (exports,React) { 'use strict';\n\n var React__default = 'default' in React ? React['default'] : React;\n\n function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\n function _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n }\n\n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n }\n\n function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n }\n\n function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n }\n\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n }\n\n function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n }\n\n var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n function createCommonjsModule(fn, module) {\n \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n }\n\n var classnames = createCommonjsModule(function (module) {\n /*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n */\n /* global define */\n\n (function () {\n\n \tvar hasOwn = {}.hasOwnProperty;\n\n \tfunction classNames () {\n \t\tvar classes = [];\n\n \t\tfor (var i = 0; i < arguments.length; i++) {\n \t\t\tvar arg = arguments[i];\n \t\t\tif (!arg) continue;\n\n \t\t\tvar argType = typeof arg;\n\n \t\t\tif (argType === 'string' || argType === 'number') {\n \t\t\t\tclasses.push(arg);\n \t\t\t} else if (Array.isArray(arg) && arg.length) {\n \t\t\t\tvar inner = classNames.apply(null, arg);\n \t\t\t\tif (inner) {\n \t\t\t\t\tclasses.push(inner);\n \t\t\t\t}\n \t\t\t} else if (argType === 'object') {\n \t\t\t\tfor (var key in arg) {\n \t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n \t\t\t\t\t\tclasses.push(key);\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t}\n\n \t\treturn classes.join(' ');\n \t}\n\n \tif (module.exports) {\n \t\tclassNames.default = classNames;\n \t\tmodule.exports = classNames;\n \t} else {\n \t\twindow.classNames = classNames;\n \t}\n }());\n });\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n\n var _freeGlobal = freeGlobal;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = _freeGlobal || freeSelf || Function('return this')();\n\n var _root = root;\n\n /** Built-in value references. */\n var Symbol$1 = _root.Symbol;\n\n var _Symbol = Symbol$1;\n\n /** Used for built-in method references. */\n var objectProto = Object.prototype;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Built-in value references. */\n var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n var _getRawTag = getRawTag;\n\n /** Used for built-in method references. */\n var objectProto$1 = Object.prototype;\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString$1 = objectProto$1.toString;\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString$1.call(value);\n }\n\n var _objectToString = objectToString;\n\n /** `Object#toString` result references. */\n var nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n /** Built-in value references. */\n var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined;\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag$1 && symToStringTag$1 in Object(value))\n ? _getRawTag(value)\n : _objectToString(value);\n }\n\n var _baseGetTag = baseGetTag;\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n var isObjectLike_1 = isObjectLike;\n\n /** `Object#toString` result references. */\n var numberTag = '[object Number]';\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike_1(value) && _baseGetTag(value) == numberTag);\n }\n\n var isNumber_1 = isNumber;\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber_1(value) && value != +value;\n }\n\n var _isNaN = isNaN;\n\n var fontfaceobserver_standalone = createCommonjsModule(function (module) {\n /* Font Face Observer v2.0.13 - © Bram Stein. License: BSD-3-Clause */(function(){function l(a,b){document.addEventListener?a.addEventListener(\"scroll\",b,!1):a.attachEvent(\"scroll\",b);}function m(a){document.body?a():document.addEventListener?document.addEventListener(\"DOMContentLoaded\",function c(){document.removeEventListener(\"DOMContentLoaded\",c);a();}):document.attachEvent(\"onreadystatechange\",function k(){if(\"interactive\"==document.readyState||\"complete\"==document.readyState)document.detachEvent(\"onreadystatechange\",k),a();});}function r(a){this.a=document.createElement(\"div\");this.a.setAttribute(\"aria-hidden\",\"true\");this.a.appendChild(document.createTextNode(a));this.b=document.createElement(\"span\");this.c=document.createElement(\"span\");this.h=document.createElement(\"span\");this.f=document.createElement(\"span\");this.g=-1;this.b.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.c.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";\n this.f.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.h.style.cssText=\"display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;\";this.b.appendChild(this.h);this.c.appendChild(this.f);this.a.appendChild(this.b);this.a.appendChild(this.c);}\n function t(a,b){a.a.style.cssText=\"max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:\"+b+\";\";}function y(a){var b=a.a.offsetWidth,c=b+100;a.f.style.width=c+\"px\";a.c.scrollLeft=c;a.b.scrollLeft=a.b.scrollWidth+100;return a.g!==b?(a.g=b,!0):!1}function z(a,b){function c(){var a=k;y(a)&&a.a.parentNode&&b(a.g);}var k=a;l(a.b,c);l(a.c,c);y(a);}function A(a,b){var c=b||{};this.family=a;this.style=c.style||\"normal\";this.weight=c.weight||\"normal\";this.stretch=c.stretch||\"normal\";}var B=null,C=null,E=null,F=null;function G(){if(null===C)if(J()&&/Apple/.test(window.navigator.vendor)){var a=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))(?:\\.([0-9]+))/.exec(window.navigator.userAgent);C=!!a&&603>parseInt(a[1],10);}else C=!1;return C}function J(){null===F&&(F=!!document.fonts);return F}\n function K(){if(null===E){var a=document.createElement(\"div\");try{a.style.font=\"condensed 100px sans-serif\";}catch(b){}E=\"\"!==a.style.font;}return E}function L(a,b){return [a.style,a.weight,K()?a.stretch:\"\",\"100px\",b].join(\" \")}\n A.prototype.load=function(a,b){var c=this,k=a||\"BESbswy\",q=0,D=b||3E3,H=(new Date).getTime();return new Promise(function(a,b){if(J()&&!G()){var M=new Promise(function(a,b){function e(){(new Date).getTime()-H>=D?b():document.fonts.load(L(c,'\"'+c.family+'\"'),k).then(function(c){1<=c.length?a():setTimeout(e,25);},function(){b();});}e();}),N=new Promise(function(a,c){q=setTimeout(c,D);});Promise.race([N,M]).then(function(){clearTimeout(q);a(c);},function(){b(c);});}else m(function(){function u(){var b;if(b=-1!=\n f&&-1!=g||-1!=f&&-1!=h||-1!=g&&-1!=h)(b=f!=g&&f!=h&&g!=h)||(null===B&&(b=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))/.exec(window.navigator.userAgent),B=!!b&&(536>parseInt(b[1],10)||536===parseInt(b[1],10)&&11>=parseInt(b[2],10))),b=B&&(f==v&&g==v&&h==v||f==w&&g==w&&h==w||f==x&&g==x&&h==x)),b=!b;b&&(d.parentNode&&d.parentNode.removeChild(d),clearTimeout(q),a(c));}function I(){if((new Date).getTime()-H>=D)d.parentNode&&d.parentNode.removeChild(d),b(c);else{var a=document.hidden;if(!0===a||void 0===a)f=e.a.offsetWidth,\n g=n.a.offsetWidth,h=p.a.offsetWidth,u();q=setTimeout(I,50);}}var e=new r(k),n=new r(k),p=new r(k),f=-1,g=-1,h=-1,v=-1,w=-1,x=-1,d=document.createElement(\"div\");d.dir=\"ltr\";t(e,L(c,\"sans-serif\"));t(n,L(c,\"serif\"));t(p,L(c,\"monospace\"));d.appendChild(e.a);d.appendChild(n.a);d.appendChild(p.a);document.body.appendChild(d);v=e.a.offsetWidth;w=n.a.offsetWidth;x=p.a.offsetWidth;I();z(e,function(a){f=a;u();});t(e,L(c,'\"'+c.family+'\",sans-serif'));z(n,function(a){g=a;u();});t(n,L(c,'\"'+c.family+'\",serif'));\n z(p,function(a){h=a;u();});t(p,L(c,'\"'+c.family+'\",monospace'));});})};module.exports=A;}());\n });\n\n /*\n * This has a few utilities we need for the amount field.\n * If only the web supported what we need :-(\n */\n\n var removeChild = function () {\n var _document$body;\n\n return document && document.body && document.body.removeChild && (_document$body = document.body).removeChild.apply(_document$body, arguments);\n };\n\n var appendChild = function () {\n var _document$body2;\n\n return document && document.body && document.body.appendChild && (_document$body2 = document.body).appendChild.apply(_document$body2, arguments);\n };\n /**\n * A wrapper around the FontFaceObserver API because the FontFaceObserver is confusing and looks like it's going to do\n * the font loading based on the `load` function name, but it's just checking whether the font has loaded...\n * @param fontFamily - the font family to ensure is loaded\n * @param options - the options object passed to the FontFaceObserver constructor\n * @return a promise that resolves if the font loaded successfully, or rejects if it does not (default timeout is 3\n * seconds)\n */\n\n\n function isFontLoaded(fontFamily) {\n return new fontfaceobserver_standalone(fontFamily).load().catch(function (err) {\n // eslint-disable-next-line no-console\n console.warn(\"Could not load the font \\\"\".concat(fontFamily, \"\\\"\"));\n throw err;\n });\n }\n /**\n * Takes the entered value in the amount field\n * @param string - value entered in the amount field\n * @returns number - removes any non digits character and only returns numeric entry.\n * \\s is for removing spaces which is part of currency format for certain countries (Norwegian Krone etc.)\n */\n\n\n function replaceNonDigits(value) {\n return value && value.replace(/[\\.,٫\\s]/g, '') || '';\n }\n /**\n * Use to format user input. Combines getCurrencyPrecision, replaceNonDigits, calcNewValue, and formatInput because that's\n * used several places.\n * 'USD', '.', '1' -> '0.01'\n * 'JPY', '.', '53' -> '53'\n * 'CAD', ',', '5323' -> '53,23'\n * @param currencyCode the currency code (to get the precision)\n * @param currencyDecimal the decimal separator\n * @param userInput the user input number to format\n * @return the formatted input\n */\n\n\n function formatUserCentsInput(currencyCode, currencyDecimal, userInput) {\n var currencyPrecision = getCurrencyPrecision(currencyCode);\n var digitsOnlyValue = replaceNonDigits(userInput);\n var zeroPaddedValue = calcNewValue(currencyPrecision, digitsOnlyValue);\n return formatInput(currencyPrecision, currencyDecimal, zeroPaddedValue);\n }\n /**\n * This function helps catch currencies with different float rules.\n * Generally we display 2 ints past the decimal (i.e $1.25).\n * @param currencyCode - The new currency currencyCode\n * @returns currencyPrecision\n */\n\n\n function getCurrencyPrecision(currencyCode) {\n return {\n JPY: true,\n TWD: true,\n HUF: true\n }[currencyCode] ? 0 : 2;\n }\n /**\n * Calculates the amount entered.\n * ex: user enters 1, value will return 0001\n * strips off leading zeroes (returning 1)\n * calculates the total number of zeroes required to be prepended\n * returns 001\n * @param currencyPrecision - returns number of digits and decimal separator i.e. 2 for USD, 0 for JPY\n * @param value - returns the entered value\n * @returns {*}\n */\n\n\n function calcNewValue(currencyPrecision, value) {\n var stringValue = value; // strips off leading zeroes\n\n stringValue = stringValue.replace(/^0+/, ''); // calculates number of zeroes required to be prepended based on value length\n\n stringValue = prependWithZeroes(currencyPrecision, stringValue);\n return stringValue;\n }\n /**\n * Formats the input given the raw string value.\n * ex: raw string value returns 001 -> formats to 0.01\n * 012 -> formats to 0.12\n * 123 -> formats to 1.23\n * 1234 -> formats to 1234\n * @param currencyPrecision - number of digits after decimal separator i.e. 2 for USD, 0 for JPY\n * @param currencyDecimal - decimal separator string i.e. '.' for USD, ',' for EURO\n * @param stringVal - unformatted string value entered\n * @returns formattedValue (12.34)\n */\n\n\n function formatInput(currencyPrecision, currencyDecimal, stringVal) {\n var formattedValue;\n var sliceDigitsBeforeCurrencyDecimal = '';\n var sliceDigitsAfterCurrencyDecimal = '';\n\n if (currencyPrecision > 0) {\n sliceDigitsBeforeCurrencyDecimal = stringVal.slice(0, stringVal.length - 2);\n sliceDigitsAfterCurrencyDecimal = stringVal.slice(stringVal.length - 2);\n formattedValue = \"\".concat(sliceDigitsBeforeCurrencyDecimal).concat(currencyDecimal).concat(sliceDigitsAfterCurrencyDecimal);\n } else {\n formattedValue = parseInt(stringVal, 10).toString();\n }\n\n return formattedValue;\n }\n /**\n * Prepends the input digit amount with zeroes (\"1\" => \"001\")\n * @param {number} currencyPrecision - returns number of digits and decimal separator i.e. 2 for USD, 0 for JPY\n * @param {string} amount entered value i.e 12\n * @returns {string} formatted value with total number of zeroes prepended\n */\n\n\n function prependWithZeroes(currencyPrecision, amount) {\n var numOfZeroesToAdd = Math.max(0, currencyPrecision + 1 - amount.length);\n return '0'.repeat(numOfZeroesToAdd) + amount;\n }\n\n /**\n * updates Font Size on mapping digits entered length\n * @param value - formatted entered input\n * @param currencySymbol - the currency Symbol i.e. '$' for USD\n * @returns {*|number}\n */\n function updateFontSize(_ref) {\n var value = _ref.value,\n currencySymbol = _ref.currencySymbol,\n fontSizeMapping = _ref.fontSizeMapping,\n defaultFontSize = _ref.defaultFontSize;\n\n if (!fontSizeMapping) {\n return defaultFontSize || null;\n }\n\n var digitCount = value.replace(/[.,]/g, '').length;\n var currencyCharCount = currencySymbol.length;\n var digitMapping = fontSizeMapping[String(currencyCharCount)] || {};\n return digitMapping[String(digitCount)] || defaultFontSize || null;\n }\n /**\n * Computes the required width size for amount field expansion\n */\n\n\n function measureTextSizeWithStyle(_ref2) {\n var fontSize = _ref2.fontSize,\n hostElement = _ref2.hostElement,\n text = _ref2.text;\n // get the computed styles from the element and grab the font-family and font-weight\n // for accurate measurements, with sensible defaults\n var hostElementStyles = hostElement ? window.getComputedStyle(hostElement, null) : {}; // handle `null` as well as `undefined`\n\n var spanElem = document.createElement('span');\n var _hostElementStyles$fo = hostElementStyles.fontWeight,\n fontWeight = _hostElementStyles$fo === void 0 ? '300' : _hostElementStyles$fo,\n fontFamily = hostElementStyles.fontFamily,\n paddingLeft = hostElementStyles.paddingLeft,\n paddingRight = hostElementStyles.paddingRight,\n borderWidth = hostElementStyles.borderWidth;\n fontSize = fontSize || hostElementStyles.fontSize;\n spanElem.style.fontSize = typeof fontSize === 'number' ? \"\".concat(fontSize, \"px\") : fontSize;\n spanElem.style.fontFamily = fontFamily;\n spanElem.style.fontWeight = fontWeight;\n spanElem.style.position = 'fixed';\n spanElem.style.top = '-1000px';\n spanElem.style.left = '-1000px';\n spanElem.innerHTML = text;\n appendChild(spanElem);\n var width = spanElem.clientWidth;\n removeChild(spanElem);\n return (width || 0) + cssMeasurementToNumber(paddingLeft) + cssMeasurementToNumber(paddingRight) + cssMeasurementToNumber(borderWidth) * 2;\n }\n\n function cssMeasurementToNumber() {\n var measurement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '0px';\n return Number(measurement.replace(/\\D/g, ''));\n }\n /**\n * This moves the cursor position to the end of the text in the input node in a way\n * that works on iOS\n * @param {HTMLInputElement} node - the input to set the cursor position in\n */\n\n\n function moveCursorToTheEnd(node) {\n var length = node.value.length;\n node.setSelectionRange(length, length);\n }\n\n /**\n * This is intended to be used to call all given event handlers.\n * They are executed in order until one of them sets\n * `event.preventPPAmountFieldDefault = true`.\n * @param {Function} fns the event handler functions\n * @return {Function} the event handler to add to an element\n */\n function callAllEventHandlers() {\n for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n return function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return fns.some(function (fn) {\n if (fn) {\n fn.apply(void 0, [event].concat(args));\n }\n\n return event.preventPPAmountFieldDefault;\n });\n };\n }\n /**\n * Function that returns a function which calls all given functions\n * with the given arguments arguments\n */\n\n\n function callAll() {\n for (var _len3 = arguments.length, fns = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n fns[_key3] = arguments[_key3];\n }\n\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return fns.filter(Boolean).forEach(function (fn) {\n if (fn) {\n fn.apply(void 0, args);\n }\n });\n };\n }\n /* eslint flowtype/no-weak-types:0 */\n\n var MAX_AMOUNT_LENGTH = 10;\n\n var SingleAmountField =\n /*#__PURE__*/\n function (_Component) {\n _inherits(SingleAmountField, _Component);\n\n function SingleAmountField() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, SingleAmountField);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(SingleAmountField)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"_isMounted\", false);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"_input\", null);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"_select\", null);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"amountWidth\", -1);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"amountFontSize\", -1);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"currencyCodeWidth\", -1);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"formattedValue\", void 0);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleSelectChange\", function (_ref) {\n var currencyCode = _ref.target.value;\n return _this.handleChange({\n currencyCode: currencyCode\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleInputChange\", function (_ref2) {\n var _ref2$target = _ref2.target;\n _ref2$target = _ref2$target === void 0 ? {} : _ref2$target;\n var _ref2$target$value = _ref2$target.value,\n value = _ref2$target$value === void 0 ? '' : _ref2$target$value;\n return _this.handleChange({\n value: value\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"moveCursor\", function () {\n _this._input && moveCursorToTheEnd(_this._input);\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getInputProps\", function () {\n var _objectSpread2;\n\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var _props$refKey = props.refKey,\n refKey = _props$refKey === void 0 ? 'ref' : _props$refKey,\n ref = props.ref,\n style = props.style,\n onChange = props.onChange,\n onFocus = props.onFocus,\n onClick = props.onClick,\n rest = _objectWithoutProperties(props, [\"refKey\", \"ref\", \"style\", \"onChange\", \"onFocus\", \"onClick\"]);\n\n var inputStyles = {\n width: _this.amountWidth,\n fontSize: _this.amountFontSize\n };\n return _objectSpread({\n value: _this.formattedValue,\n dir: 'ltr',\n autoComplete: 'off',\n type: 'tel',\n autoFocus: !rest.readOnly\n }, rest, (_objectSpread2 = {\n style: _objectSpread({}, inputStyles, style)\n }, _defineProperty(_objectSpread2, refKey, callAll(ref, _this.inputRef)), _defineProperty(_objectSpread2, \"onChange\", callAllEventHandlers(onChange, _this.handleInputChange)), _defineProperty(_objectSpread2, \"onFocus\", callAllEventHandlers(onFocus, _this.moveCursor)), _defineProperty(_objectSpread2, \"onClick\", callAllEventHandlers(onClick, _this.moveCursor)), _objectSpread2));\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"inputRef\", function (el) {\n return _this._input = el;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getSelectProps\", function () {\n var _objectSpread3;\n\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var ref = props.ref,\n _props$refKey2 = props.refKey,\n refKey = _props$refKey2 === void 0 ? 'ref' : _props$refKey2,\n onChange = props.onChange,\n style = props.style,\n rest = _objectWithoutProperties(props, [\"ref\", \"refKey\", \"onChange\", \"style\"]);\n\n return _objectSpread({\n value: _this.props.currencyCode\n }, rest, (_objectSpread3 = {}, _defineProperty(_objectSpread3, refKey, callAll(ref, _this.selectRef)), _defineProperty(_objectSpread3, \"onChange\", callAllEventHandlers(onChange, _this.handleSelectChange)), _defineProperty(_objectSpread3, \"style\", _objectSpread({}, style, {\n width: _this.currencyCodeWidth\n })), _objectSpread3));\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"selectRef\", function (el) {\n return _this._select = el;\n });\n\n return _this;\n }\n\n _createClass(SingleAmountField, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n this._isMounted = true;\n isFontLoaded(window.getComputedStyle(this._input)['font-family'].split(',')[0].trim()).then(function () {\n // it could have unmounted before this is resolved\n if (_this2._isMounted) {\n // once the font has been confirmed to be loaded, we need to recalculate the width of the input.\n // but we do it in a setTimeout because otherwise sometimes the width calculation was off by 2px.\n // And I have no idea why...\n setTimeout(function () {\n _this2.forceUpdate();\n\n _this2.moveCursor();\n\n _this2.props.onFontLoaded && _this2.props.onFontLoaded();\n }, 50);\n }\n }).catch(function () {// do absolutely nothing\n });\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this._isMounted = false;\n }\n /**\n * This handles the value and currency change. Because a change in currency can cause a change in the value (due to\n * differences in precision), this will be called when the value or the currency is changed.\n *\n * We first strip out all non-digits then validate that the result is a real number. If it's not, then we don't do\n * anything (and the input value is not updated). If the result is equal to 0, then we'll call onAmountChange with an\n * empty string. Otherwise, we'll format it and if it's not the same as it was before, we'll call onAmountChange with\n * that.\n * @param {Object} changes holds the new value and the currencyCode\n */\n\n }, {\n key: \"handleChange\",\n value: function handleChange(_ref3) {\n var _ref3$value = _ref3.value,\n value = _ref3$value === void 0 ? this.props.value : _ref3$value,\n _ref3$currencyCode = _ref3.currencyCode,\n currencyCode = _ref3$currencyCode === void 0 ? this.props.currencyCode : _ref3$currencyCode;\n var cleanValue = replaceNonDigits(value); // convert value to number to remove leading zeros\n\n var numberValue = Number(cleanValue);\n\n if (_isNaN(numberValue) || cleanValue.length >= MAX_AMOUNT_LENGTH) {\n this.props.onInvalidInput();\n return;\n } else if (numberValue === 0) {\n this.props.onChange('', currencyCode);\n return;\n }\n\n var formattedValue = formatUserCentsInput(currencyCode, this.props.currencyDecimal, numberValue.toString());\n\n if (formattedValue !== this.props.value || currencyCode !== this.props.currencyCode) {\n this.props.onChange(formattedValue, currencyCode);\n }\n }\n }, {\n key: \"getStateAndHelpers\",\n value: function getStateAndHelpers() {\n return {\n amountWidth: this.amountWidth,\n currencyCodeWidth: this.currencyCodeWidth,\n amountFontSize: this.amountFontSize,\n getInputProps: this.getInputProps,\n getSelectProps: this.getSelectProps\n };\n }\n }, {\n key: \"makeCalculations\",\n value: function makeCalculations() {\n var _this$props = this.props,\n value = _this$props.value,\n currencyCode = _this$props.currencyCode,\n currencySymbolMap = _this$props.currencySymbolMap,\n fontSizeMapping = _this$props.fontSizeMapping,\n defaultFontSize = _this$props.defaultFontSize;\n var currencySymbol = currencySymbolMap[currencyCode];\n this.formattedValue = this.props.getFormattedValue(value || '0');\n this.amountFontSize = updateFontSize({\n value: this.formattedValue,\n currencySymbol: currencySymbol,\n fontSizeMapping: fontSizeMapping,\n defaultFontSize: defaultFontSize\n });\n this.amountWidth = measureTextSizeWithStyle({\n fontSize: this.amountFontSize,\n hostElement: this._input,\n text: this.formattedValue\n }) + 2; // sadly, firefox and IE both insert a few pixels to the left (or right in\n // the rtl case) of select inputs. This behavior is totally unobservable\n // (so it cannot be part of the width calculation).\n // So we'll add a few pixels to the width in IE and firefox to account\n // for this (as select is the main use case for this anyway).\n\n var ua = navigator.userAgent.toLowerCase();\n var isFirefox = ua.includes('firefox');\n var isIE11 = ua.includes('Trident/7') || !!window.MSInputMethodContext && !!document.documentMode;\n var isIE = ua.includes('msie') || isIE11;\n var extraSpaceToAccountForWeirdBrowserIssues = isFirefox || isIE ? 6 : 0;\n this.currencyCodeWidth = measureTextSizeWithStyle({\n fontSize: null,\n hostElement: this._select,\n text: currencyCode\n }) + extraSpaceToAccountForWeirdBrowserIssues;\n }\n }, {\n key: \"render\",\n value: function render() {\n this.makeCalculations();\n return this.props.children(this.getStateAndHelpers());\n }\n }]);\n\n return SingleAmountField;\n }(React.Component);\n /* eslint no-unused-expressions:0 */\n\n var _jsxFileName = \"/Users/kdodds/code/paypal/pp-amount-field/src/basic/index.js\";\n\n var BasicAmountField =\n /*#__PURE__*/\n function (_React$Component) {\n _inherits(BasicAmountField, _React$Component);\n\n function BasicAmountField() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, BasicAmountField);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(BasicAmountField)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"renderTimeoutId\", void 0);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n showInvalid: false,\n hideCursor: false,\n visible: false\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseDown\", function () {\n return _this.setState({\n hideCursor: true\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseUp\", function () {\n return _this.setState({\n hideCursor: false\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"showInvalid\", function () {\n _this.setState({\n showInvalid: true\n }, function () {\n setTimeout(function () {\n _this.setState({\n showInvalid: false\n });\n }, 300);\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleFontLoaded\", function () {\n // we wait for the font to load and widths to be calculated before showing the input\n // otherwise we run into a flash of unstyled content on refresh.\n // In componentDidMount we have a timeout to ensure that we don't wait any longer than 500ms\n clearTimeout(_this.renderTimeoutId);\n\n _this.setState({\n visible: true\n });\n });\n\n return _this;\n }\n\n _createClass(BasicAmountField, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n // this ensures that we don't wait any longer than a half a second to display the input\n this.renderTimeoutId = setTimeout(function () {\n _this2.setState({\n visible: true\n });\n }, 500);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n if (this.props.showInvalid) {\n this.showInvalid();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this3 = this;\n\n var _this$props = this.props,\n _this$props$showConde = _this$props.showCondensedUI,\n showCondensedUI = _this$props$showConde === void 0 ? false : _this$props$showConde,\n _this$props$renderAft = _this$props.renderAfterInput,\n renderAfterInput = _this$props$renderAft === void 0 ? function () {\n return null;\n } : _this$props$renderAft,\n _this$props$arrowProp = _this$props.arrowProps,\n arrowProps = _this$props$arrowProp === void 0 ? {} : _this$props$arrowProp,\n _this$props$className = _this$props.className,\n className = _this$props$className === void 0 ? '' : _this$props$className,\n _this$props$inputProp = _this$props.inputProps,\n inputProps = _this$props$inputProp === void 0 ? {} : _this$props$inputProp,\n _this$props$selectPro = _this$props.selectProps,\n selectProps = _this$props$selectPro === void 0 ? {} : _this$props$selectPro,\n fontFamily = _this$props.fontFamily,\n forwardToAmountField = _objectWithoutProperties(_this$props, [\"showCondensedUI\", \"renderAfterInput\", \"arrowProps\", \"className\", \"inputProps\", \"selectProps\", \"fontFamily\"]);\n\n var _this$state = this.state,\n showInvalid = _this$state.showInvalid,\n visible = _this$state.visible,\n hideCursor = _this$state.hideCursor; // stuff we forward on, but also want to reference in this function\n\n var currencySymbolMap = forwardToAmountField.currencySymbolMap,\n currencyCode = forwardToAmountField.currencyCode;\n var currencyCodeList = [];\n\n if (this.props.currencyCodeList && this.props.currencyCodeList.length) {\n currencyCodeList = this.props.currencyCodeList;\n } else {\n currencyCodeList = Object.keys(currencySymbolMap);\n }\n\n return React__default.createElement(SingleAmountField, _extends({}, forwardToAmountField, {\n onFontLoaded: this.handleFontLoaded,\n onInvalidInput: callAll(this.props.onInvalidInput, this.showInvalid),\n __source: {\n fileName: _jsxFileName,\n lineNumber: 103\n },\n __self: this\n }), function (_ref) {\n var currencyCodeWidth = _ref.currencyCodeWidth,\n getSelectProps = _ref.getSelectProps,\n getInputProps = _ref.getInputProps;\n var currencySymbol = currencySymbolMap[currencyCode];\n var inputWrapperClasses = classnames('ppaf-input-wrapper', {\n 'ppaf-shake': showInvalid\n });\n var currencySymbolClassNames = classnames('ppaf-currency-symbol', showInvalid && 'ppaf-is-invalid');\n var inputClassNames = classnames('ppaf-input', hideCursor && 'ppaf-with-hidden-cursor', inputProps.readOnly && 'ppaf-read-only', // overrides cursor to default\n showInvalid && 'ppaf-is-invalid');\n var dropdownWrapperClassNames = classnames('ppaf-select-wrapper', showCondensedUI && 'ppaf-condensed', selectProps.disabled && 'ppaf-read-only' // overrides color to input default (black)\n );\n var dropdownClassNames = classnames('ppaf-select', selectProps.disabled && 'ppaf-read-only' // overrides cursor to default\n );\n return React__default.createElement(\"div\", {\n className: \"pp-amount-field \".concat(className || ''),\n style: {\n visibility: visible ? 'visible' : 'hidden'\n },\n __source: {\n fileName: _jsxFileName,\n lineNumber: 139\n },\n __self: this\n }, React__default.createElement(\"div\", {\n className: inputWrapperClasses,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 143\n },\n __self: this\n }, React__default.createElement(\"div\", {\n className: currencySymbolClassNames,\n style: {\n color: inputProps.style ? inputProps.style.color : null,\n fontFamily: fontFamily\n },\n __source: {\n fileName: _jsxFileName,\n lineNumber: 144\n },\n __self: this\n }, currencySymbol), React__default.createElement(\"input\", _extends({}, getInputProps(_objectSpread({\n name: 'amount',\n required: true,\n className: inputClassNames\n }, inputProps, {\n style: _objectSpread({\n fontFamily: fontFamily\n }, inputProps.style),\n onMouseDown: callAllEventHandlers(inputProps.onMouseDown, _this3.handleMouseDown),\n onMouseUp: callAllEventHandlers(inputProps.onMouseUp, _this3.handleMouseUp)\n })), {\n __source: {\n fileName: _jsxFileName,\n lineNumber: 153\n },\n __self: this\n })), renderAfterInput(_this3.props)), currencyCodeList.length ? React__default.createElement(\"div\", {\n className: dropdownWrapperClassNames,\n style: {\n width: currencyCodeWidth,\n color: selectProps.style ? selectProps.style.color : null\n },\n __source: {\n fileName: _jsxFileName,\n lineNumber: 176\n },\n __self: this\n }, React__default.createElement(\"select\", _extends({}, getSelectProps(_objectSpread({\n name: 'currencies',\n className: dropdownClassNames\n }, selectProps, {\n style: _objectSpread({\n fontFamily: fontFamily\n }, selectProps.style)\n })), {\n __source: {\n fileName: _jsxFileName,\n lineNumber: 183\n },\n __self: this\n }), currencyCodeList.map(function (code) {\n return React__default.createElement(\"option\", {\n key: code,\n value: code,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 195\n },\n __self: this\n }, code);\n })), !selectProps.disabled && React__default.createElement(ArrowIcon, _extends({}, arrowProps, {\n style: _objectSpread({\n left: (currencyCodeWidth || 0) - 20\n }, arrowProps.style),\n __source: {\n fileName: _jsxFileName,\n lineNumber: 202\n },\n __self: this\n }))) : null);\n });\n }\n }]);\n\n return BasicAmountField;\n }(React__default.Component);\n\n function ArrowIcon(props) {\n return React__default.createElement(\"svg\", _extends({\n className: \"ppaf-select-arrow\",\n viewBox: \"0 0 20 20\",\n preserveAspectRatio: \"none\",\n width: 14,\n height: 16,\n fill: \"transparent\",\n stroke: \"currentColor\",\n strokeWidth: \"2px\"\n }, props, {\n style: _objectSpread({\n paddingBottom: 2\n }, props.style),\n __source: {\n fileName: _jsxFileName,\n lineNumber: 222\n },\n __self: this\n }), React__default.createElement(\"path\", {\n d: \"M1,6 L10,15 L19,6\",\n __source: {\n fileName: _jsxFileName,\n lineNumber: 234\n },\n __self: this\n }));\n }\n\n var _jsxFileName$1 = \"/Users/kdodds/code/paypal/pp-amount-field/src/basic/amount-field-with-css.js\";\n\n var AmountFieldWithCSS =\n /*#__PURE__*/\n function (_React$Component) {\n _inherits(AmountFieldWithCSS, _React$Component);\n\n function AmountFieldWithCSS() {\n _classCallCheck(this, AmountFieldWithCSS);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(AmountFieldWithCSS).apply(this, arguments));\n }\n\n _createClass(AmountFieldWithCSS, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props = this.props,\n version = _this$props.version,\n stylesString = _this$props.stylesString;\n var stylesId = \"amount-field-basic-v\".concat(version);\n\n if (document.head && !document.head.querySelector(\"#\".concat(stylesId))) {\n var styles = document.createElement('style');\n styles.id = stylesId;\n styles.append(stylesString);\n document.head && document.head.appendChild(styles);\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n return React__default.createElement(BasicAmountField, _extends({\n className: \"basic-v\".concat(this.props.version)\n }, this.props, {\n __source: {\n fileName: _jsxFileName$1,\n lineNumber: 31\n },\n __self: this\n }));\n }\n }]);\n\n return AmountFieldWithCSS;\n }(React__default.Component);\n /* eslint no-unused-expressions:0 */\n\n var _jsxFileName$2 = \"/Users/kdodds/code/paypal/pp-amount-field/src/basic/v2.js\";\n var stylesString = \".pp-amount-field .ppaf-input-wrapper{display:flex;justify-content:center}[dir=ltr] .pp-amount-field .ppaf-input-wrapper.ppaf-shake{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:ppaf-shake-ltr;animation-name:ppaf-shake-ltr}[dir=rtl] .pp-amount-field .ppaf-input-wrapper.ppaf-shake{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:ppaf-shake-rtl;animation-name:ppaf-shake-rtl}@-webkit-keyframes ppaf-shake-ltr{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes ppaf-shake-ltr{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@-webkit-keyframes ppaf-shake-rtl{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}}@keyframes ppaf-shake-rtl{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}}.pp-amount-field .ppaf-currency-symbol{color:#2c2e2f;font-weight:300;font-family:PayPal-Sans-Big,sans-serif;display:inline-block;vertical-align:top}[dir=ltr] .pp-amount-field .ppaf-currency-symbol{text-align:right}[dir=rtl] .pp-amount-field .ppaf-currency-symbol{text-align:left}.pp-amount-field .ppaf-input{color:#2c2e2f;text-overflow:clip;outline:0;letter-spacing:normal;line-height:1.4;font-weight:300;text-transform:none;font-family:PayPal-Sans-Big,sans-serif}[dir] .pp-amount-field .ppaf-input{background:0 0;border:none;text-align:center;padding:0;margin:0;cursor:pointer}.pp-amount-field .ppaf-input.ppaf-with-hidden-cursor{color:transparent}[dir] .pp-amount-field .ppaf-input.ppaf-with-hidden-cursor{text-shadow:#2c2e2f 0 0 0}[dir] .pp-amount-field .ppaf-input.ppaf-read-only{cursor:default}.pp-amount-field .ppaf-select-wrapper{position:relative}[dir=ltr] .pp-amount-field .ppaf-select-wrapper{margin-left:auto;margin-right:auto}[dir=rtl] .pp-amount-field .ppaf-select-wrapper{margin-right:auto;margin-left:auto}[dir] .pp-amount-field .ppaf-select-wrapper.ppaf-condensed{margin-top:0;margin-bottom:0}.pp-amount-field .ppaf-select{font-size:20px;position:absolute;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding-top:4px;font-weight:700;padding-right:20px;padding-bottom:4px;padding-left:2px;background-color:transparent;color:inherit;top:0;left:-2px;z-index:2;cursor:pointer;font-family:PayPal-Sans-Big,sans-serif}.pp-amount-field .ppaf-select::-ms-expand{display:none}[dir] .pp-amount-field .ppaf-select.ppaf-read-only{cursor:default}.pp-amount-field .ppaf-select-arrow{position:absolute;z-index:1}.pp-amount-field .ppaf-first-time-user-tooltip-wrapper{line-height:77px}.pp-amount-field .ppaf-tooltip{font-size:24px;position:relative;color:#0070ba}[dir] .pp-amount-field .ppaf-tooltip{cursor:pointer}[dir=ltr] .pp-amount-field .ppaf-tooltip{margin-left:5px}[dir=rtl] .pp-amount-field .ppaf-tooltip{margin-right:5px}.pp-amount-field .ppaf-is-invalid{color:#d20000}\" + '\\n' + \"[dir] .pp-amount-field.basic-v2 .ppaf-currency-symbol{margin-top:12px}[dir=ltr] .pp-amount-field.basic-v2 .ppaf-currency-symbol{margin-right:6px}[dir=rtl] .pp-amount-field.basic-v2 .ppaf-currency-symbol{margin-left:6px}.pp-amount-field.basic-v2 .ppaf-select-wrapper{color:#0070ba;height:28px}[dir] .pp-amount-field.basic-v2 .ppaf-select-wrapper{margin-top:19px}.pp-amount-field.basic-v2 .ppaf-select{border:solid 1px;border-radius:18px;font-size:14px;padding-left:8px}.pp-amount-field.basic-v2 .ppaf-select-arrow{top:10px}\";\n var defaultFontSize = 42;\n var fontSizeMapping = {\n '0': {\n '8': 40\n },\n '1': {\n '7': 38,\n '8': 36,\n '9': 32,\n '10': 30\n },\n '2': {\n '7': 38,\n '8': 36,\n '9': 32,\n '10': 28\n },\n '3': {\n '6': 36,\n '7': 32,\n '8': 28,\n '9': 26,\n '10': 24\n },\n '4': {\n '6': 36,\n '7': 32,\n '8': 28,\n '9': 26,\n '10': 24\n }\n };\n\n function V1AmountField(props) {\n return React__default.createElement(AmountFieldWithCSS, _extends({\n version: \"2\",\n stylesString: stylesString,\n fontSizeMapping: fontSizeMapping,\n defaultFontSize: defaultFontSize,\n arrowProps: {\n height: 11,\n width: 10\n },\n fontFamily: \"'PayPal-Sans-Big', sans-serif\"\n }, props, {\n __source: {\n fileName: _jsxFileName$2,\n lineNumber: 25\n },\n __self: this\n }));\n }\n\n exports.default = V1AmountField;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=pp-amount-field.basic.v2.umd.js.map\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// require('hammerjs') when in a browser. This is safe because Hammer is only\n// invoked in componentDidMount, which is not executed on the server.\nvar Hammer = typeof window !== 'undefined' ? require('hammerjs') : undefined;\n\nvar privateProps = {\n\tchildren: true,\n\tdirection: true,\n\toptions: true,\n\trecognizeWith: true,\n\tvertical: true\n};\n\n/**\n * Hammer Component\n * ================\n */\n\nvar handlerToEvent = {\n\taction: 'tap press',\n\tonDoubleTap: 'doubletap',\n\tonPan: 'pan',\n\tonPanCancel: 'pancancel',\n\tonPanEnd: 'panend',\n\tonPanStart: 'panstart',\n\tonPinch: 'pinch',\n\tonPinchCancel: 'pinchcancel',\n\tonPinchEnd: 'pinchend',\n\tonPinchIn: 'pinchin',\n\tonPinchOut: 'pinchout',\n\tonPinchStart: 'pinchstart',\n\tonPress: 'press',\n\tonPressUp: 'pressup',\n\tonRotate: 'rotate',\n\tonRotateCancel: 'rotatecancel',\n\tonRotateEnd: 'rotateend',\n\tonRotateMove: 'rotatemove',\n\tonRotateStart: 'rotatestart',\n\tonSwipe: 'swipe',\n\tonSwipeRight: 'swiperight',\n\tonSwipeLeft: 'swipeleft',\n\tonSwipeUp: 'swipeup',\n\tonSwipeDown: 'swipedown',\n\tonTap: 'tap'\n};\n\nObject.keys(handlerToEvent).forEach(function (i) {\n\tprivateProps[i] = true;\n});\n\nfunction updateHammer(hammer, props) {\n\tif (props.hasOwnProperty('vertical')) {\n\t\tconsole.warn('vertical is deprecated, please use `direction` instead');\n\t}\n\n\tvar directionProp = props.direction;\n\tif (directionProp || props.hasOwnProperty('vertical')) {\n\t\tvar direction = directionProp ? directionProp : props.vertical ? 'DIRECTION_ALL' : 'DIRECTION_HORIZONTAL';\n\t\thammer.get('pan').set({ direction: Hammer[direction] });\n\t\thammer.get('swipe').set({ direction: Hammer[direction] });\n\t}\n\n\tif (props.options) {\n\t\tObject.keys(props.options).forEach(function (option) {\n\t\t\tif (option === 'recognizers') {\n\t\t\t\tObject.keys(props.options.recognizers).forEach(function (gesture) {\n\t\t\t\t\tvar recognizer = hammer.get(gesture);\n\t\t\t\t\trecognizer.set(props.options.recognizers[gesture]);\n\t\t\t\t\tif (props.options.recognizers[gesture].requireFailure) {\n\t\t\t\t\t\trecognizer.requireFailure(props.options.recognizers[gesture].requireFailure);\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\t\t\t} else {\n\t\t\t\tvar key = option;\n\t\t\t\tvar optionObj = {};\n\t\t\t\toptionObj[key] = props.options[option];\n\t\t\t\thammer.set(optionObj);\n\t\t\t}\n\t\t}, this);\n\t}\n\n\tif (props.recognizeWith) {\n\t\tObject.keys(props.recognizeWith).forEach(function (gesture) {\n\t\t\tvar recognizer = hammer.get(gesture);\n\t\t\trecognizer.recognizeWith(props.recognizeWith[gesture]);\n\t\t}, this);\n\t}\n\n\tObject.keys(props).forEach(function (p) {\n\t\tvar e = handlerToEvent[p];\n\t\tif (e) {\n\t\t\thammer.off(e);\n\t\t\thammer.on(e, props[p]);\n\t\t}\n\t});\n}\n\nvar HammerComponent = function (_React$Component) {\n\t_inherits(HammerComponent, _React$Component);\n\n\tfunction HammerComponent() {\n\t\t_classCallCheck(this, HammerComponent);\n\n\t\treturn _possibleConstructorReturn(this, (HammerComponent.__proto__ || Object.getPrototypeOf(HammerComponent)).apply(this, arguments));\n\t}\n\n\t_createClass(HammerComponent, [{\n\t\tkey: 'componentDidMount',\n\t\tvalue: function componentDidMount() {\n\t\t\tthis.hammer = new Hammer(this.domElement);\n\t\t\tupdateHammer(this.hammer, this.props);\n\t\t}\n\t}, {\n\t\tkey: 'componentDidUpdate',\n\t\tvalue: function componentDidUpdate() {\n\t\t\tif (this.hammer) {\n\t\t\t\tupdateHammer(this.hammer, this.props);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'componentWillUnmount',\n\t\tvalue: function componentWillUnmount() {\n\t\t\tif (this.hammer) {\n\t\t\t\tthis.hammer.stop();\n\t\t\t\tthis.hammer.destroy();\n\t\t\t}\n\t\t\tthis.hammer = null;\n\t\t}\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar props = {};\n\n\t\t\tObject.keys(this.props).forEach(function (i) {\n\t\t\t\tif (!privateProps[i]) {\n\t\t\t\t\tprops[i] = this.props[i];\n\t\t\t\t}\n\t\t\t}, this);\n\n\t\t\tvar self = this;\n\t\t\tprops.ref = function (domElement) {\n\t\t\t\tif (self.props.ref) {\n\t\t\t\t\tself.props.ref(domElement);\n\t\t\t\t}\n\t\t\t\tself.domElement = domElement;\n\t\t\t};\n\n\t\t\t// Reuse the child provided\n\t\t\t// This makes it flexible to use whatever element is wanted (div, ul, etc)\n\t\t\treturn React.cloneElement(React.Children.only(this.props.children), props);\n\t\t}\n\t}]);\n\n\treturn HammerComponent;\n}(React.Component);\n\nHammerComponent.displayName = 'Hammer';\nHammerComponent.propTypes = {\n\tclassName: PropTypes.string\n};\n\nexport default HammerComponent;\n"],"sourceRoot":""}