{"version":3,"sources":["webpack:///./src/utils/hooks/useForm.ts","webpack:///./src/components/SEO.tsx","webpack:///./src/assets/images/carousel-button-right.svg","webpack:////codebuild/output/src2627908950/src/creativehub301/node_modules/gatsby-image/index.js","webpack:////codebuild/output/src2627908950/src/creativehub301/node_modules/@egjs/component/dist/component.esm.js","webpack:///./src/components/homePage/MainBanner.tsx","webpack:///./src/components/homePage/Welcome.tsx","webpack:////codebuild/output/src2627908950/src/creativehub301/node_modules/@egjs/list-differ/dist/list-differ.esm.js","webpack:////codebuild/output/src2627908950/src/creativehub301/node_modules/@egjs/children-differ/dist/children-differ.esm.js","webpack:////codebuild/output/src2627908950/src/creativehub301/node_modules/@egjs/react-flicking/dist/flicking.esm.js","webpack:///./src/components/homePage/Features.tsx","webpack:///./src/components/homePage/SubscribeNewsletter.tsx","webpack:///./src/components/TitleAndDescription.tsx","webpack:///./src/components/Pagination.tsx","webpack:////codebuild/output/src2627908950/src/creativehub301/node_modules/react-helmet/node_modules/react-fast-compare/index.js","webpack:///./src/components/Forms.tsx","webpack:///./src/assets/images/carousel-button-left.svg","webpack:////codebuild/output/src2627908950/src/creativehub301/node_modules/react-helmet/es/Helmet.js","webpack:////codebuild/output/src2627908950/src/creativehub301/node_modules/@egjs/hammerjs/dist/hammer.esm.js","webpack:////codebuild/output/src2627908950/src/creativehub301/node_modules/@egjs/agent/dist/agent.esm.js","webpack:////codebuild/output/src2627908950/src/creativehub301/node_modules/@egjs/axes/dist/axes.esm.js","webpack:///./src/assets/images/301-blog.png","webpack:///./src/styles/Grids.ts","webpack:///(webpack)/buildin/global.js","webpack:///./src/assets/images/our-story.png","webpack:///./src/components/homePage/ContactUs.tsx","webpack:////codebuild/output/src2627908950/src/creativehub301/node_modules/react-side-effect/lib/index.js","webpack:///./src/assets/images/creatives.png"],"names":["useForm","defaults","useState","values","setValues","updateValue","e","value","target","type","parseInt","name","SEO","children","location","description","title","image","site","useStaticQuery","titleTemplate","siteMetadata","lang","rel","href","content","charSet","property","key","module","exports","_interopRequireDefault","require","__esModule","default","io","_assertThisInitialized2","_inheritsLoose2","_objectWithoutPropertiesLoose2","_extends2","_react","_propTypes","convertProps","props","convertedProps","resolutions","sizes","critical","fixed","fluid","loading","groupByMedia","concat","matchesMedia","_ref","media","isBrowser","window","matchMedia","matches","getImageCacheKey","_ref2","srcData","getCurrentSrcData","src","currentData","Array","isArray","some","hasArtDirectionSupport","foundMedia","findIndex","noMedia","imageCache","Object","create","inImageCache","cacheKey","hasNativeLazyLoadSupport","HTMLImageElement","prototype","hasIOSupport","IntersectionObserver","listeners","WeakMap","generateImageSources","imageVariants","map","_ref3","srcSet","srcSetWebp","createElement","Fragment","withMedia","without","forEach","variant","push","generateTracedSVGSources","_ref4","tracedSVG","generateBase64Sources","_ref5","base64","generateNoscriptSource","_ref6","isWebp","listenToIntersections","el","cb","observer","entries","entry","has","get","isIntersecting","intersectionRatio","unobserve","delete","rootMargin","observe","set","noscriptImg","alt","width","height","crossOrigin","draggable","join","Placeholder","forwardRef","ref","generateSources","spreadProps","ariaHidden","baseImage","Img","length","style","onLoad","onError","otherProps","position","top","left","objectFit","objectPosition","propTypes","object","func","Image","_React$Component","_this","call","this","seenBefore","isCritical","addNoScript","fadeIn","useIOSupport","isVisible","state","imgLoaded","imgCached","isHydrated","imageRef","createRef","placeholderRef","handleImageLoaded","bind","handleRef","_proto","componentDidMount","setState","onStartLoad","wasCached","img","current","complete","componentWillUnmount","cleanUpListeners","_this2","imageInCache","currentSrc","render","_convertProps","className","_convertProps$style","_convertProps$imgStyl","imgStyle","_convertProps$placeho","placeholderStyle","placeholderClassName","backgroundColor","durationFadeIn","Tag","itemProp","shouldReveal","shouldFadeIn","imageStyle","opacity","transition","bgColor","delayHideStyle","transitionDelay","imagePlaceholderStyle","placeholderImageProps","overflow","maxWidth","maxHeight","JSON","stringify","paddingBottom","aspectRatio","bottom","right","dangerouslySetInnerHTML","__html","divStyle","display","Component","defaultProps","fixedObject","shape","number","isRequired","string","srcWebp","fluidObject","requireFixedOrFluid","originalPropTypes","propName","componentName","_PropTypes$checkPropT","Error","checkPropTypes","oneOfType","arrayOf","bool","oneOf","_default","isUndefined","_eventHandler","options","trigger","eventName","customEvent","handlerList","hasHandlerList","eventType","isCanceled","arg","i","stop","currentTarget","_len","arguments","restParam","_key","apply","once","handlerToAttach","eventHash","self","on","listener","_len2","_key2","off","hasOn","handlerToDetach","undefined","k","handlerFunction","splice","VERSION","MainBannerContainer","styled","motion","div","Button","Link","variants","visible","duration","MainBanner","query","animate","homeData","mainBannerImage","asset","to","FlexContainer","Welcome","blog301Image","text","creatives","ourStory","center","SquareImageLink","SquareImageButton","PolyMap","keys","__proto","indexOf","prevIndex","index","HashMap","SUPPORT_MAP","Map","connect","prevLink","nextLink","prev","next","disconnect","getIndex","link","Result","prevList","list","added","removed","changed","maintained","changedBeforeAdded","defineProperty","cacheOrdered","caculateOrdered","enumerable","configurable","cachePureChanged","ordered","fromLinks","toLinks","_a","from","filter","_","fromLink","toLink","fromIndex","orderChanged","pureChanged","_b","fromBefore","toBefore","diff","findKeyCallback","mapClass","callback","prevKeys","prevKeyMap","keyMap","removedMap","addedCount","removedCount","prevListIndex","listIndex","reverse","ListDiffer","slice","update","newData","result","_extendStatics","d","b","setPrototypeOf","__proto__","p","hasOwnProperty","childrenCount","__DIFF_KEY__","_super","ChildrenDiffer","__","constructor","__extends","_assign","assign","t","s","n","CloneComponent","FLICKING_PROPS","tag","viewportTag","cameraTag","classPrefix","plugins","onNeedPanel","onMoveStart","onMove","onMoveEnd","onHoldStart","onHoldEnd","onRestore","onSelect","onChange","onVisibleChange","Flicking","cloneCount","renderExternal","pluginsDiffer","Viewport","Camera","attributes","containerElement","cameraElement","renderPanels","componentDidUpdate","childrenDiffer","getElements","flicking","sync","checkPlugins","checkCloneCount","framework","frameworkVersion","moveStart","move","moveEnd","holdStart","holdEnd","select","needPanel","change","restore","visibleChange","forceUpdate","getChildren","jsxDiffer","child","status","setStatus","renderOnlyVisible","destroy","preserveUI","addPlugins","removePlugins","getCloneCount","panels","reactChildren","diffResult","panelCnt_1","beforeSync","indexesToRender","getRenderingIndexes","relativeIndex","cloneIndex","Math","floor","origEl","_loop_1","toArray","lastIndex","decorators","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","__decorate","Features","background","rightSide","ImageGalleryContainer","GalleryButton","button","ButtonContainer","ImageGallery","useRef","gap","hanger","anchor","collectStatistics","bound","autoResize","zIndex","features","nodes","node","id","slug","carouselButtonLeft","onClick","carouselButtonRight","Title","h1","Text","h4","SubscribeNewsletter","InputStyledNewsletter","InputStyled","NewsletterForm","email","onSubmit","data","preventDefault","fetch","process","method","mode","headers","body","then","response","json","console","log","catch","error","placeholder","aria-label","aria-required","as","marginBottom","TitleAndDescriptionContainer","TitleAndDescription","PaginationStyles","Pagination","pageSize","totalCount","currentPage","base","skip","totalPages","ceil","prevPage","nextPage","hasNextPage","hasPrevPage","hasElementType","Element","hasMap","hasSet","Set","hasArrayBuffer","ArrayBuffer","isView","a","equal","it","size","done","RegExp","source","flags","valueOf","toString","$$typeof","message","match","warn","FormStyled","form","input","SubmitButton","clock","_class","_temp","ATTRIBUTE_NAMES","TAG_NAMES","BASE","BODY","HEAD","HTML","LINK","META","NOSCRIPT","SCRIPT","STYLE","TITLE","TAG_PROPERTIES","REACT_TAG_MAP","accesskey","charset","class","contenteditable","contextmenu","itemprop","tabindex","HELMET_PROPS","HTML_TAG_MAP","reduce","obj","SELF_CLOSING_TAGS","_typeof","Symbol","iterator","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","descriptor","writable","protoProps","staticProps","_extends","objectWithoutProperties","possibleConstructorReturn","ReferenceError","encodeSpecialCharacters","str","encode","String","replace","getTitleFromPropsList","propsList","innermostTitle","getInnermostProperty","innermostTemplate","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","tagAttrs","getBaseTagFromPropsList","primaryAttributes","innermostBaseTag","lowerCaseAttributeKey","toLowerCase","getTagsFromPropsList","tagName","approvedSeenTags","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","attributeKey","tagUnion","rafPolyfill","Date","now","currentTime","setTimeout","cafPolyfill","clearTimeout","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","global","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","msg","_helmetCallback","commitTagChanges","newState","baseTag","bodyAttributes","htmlAttributes","linkTags","metaTags","noscriptTags","onChangeClientState","scriptTags","styleTags","titleAttributes","updateAttributes","updateTitle","tagUpdates","updateTags","addedTags","removedTags","_tagUpdates$tagType","newTags","oldTags","flattenArray","possibleArray","document","elementTag","getElementsByTagName","helmetAttributeString","getAttribute","helmetAttributes","split","attributesToRemove","attributeKeys","attribute","setAttribute","indexToSave","_i","removeAttribute","tags","headElement","head","querySelector","tagNodes","querySelectorAll","indexToDelete","newElement","innerHTML","styleSheet","cssText","appendChild","createTextNode","existingTag","isEqualNode","parentNode","removeChild","generateElementAttributesAsString","attr","convertElementAttributestoReactProps","initProps","getMethodsForTag","toComponent","_initProps","attributeString","flattenedTitle","generateTitleAsString","_mappedTag","mappedTag","mappedAttribute","generateTagsAsReactComponent","attributeHtml","tagContent","isSelfClosing","generateTagsAsString","mapStateOnServer","_ref$title","meta","noscript","script","HelmetSideEffects","defer","HelmetExport","HelmetWrapper","subClass","superClass","inherits","shouldComponentUpdate","nextProps","mapNestedChildrenToProps","nestedChildren","flattenArrayTypeChildren","_babelHelpers$extends","arrayTypeChildren","newChildProps","mapObjectTypeChildren","_babelHelpers$extends2","_babelHelpers$extends3","newProps","mapArrayTypeChildrenToProps","newFlattenedProps","arrayChildName","_babelHelpers$extends4","warnOnInvalidChildren","mapChildrenToProps","Children","_child$props","initAttributes","convertReactPropstoHtmlAttributes","_props","canUseDOM","defaultTitle","peek","rewind","mappedState","renderStatic","_inheritsLoose","_assertThisInitialized","win","assign$1","output","nextKey","VENDOR_PREFIXES","TEST_ELEMENT","round","abs","prefixed","prefix","prop","camelProp","toUpperCase","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","val","getTouchActionProps","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","test","navigator","userAgent","PROPS_XY","PROPS_CLIENT_XY","each","context","boolOrFn","args","inStr","find","TouchAction","manager","compute","element","actions","trim","touchAction","recognizers","recognizer","enable","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","srcEvent","direction","offsetDirection","session","prevented","hasNone","isTapPointer","pointers","isTapMovement","distance","isTapTouchTime","deltaTime","DIRECTION_LEFT","DIRECTION_UP","preventSrc","hasParent","parent","getCenter","pointersLength","x","clientX","y","clientY","simpleCloneInputData","timeStamp","deltaX","deltaY","getDistance","p1","p2","sqrt","getAngle","atan2","PI","getDirection","getVelocity","computeInputData","firstInput","firstMultiple","offsetCenter","angle","offset","offsetDelta","prevDelta","prevInput","computeDeltaXY","start","end","overallVelocity","overallVelocityX","overallVelocityY","scale","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","last","lastInterval","v","computeIntervalInputData","srcEventTarget","composedPath","path","inputHandler","pointersLen","changedPointersLen","changedPointers","isFirst","isFinal","emit","recognize","splitStr","addEventListeners","types","handler","addEventListener","removeEventListeners","removeEventListener","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","Input","inputTarget","domHandler","ev","init","evEl","evTarget","evWin","inArray","findByKey","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","MSPointerEvent","PointerEvent","PointerEventInput","_Input","proto","store","pointerEvents","removePointer","eventTypeNormalized","pointerType","isTouch","storeIndex","pointerId","uniqueArray","sort","results","TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TouchInput","targetIds","touches","getTouches","targetTouches","allTouches","identifier","changedTouches","changedTargetTouches","touch","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MouseInput","pressed","which","setLastTouch","eventData","primaryTouch","lastTouch","lts","lastTouches","recordTouches","isSyntheticEvent","dx","dy","TouchMouseInput","_manager","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","mouse","invokeArrayArg","fn","_uniqueId","getRecognizerByNameIfManager","otherRecognizer","stateStr","Recognizer","simultaneous","requireFail","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","event","additionalEvent","tryEmit","canEmit","inputDataClone","reset","TapRecognizer","_Recognizer","taps","interval","time","threshold","posThreshold","pTime","pCenter","_timer","_input","count","validPointers","validMovement","validTouchTime","failTimeout","validInterval","validMultiTap","_this3","tapCount","AttrRecognizer","attrTest","optionPointers","isRecognized","isValid","directionStr","PanRecognizer","_AttrRecognizer","DIRECTION_HORIZONTAL","pX","pY","directionTest","hasMoved","SwipeRecognizer","PinchRecognizer","inOut","RotateRecognizer","PressRecognizer","validTime","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","preset","toggleCssProps","add","oldCssProps","Manager","handlers","item","force","stopped","curRecognizer","existing","remove","targetRecognizer","events","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","SINGLE_TOUCH_INPUT_MAP","SingleTouchInput","started","normalizeSingleTouches","all","deprecate","deprecationMessage","stack","extend","dest","merge","inherit","properties","childP","baseP","bindFn","Hammer","DIRECTION_ALL","DIRECTION_DOWN","DIRECTION_RIGHT","DIRECTION_VERTICAL","DIRECTION_NONE","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","Tap","Pan","Swipe","Pinch","Rotate","Press","arr","execRegExp","pattern","exec","hasUserAgentData","userAgentData","brands","uaList","convertVersion","findPreset","presets","userPreset","version","brand","versionAlias","versionTest","findVersion","findBrand","BROWSER_PRESETS","CHROMIUM_PRESETS","WEBKIT_PRESETS","WEBVIEW_PRESETS","OS_PRESETS","parseUserAgentData","osData","isMobile","mobile","firstBrand","browser","majorVersion","webkit","webview","chromium","os","platform_1","platform","platformVersion","uaFullVersion","isHints","parseUserAgent","nextAgent","agent","getUserAgent","browserPreset","browserVersion","osPreset","osVersion","getInsidePosition","destPos","range","circular","bounce","toDestPos","targetRange","max","min","isOutside","pos","isCircularable","getCirculatedPos","toPos","len","$","param","multi","dummy","childNodes","nodeName","nodeType","jQuery","jquery","raf","caf","keyInfo_1","oldraf_1","timestamp","performance","getTime","tranformed","filtered","every","roundNumFunc","roundNumber","num","roundUnit","pow","getDecimalPlace","roundNumbers","isNumber","isFinite","minMax","AnimationManager","itm","em","axm","animationEnd","getDuration","depaPos","wishDuration","durations_1","deceleration","Infinity","minimumDuration","maximumDuration","createAnimationParam","option","delta","getDelta","isTrusted","grab","axes","_animateParam","orgPos_1","opt","triggerChange","_raf","triggerAnimationEnd","getEventInfo","animateTo","beforeParam","circularTargets","setTo","setInterrupt","finish","triggerFinish","animateLoop","info_1","self_1","destPos_1","prevPos_1","prevEasingPer_1","directions_1","originalIntendedPos_1","prevTime_1","startTime","loop","ratio","easingPer","easing","nextPos","circulatedPos","rangeOffset","getFinalPos","originalIntendedPos","getRoundUnit","minRoundUnit","getAxisOptions","getUserControll","userWish","retTrigger","triggerAnimationStart","orgPos","movedPos","setBy","EventManager","triggerHold","roundPos","getRoundPos","triggerRelease","roundDepa","createUserControll","isAccurate","holding","am","eventInfo","moveTo","userControl","userDuration","setAnimationManager","InterruptManager","_prevented","isInterrupting","interruptable","isInterrupted","AxisManager","axis","_complementOptions","_pos","acc","axisOption","fullDepaPos","axisOptions","InputObserver","moveDistance","isStopped","atOutside","tn","tx","initSlope_1","out","hold","changeOption","release","inputDuration","isEqual","IS_IOS_SAFARI","TRANSFORM","bodyStyle","Axes","startPos","_inputs","inputType","mapped","targets","hammer","mapAxes","isBounceArea","UNIQUEKEY","toAxis","createHammer","convertInputType","hasTouch","hasMouse","hasPointer","useDirection","checkType","userDirection","PanInput","panRecognizer","isRightEdge","rightEdgeTimer","panFlag","thresholdAngle","iOSEdgeSwipeThreshold","hammerManagerOptions","onHammerInput","onPanmove","onPanend","useHorizontal","useVertical","_direction","hammerOption","removeRecognizer","dettachEvent","keyValue","random","attachEvent","disable","isEnable","cancelable","edgeThreshold","innerWidth","toAngle","getDirectionByAngle","offsetX","offsetY","getOffset","prevent","stopPropagation","preventSystemEvent","speeds","normalSpeed","GridOneColumn","g","Function","ContactUs","ContactUsForm","data-enable-grammarly","ex","React","React__default","_defineProperty","reducePropsToState","handleStateChangeOnClient","WrappedComponent","mountedInstances","emitChange","SideEffect","_PureComponent","recordedState","UNSAFE_componentWillMount","PureComponent","displayName","getDisplayName"],"mappings":"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","file":"36f4266b94615ea4831790c4e8f8abea0e03d543-aa16c9ae7945de8bc3e3.js","sourcesContent":["import { useState } from 'react';\n\nexport function useForm(defaults:any) {\n const [values, setValues] = useState(defaults);\n\n function updateValue(e:any) {\n // check if its a number and convert\n let { value } = e.target;\n if (e.target.type === 'number') {\n value = parseInt(e.target.value);\n }\n setValues({\n // copy the existing values into it\n ...values,\n // update the new value that changed\n [e.target.name]: value,\n });\n }\n\n return { values, updateValue, setValues };\n}\n","import React from \"react\"\nimport { Helmet } from \"react-helmet\"\nimport { useStaticQuery, graphql } from \"gatsby\"\n\ntype SEOProps = {\n children?: any\n location?: any\n description?: string\n title: string\n image?: any\n}\n\nexport default function SEO({\n children,\n location,\n description,\n title,\n image,\n}: SEOProps) {\n const { site } = useStaticQuery(graphql`\n query {\n site {\n siteMetadata {\n title\n description\n twitter\n }\n }\n }\n `)\n\n return (\n \n \n {title}\n {/* Fav Icons */}\n \n \n {/* Meta Tags */}\n \n \n \n {/* Open Graph */}\n {location && }\n \n \n \n \n {children}\n \n )\n}\n","module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjciIGhlaWdodD0iNDYiIHZpZXdCb3g9IjAgMCAyNyA0NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNC43NTY4IDIzLjIzNjJMMy4xMjEzNiA0NC44NzE2TDEuMDAwMDQgNDIuNzUwM0wyMS4wOTgyIDIyLjY1MjFMMS41Njc0OSAzLjEyMTQzTDMuNjg4ODEgMS4wMDAxMUwyNS4zMjQyIDIyLjYzNTVMMjQuNzQwMiAyMy4yMTk2TDI0Ljc1NjggMjMuMjM2MloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0zLjEyMTM2IDQ0Ljg3MTZMMi43Njc4IDQ1LjIyNTFMMy4xMjEzNiA0NS41Nzg3TDMuNDc0OTEgNDUuMjI1MUwzLjEyMTM2IDQ0Ljg3MTZaTTI0Ljc1NjggMjMuMjM2MkwyNS4xMTAzIDIzLjU4OTdMMjUuNDYzOSAyMy4yMzYyTDI1LjExMDMgMjIuODgyNkwyNC43NTY4IDIzLjIzNjJaTTEuMDAwMDQgNDIuNzUwM0wwLjY0NjQ4NSA0Mi4zOTY3TDAuMjkyOTMyIDQyLjc1MDNMMC42NDY0ODUgNDMuMTAzOEwxLjAwMDA0IDQyLjc1MDNaTTIxLjA5ODIgMjIuNjUyMUwyMS40NTE3IDIzLjAwNTdMMjEuODA1MyAyMi42NTIxTDIxLjQ1MTcgMjIuMjk4NkwyMS4wOTgyIDIyLjY1MjFaTTEuNTY3NDkgMy4xMjE0M0wxLjIxMzk0IDIuNzY3ODhMMC44NjAzODYgMy4xMjE0M0wxLjIxMzk0IDMuNDc0OTlMMS41Njc0OSAzLjEyMTQzWk0zLjY4ODgxIDEuMDAwMTFMNC4wNDIzNyAwLjY0NjU2MUwzLjY4ODgxIDAuMjkzMDA4TDMuMzM1MjYgMC42NDY1NjFMMy42ODg4MSAxLjAwMDExWk0yNS4zMjQyIDIyLjYzNTVMMjUuNjc3OCAyMi45ODkxTDI2LjAzMTMgMjIuNjM1NUwyNS42Nzc4IDIyLjI4MkwyNS4zMjQyIDIyLjYzNTVaTTI0Ljc0MDIgMjMuMjE5NkwyNC4zODY2IDIyLjg2NkwyNC4wMzMgMjMuMjE5NkwyNC4zODY2IDIzLjU3MzFMMjQuNzQwMiAyMy4yMTk2Wk0zLjQ3NDkxIDQ1LjIyNTFMMjUuMTEwMyAyMy41ODk3TDI0LjQwMzIgMjIuODgyNkwyLjc2NzggNDQuNTE4TDMuNDc0OTEgNDUuMjI1MVpNMC42NDY0ODUgNDMuMTAzOEwyLjc2NzggNDUuMjI1MUwzLjQ3NDkxIDQ0LjUxOEwxLjM1MzU5IDQyLjM5NjdMMC42NDY0ODUgNDMuMTAzOFpNMjAuNzQ0NiAyMi4yOTg2TDAuNjQ2NDg1IDQyLjM5NjdMMS4zNTM1OSA0My4xMDM4TDIxLjQ1MTcgMjMuMDA1N0wyMC43NDQ2IDIyLjI5ODZaTTIxLjQ1MTcgMjIuMjk4NkwxLjkyMTA1IDIuNzY3ODhMMS4yMTM5NCAzLjQ3NDk5TDIwLjc0NDYgMjMuMDA1N0wyMS40NTE3IDIyLjI5ODZaTTEuOTIxMDUgMy40NzQ5OUw0LjA0MjM3IDEuMzUzNjdMMy4zMzUyNiAwLjY0NjU2MUwxLjIxMzk0IDIuNzY3ODhMMS45MjEwNSAzLjQ3NDk5Wk0zLjMzNTI2IDEuMzUzNjdMMjQuOTcwNyAyMi45ODkxTDI1LjY3NzggMjIuMjgyTDQuMDQyMzcgMC42NDY1NjFMMy4zMzUyNiAxLjM1MzY3Wk0yNC45NzA3IDIyLjI4MkwyNC4zODY2IDIyLjg2NkwyNS4wOTM3IDIzLjU3MzFMMjUuNjc3OCAyMi45ODkxTDI0Ljk3MDcgMjIuMjgyWk0yNS4xMTAzIDIyLjg4MjZMMjUuMDkzNyAyMi44NjZMMjQuMzg2NiAyMy41NzMxTDI0LjQwMzIgMjMuNTg5N0wyNS4xMTAzIDIyLjg4MjZaIiBmaWxsPSIjRTVFNUU1Ii8+Cjwvc3ZnPgo=\"","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar logDeprecationNotice = function logDeprecationNotice(prop, replacement) {\n if (process.env.NODE_ENV === \"production\") {\n return;\n }\n\n console.log(\"\\n The \\\"\" + prop + \"\\\" prop is now deprecated and will be removed in the next major version\\n of \\\"gatsby-image\\\".\\n \");\n\n if (replacement) {\n console.log(\"Please use \" + replacement + \" instead of \\\"\" + prop + \"\\\".\");\n }\n}; // Handle legacy props during their deprecation phase\n\n\nvar convertProps = function convertProps(props) {\n var convertedProps = (0, _extends2.default)({}, props);\n var resolutions = convertedProps.resolutions,\n sizes = convertedProps.sizes,\n critical = convertedProps.critical;\n\n if (resolutions) {\n convertedProps.fixed = resolutions;\n logDeprecationNotice(\"resolutions\", \"the gatsby-image v2 prop \\\"fixed\\\"\");\n delete convertedProps.resolutions;\n }\n\n if (sizes) {\n convertedProps.fluid = sizes;\n logDeprecationNotice(\"sizes\", \"the gatsby-image v2 prop \\\"fluid\\\"\");\n delete convertedProps.sizes;\n }\n\n if (critical) {\n logDeprecationNotice(\"critical\", \"the native \\\"loading\\\" attribute\");\n convertedProps.loading = \"eager\";\n } // convert fluid & fixed to arrays so we only have to work with arrays\n\n\n if (convertedProps.fluid) {\n convertedProps.fluid = groupByMedia([].concat(convertedProps.fluid));\n }\n\n if (convertedProps.fixed) {\n convertedProps.fixed = groupByMedia([].concat(convertedProps.fixed));\n }\n\n return convertedProps;\n};\n/**\n * Checks if fluid or fixed are art-direction arrays.\n *\n * @param currentData {{media?: string}[]} The props to check for images.\n * @return {boolean}\n */\n\n\nvar hasArtDirectionSupport = function hasArtDirectionSupport(currentData) {\n return !!currentData && Array.isArray(currentData) && currentData.some(function (image) {\n return typeof image.media !== \"undefined\";\n });\n};\n/**\n * Tries to detect if a media query matches the current viewport.\n * @property media {{media?: string}} A media query string.\n * @return {boolean}\n */\n\n\nvar matchesMedia = function matchesMedia(_ref) {\n var media = _ref.media;\n return media ? isBrowser && !!window.matchMedia(media).matches : false;\n};\n/**\n * Find the source of an image to use as a key in the image cache.\n * Use `the first image in either `fixed` or `fluid`\n * @param {{fluid: {src: string, media?: string}[], fixed: {src: string, media?: string}[]}} args\n * @return {string?} Returns image src or undefined it not given.\n */\n\n\nvar getImageCacheKey = function getImageCacheKey(_ref2) {\n var fluid = _ref2.fluid,\n fixed = _ref2.fixed;\n var srcData = getCurrentSrcData(fluid || fixed || []);\n return srcData && srcData.src;\n};\n/**\n * Returns the current src - Preferably with art-direction support.\n * @param currentData {{media?: string}[], maxWidth?: Number, maxHeight?: Number} The fluid or fixed image array.\n * @return {{src: string, media?: string, maxWidth?: Number, maxHeight?: Number}}\n */\n\n\nvar getCurrentSrcData = function getCurrentSrcData(currentData) {\n if (isBrowser && hasArtDirectionSupport(currentData)) {\n // Do we have an image for the current Viewport?\n var foundMedia = currentData.findIndex(matchesMedia);\n\n if (foundMedia !== -1) {\n return currentData[foundMedia];\n } // No media matches, select first element without a media condition\n\n\n var noMedia = currentData.findIndex(function (image) {\n return typeof image.media === \"undefined\";\n });\n\n if (noMedia !== -1) {\n return currentData[noMedia];\n }\n } // Else return the first image.\n\n\n return currentData[0];\n}; // Cache if we've seen an image before so we don't bother with\n// lazy-loading & fading in on subsequent mounts.\n\n\nvar imageCache = Object.create({});\n\nvar inImageCache = function inImageCache(props) {\n var convertedProps = convertProps(props);\n var cacheKey = getImageCacheKey(convertedProps);\n return imageCache[cacheKey] || false;\n};\n\nvar activateCacheForImage = function activateCacheForImage(props) {\n var convertedProps = convertProps(props);\n var cacheKey = getImageCacheKey(convertedProps);\n\n if (cacheKey) {\n imageCache[cacheKey] = true;\n }\n}; // Native lazy-loading support: https://addyosmani.com/blog/lazy-loading/\n\n\nvar hasNativeLazyLoadSupport = typeof HTMLImageElement !== \"undefined\" && \"loading\" in HTMLImageElement.prototype;\nvar isBrowser = typeof window !== \"undefined\";\nvar hasIOSupport = isBrowser && window.IntersectionObserver;\nvar io;\nvar listeners = new WeakMap();\n\nfunction getIO() {\n if (typeof io === \"undefined\" && typeof window !== \"undefined\" && window.IntersectionObserver) {\n io = new window.IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (listeners.has(entry.target)) {\n var cb = listeners.get(entry.target); // Edge doesn't currently support isIntersecting, so also test for an intersectionRatio > 0\n\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n io.unobserve(entry.target);\n listeners.delete(entry.target);\n cb();\n }\n }\n });\n }, {\n rootMargin: \"200px\"\n });\n }\n\n return io;\n}\n\nfunction generateImageSources(imageVariants) {\n return imageVariants.map(function (_ref3) {\n var src = _ref3.src,\n srcSet = _ref3.srcSet,\n srcSetWebp = _ref3.srcSetWebp,\n media = _ref3.media,\n sizes = _ref3.sizes;\n return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {\n key: src\n }, srcSetWebp && /*#__PURE__*/_react.default.createElement(\"source\", {\n type: \"image/webp\",\n media: media,\n srcSet: srcSetWebp,\n sizes: sizes\n }), srcSet && /*#__PURE__*/_react.default.createElement(\"source\", {\n media: media,\n srcSet: srcSet,\n sizes: sizes\n }));\n });\n} // Return an array ordered by elements having a media prop, does not use\n// native sort, as a stable sort is not guaranteed by all browsers/versions\n\n\nfunction groupByMedia(imageVariants) {\n var withMedia = [];\n var without = [];\n imageVariants.forEach(function (variant) {\n return (variant.media ? withMedia : without).push(variant);\n });\n\n if (without.length > 1 && process.env.NODE_ENV !== \"production\") {\n console.warn(\"We've found \" + without.length + \" sources without a media property. They might be ignored by the browser, see: https://www.gatsbyjs.org/packages/gatsby-image/#art-directing-multiple-images\");\n }\n\n return [].concat(withMedia, without);\n}\n\nfunction generateTracedSVGSources(imageVariants) {\n return imageVariants.map(function (_ref4) {\n var src = _ref4.src,\n media = _ref4.media,\n tracedSVG = _ref4.tracedSVG;\n return /*#__PURE__*/_react.default.createElement(\"source\", {\n key: src,\n media: media,\n srcSet: tracedSVG\n });\n });\n}\n\nfunction generateBase64Sources(imageVariants) {\n return imageVariants.map(function (_ref5) {\n var src = _ref5.src,\n media = _ref5.media,\n base64 = _ref5.base64;\n return /*#__PURE__*/_react.default.createElement(\"source\", {\n key: src,\n media: media,\n srcSet: base64\n });\n });\n}\n\nfunction generateNoscriptSource(_ref6, isWebp) {\n var srcSet = _ref6.srcSet,\n srcSetWebp = _ref6.srcSetWebp,\n media = _ref6.media,\n sizes = _ref6.sizes;\n var src = isWebp ? srcSetWebp : srcSet;\n var mediaAttr = media ? \"media=\\\"\" + media + \"\\\" \" : \"\";\n var typeAttr = isWebp ? \"type='image/webp' \" : \"\";\n var sizesAttr = sizes ? \"sizes=\\\"\" + sizes + \"\\\" \" : \"\";\n return \"\";\n}\n\nfunction generateNoscriptSources(imageVariants) {\n return imageVariants.map(function (variant) {\n return (variant.srcSetWebp ? generateNoscriptSource(variant, true) : \"\") + generateNoscriptSource(variant);\n }).join(\"\");\n}\n\nvar listenToIntersections = function listenToIntersections(el, cb) {\n var observer = getIO();\n\n if (observer) {\n observer.observe(el);\n listeners.set(el, cb);\n }\n\n return function () {\n observer.unobserve(el);\n listeners.delete(el);\n };\n};\n\nvar noscriptImg = function noscriptImg(props) {\n // Check if prop exists before adding each attribute to the string output below to prevent\n // HTML validation issues caused by empty values like width=\"\" and height=\"\"\n var src = props.src ? \"src=\\\"\" + props.src + \"\\\" \" : \"src=\\\"\\\" \"; // required attribute\n\n var sizes = props.sizes ? \"sizes=\\\"\" + props.sizes + \"\\\" \" : \"\";\n var srcSet = props.srcSet ? \"srcset=\\\"\" + props.srcSet + \"\\\" \" : \"\";\n var title = props.title ? \"title=\\\"\" + props.title + \"\\\" \" : \"\";\n var alt = props.alt ? \"alt=\\\"\" + props.alt + \"\\\" \" : \"alt=\\\"\\\" \"; // required attribute\n\n var width = props.width ? \"width=\\\"\" + props.width + \"\\\" \" : \"\";\n var height = props.height ? \"height=\\\"\" + props.height + \"\\\" \" : \"\";\n var crossOrigin = props.crossOrigin ? \"crossorigin=\\\"\" + props.crossOrigin + \"\\\" \" : \"\";\n var loading = props.loading ? \"loading=\\\"\" + props.loading + \"\\\" \" : \"\";\n var draggable = props.draggable ? \"draggable=\\\"\" + props.draggable + \"\\\" \" : \"\";\n var sources = generateNoscriptSources(props.imageVariants);\n return \"\" + sources + \"\";\n}; // Earlier versions of gatsby-image during the 2.x cycle did not wrap\n// the `Img` component in a `picture` element. This maintains compatibility\n// until a breaking change can be introduced in the next major release\n\n\nvar Placeholder = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n var src = props.src,\n imageVariants = props.imageVariants,\n generateSources = props.generateSources,\n spreadProps = props.spreadProps,\n ariaHidden = props.ariaHidden;\n\n var baseImage = /*#__PURE__*/_react.default.createElement(Img, (0, _extends2.default)({\n ref: ref,\n src: src\n }, spreadProps, {\n ariaHidden: ariaHidden\n }));\n\n return imageVariants.length > 1 ? /*#__PURE__*/_react.default.createElement(\"picture\", null, generateSources(imageVariants), baseImage) : baseImage;\n});\n\nvar Img = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n var sizes = props.sizes,\n srcSet = props.srcSet,\n src = props.src,\n style = props.style,\n onLoad = props.onLoad,\n onError = props.onError,\n loading = props.loading,\n draggable = props.draggable,\n ariaHidden = props.ariaHidden,\n otherProps = (0, _objectWithoutPropertiesLoose2.default)(props, [\"sizes\", \"srcSet\", \"src\", \"style\", \"onLoad\", \"onError\", \"loading\", \"draggable\", \"ariaHidden\"]);\n return /*#__PURE__*/_react.default.createElement(\"img\", (0, _extends2.default)({\n \"aria-hidden\": ariaHidden,\n sizes: sizes,\n srcSet: srcSet,\n src: src\n }, otherProps, {\n onLoad: onLoad,\n onError: onError,\n ref: ref,\n loading: loading,\n draggable: draggable,\n style: (0, _extends2.default)({\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n objectPosition: \"center\"\n }, style)\n }));\n});\n\nImg.propTypes = {\n style: _propTypes.default.object,\n onError: _propTypes.default.func,\n onLoad: _propTypes.default.func\n};\n\nvar Image = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(Image, _React$Component);\n\n function Image(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this; // If this image has already been loaded before then we can assume it's\n // already in the browser cache so it's cheap to just show directly.\n\n _this.seenBefore = isBrowser && inImageCache(props);\n _this.isCritical = props.loading === \"eager\" || props.critical;\n _this.addNoScript = !(_this.isCritical && !props.fadeIn);\n _this.useIOSupport = !hasNativeLazyLoadSupport && hasIOSupport && !_this.isCritical && !_this.seenBefore;\n var isVisible = _this.isCritical || isBrowser && (hasNativeLazyLoadSupport || !_this.useIOSupport);\n _this.state = {\n isVisible: isVisible,\n imgLoaded: false,\n imgCached: false,\n fadeIn: !_this.seenBefore && props.fadeIn,\n isHydrated: false\n };\n _this.imageRef = /*#__PURE__*/_react.default.createRef();\n _this.placeholderRef = props.placeholderRef || /*#__PURE__*/_react.default.createRef();\n _this.handleImageLoaded = _this.handleImageLoaded.bind((0, _assertThisInitialized2.default)(_this));\n _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2.default)(_this));\n return _this;\n }\n\n var _proto = Image.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.setState({\n isHydrated: isBrowser\n });\n\n if (this.state.isVisible && typeof this.props.onStartLoad === \"function\") {\n this.props.onStartLoad({\n wasCached: inImageCache(this.props)\n });\n }\n\n if (this.isCritical) {\n var img = this.imageRef.current;\n\n if (img && img.complete) {\n this.handleImageLoaded();\n }\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.cleanUpListeners) {\n this.cleanUpListeners();\n }\n } // Specific to IntersectionObserver based lazy-load support\n ;\n\n _proto.handleRef = function handleRef(ref) {\n var _this2 = this;\n\n if (this.useIOSupport && ref) {\n this.cleanUpListeners = listenToIntersections(ref, function () {\n var imageInCache = inImageCache(_this2.props);\n\n if (!_this2.state.isVisible && typeof _this2.props.onStartLoad === \"function\") {\n _this2.props.onStartLoad({\n wasCached: imageInCache\n });\n } // imgCached and imgLoaded must update after isVisible,\n // Once isVisible is true, imageRef becomes accessible, which imgCached needs access to.\n // imgLoaded and imgCached are in a 2nd setState call to be changed together,\n // avoiding initiating unnecessary animation frames from style changes.\n\n\n _this2.setState({\n isVisible: true\n }, function () {\n _this2.setState({\n imgLoaded: imageInCache,\n // `currentSrc` should be a string, but can be `undefined` in IE,\n // !! operator validates the value is not undefined/null/\"\"\n // for lazyloaded components this might be null\n // TODO fix imgCached behaviour as it's now false when it's lazyloaded\n imgCached: !!(_this2.imageRef.current && _this2.imageRef.current.currentSrc)\n });\n });\n });\n }\n };\n\n _proto.handleImageLoaded = function handleImageLoaded() {\n activateCacheForImage(this.props);\n this.setState({\n imgLoaded: true\n });\n\n if (this.props.onLoad) {\n this.props.onLoad();\n }\n };\n\n _proto.render = function render() {\n var _convertProps = convertProps(this.props),\n title = _convertProps.title,\n alt = _convertProps.alt,\n className = _convertProps.className,\n _convertProps$style = _convertProps.style,\n style = _convertProps$style === void 0 ? {} : _convertProps$style,\n _convertProps$imgStyl = _convertProps.imgStyle,\n imgStyle = _convertProps$imgStyl === void 0 ? {} : _convertProps$imgStyl,\n _convertProps$placeho = _convertProps.placeholderStyle,\n placeholderStyle = _convertProps$placeho === void 0 ? {} : _convertProps$placeho,\n placeholderClassName = _convertProps.placeholderClassName,\n fluid = _convertProps.fluid,\n fixed = _convertProps.fixed,\n backgroundColor = _convertProps.backgroundColor,\n durationFadeIn = _convertProps.durationFadeIn,\n Tag = _convertProps.Tag,\n itemProp = _convertProps.itemProp,\n loading = _convertProps.loading,\n draggable = _convertProps.draggable;\n\n var imageVariants = fluid || fixed; // Abort early if missing image data (#25371)\n\n if (!imageVariants) {\n return null;\n }\n\n var shouldReveal = this.state.fadeIn === false || this.state.imgLoaded;\n var shouldFadeIn = this.state.fadeIn === true && !this.state.imgCached;\n var imageStyle = (0, _extends2.default)({\n opacity: shouldReveal ? 1 : 0,\n transition: shouldFadeIn ? \"opacity \" + durationFadeIn + \"ms\" : \"none\"\n }, imgStyle);\n var bgColor = typeof backgroundColor === \"boolean\" ? \"lightgray\" : backgroundColor;\n var delayHideStyle = {\n transitionDelay: durationFadeIn + \"ms\"\n };\n var imagePlaceholderStyle = (0, _extends2.default)({\n opacity: this.state.imgLoaded ? 0 : 1\n }, shouldFadeIn && delayHideStyle, imgStyle, placeholderStyle);\n var placeholderImageProps = {\n title: title,\n alt: !this.state.isVisible ? alt : \"\",\n style: imagePlaceholderStyle,\n className: placeholderClassName,\n itemProp: itemProp\n }; // Initial client render state needs to match SSR until hydration finishes.\n // Once hydration completes, render again to update to the correct image.\n // `imageVariants` is always an Array type at this point due to `convertProps()`\n\n var image = !this.state.isHydrated ? imageVariants[0] : getCurrentSrcData(imageVariants);\n\n if (fluid) {\n return /*#__PURE__*/_react.default.createElement(Tag, {\n className: (className ? className : \"\") + \" gatsby-image-wrapper\",\n style: (0, _extends2.default)({\n position: \"relative\",\n overflow: \"hidden\",\n maxWidth: image.maxWidth ? image.maxWidth + \"px\" : null,\n maxHeight: image.maxHeight ? image.maxHeight + \"px\" : null\n }, style),\n ref: this.handleRef,\n key: \"fluid-\" + JSON.stringify(image.srcSet)\n }, /*#__PURE__*/_react.default.createElement(Tag, {\n \"aria-hidden\": true,\n style: {\n width: \"100%\",\n paddingBottom: 100 / image.aspectRatio + \"%\"\n }\n }), bgColor && /*#__PURE__*/_react.default.createElement(Tag, {\n \"aria-hidden\": true,\n title: title,\n style: (0, _extends2.default)({\n backgroundColor: bgColor,\n position: \"absolute\",\n top: 0,\n bottom: 0,\n opacity: !this.state.imgLoaded ? 1 : 0,\n right: 0,\n left: 0\n }, shouldFadeIn && delayHideStyle)\n }), image.base64 && /*#__PURE__*/_react.default.createElement(Placeholder, {\n ariaHidden: true,\n ref: this.placeholderRef,\n src: image.base64,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateBase64Sources\n }), image.tracedSVG && /*#__PURE__*/_react.default.createElement(Placeholder, {\n ariaHidden: true,\n ref: this.placeholderRef,\n src: image.tracedSVG,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateTracedSVGSources\n }), this.state.isVisible && /*#__PURE__*/_react.default.createElement(\"picture\", null, generateImageSources(imageVariants), /*#__PURE__*/_react.default.createElement(Img, {\n alt: alt,\n title: title,\n sizes: image.sizes,\n src: image.src,\n crossOrigin: this.props.crossOrigin,\n srcSet: image.srcSet,\n style: imageStyle,\n ref: this.imageRef,\n onLoad: this.handleImageLoaded,\n onError: this.props.onError,\n itemProp: itemProp,\n loading: loading,\n draggable: draggable\n })), this.addNoScript && /*#__PURE__*/_react.default.createElement(\"noscript\", {\n dangerouslySetInnerHTML: {\n __html: noscriptImg((0, _extends2.default)({\n alt: alt,\n title: title,\n loading: loading\n }, image, {\n imageVariants: imageVariants\n }))\n }\n }));\n }\n\n if (fixed) {\n var divStyle = (0, _extends2.default)({\n position: \"relative\",\n overflow: \"hidden\",\n display: \"inline-block\",\n width: image.width,\n height: image.height\n }, style);\n\n if (style.display === \"inherit\") {\n delete divStyle.display;\n }\n\n return /*#__PURE__*/_react.default.createElement(Tag, {\n className: (className ? className : \"\") + \" gatsby-image-wrapper\",\n style: divStyle,\n ref: this.handleRef,\n key: \"fixed-\" + JSON.stringify(image.srcSet)\n }, bgColor && /*#__PURE__*/_react.default.createElement(Tag, {\n \"aria-hidden\": true,\n title: title,\n style: (0, _extends2.default)({\n backgroundColor: bgColor,\n width: image.width,\n opacity: !this.state.imgLoaded ? 1 : 0,\n height: image.height\n }, shouldFadeIn && delayHideStyle)\n }), image.base64 && /*#__PURE__*/_react.default.createElement(Placeholder, {\n ariaHidden: true,\n ref: this.placeholderRef,\n src: image.base64,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateBase64Sources\n }), image.tracedSVG && /*#__PURE__*/_react.default.createElement(Placeholder, {\n ariaHidden: true,\n ref: this.placeholderRef,\n src: image.tracedSVG,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateTracedSVGSources\n }), this.state.isVisible && /*#__PURE__*/_react.default.createElement(\"picture\", null, generateImageSources(imageVariants), /*#__PURE__*/_react.default.createElement(Img, {\n alt: alt,\n title: title,\n width: image.width,\n height: image.height,\n sizes: image.sizes,\n src: image.src,\n crossOrigin: this.props.crossOrigin,\n srcSet: image.srcSet,\n style: imageStyle,\n ref: this.imageRef,\n onLoad: this.handleImageLoaded,\n onError: this.props.onError,\n itemProp: itemProp,\n loading: loading,\n draggable: draggable\n })), this.addNoScript && /*#__PURE__*/_react.default.createElement(\"noscript\", {\n dangerouslySetInnerHTML: {\n __html: noscriptImg((0, _extends2.default)({\n alt: alt,\n title: title,\n loading: loading\n }, image, {\n imageVariants: imageVariants\n }))\n }\n }));\n }\n\n return null;\n };\n\n return Image;\n}(_react.default.Component);\n\nImage.defaultProps = {\n fadeIn: true,\n durationFadeIn: 500,\n alt: \"\",\n Tag: \"div\",\n // We set it to `lazy` by default because it's best to default to a performant\n // setting and let the user \"opt out\" to `eager`\n loading: \"lazy\"\n};\n\nvar fixedObject = _propTypes.default.shape({\n width: _propTypes.default.number.isRequired,\n height: _propTypes.default.number.isRequired,\n src: _propTypes.default.string.isRequired,\n srcSet: _propTypes.default.string.isRequired,\n base64: _propTypes.default.string,\n tracedSVG: _propTypes.default.string,\n srcWebp: _propTypes.default.string,\n srcSetWebp: _propTypes.default.string,\n media: _propTypes.default.string\n});\n\nvar fluidObject = _propTypes.default.shape({\n aspectRatio: _propTypes.default.number.isRequired,\n src: _propTypes.default.string.isRequired,\n srcSet: _propTypes.default.string.isRequired,\n sizes: _propTypes.default.string.isRequired,\n base64: _propTypes.default.string,\n tracedSVG: _propTypes.default.string,\n srcWebp: _propTypes.default.string,\n srcSetWebp: _propTypes.default.string,\n media: _propTypes.default.string,\n maxWidth: _propTypes.default.number,\n maxHeight: _propTypes.default.number\n});\n\nfunction requireFixedOrFluid(originalPropTypes) {\n return function (props, propName, componentName) {\n var _PropTypes$checkPropT;\n\n if (!props.fixed && !props.fluid) {\n throw new Error(\"The prop `fluid` or `fixed` is marked as required in `\" + componentName + \"`, but their values are both `undefined`.\");\n }\n\n _propTypes.default.checkPropTypes((_PropTypes$checkPropT = {}, _PropTypes$checkPropT[propName] = originalPropTypes, _PropTypes$checkPropT), props, \"prop\", componentName);\n };\n} // If you modify these propTypes, please don't forget to update following files as well:\n// https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-image/index.d.ts\n// https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-image/README.md#gatsby-image-props\n// https://github.com/gatsbyjs/gatsby/blob/master/docs/docs/gatsby-image.md#gatsby-image-props\n\n\nImage.propTypes = {\n resolutions: fixedObject,\n sizes: fluidObject,\n fixed: requireFixedOrFluid(_propTypes.default.oneOfType([fixedObject, _propTypes.default.arrayOf(fixedObject)])),\n fluid: requireFixedOrFluid(_propTypes.default.oneOfType([fluidObject, _propTypes.default.arrayOf(fluidObject)])),\n fadeIn: _propTypes.default.bool,\n durationFadeIn: _propTypes.default.number,\n title: _propTypes.default.string,\n alt: _propTypes.default.string,\n className: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object]),\n // Support Glamor's css prop.\n critical: _propTypes.default.bool,\n crossOrigin: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool]),\n style: _propTypes.default.object,\n imgStyle: _propTypes.default.object,\n placeholderStyle: _propTypes.default.object,\n placeholderClassName: _propTypes.default.string,\n backgroundColor: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool]),\n onLoad: _propTypes.default.func,\n onError: _propTypes.default.func,\n onStartLoad: _propTypes.default.func,\n Tag: _propTypes.default.string,\n itemProp: _propTypes.default.string,\n loading: _propTypes.default.oneOf([\"auto\", \"lazy\", \"eager\"]),\n draggable: _propTypes.default.bool\n};\nvar _default = Image;\nexports.default = _default;","/*\nCopyright (c) 2017 NAVER Corp.\n@egjs/component project is licensed under the MIT license\n\n@egjs/component JavaScript library\nhttps://naver.github.io/egjs-component\n\n@version 2.1.2\n*/\n\n/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nfunction isUndefined(value) {\n return typeof value === \"undefined\";\n}\n/**\n * A class used to manage events in a component\n * @ko 컴포넌트의 이벤트을 관리할 수 있게 하는 클래스\n * @alias eg.Component\n */\n\n\nvar Component = /*#__PURE__*/function () {\n var Component = /*#__PURE__*/function () {\n /**\n * Version info string\n * @ko 버전정보 문자열\n * @name VERSION\n * @static\n * @type {String}\n * @example\n * eg.Component.VERSION; // ex) 2.0.0\n * @memberof eg.Component\n */\n\n /**\n * @support {\"ie\": \"7+\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\", \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"2.1+ (except 3.x)\"}\n */\n function Component() {\n this._eventHandler = {};\n this.options = {};\n }\n /**\n * Triggers a custom event.\n * @ko 커스텀 이벤트를 발생시킨다\n * @param {String} eventName The name of the custom event to be triggered 발생할 커스텀 이벤트의 이름\n * @param {Object} customEvent Event data to be sent when triggering a custom event 커스텀 이벤트가 발생할 때 전달할 데이터\n * @return {Boolean} Indicates whether the event has occurred. If the stop() method is called by a custom event handler, it will return false and prevent the event from occurring. Ref 이벤트 발생 여부. 커스텀 이벤트 핸들러에서 stop() 메서드를 호출하면 'false'를 반환하고 이벤트 발생을 중단한다. 참고\n * @example\n class Some extends eg.Component {\n some(){\n \tif(this.trigger(\"beforeHi\")){ // When event call to stop return false.\n \tthis.trigger(\"hi\");// fire hi event.\n \t}\n }\n }\n const some = new Some();\n some.on(\"beforeHi\", (e) => {\n if(condition){\n \te.stop(); // When event call to stop, `hi` event not call.\n }\n });\n some.on(\"hi\", (e) => {\n // `currentTarget` is component instance.\n console.log(some === e.currentTarget); // true\n });\n // If you want to more know event design. You can see article.\n // https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\n */\n\n\n var _proto = Component.prototype;\n\n _proto.trigger = function trigger(eventName, customEvent) {\n if (customEvent === void 0) {\n customEvent = {};\n }\n\n var handlerList = this._eventHandler[eventName] || [];\n var hasHandlerList = handlerList.length > 0;\n\n if (!hasHandlerList) {\n return true;\n } // If detach method call in handler in first time then handler list calls.\n\n\n handlerList = handlerList.concat();\n customEvent.eventType = eventName;\n var isCanceled = false;\n var arg = [customEvent];\n var i = 0;\n\n customEvent.stop = function () {\n isCanceled = true;\n };\n\n customEvent.currentTarget = this;\n\n for (var _len = arguments.length, restParam = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n restParam[_key - 2] = arguments[_key];\n }\n\n if (restParam.length >= 1) {\n arg = arg.concat(restParam);\n }\n\n for (i = 0; handlerList[i]; i++) {\n handlerList[i].apply(this, arg);\n }\n\n return !isCanceled;\n };\n /**\n * Executed event just one time.\n * @ko 이벤트가 한번만 실행된다.\n * @param {eventName} eventName The name of the event to be attached 등록할 이벤트의 이름\n * @param {Function} handlerToAttach The handler function of the event to be attached 등록할 이벤트의 핸들러 함수\n * @return {eg.Component} An instance of a component itself컴포넌트 자신의 인스턴스\n * @example\n class Some extends eg.Component {\n hi() {\n alert(\"hi\");\n }\n thing() {\n this.once(\"hi\", this.hi);\n }\n }\n var some = new Some();\n some.thing();\n some.trigger(\"hi\");\n // fire alert(\"hi\");\n some.trigger(\"hi\");\n // Nothing happens\n */\n\n\n _proto.once = function once(eventName, handlerToAttach) {\n if (typeof eventName === \"object\" && isUndefined(handlerToAttach)) {\n var eventHash = eventName;\n var i;\n\n for (i in eventHash) {\n this.once(i, eventHash[i]);\n }\n\n return this;\n } else if (typeof eventName === \"string\" && typeof handlerToAttach === \"function\") {\n var self = this;\n this.on(eventName, function listener() {\n for (var _len2 = arguments.length, arg = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n arg[_key2] = arguments[_key2];\n }\n\n handlerToAttach.apply(self, arg);\n self.off(eventName, listener);\n });\n }\n\n return this;\n };\n /**\n * Checks whether an event has been attached to a component.\n * @ko 컴포넌트에 이벤트가 등록됐는지 확인한다.\n * @param {String} eventName The name of the event to be attached 등록 여부를 확인할 이벤트의 이름\n * @return {Boolean} Indicates whether the event is attached. 이벤트 등록 여부\n * @example\n class Some extends eg.Component {\n some() {\n this.hasOn(\"hi\");// check hi event.\n }\n }\n */\n\n\n _proto.hasOn = function hasOn(eventName) {\n return !!this._eventHandler[eventName];\n };\n /**\n * Attaches an event to a component.\n * @ko 컴포넌트에 이벤트를 등록한다.\n * @param {eventName} eventName The name of the event to be attached 등록할 이벤트의 이름\n * @param {Function} handlerToAttach The handler function of the event to be attached 등록할 이벤트의 핸들러 함수\n * @return {eg.Component} An instance of a component itself컴포넌트 자신의 인스턴스\n * @example\n class Some extends eg.Component {\n hi() {\n console.log(\"hi\");\n }\n some() {\n this.on(\"hi\",this.hi); //attach event\n }\n }\n */\n\n\n _proto.on = function on(eventName, handlerToAttach) {\n if (typeof eventName === \"object\" && isUndefined(handlerToAttach)) {\n var eventHash = eventName;\n var name;\n\n for (name in eventHash) {\n this.on(name, eventHash[name]);\n }\n\n return this;\n } else if (typeof eventName === \"string\" && typeof handlerToAttach === \"function\") {\n var handlerList = this._eventHandler[eventName];\n\n if (isUndefined(handlerList)) {\n this._eventHandler[eventName] = [];\n handlerList = this._eventHandler[eventName];\n }\n\n handlerList.push(handlerToAttach);\n }\n\n return this;\n };\n /**\n * Detaches an event from the component.\n * @ko 컴포넌트에 등록된 이벤트를 해제한다\n * @param {eventName} eventName The name of the event to be detached 해제할 이벤트의 이름\n * @param {Function} handlerToDetach The handler function of the event to be detached 해제할 이벤트의 핸들러 함수\n * @return {eg.Component} An instance of a component itself 컴포넌트 자신의 인스턴스\n * @example\n class Some extends eg.Component {\n hi() {\n console.log(\"hi\");\n }\n some() {\n this.off(\"hi\",this.hi); //detach event\n }\n }\n */\n\n\n _proto.off = function off(eventName, handlerToDetach) {\n // All event detach.\n if (isUndefined(eventName)) {\n this._eventHandler = {};\n return this;\n } // All handler of specific event detach.\n\n\n if (isUndefined(handlerToDetach)) {\n if (typeof eventName === \"string\") {\n this._eventHandler[eventName] = undefined;\n return this;\n } else {\n var eventHash = eventName;\n var name;\n\n for (name in eventHash) {\n this.off(name, eventHash[name]);\n }\n\n return this;\n }\n } // The handler of specific event detach.\n\n\n var handlerList = this._eventHandler[eventName];\n\n if (handlerList) {\n var k;\n var handlerFunction;\n\n for (k = 0; (handlerFunction = handlerList[k]) !== undefined; k++) {\n if (handlerFunction === handlerToDetach) {\n handlerList = handlerList.splice(k, 1);\n break;\n }\n }\n }\n\n return this;\n };\n\n return Component;\n }();\n\n Component.VERSION = \"2.1.2\";\n return Component;\n}();\n\nexport default Component;","import React from \"react\"\nimport styled from \"styled-components\"\nimport { motion } from \"framer-motion\"\nimport { graphql, useStaticQuery, Link } from \"gatsby\"\nimport Img from \"gatsby-image\"\n\nimport { PageSegment } from \"..\"\n\nconst MainBannerContainer = styled(motion.div)`\n width: 100%;\n height: 336px;\n /* overflow: hidden; */\n\n opacity: 0;\n\n .gatsby-image-wrapper {\n width: 100%;\n height: 336px;\n }\n\n h1 {\n font-size: 2.5em;\n font-weight: 700;\n }\n\n h3 {\n font-size: 1.2em;\n }\n\n .box {\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n top: -210px;\n background-color: transparent;\n }\n\n @media (min-width: 768px) {\n height: 540px;\n\n .gatsby-image-wrapper {\n width: 100%;\n height: 540px;\n }\n\n h1 {\n font-size: 5em;\n font-weight: 700;\n }\n\n h3 {\n font-size: 1.5em;\n }\n\n .box {\n top: -360px;\n }\n }\n`\n\nconst Button = styled(Link)`\n margin-top: 25px;\n background-color: var(--black);\n color: white;\n padding: 10px 32px;\n border: none;\n text-align: center;\n text-decoration: none;\n display: inline-block;\n outline-style: solid;\n outline: none;\n\n cursor: pointer;\n\n :active {\n outline: none;\n }\n`\n\nconst variants = {\n visible: {\n opacity: 1,\n transition: { duration: 1 },\n },\n}\n\nexport const MainBanner = () => {\n const query = useStaticQuery(graphql`\n query HomePageBanner {\n homeData: sanityHomeData {\n mainBannerImage {\n asset {\n fluid(maxHeight: 540, maxWidth: 1440) {\n ...GatsbySanityImageFluid\n }\n }\n }\n }\n }\n `)\n\n return (\n \n \n \n
\n

A community for

\n

Creative People

\n \n
\n
\n
\n )\n}\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { motion, useAnimation } from \"framer-motion\"\nimport { Link } from \"gatsby\"\n\nimport { PageSegment, TitleAndDescription } from \"..\"\nimport { GridOneColumn } from \"../../styles\"\n\nimport blog301Image from \"../../assets/images/301-blog.png\"\nimport creatives from \"../../assets/images/creatives.png\"\nimport ourStory from \"../../assets/images/our-story.png\"\n\n\nconst FlexContainer = styled.div`\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n`\n\nexport const Welcome = () => {\n return (\n \n \n \n

\n Welcome to the CreativeHub301, the home for professional artists and\n makers showcasing their new and original work to the general public.\n

\n
\n \n \n \n \n \n
\n
\n )\n}\n\nconst center = () => {\n return `display: flex; justify-content: center; align-items: center;`\n}\n\nconst SquareImageLink = styled(Link)<{ image: any }>`\n text-decoration: none;\n color: var(--black);\n margin: 18px;\n width: 275px;\n height: 275px;\n background-image: url(${props => props.image});\n background-size: cover;\n\n ${center}\n\n .square {\n width: 180px;\n height: 82px;\n background-color: var(--white);\n font-weight: 700;\n font-size: 1.2em;\n ${center}\n }\n`\n\ntype Props = {\n image: any\n text: string\n to?: string\n}\n\nconst SquareImageButton = ({ image, text, to = \"/creatives\" }: Props) => {\n return (\n \n
{text}
\n
\n )\n}\n","/*\nCopyright (c) 2019-present NAVER Corp.\nname: @egjs/list-differ\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-list-differ\nversion: 1.0.0\n*/\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar PolyMap = /*#__PURE__*/function () {\n function PolyMap() {\n this.keys = [];\n this.values = [];\n }\n\n var __proto = PolyMap.prototype;\n\n __proto.get = function (key) {\n return this.values[this.keys.indexOf(key)];\n };\n\n __proto.set = function (key, value) {\n var keys = this.keys;\n var values = this.values;\n var prevIndex = keys.indexOf(key);\n var index = prevIndex === -1 ? keys.length : prevIndex;\n keys[index] = key;\n values[index] = value;\n };\n\n return PolyMap;\n}();\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\n\nvar HashMap = /*#__PURE__*/function () {\n function HashMap() {\n this.object = {};\n }\n\n var __proto = HashMap.prototype;\n\n __proto.get = function (key) {\n return this.object[key];\n };\n\n __proto.set = function (key, value) {\n this.object[key] = value;\n };\n\n return HashMap;\n}();\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\n\nvar SUPPORT_MAP = typeof Map === \"function\";\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\nvar Link = /*#__PURE__*/function () {\n function Link() {}\n\n var __proto = Link.prototype;\n\n __proto.connect = function (prevLink, nextLink) {\n this.prev = prevLink;\n this.next = nextLink;\n prevLink && (prevLink.next = this);\n nextLink && (nextLink.prev = this);\n };\n\n __proto.disconnect = function () {\n // In double linked list, diconnect the interconnected relationship.\n var prevLink = this.prev;\n var nextLink = this.next;\n prevLink && (prevLink.next = nextLink);\n nextLink && (nextLink.prev = prevLink);\n };\n\n __proto.getIndex = function () {\n var link = this;\n var index = -1;\n\n while (link) {\n link = link.prev;\n ++index;\n }\n\n return index;\n };\n\n return Link;\n}();\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\n\nfunction orderChanged(changed, fixed) {\n // It is roughly in the order of these examples.\n // 4, 6, 0, 2, 1, 3, 5, 7\n var fromLinks = []; // 0, 1, 2, 3, 4, 5, 6, 7\n\n var toLinks = [];\n changed.forEach(function (_a) {\n var from = _a[0],\n to = _a[1];\n var link = new Link();\n fromLinks[from] = link;\n toLinks[to] = link;\n }); // `fromLinks` are connected to each other by double linked list.\n\n fromLinks.forEach(function (link, i) {\n link.connect(fromLinks[i - 1]);\n });\n return changed.filter(function (_, i) {\n return !fixed[i];\n }).map(function (_a, i) {\n var from = _a[0],\n to = _a[1];\n\n if (from === to) {\n return [0, 0];\n }\n\n var fromLink = fromLinks[from];\n var toLink = toLinks[to - 1];\n var fromIndex = fromLink.getIndex(); // Disconnect the link connected to `fromLink`.\n\n fromLink.disconnect(); // Connect `fromLink` to the right of `toLink`.\n\n if (!toLink) {\n fromLink.connect(undefined, fromLinks[0]);\n } else {\n fromLink.connect(toLink, toLink.next);\n }\n\n var toIndex = fromLink.getIndex();\n return [fromIndex, toIndex];\n });\n}\n\nvar Result = /*#__PURE__*/function () {\n function Result(prevList, list, added, removed, changed, maintained, changedBeforeAdded, fixed) {\n this.prevList = prevList;\n this.list = list;\n this.added = added;\n this.removed = removed;\n this.changed = changed;\n this.maintained = maintained;\n this.changedBeforeAdded = changedBeforeAdded;\n this.fixed = fixed;\n }\n\n var __proto = Result.prototype;\n Object.defineProperty(__proto, \"ordered\", {\n get: function get() {\n if (!this.cacheOrdered) {\n this.caculateOrdered();\n }\n\n return this.cacheOrdered;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(__proto, \"pureChanged\", {\n get: function get() {\n if (!this.cachePureChanged) {\n this.caculateOrdered();\n }\n\n return this.cachePureChanged;\n },\n enumerable: true,\n configurable: true\n });\n\n __proto.caculateOrdered = function () {\n var ordered = orderChanged(this.changedBeforeAdded, this.fixed);\n var changed = this.changed;\n var pureChanged = [];\n this.cacheOrdered = ordered.filter(function (_a, i) {\n var from = _a[0],\n to = _a[1];\n var _b = changed[i],\n fromBefore = _b[0],\n toBefore = _b[1];\n\n if (from !== to) {\n pureChanged.push([fromBefore, toBefore]);\n return true;\n }\n });\n this.cachePureChanged = pureChanged;\n };\n\n return Result;\n}();\n/**\n *\n * @memberof eg.ListDiffer\n * @static\n * @function\n * @param - Previous List 이전 목록 \n * @param - List to Update 업데이트 할 목록 \n * @param - This callback function returns the key of the item. 아이템의 키를 반환하는 콜백 함수입니다.\n * @return - Returns the diff between `prevList` and `list` `prevList`와 `list`의 다른 점을 반환한다.\n * @example\n * import { diff } from \"@egjs/list-differ\";\n * // script => eg.ListDiffer.diff\n * const result = diff([0, 1, 2, 3, 4, 5], [7, 8, 0, 4, 3, 6, 2, 1], e => e);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\n\n\nfunction diff(prevList, list, findKeyCallback) {\n var mapClass = SUPPORT_MAP ? Map : findKeyCallback ? HashMap : PolyMap;\n\n var callback = findKeyCallback || function (e) {\n return e;\n };\n\n var added = [];\n var removed = [];\n var maintained = [];\n var prevKeys = prevList.map(callback);\n var keys = list.map(callback);\n var prevKeyMap = new mapClass();\n var keyMap = new mapClass();\n var changedBeforeAdded = [];\n var fixed = [];\n var removedMap = {};\n var changed = [];\n var addedCount = 0;\n var removedCount = 0; // Add prevKeys and keys to the hashmap.\n\n prevKeys.forEach(function (key, prevListIndex) {\n prevKeyMap.set(key, prevListIndex);\n });\n keys.forEach(function (key, listIndex) {\n keyMap.set(key, listIndex);\n }); // Compare `prevKeys` and `keys` and add them to `removed` if they are not in `keys`.\n\n prevKeys.forEach(function (key, prevListIndex) {\n var listIndex = keyMap.get(key); // In prevList, but not in list, it is removed.\n\n if (typeof listIndex === \"undefined\") {\n ++removedCount;\n removed.push(prevListIndex);\n } else {\n removedMap[listIndex] = removedCount;\n }\n }); // Compare `prevKeys` and `keys` and add them to `added` if they are not in `prevKeys`.\n\n keys.forEach(function (key, listIndex) {\n var prevListIndex = prevKeyMap.get(key); // In list, but not in prevList, it is added.\n\n if (typeof prevListIndex === \"undefined\") {\n added.push(listIndex);\n ++addedCount;\n } else {\n maintained.push([prevListIndex, listIndex]);\n removedCount = removedMap[listIndex] || 0;\n changedBeforeAdded.push([prevListIndex - removedCount, listIndex - addedCount]);\n fixed.push(listIndex === prevListIndex);\n\n if (prevListIndex !== listIndex) {\n changed.push([prevListIndex, listIndex]);\n }\n }\n }); // Sort by ascending order of 'to(list's index).\n\n removed.reverse();\n return new Result(prevList, list, added, removed, changed, maintained, changedBeforeAdded, fixed);\n}\n/**\n * A module that checks diff when values are added, removed, or changed in an array.\n * @ko 배열 또는 오브젝트에서 값이 추가되거나 삭제되거나 순서가 변경사항을 체크하는 모듈입니다.\n * @memberof eg\n */\n\n\nvar ListDiffer = /*#__PURE__*/function () {\n /**\n * @param - Initializing Data Array. 초기 설정할 데이터 배열.\n * @param - This callback function returns the key of the item. 아이템의 키를 반환하는 콜백 함수입니다.\n * @example\n * import ListDiffer from \"@egjs/list-differ\";\n * // script => eg.ListDiffer\n * const differ = new ListDiffer([0, 1, 2, 3, 4, 5], e => e);\n * const result = differ.update([7, 8, 0, 4, 3, 6, 2, 1]);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`.\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`.\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`.\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved.\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\n function ListDiffer(list, findKeyCallback) {\n if (list === void 0) {\n list = [];\n }\n\n this.findKeyCallback = findKeyCallback;\n this.list = [].slice.call(list);\n }\n /**\n * Update list.\n * @ko 리스트를 업데이트를 합니다.\n * @param - List to update 업데이트할 리스트 \n * @return - Returns the results of an update from `prevList` to `list`. `prevList`에서 `list`로 업데이트한 결과를 반환한다. \n */\n\n\n var __proto = ListDiffer.prototype;\n\n __proto.update = function (list) {\n var newData = [].slice.call(list);\n var result = diff(this.list, newData, this.findKeyCallback);\n this.list = newData;\n return result;\n };\n\n return ListDiffer;\n}();\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\n\nexport default ListDiffer;\nexport { diff };","/*\nCopyright (c) 2019-present NAVER Corp.\nname: @egjs/children-differ\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-children-differ\nversion: 1.0.1\n*/\nimport ListDiffer, { diff as diff$1 } from '@egjs/list-differ';\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\n\nvar _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\n\nvar findKeyCallback = typeof Map === \"function\" ? undefined : function () {\n var childrenCount = 0;\n return function (el) {\n return el.__DIFF_KEY__ || (el.__DIFF_KEY__ = ++childrenCount);\n };\n}();\n/**\n * A module that checks diff when child are added, removed, or changed .\n * @ko 자식 노드들에서 자식 노드가 추가되거나 삭제되거나 순서가 변경된 사항을 체크하는 모듈입니다.\n * @memberof eg\n * @extends eg.ListDiffer\n */\n\nvar ChildrenDiffer = /*#__PURE__*/function (_super) {\n __extends(ChildrenDiffer, _super);\n /**\n * @param - Initializing Children 초기 설정할 자식 노드들\n */\n\n\n function ChildrenDiffer(list) {\n if (list === void 0) {\n list = [];\n }\n\n return _super.call(this, list, findKeyCallback) || this;\n }\n\n return ChildrenDiffer;\n}(ListDiffer);\n/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\n/**\n *\n * @memberof eg.ChildrenDiffer\n * @static\n * @function\n * @param - Previous List 이전 목록 \n * @param - List to Update 업데이트 할 목록 \n * @return - Returns the diff between `prevList` and `list` `prevList`와 `list`의 다른 점을 반환한다.\n * @example\n * import { diff } from \"@egjs/children-differ\";\n * // script => eg.ChildrenDiffer.diff\n * const result = diff([0, 1, 2, 3, 4, 5], [7, 8, 0, 4, 3, 6, 2, 1]);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\n\n\nfunction diff(prevList, list) {\n return diff$1(prevList, list, findKeyCallback);\n}\n/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\n\nexport default ChildrenDiffer;\nexport { diff };","/*\nCopyright (c) 2015-present NAVER Corp.\nname: @egjs/react-flicking\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-flicking/tree/master/packages/react-flicking\nversion: 3.3.1\n*/\nimport NativeFlicking, { DEFAULT_OPTIONS, withFlickingMethods } from '@egjs/flicking';\nimport { Component, createElement, version, Children } from 'react';\nimport ListDiffer from '@egjs/list-differ';\nimport ChildrenDiffer from '@egjs/children-differ';\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\n\nvar _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return _assign.apply(this, arguments);\n};\n\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n }\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nvar CloneComponent = /*#__PURE__*/function (_super) {\n __extends(CloneComponent, _super);\n\n function CloneComponent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n var __proto = CloneComponent.prototype;\n\n __proto.render = function () {\n return this.props.children;\n };\n\n return CloneComponent;\n}(Component);\n\nvar FLICKING_PROPS = {\n tag: \"div\",\n viewportTag: \"div\",\n cameraTag: \"div\",\n classPrefix: \"eg-flick\",\n plugins: [],\n onNeedPanel: function onNeedPanel(e) {},\n onMoveStart: function onMoveStart(e) {},\n onMove: function onMove(e) {},\n onMoveEnd: function onMoveEnd(e) {},\n onHoldStart: function onHoldStart(e) {},\n onHoldEnd: function onHoldEnd(e) {},\n onRestore: function onRestore(e) {},\n onSelect: function onSelect(e) {},\n onChange: function onChange(e) {},\n onVisibleChange: function onVisibleChange(e) {}\n};\n\nvar Flicking = /*#__PURE__*/function (_super) {\n __extends(Flicking, _super); // life cycle\n\n\n function Flicking(props) {\n var _this = _super.call(this, props) || this;\n\n _this.state = {\n cloneCount: 0\n };\n _this.options = _assign({}, DEFAULT_OPTIONS, {\n renderExternal: true\n }); // differ\n\n _this.pluginsDiffer = new ListDiffer();\n var options = _this.options;\n\n for (var name in props) {\n if (name in DEFAULT_OPTIONS) {\n options[name] = props[name];\n }\n }\n\n return _this;\n }\n\n var __proto = Flicking.prototype;\n\n __proto.render = function () {\n var _this = this;\n\n var props = this.props;\n /* tslint:disable:naming-convention */\n\n var Tag = props.tag;\n var Viewport = props.viewportTag;\n var Camera = props.cameraTag;\n /* tslint:enable:naming-convention */\n\n var classPrefix = props.classPrefix;\n var attributes = {};\n\n for (var name in props) {\n if (!(name in FLICKING_PROPS) && !(name in DEFAULT_OPTIONS)) {\n attributes[name] = props[name];\n }\n }\n\n return createElement(Tag, _assign({}, attributes, {\n ref: function ref(e) {\n e && (_this.containerElement = e);\n }\n }), createElement(Viewport, {\n className: classPrefix + \"-viewport\"\n }, createElement(Camera, {\n className: classPrefix + \"-camera\",\n ref: function ref(e) {\n e && (_this.cameraElement = e);\n }\n }, this.renderPanels())));\n };\n\n __proto.componentDidUpdate = function () {\n var result = this.childrenDiffer.update(this.getElements());\n this.flicking.sync(result);\n this.checkPlugins();\n this.checkCloneCount();\n };\n\n __proto.componentDidMount = function () {\n var _this = this;\n\n this.childrenDiffer = new ChildrenDiffer(this.getElements());\n this.flicking = new NativeFlicking(this.containerElement, _assign({}, this.options, {\n framework: \"react\",\n frameworkVersion: version\n })).on({\n moveStart: function moveStart(e) {\n return _this.props.onMoveStart(e);\n },\n move: function move(e) {\n return _this.props.onMove(e);\n },\n moveEnd: function moveEnd(e) {\n return _this.props.onMoveEnd(e);\n },\n holdStart: function holdStart(e) {\n return _this.props.onHoldStart(e);\n },\n holdEnd: function holdEnd(e) {\n return _this.props.onHoldEnd(e);\n },\n select: function select(e) {\n return _this.props.onSelect(e);\n },\n needPanel: function needPanel(e) {\n return _this.props.onNeedPanel(e);\n },\n change: function change(e) {\n return _this.props.onChange(e);\n },\n restore: function restore(e) {\n return _this.props.onRestore(e);\n },\n visibleChange: function visibleChange(e) {\n _this.props.onVisibleChange(e);\n\n _this.forceUpdate();\n }\n });\n var children = this.getChildren();\n this.jsxDiffer = new ListDiffer(children.map(function (child) {\n return \"\" + child.key;\n }));\n\n if (this.props.status) {\n this.setStatus(this.props.status);\n }\n\n this.checkPlugins();\n this.checkCloneCount();\n\n if (this.props.renderOnlyVisible) {\n this.forceUpdate();\n }\n };\n\n __proto.componentWillUnmount = function () {\n this.destroy({\n preserveUI: true\n });\n }; // private\n\n\n __proto.checkPlugins = function () {\n var _a = this.pluginsDiffer.update(this.props.plugins),\n list = _a.list,\n added = _a.added,\n removed = _a.removed,\n prevList = _a.prevList;\n\n this.flicking.addPlugins(added.map(function (index) {\n return list[index];\n }));\n this.flicking.removePlugins(removed.map(function (index) {\n return prevList[index];\n }));\n };\n\n __proto.checkCloneCount = function () {\n var cloneCount = this.flicking.getCloneCount();\n\n if (this.state.cloneCount !== cloneCount) {\n this.setState({\n cloneCount: cloneCount\n });\n }\n };\n\n __proto.renderPanels = function () {\n var renderOnlyVisible = this.props.renderOnlyVisible;\n var flicking = this.flicking;\n var reactChildren = this.getChildren();\n var panels;\n\n if (flicking && renderOnlyVisible) {\n var diffResult = this.jsxDiffer.update(reactChildren.map(function (child) {\n return \"\" + child.key;\n }));\n var panelCnt_1 = reactChildren.length;\n flicking.beforeSync(diffResult);\n var indexesToRender = flicking.getRenderingIndexes(diffResult);\n panels = indexesToRender.map(function (index) {\n if (index >= panelCnt_1) {\n var relativeIndex = index % panelCnt_1;\n var cloneIndex = Math.floor(index / panelCnt_1) - 1;\n var origEl = reactChildren[relativeIndex];\n return createElement(CloneComponent, {\n key: \"clone\" + cloneIndex + origEl.key\n }, origEl);\n } else {\n return reactChildren[index];\n }\n });\n } else {\n var cloneCount = this.state.cloneCount;\n panels = reactChildren.slice();\n\n var _loop_1 = function _loop_1(i) {\n panels = panels.concat(reactChildren.map(function (el) {\n return createElement(CloneComponent, {\n key: \"clone\" + i + el.key\n }, el);\n }));\n };\n\n for (var i = 0; i < cloneCount; ++i) {\n _loop_1(i);\n }\n }\n\n return panels;\n };\n\n __proto.getChildren = function () {\n var children = Children.toArray(this.props.children).slice();\n return typeof this.props.lastIndex === \"number\" ? children.slice(0, this.props.lastIndex + 1) : children;\n };\n\n __proto.getElements = function () {\n return this.cameraElement.children;\n };\n\n Flicking.defaultProps = FLICKING_PROPS;\n\n __decorate([withFlickingMethods], Flicking.prototype, \"flicking\");\n\n return Flicking;\n}(Component);\n\nexport default Flicking;","import React, { useRef } from \"react\"\nimport styled from \"styled-components\"\nimport Flicking from \"@egjs/react-flicking\"\nimport { graphql, Link, useStaticQuery } from \"gatsby\"\nimport Img from \"gatsby-image\"\n\nimport { PageSegment, TitleAndDescription } from \"..\"\nimport { GridOneColumn } from \"../../styles\"\n\nimport carouselButtonLeft from \"../../assets/images/carousel-button-left.svg\"\nimport carouselButtonRight from \"../../assets/images/carousel-button-right.svg\"\n\nexport const Features = () => {\n return (\n \n \n \n

\n Check out the amazing products from our Creatives and their stories.\n From Fine Art, Luxury Pet Accessories, Organic Care Products and\n much more... All under one hub, The Creative Hub 301\n

\n
\n \n
\n
\n )\n}\n\nconst ImageGalleryContainer = styled.div`\n width: 100%;\n height: 245px;\n position: relative;\n margin: 10px;\n\n @media (min-width: 768px) {\n height: 400px;\n }\n`\n\nconst SquareImageLink = styled(Link)`\n width: 245px;\n height: 245px;\n\n @media (min-width: 768px) {\n height: 400px;\n width: 400px;\n }\n`\n\nconst GalleryButton = styled.button`\n width: 48px;\n height: 48px;\n background: none;\n border: none;\n outline: none;\n\n cursor: pointer;\n\n :active {\n outline: none;\n }\n`\n\nconst ButtonContainer = styled.div`\n display: flex;\n justify-content: space-between;\n\n width: 100%;\n position: absolute;\n z-index: 1001;\n top: 100px;\n\n @media (min-width: 768px) {\n top: 177px;\n }\n`\n\ntype Features = {\n features: {\n nodes: {\n name: string\n slug: string\n image: any\n id: string\n }[]\n }\n}\n\nconst ImageGallery = () => {\n const ref = useRef(null)\n\n const query = useStaticQuery(graphql`\n query FeatureQuery {\n features: allSanityFeature {\n nodes {\n id\n name\n slug\n image {\n asset {\n fluid(maxWidth: 410) {\n ...GatsbySanityImageFluid\n }\n }\n }\n }\n }\n }\n `)\n\n return (\n \n \n {query.features.nodes.map(node => {\n return (\n \n {node.name}\n \n )\n })}\n \n \n \n {\n ref.current!.prev()\n }}\n />\n \n \n {\n ref.current!.next()\n }}\n />\n \n \n \n )\n}\n","import React from \"react\"\nimport styled from \"styled-components\"\n\nimport { PageSegment, FormStyled, SubmitButton } from \"..\"\nimport { GridOneColumn } from \"../../styles\"\nimport { InputStyled } from \"../Forms\"\n\nimport { useForm } from \"../../utils\"\n\nconst Title = styled.h1`\n margin-top: 60px;\n margin-bottom: 25px;\n font-size: 1.5em;\n text-align: center;\n\n @media (min-width: 768px) {\n margin-top: 130px;\n font-size: 2.5em;\n }\n`\n\nconst Text = styled.h4`\n text-align: center;\n width: 80%;\n margin-bottom: 25px;\n\n @media (min-width: 768px) {\n font-size: 1.5em;\n margin-bottom: 50px;\n }\n`\n\nexport const SubscribeNewsletter = () => {\n return (\n \n \n SUBSCRIBE TO OUR NEWSLETTER\n So you will be kept up to date about our latest events\n \n \n \n )\n}\n\nconst InputStyledNewsletter = styled(InputStyled)`\n height: 2em;\n font-size: 1.3em;\n @media (min-width: 768px) {\n height: 2em;\n font-size: 1.5em;\n }\n`\n\nconst NewsletterForm = () => {\n const { values, updateValue, setValues } = useForm({\n email: \"\",\n })\n\n const handleOnSubmit = () => {\n const data = {\n email: values.email,\n }\n\n fetch(process.env.GATSBY_MAILCHIMP_ENDPOINT!, {\n method: \"POST\",\n mode: \"cors\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n })\n .then(response => response.json())\n .then(data => {\n console.log(\"Success:\", data)\n\n setValues({\n email: \"\",\n })\n })\n .catch(error => {\n console.error(\"Error:\", error)\n })\n }\n\n return (\n {\n e.preventDefault()\n handleOnSubmit()\n }}\n >\n \n\n \n \n )\n}\n","import React from \"react\"\nimport styled from \"styled-components\"\n\nconst TitleAndDescriptionContainer = styled.div<{ rightSide: boolean }>`\n padding-top: 2em;\n width: 85%;\n display: flex;\n flex-direction: column;\n align-items: center;\n\n h1 {\n width: 100%;\n font-weight: 500;\n border-bottom: 2px solid var(--black);\n padding-bottom: 15px;\n }\n p {\n line-height: 2em;\n }\n @media (min-width: 768px) {\n width: 65%;\n justify-self: ${props => (props.rightSide ? \"start\" : \"end\")};\n align-items: ${props => (props.rightSide ? \"flex-end\" : \"flex-start\")};\n\n h1 {\n text-align: ${props => (props.rightSide ? \"end\" : \"start\")};\n }\n p {\n width: 65%;\n }\n }\n`\n\ntype TitleAndDescriptionProps = {\n title: string\n children?: React.ReactNode\n rightSide?: boolean\n className?: string\n with768?:string\n \n}\n\nexport const TitleAndDescription = ({\n title,\n children,\n rightSide = true,\n className,\n}: TitleAndDescriptionProps) => {\n return (\n \n

{title}

\n {children}\n
\n )\n}\n","import React from \"react\"\nimport { Link } from \"gatsby\"\nimport styled from \"styled-components\"\n\nconst PaginationStyles = styled.div`\n display: flex;\n align-content: center;\n align-items: center;\n justify-items: center;\n\n margin: 2rem 0;\n text-align: center;\n & > * {\n color: var(--darkGrey);\n padding: 1rem;\n flex: 1;\n border: 1px solid var(--darkGrey);\n text-decoration: none;\n height: 100%;\n &[aria-current],\n &.current {\n color: var(--white);\n background-color: var(--darkGrey);\n }\n }\n @media (max-width: 800px) {\n .word {\n display: none;\n }\n font-size: 1.4rem;\n }\n\n .disabled-link {\n pointer-events: none;\n color: var(--grey);\n }\n`\n\ntype PaginationProps = {\n pageSize: number\n totalCount: number\n currentPage: number\n skip: number\n base: string\n}\n\nexport function Pagination({\n pageSize,\n totalCount,\n currentPage,\n skip,\n base,\n}: PaginationProps) {\n // make some variables\n const totalPages = Math.ceil(totalCount / pageSize)\n const prevPage = currentPage - 1\n const nextPage = currentPage + 1\n const hasNextPage = nextPage <= totalPages\n const hasPrevPage = prevPage >= 1\n return (\n \n \n ←\n \n {Array.from({ length: totalPages }).map((_, i) => (\n 0 ? i + 1 : \"\"}`}\n key={`page${i}`}\n >\n {i + 1}\n \n ))}\n \n →\n \n \n )\n}\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView; // Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.1\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n var length, i, keys;\n\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n\n for (i = length; i-- !== 0;) {\n if (!equal(a[i], b[i])) return false;\n }\n\n return true;\n } // START: Modifications:\n // 1. Extra `has &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n\n\n var it;\n\n if (hasMap && a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!b.has(i.value[0])) return false;\n }\n\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n }\n\n return true;\n }\n\n if (hasSet && a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!b.has(i.value[0])) return false;\n }\n\n return true;\n } // END: Modifications\n\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n\n for (i = length; i-- !== 0;) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;) {\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n } // END: fast-deep-equal\n // START: react-fast-compare\n // custom handling for DOM elements\n\n\n if (hasElementType && a instanceof Element) return false; // custom handling for React/Preact\n\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n continue;\n } // all other properties should be traversed as usual\n\n\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n } // END: react-fast-compare\n // START: fast-deep-equal\n\n\n return true;\n }\n\n return a !== a && b !== b;\n} // end fast-deep-equal\n\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if ((error.message || '').match(/stack|recursion/i)) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n } // some other error. we should definitely know about these\n\n\n throw error;\n }\n};","import styled from \"styled-components\"\n\nexport const FormStyled = styled.form`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n\n .formBorderBottom {\n border-bottom: 1px solid var(--black);\n }\n`\n\nexport const InputStyled = styled.input`\n display: block;\n background-color: var(--white);\n font-size: 18px;\n width: 80%;\n max-width: 500px;\n color: var(--black);\n padding: 10px;\n border: 1px solid var(--black);\n border-bottom: 0px;\n box-sizing: border-box;\n border-radius: 0;\n :focus {\n outline: none;\n }\n ::placeholder {\n /* Chrome, Firefox, Opera, Safari 10.1+ */\n color: var(--darkGrey);\n opacity: 1; /* Firefox */\n }\n`\n\nexport const SubmitButton = styled.button`\n width: 80%;\n max-width: 500px;\n height: 45px;\n background-color: var(--black);\n color: white;\n border: none;\n text-align: center;\n text-decoration: none;\n display: inline-block;\n outline: none;\n font-size: 1.2em;\n\n cursor: pointer;\n\n :active {\n outline: none;\n background-color: var(--white);\n }\n\n @media (min-width: 768px) {\n height: 56px;\n font-size: 1.5em;\n font-weight: 400;\n }\n`\n","module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjciIGhlaWdodD0iNDYiIHZpZXdCb3g9IjAgMCAyNyA0NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xLjk5OTk1IDIyLjYzNTRMMjMuNjM1NCAxTDI1Ljc1NjcgMy4xMjEzMkw1LjY1ODUzIDIzLjIxOTVMMjUuMTg5MiA0Mi43NTAxTDIzLjA2NzkgNDQuODcxNUwxLjQzMjUgMjMuMjM2MUwyLjAxNjU1IDIyLjY1MkwxLjk5OTk1IDIyLjYzNTRaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjMuNjM1NCAxTDIzLjk4ODkgMC42NDY0NDdMMjMuNjM1NCAwLjI5Mjg5M0wyMy4yODE4IDAuNjQ2NDQ3TDIzLjYzNTQgMVpNMS45OTk5NSAyMi42MzU0TDEuNjQ2NCAyMi4yODE4TDEuMjkyODQgMjIuNjM1NEwxLjY0NjQxIDIyLjk4OUwxLjk5OTk1IDIyLjYzNTRaTTI1Ljc1NjcgMy4xMjEzMkwyNi4xMTAyIDMuNDc0ODdMMjYuNDYzOCAzLjEyMTMyTDI2LjExMDIgMi43Njc3N0wyNS43NTY3IDMuMTIxMzJaTTUuNjU4NTMgMjMuMjE5NUw1LjMwNDk4IDIyLjg2NTlMNC45NTE0MiAyMy4yMTk1TDUuMzA0OTggMjMuNTczTDUuNjU4NTMgMjMuMjE5NVpNMjUuMTg5MiA0Mi43NTAxTDI1LjU0MjggNDMuMTAzN0wyNS44OTYzIDQyLjc1MDFMMjUuNTQyOCA0Mi4zOTY2TDI1LjE4OTIgNDIuNzUwMVpNMjMuMDY3OSA0NC44NzE1TDIyLjcxNDMgNDUuMjI1TDIzLjA2NzkgNDUuNTc4NkwyMy40MjE1IDQ1LjIyNUwyMy4wNjc5IDQ0Ljg3MTVaTTEuNDMyNSAyMy4yMzYxTDEuMDc4OTQgMjIuODgyNUwwLjcyNTM4OSAyMy4yMzYxTDEuMDc4OTQgMjMuNTg5NkwxLjQzMjUgMjMuMjM2MVpNMi4wMTY1NSAyMi42NTJMMi4zNzAxMSAyMy4wMDU2TDIuNzIzNjcgMjIuNjUyTDIuMzcwMSAyMi4yOTg0TDIuMDE2NTUgMjIuNjUyWk0yMy4yODE4IDAuNjQ2NDQ3TDEuNjQ2NCAyMi4yODE4TDIuMzUzNSAyMi45ODlMMjMuOTg4OSAxLjM1MzU1TDIzLjI4MTggMC42NDY0NDdaTTI2LjExMDIgMi43Njc3N0wyMy45ODg5IDAuNjQ2NDQ3TDIzLjI4MTggMS4zNTM1NUwyNS40MDMxIDMuNDc0ODdMMjYuMTEwMiAyLjc2Nzc3Wk02LjAxMjA5IDIzLjU3M0wyNi4xMTAyIDMuNDc0ODdMMjUuNDAzMSAyLjc2Nzc3TDUuMzA0OTggMjIuODY1OUw2LjAxMjA5IDIzLjU3M1pNNS4zMDQ5OCAyMy41NzNMMjQuODM1NyA0My4xMDM3TDI1LjU0MjggNDIuMzk2Nkw2LjAxMjA5IDIyLjg2NTlMNS4zMDQ5OCAyMy41NzNaTTI0LjgzNTcgNDIuMzk2NkwyMi43MTQzIDQ0LjUxNzlMMjMuNDIxNSA0NS4yMjVMMjUuNTQyOCA0My4xMDM3TDI0LjgzNTcgNDIuMzk2NlpNMjMuNDIxNSA0NC41MTc5TDEuNzg2MDUgMjIuODgyNUwxLjA3ODk0IDIzLjU4OTZMMjIuNzE0MyA0NS4yMjVMMjMuNDIxNSA0NC41MTc5Wk0xLjc4NjA1IDIzLjU4OTZMMi4zNzAxMSAyMy4wMDU2TDEuNjYzIDIyLjI5ODVMMS4wNzg5NCAyMi44ODI1TDEuNzg2MDUgMjMuNTg5NlpNMS42NDY0MSAyMi45ODlMMS42NjMwMSAyMy4wMDU2TDIuMzcwMSAyMi4yOTg0TDIuMzUzNSAyMi4yODE4TDEuNjQ2NDEgMjIuOTg5WiIgZmlsbD0iI0U1RTVFNSIvPgo8L3N2Zz4K\"","import PropTypes from 'prop-types';\nimport withSideEffect from 'react-side-effect';\nimport isEqual from 'react-fast-compare';\nimport React from 'react';\nimport objectAssign from 'object-assign';\nvar ATTRIBUTE_NAMES = {\n BODY: \"bodyAttributes\",\n HTML: \"htmlAttributes\",\n TITLE: \"titleAttributes\"\n};\nvar TAG_NAMES = {\n BASE: \"base\",\n BODY: \"body\",\n HEAD: \"head\",\n HTML: \"html\",\n LINK: \"link\",\n META: \"meta\",\n NOSCRIPT: \"noscript\",\n SCRIPT: \"script\",\n STYLE: \"style\",\n TITLE: \"title\"\n};\nvar VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n return TAG_NAMES[name];\n});\nvar TAG_PROPERTIES = {\n CHARSET: \"charset\",\n CSS_TEXT: \"cssText\",\n HREF: \"href\",\n HTTPEQUIV: \"http-equiv\",\n INNER_HTML: \"innerHTML\",\n ITEM_PROP: \"itemprop\",\n NAME: \"name\",\n PROPERTY: \"property\",\n REL: \"rel\",\n SRC: \"src\",\n TARGET: \"target\"\n};\nvar REACT_TAG_MAP = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n};\nvar HELMET_PROPS = {\n DEFAULT_TITLE: \"defaultTitle\",\n DEFER: \"defer\",\n ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n TITLE_TEMPLATE: \"titleTemplate\"\n};\nvar HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key]] = key;\n return obj;\n}, {});\nvar SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\nvar HELMET_ATTRIBUTE = \"data-react-helmet\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\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 return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _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\nvar inherits = function inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (encode === false) {\n return String(str);\n }\n\n return String(str).replace(/&/g, \"&\").replace(//g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n var innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE);\n var innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n\n if (innermostTemplate && innermostTitle) {\n // use function arg to avoid need to escape $ characters\n return innermostTemplate.replace(/%s/g, function () {\n return Array.isArray(innermostTitle) ? innermostTitle.join(\"\") : innermostTitle;\n });\n }\n\n var innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n return getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n return propsList.filter(function (props) {\n return typeof props[tagType] !== \"undefined\";\n }).map(function (props) {\n return props[tagType];\n }).reduce(function (tagAttrs, current) {\n return _extends({}, tagAttrs, current);\n }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n return propsList.filter(function (props) {\n return typeof props[TAG_NAMES.BASE] !== \"undefined\";\n }).map(function (props) {\n return props[TAG_NAMES.BASE];\n }).reverse().reduce(function (innermostBaseTag, tag) {\n if (!innermostBaseTag.length) {\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n return innermostBaseTag.concat(tag);\n }\n }\n }\n\n return innermostBaseTag;\n }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n // Calculate list of tags, giving priority innermost component (end of the propslist)\n var approvedSeenTags = {};\n return propsList.filter(function (props) {\n if (Array.isArray(props[tagName])) {\n return true;\n }\n\n if (typeof props[tagName] !== \"undefined\") {\n warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n }\n\n return false;\n }).map(function (props) {\n return props[tagName];\n }).reverse().reduce(function (approvedTags, instanceTags) {\n var instanceSeenTags = {};\n instanceTags.filter(function (tag) {\n var primaryAttributeKey = void 0;\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase(); // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n primaryAttributeKey = lowerCaseAttributeKey;\n } // Special case for innerHTML which doesn't work lowercased\n\n\n if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === TAG_PROPERTIES.INNER_HTML || attributeKey === TAG_PROPERTIES.CSS_TEXT || attributeKey === TAG_PROPERTIES.ITEM_PROP)) {\n primaryAttributeKey = attributeKey;\n }\n }\n\n if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n return false;\n }\n\n var value = tag[primaryAttributeKey].toLowerCase();\n\n if (!approvedSeenTags[primaryAttributeKey]) {\n approvedSeenTags[primaryAttributeKey] = {};\n }\n\n if (!instanceSeenTags[primaryAttributeKey]) {\n instanceSeenTags[primaryAttributeKey] = {};\n }\n\n if (!approvedSeenTags[primaryAttributeKey][value]) {\n instanceSeenTags[primaryAttributeKey][value] = true;\n return true;\n }\n\n return false;\n }).reverse().forEach(function (tag) {\n return approvedTags.push(tag);\n }); // Update seen tags with tags from this instance\n\n var keys = Object.keys(instanceSeenTags);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var tagUnion = objectAssign({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n approvedSeenTags[attributeKey] = tagUnion;\n }\n\n return approvedTags;\n }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n for (var i = propsList.length - 1; i >= 0; i--) {\n var props = propsList[i];\n\n if (props.hasOwnProperty(property)) {\n return props[property];\n }\n }\n\n return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return {\n baseTag: getBaseTagFromPropsList([TAG_PROPERTIES.HREF, TAG_PROPERTIES.TARGET], propsList),\n bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList),\n defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList),\n linkTags: getTagsFromPropsList(TAG_NAMES.LINK, [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF], propsList),\n metaTags: getTagsFromPropsList(TAG_NAMES.META, [TAG_PROPERTIES.NAME, TAG_PROPERTIES.CHARSET, TAG_PROPERTIES.HTTPEQUIV, TAG_PROPERTIES.PROPERTY, TAG_PROPERTIES.ITEM_PROP], propsList),\n noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(TAG_NAMES.SCRIPT, [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML], propsList),\n styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.TITLE, propsList)\n };\n};\n\nvar rafPolyfill = function () {\n var clock = Date.now();\n return function (callback) {\n var currentTime = Date.now();\n\n if (currentTime - clock > 16) {\n clock = currentTime;\n callback(currentTime);\n } else {\n setTimeout(function () {\n rafPolyfill(callback);\n }, 0);\n }\n };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n if (_helmetCallback) {\n cancelAnimationFrame(_helmetCallback);\n }\n\n if (newState.defer) {\n _helmetCallback = requestAnimationFrame(function () {\n commitTagChanges(newState, function () {\n _helmetCallback = null;\n });\n });\n } else {\n commitTagChanges(newState);\n _helmetCallback = null;\n }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n var baseTag = newState.baseTag,\n bodyAttributes = newState.bodyAttributes,\n htmlAttributes = newState.htmlAttributes,\n linkTags = newState.linkTags,\n metaTags = newState.metaTags,\n noscriptTags = newState.noscriptTags,\n onChangeClientState = newState.onChangeClientState,\n scriptTags = newState.scriptTags,\n styleTags = newState.styleTags,\n title = newState.title,\n titleAttributes = newState.titleAttributes;\n updateAttributes(TAG_NAMES.BODY, bodyAttributes);\n updateAttributes(TAG_NAMES.HTML, htmlAttributes);\n updateTitle(title, titleAttributes);\n var tagUpdates = {\n baseTag: updateTags(TAG_NAMES.BASE, baseTag),\n linkTags: updateTags(TAG_NAMES.LINK, linkTags),\n metaTags: updateTags(TAG_NAMES.META, metaTags),\n noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags),\n scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags),\n styleTags: updateTags(TAG_NAMES.STYLE, styleTags)\n };\n var addedTags = {};\n var removedTags = {};\n Object.keys(tagUpdates).forEach(function (tagType) {\n var _tagUpdates$tagType = tagUpdates[tagType],\n newTags = _tagUpdates$tagType.newTags,\n oldTags = _tagUpdates$tagType.oldTags;\n\n if (newTags.length) {\n addedTags[tagType] = newTags;\n }\n\n if (oldTags.length) {\n removedTags[tagType] = tagUpdates[tagType].oldTags;\n }\n });\n cb && cb();\n onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n if (typeof title !== \"undefined\" && document.title !== title) {\n document.title = flattenArray(title);\n }\n\n updateAttributes(TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n var elementTag = document.getElementsByTagName(tagName)[0];\n\n if (!elementTag) {\n return;\n }\n\n var helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n var attributesToRemove = [].concat(helmetAttributes);\n var attributeKeys = Object.keys(attributes);\n\n for (var i = 0; i < attributeKeys.length; i++) {\n var attribute = attributeKeys[i];\n var value = attributes[attribute] || \"\";\n\n if (elementTag.getAttribute(attribute) !== value) {\n elementTag.setAttribute(attribute, value);\n }\n\n if (helmetAttributes.indexOf(attribute) === -1) {\n helmetAttributes.push(attribute);\n }\n\n var indexToSave = attributesToRemove.indexOf(attribute);\n\n if (indexToSave !== -1) {\n attributesToRemove.splice(indexToSave, 1);\n }\n }\n\n for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n elementTag.removeAttribute(attributesToRemove[_i]);\n }\n\n if (helmetAttributes.length === attributesToRemove.length) {\n elementTag.removeAttribute(HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\n\nvar updateTags = function updateTags(type, tags) {\n var headElement = document.head || document.querySelector(TAG_NAMES.HEAD);\n var tagNodes = headElement.querySelectorAll(type + \"[\" + HELMET_ATTRIBUTE + \"]\");\n var oldTags = Array.prototype.slice.call(tagNodes);\n var newTags = [];\n var indexToDelete = void 0;\n\n if (tags && tags.length) {\n tags.forEach(function (tag) {\n var newElement = document.createElement(type);\n\n for (var attribute in tag) {\n if (tag.hasOwnProperty(attribute)) {\n if (attribute === TAG_PROPERTIES.INNER_HTML) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === TAG_PROPERTIES.CSS_TEXT) {\n if (newElement.styleSheet) {\n newElement.styleSheet.cssText = tag.cssText;\n } else {\n newElement.appendChild(document.createTextNode(tag.cssText));\n }\n } else {\n var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n newElement.setAttribute(attribute, value);\n }\n }\n }\n\n newElement.setAttribute(HELMET_ATTRIBUTE, \"true\"); // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n\n if (oldTags.some(function (existingTag, index) {\n indexToDelete = index;\n return newElement.isEqualNode(existingTag);\n })) {\n oldTags.splice(indexToDelete, 1);\n } else {\n newTags.push(newElement);\n }\n });\n }\n\n oldTags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n newTags.forEach(function (tag) {\n return headElement.appendChild(tag);\n });\n return {\n oldTags: oldTags,\n newTags: newTags\n };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n return Object.keys(attributes).reduce(function (str, key) {\n var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n return str ? str + \" \" + attr : attr;\n }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n var attributeString = generateElementAttributesAsString(attributes);\n var flattenedTitle = flattenArray(title);\n return attributeString ? \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\" : \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n return tags.reduce(function (str, tag) {\n var attributeHtml = Object.keys(tag).filter(function (attribute) {\n return !(attribute === TAG_PROPERTIES.INNER_HTML || attribute === TAG_PROPERTIES.CSS_TEXT);\n }).reduce(function (string, attribute) {\n var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n return string ? string + \" \" + attr : attr;\n }, \"\");\n var tagContent = tag.innerHTML || tag.cssText || \"\";\n var isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n return str + \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"\");\n }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Object.keys(attributes).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key] || key] = attributes[key];\n return obj;\n }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Object.keys(props).reduce(function (obj, key) {\n obj[HTML_TAG_MAP[key] || key] = props[key];\n return obj;\n }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n var _initProps; // assigning into an array to define toString function on it\n\n\n var initProps = (_initProps = {\n key: title\n }, _initProps[HELMET_ATTRIBUTE] = true, _initProps);\n var props = convertElementAttributestoReactProps(attributes, initProps);\n return [React.createElement(TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n return tags.map(function (tag, i) {\n var _mappedTag;\n\n var mappedTag = (_mappedTag = {\n key: i\n }, _mappedTag[HELMET_ATTRIBUTE] = true, _mappedTag);\n Object.keys(tag).forEach(function (attribute) {\n var mappedAttribute = REACT_TAG_MAP[attribute] || attribute;\n\n if (mappedAttribute === TAG_PROPERTIES.INNER_HTML || mappedAttribute === TAG_PROPERTIES.CSS_TEXT) {\n var content = tag.innerHTML || tag.cssText;\n mappedTag.dangerouslySetInnerHTML = {\n __html: content\n };\n } else {\n mappedTag[mappedAttribute] = tag[attribute];\n }\n });\n return React.createElement(type, mappedTag);\n });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n switch (type) {\n case TAG_NAMES.TITLE:\n return {\n toComponent: function toComponent() {\n return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n },\n toString: function toString() {\n return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n }\n };\n\n case ATTRIBUTE_NAMES.BODY:\n case ATTRIBUTE_NAMES.HTML:\n return {\n toComponent: function toComponent() {\n return convertElementAttributestoReactProps(tags);\n },\n toString: function toString() {\n return generateElementAttributesAsString(tags);\n }\n };\n\n default:\n return {\n toComponent: function toComponent() {\n return generateTagsAsReactComponent(type, tags);\n },\n toString: function toString() {\n return generateTagsAsString(type, tags, encode);\n }\n };\n }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n var baseTag = _ref.baseTag,\n bodyAttributes = _ref.bodyAttributes,\n encode = _ref.encode,\n htmlAttributes = _ref.htmlAttributes,\n linkTags = _ref.linkTags,\n metaTags = _ref.metaTags,\n noscriptTags = _ref.noscriptTags,\n scriptTags = _ref.scriptTags,\n styleTags = _ref.styleTags,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? \"\" : _ref$title,\n titleAttributes = _ref.titleAttributes;\n return {\n base: getMethodsForTag(TAG_NAMES.BASE, baseTag, encode),\n bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode),\n meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode),\n noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode),\n style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode),\n title: getMethodsForTag(TAG_NAMES.TITLE, {\n title: title,\n titleAttributes: titleAttributes\n }, encode)\n };\n};\n\nvar Helmet = function Helmet(Component) {\n var _class, _temp;\n\n return _temp = _class = function (_React$Component) {\n inherits(HelmetWrapper, _React$Component);\n\n function HelmetWrapper() {\n classCallCheck(this, HelmetWrapper);\n return possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !isEqual(this.props, nextProps);\n };\n\n HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n if (!nestedChildren) {\n return null;\n }\n\n switch (child.type) {\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.NOSCRIPT:\n return {\n innerHTML: nestedChildren\n };\n\n case TAG_NAMES.STYLE:\n return {\n cssText: nestedChildren\n };\n }\n\n throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n };\n\n HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n var _babelHelpers$extends;\n\n var child = _ref.child,\n arrayTypeChildren = _ref.arrayTypeChildren,\n newChildProps = _ref.newChildProps,\n nestedChildren = _ref.nestedChildren;\n return _extends({}, arrayTypeChildren, (_babelHelpers$extends = {}, _babelHelpers$extends[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _babelHelpers$extends));\n };\n\n HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n var _babelHelpers$extends2, _babelHelpers$extends3;\n\n var child = _ref2.child,\n newProps = _ref2.newProps,\n newChildProps = _ref2.newChildProps,\n nestedChildren = _ref2.nestedChildren;\n\n switch (child.type) {\n case TAG_NAMES.TITLE:\n return _extends({}, newProps, (_babelHelpers$extends2 = {}, _babelHelpers$extends2[child.type] = nestedChildren, _babelHelpers$extends2.titleAttributes = _extends({}, newChildProps), _babelHelpers$extends2));\n\n case TAG_NAMES.BODY:\n return _extends({}, newProps, {\n bodyAttributes: _extends({}, newChildProps)\n });\n\n case TAG_NAMES.HTML:\n return _extends({}, newProps, {\n htmlAttributes: _extends({}, newChildProps)\n });\n }\n\n return _extends({}, newProps, (_babelHelpers$extends3 = {}, _babelHelpers$extends3[child.type] = _extends({}, newChildProps), _babelHelpers$extends3));\n };\n\n HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n var newFlattenedProps = _extends({}, newProps);\n\n Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n var _babelHelpers$extends4;\n\n newFlattenedProps = _extends({}, newFlattenedProps, (_babelHelpers$extends4 = {}, _babelHelpers$extends4[arrayChildName] = arrayTypeChildren[arrayChildName], _babelHelpers$extends4));\n });\n return newFlattenedProps;\n };\n\n HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!VALID_TAG_NAMES.some(function (name) {\n return child.type === name;\n })) {\n if (typeof child.type === \"function\") {\n return warn(\"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.\");\n }\n\n return warn(\"Only elements types \" + VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n }\n\n if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n return typeof nestedChild !== \"string\";\n }))) {\n throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``} ) Refer to our API for more information.\");\n }\n }\n\n return true;\n };\n\n HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n var _this2 = this;\n\n var arrayTypeChildren = {};\n React.Children.forEach(children, function (child) {\n if (!child || !child.props) {\n return;\n }\n\n var _child$props = child.props,\n nestedChildren = _child$props.children,\n childProps = objectWithoutProperties(_child$props, [\"children\"]);\n var newChildProps = convertReactPropstoHtmlAttributes(childProps);\n\n _this2.warnOnInvalidChildren(child, nestedChildren);\n\n switch (child.type) {\n case TAG_NAMES.LINK:\n case TAG_NAMES.META:\n case TAG_NAMES.NOSCRIPT:\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.STYLE:\n arrayTypeChildren = _this2.flattenArrayTypeChildren({\n child: child,\n arrayTypeChildren: arrayTypeChildren,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n\n default:\n newProps = _this2.mapObjectTypeChildren({\n child: child,\n newProps: newProps,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n }\n });\n newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n return newProps;\n };\n\n HelmetWrapper.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n props = objectWithoutProperties(_props, [\"children\"]);\n\n var newProps = _extends({}, props);\n\n if (children) {\n newProps = this.mapChildrenToProps(children, newProps);\n }\n\n return React.createElement(Component, newProps);\n };\n\n createClass(HelmetWrapper, null, [{\n key: \"canUseDOM\",\n // Component.peek comes from react-side-effect:\n // For testing, you may use a static peek() method available on the returned component.\n // It lets you get the current state without resetting the mounted instance stack.\n // Don’t use it for anything other than testing.\n\n /**\n * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n * @param {Object} bodyAttributes: {\"className\": \"root\"}\n * @param {String} defaultTitle: \"Default Title\"\n * @param {Boolean} defer: true\n * @param {Boolean} encodeSpecialCharacters: true\n * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n * @param {Array} noscript: [{\"innerHTML\": \" console.log(newState)\"\n * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n * @param {String} title: \"Title\"\n * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n * @param {String} titleTemplate: \"MySite.com - %s\"\n */\n set: function set$$1(canUseDOM) {\n Component.canUseDOM = canUseDOM;\n }\n }]);\n return HelmetWrapper;\n }(React.Component), _class.propTypes = {\n base: PropTypes.object,\n bodyAttributes: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n defaultTitle: PropTypes.string,\n defer: PropTypes.bool,\n encodeSpecialCharacters: PropTypes.bool,\n htmlAttributes: PropTypes.object,\n link: PropTypes.arrayOf(PropTypes.object),\n meta: PropTypes.arrayOf(PropTypes.object),\n noscript: PropTypes.arrayOf(PropTypes.object),\n onChangeClientState: PropTypes.func,\n script: PropTypes.arrayOf(PropTypes.object),\n style: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string,\n titleAttributes: PropTypes.object,\n titleTemplate: PropTypes.string\n }, _class.defaultProps = {\n defer: true,\n encodeSpecialCharacters: true\n }, _class.peek = Component.peek, _class.rewind = function () {\n var mappedState = Component.rewind();\n\n if (!mappedState) {\n // provide fallback if mappedState is undefined\n mappedState = mapStateOnServer({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: true,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n });\n }\n\n return mappedState;\n }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n return null;\n};\n\nvar HelmetSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\nexport default HelmetExport;\nexport { HelmetExport as Helmet };","/*! Hammer.JS - v2.0.17-rc - 2019-12-16\n * http://naver.github.io/egjs\n *\n * Forked By Naver egjs\n * Copyright (c) hammerjs\n * Licensed under the MIT license */\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\n\n\nvar assign;\n\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\nvar assign$1 = assign;\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = typeof document === \"undefined\" ? {\n style: {}\n} : document.createElement('div');\nvar TYPE_FUNCTION = 'function';\nvar round = Math.round,\n abs = Math.abs;\nvar now = Date.now;\n/**\n * @private\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\n\nfunction prefixed(obj, property) {\n var prefix;\n var prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n var i = 0;\n\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = prefix ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n\n i++;\n }\n\n return undefined;\n}\n/* eslint-disable no-new-func, no-nested-ternary */\n\n\nvar win;\n\nif (typeof window === \"undefined\") {\n // window is undefined in node.js\n win = {};\n} else {\n win = window;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n\n var touchMap = {};\n var cssSupports = win.CSS && win.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) {\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n return touchMap[val] = cssSupports ? win.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\n\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\nvar SUPPORT_TOUCH = ('ontouchstart' in win);\nvar SUPPORT_POINTER_EVENTS = prefixed(win, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\nvar COMPUTE_INTERVAL = 25;\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n/**\n * @private\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\n\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n/**\n * @private\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\n\n\nfunction boolOrFn(val, args) {\n if (typeof val === TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n\n return val;\n}\n/**\n * @private\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\n\n\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n/**\n * @private\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\n\n\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n } // pan-x OR pan-y\n\n\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n } // manipulation\n\n\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n/**\n * @private\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\n\n\nvar TouchAction = /*#__PURE__*/function () {\n function TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n }\n /**\n * @private\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n\n\n var _proto = TouchAction.prototype;\n\n _proto.set = function set(value) {\n // find out the touch-action by the event handlers\n if (value === TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n\n this.actions = value.toLowerCase().trim();\n };\n /**\n * @private\n * just re-set the touchAction value\n */\n\n\n _proto.update = function update() {\n this.set(this.manager.options.touchAction);\n };\n /**\n * @private\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n\n\n _proto.compute = function compute() {\n var actions = [];\n each(this.manager.recognizers, function (recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n };\n /**\n * @private\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n\n\n _proto.preventDefaults = function preventDefaults(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection; // if the touch action did prevented once this session\n\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n // do not prevent defaults if this is a tap gesture\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n return this.preventSrc(srcEvent);\n }\n };\n /**\n * @private\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n\n\n _proto.preventSrc = function preventSrc(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n };\n\n return TouchAction;\n}();\n/**\n * @private\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\n\n\nfunction hasParent(node, parent) {\n while (node) {\n if (node === parent) {\n return true;\n }\n\n node = node.parentNode;\n }\n\n return false;\n}\n/**\n * @private\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\n\n\nfunction getCenter(pointers) {\n var pointersLength = pointers.length; // no need to loop when only one touch\n\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0;\n var y = 0;\n var i = 0;\n\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n/**\n * @private\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\n\n\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n/**\n * @private\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\n\n\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.sqrt(x * x + y * y);\n}\n/**\n * @private\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\n\n\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n/**\n * @private\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\n\n\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center; // let { offsetDelta:offset = {}, prevDelta = {}, prevInput = {} } = session;\n // jscs throwing error on defalut destructured values and without defaults tests fail\n\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n/**\n * @private\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\n\n\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n/**\n * @private\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\n\n\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n/**\n * @private\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\n\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 * @private\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\n\n\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input;\n var deltaTime = input.timeStamp - last.timeStamp;\n var velocity;\n var velocityX;\n var velocityY;\n var direction;\n\n if (input.eventType !== INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n/**\n* @private\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\n\n\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length; // store the first input to calculate the distance and direction\n\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n } // to compute scale and rotation we need to store the multiple touches\n\n\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput,\n firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y;\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;\n computeIntervalInputData(session, input); // find the correct target\n\n var target = manager.element;\n var srcEvent = input.srcEvent;\n var srcEventTarget;\n\n if (srcEvent.composedPath) {\n srcEventTarget = srcEvent.composedPath()[0];\n } else if (srcEvent.path) {\n srcEventTarget = srcEvent.path[0];\n } else {\n srcEventTarget = srcEvent.target;\n }\n\n if (hasParent(srcEventTarget, target)) {\n target = srcEventTarget;\n }\n\n input.target = target;\n}\n/**\n * @private\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\n\n\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n } // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n\n\n input.eventType = eventType; // compute scale, rotation etc\n\n computeInputData(manager, input); // emit secret event\n\n manager.emit('hammer.input', input);\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n/**\n * @private\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\n\n\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n/**\n * @private\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\n\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.addEventListener(type, handler, false);\n });\n}\n/**\n * @private\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\n\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.removeEventListener(type, handler, false);\n });\n}\n/**\n * @private\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\n\n\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return doc.defaultView || doc.parentWindow || window;\n}\n/**\n * @private\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\n\n\nvar Input = /*#__PURE__*/function () {\n function Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget; // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n\n this.domHandler = function (ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n }\n /**\n * @private\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n\n\n var _proto = Input.prototype;\n\n _proto.handler = function handler() {};\n /**\n * @private\n * bind the events\n */\n\n\n _proto.init = function init() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n };\n /**\n * @private\n * unbind the events\n */\n\n\n _proto.destroy = function destroy() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n };\n\n return Input;\n}();\n/**\n * @private\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\n\n\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n\n while (i < src.length) {\n if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n // do not use === here, test fails\n return i;\n }\n\n i++;\n }\n\n return -1;\n }\n}\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n}; // in IE10 the pointer types is defined as an enum\n\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n\n};\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; // IE10 has prefixed support, and case-sensitive\n\nif (win.MSPointerEvent && !win.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n/**\n * @private\n * Pointer events input\n * @constructor\n * @extends Input\n */\n\n\nvar PointerEventInput = /*#__PURE__*/function (_Input) {\n _inheritsLoose(PointerEventInput, _Input);\n\n function PointerEventInput() {\n var _this;\n\n var proto = PointerEventInput.prototype;\n proto.evEl = POINTER_ELEMENT_EVENTS;\n proto.evWin = POINTER_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.store = _this.manager.session.pointerEvents = [];\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = PointerEventInput.prototype;\n\n _proto.handler = function handler(ev) {\n var store = this.store;\n var removePointer = false;\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n var isTouch = pointerType === INPUT_TYPE_TOUCH; // get index of the event in the store\n\n var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down\n\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n } // it not found, so the pointer hasn't been down (so it's probably a hover)\n\n\n if (storeIndex < 0) {\n return;\n } // update the event in the store\n\n\n store[storeIndex] = ev;\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n };\n\n return PointerEventInput;\n}(Input);\n/**\n * @private\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\n\n\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n/**\n * @private\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\n\n\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function (a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\n\nvar TouchInput = /*#__PURE__*/function (_Input) {\n _inheritsLoose(TouchInput, _Input);\n\n function TouchInput() {\n var _this;\n\n TouchInput.prototype.evTarget = TOUCH_TARGET_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.targetIds = {}; // this.evTarget = TOUCH_TARGET_EVENTS;\n\n return _this;\n }\n\n var _proto = TouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n };\n\n return TouchInput;\n}(Input);\n\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds; // when there is only one touch, the process can be simplified\n\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i;\n var targetTouches;\n var changedTouches = toArray(ev.changedTouches);\n var changedTargetTouches = [];\n var target = this.target; // get target touches from touches\n\n targetTouches = allTouches.filter(function (touch) {\n return hasParent(touch.target, target);\n }); // collect touches\n\n if (type === INPUT_START) {\n i = 0;\n\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n } // filter changed touches to only contain touches that exist in the collected target ids\n\n\n i = 0;\n\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n } // cleanup removed touches\n\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n/**\n * @private\n * Mouse events input\n * @constructor\n * @extends Input\n */\n\nvar MouseInput = /*#__PURE__*/function (_Input) {\n _inheritsLoose(MouseInput, _Input);\n\n function MouseInput() {\n var _this;\n\n var proto = MouseInput.prototype;\n proto.evEl = MOUSE_ELEMENT_EVENTS;\n proto.evWin = MOUSE_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.pressed = false; // mousedown state\n\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = MouseInput.prototype;\n\n _proto.handler = function handler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down\n\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n } // mouse must be down\n\n\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n };\n\n return MouseInput;\n}(Input);\n/**\n * @private\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction setLastTouch(eventData) {\n var _eventData$changedPoi = eventData.changedPointers,\n touch = _eventData$changedPoi[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {\n x: touch.clientX,\n y: touch.clientY\n };\n var lts = this.lastTouches;\n this.lastTouches.push(lastTouch);\n\n var removeLastTouch = function removeLastTouch() {\n var i = lts.indexOf(lastTouch);\n\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX;\n var y = eventData.srcEvent.clientY;\n\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x);\n var dy = Math.abs(y - t.y);\n\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n\n return false;\n}\n\nvar TouchMouseInput = /*#__PURE__*/function () {\n var TouchMouseInput = /*#__PURE__*/function (_Input) {\n _inheritsLoose(TouchMouseInput, _Input);\n\n function TouchMouseInput(_manager, callback) {\n var _this;\n\n _this = _Input.call(this, _manager, callback) || this;\n\n _this.handler = function (manager, inputEvent, inputData) {\n var isTouch = inputData.pointerType === INPUT_TYPE_TOUCH;\n var isMouse = inputData.pointerType === INPUT_TYPE_MOUSE;\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n } // when we're in a touch event, record touches to de-dupe synthetic mouse event\n\n\n if (isTouch) {\n recordTouches.call(_assertThisInitialized(_assertThisInitialized(_this)), inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(_assertThisInitialized(_assertThisInitialized(_this)), inputData)) {\n return;\n }\n\n _this.callback(manager, inputEvent, inputData);\n };\n\n _this.touch = new TouchInput(_this.manager, _this.handler);\n _this.mouse = new MouseInput(_this.manager, _this.handler);\n _this.primaryTouch = null;\n _this.lastTouches = [];\n return _this;\n }\n /**\n * @private\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n\n\n var _proto = TouchMouseInput.prototype;\n /**\n * @private\n * remove the event listeners\n */\n\n _proto.destroy = function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n };\n\n return TouchMouseInput;\n }(Input);\n\n return TouchMouseInput;\n}();\n/**\n * @private\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\n\n\nfunction createInputInstance(manager) {\n var Type; // let inputClass = manager.options.inputClass;\n\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n\n return new Type(manager, inputHandler);\n}\n/**\n * @private\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\n\n\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n\n return false;\n}\n\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n/**\n * @private\n * get a unique id\n * @returns {number} uniqueId\n */\n\nvar _uniqueId = 1;\n\nfunction uniqueId() {\n return _uniqueId++;\n}\n/**\n * @private\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\n\n\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n\n if (manager) {\n return manager.get(otherRecognizer);\n }\n\n return otherRecognizer;\n}\n/**\n * @private\n * get a usable string, used as event postfix\n * @param {constant} state\n * @returns {String} state\n */\n\n\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n\n return '';\n}\n/**\n * @private\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\n\n/**\n * @private\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\n\n\nvar Recognizer = /*#__PURE__*/function () {\n function Recognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n this.options = _extends({\n enable: true\n }, options);\n this.id = uniqueId();\n this.manager = null; // default is enable true\n\n this.state = STATE_POSSIBLE;\n this.simultaneous = {};\n this.requireFail = [];\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n\n\n var _proto = Recognizer.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state\n\n this.manager && this.manager.touchAction.update();\n return this;\n };\n /**\n * @private\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.recognizeWith = function recognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n\n return this;\n };\n /**\n * @private\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.dropRecognizeWith = function dropRecognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n };\n /**\n * @private\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.requireFailure = function requireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n\n return this;\n };\n /**\n * @private\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.dropRequireFailure = function dropRequireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n\n return this;\n };\n /**\n * @private\n * has require failures boolean\n * @returns {boolean}\n */\n\n\n _proto.hasRequireFailures = function hasRequireFailures() {\n return this.requireFail.length > 0;\n };\n /**\n * @private\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n\n\n _proto.canRecognizeWith = function canRecognizeWith(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n };\n /**\n * @private\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n\n\n _proto.emit = function emit(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n } // 'panstart' and 'panmove'\n\n\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) {\n // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n } // panend and pancancel\n\n\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n };\n /**\n * @private\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n\n\n _proto.tryEmit = function tryEmit(input) {\n if (this.canEmit()) {\n return this.emit(input);\n } // it's failing anyway\n\n\n this.state = STATE_FAILED;\n };\n /**\n * @private\n * can we emit?\n * @returns {boolean}\n */\n\n\n _proto.canEmit = function canEmit() {\n var i = 0;\n\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n\n i++;\n }\n\n return true;\n };\n /**\n * @private\n * update the recognizer\n * @param {Object} inputData\n */\n\n\n _proto.recognize = function recognize(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign$1({}, inputData); // is is enabled and allow recognizing?\n\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n } // reset when we've reached the end\n\n\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone); // the recognizer has recognized a gesture\n // so trigger an event\n\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n };\n /**\n * @private\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {constant} STATE\n */\n\n /* jshint ignore:start */\n\n\n _proto.process = function process(inputData) {};\n /* jshint ignore:end */\n\n /**\n * @private\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n\n\n _proto.getTouchAction = function getTouchAction() {};\n /**\n * @private\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n\n\n _proto.reset = function reset() {};\n\n return Recognizer;\n}();\n/**\n * @private\n * A tap is recognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\n\n\nvar TapRecognizer = /*#__PURE__*/function (_Recognizer) {\n _inheritsLoose(TapRecognizer, _Recognizer);\n\n function TapRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300,\n // max time between the multi-tap taps\n time: 250,\n // max time of the pointer to be down (like finger on the screen)\n threshold: 9,\n // a minimal movement is ok, but keep it low\n posThreshold: 10\n }, options)) || this; // previous time and center,\n // used for tap counting\n\n _this.pTime = false;\n _this.pCenter = false;\n _this._timer = null;\n _this._input = null;\n _this.count = 0;\n return _this;\n }\n\n var _proto = TapRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_MANIPULATION];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n this.reset();\n\n if (input.eventType & INPUT_START && this.count === 0) {\n return this.failTimeout();\n } // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType !== INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input; // if tap count matches we have recognized it,\n // else it has began recognizing...\n\n var tapCount = this.count % options.taps;\n\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.interval);\n return STATE_BEGAN;\n }\n }\n }\n\n return STATE_FAILED;\n };\n\n _proto.failTimeout = function failTimeout() {\n var _this3 = this;\n\n this._timer = setTimeout(function () {\n _this3.state = STATE_FAILED;\n }, this.options.interval);\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit() {\n if (this.state === STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n };\n\n return TapRecognizer;\n}(Recognizer);\n/**\n * @private\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\n\n\nvar AttrRecognizer = /*#__PURE__*/function (_Recognizer) {\n _inheritsLoose(AttrRecognizer, _Recognizer);\n\n function AttrRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _Recognizer.call(this, _extends({\n pointers: 1\n }, options)) || this;\n }\n /**\n * @private\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n\n\n var _proto = AttrRecognizer.prototype;\n\n _proto.attrTest = function attrTest(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n };\n /**\n * @private\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n\n\n _proto.process = function process(input) {\n var state = this.state;\n var eventType = input.eventType;\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED\n\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n\n return state | STATE_CHANGED;\n }\n\n return STATE_FAILED;\n };\n\n return AttrRecognizer;\n}(Recognizer);\n/**\n * @private\n * direction cons to string\n * @param {constant} direction\n * @returns {String}\n */\n\n\nfunction directionStr(direction) {\n if (direction === DIRECTION_DOWN) {\n return 'down';\n } else if (direction === DIRECTION_UP) {\n return 'up';\n } else if (direction === DIRECTION_LEFT) {\n return 'left';\n } else if (direction === DIRECTION_RIGHT) {\n return 'right';\n }\n\n return '';\n}\n/**\n * @private\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\n\nvar PanRecognizer = /*#__PURE__*/function (_AttrRecognizer) {\n _inheritsLoose(PanRecognizer, _AttrRecognizer);\n\n function PanRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _AttrRecognizer.call(this, _extends({\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n }, options)) || this;\n _this.pX = null;\n _this.pY = null;\n return _this;\n }\n\n var _proto = PanRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n var direction = this.options.direction;\n var actions = [];\n\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n\n return actions;\n };\n\n _proto.directionTest = function directionTest(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY; // lock to axis?\n\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x !== this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y !== this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n };\n\n _proto.attrTest = function attrTest(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) && ( // replace with a super call\n this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n };\n\n _proto.emit = function emit(input) {\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PanRecognizer;\n}(AttrRecognizer);\n/**\n * @private\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\n\nvar SwipeRecognizer = /*#__PURE__*/function (_AttrRecognizer) {\n _inheritsLoose(SwipeRecognizer, _AttrRecognizer);\n\n function SwipeRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n }, options)) || this;\n }\n\n var _proto = SwipeRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n };\n\n _proto.attrTest = function attrTest(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return _AttrRecognizer.prototype.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers === this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n };\n\n _proto.emit = function emit(input) {\n var direction = directionStr(input.offsetDirection);\n\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n };\n\n return SwipeRecognizer;\n}(AttrRecognizer);\n/**\n * @private\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\n\n\nvar PinchRecognizer = /*#__PURE__*/function (_AttrRecognizer) {\n _inheritsLoose(PinchRecognizer, _AttrRecognizer);\n\n function PinchRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'pinch',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = PinchRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n _proto.emit = function emit(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PinchRecognizer;\n}(AttrRecognizer);\n/**\n * @private\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\n\n\nvar RotateRecognizer = /*#__PURE__*/function (_AttrRecognizer) {\n _inheritsLoose(RotateRecognizer, _AttrRecognizer);\n\n function RotateRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'rotate',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = RotateRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n return RotateRecognizer;\n}(AttrRecognizer);\n/**\n * @private\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\n\n\nvar PressRecognizer = /*#__PURE__*/function (_Recognizer) {\n _inheritsLoose(PressRecognizer, _Recognizer);\n\n function PressRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'press',\n pointers: 1,\n time: 251,\n // minimal time of the pointer to be pressed\n threshold: 9\n }, options)) || this;\n _this._timer = null;\n _this._input = null;\n return _this;\n }\n\n var _proto = PressRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_AUTO];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n this._input = input; // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.time);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && input.eventType & INPUT_END) {\n this.manager.emit(this.options.event + \"up\", input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n };\n\n return PressRecognizer;\n}(Recognizer);\n\nvar defaults = {\n /**\n * @private\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * @private\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @private\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * @private\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * @private\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * @private\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * @private\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: \"none\",\n\n /**\n * @private\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: \"none\",\n\n /**\n * @private\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: \"none\",\n\n /**\n * @private\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: \"none\",\n\n /**\n * @private\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: \"none\",\n\n /**\n * @private\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: \"rgba(0,0,0,0)\"\n }\n};\n/**\n * @private\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * This is separated with other defaults because of tree-shaking.\n * @type {Array}\n */\n\nvar preset = [[RotateRecognizer, {\n enable: false\n}], [PinchRecognizer, {\n enable: false\n}, ['rotate']], [SwipeRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}], [PanRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}, ['swipe']], [TapRecognizer], [TapRecognizer, {\n event: 'doubletap',\n taps: 2\n}, ['tap']], [PressRecognizer]];\nvar STOP = 1;\nvar FORCED_STOP = 2;\n/**\n * @private\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\n\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n\n if (!element.style) {\n return;\n }\n\n var prop;\n each(manager.options.cssProps, function (value, name) {\n prop = prefixed(element.style, name);\n\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || \"\";\n }\n });\n\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n/**\n * @private\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\n\n\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent(\"Event\");\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n/**\n* @private\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n\nvar Manager = /*#__PURE__*/function () {\n function Manager(element, options) {\n var _this = this;\n\n this.options = assign$1({}, defaults, options || {});\n this.options.inputTarget = this.options.inputTarget || element;\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n toggleCssProps(this, true);\n each(this.options.recognizers, function (item) {\n var recognizer = _this.add(new item[0](item[1]));\n\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n\n\n var _proto = Manager.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // Options that need a little more setup\n\n if (options.touchAction) {\n this.touchAction.update();\n }\n\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n\n return this;\n };\n /**\n * @private\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n\n\n _proto.stop = function stop(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n };\n /**\n * @private\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n\n\n _proto.recognize = function recognize(inputData) {\n var session = this.session;\n\n if (session.stopped) {\n return;\n } // run the touch-action polyfill\n\n\n this.touchAction.preventDefaults(inputData);\n var recognizer;\n var recognizers = this.recognizers; // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n\n var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized\n // or when we're in a new session\n\n if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n session.curRecognizer = null;\n curRecognizer = null;\n }\n\n var i = 0;\n\n while (i < recognizers.length) {\n recognizer = recognizers[i]; // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer === curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) {\n // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n } // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n\n\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n session.curRecognizer = recognizer;\n curRecognizer = recognizer;\n }\n\n i++;\n }\n };\n /**\n * @private\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n\n\n _proto.get = function get(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event === recognizer) {\n return recognizers[i];\n }\n }\n\n return null;\n };\n /**\n * @private add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n\n\n _proto.add = function add(recognizer) {\n if (invokeArrayArg(recognizer, \"add\", this)) {\n return this;\n } // remove existing\n\n\n var existing = this.get(recognizer.options.event);\n\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n this.touchAction.update();\n return recognizer;\n };\n /**\n * @private\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n\n\n _proto.remove = function remove(recognizer) {\n if (invokeArrayArg(recognizer, \"remove\", this)) {\n return this;\n }\n\n var targetRecognizer = this.get(recognizer); // let's make sure this recognizer exists\n\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, targetRecognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n };\n /**\n * @private\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n\n\n _proto.on = function on(events, handler) {\n if (events === undefined || handler === undefined) {\n return this;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n };\n /**\n * @private unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n\n\n _proto.off = function off(events, handler) {\n if (events === undefined) {\n return this;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n };\n /**\n * @private emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n\n\n _proto.emit = function emit(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n } // no handlers, so skip it all\n\n\n var handlers = this.handlers[event] && this.handlers[event].slice();\n\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n\n data.preventDefault = function () {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n };\n /**\n * @private\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n\n\n _proto.destroy = function destroy() {\n this.element && toggleCssProps(this, false);\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n };\n\n return Manager;\n}();\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Touch events input\n * @constructor\n * @extends Input\n */\n\nvar SingleTouchInput = /*#__PURE__*/function (_Input) {\n _inheritsLoose(SingleTouchInput, _Input);\n\n function SingleTouchInput() {\n var _this;\n\n var proto = SingleTouchInput.prototype;\n proto.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n proto.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.started = false;\n return _this;\n }\n\n var _proto = SingleTouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events?\n\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type); // when done, reset the started state\n\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n };\n\n return SingleTouchInput;\n}(Input);\n\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n/**\n * @private\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\n\n\nfunction deprecate(method, name, message) {\n var deprecationMessage = \"DEPRECATED METHOD: \" + name + \"\\n\" + message + \" AT \\n\";\n return function () {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n var log = window.console && (window.console.warn || window.console.log);\n\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n\n return method.apply(this, arguments);\n };\n}\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\n\n\nvar extend = deprecate(function (dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n\n while (i < keys.length) {\n if (!merge || merge && dest[keys[i]] === undefined) {\n dest[keys[i]] = src[keys[i]];\n }\n\n i++;\n }\n\n return dest;\n}, 'extend', 'Use `assign`.');\n/**\n * @private\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\n\nvar merge = deprecate(function (dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n/**\n * @private\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\n\nfunction inherit(child, base, properties) {\n var baseP = base.prototype;\n var childP;\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign$1(childP, properties);\n }\n}\n/**\n * @private\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\n\n\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n/**\n * @private\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n\nvar Hammer = /*#__PURE__*/function () {\n var Hammer =\n /**\n * @private\n * @const {string}\n */\n function Hammer(element, options) {\n if (options === void 0) {\n options = {};\n }\n\n return new Manager(element, _extends({\n recognizers: preset.concat()\n }, options));\n };\n\n Hammer.VERSION = \"2.0.17-rc\";\n Hammer.DIRECTION_ALL = DIRECTION_ALL;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.DIRECTION_LEFT = DIRECTION_LEFT;\n Hammer.DIRECTION_RIGHT = DIRECTION_RIGHT;\n Hammer.DIRECTION_UP = DIRECTION_UP;\n Hammer.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL;\n Hammer.DIRECTION_VERTICAL = DIRECTION_VERTICAL;\n Hammer.DIRECTION_NONE = DIRECTION_NONE;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.INPUT_START = INPUT_START;\n Hammer.INPUT_MOVE = INPUT_MOVE;\n Hammer.INPUT_END = INPUT_END;\n Hammer.INPUT_CANCEL = INPUT_CANCEL;\n Hammer.STATE_POSSIBLE = STATE_POSSIBLE;\n Hammer.STATE_BEGAN = STATE_BEGAN;\n Hammer.STATE_CHANGED = STATE_CHANGED;\n Hammer.STATE_ENDED = STATE_ENDED;\n Hammer.STATE_RECOGNIZED = STATE_RECOGNIZED;\n Hammer.STATE_CANCELLED = STATE_CANCELLED;\n Hammer.STATE_FAILED = STATE_FAILED;\n Hammer.Manager = Manager;\n Hammer.Input = Input;\n Hammer.TouchAction = TouchAction;\n Hammer.TouchInput = TouchInput;\n Hammer.MouseInput = MouseInput;\n Hammer.PointerEventInput = PointerEventInput;\n Hammer.TouchMouseInput = TouchMouseInput;\n Hammer.SingleTouchInput = SingleTouchInput;\n Hammer.Recognizer = Recognizer;\n Hammer.AttrRecognizer = AttrRecognizer;\n Hammer.Tap = TapRecognizer;\n Hammer.Pan = PanRecognizer;\n Hammer.Swipe = SwipeRecognizer;\n Hammer.Pinch = PinchRecognizer;\n Hammer.Rotate = RotateRecognizer;\n Hammer.Press = PressRecognizer;\n Hammer.on = addEventListeners;\n Hammer.off = removeEventListeners;\n Hammer.each = each;\n Hammer.merge = merge;\n Hammer.extend = extend;\n Hammer.bindFn = bindFn;\n Hammer.assign = assign$1;\n Hammer.inherit = inherit;\n Hammer.bindFn = bindFn;\n Hammer.prefixed = prefixed;\n Hammer.toArray = toArray;\n Hammer.inArray = inArray;\n Hammer.uniqueArray = uniqueArray;\n Hammer.splitStr = splitStr;\n Hammer.boolOrFn = boolOrFn;\n Hammer.hasParent = hasParent;\n Hammer.addEventListeners = addEventListeners;\n Hammer.removeEventListeners = removeEventListeners;\n Hammer.defaults = assign$1({}, defaults, {\n preset: preset\n });\n return Hammer;\n}(); // style loader but by script tag, not by the loader.\n\n\nvar defaults$1 = Hammer.defaults;\nexport default Hammer;\nexport { INPUT_START, INPUT_MOVE, INPUT_END, INPUT_CANCEL, STATE_POSSIBLE, STATE_BEGAN, STATE_CHANGED, STATE_ENDED, STATE_RECOGNIZED, STATE_CANCELLED, STATE_FAILED, DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, Manager, Input, TouchAction, TouchInput, MouseInput, PointerEventInput, TouchMouseInput, SingleTouchInput, Recognizer, AttrRecognizer, TapRecognizer as Tap, PanRecognizer as Pan, SwipeRecognizer as Swipe, PinchRecognizer as Pinch, RotateRecognizer as Rotate, PressRecognizer as Press, addEventListeners as on, removeEventListeners as off, each, merge, extend, assign$1 as assign, inherit, bindFn, prefixed, toArray, inArray, uniqueArray, splitStr, boolOrFn, hasParent, addEventListeners, removeEventListeners, defaults$1 as defaults };","/*\nCopyright (c) 2015 NAVER Corp.\nname: @egjs/agent\nlicense: MIT\nauthor: NAVER Corp.\nrepository: git+https://github.com/naver/agent.git\nversion: 2.2.1\n*/\nfunction some(arr, callback) {\n var length = arr.length;\n\n for (var i = 0; i < length; ++i) {\n if (callback(arr[i], i)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction find(arr, callback) {\n var length = arr.length;\n\n for (var i = 0; i < length; ++i) {\n if (callback(arr[i], i)) {\n return arr[i];\n }\n }\n\n return null;\n}\n\nfunction getUserAgent(agent) {\n var userAgent = agent;\n\n if (typeof userAgent === \"undefined\") {\n if (typeof navigator === \"undefined\" || !navigator) {\n return \"\";\n }\n\n userAgent = navigator.userAgent || \"\";\n }\n\n return userAgent.toLowerCase();\n}\n\nfunction execRegExp(pattern, text) {\n try {\n return new RegExp(pattern, \"g\").exec(text);\n } catch (e) {\n return null;\n }\n}\n\nfunction hasUserAgentData() {\n if (typeof navigator === \"undefined\" || !navigator || !navigator.userAgentData) {\n return false;\n }\n\n var userAgentData = navigator.userAgentData;\n var brands = userAgentData.brands || userAgentData.uaList;\n return !!(brands && brands.length);\n}\n\nfunction findVersion(versionTest, userAgent) {\n var result = execRegExp(\"(\" + versionTest + \")((?:\\\\/|\\\\s|:)([0-9|\\\\.|_]+))?\", userAgent);\n return result ? result[3] : \"\";\n}\n\nfunction convertVersion(text) {\n return text.replace(/_/g, \".\");\n}\n\nfunction findPreset(presets, userAgent) {\n var userPreset = null;\n var version = \"-1\";\n some(presets, function (preset) {\n var result = execRegExp(\"(\" + preset.test + \")((?:\\\\/|\\\\s|:)([0-9|\\\\.|_]+))?\", userAgent);\n\n if (!result || preset.brand) {\n return false;\n }\n\n userPreset = preset;\n version = result[3] || \"-1\";\n\n if (preset.versionAlias) {\n version = preset.versionAlias;\n } else if (preset.versionTest) {\n version = findVersion(preset.versionTest.toLowerCase(), userAgent) || version;\n }\n\n version = convertVersion(version);\n return true;\n });\n return {\n preset: userPreset,\n version: version\n };\n}\n\nfunction findBrand(brands, preset) {\n return find(brands, function (_a) {\n var brand = _a.brand;\n return execRegExp(\"\" + preset.test, brand.toLowerCase());\n });\n}\n\nvar BROWSER_PRESETS = [{\n test: \"phantomjs\",\n id: \"phantomjs\"\n}, {\n test: \"whale\",\n id: \"whale\"\n}, {\n test: \"edgios|edge|edg\",\n id: \"edge\"\n}, {\n test: \"msie|trident|windows phone\",\n id: \"ie\",\n versionTest: \"iemobile|msie|rv\"\n}, {\n test: \"miuibrowser\",\n id: \"miui browser\"\n}, {\n test: \"samsungbrowser\",\n id: \"samsung internet\"\n}, {\n test: \"samsung\",\n id: \"samsung internet\",\n versionTest: \"version\"\n}, {\n test: \"chrome|crios\",\n id: \"chrome\"\n}, {\n test: \"firefox|fxios\",\n id: \"firefox\"\n}, {\n test: \"android\",\n id: \"android browser\",\n versionTest: \"version\"\n}, {\n test: \"safari|iphone|ipad|ipod\",\n id: \"safari\",\n versionTest: \"version\"\n}]; // chromium's engine(blink) is based on applewebkit 537.36.\n\nvar CHROMIUM_PRESETS = [{\n test: \"(?=.*applewebkit/(53[0-7]|5[0-2]|[0-4]))(?=.*\\\\schrome)\",\n id: \"chrome\"\n}, {\n test: \"chromium\",\n id: \"chrome\"\n}, {\n test: \"whale\",\n id: \"chrome\",\n brand: true\n}];\nvar WEBKIT_PRESETS = [{\n test: \"applewebkit\",\n id: \"webkit\"\n}];\nvar WEBVIEW_PRESETS = [{\n test: \"(?=(iphone|ipad))(?!(.*version))\",\n id: \"webview\"\n}, {\n test: \"(?=(android|iphone|ipad))(?=.*(naver|daum|; wv))\",\n id: \"webview\"\n}, {\n // test webview\n test: \"webview\",\n id: \"webview\"\n}];\nvar OS_PRESETS = [{\n test: \"windows phone\",\n id: \"windows phone\"\n}, {\n test: \"windows 2000\",\n id: \"window\",\n versionAlias: \"5.0\"\n}, {\n test: \"windows nt\",\n id: \"window\"\n}, {\n test: \"iphone|ipad|ipod\",\n id: \"ios\",\n versionTest: \"iphone os|cpu os\"\n}, {\n test: \"mac os x\",\n id: \"mac\"\n}, {\n test: \"android\",\n id: \"android\"\n}, {\n test: \"tizen\",\n id: \"tizen\"\n}, {\n test: \"webos|web0s\",\n id: \"webos\"\n}];\n\nfunction parseUserAgentData(osData) {\n var userAgentData = navigator.userAgentData;\n var brands = (userAgentData.uaList || userAgentData.brands).slice();\n var isMobile = userAgentData.mobile || false;\n var firstBrand = brands[0];\n var browser = {\n name: firstBrand.brand,\n version: firstBrand.version,\n majorVersion: -1,\n webkit: false,\n webview: some(WEBVIEW_PRESETS, function (preset) {\n return findBrand(brands, preset);\n }),\n chromium: some(CHROMIUM_PRESETS, function (preset) {\n return findBrand(brands, preset);\n })\n };\n var os = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1\n };\n browser.webkit = !browser.chromium && some(WEBKIT_PRESETS, function (preset) {\n return findBrand(brands, preset);\n });\n\n if (osData) {\n var platform_1 = osData.platform.toLowerCase();\n var result = find(OS_PRESETS, function (preset) {\n return new RegExp(\"\" + preset.test, \"g\").exec(platform_1);\n });\n os.name = result ? result.id : platform_1;\n os.version = osData.platformVersion;\n }\n\n some(BROWSER_PRESETS, function (preset) {\n var result = findBrand(brands, preset);\n\n if (!result) {\n return false;\n }\n\n browser.name = preset.id;\n browser.version = osData ? osData.uaFullVersion : result.version;\n return true;\n });\n\n if (navigator.platform === \"Linux armv8l\") {\n os.name = \"android\";\n } else if (browser.webkit) {\n os.name = isMobile ? \"ios\" : \"mac\";\n }\n\n if (os.name === \"ios\" && browser.webview) {\n browser.version = \"-1\";\n }\n\n os.version = convertVersion(os.version);\n browser.version = convertVersion(browser.version);\n os.majorVersion = parseInt(os.version, 10);\n browser.majorVersion = parseInt(browser.version, 10);\n return {\n browser: browser,\n os: os,\n isMobile: isMobile,\n isHints: true\n };\n}\n\nfunction parseUserAgent(userAgent) {\n var nextAgent = getUserAgent(userAgent);\n var isMobile = !!/mobi/g.exec(nextAgent);\n var browser = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1,\n webview: !!findPreset(WEBVIEW_PRESETS, nextAgent).preset,\n chromium: !!findPreset(CHROMIUM_PRESETS, nextAgent).preset,\n webkit: false\n };\n var os = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1\n };\n\n var _a = findPreset(BROWSER_PRESETS, nextAgent),\n browserPreset = _a.preset,\n browserVersion = _a.version;\n\n var _b = findPreset(OS_PRESETS, nextAgent),\n osPreset = _b.preset,\n osVersion = _b.version;\n\n browser.webkit = !browser.chromium && !!findPreset(WEBKIT_PRESETS, nextAgent).preset;\n\n if (osPreset) {\n os.name = osPreset.id;\n os.version = osVersion;\n os.majorVersion = parseInt(osVersion, 10);\n }\n\n if (browserPreset) {\n browser.name = browserPreset.id;\n browser.version = browserVersion;\n\n if (browser.webview && os.name === \"ios\" && browser.name !== \"safari\") {\n browser.webview = false;\n }\n }\n\n browser.majorVersion = parseInt(browser.version, 10);\n return {\n browser: browser,\n os: os,\n isMobile: isMobile,\n isHints: false\n };\n}\n/**\n * @namespace eg.agent\n */\n\n/**\n* Extracts accuate browser and operating system information from the user agent string or client hints.\n* @ko 유저 에이전트 문자열 또는 client hints에서 정확한 브라우저와 운영체제 정보를 추출한다.\n* @function eg.agent#getAccurateAgent\n* @param - Callback function to get the accuate agent 정확한 에이전트를 가져오기 위한 callback 함수\n* @return - get the accuate agent promise. If Promise are not supported, null is returned. 정확한 에이전트 promise를 가져온다. Promise를 지원 하지 않는 경우, null을 반환한다. \n* @example\nimport { getAccurateAgent } from \"@egjs/agent\";\n// eg.agent.getAccurateAgent()\ngetAccurateAgent().then(agent => {\n const { os, browser, isMobile } = agent;\n});\ngetAccurateAgent(agent => {\n const { os, browser, isMobile } = agent;\n});\n*/\n\n\nfunction getAccurateAgent(callback) {\n if (hasUserAgentData()) {\n return navigator.userAgentData.getHighEntropyValues([\"architecture\", \"model\", \"platform\", \"platformVersion\", \"uaFullVersion\"]).then(function (info) {\n var agentInfo = parseUserAgentData(info);\n callback && callback(agentInfo);\n return agentInfo;\n });\n }\n\n callback && callback(agent());\n\n if (typeof Promise === \"undefined\" || !Promise) {\n return null;\n }\n\n return Promise.resolve(agent());\n}\n/**\n * Extracts browser and operating system information from the user agent string.\n * @ko 유저 에이전트 문자열에서 브라우저와 운영체제 정보를 추출한다.\n * @function eg.agent#agent\n * @param - user agent string to parse 파싱할 유저에이전트 문자열\n * @return - agent Info 에이전트 정보 \n * @example\nimport agent from \"@egjs/agent\";\n// eg.agent();\nconst { os, browser, isMobile } = agent();\n */\n\n\nfunction agent(userAgent) {\n if (typeof userAgent === \"undefined\" && hasUserAgentData()) {\n return parseUserAgentData();\n } else {\n return parseUserAgent(userAgent);\n }\n}\n\nexport default agent;\nexport { getAccurateAgent };","/*\nCopyright (c) 2017 NAVER Corp.\n@egjs/axes project is licensed under the MIT license\n\n@egjs/axes JavaScript library\nhttps://github.com/naver/egjs-axes\n\n@version 2.7.1\n*/\nimport { DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, Manager, PointerEventInput, TouchMouseInput, TouchInput, MouseInput, Pan, Pinch } from '@egjs/hammerjs';\nimport getAgent from '@egjs/agent';\nimport Component from '@egjs/component';\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\n\nvar _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return _assign.apply(this, arguments);\n};\n\nfunction getInsidePosition(destPos, range, circular, bounce) {\n var toDestPos = destPos;\n var targetRange = [circular[0] ? range[0] : bounce ? range[0] - bounce[0] : range[0], circular[1] ? range[1] : bounce ? range[1] + bounce[1] : range[1]];\n toDestPos = Math.max(targetRange[0], toDestPos);\n toDestPos = Math.min(targetRange[1], toDestPos);\n return toDestPos;\n} // determine outside\n\n\nfunction isOutside(pos, range) {\n return pos < range[0] || pos > range[1];\n}\n\nfunction getDuration(distance, deceleration) {\n var duration = Math.sqrt(distance / deceleration * 2); // when duration is under 100, then value is zero\n\n return duration < 100 ? 0 : duration;\n}\n\nfunction isCircularable(destPos, range, circular) {\n return circular[1] && destPos > range[1] || circular[0] && destPos < range[0];\n}\n\nfunction getCirculatedPos(pos, range, circular) {\n var toPos = pos;\n var min = range[0];\n var max = range[1];\n var length = max - min;\n\n if (circular[1] && pos > max) {\n // right\n toPos = (toPos - max) % length + min;\n }\n\n if (circular[0] && pos < min) {\n // left\n toPos = (toPos - min) % length + max;\n }\n\n return toPos;\n}\n/* eslint-disable no-new-func, no-nested-ternary */\n\n\nvar win;\n\nif (typeof window === \"undefined\") {\n // window is undefined in node.js\n win = {\n navigator: {\n userAgent: \"\"\n }\n };\n} else {\n win = window;\n}\n\nfunction toArray(nodes) {\n // const el = Array.prototype.slice.call(nodes);\n // for IE8\n var el = [];\n\n for (var i = 0, len = nodes.length; i < len; i++) {\n el.push(nodes[i]);\n }\n\n return el;\n}\n\nfunction $(param, multi) {\n if (multi === void 0) {\n multi = false;\n }\n\n var el;\n\n if (typeof param === \"string\") {\n // String (HTML, Selector)\n // check if string is HTML tag format\n var match = param.match(/^<([a-z]+)\\s*([^>]*)>/); // creating element\n\n if (match) {\n // HTML\n var dummy = document.createElement(\"div\");\n dummy.innerHTML = param;\n el = toArray(dummy.childNodes);\n } else {\n // Selector\n el = toArray(document.querySelectorAll(param));\n }\n\n if (!multi) {\n el = el.length >= 1 ? el[0] : undefined;\n }\n } else if (param === win) {\n // window\n el = param;\n } else if (param.nodeName && (param.nodeType === 1 || param.nodeType === 9)) {\n // HTMLElement, Document\n el = param;\n } else if (\"jQuery\" in win && param instanceof jQuery || param.constructor.prototype.jquery) {\n // jQuery\n el = multi ? param.toArray() : param.get(0);\n } else if (Array.isArray(param)) {\n el = param.map(function (v) {\n return $(v);\n });\n\n if (!multi) {\n el = el.length >= 1 ? el[0] : undefined;\n }\n }\n\n return el;\n}\n\nvar raf = win.requestAnimationFrame || win.webkitRequestAnimationFrame;\nvar caf = win.cancelAnimationFrame || win.webkitCancelAnimationFrame;\n\nif (raf && !caf) {\n var keyInfo_1 = {};\n var oldraf_1 = raf;\n\n raf = function raf(callback) {\n function wrapCallback(timestamp) {\n if (keyInfo_1[key]) {\n callback(timestamp);\n }\n }\n\n var key = oldraf_1(wrapCallback);\n keyInfo_1[key] = true;\n return key;\n };\n\n caf = function caf(key) {\n delete keyInfo_1[key];\n };\n} else if (!(raf && caf)) {\n raf = function raf(callback) {\n return win.setTimeout(function () {\n callback(win.performance && win.performance.now && win.performance.now() || new Date().getTime());\n }, 16);\n };\n\n caf = win.clearTimeout;\n}\n/**\n * A polyfill for the window.requestAnimationFrame() method.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame\n * @private\n */\n\n\nfunction requestAnimationFrame(fp) {\n return raf(fp);\n}\n/**\n* A polyfill for the window.cancelAnimationFrame() method. It cancels an animation executed through a call to the requestAnimationFrame() method.\n* @param {Number} key −\tThe ID value returned through a call to the requestAnimationFrame() method. requestAnimationFrame() 메서드가 반환한 아이디 값\n* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/cancelAnimationFrame\n* @private\n*/\n\n\nfunction cancelAnimationFrame(key) {\n caf(key);\n}\n\nfunction map(obj, callback) {\n var tranformed = {};\n\n for (var k in obj) {\n k && (tranformed[k] = callback(obj[k], k));\n }\n\n return tranformed;\n}\n\nfunction filter(obj, callback) {\n var filtered = {};\n\n for (var k in obj) {\n k && callback(obj[k], k) && (filtered[k] = obj[k]);\n }\n\n return filtered;\n}\n\nfunction every(obj, callback) {\n for (var k in obj) {\n if (k && !callback(obj[k], k)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction equal(target, base) {\n return every(target, function (v, k) {\n return v === base[k];\n });\n}\n\nvar roundNumFunc = {};\n\nfunction roundNumber(num, roundUnit) {\n // Cache for performance\n if (!roundNumFunc[roundUnit]) {\n roundNumFunc[roundUnit] = getRoundFunc(roundUnit);\n }\n\n return roundNumFunc[roundUnit](num);\n}\n\nfunction roundNumbers(num, roundUnit) {\n if (!num || !roundUnit) {\n return num;\n }\n\n var isNumber = typeof roundUnit === \"number\";\n return map(num, function (value, key) {\n return roundNumber(value, isNumber ? roundUnit : roundUnit[key]);\n });\n}\n\nfunction getDecimalPlace(val) {\n if (!isFinite(val)) {\n return 0;\n }\n\n var v = val + \"\";\n\n if (v.indexOf(\"e\") >= 0) {\n // Exponential Format\n // 1e-10, 1e-12\n var p = 0;\n var e = 1;\n\n while (Math.round(val * e) / e !== val) {\n e *= 10;\n p++;\n }\n\n return p;\n } // In general, following has performance benefit.\n // https://jsperf.com/precision-calculation\n\n\n return v.indexOf(\".\") >= 0 ? v.length - v.indexOf(\".\") - 1 : 0;\n}\n\nfunction inversePow(n) {\n // replace Math.pow(10, -n) to solve floating point issue.\n // eg. Math.pow(10, -4) => 0.00009999999999999999\n return 1 / Math.pow(10, n);\n}\n\nfunction getRoundFunc(v) {\n var p = v < 1 ? Math.pow(10, getDecimalPlace(v)) : 1;\n return function (n) {\n if (v === 0) {\n return 0;\n }\n\n return Math.round(Math.round(n / v) * v * p) / p;\n };\n}\n\nfunction minMax(value, min, max) {\n return Math.max(Math.min(value, max), min);\n}\n\nvar AnimationManager = /*#__PURE__*/function () {\n function AnimationManager(_a) {\n var options = _a.options,\n itm = _a.itm,\n em = _a.em,\n axm = _a.axm;\n this.options = options;\n this.itm = itm;\n this.em = em;\n this.axm = axm;\n this.animationEnd = this.animationEnd.bind(this);\n }\n\n var __proto = AnimationManager.prototype;\n\n __proto.getDuration = function (depaPos, destPos, wishDuration) {\n var _this = this;\n\n var duration;\n\n if (typeof wishDuration !== \"undefined\") {\n duration = wishDuration;\n } else {\n var durations_1 = map(destPos, function (v, k) {\n return getDuration(Math.abs(v - depaPos[k]), _this.options.deceleration);\n });\n duration = Object.keys(durations_1).reduce(function (max, v) {\n return Math.max(max, durations_1[v]);\n }, -Infinity);\n }\n\n return minMax(duration, this.options.minimumDuration, this.options.maximumDuration);\n };\n\n __proto.createAnimationParam = function (pos, duration, option) {\n var depaPos = this.axm.get();\n var destPos = pos;\n var inputEvent = option && option.event || null;\n return {\n depaPos: depaPos,\n destPos: destPos,\n duration: minMax(duration, this.options.minimumDuration, this.options.maximumDuration),\n delta: this.axm.getDelta(depaPos, destPos),\n inputEvent: inputEvent,\n input: option && option.input || null,\n isTrusted: !!inputEvent,\n done: this.animationEnd\n };\n };\n\n __proto.grab = function (axes, option) {\n if (this._animateParam && axes.length) {\n var orgPos_1 = this.axm.get(axes);\n var pos = this.axm.map(orgPos_1, function (v, opt) {\n return getCirculatedPos(v, opt.range, opt.circular);\n });\n\n if (!every(pos, function (v, k) {\n return orgPos_1[k] === v;\n })) {\n this.em.triggerChange(pos, false, orgPos_1, option, !!option);\n }\n\n this._animateParam = null;\n this._raf && cancelAnimationFrame(this._raf);\n this._raf = null;\n this.em.triggerAnimationEnd(!!(option && option.event));\n }\n };\n\n __proto.getEventInfo = function () {\n if (this._animateParam && this._animateParam.input && this._animateParam.inputEvent) {\n return {\n input: this._animateParam.input,\n event: this._animateParam.inputEvent\n };\n } else {\n return null;\n }\n };\n\n __proto.restore = function (option) {\n var pos = this.axm.get();\n var destPos = this.axm.map(pos, function (v, opt) {\n return Math.min(opt.range[1], Math.max(opt.range[0], v));\n });\n this.animateTo(destPos, this.getDuration(pos, destPos), option);\n };\n\n __proto.animationEnd = function () {\n var beforeParam = this.getEventInfo();\n this._animateParam = null; // for Circular\n\n var circularTargets = this.axm.filter(this.axm.get(), function (v, opt) {\n return isCircularable(v, opt.range, opt.circular);\n });\n Object.keys(circularTargets).length > 0 && this.setTo(this.axm.map(circularTargets, function (v, opt) {\n return getCirculatedPos(v, opt.range, opt.circular);\n }));\n this.itm.setInterrupt(false);\n this.em.triggerAnimationEnd(!!beforeParam);\n\n if (this.axm.isOutside()) {\n this.restore(beforeParam);\n } else {\n this.finish(!!beforeParam);\n }\n };\n\n __proto.finish = function (isTrusted) {\n this._animateParam = null;\n this.itm.setInterrupt(false);\n this.em.triggerFinish(isTrusted);\n };\n\n __proto.animateLoop = function (param, complete) {\n if (param.duration) {\n this._animateParam = _assign({}, param);\n var info_1 = this._animateParam;\n var self_1 = this;\n var destPos_1 = info_1.destPos;\n var prevPos_1 = info_1.depaPos;\n var prevEasingPer_1 = 0;\n var directions_1 = map(prevPos_1, function (value, key) {\n return value <= destPos_1[key] ? 1 : -1;\n });\n var originalIntendedPos_1 = map(destPos_1, function (v) {\n return v;\n });\n var prevTime_1 = new Date().getTime();\n info_1.startTime = prevTime_1;\n\n (function loop() {\n self_1._raf = null;\n var currentTime = new Date().getTime();\n var ratio = (currentTime - info_1.startTime) / param.duration;\n var easingPer = self_1.easing(ratio);\n var toPos = self_1.axm.map(prevPos_1, function (pos, options, key) {\n var nextPos = ratio >= 1 ? destPos_1[key] : pos + info_1.delta[key] * (easingPer - prevEasingPer_1); // Subtract distance from distance already moved.\n // Recalculate the remaining distance.\n // Fix the bouncing phenomenon by changing the range.\n\n var circulatedPos = getCirculatedPos(nextPos, options.range, options.circular);\n\n if (nextPos !== circulatedPos) {\n // circular\n var rangeOffset = directions_1[key] * (options.range[1] - options.range[0]);\n destPos_1[key] -= rangeOffset;\n prevPos_1[key] -= rangeOffset;\n }\n\n return circulatedPos;\n });\n var isCanceled = !self_1.em.triggerChange(toPos, false, prevPos_1);\n prevPos_1 = toPos;\n prevTime_1 = currentTime;\n prevEasingPer_1 = easingPer;\n\n if (easingPer >= 1) {\n destPos_1 = self_1.getFinalPos(destPos_1, originalIntendedPos_1);\n\n if (!equal(destPos_1, self_1.axm.get(Object.keys(destPos_1)))) {\n self_1.em.triggerChange(destPos_1, true, prevPos_1);\n }\n\n complete();\n return;\n } else if (isCanceled) {\n self_1.finish(false);\n } else {\n // animationEnd\n self_1._raf = requestAnimationFrame(loop);\n }\n })();\n } else {\n this.em.triggerChange(param.destPos, true);\n complete();\n }\n };\n /**\n * Get estimated final value.\n *\n * If destPos is within the 'error range' of the original intended position, the initial intended position is returned.\n * - eg. original intended pos: 100, destPos: 100.0000000004 ==> return 100;\n * If dest Pos is outside the 'range of error' compared to the originally intended pos, it is returned rounded based on the originally intended pos.\n * - eg. original intended pos: 100.123 destPos: 50.12345 => return 50.123\n *\n * @param originalIntendedPos\n * @param destPos\n */\n\n\n __proto.getFinalPos = function (destPos, originalIntendedPos) {\n var _this = this; // compare destPos and originalIntendedPos\n\n\n var ERROR_LIMIT = 0.000001;\n var finalPos = map(destPos, function (value, key) {\n if (value >= originalIntendedPos[key] - ERROR_LIMIT && value <= originalIntendedPos[key] + ERROR_LIMIT) {\n // In error range, return original intended\n return originalIntendedPos[key];\n } else {\n // Out of error range, return rounded pos.\n var roundUnit = _this.getRoundUnit(value, key);\n\n var result = roundNumber(value, roundUnit);\n return result;\n }\n });\n return finalPos;\n };\n\n __proto.getRoundUnit = function (val, key) {\n var roundUnit = this.options.round; // manual mode\n\n var minRoundUnit = null; // auto mode\n // auto mode\n\n if (!roundUnit) {\n // Get minimum round unit\n var options = this.axm.getAxisOptions(key);\n minRoundUnit = inversePow(Math.max(getDecimalPlace(options.range[0]), getDecimalPlace(options.range[1]), getDecimalPlace(val)));\n }\n\n return minRoundUnit || roundUnit;\n };\n\n __proto.getUserControll = function (param) {\n var userWish = param.setTo();\n userWish.destPos = this.axm.get(userWish.destPos);\n userWish.duration = minMax(userWish.duration, this.options.minimumDuration, this.options.maximumDuration);\n return userWish;\n };\n\n __proto.animateTo = function (destPos, duration, option) {\n var _this = this;\n\n var param = this.createAnimationParam(destPos, duration, option);\n\n var depaPos = _assign({}, param.depaPos);\n\n var retTrigger = this.em.triggerAnimationStart(param); // to control\n\n var userWish = this.getUserControll(param); // You can't stop the 'animationStart' event when 'circular' is true.\n\n if (!retTrigger && this.axm.every(userWish.destPos, function (v, opt) {\n return isCircularable(v, opt.range, opt.circular);\n })) {\n console.warn(\"You can't stop the 'animation' event when 'circular' is true.\");\n }\n\n if (retTrigger && !equal(userWish.destPos, depaPos)) {\n var inputEvent = option && option.event || null;\n this.animateLoop({\n depaPos: depaPos,\n destPos: userWish.destPos,\n duration: userWish.duration,\n delta: this.axm.getDelta(depaPos, userWish.destPos),\n isTrusted: !!inputEvent,\n inputEvent: inputEvent,\n input: option && option.input || null\n }, function () {\n return _this.animationEnd();\n });\n }\n };\n\n __proto.easing = function (p) {\n return p > 1 ? 1 : this.options.easing(p);\n };\n\n __proto.setTo = function (pos, duration) {\n if (duration === void 0) {\n duration = 0;\n }\n\n var axes = Object.keys(pos);\n this.grab(axes);\n var orgPos = this.axm.get(axes);\n\n if (equal(pos, orgPos)) {\n return this;\n }\n\n this.itm.setInterrupt(true);\n var movedPos = filter(pos, function (v, k) {\n return orgPos[k] !== v;\n });\n\n if (!Object.keys(movedPos).length) {\n return this;\n }\n\n movedPos = this.axm.map(movedPos, function (v, opt) {\n var range = opt.range,\n circular = opt.circular;\n\n if (circular && (circular[0] || circular[1])) {\n return v;\n } else {\n return getInsidePosition(v, range, circular);\n }\n });\n\n if (equal(movedPos, orgPos)) {\n return this;\n }\n\n if (duration > 0) {\n this.animateTo(movedPos, duration);\n } else {\n this.em.triggerChange(movedPos);\n this.finish(false);\n }\n\n return this;\n };\n\n __proto.setBy = function (pos, duration) {\n if (duration === void 0) {\n duration = 0;\n }\n\n return this.setTo(map(this.axm.get(Object.keys(pos)), function (v, k) {\n return v + pos[k];\n }), duration);\n };\n\n return AnimationManager;\n}();\n\nvar EventManager = /*#__PURE__*/function () {\n function EventManager(axes) {\n this.axes = axes;\n }\n /**\n * This event is fired when a user holds an element on the screen of the device.\n * @ko 사용자가 기기의 화면에 손을 대고 있을 때 발생하는 이벤트\n * @name eg.Axes#hold\n * @event\n * @type {object} The object of data to be sent when the event is fired이벤트가 발생할 때 전달되는 데이터 객체\n * @property {Object.} pos coordinate 좌표 정보\n * @property {Object} input The instance of inputType where the event occurred이벤트가 발생한 inputType 인스턴스\n * @property {Object} inputEvent The event object received from inputType inputType으로 부터 받은 이벤트 객체\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\n *\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"hold\", function(event) {\n * // event.pos\n * // event.input\n * // event.inputEvent\n * // isTrusted\n * });\n */\n\n\n var __proto = EventManager.prototype;\n\n __proto.triggerHold = function (pos, option) {\n var roundPos = this.getRoundPos(pos).roundPos;\n this.axes.trigger(\"hold\", {\n pos: roundPos,\n input: option.input || null,\n inputEvent: option.event || null,\n isTrusted: true\n });\n };\n /**\n * Specifies the coordinates to move after the 'change' event. It works when the holding value of the change event is true.\n * @ko 'change' 이벤트 이후 이동할 좌표를 지정한다. change이벤트의 holding 값이 true일 경우에 동작한다\n * @name set\n * @function\n * @param {Object.} pos The coordinate to move to 이동할 좌표\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"change\", function(event) {\n * event.holding && event.set({x: 10});\n * });\n */\n\n /** Specifies the animation coordinates to move after the 'release' or 'animationStart' events.\n * @ko 'release' 또는 'animationStart' 이벤트 이후 이동할 좌표를 지정한다.\n * @name setTo\n * @function\n * @param {Object.} pos The coordinate to move to 이동할 좌표\n * @param {Number} [duration] Duration of the animation (unit: ms) 애니메이션 진행 시간(단위: ms)\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"animationStart\", function(event) {\n * event.setTo({x: 10}, 2000);\n * });\n */\n\n /**\n * This event is fired when a user release an element on the screen of the device.\n * @ko 사용자가 기기의 화면에서 손을 뗐을 때 발생하는 이벤트\n * @name eg.Axes#release\n * @event\n * @type {object} The object of data to be sent when the event is fired이벤트가 발생할 때 전달되는 데이터 객체\n * @property {Object.} depaPos The coordinates when releasing an element손을 뗐을 때의 좌표 \n * @property {Object.} destPos The coordinates to move to after releasing an element손을 뗀 뒤에 이동할 좌표\n * @property {Object.} delta The movement variation of coordinate 좌표의 변화량\n * @property {Object} inputEvent The event object received from inputType inputType으로 부터 받은 이벤트 객체\n * @property {Object} input The instance of inputType where the event occurred이벤트가 발생한 inputType 인스턴스\n * @property {setTo} setTo Specifies the animation coordinates to move after the event 이벤트 이후 이동할 애니메이션 좌표를 지정한다\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\n *\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"release\", function(event) {\n * // event.depaPos\n * // event.destPos\n * // event.delta\n * // event.input\n * // event.inputEvent\n * // event.setTo\n * // event.isTrusted\n *\n * // if you want to change the animation coordinates to move after the 'release' event.\n * event.setTo({x: 10}, 2000);\n * });\n */\n\n\n __proto.triggerRelease = function (param) {\n var _a = this.getRoundPos(param.destPos, param.depaPos),\n roundPos = _a.roundPos,\n roundDepa = _a.roundDepa;\n\n param.destPos = roundPos;\n param.depaPos = roundDepa;\n param.setTo = this.createUserControll(param.destPos, param.duration);\n this.axes.trigger(\"release\", param);\n };\n /**\n * This event is fired when coordinate changes.\n * @ko 좌표가 변경됐을 때 발생하는 이벤트\n * @name eg.Axes#change\n * @event\n * @type {object} The object of data to be sent when the event is fired 이벤트가 발생할 때 전달되는 데이터 객체\n * @property {Object.} pos The coordinate 좌표\n * @property {Object.} delta The movement variation of coordinate 좌표의 변화량\n * @property {Boolean} holding Indicates whether a user holds an element on the screen of the device.사용자가 기기의 화면을 누르고 있는지 여부\n * @property {Object} input The instance of inputType where the event occurred. If the value is changed by animation, it returns 'null'.이벤트가 발생한 inputType 인스턴스. 애니메이션에 의해 값이 변경될 경우에는 'null'을 반환한다.\n * @property {Object} inputEvent The event object received from inputType. If the value is changed by animation, it returns 'null'.inputType으로 부터 받은 이벤트 객체. 애니메이션에 의해 값이 변경될 경우에는 'null'을 반환한다.\n * @property {set} set Specifies the coordinates to move after the event. It works when the holding value is true 이벤트 이후 이동할 좌표를 지정한다. holding 값이 true일 경우에 동작한다.\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\n *\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"change\", function(event) {\n * // event.pos\n * // event.delta\n * // event.input\n * // event.inputEvent\n * // event.holding\n * // event.set\n * // event.isTrusted\n *\n * // if you want to change the coordinates to move after the 'change' event.\n * // it works when the holding value of the change event is true.\n * event.holding && event.set({x: 10});\n * });\n */\n\n\n __proto.triggerChange = function (pos, isAccurate, depaPos, option, holding) {\n if (holding === void 0) {\n holding = false;\n }\n\n var am = this.am;\n var axm = am.axm;\n var eventInfo = am.getEventInfo();\n\n var _a = this.getRoundPos(pos, depaPos),\n roundPos = _a.roundPos,\n roundDepa = _a.roundDepa;\n\n var moveTo = axm.moveTo(roundPos, roundDepa);\n var inputEvent = option && option.event || eventInfo && eventInfo.event || null;\n var param = {\n pos: moveTo.pos,\n delta: moveTo.delta,\n holding: holding,\n inputEvent: inputEvent,\n isTrusted: !!inputEvent,\n input: option && option.input || eventInfo && eventInfo.input || null,\n set: inputEvent ? this.createUserControll(moveTo.pos) : function () {}\n };\n var result = this.axes.trigger(\"change\", param);\n inputEvent && axm.set(param.set()[\"destPos\"]);\n return result;\n };\n /**\n * This event is fired when animation starts.\n * @ko 에니메이션이 시작할 때 발생한다.\n * @name eg.Axes#animationStart\n * @event\n * @type {object} The object of data to be sent when the event is fired이벤트가 발생할 때 전달되는 데이터 객체\n * @property {Object.} depaPos The coordinates when animation starts애니메이션이 시작 되었을 때의 좌표 \n * @property {Object.} destPos The coordinates to move to. If you change this value, you can run the animation이동할 좌표. 이값을 변경하여 애니메이션을 동작시킬수 있다\n * @property {Object.} delta The movement variation of coordinate 좌표의 변화량\n * @property {Number} duration Duration of the animation (unit: ms). If you change this value, you can control the animation duration time.애니메이션 진행 시간(단위: ms). 이값을 변경하여 애니메이션의 이동시간을 조절할 수 있다.\n * @property {Object} input The instance of inputType where the event occurred. If the value is changed by animation, it returns 'null'.이벤트가 발생한 inputType 인스턴스. 애니메이션에 의해 값이 변경될 경우에는 'null'을 반환한다.\n * @property {Object} inputEvent The event object received from inputType inputType으로 부터 받은 이벤트 객체\n * @property {setTo} setTo Specifies the animation coordinates to move after the event 이벤트 이후 이동할 애니메이션 좌표를 지정한다\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\n *\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"release\", function(event) {\n * // event.depaPos\n * // event.destPos\n * // event.delta\n * // event.input\n * // event.inputEvent\n * // event.setTo\n * // event.isTrusted\n *\n * // if you want to change the animation coordinates to move after the 'animationStart' event.\n * event.setTo({x: 10}, 2000);\n * });\n */\n\n\n __proto.triggerAnimationStart = function (param) {\n var _a = this.getRoundPos(param.destPos, param.depaPos),\n roundPos = _a.roundPos,\n roundDepa = _a.roundDepa;\n\n param.destPos = roundPos;\n param.depaPos = roundDepa;\n param.setTo = this.createUserControll(param.destPos, param.duration);\n return this.axes.trigger(\"animationStart\", param);\n };\n /**\n * This event is fired when animation ends.\n * @ko 에니메이션이 끝났을 때 발생한다.\n * @name eg.Axes#animationEnd\n * @event\n * @type {object} The object of data to be sent when the event is fired이벤트가 발생할 때 전달되는 데이터 객체\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\n *\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"animationEnd\", function(event) {\n * // event.isTrusted\n * });\n */\n\n\n __proto.triggerAnimationEnd = function (isTrusted) {\n if (isTrusted === void 0) {\n isTrusted = false;\n }\n\n this.axes.trigger(\"animationEnd\", {\n isTrusted: isTrusted\n });\n };\n /**\n * This event is fired when all actions have been completed.\n * @ko 에니메이션이 끝났을 때 발생한다.\n * @name eg.Axes#finish\n * @event\n * @type {object} The object of data to be sent when the event is fired이벤트가 발생할 때 전달되는 데이터 객체\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\n *\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"finish\", function(event) {\n * // event.isTrusted\n * });\n */\n\n\n __proto.triggerFinish = function (isTrusted) {\n if (isTrusted === void 0) {\n isTrusted = false;\n }\n\n this.axes.trigger(\"finish\", {\n isTrusted: isTrusted\n });\n };\n\n __proto.createUserControll = function (pos, duration) {\n if (duration === void 0) {\n duration = 0;\n } // to controll\n\n\n var userControl = {\n destPos: _assign({}, pos),\n duration: duration\n };\n return function (toPos, userDuration) {\n toPos && (userControl.destPos = _assign({}, toPos));\n userDuration !== undefined && (userControl.duration = userDuration);\n return userControl;\n };\n };\n\n __proto.setAnimationManager = function (am) {\n this.am = am;\n };\n\n __proto.destroy = function () {\n this.axes.off();\n };\n\n __proto.getRoundPos = function (pos, depaPos) {\n // round value if round exist\n var roundUnit = this.axes.options.round; // if (round == null) {\n // \treturn {pos, depaPos}; // undefined, undefined\n // }\n\n return {\n roundPos: roundNumbers(pos, roundUnit),\n roundDepa: roundNumbers(depaPos, roundUnit)\n };\n };\n\n return EventManager;\n}();\n\nvar InterruptManager = /*#__PURE__*/function () {\n function InterruptManager(options) {\n this.options = options;\n this._prevented = false; // check whether the animation event was prevented\n }\n\n var __proto = InterruptManager.prototype;\n\n __proto.isInterrupting = function () {\n // when interruptable is 'true', return value is always 'true'.\n return this.options.interruptable || this._prevented;\n };\n\n __proto.isInterrupted = function () {\n return !this.options.interruptable && this._prevented;\n };\n\n __proto.setInterrupt = function (prevented) {\n !this.options.interruptable && (this._prevented = prevented);\n };\n\n return InterruptManager;\n}();\n\nvar AxisManager = /*#__PURE__*/function () {\n function AxisManager(axis, options) {\n var _this = this;\n\n this.axis = axis;\n this.options = options;\n\n this._complementOptions();\n\n this._pos = Object.keys(this.axis).reduce(function (acc, v) {\n acc[v] = _this.axis[v].range[0];\n return acc;\n }, {});\n }\n /**\n * set up 'css' expression\n * @private\n */\n\n\n var __proto = AxisManager.prototype;\n\n __proto._complementOptions = function () {\n var _this = this;\n\n Object.keys(this.axis).forEach(function (axis) {\n _this.axis[axis] = _assign({\n range: [0, 100],\n bounce: [0, 0],\n circular: [false, false]\n }, _this.axis[axis]);\n [\"bounce\", \"circular\"].forEach(function (v) {\n var axisOption = _this.axis;\n var key = axisOption[axis][v];\n\n if (/string|number|boolean/.test(typeof key)) {\n axisOption[axis][v] = [key, key];\n }\n });\n });\n };\n\n __proto.getDelta = function (depaPos, destPos) {\n var fullDepaPos = this.get(depaPos);\n return map(this.get(destPos), function (v, k) {\n return v - fullDepaPos[k];\n });\n };\n\n __proto.get = function (axes) {\n var _this = this;\n\n if (axes && Array.isArray(axes)) {\n return axes.reduce(function (acc, v) {\n if (v && v in _this._pos) {\n acc[v] = _this._pos[v];\n }\n\n return acc;\n }, {});\n } else {\n return _assign({}, this._pos, axes || {});\n }\n };\n\n __proto.moveTo = function (pos, depaPos) {\n if (depaPos === void 0) {\n depaPos = this._pos;\n }\n\n var delta = map(this._pos, function (v, key) {\n return key in pos && key in depaPos ? pos[key] - depaPos[key] : 0;\n });\n this.set(this.map(pos, function (v, opt) {\n return opt ? getCirculatedPos(v, opt.range, opt.circular) : 0;\n }));\n return {\n pos: _assign({}, this._pos),\n delta: delta\n };\n };\n\n __proto.set = function (pos) {\n for (var k in pos) {\n if (k && k in this._pos) {\n this._pos[k] = pos[k];\n }\n }\n };\n\n __proto.every = function (pos, callback) {\n var axisOptions = this.axis;\n return every(pos, function (value, key) {\n return callback(value, axisOptions[key], key);\n });\n };\n\n __proto.filter = function (pos, callback) {\n var axisOptions = this.axis;\n return filter(pos, function (value, key) {\n return callback(value, axisOptions[key], key);\n });\n };\n\n __proto.map = function (pos, callback) {\n var axisOptions = this.axis;\n return map(pos, function (value, key) {\n return callback(value, axisOptions[key], key);\n });\n };\n\n __proto.isOutside = function (axes) {\n return !this.every(axes ? this.get(axes) : this._pos, function (v, opt) {\n return !isOutside(v, opt.range);\n });\n };\n\n __proto.getAxisOptions = function (key) {\n return this.axis[key];\n };\n\n return AxisManager;\n}();\n\nvar InputObserver = /*#__PURE__*/function () {\n function InputObserver(_a) {\n var options = _a.options,\n itm = _a.itm,\n em = _a.em,\n axm = _a.axm,\n am = _a.am;\n this.isOutside = false;\n this.moveDistance = null;\n this.isStopped = false;\n this.options = options;\n this.itm = itm;\n this.em = em;\n this.axm = axm;\n this.am = am;\n } // when move pointer is held in outside\n\n\n var __proto = InputObserver.prototype;\n\n __proto.atOutside = function (pos) {\n var _this = this;\n\n if (this.isOutside) {\n return this.axm.map(pos, function (v, opt) {\n var tn = opt.range[0] - opt.bounce[0];\n var tx = opt.range[1] + opt.bounce[1];\n return v > tx ? tx : v < tn ? tn : v;\n });\n } else {\n // when start pointer is held in inside\n // get a initialization slope value to prevent smooth animation.\n var initSlope_1 = this.am.easing(0.00001) / 0.00001;\n return this.axm.map(pos, function (v, opt) {\n var min = opt.range[0];\n var max = opt.range[1];\n var out = opt.bounce;\n var circular = opt.circular;\n\n if (circular && (circular[0] || circular[1])) {\n return v;\n } else if (v < min) {\n // left\n return min - _this.am.easing((min - v) / (out[0] * initSlope_1)) * out[0];\n } else if (v > max) {\n // right\n return max + _this.am.easing((v - max) / (out[1] * initSlope_1)) * out[1];\n }\n\n return v;\n });\n }\n };\n\n __proto.get = function (input) {\n return this.axm.get(input.axes);\n };\n\n __proto.hold = function (input, event) {\n if (this.itm.isInterrupted() || !input.axes.length) {\n return;\n }\n\n var changeOption = {\n input: input,\n event: event\n };\n this.isStopped = false;\n this.itm.setInterrupt(true);\n this.am.grab(input.axes, changeOption);\n !this.moveDistance && this.em.triggerHold(this.axm.get(), changeOption);\n this.isOutside = this.axm.isOutside(input.axes);\n this.moveDistance = this.axm.get(input.axes);\n };\n\n __proto.change = function (input, event, offset) {\n if (this.isStopped || !this.itm.isInterrupting() || this.axm.every(offset, function (v) {\n return v === 0;\n })) {\n return;\n }\n\n var depaPos = this.moveDistance || this.axm.get(input.axes);\n var destPos; // for outside logic\n\n destPos = map(depaPos, function (v, k) {\n return v + (offset[k] || 0);\n });\n this.moveDistance && (this.moveDistance = destPos); // from outside to inside\n\n if (this.isOutside && this.axm.every(depaPos, function (v, opt) {\n return !isOutside(v, opt.range);\n })) {\n this.isOutside = false;\n }\n\n depaPos = this.atOutside(depaPos);\n destPos = this.atOutside(destPos);\n var isCanceled = !this.em.triggerChange(destPos, false, depaPos, {\n input: input,\n event: event\n }, true);\n\n if (isCanceled) {\n this.isStopped = true;\n this.moveDistance = null;\n this.am.finish(false);\n }\n };\n\n __proto.release = function (input, event, offset, inputDuration) {\n if (this.isStopped || !this.itm.isInterrupting() || !this.moveDistance) {\n return;\n }\n\n var pos = this.axm.get(input.axes);\n var depaPos = this.axm.get();\n var destPos = this.axm.get(this.axm.map(offset, function (v, opt, k) {\n if (opt.circular && (opt.circular[0] || opt.circular[1])) {\n return pos[k] + v;\n } else {\n return getInsidePosition(pos[k] + v, opt.range, opt.circular, opt.bounce);\n }\n }));\n var duration = this.am.getDuration(destPos, pos, inputDuration);\n\n if (duration === 0) {\n destPos = _assign({}, depaPos);\n } // prepare params\n\n\n var param = {\n depaPos: depaPos,\n destPos: destPos,\n duration: duration,\n delta: this.axm.getDelta(depaPos, destPos),\n inputEvent: event,\n input: input,\n isTrusted: true\n };\n this.em.triggerRelease(param);\n this.moveDistance = null; // to contol\n\n var userWish = this.am.getUserControll(param);\n var isEqual = equal(userWish.destPos, depaPos);\n var changeOption = {\n input: input,\n event: event\n };\n\n if (isEqual || userWish.duration === 0) {\n !isEqual && this.em.triggerChange(userWish.destPos, false, depaPos, changeOption, true);\n this.itm.setInterrupt(false);\n\n if (this.axm.isOutside()) {\n this.am.restore(changeOption);\n } else {\n this.em.triggerFinish(true);\n }\n } else {\n this.am.animateTo(userWish.destPos, userWish.duration, changeOption);\n }\n };\n\n return InputObserver;\n}(); // export const DIRECTION_NONE = 1;\n\n\nvar IOS_EDGE_THRESHOLD = 30;\nvar IS_IOS_SAFARI = \"ontouchstart\" in win && getAgent().browser.name === \"safari\";\n\nvar TRANSFORM = function () {\n if (typeof document === \"undefined\") {\n return \"\";\n }\n\n var bodyStyle = (document.head || document.getElementsByTagName(\"head\")[0]).style;\n var target = [\"transform\", \"webkitTransform\", \"msTransform\", \"mozTransform\"];\n\n for (var i = 0, len = target.length; i < len; i++) {\n if (target[i] in bodyStyle) {\n return target[i];\n }\n }\n\n return \"\";\n}();\n/**\n * @typedef {Object} AxisOption The Axis information. The key of the axis specifies the name to use as the logical virtual coordinate system.\n * @ko 축 정보. 축의 키는 논리적인 가상 좌표계로 사용할 이름을 지정한다.\n * @property {Number[]} [range] The coordinate of range 좌표 범위\n * @property {Number} [range.0=0] The coordinate of the minimum 최소 좌표\n * @property {Number} [range.1=0] The coordinate of the maximum 최대 좌표\n * @property {Number[]} [bounce] The size of bouncing area. The coordinates can exceed the coordinate area as much as the bouncing area based on user action. If the coordinates does not exceed the bouncing area when an element is dragged, the coordinates where bouncing effects are applied are retuned back into the coordinate area바운스 영역의 크기. 사용자의 동작에 따라 좌표가 좌표 영역을 넘어 바운스 영역의 크기만큼 더 이동할 수 있다. 사용자가 끌어다 놓는 동작을 했을 때 좌표가 바운스 영역에 있으면, 바운스 효과가 적용된 좌표가 다시 좌표 영역 안으로 들어온다\n * @property {Number} [bounce.0=0] The size of coordinate of the minimum area 최소 좌표 바운스 영역의 크기\n * @property {Number} [bounce.1=0] The size of coordinate of the maximum area 최대 좌표 바운스 영역의 크기\n * @property {Boolean[]} [circular] Indicates whether a circular element is available. If it is set to \"true\" and an element is dragged outside the coordinate area, the element will appear on the other side.순환 여부. 'true'로 설정한 방향의 좌표 영역 밖으로 엘리먼트가 이동하면 반대 방향에서 엘리먼트가 나타난다\n * @property {Boolean} [circular.0=false] Indicates whether to circulate to the coordinate of the minimum 최소 좌표 방향의 순환 여부\n * @property {Boolean} [circular.1=false] Indicates whether to circulate to the coordinate of the maximum 최대 좌표 방향의 순환 여부\n**/\n\n/**\n * @typedef {Object} AxesOption The option object of the eg.Axes module\n * @ko eg.Axes 모듈의 옵션 객체\n * @property {Function} [easing=easing.easeOutCubic] The easing function to apply to an animation 애니메이션에 적용할 easing 함수\n * @property {Number} [maximumDuration=Infinity] Maximum duration of the animation 가속도에 의해 애니메이션이 동작할 때의 최대 좌표 이동 시간\n * @property {Number} [minimumDuration=0] Minimum duration of the animation 가속도에 의해 애니메이션이 동작할 때의 최소 좌표 이동 시간\n * @property {Number} [deceleration=0.0006] Deceleration of the animation where acceleration is manually enabled by user. A higher value indicates shorter running time. 사용자의 동작으로 가속도가 적용된 애니메이션의 감속도. 값이 높을수록 애니메이션 실행 시간이 짧아진다\n * @property {Boolean} [interruptable=true] Indicates whether an animation is interruptible.
- true: It can be paused or stopped by user action or the API.
- false: It cannot be paused or stopped by user action or the API while it is running.진행 중인 애니메이션 중지 가능 여부.
- true: 사용자의 동작이나 API로 애니메이션을 중지할 수 있다.
- false: 애니메이션이 진행 중일 때는 사용자의 동작이나 API가 적용되지 않는다
\n * @property {Number} [round = null] Rounding unit. For example, 0.1 rounds to 0.1 decimal point(6.1234 => 6.1), 5 rounds to 5 (93 => 95)
[Details](https://github.com/naver/egjs-axes/wiki/round-option)반올림 단위. 예를 들어 0.1 은 소숫점 0.1 까지 반올림(6.1234 => 6.1), 5 는 5 단위로 반올림(93 => 95).
[상세내용](https://github.com/naver/egjs-axes/wiki/round-option)
\n**/\n\n/**\n * @class eg.Axes\n * @classdesc A module used to change the information of user action entered by various input devices such as touch screen or mouse into the logical virtual coordinates. You can easily create a UI that responds to user actions.\n * @ko 터치 입력 장치나 마우스와 같은 다양한 입력 장치를 통해 전달 받은 사용자의 동작을 논리적인 가상 좌표로 변경하는 모듈이다. 사용자 동작에 반응하는 UI를 손쉽게 만들수 있다.\n * @extends eg.Component\n *\n * @param {Object.} axis Axis information managed by eg.Axes. The key of the axis specifies the name to use as the logical virtual coordinate system. eg.Axes가 관리하는 축 정보. 축의 키는 논리적인 가상 좌표계로 사용할 이름을 지정한다.\n * @param {AxesOption} [options] The option object of the eg.Axes moduleeg.Axes 모듈의 옵션 객체\n * @param {Object.} [startPos] The coordinates to be moved when creating an instance. not triggering change event.인스턴스 생성시 이동할 좌표, change 이벤트는 발생하지 않음.\n *\n * @support {\"ie\": \"10+\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\", \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"2.3+ (except 3.x)\"}\n * @example\n *\n * // 1. Initialize eg.Axes\n * const axes = new eg.Axes({\n *\tsomething1: {\n *\t\trange: [0, 150],\n *\t\tbounce: 50\n *\t},\n *\tsomething2: {\n *\t\trange: [0, 200],\n *\t\tbounce: 100\n *\t},\n *\tsomethingN: {\n *\t\trange: [1, 10],\n *\t}\n * }, {\n * deceleration : 0.0024\n * });\n *\n * // 2. attach event handler\n * axes.on({\n *\t\"hold\" : function(evt) {\n *\t},\n *\t\"release\" : function(evt) {\n *\t},\n *\t\"animationStart\" : function(evt) {\n *\t},\n *\t\"animationEnd\" : function(evt) {\n *\t},\n *\t\"change\" : function(evt) {\n *\t}\n * });\n *\n * // 3. Initialize inputTypes\n * const panInputArea = new eg.Axes.PanInput(\"#area\", {\n *\tscale: [0.5, 1]\n * });\n * const panInputHmove = new eg.Axes.PanInput(\"#hmove\");\n * const panInputVmove = new eg.Axes.PanInput(\"#vmove\");\n * const pinchInputArea = new eg.Axes.PinchInput(\"#area\", {\n *\tscale: 1.5\n * });\n *\n * // 4. Connect eg.Axes and InputTypes\n * // [PanInput] When the mouse or touchscreen is down and moved.\n * // Connect the 'something2' axis to the mouse or touchscreen x position and\n * // connect the 'somethingN' axis to the mouse or touchscreen y position.\n * axes.connect([\"something2\", \"somethingN\"], panInputArea); // or axes.connect(\"something2 somethingN\", panInputArea);\n *\n * // Connect only one 'something1' axis to the mouse or touchscreen x position.\n * axes.connect([\"something1\"], panInputHmove); // or axes.connect(\"something1\", panInputHmove);\n *\n * // Connect only one 'something2' axis to the mouse or touchscreen y position.\n * axes.connect([\"\", \"something2\"], panInputVmove); // or axes.connect(\" something2\", panInputVmove);\n *\n * // [PinchInput] Connect 'something2' axis when two pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * axes.connect(\"something2\", pinchInputArea);\n */\n\n\nvar Axes = /*#__PURE__*/function (_super) {\n __extends(Axes, _super);\n\n function Axes(axis, options, startPos) {\n if (axis === void 0) {\n axis = {};\n }\n\n if (options === void 0) {\n options = {};\n }\n\n var _this = _super.call(this) || this;\n\n _this.axis = axis;\n _this._inputs = [];\n _this.options = _assign({\n easing: function easeOutCubic(x) {\n return 1 - Math.pow(1 - x, 3);\n },\n interruptable: true,\n maximumDuration: Infinity,\n minimumDuration: 0,\n deceleration: 0.0006,\n round: null\n }, options);\n _this.itm = new InterruptManager(_this.options);\n _this.axm = new AxisManager(_this.axis, _this.options);\n _this.em = new EventManager(_this);\n _this.am = new AnimationManager(_this);\n _this.io = new InputObserver(_this);\n\n _this.em.setAnimationManager(_this.am);\n\n startPos && _this.em.triggerChange(startPos);\n return _this;\n }\n /**\n * Connect the axis of eg.Axes to the inputType.\n * @ko eg.Axes의 축과 inputType을 연결한다\n * @method eg.Axes#connect\n * @param {(String[]|String)} axes The name of the axis to associate with inputType inputType과 연결할 축의 이름\n * @param {Object} inputType The inputType instance to associate with the axis of eg.Axes eg.Axes의 축과 연결할 inputType 인스턴스\n * @return {eg.Axes} An instance of a module itself 모듈 자신의 인스턴스\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"xOther\": {\n * range: [-100, 100]\n * }\n * });\n *\n * axes.connect(\"x\", new eg.Axes.PanInput(\"#area1\"))\n * .connect(\"x xOther\", new eg.Axes.PanInput(\"#area2\"))\n * .connect(\" xOther\", new eg.Axes.PanInput(\"#area3\"))\n * .connect([\"x\"], new eg.Axes.PanInput(\"#area4\"))\n * .connect([\"xOther\", \"x\"], new eg.Axes.PanInput(\"#area5\"))\n * .connect([\"\", \"xOther\"], new eg.Axes.PanInput(\"#area6\"));\n */\n\n\n var __proto = Axes.prototype;\n\n __proto.connect = function (axes, inputType) {\n var mapped;\n\n if (typeof axes === \"string\") {\n mapped = axes.split(\" \");\n } else {\n mapped = axes.concat();\n } // check same instance\n\n\n if (~this._inputs.indexOf(inputType)) {\n this.disconnect(inputType);\n } // check same element in hammer type for share\n\n\n if (\"hammer\" in inputType) {\n var targets = this._inputs.filter(function (v) {\n return v.hammer && v.element === inputType.element;\n });\n\n if (targets.length) {\n inputType.hammer = targets[0].hammer;\n }\n }\n\n inputType.mapAxes(mapped);\n inputType.connect(this.io);\n\n this._inputs.push(inputType);\n\n return this;\n };\n /**\n * Disconnect the axis of eg.Axes from the inputType.\n * @ko eg.Axes의 축과 inputType의 연결을 끊는다.\n * @method eg.Axes#disconnect\n * @param {Object} [inputType] An inputType instance associated with the axis of eg.Axes eg.Axes의 축과 연결한 inputType 인스턴스\n * @return {eg.Axes} An instance of a module itself 모듈 자신의 인스턴스\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"xOther\": {\n * range: [-100, 100]\n * }\n * });\n *\n * const input1 = new eg.Axes.PanInput(\"#area1\");\n * const input2 = new eg.Axes.PanInput(\"#area2\");\n * const input3 = new eg.Axes.PanInput(\"#area3\");\n *\n * axes.connect(\"x\", input1);\n * .connect(\"x xOther\", input2)\n * .connect([\"xOther\", \"x\"], input3);\n *\n * axes.disconnect(input1); // disconnects input1\n * axes.disconnect(); // disconnects all of them\n */\n\n\n __proto.disconnect = function (inputType) {\n if (inputType) {\n var index = this._inputs.indexOf(inputType);\n\n if (index >= 0) {\n this._inputs[index].disconnect();\n\n this._inputs.splice(index, 1);\n }\n } else {\n this._inputs.forEach(function (v) {\n return v.disconnect();\n });\n\n this._inputs = [];\n }\n\n return this;\n };\n /**\n * Returns the current position of the coordinates.\n * @ko 좌표의 현재 위치를 반환한다\n * @method eg.Axes#get\n * @param {Object} [axes] The names of the axis 축 이름들\n * @return {Object.} Axis coordinate information 축 좌표 정보\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"xOther\": {\n * range: [-100, 100]\n * },\n * \t \"zoom\": {\n * range: [50, 30]\n * }\n * });\n *\n * axes.get(); // {\"x\": 0, \"xOther\": -100, \"zoom\": 50}\n * axes.get([\"x\", \"zoom\"]); // {\"x\": 0, \"zoom\": 50}\n */\n\n\n __proto.get = function (axes) {\n return this.axm.get(axes);\n };\n /**\n * Moves an axis to specific coordinates.\n * @ko 좌표를 이동한다.\n * @method eg.Axes#setTo\n * @param {Object.} pos The coordinate to move to 이동할 좌표\n * @param {Number} [duration=0] Duration of the animation (unit: ms) 애니메이션 진행 시간(단위: ms)\n * @return {eg.Axes} An instance of a module itself 모듈 자신의 인스턴스\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"xOther\": {\n * range: [-100, 100]\n * },\n * \t \"zoom\": {\n * range: [50, 30]\n * }\n * });\n *\n * axes.setTo({\"x\": 30, \"zoom\": 60});\n * axes.get(); // {\"x\": 30, \"xOther\": -100, \"zoom\": 60}\n *\n * axes.setTo({\"x\": 100, \"xOther\": 60}, 1000); // animatation\n *\n * // after 1000 ms\n * axes.get(); // {\"x\": 100, \"xOther\": 60, \"zoom\": 60}\n */\n\n\n __proto.setTo = function (pos, duration) {\n if (duration === void 0) {\n duration = 0;\n }\n\n this.am.setTo(pos, duration);\n return this;\n };\n /**\n * Moves an axis from the current coordinates to specific coordinates.\n * @ko 현재 좌표를 기준으로 좌표를 이동한다.\n * @method eg.Axes#setBy\n * @param {Object.} pos The coordinate to move to 이동할 좌표\n * @param {Number} [duration=0] Duration of the animation (unit: ms) 애니메이션 진행 시간(단위: ms)\n * @return {eg.Axes} An instance of a module itself 모듈 자신의 인스턴스\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"xOther\": {\n * range: [-100, 100]\n * },\n * \t \"zoom\": {\n * range: [50, 30]\n * }\n * });\n *\n * axes.setBy({\"x\": 30, \"zoom\": 10});\n * axes.get(); // {\"x\": 30, \"xOther\": -100, \"zoom\": 60}\n *\n * axes.setBy({\"x\": 70, \"xOther\": 60}, 1000); // animatation\n *\n * // after 1000 ms\n * axes.get(); // {\"x\": 100, \"xOther\": -40, \"zoom\": 60}\n */\n\n\n __proto.setBy = function (pos, duration) {\n if (duration === void 0) {\n duration = 0;\n }\n\n this.am.setBy(pos, duration);\n return this;\n };\n /**\n * Returns whether there is a coordinate in the bounce area of ​​the target axis.\n * @ko 대상 축 중 bounce영역에 좌표가 존재하는지를 반환한다\n * @method eg.Axes#isBounceArea\n * @param {Object} [axes] The names of the axis 축 이름들\n * @return {Boolen} Whether the bounce area exists. bounce 영역 존재 여부\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"xOther\": {\n * range: [-100, 100]\n * },\n * \t \"zoom\": {\n * range: [50, 30]\n * }\n * });\n *\n * axes.isBounceArea([\"x\"]);\n * axes.isBounceArea([\"x\", \"zoom\"]);\n * axes.isBounceArea();\n */\n\n\n __proto.isBounceArea = function (axes) {\n return this.axm.isOutside(axes);\n };\n /**\n * Destroys properties, and events used in a module and disconnect all connections to inputTypes.\n * @ko 모듈에 사용한 속성, 이벤트를 해제한다. 모든 inputType과의 연결을 끊는다.\n * @method eg.Axes#destroy\n */\n\n\n __proto.destroy = function () {\n this.disconnect();\n this.em.destroy();\n };\n /**\n * Version info string\n * @ko 버전정보 문자열\n * @name VERSION\n * @static\n * @type {String}\n * @example\n * eg.Axes.VERSION; // ex) 3.3.3\n * @memberof eg.Axes\n */\n\n\n Axes.VERSION = \"2.7.1\";\n /**\n * @name eg.Axes.TRANSFORM\n * @desc Returns the transform attribute with CSS vendor prefixes.\n * @ko CSS vendor prefixes를 붙인 transform 속성을 반환한다.\n *\n * @constant\n * @type {String}\n * @example\n * eg.Axes.TRANSFORM; // \"transform\" or \"webkitTransform\"\n */\n\n Axes.TRANSFORM = TRANSFORM;\n /**\n * @name eg.Axes.DIRECTION_NONE\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_NONE = DIRECTION_NONE;\n /**\n * @name eg.Axes.DIRECTION_LEFT\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_LEFT = DIRECTION_LEFT;\n /**\n * @name eg.Axes.DIRECTION_RIGHT\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_RIGHT = DIRECTION_RIGHT;\n /**\n * @name eg.Axes.DIRECTION_UP\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_UP = DIRECTION_UP;\n /**\n * @name eg.Axes.DIRECTION_DOWN\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_DOWN = DIRECTION_DOWN;\n /**\n * @name eg.Axes.DIRECTION_HORIZONTAL\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL;\n /**\n * @name eg.Axes.DIRECTION_VERTICAL\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_VERTICAL = DIRECTION_VERTICAL;\n /**\n * @name eg.Axes.DIRECTION_ALL\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_ALL = DIRECTION_ALL;\n return Axes;\n}(Component);\n\nvar SUPPORT_POINTER_EVENTS = \"PointerEvent\" in win || \"MSPointerEvent\" in win;\nvar SUPPORT_TOUCH = (\"ontouchstart\" in win);\nvar UNIQUEKEY = \"_EGJS_AXES_INPUTTYPE_\";\n\nfunction toAxis(source, offset) {\n return offset.reduce(function (acc, v, i) {\n if (source[i]) {\n acc[source[i]] = v;\n }\n\n return acc;\n }, {});\n}\n\nfunction createHammer(element, options) {\n try {\n // create Hammer\n return new Manager(element, _assign({}, options));\n } catch (e) {\n return null;\n }\n}\n\nfunction convertInputType(inputType) {\n if (inputType === void 0) {\n inputType = [];\n }\n\n var hasTouch = false;\n var hasMouse = false;\n var hasPointer = false;\n inputType.forEach(function (v) {\n switch (v) {\n case \"mouse\":\n hasMouse = true;\n break;\n\n case \"touch\":\n hasTouch = SUPPORT_TOUCH;\n break;\n\n case \"pointer\":\n hasPointer = SUPPORT_POINTER_EVENTS;\n // no default\n }\n });\n\n if (hasPointer) {\n return PointerEventInput;\n } else if (hasTouch && hasMouse) {\n return TouchMouseInput;\n } else if (hasTouch) {\n return TouchInput;\n } else if (hasMouse) {\n return MouseInput;\n }\n\n return null;\n}\n\nfunction getDirectionByAngle(angle, thresholdAngle) {\n if (thresholdAngle < 0 || thresholdAngle > 90) {\n return DIRECTION_NONE;\n }\n\n var toAngle = Math.abs(angle);\n return toAngle > thresholdAngle && toAngle < 180 - thresholdAngle ? DIRECTION_VERTICAL : DIRECTION_HORIZONTAL;\n}\n\nfunction getNextOffset(speeds, deceleration) {\n var normalSpeed = Math.sqrt(speeds[0] * speeds[0] + speeds[1] * speeds[1]);\n var duration = Math.abs(normalSpeed / -deceleration);\n return [speeds[0] / 2 * duration, speeds[1] / 2 * duration];\n}\n\nfunction useDirection(checkType, direction, userDirection) {\n if (userDirection) {\n return !!(direction === DIRECTION_ALL || direction & checkType && userDirection & checkType);\n } else {\n return !!(direction & checkType);\n }\n}\n/**\n * @typedef {Object} PanInputOption The option object of the eg.Axes.PanInput module.\n * @ko eg.Axes.PanInput 모듈의 옵션 객체\n * @property {String[]} [inputType=[\"touch\",\"mouse\", \"pointer\"]] Types of input devices.
- touch: Touch screen
- mouse: Mouse 입력 장치 종류.
- touch: 터치 입력 장치
- mouse: 마우스
\n * @property {Number[]} [scale] Coordinate scale that a user can move사용자의 동작으로 이동하는 좌표의 배율\n * @property {Number} [scale.0=1] horizontal axis scale 수평축 배율\n * @property {Number} [scale.1=1] vertical axis scale 수직축 배율\n * @property {Number} [thresholdAngle=45] The threshold value that determines whether user action is horizontal or vertical (0~90) 사용자의 동작이 가로 방향인지 세로 방향인지 판단하는 기준 각도(0~90)\n * @property {Number} [threshold=0] Minimal pan distance required before recognizing 사용자의 Pan 동작을 인식하기 위해산 최소한의 거리\n * @property {Number} [iOSEdgeSwipeThreshold=30] Area (px) that can go to the next page when swiping the right edge in iOS safari iOS Safari에서 오른쪽 엣지를 스와이프 하는 경우 다음 페이지로 넘어갈 수 있는 영역(px)\n * @property {Object} [hammerManagerOptions={cssProps: {userSelect: \"none\",touchSelect: \"none\",touchCallout: \"none\",userDrag: \"none\"}] Options of Hammer.Manager Hammer.Manager의 옵션\n**/\n\n/**\n * @class eg.Axes.PanInput\n * @classdesc A module that passes the amount of change to eg.Axes when the mouse or touchscreen is down and moved. use less than two axes.\n * @ko 마우스나 터치 스크린을 누르고 움직일때의 변화량을 eg.Axes에 전달하는 모듈. 두개 이하의 축을 사용한다.\n *\n * @example\n * const pan = new eg.Axes.PanInput(\"#area\", {\n * \t\tinputType: [\"touch\"],\n * \t\tscale: [1, 1.3],\n * });\n *\n * // Connect the 'something2' axis to the mouse or touchscreen x position when the mouse or touchscreen is down and moved.\n * // Connect the 'somethingN' axis to the mouse or touchscreen y position when the mouse or touchscreen is down and moved.\n * axes.connect([\"something2\", \"somethingN\"], pan); // or axes.connect(\"something2 somethingN\", pan);\n *\n * // Connect only one 'something1' axis to the mouse or touchscreen x position when the mouse or touchscreen is down and moved.\n * axes.connect([\"something1\"], pan); // or axes.connect(\"something1\", pan);\n *\n * // Connect only one 'something2' axis to the mouse or touchscreen y position when the mouse or touchscreen is down and moved.\n * axes.connect([\"\", \"something2\"], pan); // or axes.connect(\" something2\", pan);\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.PanInput module eg.Axes.PanInput 모듈을 사용할 엘리먼트\n * @param {PanInputOption} [options] The option object of the eg.Axes.PanInput moduleeg.Axes.PanInput 모듈의 옵션 객체\n */\n\n\nvar PanInput = /*#__PURE__*/function () {\n function PanInput(el, options) {\n this.axes = [];\n this.hammer = null;\n this.element = null;\n this.panRecognizer = null;\n this.isRightEdge = false;\n this.rightEdgeTimer = 0;\n this.panFlag = false;\n /**\n * Hammer helps you add support for touch gestures to your page\n *\n * @external Hammer\n * @see {@link http://hammerjs.github.io|Hammer.JS}\n * @see {@link http://hammerjs.github.io/jsdoc/Hammer.html|Hammer.JS API documents}\n * @see Hammer.JS applies specific CSS properties by {@link http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html|default} when creating an instance. The eg.Axes module removes all default CSS properties provided by Hammer.JS\n */\n\n if (typeof Manager === \"undefined\") {\n throw new Error(\"The Hammerjs must be loaded before eg.Axes.PanInput.\\nhttp://hammerjs.github.io/\");\n }\n\n this.element = $(el);\n this.options = _assign({\n inputType: [\"touch\", \"mouse\", \"pointer\"],\n scale: [1, 1],\n thresholdAngle: 45,\n threshold: 0,\n iOSEdgeSwipeThreshold: IOS_EDGE_THRESHOLD,\n hammerManagerOptions: {\n // css properties were removed due to usablility issue\n // http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html\n cssProps: {\n userSelect: \"none\",\n touchSelect: \"none\",\n touchCallout: \"none\",\n userDrag: \"none\"\n }\n }\n }, options);\n this.onHammerInput = this.onHammerInput.bind(this);\n this.onPanmove = this.onPanmove.bind(this);\n this.onPanend = this.onPanend.bind(this);\n }\n\n var __proto = PanInput.prototype;\n\n __proto.mapAxes = function (axes) {\n var useHorizontal = !!axes[0];\n var useVertical = !!axes[1];\n\n if (useHorizontal && useVertical) {\n this._direction = DIRECTION_ALL;\n } else if (useHorizontal) {\n this._direction = DIRECTION_HORIZONTAL;\n } else if (useVertical) {\n this._direction = DIRECTION_VERTICAL;\n } else {\n this._direction = DIRECTION_NONE;\n }\n\n this.axes = axes;\n };\n\n __proto.connect = function (observer) {\n var hammerOption = {\n direction: this._direction,\n threshold: this.options.threshold\n };\n\n if (this.hammer) {\n // for sharing hammer instance.\n // hammer remove previous PanRecognizer.\n this.removeRecognizer();\n this.dettachEvent();\n } else {\n var keyValue = this.element[UNIQUEKEY];\n\n if (!keyValue) {\n keyValue = String(Math.round(Math.random() * new Date().getTime()));\n }\n\n var inputClass = convertInputType(this.options.inputType);\n\n if (!inputClass) {\n throw new Error(\"Wrong inputType parameter!\");\n }\n\n this.hammer = createHammer(this.element, _assign({\n inputClass: inputClass\n }, this.options.hammerManagerOptions));\n this.element[UNIQUEKEY] = keyValue;\n }\n\n this.panRecognizer = new Pan(hammerOption);\n this.hammer.add(this.panRecognizer);\n this.attachEvent(observer);\n return this;\n };\n\n __proto.disconnect = function () {\n this.removeRecognizer();\n\n if (this.hammer) {\n this.dettachEvent();\n }\n\n this._direction = DIRECTION_NONE;\n return this;\n };\n /**\n * Destroys elements, properties, and events used in a module.\n * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\n * @method eg.Axes.PanInput#destroy\n */\n\n\n __proto.destroy = function () {\n this.disconnect();\n\n if (this.hammer && this.hammer.recognizers.length === 0) {\n this.hammer.destroy();\n }\n\n delete this.element[UNIQUEKEY];\n this.element = null;\n this.hammer = null;\n };\n /**\n * Enables input devices\n * @ko 입력 장치를 사용할 수 있게 한다\n * @method eg.Axes.PanInput#enable\n * @return {eg.Axes.PanInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.enable = function () {\n this.hammer && (this.hammer.get(\"pan\").options.enable = true);\n return this;\n };\n /**\n * Disables input devices\n * @ko 입력 장치를 사용할 수 없게 한다.\n * @method eg.Axes.PanInput#disable\n * @return {eg.Axes.PanInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.disable = function () {\n this.hammer && (this.hammer.get(\"pan\").options.enable = false);\n return this;\n };\n /**\n * Returns whether to use an input device\n * @ko 입력 장치를 사용 여부를 반환한다.\n * @method eg.Axes.PanInput#isEnable\n * @return {Boolean} Whether to use an input device 입력장치 사용여부\n */\n\n\n __proto.isEnable = function () {\n return !!(this.hammer && this.hammer.get(\"pan\").options.enable);\n };\n\n __proto.removeRecognizer = function () {\n if (this.hammer && this.panRecognizer) {\n this.hammer.remove(this.panRecognizer);\n this.panRecognizer = null;\n }\n };\n\n __proto.onHammerInput = function (event) {\n if (this.isEnable()) {\n if (event.isFirst) {\n this.panFlag = false;\n\n if (event.srcEvent.cancelable !== false) {\n var edgeThreshold = this.options.iOSEdgeSwipeThreshold;\n this.observer.hold(this, event);\n this.isRightEdge = IS_IOS_SAFARI && event.center.x > window.innerWidth - edgeThreshold;\n this.panFlag = true;\n }\n } else if (event.isFinal) {\n this.onPanend(event);\n }\n }\n };\n\n __proto.onPanmove = function (event) {\n var _this = this;\n\n if (!this.panFlag) {\n return;\n }\n\n var userDirection = getDirectionByAngle(event.angle, this.options.thresholdAngle); // not support offset properties in Hammerjs - start\n\n var prevInput = this.hammer.session.prevInput;\n\n if (prevInput && IS_IOS_SAFARI) {\n var swipeLeftToRight = event.center.x < 0;\n\n if (swipeLeftToRight) {\n // iOS swipe left => right\n this.onPanend(_assign({}, prevInput, {\n velocityX: 0,\n velocityY: 0,\n offsetX: 0,\n offsetY: 0\n }));\n return;\n } else if (this.isRightEdge) {\n clearTimeout(this.rightEdgeTimer); // - is right to left\n\n var edgeThreshold = this.options.iOSEdgeSwipeThreshold;\n var swipeRightToLeft = event.deltaX < -edgeThreshold;\n\n if (swipeRightToLeft) {\n this.isRightEdge = false;\n } else {\n // iOS swipe right => left\n this.rightEdgeTimer = window.setTimeout(function () {\n _this.onPanend(_assign({}, prevInput, {\n velocityX: 0,\n velocityY: 0,\n offsetX: 0,\n offsetY: 0\n }));\n }, 100);\n }\n }\n }\n /* eslint-disable no-param-reassign */\n\n\n if (prevInput) {\n event.offsetX = event.deltaX - prevInput.deltaX;\n event.offsetY = event.deltaY - prevInput.deltaY;\n } else {\n event.offsetX = 0;\n event.offsetY = 0;\n }\n\n var offset = this.getOffset([event.offsetX, event.offsetY], [useDirection(DIRECTION_HORIZONTAL, this._direction, userDirection), useDirection(DIRECTION_VERTICAL, this._direction, userDirection)]);\n var prevent = offset.some(function (v) {\n return v !== 0;\n });\n\n if (prevent) {\n var srcEvent = event.srcEvent;\n\n if (srcEvent.cancelable !== false) {\n srcEvent.preventDefault();\n }\n\n srcEvent.stopPropagation();\n }\n\n event.preventSystemEvent = prevent;\n prevent && this.observer.change(this, event, toAxis(this.axes, offset));\n };\n\n __proto.onPanend = function (event) {\n if (!this.panFlag) {\n return;\n }\n\n clearTimeout(this.rightEdgeTimer);\n this.panFlag = false;\n var offset = this.getOffset([Math.abs(event.velocityX) * (event.deltaX < 0 ? -1 : 1), Math.abs(event.velocityY) * (event.deltaY < 0 ? -1 : 1)], [useDirection(DIRECTION_HORIZONTAL, this._direction), useDirection(DIRECTION_VERTICAL, this._direction)]);\n offset = getNextOffset(offset, this.observer.options.deceleration);\n this.observer.release(this, event, toAxis(this.axes, offset));\n };\n\n __proto.attachEvent = function (observer) {\n this.observer = observer;\n this.hammer.on(\"hammer.input\", this.onHammerInput).on(\"panstart panmove\", this.onPanmove);\n };\n\n __proto.dettachEvent = function () {\n this.hammer.off(\"hammer.input\", this.onHammerInput).off(\"panstart panmove\", this.onPanmove);\n this.observer = null;\n };\n\n __proto.getOffset = function (properties, direction) {\n var offset = [0, 0];\n var scale = this.options.scale;\n\n if (direction[0]) {\n offset[0] = properties[0] * scale[0];\n }\n\n if (direction[1]) {\n offset[1] = properties[1] * scale[1];\n }\n\n return offset;\n };\n\n return PanInput;\n}();\n/**\n * @class eg.Axes.RotatePanInput\n * @classdesc A module that passes the angle moved by touch to Axes and uses one axis of rotation.
[Details](https://github.com/naver/egjs-axes/wiki/RotatePanInput)\n * @ko 터치에 의해 움직인 각도를 Axes 에 전달하며 1개의 회전축만 사용한다.
[상세내용](https://github.com/naver/egjs-axes/wiki/RotatePanInput-%7C-%ED%95%9C%EA%B5%AD%EC%96%B4)\n *\n * @example\n * const input = new eg.Axes.RotatePanInput(\"#area\");\n *\n * var axes = new eg.Axes({\n *\t// property name('angle') could be anything you want (eg. x, y, z...)\n * \tangle: {\n * \t\trange: [-180, 180] // from -180deg to 180deg\n * \t}\n * });\n *\n * axes.connect(\"angle\", input)\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.RotatePanInput module eg.Axes.RotatePanInput 모듈을 사용할 엘리먼트\n * @param {PanInputOption} [options] The option object of the eg.Axes.PanInput moduleeg.Axes.PanInput 모듈의 옵션 객체\n * @extends eg.Axes.PanInput\n */\n\n\nvar RotatePanInput = /*#__PURE__*/function (_super) {\n __extends(RotatePanInput, _super);\n\n function RotatePanInput(el, options) {\n var _this = _super.call(this, el, options) || this;\n\n _this.prevQuadrant = null;\n _this.lastDiff = 0;\n return _this;\n }\n\n var __proto = RotatePanInput.prototype;\n\n __proto.mapAxes = function (axes) {\n this._direction = Axes.DIRECTION_ALL;\n this.axes = axes;\n };\n\n __proto.onHammerInput = function (event) {\n if (this.isEnable()) {\n if (event.isFirst) {\n this.observer.hold(this, event);\n this.onPanstart(event);\n } else if (event.isFinal) {\n this.onPanend(event);\n }\n }\n };\n\n __proto.onPanstart = function (event) {\n var rect = this.element.getBoundingClientRect();\n /**\n * Responsive\n */\n // TODO: how to do if element is ellipse not circle.\n\n this.coefficientForDistanceToAngle = 360 / (rect.width * Math.PI); // from 2*pi*r * x / 360\n // TODO: provide a way to set origin like https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin\n\n this.rotateOrigin = [rect.left + (rect.width - 1) / 2, rect.top + (rect.height - 1) / 2]; // init angle.\n\n this.prevAngle = null;\n this.triggerChange(event);\n };\n\n __proto.onPanmove = function (event) {\n this.triggerChange(event);\n };\n\n __proto.onPanend = function (event) {\n this.triggerChange(event);\n this.triggerAnimation(event);\n };\n\n __proto.triggerChange = function (event) {\n var angle = this.getAngle(event.center.x, event.center.y);\n var quadrant = this.getQuadrant(event.center.x, event.center.y);\n var diff = this.getDifference(this.prevAngle, angle, this.prevQuadrant, quadrant);\n this.prevAngle = angle;\n this.prevQuadrant = quadrant;\n\n if (diff === 0) {\n return;\n }\n\n this.lastDiff = diff;\n this.observer.change(this, event, toAxis(this.axes, [-diff])); // minus for clockwise\n };\n\n __proto.triggerAnimation = function (event) {\n var vx = event.velocityX;\n var vy = event.velocityY;\n var velocity = Math.sqrt(vx * vx + vy * vy) * (this.lastDiff > 0 ? -1 : 1); // clockwise\n\n var duration = Math.abs(velocity / -this.observer.options.deceleration);\n var distance = velocity / 2 * duration;\n this.observer.release(this, event, toAxis(this.axes, [distance * this.coefficientForDistanceToAngle]));\n };\n\n __proto.getDifference = function (prevAngle, angle, prevQuadrant, quadrant) {\n var diff;\n\n if (prevAngle === null) {\n diff = 0;\n } else if (prevQuadrant === 1 && quadrant === 4) {\n diff = -prevAngle - (360 - angle);\n } else if (prevQuadrant === 4 && quadrant === 1) {\n diff = 360 - prevAngle + angle;\n } else {\n diff = angle - prevAngle;\n }\n\n return diff;\n };\n\n __proto.getPosFromOrigin = function (posX, posY) {\n return {\n x: posX - this.rotateOrigin[0],\n y: this.rotateOrigin[1] - posY\n };\n };\n\n __proto.getAngle = function (posX, posY) {\n var _a = this.getPosFromOrigin(posX, posY),\n x = _a.x,\n y = _a.y;\n\n var angle = Math.atan2(y, x) * 180 / Math.PI; // console.log(angle, x, y);\n\n return angle < 0 ? 360 + angle : angle;\n };\n /**\n * Quadrant\n * y(+)\n * |\n * 2 | 1\n * --------------->x(+)\n * 3 | 4\n * |\n */\n\n\n __proto.getQuadrant = function (posX, posY) {\n var _a = this.getPosFromOrigin(posX, posY),\n x = _a.x,\n y = _a.y;\n\n var q = 0;\n\n if (x >= 0 && y >= 0) {\n q = 1;\n } else if (x < 0 && y >= 0) {\n q = 2;\n } else if (x < 0 && y < 0) {\n q = 3;\n } else if (x >= 0 && y < 0) {\n q = 4;\n }\n\n return q;\n };\n\n return RotatePanInput;\n}(PanInput);\n/**\n * @typedef {Object} PinchInputOption The option object of the eg.Axes.PinchInput module\n * @ko eg.Axes.PinchInput 모듈의 옵션 객체\n * @property {Number} [scale=1] Coordinate scale that a user can move사용자의 동작으로 이동하는 좌표의 배율\n * @property {Number} [threshold=0] Minimal scale before recognizing 사용자의 Pinch 동작을 인식하기 위해산 최소한의 배율\n * @property {Object} [hammerManagerOptions={cssProps: {userSelect: \"none\",touchSelect: \"none\",touchCallout: \"none\",userDrag: \"none\"}] Options of Hammer.Manager Hammer.Manager의 옵션\n**/\n\n/**\n * @class eg.Axes.PinchInput\n * @classdesc A module that passes the amount of change to eg.Axes when two pointers are moving toward (zoom-in) or away from each other (zoom-out). use one axis.\n * @ko 2개의 pointer를 이용하여 zoom-in하거나 zoom-out 하는 동작의 변화량을 eg.Axes에 전달하는 모듈. 한 개 의 축을 사용한다.\n * @example\n * const pinch = new eg.Axes.PinchInput(\"#area\", {\n * \t\tscale: 1\n * });\n *\n * // Connect 'something' axis when two pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * axes.connect(\"something\", pinch);\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.PinchInput module eg.Axes.PinchInput 모듈을 사용할 엘리먼트\n * @param {PinchInputOption} [options] The option object of the eg.Axes.PinchInput moduleeg.Axes.PinchInput 모듈의 옵션 객체\n */\n\n\nvar PinchInput = /*#__PURE__*/function () {\n function PinchInput(el, options) {\n this.axes = [];\n this.hammer = null;\n this.element = null;\n this._base = null;\n this._prev = null;\n this.pinchRecognizer = null;\n /**\n * Hammer helps you add support for touch gestures to your page\n *\n * @external Hammer\n * @see {@link http://hammerjs.github.io|Hammer.JS}\n * @see {@link http://hammerjs.github.io/jsdoc/Hammer.html|Hammer.JS API documents}\n * @see Hammer.JS applies specific CSS properties by {@link http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html|default} when creating an instance. The eg.Axes module removes all default CSS properties provided by Hammer.JS\n */\n\n if (typeof Manager === \"undefined\") {\n throw new Error(\"The Hammerjs must be loaded before eg.Axes.PinchInput.\\nhttp://hammerjs.github.io/\");\n }\n\n this.element = $(el);\n this.options = _assign({\n scale: 1,\n threshold: 0,\n inputType: [\"touch\", \"pointer\"],\n hammerManagerOptions: {\n // css properties were removed due to usablility issue\n // http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html\n cssProps: {\n userSelect: \"none\",\n touchSelect: \"none\",\n touchCallout: \"none\",\n userDrag: \"none\"\n }\n }\n }, options);\n this.onPinchStart = this.onPinchStart.bind(this);\n this.onPinchMove = this.onPinchMove.bind(this);\n this.onPinchEnd = this.onPinchEnd.bind(this);\n }\n\n var __proto = PinchInput.prototype;\n\n __proto.mapAxes = function (axes) {\n this.axes = axes;\n };\n\n __proto.connect = function (observer) {\n var hammerOption = {\n threshold: this.options.threshold\n };\n\n if (this.hammer) {\n // for sharing hammer instance.\n // hammer remove previous PinchRecognizer.\n this.removeRecognizer();\n this.dettachEvent();\n } else {\n var keyValue = this.element[UNIQUEKEY];\n\n if (!keyValue) {\n keyValue = String(Math.round(Math.random() * new Date().getTime()));\n }\n\n var inputClass = convertInputType(this.options.inputType);\n\n if (!inputClass) {\n throw new Error(\"Wrong inputType parameter!\");\n }\n\n this.hammer = createHammer(this.element, _assign({\n inputClass: inputClass\n }, this.options.hammerManagerOptions));\n this.element[UNIQUEKEY] = keyValue;\n }\n\n this.pinchRecognizer = new Pinch(hammerOption);\n this.hammer.add(this.pinchRecognizer);\n this.attachEvent(observer);\n return this;\n };\n\n __proto.disconnect = function () {\n this.removeRecognizer();\n\n if (this.hammer) {\n this.hammer.remove(this.pinchRecognizer);\n this.pinchRecognizer = null;\n this.dettachEvent();\n }\n\n return this;\n };\n /**\n * Destroys elements, properties, and events used in a module.\n * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\n * @method eg.Axes.PinchInput#destroy\n */\n\n\n __proto.destroy = function () {\n this.disconnect();\n\n if (this.hammer && this.hammer.recognizers.length === 0) {\n this.hammer.destroy();\n }\n\n delete this.element[UNIQUEKEY];\n this.element = null;\n this.hammer = null;\n };\n\n __proto.removeRecognizer = function () {\n if (this.hammer && this.pinchRecognizer) {\n this.hammer.remove(this.pinchRecognizer);\n this.pinchRecognizer = null;\n }\n };\n\n __proto.onPinchStart = function (event) {\n this._base = this.observer.get(this)[this.axes[0]];\n var offset = this.getOffset(event.scale);\n this.observer.hold(this, event);\n this.observer.change(this, event, toAxis(this.axes, [offset]));\n this._prev = event.scale;\n };\n\n __proto.onPinchMove = function (event) {\n var offset = this.getOffset(event.scale, this._prev);\n this.observer.change(this, event, toAxis(this.axes, [offset]));\n this._prev = event.scale;\n };\n\n __proto.onPinchEnd = function (event) {\n var offset = this.getOffset(event.scale, this._prev);\n this.observer.change(this, event, toAxis(this.axes, [offset]));\n this.observer.release(this, event, toAxis(this.axes, [0]), 0);\n this._base = null;\n this._prev = null;\n };\n\n __proto.getOffset = function (pinchScale, prev) {\n if (prev === void 0) {\n prev = 1;\n }\n\n return this._base * (pinchScale - prev) * this.options.scale;\n };\n\n __proto.attachEvent = function (observer) {\n this.observer = observer;\n this.hammer.on(\"pinchstart\", this.onPinchStart).on(\"pinchmove\", this.onPinchMove).on(\"pinchend\", this.onPinchEnd);\n };\n\n __proto.dettachEvent = function () {\n this.hammer.off(\"pinchstart\", this.onPinchStart).off(\"pinchmove\", this.onPinchMove).off(\"pinchend\", this.onPinchEnd);\n this.observer = null;\n this._prev = null;\n };\n /**\n * Enables input devices\n * @ko 입력 장치를 사용할 수 있게 한다\n * @method eg.Axes.PinchInput#enable\n * @return {eg.Axes.PinchInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.enable = function () {\n this.hammer && (this.hammer.get(\"pinch\").options.enable = true);\n return this;\n };\n /**\n * Disables input devices\n * @ko 입력 장치를 사용할 수 없게 한다.\n * @method eg.Axes.PinchInput#disable\n * @return {eg.Axes.PinchInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.disable = function () {\n this.hammer && (this.hammer.get(\"pinch\").options.enable = false);\n return this;\n };\n /**\n * Returns whether to use an input device\n * @ko 입력 장치를 사용 여부를 반환한다.\n * @method eg.Axes.PinchInput#isEnable\n * @return {Boolean} Whether to use an input device 입력장치 사용여부\n */\n\n\n __proto.isEnable = function () {\n return !!(this.hammer && this.hammer.get(\"pinch\").options.enable);\n };\n\n return PinchInput;\n}();\n/**\n * @typedef {Object} WheelInputOption The option object of the eg.Axes.WheelInput module\n * @ko eg.Axes.WheelInput 모듈의 옵션 객체\n * @property {Number} [scale=1] Coordinate scale that a user can move사용자의 동작으로 이동하는 좌표의 배율\n**/\n\n/**\n * @class eg.Axes.WheelInput\n * @classdesc A module that passes the amount of change to eg.Axes when the mouse wheel is moved. use one axis.\n * @ko 마우스 휠이 움직일때의 변화량을 eg.Axes에 전달하는 모듈. 한 개 의 축을 사용한다.\n *\n * @example\n * const wheel = new eg.Axes.WheelInput(\"#area\", {\n * \t\tscale: 1\n * });\n *\n * // Connect 'something' axis when the mousewheel is moved.\n * axes.connect(\"something\", wheel);\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.WheelInput module eg.Axes.WheelInput 모듈을 사용할 엘리먼트\n * @param {WheelInputOption} [options] The option object of the eg.Axes.WheelInput moduleeg.Axes.WheelInput 모듈의 옵션 객체\n */\n\n\nvar WheelInput = /*#__PURE__*/function () {\n function WheelInput(el, options) {\n this.axes = [];\n this.element = null;\n this._isEnabled = false;\n this._isHolded = false;\n this._timer = null;\n this.element = $(el);\n this.options = _assign({\n scale: 1,\n useNormalized: true\n }, options);\n this.onWheel = this.onWheel.bind(this);\n }\n\n var __proto = WheelInput.prototype;\n\n __proto.mapAxes = function (axes) {\n this.axes = axes;\n };\n\n __proto.connect = function (observer) {\n this.dettachEvent();\n this.attachEvent(observer);\n return this;\n };\n\n __proto.disconnect = function () {\n this.dettachEvent();\n return this;\n };\n /**\n * Destroys elements, properties, and events used in a module.\n * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\n * @method eg.Axes.WheelInput#destroy\n */\n\n\n __proto.destroy = function () {\n this.disconnect();\n this.element = null;\n };\n\n __proto.onWheel = function (event) {\n var _this = this;\n\n if (!this._isEnabled) {\n return;\n }\n\n event.preventDefault();\n\n if (event.deltaY === 0) {\n return;\n }\n\n if (!this._isHolded) {\n this.observer.hold(this, event);\n this._isHolded = true;\n }\n\n var offset = (event.deltaY > 0 ? -1 : 1) * this.options.scale * (this.options.useNormalized ? 1 : Math.abs(event.deltaY));\n this.observer.change(this, event, toAxis(this.axes, [offset]));\n clearTimeout(this._timer);\n this._timer = setTimeout(function () {\n if (_this._isHolded) {\n _this._isHolded = false;\n\n _this.observer.release(_this, event, toAxis(_this.axes, [0]));\n }\n }, 50);\n };\n\n __proto.attachEvent = function (observer) {\n this.observer = observer;\n this.element.addEventListener(\"wheel\", this.onWheel);\n this._isEnabled = true;\n };\n\n __proto.dettachEvent = function () {\n this.element.removeEventListener(\"wheel\", this.onWheel);\n this._isEnabled = false;\n this.observer = null;\n\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n };\n /**\n * Enables input devices\n * @ko 입력 장치를 사용할 수 있게 한다\n * @method eg.Axes.WheelInput#enable\n * @return {eg.Axes.WheelInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.enable = function () {\n this._isEnabled = true;\n return this;\n };\n /**\n * Disables input devices\n * @ko 입력 장치를 사용할 수 없게 한다.\n * @method eg.Axes.WheelInput#disable\n * @return {eg.Axes.WheelInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.disable = function () {\n this._isEnabled = false;\n return this;\n };\n /**\n * Returns whether to use an input device\n * @ko 입력 장치를 사용 여부를 반환한다.\n * @method eg.Axes.WheelInput#isEnable\n * @return {Boolean} Whether to use an input device 입력장치 사용여부\n */\n\n\n __proto.isEnable = function () {\n return this._isEnabled;\n };\n\n return WheelInput;\n}();\n\nvar KEY_LEFT_ARROW = 37;\nvar KEY_A = 65;\nvar KEY_UP_ARROW = 38;\nvar KEY_W = 87;\nvar KEY_RIGHT_ARROW = 39;\nvar KEY_D = 68;\nvar KEY_DOWN_ARROW = 40;\nvar KEY_S = 83;\nvar DIRECTION_REVERSE = -1;\nvar DIRECTION_FORWARD = 1;\nvar DIRECTION_HORIZONTAL$1 = -1;\nvar DIRECTION_VERTICAL$1 = 1;\nvar DELAY = 80;\n/**\n * @typedef {Object} MoveKeyInputOption The option object of the eg.Axes.MoveKeyInput module\n * @ko eg.Axes.MoveKeyInput 모듈의 옵션 객체\n * @property {Array} [scale] Coordinate scale that a user can move사용자의 동작으로 이동하는 좌표의 배율\n * @property {Number} [scale[0]=1] Coordinate scale for the first axis첫번째 축의 배율\n * @property {Number} [scale[1]=1] Coordinate scale for the decond axis두번째 축의 배율\n**/\n\n/**\n * @class eg.Axes.MoveKeyInput\n * @classdesc A module that passes the amount of change to eg.Axes when the move key stroke is occured. use two axis.\n * @ko 이동키 입력이 발생했을 때의 변화량을 eg.Axes에 전달하는 모듈. 두 개 의 축을 사용한다.\n *\n * @example\n * const moveKey = new eg.Axes.MoveKeyInput(\"#area\", {\n * \t\tscale: [1, 1]\n * });\n *\n * // Connect 'x', 'y' axes when the moveKey is pressed.\n * axes.connect([\"x\", \"y\"], moveKey);\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.MoveKeyInput module eg.Axes.MoveKeyInput 모듈을 사용할 엘리먼트\n * @param {MoveKeyInputOption} [options] The option object of the eg.Axes.MoveKeyInput moduleeg.Axes.MoveKeyInput 모듈의 옵션 객체\n */\n\nvar MoveKeyInput = /*#__PURE__*/function () {\n function MoveKeyInput(el, options) {\n this.axes = [];\n this.element = null;\n this._isEnabled = false;\n this._isHolded = false;\n this._timer = null;\n this.element = $(el);\n this.options = _assign({\n scale: [1, 1]\n }, options);\n this.onKeydown = this.onKeydown.bind(this);\n this.onKeyup = this.onKeyup.bind(this);\n }\n\n var __proto = MoveKeyInput.prototype;\n\n __proto.mapAxes = function (axes) {\n this.axes = axes;\n };\n\n __proto.connect = function (observer) {\n this.dettachEvent(); // add tabindex=\"0\" to the container for making it focusable\n\n if (this.element.getAttribute(\"tabindex\") !== \"0\") {\n this.element.setAttribute(\"tabindex\", \"0\");\n }\n\n this.attachEvent(observer);\n return this;\n };\n\n __proto.disconnect = function () {\n this.dettachEvent();\n return this;\n };\n /**\n * Destroys elements, properties, and events used in a module.\n * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\n * @method eg.Axes.MoveKeyInput#destroy\n */\n\n\n __proto.destroy = function () {\n this.disconnect();\n this.element = null;\n };\n\n __proto.onKeydown = function (e) {\n if (!this._isEnabled) {\n return;\n }\n\n var isMoveKey = true;\n var direction = DIRECTION_FORWARD;\n var move = DIRECTION_HORIZONTAL$1;\n\n switch (e.keyCode) {\n case KEY_LEFT_ARROW:\n case KEY_A:\n direction = DIRECTION_REVERSE;\n break;\n\n case KEY_RIGHT_ARROW:\n case KEY_D:\n break;\n\n case KEY_DOWN_ARROW:\n case KEY_S:\n direction = DIRECTION_REVERSE;\n move = DIRECTION_VERTICAL$1;\n break;\n\n case KEY_UP_ARROW:\n case KEY_W:\n move = DIRECTION_VERTICAL$1;\n break;\n\n default:\n isMoveKey = false;\n }\n\n if (move === DIRECTION_HORIZONTAL$1 && !this.axes[0] || move === DIRECTION_VERTICAL$1 && !this.axes[1]) {\n isMoveKey = false;\n }\n\n if (!isMoveKey) {\n return;\n }\n\n var offsets = move === DIRECTION_HORIZONTAL$1 ? [+this.options.scale[0] * direction, 0] : [0, +this.options.scale[1] * direction];\n\n if (!this._isHolded) {\n this.observer.hold(this, event);\n this._isHolded = true;\n }\n\n clearTimeout(this._timer);\n this.observer.change(this, event, toAxis(this.axes, offsets));\n };\n\n __proto.onKeyup = function (e) {\n var _this = this;\n\n if (!this._isHolded) {\n return;\n }\n\n clearTimeout(this._timer);\n this._timer = setTimeout(function () {\n _this.observer.release(_this, e, toAxis(_this.axes, [0, 0]));\n\n _this._isHolded = false;\n }, DELAY);\n };\n\n __proto.attachEvent = function (observer) {\n this.observer = observer;\n this.element.addEventListener(\"keydown\", this.onKeydown, false);\n this.element.addEventListener(\"keypress\", this.onKeydown, false);\n this.element.addEventListener(\"keyup\", this.onKeyup, false);\n this._isEnabled = true;\n };\n\n __proto.dettachEvent = function () {\n this.element.removeEventListener(\"keydown\", this.onKeydown, false);\n this.element.removeEventListener(\"keypress\", this.onKeydown, false);\n this.element.removeEventListener(\"keyup\", this.onKeyup, false);\n this._isEnabled = false;\n this.observer = null;\n };\n /**\n * Enables input devices\n * @ko 입력 장치를 사용할 수 있게 한다\n * @method eg.Axes.MoveKeyInput#enable\n * @return {eg.Axes.MoveKeyInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.enable = function () {\n this._isEnabled = true;\n return this;\n };\n /**\n * Disables input devices\n * @ko 입력 장치를 사용할 수 없게 한다.\n * @method eg.Axes.MoveKeyInput#disable\n * @return {eg.Axes.MoveKeyInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.disable = function () {\n this._isEnabled = false;\n return this;\n };\n /**\n * Returns whether to use an input device\n * @ko 입력 장치를 사용 여부를 반환한다.\n * @method eg.Axes.MoveKeyInput#isEnable\n * @return {Boolean} Whether to use an input device 입력장치 사용여부\n */\n\n\n __proto.isEnable = function () {\n return this._isEnabled;\n };\n\n return MoveKeyInput;\n}();\n\nexport default Axes;\nexport { PanInput, RotatePanInput, PinchInput, WheelInput, MoveKeyInput };","module.exports = __webpack_public_path__ + \"static/301-blog-323cbca21bdd39cfb94a18e9896d8459.png\";","import styled from \"styled-components\"\n\nexport const GridOneColumn = styled.div`\n display: grid;\n grid-template-columns: 1fr;\n justify-items: center;\n margin-bottom: 50px;\n`\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = __webpack_public_path__ + \"static/our-story-724926976954d9c69394671b7cc3ff4d.png\";","import React from \"react\"\nimport styled from \"styled-components\"\n\nimport {\n PageSegment,\n TitleAndDescription,\n FormStyled,\n InputStyled,\n SubmitButton,\n} from \"..\"\nimport { GridOneColumn } from \"../../styles\"\n\nimport { useForm } from \"../../utils\"\n\nexport const ContactUs = () => {\n return (\n \n \n \n

\n We'd love to hear from you. Have a question you need answering or\n simply want to leave us feedback?\n

\n
\n \n
\n
\n )\n}\n\nexport const ContactUsForm = () => {\n const { values, updateValue, setValues } = useForm({\n name: \"\",\n email: \"\",\n message: \"\",\n })\n\n const handleOnSubmit = () => {\n const data = {\n name: values.name,\n email: values.email,\n message: values.message,\n }\n\n fetch(process.env.GATSBY_CONTACT_US_API!, {\n method: \"POST\",\n mode: \"cors\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n })\n .then(response => response.json())\n .then(data => {\n console.log(\"Success:\", data)\n\n setValues({\n name: \"\",\n email: \"\",\n message: \"\",\n })\n })\n .catch(error => {\n console.error(\"Error:\", error)\n })\n }\n\n return (\n {\n e.preventDefault()\n handleOnSubmit()\n }}\n >\n \n \n \n \n \n )\n}\n","'use strict';\n\nfunction _interopDefault(ex) {\n return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\nvar React = require('react');\n\nvar React__default = _interopDefault(React);\n\nfunction _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\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n\n if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n\n var mountedInstances = [];\n var state;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(SideEffect, _PureComponent);\n\n function SideEffect() {\n return _PureComponent.apply(this, arguments) || this;\n } // Try to use displayName of wrapped component\n // Expose canUseDOM so tests can monkeypatch it\n\n\n SideEffect.peek = function peek() {\n return state;\n };\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n _proto.render = function render() {\n return React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;","module.exports = __webpack_public_path__ + \"static/creatives-5c4a7077dfdd25e2f0eb5c928cb6ff5c.png\";"],"sourceRoot":""}