{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/core-js/internals/global.js","webpack:///./node_modules/core-js/internals/function-uncurry-this.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/core-js/internals/is-callable.js","webpack:///./node_modules/core-js/internals/fails.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack:///./node_modules/core-js/internals/descriptors.js","webpack:///./node_modules/core-js/internals/has-own-property.js","webpack:///./node_modules/core-js/internals/is-object.js","webpack:///./node_modules/core-js/internals/well-known-symbol.js","webpack:///./node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:///./node_modules/core-js/internals/get-built-in.js","webpack:///./node_modules/core-js/internals/to-indexed-object.js","webpack:///./node_modules/core-js/internals/object-define-property.js","webpack:///./node_modules/core-js/internals/an-object.js","webpack:///./node_modules/@babel/runtime/helpers/typeof.js","webpack:///./node_modules/core-js/internals/export.js","webpack:///./node_modules/core-js/internals/function-call.js","webpack:///./node_modules/core-js/internals/function-bind-native.js","webpack:///./node_modules/core-js/internals/classof-raw.js","webpack:///./node_modules/core-js/internals/shared-store.js","webpack:///./node_modules/core-js/internals/set-global.js","webpack:///./node_modules/core-js/internals/create-non-enumerable-property.js","webpack:///./node_modules/core-js/internals/inspect-source.js","webpack:///./node_modules/core-js/internals/hidden-keys.js","webpack:///./node_modules/core-js/internals/enum-bug-keys.js","webpack:///./node_modules/core-js/internals/entry-unbind.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack:///./node_modules/core-js/internals/create-property-descriptor.js","webpack:///./node_modules/core-js/internals/indexed-object.js","webpack:///./node_modules/core-js/internals/require-object-coercible.js","webpack:///./node_modules/core-js/internals/to-property-key.js","webpack:///./node_modules/core-js/internals/is-symbol.js","webpack:///./node_modules/core-js/internals/use-symbol-as-uid.js","webpack:///./node_modules/core-js/internals/native-symbol.js","webpack:///./node_modules/core-js/internals/engine-v8-version.js","webpack:///./node_modules/core-js/internals/a-callable.js","webpack:///./node_modules/core-js/internals/shared.js","webpack:///./node_modules/core-js/internals/to-object.js","webpack:///./node_modules/core-js/internals/uid.js","webpack:///./node_modules/core-js/internals/ie8-dom-define.js","webpack:///./node_modules/core-js/internals/document-create-element.js","webpack:///./node_modules/core-js/internals/v8-prototype-define-bug.js","webpack:///./node_modules/core-js/internals/shared-key.js","webpack:///./node_modules/core-js/internals/object-keys-internal.js","webpack:///./node_modules/core-js/internals/array-includes.js","webpack:///./node_modules/core-js/internals/to-integer-or-infinity.js","webpack:///./node_modules/core-js/internals/length-of-array-like.js","webpack:///./node_modules/core-js/internals/array-iteration.js","webpack:///./node_modules/mobile-detect/mobile-detect.js","webpack:///./node_modules/@babel/runtime/helpers/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/createClass.js","webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///./node_modules/core-js/features/array/for-each.js","webpack:///./node_modules/core-js/actual/array/for-each.js","webpack:///./node_modules/core-js/stable/array/for-each.js","webpack:///./node_modules/core-js/es/array/for-each.js","webpack:///./node_modules/core-js/modules/es.array.for-each.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/core-js/internals/object-property-is-enumerable.js","webpack:///./node_modules/core-js/internals/to-primitive.js","webpack:///./node_modules/core-js/internals/object-is-prototype-of.js","webpack:///./node_modules/core-js/internals/engine-user-agent.js","webpack:///./node_modules/core-js/internals/get-method.js","webpack:///./node_modules/core-js/internals/try-to-string.js","webpack:///./node_modules/core-js/internals/ordinary-to-primitive.js","webpack:///./node_modules/core-js/internals/is-pure.js","webpack:///./node_modules/core-js/internals/redefine.js","webpack:///./node_modules/core-js/internals/internal-state.js","webpack:///./node_modules/core-js/internals/native-weak-map.js","webpack:///./node_modules/core-js/internals/function-name.js","webpack:///./node_modules/core-js/internals/copy-constructor-properties.js","webpack:///./node_modules/core-js/internals/own-keys.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names.js","webpack:///./node_modules/core-js/internals/to-absolute-index.js","webpack:///./node_modules/core-js/internals/to-length.js","webpack:///./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack:///./node_modules/core-js/internals/is-forced.js","webpack:///./node_modules/core-js/internals/array-for-each.js","webpack:///./node_modules/core-js/internals/function-bind-context.js","webpack:///./node_modules/core-js/internals/array-species-create.js","webpack:///./node_modules/core-js/internals/array-species-constructor.js","webpack:///./node_modules/core-js/internals/is-array.js","webpack:///./node_modules/core-js/internals/is-constructor.js","webpack:///./node_modules/core-js/internals/classof.js","webpack:///./node_modules/core-js/internals/to-string-tag-support.js","webpack:///./node_modules/core-js/internals/array-method-is-strict.js","webpack:///./node_modules/core-js/features/array/filter.js","webpack:///./node_modules/core-js/actual/array/filter.js","webpack:///./node_modules/core-js/stable/array/filter.js","webpack:///./node_modules/core-js/es/array/filter.js","webpack:///./node_modules/core-js/modules/es.array.filter.js","webpack:///./node_modules/core-js/internals/array-method-has-species-support.js","webpack:///./node_modules/core-js/features/array/includes.js","webpack:///./node_modules/core-js/actual/array/includes.js","webpack:///./node_modules/core-js/stable/array/includes.js","webpack:///./node_modules/core-js/es/array/includes.js","webpack:///./node_modules/core-js/modules/es.array.includes.js","webpack:///./node_modules/core-js/internals/add-to-unscopables.js","webpack:///./node_modules/core-js/internals/object-create.js","webpack:///./node_modules/core-js/internals/object-define-properties.js","webpack:///./node_modules/core-js/internals/object-keys.js","webpack:///./node_modules/core-js/internals/html.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack:///./examples/src/mobile.init.js","webpack:///./src/constants/auto-play-behavior.js","webpack:///./src/constants/falsy-values.js","webpack:///./src/constants/orientations.js","webpack:///./src/constants/regex.js","webpack:///./src/ci360.utils.js","webpack:///./src/constants/props-require-reload.js","webpack:///./src/utils/responsive/get-responsive-width-of-container.js","webpack:///./src/utils/responsive/get-size-limit.js","webpack:///./src/utils/image-src/generate-images-path.js","webpack:///./src/utils/responsive/get-size-according-to-pixel-ratio.js","webpack:///./src/utils/load-images/load-image-as-promise.js","webpack:///./src/utils/load-images/load-images-relative-to-container-size.js","webpack:///./src/utils/load-images/pad.js","webpack:///./src/utils/load-images/images-from-folder/prepare-images-from-folder.js","webpack:///./src/utils/load-images/images-from-list/prepare-images-from-list.js","webpack:///./src/utils/load-images/preload-images.js","webpack:///./src/utils/load-images/load-original-images.js","webpack:///./src/utils/load-images/preload-original-images.js","webpack:///./src/utils/load-images/lazyload/prepare-first-image/prepare-first-image-from-list.js","webpack:///./src/utils/load-images/lazyload/init-lazyload.js","webpack:///./src/utils/load-images/lazyload/prepare-first-image/prepare-first-image-from-folder.js","webpack:///./src/utils/responsive/contain.js","webpack:///./src/utils/responsive/fit.js","webpack:///./src/utils/magnify/move-magnifier.js","webpack:///./src/utils/magnify/get-cursor-position.js","webpack:///./src/utils/auto-play/get-speed-factor.js","webpack:///./src/utils/class-names/add-class.js","webpack:///./src/utils/class-names/remove-class.js","webpack:///./src/utils/spin-y/get-moving-direction.js","webpack:///./src/utils/controls/get-item-skipped.js","webpack:///./src/utils/container-elements/create-canvas.js","webpack:///./src/utils/container-elements/create-icons-container.js","webpack:///./src/utils/container-elements/create-inner-box.js","webpack:///./src/utils/container-elements/create-box-shadow.js","webpack:///./src/utils/container-elements/create-loader.js","webpack:///./src/utils/container-elements/apply-styles-to-container.js","webpack:///./src/utils/container-elements/remove-child-from-parent.js","webpack:///./src/utils/hotspots/fill-empty-coord-with-previous.js","webpack:///./src/utils/hotspots/prepare-hotspots-positions.js","webpack:///./src/utils/hotspots/get-hotspot-icon.js","webpack:///./src/utils/hotspots/update-hotspot-icon-position.js","webpack:///./src/utils/hotspots/hide-hotspot-icon.js","webpack:///./src/utils/hotspots/get-hotspot-orientation.js","webpack:///./src/utils/hotspots/update-hotspots.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack:///./node_modules/@popperjs/core/lib/utils/math.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack:///./node_modules/@popperjs/core/lib/enums.js","webpack:///./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack:///./node_modules/@popperjs/core/lib/createPopper.js","webpack:///./node_modules/@popperjs/core/lib/utils/debounce.js","webpack:///./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack:///./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack:///./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack:///./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack:///./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack:///./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack:///./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack:///./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack:///./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack:///./node_modules/@popperjs/core/lib/utils/within.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack:///./node_modules/@popperjs/core/lib/popper.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack:///./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack:///./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack:///./src/utils/hotspots/attach-events/hide-popup.js","webpack:///./src/utils/hotspots/elements/create-images-carousel.js","webpack:///./src/utils/hotspots/elements/create-carousel-image.js","webpack:///./src/utils/hotspots/elements/create-carousel-dot.js","webpack:///./src/utils/hotspots/set-current-slide.js","webpack:///./src/utils/hotspots/elements/create-model-elements.js","webpack:///./src/utils/hotspots/elements/create-modal-title.js","webpack:///./src/utils/hotspots/elements/create-modal-description.js","webpack:///./src/utils/hotspots/elements/create-read-more-btn.js","webpack:///./src/utils/hotspots/elements/create-popup.js","webpack:///./src/utils/hotspots/get-popup-node.js","webpack:///./src/utils/hotspots/elements/create-hotspot-popup-link.js","webpack:///./src/utils/hotspots/elements/create-popup-arrow.js","webpack:///./src/utils/hotspots/elements/create-hotspots.js","webpack:///./src/utils/hotspots/create-popper-instace.js","webpack:///./src/utils/hotspots/elements/create-hotspot-icon.js","webpack:///./src/utils/hotspots/attach-events/show-popup.js","webpack:///./src/utils/hotspots/generate-hotspots-configs.js","webpack:///./src/utils/hotspots/configs-error-handler.js","webpack:///./src/utils/hotspots/generate-popup-config.js","webpack:///./src/utils/hotspots/is-mouse-on-hotspot.js","webpack:///./src/utils/hotspots/toggle-popup-events.js","webpack:///./src/ci360.service.js","webpack:///./src/utils/zoom/generate-zoom-out-steps.js","webpack:///./src/utils/zoom/generate-zoom-in-steps.js","webpack:///./src/utils/hotspots/hide-hotspots-icons.js","webpack:///./src/utils/auto-play/loop.js","webpack:///./src/utils/responsive/get-image-aspect-ratio.js","webpack:///./src/utils/magnify/get-current-original-image.js","webpack:///./src/utils/magnify/magnify.js","webpack:///./src/utils/container-elements/create-fullscreen-modal.js","webpack:///./src/utils/auto-play/is-completed-one-cycle.js","webpack:///./src/utils/image-src/is-props-change-require-reload.js","webpack:///./src/utils/container-elements/create-close-fullscreen-icon.js","webpack:///./src/utils/container-elements/create-360-view-icon.js","webpack:///./src/utils/container-elements/create-fullscreen-icon.js","webpack:///./src/utils/container-elements/create-magnifier-icon.js","webpack:///./src/utils/container-elements/create-360-view-circle-icon.js","webpack:///./src/utils/controls/init-controls.js","webpack:///./src/index.js","webpack:///./examples/src/constants.js","webpack:///./examples/src/index.js","webpack:///./examples/src/hotspots-config.constant.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","it","Math","check","globalThis","window","self","global","this","Function","NATIVE_BIND","FunctionPrototype","uncurryThis","fn","apply","arguments","argument","exec","error","obj","configurable","writable","asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","info","done","Promise","then","args","err","undefined","fails","toObject","hasOwn","isCallable","shared","uid","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","description","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","arr","aFunction","namespace","method","length","IndexedObject","requireObjectCoercible","DESCRIPTORS","IE8_DOM_DEFINE","V8_PROTOTYPE_DEFINE_BUG","anObject","toPropertyKey","TypeError","$defineProperty","$getOwnPropertyDescriptor","getOwnPropertyDescriptor","f","O","P","Attributes","current","isObject","String","_typeof","iterator","constructor","createNonEnumerableProperty","redefine","setGlobal","copyConstructorProperties","isForced","options","source","target","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","forced","sham","test","toString","stringSlice","slice","store","definePropertyModule","createPropertyDescriptor","functionToString","inspectSource","CONSTRUCTOR","METHOD","arrayLikeToArray","minLen","Array","from","len","arr2","propertyIsEnumerableModule","toIndexedObject","bitmap","classof","split","propertyIsEnumerable","toPrimitive","isSymbol","getBuiltIn","isPrototypeOf","$Symbol","V8_VERSION","getOwnPropertySymbols","symbol","match","version","userAgent","process","Deno","versions","v8","tryToString","IS_PURE","push","copyright","license","id","postfix","random","createElement","a","document","EXISTS","keys","indexOf","hiddenKeys","names","result","toAbsoluteIndex","lengthOfArrayLike","createMethod","IS_INCLUDES","$this","el","fromIndex","index","includes","ceil","floor","number","toLength","arraySpeciesCreate","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","callbackfn","that","specificCreate","boundFunction","forEach","map","filter","some","every","find","findIndex","filterReject","factory","isArray","impl","fullPattern","shortPattern","tabletPattern","hasOwnProp","equalIC","b","toLowerCase","containsIC","array","valueLC","convertPropsToRegExp","RegExp","MobileDetect","maxPhoneWidth","ua","substr","prepareUserAgent","_cache","FALLBACK_PHONE","FALLBACK_TABLET","FALLBACK_MOBILE","values","verPos","mobileDetectRules","props","substring","oss","phones","tablets","uas","utils","oss0","WindowsPhoneOS","WindowsMobileOS","findMatch","rules","findMatches","getVersionStr","propertyName","patterns","getVersion","prepareVersionNo","NaN","numbers","shift","join","Number","isMobileFallback","detectMobileBrowsers","isTabletFallback","prepareDetectionCache","cache","mobile","phone","tablet","phoneSized","isPhoneSized","mobileGrade","$isMobile","os","is","detectOS","getDeviceSmallerSide","screen","width","height","userAgents","versionStr","pattern","grade","_impl","instance","Constructor","_defineProperties","protoProps","staticProps","arrayWithoutHoles","iterableToArray","nonIterableSpread","_i","_s","_e","_arr","_n","_d","next","Error","parent","entryUnbind","$","proto","g","e","$propertyIsEnumerable","NASHORN_BUG","1","V","getMethod","ordinaryToPrimitive","wellKnownSymbol","TO_PRIMITIVE","input","pref","exoticToPrim","aCallable","func","val","valueOf","InternalStateModule","CONFIGURABLE_FUNCTION_NAME","CONFIGURABLE","getInternalState","enforceInternalState","enforce","TEMPLATE","state","unsafe","simple","replace","set","has","NATIVE_WEAK_MAP","sharedKey","WeakMap","wmget","wmhas","wmset","metadata","facade","STATE","getterFor","type","getDescriptor","PROPER","ownKeys","getOwnPropertyDescriptorModule","exceptions","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","concat","internalObjectKeys","getOwnPropertyNames","toIntegerOrInfinity","max","min","integer","replacement","feature","detection","data","normalize","POLYFILL","NATIVE","string","$forEach","STRICT_METHOD","arrayMethodIsStrict","arraySpeciesConstructor","originalArray","isConstructor","SPECIES","C","noop","empty","construct","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","isConstructorLegacy","called","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","CORRECT_ARGUMENTS","tag","tryGet","callee","METHOD_NAME","$filter","arrayMethodHasSpeciesSupport","foo","Boolean","$includes","addToUnscopables","UNSCOPABLES","ArrayPrototype","activeXDocument","definePropertiesModule","enumBugKeys","html","documentCreateElement","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","domain","style","display","appendChild","src","contentWindow","open","F","Properties","objectKeys","defineProperties","runtime","Op","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","define","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","invoke","__await","unwrapped","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","iter","reverse","pop","skipTempReset","prev","charAt","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","navigator","elementsToHide","querySelectorAll","mercedes360View","getElementById","elem","parentNode","removeChild","setAttribute","AUTOPLAY_BEHAVIOR","FALSY_VALUES","ORIENTATIONS","ORGINAL_SIZE_REGEX","AND_SYMBOL_REGEX","get360ViewProps","image","folder","attr","apiVersion","filenameX","filenameY","imageListX","imageListY","indexZeroBase","parseInt","amountX","amountY","speed","dragSpeed","isTrue","keysReverse","boxShadow","autoplay","autoplayBehavior","playOnce","autoplayReverse","pointerZoom","parseFloat","bottomCircle","disableDrag","fullscreen","magnifier","bottomCircleOffset","ciToken","ciFilters","ciTransformation","lazyload","lazySelector","spinReverse","controlReverse","stopAtEdges","hide360Logo","logoSrc","ratio","imageInfo","imgProp","imgDataProp","element","attribute","getAttribute","setView360Icon","view360Icon","background","PROPS_REQUIRE_RELOAD","getResponsiveWidthOfContainer","currentSize","generateImagesPath","srcConfig","size","splittedSizes","container","filename","ciParams","imageOffsetWidth","offsetWidth","finalApiVersion","ciSizeNext","splittedSize","round","devicePixelRatio","cdn","URL","origin","loadImageAsPromise","cb","Image","reslove","onload","onerror","loadImagesRelativeToContainerSize","imagesSrcs","all","pad","prepareImagesFromFolder","imagesSrc","loadOriginalImages","amount","_item","nextZeroFilledIndex","imageSrc","prepareImagesFromList","images","nextSrcConfig","lastIndex","resultSrc","lastIndexOf","preloadImages","imageList","JSON","parse","console","message","preloadOriginalImages","prepareFirstImageFromList","firstImageSrc","initLazyload","innerBox","prepareFirstImageFromFolder","position","top","left","maxWidth","maxHeight","className","contain","contains","parentWidth","parentHeight","childWidth","childHeight","scale","offsetX","offsetY","childRatio","parentRatio","fit","moveMagnifier","containerConfig","glass","x","y","w","h","zoom","bw","pos","event","getBoundingClientRect","pageX","pageY","pageXOffset","pageYOffset","getCursorPosition","offsetHeight","backgroundPosX","backgroundPosY","backgroundPosition","getSpeedFactor","containerOffset","speedFactor","addClass","classList","add","removeClass","remove","getMovingDirection","isStartSpin","allowSpinY","prevPosition","nextPositions","currentMovingDirection","movingDirection","differenceInPositionX","abs","differenceInPositionY","getItemSkipped","currentPosition","movementStart","createCanvas","canvas","fontSize","createIconsContainer","iconsContainer","createInnerBox","createBoxShadow","nextBoxShadow","createLoader","loader","applyStylesToContainer","cursor","removeChildFromParent","child","fillEmptyCoordWithPrevious","positions","hotspotIndex","coord","previousXCoord","prepareHotspotsPositions","reduce","accumulate","currentIndex","isIncludesXcoord","xCoord","isIncludesYcoord","yCoord","getHotspotIcon","anchorId","hotspotIconSelector","querySelector","updateHotspotIconPosition","initialDimensions","icon","visibility","opacity","zIndex","positionXRatio","positionYRatio","translateX","translateY","transform","hideHotspotIcon","getHotspotOriantaion","orientation","updateHotspots","hotspotsProps","activeImageX","activeImageY","hotspotProps","variant","hotspotOriantaion","currentImageIndex","hotspotPosition","imageIndex","hotspotIcon","getWindow","node","ownerDocument","defaultView","isElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","includeScale","rect","scaleX","scaleY","right","bottom","getWindowScroll","win","scrollLeft","scrollTop","getNodeName","nodeName","getDocumentElement","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","scroll","offsets","clientLeft","clientTop","getLayoutRect","clientRect","offsetLeft","offsetTop","getParentNode","assignedSlot","host","listScrollParents","list","_element$ownerDocumen","scrollParent","getScrollParent","body","isBody","visualViewport","updatedList","isTableElement","getTrueOffsetParent","getOffsetParent","isFirefox","currentNode","css","perspective","willChange","getContainingBlock","basePlacements","variationPlacements","acc","placement","modifierPhases","order","modifiers","Map","visited","Set","modifier","sort","requires","requiresIfExists","dep","depModifier","DEFAULT_OPTIONS","strategy","areValidElements","_len","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","reference","popper","pending","orderedModifiers","assign","modifiersData","elements","attributes","styles","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","phase","orderModifiers","merged","existing","mergeByName","enabled","_ref3","_ref3$options","effect","cleanupFn","update","forceUpdate","_state$elements","rects","_state$orderedModifie","_state$orderedModifie2","_options","destroy","onFirstUpdate","passive","getBasePlacement","getVariation","getMainAxisFromPlacement","computeOffsets","_ref","basePlacement","variation","commonX","commonY","mainAxis","unsetSides","mapToStyles","_ref2","_Object$assign2","popperRect","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","roundOffsetsByDPR","hash","getOppositePlacement","matched","start","end","getOppositeVariationPlacement","rootNode","getRootNode","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","clientWidth","clientHeight","getViewportRect","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","direction","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options$placement","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","padding","altContext","clippingClientRect","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","offset","multiply","axis","within","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","_options$scroll","_options$resize","resize","addEventListener","removeEventListener","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","arrow","removeAttribute","initialStyles","margin","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","placements","_options$allowedAutoP","allowedPlacements","overflows","computeAutoPlacement","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","_loop","fittingPlacement","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","maxLen","arrowElement","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","v","withinMaxClamp","_state$modifiersData$","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","center","axisProp","centerOffset","_options$element","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","hidePopup","popup","isVisible","createImagesCarousel","imagesCarousel","carouselDots","carouselImage","alt","createCarouselImage","carouselDot","imageDot","onclick","previousActiveDot","previousActiveImage","setCurrentSlide","createCarouselDot","createModalElements","title","moreDetailsUrl","moreDetailsTitle","modalWrapper","imagesCarouselWrapper","modalTitle","innerText","createModalTitle","modalDescription","createModalDescription","readMoreBtn","href","createReadMoreBtn","createPopup","hotspotConfig","popupProps","popupId","popupSelector","url","minHeight","minWidth","stopPropagation","hotspotPopupLink","newTab","hyperLink","createHotspotPopupLink","popupNode","userPopup","cloneNode","popupArrow","createPopupArrow","createHotspots","popperInstance","virtualReference","createPopper","createPopperInstance","indicatorSelector","showPopup","setTimeout","createHotspotIcon","generateHotspotsConfigs","configsErrorHandler","popupConfig","generatePopupConfig","uniqueID","isMouseOnHotspot","togglePopupEvents","isMouseDown","pointerEvents","CI360Viewer","hotspotsConfigs","isClicked","loadedImagesX","loadedImagesY","imagesLoaded","reversed","fullscreenView","imagesX","imagesY","originalImagesX","originalImagesY","resizedImagesX","resizedImagesY","isMobile","msMaxTouchPoints","isMagnifyOpen","isDragged","startPointerZoom","zoomIntensity","mouseTracked","intialPositions","pointerCurrentPosition","isStartedLoadOriginalImages","init","loadedXImages","loadedYImages","totalAmount","isMouseOnHotspotElement","hideInitialIcons","loopTimeoutId","isZoomReady","show360ViewCircleIcon","setCursorPosition","prepareOriginalImages","isAllOriginalImagesLoaded","togglePointerZoom","onMoveHandler","closeMagnifier","zoomIntenisty","zoomSteps","_","stepFixedValue","toFixed","step","hide360ViewCircleIcon","generateZoomInSteps","loadedOriginalXImages","loadedOriginalYImages","totalLoadedImages","isAllImagesLoaded","percentage","updatePercentageInLoader","removeLoader","srcX","srcXConfig","onOriginalImageLoad","srcY","srcYConfig","touches","clientX","clientY","cancelable","preventDefault","keyCode","remove360ViewIcon","mousePositions","canvasRect","onSpin","onFinishSpin","itemsSkipped","isReverse","leftElem","rightElem","spinY","bottomElem","topElem","currentPositionX","itemsSkippedRight","moveActiveIndexDown","moveActiveIndexUp","itemsSkippedLeft","currentPositionY","itemsSkippedTop","moveActiveYIndexUp","moveActiveYIndexDown","itemsSkippedBottom","isMoveRight","isMoveLeft","isMoveTop","isMoveBottom","moveRight","moveLeft","moveTop","moveBottom","loopTriggers","loop","imageAspectRatio","providedRatio","activeMedia","mediaQuery","innerWidth","getImageAspectRatio","innerHeight","loadedResizedXImages","loadedResizedYImages","ctx","font","fillStyle","imageDimension","fillText","isReady","responsive","firstImage","onResizedImageLoad","getContext","updateContainerAndCanvasSize","drawImage","updateImageScale","showImageInfo","getCursorPositionInCanvas","imageWidth","imageHeight","pointX","pointY","add360ViewIcon","addCloseFullscreenView","addMagnifier","boxShadowEl","add360ViewCircleIcon","addFullscreenIcon","play","initControls","currentImage","originalImagesXSrcs","originalImagesYSrcs","currentOriginalImage","backgroundSizeX","backgroundSizeY","prepend","backgroundImage","backgroundSize","MouseMoveHandler","touchHandler","magnify","fullscreenModal","fullscreenContainer","createFullscreenModal","closeFullscreenModal","closeFullscreenModalOnEsc","setInterval","isPlayedOnce","isReversed","isCompletedOneCycle","clearTimeout","autoplaySpeed","viewers","currentProps","changedProps","imageProps","isPropChanged","oldElement","viewIndex","view","replaceChild","splice","newElement","closeFullscreenIcon","createCloseFullscreenIcon","setFullscreenEvents","onkeyup","fullscreenIcon","openFullscreenModal","magnifyIcon","magnifierIcon","circleOffset","view360CircleIcon","controlsElements","controlsConfig","controlsTriggers","onRightStart","onLeftStart","onTopStart","onBottomStart","onEventEnd","controlElements","draggable","swipeable","requestResizedImages","mouseClick","mouseDown","mouseMove","mouseLeave","mouseUp","touchStart","touchEnd","touchMove","keyDown","keyUp","keyDownGeneral","remove360ViewCircleIcon","onAllImagesLoaded","onImageLoad","isFirstImageLoaded","onFirstImageLoaded","loadImages","onFirstImageLoad","attachEvents","view360Array","_container","uniqueId","generatedContainerId","getContainerWithId","CI360","_viewers","isNoViewers","viewer","getActiveIndexByID","oriantation","currentViewer","updateView","newViewContainer","addHotspots","instanceId","config","notInitOnLoad","NIKE_PLUGIN","EARBUDS_PLUGIN","PLUGIN_PROPS","class","isRequired","isUrl","PROPERTIES_COLORS","URL_PROPERTIES","spinDirections","imageXSelector","nikeXSelector","copyText","codeBlock","codeWrapper","controlOption","autoPlayBehavior","copyButton","outputCode","pointerZoomCheckbox","accordions","pluginCheckboxOptions","pluginInputs","controlButtons","isSpinY","CLOUDIMAGE_360","updateContainer","toggleControlButtons","yButtonsIds","button","checked","showAccordionContent","contentID","accordionContent","pluginCheckboxOptionsHandler","ispluginCheckboxChecked","pluginAttribute","defaultValue","updatePluginValues","changePluginInputsHandler","properties","inputType","removeProp","isCheckbox","isEmptyInput","updateCodeBlock","entries","propertyWrapper","propertyValue","color","innerHTML","spinDirection","earbudsPlugin","nikePlugin","isSpinYDirection","disabled","clipboard","writeText","allPluginInput","shadowBoxInput","nextCheckbox","pluginInput","accordion","option"],"mappings":"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","file":"bundledbb6dbe1d8a01b0569ff.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 120);\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar uncurryThis = NATIVE_BIND && bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? function (fn) {\n return fn && uncurryThis(fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","module.exports = require(\"regenerator-runtime\");\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var arrayWithHoles = require(\"./arrayWithHoles.js\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableRest = require(\"./nonIterableRest.js\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\n\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","module.exports = {};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (CONSTRUCTOR, METHOD) {\n return uncurryThis(global[CONSTRUCTOR].prototype[METHOD]);\n};\n","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.21.1',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.21.1/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","// THIS FILE IS GENERATED - DO NOT EDIT!\n/*!mobile-detect v1.4.5 2021-03-13*/\n/*global module:false, define:false*/\n/*jshint latedef:false*/\n/*!@license Copyright 2013, Heinrich Goebl, License: MIT, see https://github.com/hgoebl/mobile-detect.js*/\n(function (define, undefined) {\ndefine(function () {\n 'use strict';\n\n var impl = {};\n\n impl.mobileDetectRules = {\n \"phones\": {\n \"iPhone\": \"\\\\biPhone\\\\b|\\\\biPod\\\\b\",\n \"BlackBerry\": \"BlackBerry|\\\\bBB10\\\\b|rim[0-9]+|\\\\b(BBA100|BBB100|BBD100|BBE100|BBF100|STH100)\\\\b-[0-9]+\",\n \"Pixel\": \"; \\\\bPixel\\\\b\",\n \"HTC\": \"HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\\\bEVO\\\\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel\",\n \"Nexus\": \"Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 5X|Nexus 6\",\n \"Dell\": \"Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\\\\b001DL\\\\b|\\\\b101DL\\\\b|\\\\bGS01\\\\b\",\n \"Motorola\": \"Motorola|DROIDX|DROID BIONIC|\\\\bDroid\\\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\\\bMoto E\\\\b|XT1068|XT1092|XT1052\",\n \"Samsung\": \"\\\\bSamsung\\\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F|SM-G610F|SM-G981B|SM-G892A|SM-A530F\",\n \"LG\": \"\\\\bLG\\\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)|LM-G710\",\n \"Sony\": \"SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533|SOV34|601SO|F8332\",\n \"Asus\": \"Asus.*Galaxy|PadFone.*Mobile\",\n \"Xiaomi\": \"^(?!.*\\\\bx11\\\\b).*xiaomi.*$|POCOPHONE F1|MI 8|Redmi Note 9S|Redmi Note 5A Prime|N2G47H|M2001J2G|M2001J2I|M1805E10A|M2004J11G|M1902F1G|M2002J9G|M2004J19G|M2003J6A1G\",\n \"NokiaLumia\": \"Lumia [0-9]{3,4}\",\n \"Micromax\": \"Micromax.*\\\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\\\b\",\n \"Palm\": \"PalmSource|Palm\",\n \"Vertu\": \"Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature\",\n \"Pantech\": \"PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790\",\n \"Fly\": \"IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250\",\n \"Wiko\": \"KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM\",\n \"iMobile\": \"i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)\",\n \"SimValley\": \"\\\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\\\b\",\n \"Wolfgang\": \"AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q\",\n \"Alcatel\": \"Alcatel\",\n \"Nintendo\": \"Nintendo (3DS|Switch)\",\n \"Amoi\": \"Amoi\",\n \"INQ\": \"INQ\",\n \"OnePlus\": \"ONEPLUS\",\n \"GenericPhone\": \"Tapatalk|PDA;|SAGEM|\\\\bmmp\\\\b|pocket|\\\\bpsp\\\\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\\\\bwap\\\\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser\"\n },\n \"tablets\": {\n \"iPad\": \"iPad|iPad.*Mobile\",\n \"NexusTablet\": \"Android.*Nexus[\\\\s]+(7|9|10)\",\n \"GoogleTablet\": \"Android.*Pixel C\",\n \"SamsungTablet\": \"SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-T830|SM-T837V|SM-T720|SM-T510|SM-T387V|SM-P610|SM-T290|SM-T515|SM-T590|SM-T595|SM-T725|SM-T817P|SM-P585N0|SM-T395|SM-T295|SM-T865|SM-P610N|SM-P615|SM-T970|SM-T380|SM-T5950|SM-T905|SM-T231|SM-T500|SM-T860\",\n \"Kindle\": \"Kindle|Silk.*Accelerated|Android.*\\\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\\\b|Android.*Silk\\/[0-9.]+ like Chrome\\/[0-9.]+ (?!Mobile)\",\n \"SurfaceTablet\": \"Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)\",\n \"HPTablet\": \"HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10\",\n \"AsusTablet\": \"^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\\\\bK00F\\\\b|\\\\bK00C\\\\b|\\\\bK00E\\\\b|\\\\bK00L\\\\b|TX201LA|ME176C|ME102A|\\\\bM80TA\\\\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\\\\bME70C\\\\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\\\\bP027\\\\b|\\\\bP024\\\\b|\\\\bP00C\\\\b\",\n \"BlackBerryTablet\": \"PlayBook|RIM Tablet\",\n \"HTCtablet\": \"HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410\",\n \"MotorolaTablet\": \"xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617\",\n \"NookTablet\": \"Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2\",\n \"AcerTablet\": \"Android.*; \\\\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\\\b|W3-810|\\\\bA3-A10\\\\b|\\\\bA3-A11\\\\b|\\\\bA3-A20\\\\b|\\\\bA3-A30|A3-A40\",\n \"ToshibaTablet\": \"Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO\",\n \"LGTablet\": \"\\\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\\\b\",\n \"FujitsuTablet\": \"Android.*\\\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\\\b\",\n \"PrestigioTablet\": \"PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002\",\n \"LenovoTablet\": \"Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304X|TB-X304F|TB-X304L|TB-X505F|TB-X505L|TB-X505X|TB-X605F|TB-X605L|TB-8703F|TB-8703X|TB-8703N|TB-8704N|TB-8704F|TB-8704X|TB-8704V|TB-7304F|TB-7304I|TB-7304X|Tab2A7-10F|Tab2A7-20F|TB2-X30L|YT3-X50L|YT3-X50F|YT3-X50M|YT-X705F|YT-X703F|YT-X703L|YT-X705L|YT-X705X|TB2-X30F|TB2-X30L|TB2-X30M|A2107A-F|A2107A-H|TB3-730F|TB3-730M|TB3-730X|TB-7504F|TB-7504X|TB-X704F|TB-X104F|TB3-X70F|TB-X705F|TB-8504F|TB3-X70L|TB3-710F|TB-X704L\",\n \"DellTablet\": \"Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7\",\n \"YarvikTablet\": \"Android.*\\\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\\\b\",\n \"MedionTablet\": \"Android.*\\\\bOYO\\\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB\",\n \"ArnovaTablet\": \"97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2\",\n \"IntensoTablet\": \"INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004\",\n \"IRUTablet\": \"M702pro\",\n \"MegafonTablet\": \"MegaFon V9|\\\\bZTE V9\\\\b|Android.*\\\\bMT7A\\\\b\",\n \"EbodaTablet\": \"E-Boda (Supreme|Impresspeed|Izzycomm|Essential)\",\n \"AllViewTablet\": \"Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)\",\n \"ArchosTablet\": \"\\\\b(101G9|80G9|A101IT)\\\\b|Qilive 97R|Archos5|\\\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\\\b\",\n \"AinolTablet\": \"NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark\",\n \"NokiaLumiaTablet\": \"Lumia 2520\",\n \"SonyTablet\": \"Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|SGP612|SGP712\",\n \"PhilipsTablet\": \"\\\\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\\\\b\",\n \"CubeTablet\": \"Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT\",\n \"CobyTablet\": \"MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010\",\n \"MIDTablet\": \"M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10\",\n \"MSITablet\": \"MSI \\\\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\\\b\",\n \"SMiTTablet\": \"Android.*(\\\\bMID\\\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)\",\n \"RockChipTablet\": \"Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A\",\n \"FlyTablet\": \"IQ310|Fly Vision\",\n \"bqTablet\": \"Android.*(bq)?.*\\\\b(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))\\\\b|Maxwell.*Lite|Maxwell.*Plus\",\n \"HuaweiTablet\": \"MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09|AGS-L09|CMR-AL19\",\n \"NecTablet\": \"\\\\bN-06D|\\\\bN-08D\",\n \"PantechTablet\": \"Pantech.*P4100\",\n \"BronchoTablet\": \"Broncho.*(N701|N708|N802|a710)\",\n \"VersusTablet\": \"TOUCHPAD.*[78910]|\\\\bTOUCHTAB\\\\b\",\n \"ZyncTablet\": \"z1000|Z99 2G|z930|z990|z909|Z919|z900\",\n \"PositivoTablet\": \"TB07STA|TB10STA|TB07FTA|TB10FTA\",\n \"NabiTablet\": \"Android.*\\\\bNabi\",\n \"KoboTablet\": \"Kobo Touch|\\\\bK080\\\\b|\\\\bVox\\\\b Build|\\\\bArc\\\\b Build\",\n \"DanewTablet\": \"DSlide.*\\\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\\\b\",\n \"TexetTablet\": \"NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE\",\n \"PlaystationTablet\": \"Playstation.*(Portable|Vita)\",\n \"TrekstorTablet\": \"ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab\",\n \"PyleAudioTablet\": \"\\\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\\\b\",\n \"AdvanTablet\": \"Android.* \\\\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\\\b \",\n \"DanyTechTablet\": \"Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1\",\n \"GalapadTablet\": \"Android [0-9.]+; [a-z-]+; \\\\bG1\\\\b\",\n \"MicromaxTablet\": \"Funbook|Micromax.*\\\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\\\b\",\n \"KarbonnTablet\": \"Android.*\\\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\\\b\",\n \"AllFineTablet\": \"Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide\",\n \"PROSCANTablet\": \"\\\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\\\b\",\n \"YONESTablet\": \"BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026\",\n \"ChangJiaTablet\": \"TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503\",\n \"GUTablet\": \"TX-A1301|TX-M9002|Q702|kf026\",\n \"PointOfViewTablet\": \"TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10\",\n \"OvermaxTablet\": \"OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027\",\n \"HCLTablet\": \"HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync\",\n \"DPSTablet\": \"DPS Dream 9|DPS Dual 7\",\n \"VistureTablet\": \"V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10\",\n \"CrestaTablet\": \"CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989\",\n \"MediatekTablet\": \"\\\\bMT8125|MT8389|MT8135|MT8377\\\\b\",\n \"ConcordeTablet\": \"Concorde([ ]+)?Tab|ConCorde ReadMan\",\n \"GoCleverTablet\": \"GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042\",\n \"ModecomTablet\": \"FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003\",\n \"VoninoTablet\": \"\\\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\\\\bQ8\\\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\\\b\",\n \"ECSTablet\": \"V07OT2|TM105A|S10OT1|TR10CS1\",\n \"StorexTablet\": \"eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab\",\n \"VodafoneTablet\": \"SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497|VFD 1400\",\n \"EssentielBTablet\": \"Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2\",\n \"RossMoorTablet\": \"RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711\",\n \"iMobileTablet\": \"i-mobile i-note\",\n \"TolinoTablet\": \"tolino tab [0-9.]+|tolino shine\",\n \"AudioSonicTablet\": \"\\\\bC-22Q|T7-QC|T-17B|T-17P\\\\b\",\n \"AMPETablet\": \"Android.* A78 \",\n \"SkkTablet\": \"Android.* (SKYPAD|PHOENIX|CYCLOPS)\",\n \"TecnoTablet\": \"TECNO P9|TECNO DP8D\",\n \"JXDTablet\": \"Android.* \\\\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\\\\b\",\n \"iJoyTablet\": \"Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)\",\n \"FX2Tablet\": \"FX2 PAD7|FX2 PAD10\",\n \"XoroTablet\": \"KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151\",\n \"ViewsonicTablet\": \"ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a\",\n \"VerizonTablet\": \"QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1\",\n \"OdysTablet\": \"LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\\\\bXELIO\\\\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10\",\n \"CaptivaTablet\": \"CAPTIVA PAD\",\n \"IconbitTablet\": \"NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S\",\n \"TeclastTablet\": \"T98 4G|\\\\bP80\\\\b|\\\\bX90HD\\\\b|X98 Air|X98 Air 3G|\\\\bX89\\\\b|P80 3G|\\\\bX80h\\\\b|P98 Air|\\\\bX89HD\\\\b|P98 3G|\\\\bP90HD\\\\b|P89 3G|X98 3G|\\\\bP70h\\\\b|P79HD 3G|G18d 3G|\\\\bP79HD\\\\b|\\\\bP89s\\\\b|\\\\bA88\\\\b|\\\\bP10HD\\\\b|\\\\bP19HD\\\\b|G18 3G|\\\\bP78HD\\\\b|\\\\bA78\\\\b|\\\\bP75\\\\b|G17s 3G|G17h 3G|\\\\bP85t\\\\b|\\\\bP90\\\\b|\\\\bP11\\\\b|\\\\bP98t\\\\b|\\\\bP98HD\\\\b|\\\\bG18d\\\\b|\\\\bP85s\\\\b|\\\\bP11HD\\\\b|\\\\bP88s\\\\b|\\\\bA80HD\\\\b|\\\\bA80se\\\\b|\\\\bA10h\\\\b|\\\\bP89\\\\b|\\\\bP78s\\\\b|\\\\bG18\\\\b|\\\\bP85\\\\b|\\\\bA70h\\\\b|\\\\bA70\\\\b|\\\\bG17\\\\b|\\\\bP18\\\\b|\\\\bA80s\\\\b|\\\\bA11s\\\\b|\\\\bP88HD\\\\b|\\\\bA80h\\\\b|\\\\bP76s\\\\b|\\\\bP76h\\\\b|\\\\bP98\\\\b|\\\\bA10HD\\\\b|\\\\bP78\\\\b|\\\\bP88\\\\b|\\\\bA11\\\\b|\\\\bA10t\\\\b|\\\\bP76a\\\\b|\\\\bP76t\\\\b|\\\\bP76e\\\\b|\\\\bP85HD\\\\b|\\\\bP85a\\\\b|\\\\bP86\\\\b|\\\\bP75HD\\\\b|\\\\bP76v\\\\b|\\\\bA12\\\\b|\\\\bP75a\\\\b|\\\\bA15\\\\b|\\\\bP76Ti\\\\b|\\\\bP81HD\\\\b|\\\\bA10\\\\b|\\\\bT760VE\\\\b|\\\\bT720HD\\\\b|\\\\bP76\\\\b|\\\\bP73\\\\b|\\\\bP71\\\\b|\\\\bP72\\\\b|\\\\bT720SE\\\\b|\\\\bC520Ti\\\\b|\\\\bT760\\\\b|\\\\bT720VE\\\\b|T720-3GE|T720-WiFi\",\n \"OndaTablet\": \"\\\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\\\\b[\\\\s]+|V10 \\\\b4G\\\\b\",\n \"JaytechTablet\": \"TPC-PA762\",\n \"BlaupunktTablet\": \"Endeavour 800NG|Endeavour 1010\",\n \"DigmaTablet\": \"\\\\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\\\\b\",\n \"EvolioTablet\": \"ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\\\\bEvotab\\\\b|\\\\bNeura\\\\b\",\n \"LavaTablet\": \"QPAD E704|\\\\bIvoryS\\\\b|E-TAB IVORY|\\\\bE-TAB\\\\b\",\n \"AocTablet\": \"MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712\",\n \"MpmanTablet\": \"MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\\\\bMPG7\\\\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010\",\n \"CelkonTablet\": \"CT695|CT888|CT[\\\\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\\\\bCT-1\\\\b\",\n \"WolderTablet\": \"miTab \\\\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\\\b\",\n \"MediacomTablet\": \"M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA\",\n \"MiTablet\": \"\\\\bMI PAD\\\\b|\\\\bHM NOTE 1W\\\\b\",\n \"NibiruTablet\": \"Nibiru M1|Nibiru Jupiter One\",\n \"NexoTablet\": \"NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI\",\n \"LeaderTablet\": \"TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100\",\n \"UbislateTablet\": \"UbiSlate[\\\\s]?7C\",\n \"PocketBookTablet\": \"Pocketbook\",\n \"KocasoTablet\": \"\\\\b(TB-1207)\\\\b\",\n \"HisenseTablet\": \"\\\\b(F5281|E2371)\\\\b\",\n \"Hudl\": \"Hudl HT7S3|Hudl 2\",\n \"TelstraTablet\": \"T-Hub2\",\n \"GenericTablet\": \"Android.*\\\\b97D\\\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\\\bA7EB\\\\b|CatNova8|A1_07|CT704|CT1002|\\\\bM721\\\\b|rk30sdk|\\\\bEVOTAB\\\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\\\\bM6pro\\\\b|CT1020W|arc 10HD|\\\\bTP750\\\\b|\\\\bQTAQZ3\\\\b|WVT101|TM1088|KT107\"\n },\n \"oss\": {\n \"AndroidOS\": \"Android\",\n \"BlackBerryOS\": \"blackberry|\\\\bBB10\\\\b|rim tablet os\",\n \"PalmOS\": \"PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino\",\n \"SymbianOS\": \"Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\\\\bS60\\\\b\",\n \"WindowsMobileOS\": \"Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Windows Mobile|Windows Phone [0-9.]+|WCE;\",\n \"WindowsPhoneOS\": \"Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;\",\n \"iOS\": \"\\\\biPhone.*Mobile|\\\\biPod|\\\\biPad|AppleCoreMedia\",\n \"iPadOS\": \"CPU OS 13\",\n \"SailfishOS\": \"Sailfish\",\n \"MeeGoOS\": \"MeeGo\",\n \"MaemoOS\": \"Maemo\",\n \"JavaOS\": \"J2ME\\/|\\\\bMIDP\\\\b|\\\\bCLDC\\\\b\",\n \"webOS\": \"webOS|hpwOS\",\n \"badaOS\": \"\\\\bBada\\\\b\",\n \"BREWOS\": \"BREW\"\n },\n \"uas\": {\n \"Chrome\": \"\\\\bCrMo\\\\b|CriOS|Android.*Chrome\\/[.0-9]* (Mobile)?\",\n \"Dolfin\": \"\\\\bDolfin\\\\b\",\n \"Opera\": \"Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR\\/[0-9.]+$|Coast\\/[0-9.]+\",\n \"Skyfire\": \"Skyfire\",\n \"Edge\": \"\\\\bEdgiOS\\\\b|Mobile Safari\\/[.0-9]* Edge\",\n \"IE\": \"IEMobile|MSIEMobile\",\n \"Firefox\": \"fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS\",\n \"Bolt\": \"bolt\",\n \"TeaShark\": \"teashark\",\n \"Blazer\": \"Blazer\",\n \"Safari\": \"Version((?!\\\\bEdgiOS\\\\b).)*Mobile.*Safari|Safari.*Mobile|MobileSafari\",\n \"WeChat\": \"\\\\bMicroMessenger\\\\b\",\n \"UCBrowser\": \"UC.*Browser|UCWEB\",\n \"baiduboxapp\": \"baiduboxapp\",\n \"baidubrowser\": \"baidubrowser\",\n \"DiigoBrowser\": \"DiigoBrowser\",\n \"Mercury\": \"\\\\bMercury\\\\b\",\n \"ObigoBrowser\": \"Obigo\",\n \"NetFront\": \"NF-Browser\",\n \"GenericBrowser\": \"NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger\",\n \"PaleMoon\": \"Android.*PaleMoon|Mobile.*PaleMoon\"\n },\n \"props\": {\n \"Mobile\": \"Mobile\\/[VER]\",\n \"Build\": \"Build\\/[VER]\",\n \"Version\": \"Version\\/[VER]\",\n \"VendorID\": \"VendorID\\/[VER]\",\n \"iPad\": \"iPad.*CPU[a-z ]+[VER]\",\n \"iPhone\": \"iPhone.*CPU[a-z ]+[VER]\",\n \"iPod\": \"iPod.*CPU[a-z ]+[VER]\",\n \"Kindle\": \"Kindle\\/[VER]\",\n \"Chrome\": [\n \"Chrome\\/[VER]\",\n \"CriOS\\/[VER]\",\n \"CrMo\\/[VER]\"\n ],\n \"Coast\": [\n \"Coast\\/[VER]\"\n ],\n \"Dolfin\": \"Dolfin\\/[VER]\",\n \"Firefox\": [\n \"Firefox\\/[VER]\",\n \"FxiOS\\/[VER]\"\n ],\n \"Fennec\": \"Fennec\\/[VER]\",\n \"Edge\": \"Edge\\/[VER]\",\n \"IE\": [\n \"IEMobile\\/[VER];\",\n \"IEMobile [VER]\",\n \"MSIE [VER];\",\n \"Trident\\/[0-9.]+;.*rv:[VER]\"\n ],\n \"NetFront\": \"NetFront\\/[VER]\",\n \"NokiaBrowser\": \"NokiaBrowser\\/[VER]\",\n \"Opera\": [\n \" OPR\\/[VER]\",\n \"Opera Mini\\/[VER]\",\n \"Version\\/[VER]\"\n ],\n \"Opera Mini\": \"Opera Mini\\/[VER]\",\n \"Opera Mobi\": \"Version\\/[VER]\",\n \"UCBrowser\": [\n \"UCWEB[VER]\",\n \"UC.*Browser\\/[VER]\"\n ],\n \"MQQBrowser\": \"MQQBrowser\\/[VER]\",\n \"MicroMessenger\": \"MicroMessenger\\/[VER]\",\n \"baiduboxapp\": \"baiduboxapp\\/[VER]\",\n \"baidubrowser\": \"baidubrowser\\/[VER]\",\n \"SamsungBrowser\": \"SamsungBrowser\\/[VER]\",\n \"Iron\": \"Iron\\/[VER]\",\n \"Safari\": [\n \"Version\\/[VER]\",\n \"Safari\\/[VER]\"\n ],\n \"Skyfire\": \"Skyfire\\/[VER]\",\n \"Tizen\": \"Tizen\\/[VER]\",\n \"Webkit\": \"webkit[ \\/][VER]\",\n \"PaleMoon\": \"PaleMoon\\/[VER]\",\n \"SailfishBrowser\": \"SailfishBrowser\\/[VER]\",\n \"Gecko\": \"Gecko\\/[VER]\",\n \"Trident\": \"Trident\\/[VER]\",\n \"Presto\": \"Presto\\/[VER]\",\n \"Goanna\": \"Goanna\\/[VER]\",\n \"iOS\": \" \\\\bi?OS\\\\b [VER][ ;]{1}\",\n \"Android\": \"Android [VER]\",\n \"Sailfish\": \"Sailfish [VER]\",\n \"BlackBerry\": [\n \"BlackBerry[\\\\w]+\\/[VER]\",\n \"BlackBerry.*Version\\/[VER]\",\n \"Version\\/[VER]\"\n ],\n \"BREW\": \"BREW [VER]\",\n \"Java\": \"Java\\/[VER]\",\n \"Windows Phone OS\": [\n \"Windows Phone OS [VER]\",\n \"Windows Phone [VER]\"\n ],\n \"Windows Phone\": \"Windows Phone [VER]\",\n \"Windows CE\": \"Windows CE\\/[VER]\",\n \"Windows NT\": \"Windows NT [VER]\",\n \"Symbian\": [\n \"SymbianOS\\/[VER]\",\n \"Symbian\\/[VER]\"\n ],\n \"webOS\": [\n \"webOS\\/[VER]\",\n \"hpwOS\\/[VER];\"\n ]\n },\n \"utils\": {\n \"Bot\": \"Googlebot|facebookexternalhit|Google-AMPHTML|s~amp-validator|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom|contentkingapp|AspiegelBot\",\n \"MobileBot\": \"Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker\\/M1A1-R2D2\",\n \"DesktopMode\": \"WPDesktop\",\n \"TV\": \"SonyDTV|HbbTV\",\n \"WebKit\": \"(webkit)[ \\/]([\\\\w.]+)\",\n \"Console\": \"\\\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\\\\b\",\n \"Watch\": \"SM-V700\"\n }\n};\n\n // following patterns come from http://detectmobilebrowsers.com/\n impl.detectMobileBrowsers = {\n fullPattern: /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,\n shortPattern: /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i,\n tabletPattern: /android|ipad|playbook|silk/i\n };\n\n var hasOwnProp = Object.prototype.hasOwnProperty,\n isArray;\n\n impl.FALLBACK_PHONE = 'UnknownPhone';\n impl.FALLBACK_TABLET = 'UnknownTablet';\n impl.FALLBACK_MOBILE = 'UnknownMobile';\n\n isArray = ('isArray' in Array) ?\n Array.isArray : function (value) { return Object.prototype.toString.call(value) === '[object Array]'; };\n\n function equalIC(a, b) {\n return a != null && b != null && a.toLowerCase() === b.toLowerCase();\n }\n\n function containsIC(array, value) {\n var valueLC, i, len = array.length;\n if (!len || !value) {\n return false;\n }\n valueLC = value.toLowerCase();\n for (i = 0; i < len; ++i) {\n if (valueLC === array[i].toLowerCase()) {\n return true;\n }\n }\n return false;\n }\n\n function convertPropsToRegExp(object) {\n for (var key in object) {\n if (hasOwnProp.call(object, key)) {\n object[key] = new RegExp(object[key], 'i');\n }\n }\n }\n\n function prepareUserAgent(userAgent) {\n return (userAgent || '').substr(0, 500); // mitigate vulnerable to ReDoS\n }\n\n (function init() {\n var key, values, value, i, len, verPos, mobileDetectRules = impl.mobileDetectRules;\n for (key in mobileDetectRules.props) {\n if (hasOwnProp.call(mobileDetectRules.props, key)) {\n values = mobileDetectRules.props[key];\n if (!isArray(values)) {\n values = [values];\n }\n len = values.length;\n for (i = 0; i < len; ++i) {\n value = values[i];\n verPos = value.indexOf('[VER]');\n if (verPos >= 0) {\n value = value.substring(0, verPos) + '([\\\\w._\\\\+]+)' + value.substring(verPos + 5);\n }\n values[i] = new RegExp(value, 'i');\n }\n mobileDetectRules.props[key] = values;\n }\n }\n convertPropsToRegExp(mobileDetectRules.oss);\n convertPropsToRegExp(mobileDetectRules.phones);\n convertPropsToRegExp(mobileDetectRules.tablets);\n convertPropsToRegExp(mobileDetectRules.uas);\n convertPropsToRegExp(mobileDetectRules.utils);\n\n // copy some patterns to oss0 which are tested first (see issue#15)\n mobileDetectRules.oss0 = {\n WindowsPhoneOS: mobileDetectRules.oss.WindowsPhoneOS,\n WindowsMobileOS: mobileDetectRules.oss.WindowsMobileOS\n };\n }());\n\n /**\n * Test userAgent string against a set of rules and find the first matched key.\n * @param {Object} rules (key is String, value is RegExp)\n * @param {String} userAgent the navigator.userAgent (or HTTP-Header 'User-Agent').\n * @returns {String|null} the matched key if found, otherwise null\n * @private\n */\n impl.findMatch = function(rules, userAgent) {\n for (var key in rules) {\n if (hasOwnProp.call(rules, key)) {\n if (rules[key].test(userAgent)) {\n return key;\n }\n }\n }\n return null;\n };\n\n /**\n * Test userAgent string against a set of rules and return an array of matched keys.\n * @param {Object} rules (key is String, value is RegExp)\n * @param {String} userAgent the navigator.userAgent (or HTTP-Header 'User-Agent').\n * @returns {Array} an array of matched keys, may be empty when there is no match, but not null\n * @private\n */\n impl.findMatches = function(rules, userAgent) {\n var result = [];\n for (var key in rules) {\n if (hasOwnProp.call(rules, key)) {\n if (rules[key].test(userAgent)) {\n result.push(key);\n }\n }\n }\n return result;\n };\n\n /**\n * Check the version of the given property in the User-Agent.\n *\n * @param {String} propertyName\n * @param {String} userAgent\n * @return {String} version or null if version not found\n * @private\n */\n impl.getVersionStr = function (propertyName, userAgent) {\n var props = impl.mobileDetectRules.props, patterns, i, len, match;\n if (hasOwnProp.call(props, propertyName)) {\n patterns = props[propertyName];\n len = patterns.length;\n for (i = 0; i < len; ++i) {\n match = patterns[i].exec(userAgent);\n if (match !== null) {\n return match[1];\n }\n }\n }\n return null;\n };\n\n /**\n * Check the version of the given property in the User-Agent.\n * Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31)\n *\n * @param {String} propertyName\n * @param {String} userAgent\n * @return {Number} version or NaN if version not found\n * @private\n */\n impl.getVersion = function (propertyName, userAgent) {\n var version = impl.getVersionStr(propertyName, userAgent);\n return version ? impl.prepareVersionNo(version) : NaN;\n };\n\n /**\n * Prepare the version number.\n *\n * @param {String} version\n * @return {Number} the version number as a floating number\n * @private\n */\n impl.prepareVersionNo = function (version) {\n var numbers;\n\n numbers = version.split(/[a-z._ \\/\\-]/i);\n if (numbers.length === 1) {\n version = numbers[0];\n }\n if (numbers.length > 1) {\n version = numbers[0] + '.';\n numbers.shift();\n version += numbers.join('');\n }\n return Number(version);\n };\n\n impl.isMobileFallback = function (userAgent) {\n return impl.detectMobileBrowsers.fullPattern.test(userAgent) ||\n impl.detectMobileBrowsers.shortPattern.test(userAgent.substr(0,4));\n };\n\n impl.isTabletFallback = function (userAgent) {\n return impl.detectMobileBrowsers.tabletPattern.test(userAgent);\n };\n\n impl.prepareDetectionCache = function (cache, userAgent, maxPhoneWidth) {\n if (cache.mobile !== undefined) {\n return;\n }\n var phone, tablet, phoneSized;\n\n // first check for stronger tablet rules, then phone (see issue#5)\n tablet = impl.findMatch(impl.mobileDetectRules.tablets, userAgent);\n if (tablet) {\n cache.mobile = cache.tablet = tablet;\n cache.phone = null;\n return; // unambiguously identified as tablet\n }\n\n phone = impl.findMatch(impl.mobileDetectRules.phones, userAgent);\n if (phone) {\n cache.mobile = cache.phone = phone;\n cache.tablet = null;\n return; // unambiguously identified as phone\n }\n\n // our rules haven't found a match -> try more general fallback rules\n if (impl.isMobileFallback(userAgent)) {\n phoneSized = MobileDetect.isPhoneSized(maxPhoneWidth);\n if (phoneSized === undefined) {\n cache.mobile = impl.FALLBACK_MOBILE;\n cache.tablet = cache.phone = null;\n } else if (phoneSized) {\n cache.mobile = cache.phone = impl.FALLBACK_PHONE;\n cache.tablet = null;\n } else {\n cache.mobile = cache.tablet = impl.FALLBACK_TABLET;\n cache.phone = null;\n }\n } else if (impl.isTabletFallback(userAgent)) {\n cache.mobile = cache.tablet = impl.FALLBACK_TABLET;\n cache.phone = null;\n } else {\n // not mobile at all!\n cache.mobile = cache.tablet = cache.phone = null;\n }\n };\n\n // t is a reference to a MobileDetect instance\n impl.mobileGrade = function (t) {\n // impl note:\n // To keep in sync w/ Mobile_Detect.php easily, the following code is tightly aligned to the PHP version.\n // When changes are made in Mobile_Detect.php, copy this method and replace:\n // $this-> / t.\n // self::MOBILE_GRADE_(.) / '$1'\n // , self::VERSION_TYPE_FLOAT / (nothing)\n // isIOS() / os('iOS')\n // [reg] / (nothing) <-- jsdelivr complaining about unescaped unicode character U+00AE\n var $isMobile = t.mobile() !== null;\n\n if (\n // Apple iOS 3.2-5.1 - Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3), iPad 3 (5.1), original iPhone (3.1), iPhone 3 (3.2), 3GS (4.3), 4 (4.3 / 5.0), and 4S (5.1)\n t.os('iOS') && t.version('iPad')>=4.3 ||\n t.os('iOS') && t.version('iPhone')>=3.1 ||\n t.os('iOS') && t.version('iPod')>=3.1 ||\n\n // Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5)\n // Android 3.1 (Honeycomb) - Tested on the Samsung Galaxy Tab 10.1 and Motorola XOOM\n // Android 4.0 (ICS) - Tested on a Galaxy Nexus. Note: transition performance can be poor on upgraded devices\n // Android 4.1 (Jelly Bean) - Tested on a Galaxy Nexus and Galaxy 7\n ( t.version('Android')>2.1 && t.is('Webkit') ) ||\n\n // Windows Phone 7-7.5 - Tested on the HTC Surround (7.0) HTC Trophy (7.5), LG-E900 (7.5), Nokia Lumia 800\n t.version('Windows Phone OS')>=7.0 ||\n\n // Blackberry 7 - Tested on BlackBerry Torch 9810\n // Blackberry 6.0 - Tested on the Torch 9800 and Style 9670\n t.is('BlackBerry') && t.version('BlackBerry')>=6.0 ||\n // Blackberry Playbook (1.0-2.0) - Tested on PlayBook\n t.match('Playbook.*Tablet') ||\n\n // Palm WebOS (1.4-2.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0)\n ( t.version('webOS')>=1.4 && t.match('Palm|Pre|Pixi') ) ||\n // Palm WebOS 3.0 - Tested on HP TouchPad\n t.match('hp.*TouchPad') ||\n\n // Firefox Mobile (12 Beta) - Tested on Android 2.3 device\n ( t.is('Firefox') && t.version('Firefox')>=12 ) ||\n\n // Chrome for Android - Tested on Android 4.0, 4.1 device\n ( t.is('Chrome') && t.is('AndroidOS') && t.version('Android')>=4.0 ) ||\n\n // Skyfire 4.1 - Tested on Android 2.3 device\n ( t.is('Skyfire') && t.version('Skyfire')>=4.1 && t.is('AndroidOS') && t.version('Android')>=2.3 ) ||\n\n // Opera Mobile 11.5-12: Tested on Android 2.3\n ( t.is('Opera') && t.version('Opera Mobi')>11 && t.is('AndroidOS') ) ||\n\n // Meego 1.2 - Tested on Nokia 950 and N9\n t.is('MeeGoOS') ||\n\n // Tizen (pre-release) - Tested on early hardware\n t.is('Tizen') ||\n\n // Samsung Bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser\n // @todo: more tests here!\n t.is('Dolfin') && t.version('Bada')>=2.0 ||\n\n // UC Browser - Tested on Android 2.3 device\n ( (t.is('UC Browser') || t.is('Dolfin')) && t.version('Android')>=2.3 ) ||\n\n // Kindle 3 and Fire - Tested on the built-in WebKit browser for each\n ( t.match('Kindle Fire') ||\n t.is('Kindle') && t.version('Kindle')>=3.0 ) ||\n\n // Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet\n t.is('AndroidOS') && t.is('NookTablet') ||\n\n // Chrome Desktop 11-21 - Tested on OS X 10.7 and Windows 7\n t.version('Chrome')>=11 && !$isMobile ||\n\n // Safari Desktop 4-5 - Tested on OS X 10.7 and Windows 7\n t.version('Safari')>=5.0 && !$isMobile ||\n\n // Firefox Desktop 4-13 - Tested on OS X 10.7 and Windows 7\n t.version('Firefox')>=4.0 && !$isMobile ||\n\n // Internet Explorer 7-9 - Tested on Windows XP, Vista and 7\n t.version('MSIE')>=7.0 && !$isMobile ||\n\n // Opera Desktop 10-12 - Tested on OS X 10.7 and Windows 7\n // @reference: http://my.opera.com/community/openweb/idopera/\n t.version('Opera')>=10 && !$isMobile\n\n ){\n return 'A';\n }\n\n if (\n t.os('iOS') && t.version('iPad')<4.3 ||\n t.os('iOS') && t.version('iPhone')<3.1 ||\n t.os('iOS') && t.version('iPod')<3.1 ||\n\n // Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770\n t.is('Blackberry') && t.version('BlackBerry')>=5 && t.version('BlackBerry')<6 ||\n\n //Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3\n ( t.version('Opera Mini')>=5.0 && t.version('Opera Mini')<=6.5 &&\n (t.version('Android')>=2.3 || t.is('iOS')) ) ||\n\n // Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1)\n t.match('NokiaN8|NokiaC7|N97.*Series60|Symbian/3') ||\n\n // @todo: report this (tested on Nokia N71)\n t.version('Opera Mobi')>=11 && t.is('SymbianOS')\n ){\n return 'B';\n }\n\n if (\n // Blackberry 4.x - Tested on the Curve 8330\n t.version('BlackBerry')<5.0 ||\n // Windows Mobile - Tested on the HTC Leo (WinMo 5.2)\n t.match('MSIEMobile|Windows CE.*Mobile') || t.version('Windows Mobile')<=5.2\n\n ){\n return 'C';\n }\n\n //All older smartphone platforms and featurephones - Any device that doesn't support media queries\n //will receive the basic, C grade experience.\n return 'C';\n };\n\n impl.detectOS = function (ua) {\n return impl.findMatch(impl.mobileDetectRules.oss0, ua) ||\n impl.findMatch(impl.mobileDetectRules.oss, ua);\n };\n\n impl.getDeviceSmallerSide = function () {\n return window.screen.width < window.screen.height ?\n window.screen.width :\n window.screen.height;\n };\n\n /**\n * Constructor for MobileDetect object.\n *
\n * Such an object will keep a reference to the given user-agent string and cache most of the detect queries.
\n *
\n * Find information how to download and install:\n * github.com/hgoebl/mobile-detect.js/\n *
\n *\n * @example
\n     *     var md = new MobileDetect(window.navigator.userAgent);\n     *     if (md.mobile()) {\n     *         location.href = (md.mobileGrade() === 'A') ? '/mobile/' : '/lynx/';\n     *     }\n     * 
\n *\n * @param {string} userAgent typically taken from window.navigator.userAgent or http_header['User-Agent']\n * @param {number} [maxPhoneWidth=600] only for browsers specify a value for the maximum\n * width of smallest device side (in logical \"CSS\" pixels) until a device detected as mobile will be handled\n * as phone.\n * This is only used in cases where the device cannot be classified as phone or tablet.
\n * See Declaring Tablet Layouts\n * for Android.
\n * If you provide a value < 0, then this \"fuzzy\" check is disabled.\n * @constructor\n * @global\n */\n function MobileDetect(userAgent, maxPhoneWidth) {\n this.ua = prepareUserAgent(userAgent);\n this._cache = {};\n //600dp is typical 7\" tablet minimum width\n this.maxPhoneWidth = maxPhoneWidth || 600;\n }\n\n MobileDetect.prototype = {\n constructor: MobileDetect,\n\n /**\n * Returns the detected phone or tablet type or null if it is not a mobile device.\n *
\n * For a list of possible return values see {@link MobileDetect#phone} and {@link MobileDetect#tablet}.
\n *
\n * If the device is not detected by the regular expressions from Mobile-Detect, a test is made against\n * the patterns of detectmobilebrowsers.com. If this test\n * is positive, a value of UnknownPhone, UnknownTablet or\n * UnknownMobile is returned.
\n * When used in browser, the decision whether phone or tablet is made based on screen.width/height.
\n *
\n * When used server-side (node.js), there is no way to tell the difference between UnknownTablet\n * and UnknownMobile, so you will get UnknownMobile here.
\n * Be aware that since v1.0.0 in this special case you will get UnknownMobile only for:\n * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}.\n * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use.\n *
\n * In most cases you will use the return value just as a boolean.\n *\n * @returns {String} the key for the phone family or tablet family, e.g. \"Nexus\".\n * @function MobileDetect#mobile\n */\n mobile: function () {\n impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth);\n return this._cache.mobile;\n },\n\n /**\n * Returns the detected phone type/family string or null.\n *
\n * The returned tablet (family or producer) is one of following keys:
\n *
iPhone, BlackBerry, Pixel, HTC, Nexus, Dell, Motorola, Samsung, LG, Sony, Asus,\n * Xiaomi, NokiaLumia, Micromax, Palm, Vertu, Pantech, Fly, Wiko, iMobile,\n * SimValley, Wolfgang, Alcatel, Nintendo, Amoi, INQ, OnePlus, GenericPhone
\n *
\n * If the device is not detected by the regular expressions from Mobile-Detect, a test is made against\n * the patterns of detectmobilebrowsers.com. If this test\n * is positive, a value of UnknownPhone or UnknownMobile is returned.
\n * When used in browser, the decision whether phone or tablet is made based on screen.width/height.
\n *
\n * When used server-side (node.js), there is no way to tell the difference between UnknownTablet\n * and UnknownMobile, so you will get null here, while {@link MobileDetect#mobile}\n * will return UnknownMobile.
\n * Be aware that since v1.0.0 in this special case you will get UnknownMobile only for:\n * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}.\n * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use.\n *
\n * In most cases you will use the return value just as a boolean.\n *\n * @returns {String} the key of the phone family or producer, e.g. \"iPhone\"\n * @function MobileDetect#phone\n */\n phone: function () {\n impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth);\n return this._cache.phone;\n },\n\n /**\n * Returns the detected tablet type/family string or null.\n *
\n * The returned tablet (family or producer) is one of following keys:
\n *
iPad, NexusTablet, GoogleTablet, SamsungTablet, Kindle, SurfaceTablet,\n * HPTablet, AsusTablet, BlackBerryTablet, HTCtablet, MotorolaTablet, NookTablet,\n * AcerTablet, ToshibaTablet, LGTablet, FujitsuTablet, PrestigioTablet,\n * LenovoTablet, DellTablet, YarvikTablet, MedionTablet, ArnovaTablet,\n * IntensoTablet, IRUTablet, MegafonTablet, EbodaTablet, AllViewTablet,\n * ArchosTablet, AinolTablet, NokiaLumiaTablet, SonyTablet, PhilipsTablet,\n * CubeTablet, CobyTablet, MIDTablet, MSITablet, SMiTTablet, RockChipTablet,\n * FlyTablet, bqTablet, HuaweiTablet, NecTablet, PantechTablet, BronchoTablet,\n * VersusTablet, ZyncTablet, PositivoTablet, NabiTablet, KoboTablet, DanewTablet,\n * TexetTablet, PlaystationTablet, TrekstorTablet, PyleAudioTablet, AdvanTablet,\n * DanyTechTablet, GalapadTablet, MicromaxTablet, KarbonnTablet, AllFineTablet,\n * PROSCANTablet, YONESTablet, ChangJiaTablet, GUTablet, PointOfViewTablet,\n * OvermaxTablet, HCLTablet, DPSTablet, VistureTablet, CrestaTablet,\n * MediatekTablet, ConcordeTablet, GoCleverTablet, ModecomTablet, VoninoTablet,\n * ECSTablet, StorexTablet, VodafoneTablet, EssentielBTablet, RossMoorTablet,\n * iMobileTablet, TolinoTablet, AudioSonicTablet, AMPETablet, SkkTablet,\n * TecnoTablet, JXDTablet, iJoyTablet, FX2Tablet, XoroTablet, ViewsonicTablet,\n * VerizonTablet, OdysTablet, CaptivaTablet, IconbitTablet, TeclastTablet,\n * OndaTablet, JaytechTablet, BlaupunktTablet, DigmaTablet, EvolioTablet,\n * LavaTablet, AocTablet, MpmanTablet, CelkonTablet, WolderTablet, MediacomTablet,\n * MiTablet, NibiruTablet, NexoTablet, LeaderTablet, UbislateTablet,\n * PocketBookTablet, KocasoTablet, HisenseTablet, Hudl, TelstraTablet,\n * GenericTablet
\n *
\n * If the device is not detected by the regular expressions from Mobile-Detect, a test is made against\n * the patterns of detectmobilebrowsers.com. If this test\n * is positive, a value of UnknownTablet or UnknownMobile is returned.
\n * When used in browser, the decision whether phone or tablet is made based on screen.width/height.
\n *
\n * When used server-side (node.js), there is no way to tell the difference between UnknownTablet\n * and UnknownMobile, so you will get null here, while {@link MobileDetect#mobile}\n * will return UnknownMobile.
\n * Be aware that since v1.0.0 in this special case you will get UnknownMobile only for:\n * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}.\n * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use.\n *
\n * In most cases you will use the return value just as a boolean.\n *\n * @returns {String} the key of the tablet family or producer, e.g. \"SamsungTablet\"\n * @function MobileDetect#tablet\n */\n tablet: function () {\n impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth);\n return this._cache.tablet;\n },\n\n /**\n * Returns the (first) detected user-agent string or null.\n *
\n * The returned user-agent is one of following keys:
\n *
Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, Blazer,\n * Safari, WeChat, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, Mercury,\n * ObigoBrowser, NetFront, GenericBrowser, PaleMoon
\n *
\n * In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare\n * cases where a mobile device pretends to be more than one particular browser. You can get the\n * list of all matches with {@link MobileDetect#userAgents} or check for a particular value by\n * providing one of the defined keys as first argument to {@link MobileDetect#is}.\n *\n * @returns {String} the key for the detected user-agent or null\n * @function MobileDetect#userAgent\n */\n userAgent: function () {\n if (this._cache.userAgent === undefined) {\n this._cache.userAgent = impl.findMatch(impl.mobileDetectRules.uas, this.ua);\n }\n return this._cache.userAgent;\n },\n\n /**\n * Returns all detected user-agent strings.\n *
\n * The array is empty or contains one or more of following keys:
\n *
Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, Blazer,\n * Safari, WeChat, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, Mercury,\n * ObigoBrowser, NetFront, GenericBrowser, PaleMoon
\n *
\n * In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare\n * cases where a mobile device pretends to be more than one particular browser. You can get the\n * list of all matches with {@link MobileDetect#userAgents} or check for a particular value by\n * providing one of the defined keys as first argument to {@link MobileDetect#is}.\n *\n * @returns {Array} the array of detected user-agent keys or []\n * @function MobileDetect#userAgents\n */\n userAgents: function () {\n if (this._cache.userAgents === undefined) {\n this._cache.userAgents = impl.findMatches(impl.mobileDetectRules.uas, this.ua);\n }\n return this._cache.userAgents;\n },\n\n /**\n * Returns the detected operating system string or null.\n *
\n * The operating system is one of following keys:
\n *
AndroidOS, BlackBerryOS, PalmOS, SymbianOS, WindowsMobileOS, WindowsPhoneOS,\n * iOS, iPadOS, SailfishOS, MeeGoOS, MaemoOS, JavaOS, webOS, badaOS, BREWOS
\n *\n * @returns {String} the key for the detected operating system.\n * @function MobileDetect#os\n */\n os: function () {\n if (this._cache.os === undefined) {\n this._cache.os = impl.detectOS(this.ua);\n }\n return this._cache.os;\n },\n\n /**\n * Get the version (as Number) of the given property in the User-Agent.\n *
\n * Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31)\n *\n * @param {String} key a key defining a thing which has a version.
\n * You can use one of following keys:
\n *
Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast,\n * Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini,\n * Opera Mobi, UCBrowser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser,\n * SamsungBrowser, Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon,\n * SailfishBrowser, Gecko, Trident, Presto, Goanna, iOS, Android, Sailfish,\n * BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows CE, Windows\n * NT, Symbian, webOS
\n *\n * @returns {Number} the version as float or NaN if User-Agent doesn't contain this version.\n * Be careful when comparing this value with '==' operator!\n * @function MobileDetect#version\n */\n version: function (key) {\n return impl.getVersion(key, this.ua);\n },\n\n /**\n * Get the version (as String) of the given property in the User-Agent.\n *
\n *\n * @param {String} key a key defining a thing which has a version.
\n * You can use one of following keys:
\n *
Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast,\n * Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini,\n * Opera Mobi, UCBrowser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser,\n * SamsungBrowser, Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon,\n * SailfishBrowser, Gecko, Trident, Presto, Goanna, iOS, Android, Sailfish,\n * BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows CE, Windows\n * NT, Symbian, webOS
\n *\n * @returns {String} the \"raw\" version as String or null if User-Agent doesn't contain this version.\n *\n * @function MobileDetect#versionStr\n */\n versionStr: function (key) {\n return impl.getVersionStr(key, this.ua);\n },\n\n /**\n * Global test key against userAgent, os, phone, tablet and some other properties of userAgent string.\n *\n * @param {String} key the key (case-insensitive) of a userAgent, an operating system, phone or\n * tablet family.
\n * For a complete list of possible values, see {@link MobileDetect#userAgent},\n * {@link MobileDetect#os}, {@link MobileDetect#phone}, {@link MobileDetect#tablet}.
\n * Additionally you have following keys:
\n *
Bot, MobileBot, DesktopMode, TV, WebKit, Console, Watch
\n *\n * @returns {boolean} true when the given key is one of the defined keys of userAgent, os, phone,\n * tablet or one of the listed additional keys, otherwise false\n * @function MobileDetect#is\n */\n is: function (key) {\n return containsIC(this.userAgents(), key) ||\n equalIC(key, this.os()) ||\n equalIC(key, this.phone()) ||\n equalIC(key, this.tablet()) ||\n containsIC(impl.findMatches(impl.mobileDetectRules.utils, this.ua), key);\n },\n\n /**\n * Do a quick test against navigator::userAgent.\n *\n * @param {String|RegExp} pattern the pattern, either as String or RegExp\n * (a string will be converted to a case-insensitive RegExp).\n * @returns {boolean} true when the pattern matches, otherwise false\n * @function MobileDetect#match\n */\n match: function (pattern) {\n if (!(pattern instanceof RegExp)) {\n pattern = new RegExp(pattern, 'i');\n }\n return pattern.test(this.ua);\n },\n\n /**\n * Checks whether the mobile device can be considered as phone regarding screen.width.\n *
\n * Obviously this method makes sense in browser environments only (not for Node.js)!\n * @param {number} [maxPhoneWidth] the maximum logical pixels (aka. CSS-pixels) to be considered as phone.
\n * The argument is optional and if not present or falsy, the value of the constructor is taken.\n * @returns {boolean|undefined} undefined if screen size wasn't detectable, else true\n * when screen.width is less or equal to maxPhoneWidth, otherwise false.
\n * Will always return undefined server-side.\n */\n isPhoneSized: function (maxPhoneWidth) {\n return MobileDetect.isPhoneSized(maxPhoneWidth || this.maxPhoneWidth);\n },\n\n /**\n * Returns the mobile grade ('A', 'B', 'C').\n *\n * @returns {String} one of the mobile grades ('A', 'B', 'C').\n * @function MobileDetect#mobileGrade\n */\n mobileGrade: function () {\n if (this._cache.grade === undefined) {\n this._cache.grade = impl.mobileGrade(this);\n }\n return this._cache.grade;\n }\n };\n\n // environment-dependent\n if (typeof window !== 'undefined' && window.screen) {\n MobileDetect.isPhoneSized = function (maxPhoneWidth) {\n return maxPhoneWidth < 0 ? undefined : impl.getDeviceSmallerSide() <= maxPhoneWidth;\n };\n } else {\n MobileDetect.isPhoneSized = function () {};\n }\n\n // should not be replaced by a completely new object - just overwrite existing methods\n MobileDetect._impl = impl;\n \n MobileDetect.version = '1.4.5 2021-03-13';\n\n return MobileDetect;\n}); // end of call of define()\n})((function (undefined) {\n if (typeof module !== 'undefined' && module.exports) {\n return function (factory) { module.exports = factory(); };\n } else if (typeof define === 'function' && define.amd) {\n return define;\n } else if (typeof window !== 'undefined') {\n return function (factory) { window.MobileDetect = factory(); };\n } else {\n // please file a bug if you get this error!\n throw new Error('unknown environment');\n }\n})());","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","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\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","var parent = require('../../actual/array/for-each');\n\nmodule.exports = parent;\n","var parent = require('../../stable/array/for-each');\n\nmodule.exports = parent;\n","var parent = require('../../es/array/for-each');\n\nmodule.exports = parent;\n","require('../../modules/es.array.for-each');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('Array', 'forEach');\n","'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {\n forEach: forEach\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","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = false;\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n }\n try {\n // we can't check .prototype since constructors produced by .bind haven't it\n // `Function#toString` throws on some built-it function in some legacy engines\n // (for example, `DOMQuad` and similar in FF41-)\n return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n } catch (error) {\n return true;\n }\n};\n\nisConstructorLegacy.sham = true;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call -- required for testing\n method.call(null, argument || function () { return 1; }, 1);\n });\n};\n","var parent = require('../../actual/array/filter');\n\nmodule.exports = parent;\n","var parent = require('../../stable/array/filter');\n\nmodule.exports = parent;\n","var parent = require('../../es/array/filter');\n\nmodule.exports = parent;\n","require('../../modules/es.array.filter');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('Array', 'filter');\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","var parent = require('../../actual/array/includes');\n\nmodule.exports = parent;\n","var parent = require('../../stable/array/includes');\n\nmodule.exports = parent;\n","var parent = require('../../es/array/includes');\n\nmodule.exports = parent;\n","require('../../modules/es.array.includes');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('Array', 'includes');\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import MobileDetect from 'mobile-detect';\r\n\r\n\r\nconst md = new MobileDetect(window.navigator.userAgent);\r\nconst isMobile = md.mobile();\r\n\r\nif (isMobile) {\r\n const elementsToHide = document.querySelectorAll('.no-mobile');\r\n const mercedes360View = document.getElementById('mercedes-360-view');\r\n\r\n for (let i = 0; elementsToHide.length > i; i++ ) {\r\n const elem = elementsToHide[i];\r\n elem.parentNode.removeChild(elem);\r\n }\r\n\r\n mercedes360View.setAttribute(\r\n 'data-folder',\r\n 'https://scaleflex.cloudimg.io/v7/https://cdn.scaleflex.it/demo/360-car/'\r\n );\r\n mercedes360View.setAttribute('data-ratio', '1.7');\r\n mercedes360View.setAttribute('data-bottom-circle-offset', '22');\r\n}","export const AUTOPLAY_BEHAVIOR = {\r\n SPIN_X: 'spin-x',\r\n SPIN_Y: 'spin-y',\r\n SPIN_XY: 'spin-xy',\r\n SPIN_YX: 'spin-yx',\r\n};\r\n","export const FALSY_VALUES = [\r\n false,\r\n 0,\r\n null,\r\n undefined,\r\n 'false',\r\n '0',\r\n 'null',\r\n 'undefined',\r\n];\r\n","export const ORIENTATIONS = {\r\n X: 'x-axis',\r\n Y: 'y-axis',\r\n CENTER: 'center',\r\n};\r\n","const ORGINAL_SIZE_REGEX = /width=\\d+|w=\\d+|h=\\d+|&width=\\d+|&w=\\d+|&h=\\d+|func=\\w+|\\?$/g;\r\nconst AND_SYMBOL_REGEX = /\\?&/g;\r\n\r\n\r\nexport {\r\n ORGINAL_SIZE_REGEX,\r\n AND_SYMBOL_REGEX,\r\n};\r\n","import { AUTOPLAY_BEHAVIOR } from './constants';\r\n//TODO [deprecated]: remove filename, amount in the upcoming versions\r\nconst get360ViewProps = (image) => ({\r\n folder: attr(image, 'folder') || attr(image, 'data-folder') || '/',\r\n apiVersion: attr(image, 'api-version') || attr(image, 'data-api-version')\r\n || attr(image, 'apiVersion') || attr(image, 'data-apiVersion') || \"v7\",\r\n filenameX: attr(image, 'filename') || attr(image, 'data-filename')\r\n || attr(image, 'filename-x') || attr(image, 'data-filename-x')\r\n || 'image-{index}.jpg',\r\n filenameY: attr(image, 'filename-y') ||\r\n attr(image, 'data-filename-y') || 'image-y-{index}.jpg',\r\n imageListX: attr(image, 'image-list-x') || attr(image, 'data-image-list-x') || null,\r\n imageListY: attr(image, 'image-list-y') || attr(image, 'data-image-list-y') || null,\r\n indexZeroBase: parseInt(attr(image, 'index-zero-base') || attr(image, 'data-index-zero-base') || 0, 10),\r\n amountX: parseInt(attr(image, 'amount') || attr(image, 'data-amount')\r\n || attr(image, 'amount-x') || attr(image, 'data-amount-x')\r\n || 36, 10),\r\n amountY: parseInt(attr(image, 'amount-y') ||\r\n attr(image, 'data-amount-y') || 0, 10),\r\n speed: parseInt(attr(image, 'speed') || attr(image, 'data-speed') || 80, 10),\r\n dragSpeed: parseInt(attr(image, 'drag-speed') || attr(image, 'data-drag-speed') || 150, 10),\r\n keys: isTrue(image, 'keys'),\r\n keysReverse: isTrue(image, 'keys-reverse'),\r\n boxShadow: attr(image, 'box-shadow') || attr(image, 'data-box-shadow'),\r\n autoplay: isTrue(image, 'autoplay'),\r\n autoplayBehavior: attr(image, 'autoplay-behavior')\r\n || attr(image, 'data-autoplay-behavior')\r\n || AUTOPLAY_BEHAVIOR.SPIN_X,\r\n playOnce: isTrue(image, 'play-once'),\r\n autoplayReverse: isTrue(image, 'autoplay-reverse'),\r\n pointerZoom: parseFloat(attr(image, 'pointer-zoom') ||\r\n attr(image, 'data-pointer-zoom') || 0, 10),\r\n bottomCircle: isTrue(image, 'bottom-circle'),\r\n disableDrag: isTrue(image, 'disable-drag'),\r\n fullscreen: isTrue(image, 'fullscreen') || isTrue(image, 'full-screen'),\r\n magnifier: ((attr(image, 'magnifier') !== null) || (attr(image, 'data-magnifier') !== null)) &&\r\n parseFloat(attr(image, 'magnifier') || attr(image, 'data-magnifier'), 10),\r\n bottomCircleOffset: parseInt(attr(image, 'bottom-circle-offset') || attr(image, 'data-bottom-circle-offset') || 5, 10),\r\n ciToken: attr(image, 'responsive') || attr(image, 'data-responsive'),\r\n ciFilters: attr(image, 'filters')\r\n || attr(image, 'data-filters'),\r\n ciTransformation: attr(image, 'transformation')\r\n || attr(image, 'data-transformation'),\r\n lazyload: isTrue(image, 'lazyload'),\r\n lazySelector: attr(image, 'lazyload-selector') || attr(image, 'data-lazyload-selector') || 'lazyload',\r\n spinReverse: isTrue(image, 'spin-reverse'),\r\n controlReverse: isTrue(image, 'control-reverse'),\r\n stopAtEdges: isTrue(image, 'stop-at-edges'),\r\n hide360Logo: isTrue(image, 'hide-360-logo'),\r\n logoSrc: attr(image, 'logo-src') || 'https://scaleflex.ultrafast.io/https://scaleflex.airstore.io/filerobot/js-cloudimage-360-view/360_view.svg',\r\n ratio: attr(image, 'ratio') || attr(image, 'data-ratio'),\r\n imageInfo: attr(image, 'info')|| attr(image, 'data-info') || isTrue(image, 'info')\r\n});\r\n\r\nconst isTrue = (image, type) => {\r\n const imgProp = attr(image, type);\r\n const imgDataProp = attr(image, `data-${type}`);\r\n\r\n return (imgProp !== null && imgProp !== 'false') || (imgDataProp !== null && imgDataProp !== 'false');\r\n};\r\n\r\nconst attr = (element, attribute) => element.getAttribute(attribute);\r\n\r\nconst setView360Icon = (view360Icon, logoSrc) => {\r\n view360Icon.style.background = `rgba(255,255,255,0.8) url('${logoSrc}') 50% 50% / contain no-repeat`;\r\n}\r\n\r\nconst debounce = (func, timeout) => {\r\n let timer;\r\n return (...args) => {\r\n clearTimeout(timer);\r\n\r\n timer = setTimeout(() => {\r\n func.apply(this, args)\r\n }, timeout)\r\n }\r\n}\r\n\r\nexport {\r\n get360ViewProps,\r\n setView360Icon,\r\n attr,\r\n isTrue,\r\n debounce\r\n}","export const PROPS_REQUIRE_RELOAD = [\r\n 'folder', //images source\r\n 'filenameX', //images source\r\n 'filenameY', //images source\r\n 'apiVersion', //images source\r\n 'imageListX', //images source\r\n 'imageListY', //images source\r\n 'indexZeroBase', //images source\r\n 'lazySelector', //images source\r\n 'keys', // events\r\n 'stopAtEdges', // events\r\n 'disableDrag', // events\r\n 'controlReverse', // events\r\n 'disableDrag', // events\r\n]","import { getSizeLimit } from './get-size-limit';\r\n\r\nexport const getResponsiveWidthOfContainer = (width) => getSizeLimit(width);\r\n","export const getSizeLimit = (currentSize) => {\r\n if (currentSize <= 25) return '25';\r\n if (currentSize <= 50) return '50';\r\n\r\n return (Math.ceil(currentSize / 100) * 100).toString();\r\n};\r\n","import { FALSY_VALUES } from '../../constants/falsy-values';\r\nimport { getResponsiveWidthOfContainer } from '../responsive/get-responsive-width-of-container';\r\nimport { getSizeAccordingToPixelRatio } from '../responsive/get-size-according-to-pixel-ratio';\r\n\r\nexport const generateImagesPath = (srcConfig) => {\r\n const {\r\n container, folder, apiVersion, filename = '', ciParams,\r\n } = srcConfig;\r\n\r\n const { ciToken, ciFilters, ciTransformation } = ciParams || {};\r\n\r\n let src = `${folder}${filename}`;\r\n\r\n if (ciToken) {\r\n const imageOffsetWidth = container.offsetWidth;\r\n\r\n const version = !FALSY_VALUES.includes(apiVersion) ? apiVersion : null;\r\n\r\n const finalApiVersion = version ? `${version}/` : '';\r\n const ciSizeNext = getSizeAccordingToPixelRatio(getResponsiveWidthOfContainer(imageOffsetWidth));\r\n\r\n const isCloudImageUrl = new URL(src).origin.includes('cloudimg');\r\n const cdn = isCloudImageUrl ? src\r\n : `https://${ciToken}.cloudimg.io/${finalApiVersion}${src}`;\r\n\r\n src = `${cdn}?${ciTransformation || `width=${ciSizeNext}`}${ciFilters ? `&f=${ciFilters}` : ''}`;\r\n }\r\n\r\n return src;\r\n};\r\n","export const getSizeAccordingToPixelRatio = (size) => {\r\n const splittedSizes = size.toString().split('x');\r\n const result = [];\r\n\r\n [].forEach.call(splittedSizes, (splittedSize) => {\r\n result.push(splittedSize * Math.round(window.devicePixelRatio || 1));\r\n });\r\n\r\n return result.join('x');\r\n};\r\n","export const loadImageAsPromise = async (src, index, cb) => {\r\n const image = new Image();\r\n\r\n image.src = src;\r\n\r\n return new Promise((reslove) => {\r\n image.onload = () => {\r\n reslove(image);\r\n\r\n if (cb) {\r\n cb(image, index);\r\n }\r\n };\r\n\r\n image.onerror = () => {\r\n reslove(image);\r\n\r\n if (cb) {\r\n cb(image, index);\r\n }\r\n };\r\n });\r\n};\r\n","import { loadImageAsPromise } from './load-image-as-promise';\r\n\r\nexport const loadImagesRelativeToContainerSize = async (imagesSrcs, cb) => {\r\n await Promise.all(imagesSrcs.map(async (src, index) => {\r\n await loadImageAsPromise(src, index, cb);\r\n }));\r\n};\r\n","export const pad = (n, width = 0) => {\r\n n += '';\r\n\r\n return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;\r\n};\r\n","import { AND_SYMBOL_REGEX, ORGINAL_SIZE_REGEX } from '../../../constants/regex';\r\nimport { pad } from '../pad';\r\n\r\nexport const prepareImagesFromFolder = (imagesSrc, srcConfig, loadOriginalImages) => {\r\n const { amount, indexZeroBase } = srcConfig || {};\r\n\r\n return [...new Array(amount)].map((_item, index) => {\r\n const nextZeroFilledIndex = pad(index + 1, indexZeroBase);\r\n const imageSrc = imagesSrc.replace('{index}', nextZeroFilledIndex);\r\n\r\n if (loadOriginalImages) {\r\n const imageOriginalSrc = imageSrc\r\n .replace(ORGINAL_SIZE_REGEX, '')\r\n .replace(AND_SYMBOL_REGEX, '?');\r\n\r\n return imageOriginalSrc;\r\n }\r\n\r\n return imageSrc;\r\n });\r\n};\r\n","import { generateImagesPath } from '../../image-src/generate-images-path';\r\n\r\nexport const prepareImagesFromList = (images, srcConfig, loadOriginalImages ) => {\r\n const { folder } = srcConfig;\r\n\r\n return images.map((src) => {\r\n const nextSrcConfig = { ...srcConfig };\r\n nextSrcConfig.folder = /(http(s?)):\\/\\//gi.test(src) ? '' : folder;\r\n nextSrcConfig.filename = src;\r\n\r\n if (loadOriginalImages) {\r\n const lastIndex = resultSrc.lastIndexOf('//');\r\n\r\n return resultSrc.slice(lastIndex);\r\n }\r\n\r\n return generateImagesPath(nextSrcConfig);\r\n });\r\n};\r\n","/* eslint-disable no-console */\r\nimport { loadImagesRelativeToContainerSize } from './load-images-relative-to-container-size';\r\nimport { prepareImagesFromFolder } from './images-from-folder/prepare-images-from-folder';\r\nimport { prepareImagesFromList } from './images-from-list/prepare-images-from-list';\r\n\r\nexport const preloadImages = (srcConfig, imagesSrc, cb) => {\r\n const { imageList } = srcConfig || {};\r\n let imagesSrcs = [];\r\n\r\n if (imageList) {\r\n try {\r\n const images = JSON.parse(imageList);\r\n\r\n imagesSrcs = prepareImagesFromList(images, srcConfig);\r\n } catch (error) {\r\n console.error(`Wrong format in image-list attribute: ${error.message}`);\r\n }\r\n } else {\r\n imagesSrcs = prepareImagesFromFolder(imagesSrc, srcConfig);\r\n }\r\n\r\n loadImagesRelativeToContainerSize(imagesSrcs, cb);\r\n};\r\n","import { loadImageAsPromise } from './load-image-as-promise';\r\n\r\nexport const loadOriginalImages = async (imagesSrcs, cb) => {\r\n await Promise.all(imagesSrcs.map(async (src, index) => {\r\n await loadImageAsPromise(src, index, cb);\r\n }));\r\n};\r\n","/* eslint-disable no-console */\r\nimport { prepareImagesFromFolder } from './images-from-folder/prepare-images-from-folder';\r\nimport { prepareImagesFromList } from './images-from-list/prepare-images-from-list';\r\nimport { loadOriginalImages } from './load-original-images';\r\n\r\nexport const preloadOriginalImages = (srcConfig, imagesSrc, cb) => {\r\n const { imageList } = srcConfig || {};\r\n let imagesSrcs = [];\r\n\r\n if (imageList) {\r\n try {\r\n const images = JSON.parse(imageList);\r\n\r\n imagesSrcs = prepareImagesFromList(images, srcConfig, true);\r\n } catch (error) {\r\n console.error(`Wrong format in image-list attribute: ${error.message}`);\r\n }\r\n } else {\r\n imagesSrcs = prepareImagesFromFolder(imagesSrc, srcConfig, true);\r\n }\r\n\r\n loadOriginalImages(imagesSrcs, cb);\r\n};\r\n","import { generateImagesPath } from \"../../../image-src/generate-images-path\";\r\n\r\nexport const prepareFirstImageFromList = (images, srcConfig) => {\r\n const { folder } = srcConfig;\r\n\r\n const firstImageSrc = images[0];\r\n\r\n const nextSrcConfig = { ...srcConfig };\r\n nextSrcConfig.folder = /(http(s?)):\\/\\//gi.test(firstImageSrc) ? '' : folder;\r\n nextSrcConfig.filename = firstImageSrc;\r\n\r\n return generateImagesPath(nextSrcConfig);\r\n}","import { prepareFirstImageFromFolder } from \"./prepare-first-image/prepare-first-image-from-folder\";\r\nimport { prepareFirstImageFromList } from \"./prepare-first-image/prepare-first-image-from-list\";\r\n\r\nexport const initLazyload = (imagesSrc, srcConfig, cb) => {\r\n const { imageList, lazySelector, innerBox } = srcConfig || {};\r\n let firstImageSrc;\r\n\r\n if (imageList) {\r\n try {\r\n const images = JSON.parse(imageList);\r\n\r\n firstImageSrc = prepareFirstImageFromList(images, srcConfig);\r\n } catch (error) {\r\n console.error(`Wrong format in image-list attribute: ${error.message}`);\r\n }\r\n } else {\r\n firstImageSrc = prepareFirstImageFromFolder(imagesSrc, srcConfig);\r\n }\r\n\r\n const image = new Image();\r\n\r\n image.setAttribute('data-src', firstImageSrc);\r\n image.style.position = 'absolute';\r\n image.style.top = 0;\r\n image.style.left = 0;\r\n image.style.width = '100%';\r\n image.style.maxWidth = '100%';\r\n image.style.maxHeight = '100%';\r\n\r\n\r\n if (lazySelector) image.className = lazySelector;\r\n\r\n innerBox.appendChild(image);\r\n\r\n if (cb) {\r\n image.onload = () => cb(image);\r\n }\r\n}","import { pad } from \"../../pad\";\r\n\r\nexport const prepareFirstImageFromFolder = (imagesSrcs, srcConfig) => {\r\n const {indexZeroBase } = srcConfig || {};\r\n const nextZeroFilledIndex = pad(1, indexZeroBase);\r\n\r\n return imagesSrcs.replace('{index}', nextZeroFilledIndex);\r\n}","import { fit } from './fit';\r\n\r\nexport const contain = fit(true);\r\n","export const fit = (contains) => (parentWidth, parentHeight, childWidth, childHeight, scale = 1, offsetX = 0.5, offsetY = 0.5) => {\r\n const childRatio = childWidth / childHeight;\r\n const parentRatio = parentWidth / parentHeight;\r\n let width = parentWidth * scale;\r\n let height = parentHeight * scale;\r\n\r\n if (contains ? (childRatio > parentRatio) : (childRatio < parentRatio)) {\r\n height = width / childRatio;\r\n } else {\r\n width = height * childRatio;\r\n }\r\n\r\n return {\r\n width,\r\n height,\r\n offsetX: (parentWidth - width) * offsetX,\r\n offsetY: (parentHeight - height) * offsetY,\r\n };\r\n};\r\n","import { getCursorPosition } from './get-cursor-position';\r\n\r\nexport const moveMagnifier = (e, containerConfig, glass) => {\r\n const {\r\n container, w, h, zoom, bw, offsetX, offsetY,\r\n } = containerConfig;\r\n\r\n let x; let y;\r\n\r\n const pos = getCursorPosition(e, container);\r\n x = pos.x;\r\n y = pos.y;\r\n\r\n if (x > container.offsetWidth - (w / zoom)) {\r\n x = container.offsetWidth - (w / zoom);\r\n }\r\n\r\n if (x < w / zoom) {\r\n x = w / zoom;\r\n }\r\n\r\n if (y > container.offsetHeight - (h / zoom)) {\r\n y = container.offsetHeight - (h / zoom);\r\n }\r\n\r\n if (y < h / zoom) {\r\n y = h / zoom;\r\n }\r\n\r\n glass.style.left = `${x - w}px`;\r\n glass.style.top = `${y - h}px`;\r\n\r\n const backgroundPosX = (\r\n (x - offsetX) * zoom\r\n ) - w + bw;\r\n\r\n const backgroundPosY = (\r\n (y - offsetY) * zoom\r\n ) - h + bw;\r\n\r\n glass.style.backgroundPosition = `-${backgroundPosX}px -${backgroundPosY}px`;\r\n};\r\n","export const getCursorPosition = (event = window.event, container) => {\r\n let x = 0;\r\n let y = 0;\r\n\r\n const a = container.getBoundingClientRect();\r\n\r\n x = event.pageX - a.left;\r\n y = event.pageY - a.top;\r\n x -= window.pageXOffset;\r\n y -= window.pageYOffset;\r\n\r\n return { x, y };\r\n};\r\n","export const getSpeedFactor = (dragSpeed, amount, containerOffset) => {\r\n const containerOffsetWidth = Math.max(containerOffset, 600);\r\n const speedFactor = (dragSpeed / 150) * (36 / amount) * 25 * (containerOffsetWidth / 1500) || 1;\r\n\r\n return Math.floor(speedFactor);\r\n};\r\n","export const addClass = (el, className) => {\r\n const element = el || {};\r\n if (element.classList) {\r\n element.classList.add(className);\r\n } else {\r\n element.className += ` ${className}`;\r\n }\r\n};\r\n","export const removeClass = (el, className) => {\r\n if (el.classList) { el.classList.remove(className); } else { el.className = el.className.replace(new RegExp(`(^|\\\\b)${className.split(' ').join('|')}(\\\\b|$)`, 'gi'), ' '); }\r\n};\r\n","import { ORIENTATIONS } from '../../constants/orientations';\r\n\r\nexport const getMovingDirection = (isStartSpin, allowSpinY, prevPosition, nextPositions, currentMovingDirection) => {\r\n let movingDirection = ORIENTATIONS.CENTER;\r\n\r\n if (isStartSpin) return currentMovingDirection;\r\n\r\n const differenceInPositionX = Math.abs(prevPosition.x - nextPositions.x);\r\n const differenceInPositionY = Math.abs(prevPosition.y - nextPositions.y);\r\n const sensitivity = 10;\r\n\r\n if (differenceInPositionX > sensitivity) movingDirection = ORIENTATIONS.X;\r\n\r\n if (differenceInPositionY > sensitivity && allowSpinY) movingDirection = ORIENTATIONS.Y;\r\n\r\n return movingDirection;\r\n};\r\n","export const getItemSkipped = (currentPosition, movementStart, speedFactor) => {\r\n const itemsSkipped = Math.floor(\r\n (currentPosition - movementStart) / speedFactor,\r\n ) || 1;\r\n\r\n return itemsSkipped;\r\n};\r\n","export const createCanvas = (innerBox) => {\r\n const canvas = document.createElement('canvas');\r\n canvas.style.width = '100%';\r\n canvas.style.fontSize = '0';\r\n innerBox.appendChild(canvas);\r\n\r\n return canvas;\r\n};\r\n","export const createIconsContainer = (innerBox) => {\r\n const iconsContainer = document.createElement('div');\r\n iconsContainer.className = 'cloudimage-360-icons-container';\r\n innerBox.appendChild(iconsContainer);\r\n\r\n return iconsContainer;\r\n};\r\n","export const createInnerBox = (container) => {\r\n const innerBox = document.createElement('div');\r\n innerBox.className = 'cloudimage-360-inner-box';\r\n container.appendChild(innerBox);\r\n\r\n return innerBox;\r\n};\r\n","export const createBoxShadow = (boxShadow, innerBox) => {\r\n const nextBoxShadow = document.createElement('div');\r\n\r\n nextBoxShadow.className = 'cloudimage-360-box-shadow';\r\n nextBoxShadow.style.boxShadow = boxShadow;\r\n innerBox.appendChild(nextBoxShadow);\r\n\r\n return nextBoxShadow;\r\n};\r\n","export const createLoader = (innerBox) => {\r\n const loader = document.createElement('div');\r\n loader.className = 'cloudimage-360-loader';\r\n\r\n innerBox.appendChild(loader);\r\n\r\n return loader;\r\n};\r\n","export const applyStylesToContainer = (container) => {\r\n container.style.position = 'relative';\r\n container.style.width = '100%';\r\n container.style.cursor = 'wait';\r\n container.setAttribute('draggable', 'false');\r\n container.className = `${container.className} initialized`;\r\n};\r\n","export const removeChildFromParent = (parent, child) => {\r\n if (parent && child) {\r\n try {\r\n parent.removeChild(child);\r\n } catch {}\r\n }\r\n}","/* eslint no-plusplus: [\"error\", { \"allowForLoopAfterthoughts\": true }] */\r\n\r\nexport const fillEmptyCoordWithPrevious = (positions, hotspotIndex, coord) => {\r\n const coordIndexes = new Array(hotspotIndex);\r\n\r\n const intialValue = '0%';\r\n\r\n for (let i = coordIndexes.length - 1; i > -1; i--) {\r\n const previousXCoord = positions[i]?.[coord];\r\n\r\n if (previousXCoord) {\r\n return previousXCoord;\r\n }\r\n }\r\n\r\n return intialValue;\r\n};\r\n","import { fillEmptyCoordWithPrevious } from './fill-empty-coord-with-previous';\r\n\r\nexport const prepareHotspotsPositions = (positions) => positions.reduce((accumulate, current, currentIndex) => {\r\n const isIncludesXcoord = !!current?.xCoord;\r\n const isIncludesYcoord = !!current?.yCoord;\r\n\r\n if (!isIncludesXcoord) {\r\n current.xCoord = fillEmptyCoordWithPrevious(positions, currentIndex, 'xCoord');\r\n }\r\n\r\n if (!isIncludesYcoord) {\r\n current.yCoord = fillEmptyCoordWithPrevious(positions, currentIndex, 'yCoord');\r\n }\r\n\r\n accumulate.push(current);\r\n\r\n return accumulate;\r\n}, []);\r\n","export const getHotspotIcon = (anchorId) => {\r\n const hotspotIconSelector = `[data-hotspot-icon-id=${anchorId}]`;\r\n const hotspotIcon = document.querySelector(hotspotIconSelector);\r\n\r\n return hotspotIcon;\r\n};\r\n","export const updateHotspotIconPosition = (container, initialDimensions, icon, xCoord, yCoord) => {\r\n icon.style.visibility = 'visible';\r\n icon.style.opacity = 1;\r\n icon.style.zIndex = 100;\r\n\r\n icon.style.left = `${-icon.offsetWidth / 2}px`;\r\n icon.style.top = `${-icon.offsetHeight / 2}px`;\r\n\r\n const positionXRatio = container.offsetWidth / initialDimensions[0];\r\n const positionYRatio = container.offsetHeight / initialDimensions[1];\r\n\r\n const translateX = `${(positionXRatio * xCoord)}px`;\r\n const translateY = `${(positionYRatio * yCoord)}px`;\r\n\r\n icon.style.transform = `translate3d(${translateX}, ${translateY}, 0)`;\r\n};\r\n","export const hideHotspotIcon = (icon) => {\r\n icon.style.visibility = 'hidden';\r\n icon.style.opacity = 0;\r\n};\r\n","export const getHotspotOriantaion = (orientation) => {\r\n switch (orientation.toLowerCase()) {\r\n case 'x-axis':\r\n return 'x';\r\n\r\n case 'y-axis':\r\n return 'y';\r\n\r\n default:\r\n return 'x';\r\n }\r\n};\r\n","import { prepareHotspotsPositions } from './prepare-hotspots-positions';\r\nimport { getHotspotIcon } from './get-hotspot-icon';\r\nimport { updateHotspotIconPosition } from './update-hotspot-icon-position';\r\nimport { hideHotspotIcon } from './hide-hotspot-icon';\r\nimport { getHotspotOriantaion } from './get-hotspot-orientation';\r\n\r\nexport const updateHotspots = (container, hotspotsProps, activeImageX = 0, activeImageY = 0, movingDirection = 'x-axis') => {\r\n hotspotsProps.forEach((hotspotProps) => {\r\n const { positions, initialDimensions, orientation, variant\r\n } = hotspotProps;\r\n const { anchorId } = variant;\r\n\r\n const hotspotOriantaion = getHotspotOriantaion(movingDirection);\r\n const currentImageIndex = orientation === 'x' ? activeImageX : activeImageY;\r\n\r\n const hotspotsPositions = prepareHotspotsPositions(positions);\r\n\r\n const currentPosition = hotspotsPositions\r\n .find((hotspotPosition) => hotspotPosition.imageIndex === currentImageIndex);\r\n\r\n const hotspotIcon = getHotspotIcon(anchorId);\r\n\r\n if (currentPosition && hotspotOriantaion === orientation) {\r\n const { xCoord = 0, yCoord = 0 } = currentPosition;\r\n\r\n updateHotspotIconPosition(container, initialDimensions, hotspotIcon, xCoord, yCoord);\r\n } else {\r\n hideHotspotIcon(hotspotIcon);\r\n }\r\n });\r\n};\r\n","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","import { isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nexport default function getBoundingClientRect(element, includeScale) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n var rect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (isHTMLElement(element) && includeScale) {\n var offsetHeight = element.offsetHeight;\n var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n // Fallback to 1 in case both values are `0`\n\n if (offsetWidth > 0) {\n scaleX = round(rect.width) / offsetWidth || 1;\n }\n\n if (offsetHeight > 0) {\n scaleY = round(rect.height) / offsetHeight || 1;\n }\n }\n\n return {\n width: rect.width / scaleX,\n height: rect.height / scaleY,\n top: rect.top / scaleY,\n right: rect.right / scaleX,\n bottom: rect.bottom / scaleY,\n left: rect.left / scaleX,\n x: rect.left / scaleX,\n y: rect.top / scaleY\n };\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n var rect = getBoundingClientRect(element);\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export const hidePopup = (popup, isVisible) => {\r\n if (!isVisible) {\r\n popup.removeAttribute('data-show');\r\n popup.removeAttribute('data-cloudimage-360-show');\r\n }\r\n};","import { createCarouselDot } from './create-carousel-dot';\r\nimport { createCarouselImage } from './create-carousel-image';\r\n\r\nexport const createImagesCarousel = (images, popup, container) => {\r\n const imagesCarousel = document.createElement('div');\r\n const carouselDots = document.createElement('div');\r\n\r\n imagesCarousel.className = 'cloudimage-360-images-carousel';\r\n imagesCarousel.style.maxWidth = `${container.offsetWidth}px`;\r\n\r\n carouselDots.className = 'cloudimage-360-carousel-dots';\r\n\r\n images.forEach((image, imageIndex) => {\r\n const carouselImage = createCarouselImage(image, imageIndex);\r\n const carouselDot = createCarouselDot(carouselImage, imageIndex, popup);\r\n\r\n carouselDots.appendChild(carouselDot);\r\n imagesCarousel.appendChild(carouselImage);\r\n });\r\n\r\n\r\n return [imagesCarousel, carouselDots];\r\n};\r\n","export const createCarouselImage = (image, imageIndex) => {\r\n const carouselImage = document.createElement('img');\r\n carouselImage.className = 'cloudimage-360-carousel-image';\r\n\r\n carouselImage.setAttribute('src', image.src || '');\r\n carouselImage.setAttribute('alt', image.alt || 'more-info');\r\n\r\n if (!imageIndex) {\r\n carouselImage.setAttribute('data-active-image', '');\r\n carouselImage.className += ' active-image';\r\n }\r\n\r\n return carouselImage;\r\n};\r\n","import { setCurrentSlide } from '../set-current-slide';\r\n\r\nexport const createCarouselDot = (image, imageIndex, popup) => {\r\n const imageDot = document.createElement('button');\r\n\r\n imageDot.className = 'cloudimage-360-carousel-dot';\r\n imageDot.onclick = () => setCurrentSlide(image, imageDot, popup);\r\n\r\n if (!imageIndex) {\r\n imageDot.className += ' active-dot';\r\n imageDot.setAttribute('data-active-dot', '');\r\n }\r\n\r\n return imageDot;\r\n};\r\n","export const setCurrentSlide = (image, imageDot, popup) => {\r\n const activeDotSelector = '[data-active-dot]';\r\n const activeImageSelector = '[data-active-image]';\r\n\r\n const previousActiveDot = popup.querySelector(activeDotSelector);\r\n const previousActiveImage = popup.querySelector(activeImageSelector);\r\n\r\n previousActiveDot.classList.remove('active-dot');\r\n previousActiveDot.removeAttribute('data-active-dot');\r\n\r\n previousActiveImage.classList.remove('active-image');\r\n previousActiveImage.removeAttribute('data-active-image');\r\n\r\n image.className += ' active-image';\r\n image.setAttribute('data-active-image', '');\r\n\r\n imageDot.className += ' active-dot';\r\n imageDot.setAttribute('data-active-dot', '');\r\n};\r\n","import { createImagesCarousel } from './create-images-carousel';\r\nimport { createModalDescription } from './create-modal-description';\r\nimport { createModalTitle } from './create-modal-title';\r\nimport { createReadMoreBtn } from './create-read-more-btn';\r\n\r\nexport const createModalElements = (variant, container, popup) => {\r\n const {\r\n images,\r\n title,\r\n description,\r\n moreDetailsUrl,\r\n moreDetailsTitle = 'Read more'\r\n } = variant;\r\n\r\n const modalWrapper = document.createElement('div');\r\n modalWrapper.className = 'cloudimage-360-modal-wrapper';\r\n\r\n if (images) {\r\n const imagesCarouselWrapper = document.createElement('div');\r\n const [imagesCarousel, carouselDots] = createImagesCarousel(images, popup, container);\r\n\r\n imagesCarouselWrapper.appendChild(imagesCarousel);\r\n\r\n if (images.length > 1) {\r\n imagesCarouselWrapper.appendChild(carouselDots);\r\n }\r\n\r\n modalWrapper.appendChild(imagesCarouselWrapper);\r\n imagesCarouselWrapper.className = 'cloudimage-360-images-carousel-wrapper';\r\n }\r\n\r\n if (title) {\r\n const modalTitle = createModalTitle(title);\r\n\r\n modalWrapper.appendChild(modalTitle);\r\n }\r\n\r\n if (description) {\r\n const modalDescription = createModalDescription(description);\r\n\r\n modalWrapper.appendChild(modalDescription);\r\n }\r\n\r\n if (moreDetailsUrl) {\r\n const readMoreBtn = createReadMoreBtn(moreDetailsUrl, moreDetailsTitle);\r\n\r\n modalWrapper.appendChild(readMoreBtn);\r\n }\r\n\r\n popup.appendChild(modalWrapper);\r\n};\r\n","export const createModalTitle = (title) => {\r\n const modalTitle = document.createElement('h4');\r\n\r\n modalTitle.innerText = title;\r\n modalTitle.className = 'cloudimage-360-modal-title';\r\n\r\n return modalTitle;\r\n};\r\n","export const createModalDescription = (description) => {\r\n const modalDescription = document.createElement('p');\r\n\r\n modalDescription.innerText = description;\r\n modalDescription.className = 'cloudimage-360-modal-description';\r\n\r\n return modalDescription;\r\n};\r\n","export const createReadMoreBtn = (moreDetailsUrl, moreDetailsTitle) => {\r\n const readMoreBtn = document.createElement('a');\r\n\r\n readMoreBtn.href = moreDetailsUrl;\r\n readMoreBtn.innerText = moreDetailsTitle;\r\n\r\n readMoreBtn.className = 'cloudimage-360-modal-more-details';\r\n readMoreBtn.target = '_blank';\r\n\r\n return readMoreBtn;\r\n}","import { createHotspotPopupLink } from './create-hotspot-popup-link';\r\nimport { getPopupNode } from '../get-popup-node';\r\nimport { createPopupArrow } from './create-popup-arrow';\r\nimport { createModalElements } from './create-model-elements';\r\n\r\nexport const createPopup = (container, hotspotConfig, popupProps) => {\r\n const { variant } = hotspotConfig;\r\n const { popupSelector, arrow } = popupProps;\r\n const { url, images, title, anchorId, description, moreDetailsUrl } = variant;\r\n\r\n const popup = document.createElement('div');\r\n\r\n popup.className = `cloudimage-360-hotspot-popup ${popupSelector}`;\r\n popup.setAttribute('data-hotspot-popup-id', anchorId);\r\n popup.setAttribute('data-cloudimage-360-hotspot', '');\r\n\r\n popup.style.minHeight = 16;\r\n popup.style.minWidth = 16;\r\n popup.style.cursor = 'default';\r\n\r\n popup.onclick = (e) => e.stopPropagation();\r\n\r\n if (typeof variant === 'object' && images || description || moreDetailsUrl || (title && !url)) {\r\n createModalElements(variant, container, popup);\r\n } else if (url) {\r\n const hotspotPopupLink = createHotspotPopupLink(variant);\r\n\r\n popup.appendChild(hotspotPopupLink);\r\n } else if (typeof variant === 'string'){\r\n try {\r\n const popupNode = getPopupNode(variant);\r\n const userPopup = popupNode.cloneNode(true);\r\n\r\n popup.appendChild(userPopup);\r\n popupNode.parentNode.removeChild(popupNode);\r\n } catch {\r\n console.error(`Cloudimage-360: Element with anchorId '${anchorId}' not exist in the DOM`);\r\n }\r\n }\r\n\r\n if (arrow) {\r\n const popupArrow = createPopupArrow();\r\n\r\n popup.appendChild(popupArrow);\r\n }\r\n\r\n container.appendChild(popup);\r\n\r\n return popup;\r\n};\r\n","export const getPopupNode = (popupId) => {\r\n const popupSelector = 'data-cloudimage-360-hotspots';\r\n\r\n const popupNode = document.querySelector(`[${popupSelector}=${popupId}]`);\r\n\r\n return popupNode;\r\n};\r\n","export const createHotspotPopupLink = (variant) => {\r\n const {\r\n url, title, newTab,\r\n } = variant;\r\n\r\n const hyperLink = document.createElement('a');\r\n\r\n hyperLink.href = url;\r\n hyperLink.innerText = title;\r\n\r\n if (newTab) {\r\n hyperLink.target = '_blank';\r\n }\r\n\r\n return hyperLink;\r\n};\r\n","export const createPopupArrow = () => {\r\n const popupArrow = document.createElement('div');\r\n\r\n popupArrow.setAttribute('data-popper-arrow', '');\r\n popupArrow.setAttribute('data-cloudimage-360-hotspot', '');\r\n\r\n popupArrow.className = 'cloudimage-360-popup-arrow';\r\n\r\n return popupArrow;\r\n};\r\n","import { createPopperInstance } from '../create-popper-instace';\r\nimport { createHotspotIcon } from './create-hotspot-icon';\r\nimport { createPopup } from './create-popup';\r\n\r\nexport const createHotspots = (container, hotspotsProps) => {\r\n hotspotsProps.forEach((hotspotProps) => {\r\n const { popupProps } = hotspotProps;\r\n\r\n const popup = createPopup(container, hotspotProps, popupProps);\r\n const popperInstance = createPopperInstance(popup, popupProps, container);\r\n const hotspotIcon = createHotspotIcon(container, hotspotProps, popup, popperInstance);\r\n\r\n popperInstance.state.elements.reference = hotspotIcon;\r\n popperInstance.update();\r\n });\r\n};\r\n","import { createPopper } from '@popperjs/core';\r\n\r\nexport const createPopperInstance = (popper, popupProps, container) => {\r\n const { placement, offset } = popupProps;\r\n\r\n const virtualReference = document.createElement('div');\r\n\r\n const popperInstance = createPopper(virtualReference, popper);\r\n\r\n popperInstance.setOptions({\r\n placement,\r\n modifiers: [\r\n {\r\n name: 'offset',\r\n options: {\r\n offset,\r\n },\r\n },\r\n {\r\n name: 'preventOverflow',\r\n options: {\r\n boundary: container,\r\n },\r\n },\r\n ],\r\n });\r\n\r\n\r\n return popperInstance;\r\n};\r\n","import { hidePopup } from '../attach-events/hide-popup';\r\nimport { showPopup } from '../attach-events/show-popup';\r\nimport { hideHotspotIcon } from '../hide-hotspot-icon';\r\n\r\nexport const createHotspotIcon = (container, hotspotConfig, popup, popperInstance) => {\r\n const { indicatorSelector, variant } = hotspotConfig;\r\n const { url, anchorId } = variant;\r\n const { popupProps: { open = false } } = hotspotConfig;\r\n\r\n let isVisible;\r\n const hotspotIcon = document.createElement('div');\r\n\r\n hotspotIcon.style.position = 'absolute';\r\n\r\n hotspotIcon.className = `cloudimage-360-hotspot-${url ? 'link' : 'custom'}-icon ${indicatorSelector}`;\r\n\r\n hotspotIcon.setAttribute('data-hotspot-icon-id', anchorId);\r\n hotspotIcon.setAttribute('data-cloudimage-360-hotspot', '');\r\n\r\n const popupMouseEnter = () => {\r\n isVisible = true;\r\n };\r\n\r\n const popupMouseLeave = () => {\r\n isVisible = false;\r\n\r\n !open && hidePopup(popup, isVisible);\r\n }\r\n\r\n hotspotIcon.onclick = (e) => e.stopPropagation();\r\n\r\n const showEvents = ['mouseenter', 'touchstart', 'focus'];\r\n const hideEvents = ['mouseleave', 'blur'];\r\n\r\n showEvents.forEach((event) => {\r\n hotspotIcon.addEventListener(event, () => showPopup(popup, popperInstance));\r\n });\r\n\r\n if (!open) {\r\n hideEvents.forEach((event) => {\r\n hotspotIcon.addEventListener(\r\n event,\r\n () => setTimeout(() => hidePopup(popup, isVisible), 160)\r\n );\r\n });\r\n }\r\n\r\n popup.addEventListener('mouseenter', popupMouseEnter);\r\n popup.addEventListener('mouseleave', popupMouseLeave);\r\n\r\n hideHotspotIcon(hotspotIcon);\r\n\r\n container.appendChild(hotspotIcon);\r\n\r\n return hotspotIcon;\r\n};\r\n","export const showPopup = (popup, popperInstance) => {\r\n popup.setAttribute('data-show', '');\r\n popup.setAttribute('data-cloudimage-360-show', '');\r\n\r\n popperInstance.update();\r\n}","import { configsErrorHandler } from './configs-error-handler';\r\nimport { generatePopupConfig } from './generate-popup-config';\r\n\r\nexport const generateHotspotsConfigs = (hotspotsProps) => {\r\n const hotspotsConfigs = hotspotsProps.map((hotspotProps) => {\r\n const {\r\n variant = {},\r\n positions = [],\r\n indicatorSelector = '',\r\n popupProps = {},\r\n orientation = 'x',\r\n initialDimensions = [500, 500],\r\n } = hotspotProps;\r\n\r\n configsErrorHandler(hotspotProps);\r\n\r\n const popupConfig = generatePopupConfig(popupProps);\r\n let anchorId = variant?.anchorId;\r\n\r\n if (!anchorId) {\r\n const uniqueID = Math.floor(Math.random() * 10000);\r\n anchorId = `cloudimage-360-${uniqueID}`\r\n }\r\n\r\n const hotspotConfig = {\r\n variant : { ...variant, anchorId },\r\n popupProps: popupConfig,\r\n positions,\r\n indicatorSelector,\r\n initialDimensions,\r\n orientation: orientation.toLowerCase(),\r\n };\r\n\r\n return hotspotConfig;\r\n });\r\n\r\n return hotspotsConfigs;\r\n};\r\n","export const configsErrorHandler = (hotspotProps) => {\r\n const { variant = {} } = hotspotProps;\r\n\r\n const {\r\n url,\r\n title,\r\n anchorId,\r\n images,\r\n description,\r\n moreDetailsUrl\r\n } = variant;\r\n\r\n if (url && !title) {\r\n console.error('Cloudimage-360: Hotspot config with variant link must have title for the link');\r\n }\r\n\r\n if (!title && !url && !anchorId && !images && !description && !moreDetailsUrl) {\r\n console.error('Cloudimage-360: Hotspot config with custom variant must provide anchorId');\r\n }\r\n};\r\n","export const generatePopupConfig = (popupProps) => {\r\n const {\r\n popupSelector = '',\r\n arrow = true,\r\n offset = [0, 10],\r\n placement = 'auto',\r\n open = false,\r\n } = popupProps;\r\n\r\n\r\n const popupConfig = {\r\n popupSelector,\r\n arrow,\r\n offset,\r\n placement,\r\n open,\r\n };\r\n\r\n return popupConfig;\r\n};\r\n","export const isMouseOnHotspot = () => {\r\n const hotspotElementsSelector = '[data-cloudimage-360-show]';\r\n\r\n const hostpotElements = document.querySelectorAll(hotspotElementsSelector);\r\n\r\n return !!hostpotElements.length;\r\n};\r\n","import { isTrue } from \"../../ci360.utils\";\r\nimport { getHotspotIcon } from \"./get-hotspot-icon\";\r\n\r\nexport const togglePopupEvents = (hotspotsProps, event, isMouseDown) => {\r\n const iClickOnHotspotIcon = event && isTrue(event.target, 'data-cloudimage-360-hotspot');\r\n\r\n if (iClickOnHotspotIcon) return;\r\n\r\n hotspotsProps.forEach((hotspotProps) => {\r\n const { variant } = hotspotProps;\r\n const { anchorId } = variant;\r\n\r\n const hotspotIcon = getHotspotIcon(anchorId);\r\n\r\n hotspotIcon.style.pointerEvents = isMouseDown ? 'none' : 'all';\r\n });\r\n}\r\n","import {\r\n get360ViewProps,\r\n setView360Icon,\r\n} from './ci360.utils';\r\nimport {\r\n ORIENTATIONS,\r\n AUTOPLAY_BEHAVIOR,\r\n} from './constants/';\r\nimport './static/css/style.css';\r\nimport './static/css/hotspots.css';\r\nimport {\r\n generateImagesPath,\r\n preloadImages,\r\n preloadOriginalImages,\r\n create360ViewIcon,\r\n createCloseFullscreenIcon,\r\n createFullscreenIcon,\r\n createMagnifierIcon,\r\n createLoader,\r\n createInnerBox,\r\n createIconsContainer,\r\n createCanvas,\r\n create360ViewCircleIcon,\r\n createFullscreenModal,\r\n contain,\r\n getCurrentOriginalImage,\r\n magnify,\r\n createBoxShadow,\r\n getSpeedFactor,\r\n isCompletedOneCycle,\r\n getMovingDirection,\r\n applyStylesToContainer,\r\n initControls,\r\n addClass,\r\n removeClass,\r\n getItemSkipped,\r\n loop,\r\n generateZoomInSteps,\r\n generateZoomOutSteps,\r\n updateHotspots,\r\n createHotspots,\r\n generateHotspotsConfigs,\r\n isMouseOnHotspot,\r\n hideHotspotsIcons,\r\n isPropsChangeRequireReload,\r\n getImageAspectRatio,\r\n removeChildFromParent,\r\n initLazyload,\r\n } from './utils';\r\nimport { togglePopupEvents } from './utils/hotspots/toggle-popup-events';\r\n\r\n class CI360Viewer {\r\n constructor(container, fullscreen, hotspotsConfigs) {\r\n this.container = container;\r\n this.movementStart = { x: 0, y: 0 };\r\n this.isStartSpin = false;\r\n this.movingDirection = ORIENTATIONS.CENTER;\r\n this.isClicked = false;\r\n this.loadedImagesX = 0;\r\n this.loadedImagesY = 0;\r\n this.imagesLoaded = false;\r\n this.reversed = false;\r\n this.fullscreenView = !!fullscreen;\r\n this.imagesX = [];\r\n this.imagesY = [];\r\n this.originalImagesX = [];\r\n this.originalImagesY = [];\r\n this.resizedImagesX = [];\r\n this.resizedImagesY = [];\r\n this.devicePixelRatio = Math.round(window.devicePixelRatio || 1);\r\n this.isMobile = !!('ontouchstart' in window || navigator.msMaxTouchPoints);\r\n this.id = container.id;\r\n this.hotspotsConfigs = hotspotsConfigs && generateHotspotsConfigs(hotspotsConfigs);\r\n this.isMagnifyOpen = false;\r\n this.isDragged = false;\r\n this.startPointerZoom = false;\r\n this.zoomIntensity = 0;\r\n this.mouseTracked = false;\r\n this.intialPositions = { x: 0, y: 0 };\r\n this.pointerCurrentPosition = { x: 0, y: 0 };\r\n this.isStartedLoadOriginalImages = false;\r\n this.init(container);\r\n }\r\n\r\n isReady() {\r\n const loadedXImages = this.imagesX.filter(image => image);\r\n const loadedYImages = this.imagesY.filter(image => image);\r\n\r\n const totalAmount = this.amountX + this.amountY;\r\n\r\n return loadedXImages.length + loadedYImages.length === totalAmount;\r\n }\r\n\r\n mouseDown(event) {\r\n if (!this.imagesLoaded) return;\r\n\r\n const isMouseOnHotspotElement = isMouseOnHotspot();\r\n const { pageX, pageY } = event;\r\n\r\n this.hideInitialIcons();\r\n\r\n if (this.autoplay || this.loopTimeoutId) {\r\n this.stop();\r\n this.autoplay = false;\r\n this.isZoomReady = true;\r\n }\r\n\r\n this.intialPositions = { x: pageX, y: pageY };\r\n this.movementStart = { x: pageX, y: pageY };\r\n this.isClicked = true;\r\n this.isDragged = false;\r\n\r\n if (this.hotspotsConfigs) {\r\n togglePopupEvents(this.hotspotsConfigs, event, true);\r\n }\r\n\r\n if (isMouseOnHotspotElement) {\r\n this.isClicked = false;\r\n }\r\n\r\n if (this.hotspotsConfigs) {\r\n updateHotspots(\r\n this.container,\r\n this.hotspotsConfigs,\r\n this.activeImageX,\r\n this.activeImageY,\r\n this.movingDirection\r\n );\r\n }\r\n }\r\n\r\n mouseUp() {\r\n if (!this.imagesLoaded || !this.isClicked) return;\r\n\r\n this.movementStart = { x: 0, y: 0 };\r\n this.isStartSpin = false;\r\n this.isClicked = false;\r\n\r\n if (this.bottomCircle && !this.mouseTracked) {\r\n this.show360ViewCircleIcon();\r\n }\r\n\r\n if (this.hotspotsConfigs) {\r\n togglePopupEvents(this.hotspotsConfigs);\r\n }\r\n\r\n if (this.pointerZoom && !this.fullscreenView) {\r\n setTimeout(() => {\r\n this.isZoomReady = true;\r\n }, 50);\r\n\r\n if (this.mouseTracked) {\r\n this.container.style.cursor = 'zoom-out';\r\n } else {\r\n this.container.style.cursor = 'zoom-in';\r\n }\r\n } else {\r\n this.container.style.cursor = 'grab';\r\n }\r\n }\r\n\r\n mouseClick(event) {\r\n if (!this.pointerZoom || this.fullscreenView) return;\r\n\r\n this.setCursorPosition(event);\r\n this.hideInitialIcons();\r\n\r\n if (!this.isStartedLoadOriginalImages && !this.isDragged && this.isZoomReady) {\r\n this.prepareOriginalImages(event);\r\n }\r\n\r\n if (this.isAllOriginalImagesLoaded && !this.isDragged && this.isZoomReady) {\r\n this.togglePointerZoom(event);\r\n };\r\n }\r\n\r\n mouseMove(event) {\r\n if (!this.imagesLoaded) return;\r\n\r\n const { pageX, pageY } = event;\r\n\r\n if (this.mouseTracked) {\r\n this.setCursorPosition(event);\r\n\r\n if (!this.isClicked) {\r\n this.update();\r\n }\r\n }\r\n\r\n if (this.isClicked) {\r\n const nextPositions = { x: pageX, y: pageY };\r\n\r\n this.container.style.cursor = 'grabbing';\r\n this.isDragged = true;\r\n this.movingDirection = getMovingDirection(\r\n this.isStartSpin,\r\n this.allowSpinY,\r\n this.intialPositions,\r\n nextPositions,\r\n this.movingDirection\r\n );\r\n\r\n this.onMoveHandler(event);\r\n }\r\n }\r\n\r\n mouseLeave() {\r\n if (!this.imagesLoaded) return;\r\n\r\n if (this.pointerZoom && this.mouseTracked) {\r\n this.togglePointerZoom();\r\n }\r\n\r\n if (this.isMagnifyOpen) {\r\n this.closeMagnifier();\r\n }\r\n }\r\n\r\n togglePointerZoom() {\r\n if (this.autoplay || this.loopTimeoutId) {\r\n this.stop();\r\n this.autoplay = false;\r\n }\r\n\r\n if (this.mouseTracked) {\r\n const zoomSteps = generateZoomOutSteps(this.pointerZoom);\r\n this.container.style.cursor = 'zoom-in';\r\n\r\n zoomSteps.forEach((step, index) => {\r\n setTimeout(() => {\r\n this.zoomIntensity = step;\r\n this.update();\r\n\r\n const isReachedIntialScale = index === (zoomSteps.length - 1);\r\n\r\n if (isReachedIntialScale) {\r\n this.mouseTracked = false;\r\n this.update();\r\n };\r\n }, (this.pointerZoom - step) * 200);\r\n })\r\n } else {\r\n if (this.bottomCircle) this.hide360ViewCircleIcon();\r\n\r\n const zoomSteps = generateZoomInSteps(this.pointerZoom);\r\n\r\n if (this.hotspotsConfigs) {\r\n hideHotspotsIcons();\r\n }\r\n\r\n zoomSteps.forEach((step) => {\r\n setTimeout(() => {\r\n this.zoomIntensity = step;\r\n this.update();\r\n }, step * 200);\r\n })\r\n\r\n this.mouseTracked = true;\r\n this.container.style.cursor = 'zoom-out';\r\n }\r\n }\r\n\r\n onOriginalImageLoad(orientation, event, image, index) {\r\n if (orientation === ORIENTATIONS.Y) {\r\n this.originalImagesY[index] = image;\r\n } else {\r\n this.originalImagesX[index] = image;\r\n }\r\n\r\n const loadedOriginalXImages = this.originalImagesX\r\n .filter(image => image);\r\n const loadedOriginalYImages = this.originalImagesY\r\n .filter(image => image);\r\n\r\n const totalAmount = this.amountX + this.amountY;\r\n const totalLoadedImages = loadedOriginalXImages.length + loadedOriginalYImages.length;\r\n\r\n const isAllImagesLoaded = (\r\n loadedOriginalXImages.length + loadedOriginalYImages.length === this.amountX + this.amountY\r\n );\r\n\r\n const percentage = Math.round(totalLoadedImages / totalAmount * 100);\r\n\r\n this.updatePercentageInLoader(percentage);\r\n\r\n if (isAllImagesLoaded) {\r\n this.removeLoader();\r\n this.togglePointerZoom(event);\r\n\r\n this.mouseTracked = true;\r\n this.isAllOriginalImagesLoaded = true;\r\n }\r\n }\r\n\r\n prepareOriginalImages(event) {\r\n const srcX = generateImagesPath(this.srcXConfig);\r\n\r\n this.isStartedLoadOriginalImages = true;\r\n this.loader = createLoader(this.innerBox);\r\n this.container.style.cursor = 'wait';\r\n\r\n preloadOriginalImages(\r\n this.srcXConfig,\r\n srcX,\r\n this.onOriginalImageLoad.bind(this, ORIENTATIONS.X, event)\r\n );\r\n\r\n if (this.allowSpinY) {\r\n const srcY = generateImagesPath(this.srcYConfig);\r\n\r\n preloadOriginalImages(\r\n this.srcYConfig,\r\n srcY,\r\n this.onOriginalImageLoad.bind(this, ORIENTATIONS.Y, event)\r\n );\r\n }\r\n }\r\n\r\n touchStart(event) {\r\n if (!this.imagesLoaded) return;\r\n\r\n const isMouseOnHotspotElement = isMouseOnHotspot();\r\n\r\n this.hideInitialIcons();\r\n\r\n if (this.autoplay || this.loopTimeoutId) {\r\n this.stop();\r\n this.autoplay = false;\r\n }\r\n\r\n this.intialPositions = { x: event.touches[0].clientX, y: event.touches[0].clientY };\r\n this.movementStart = { x: event.touches[0].clientX, y: event.touches[0].clientY };\r\n this.isClicked = true;\r\n\r\n if (isMouseOnHotspotElement) {\r\n this.isClicked = false;\r\n }\r\n }\r\n\r\n touchEnd() {\r\n if (!this.imagesLoaded) return;\r\n\r\n if (this.bottomCircle) this.show360ViewCircleIcon();\r\n\r\n this.movementStart = { x: 0, y: 0 };\r\n this.isStartSpin = false;\r\n this.isClicked = false;\r\n }\r\n\r\n touchMove(event) {\r\n if (!this.isClicked || !this.imagesLoaded) return;\r\n\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n const nextPositions = { x: event.touches[0].clientX, y: event.touches[0].clientY };\r\n\r\n this.movingDirection = getMovingDirection(\r\n this.isStartSpin,\r\n this.allowSpinY,\r\n this.intialPositions,\r\n nextPositions,\r\n this.movingDirection\r\n );\r\n\r\n this.onMoveHandler(event);\r\n }\r\n\r\n keyDownGeneral(event) {\r\n if (!this.imagesLoaded) return;\r\n\r\n if (this.glass) {\r\n this.closeMagnifier();\r\n }\r\n\r\n if (event.keyCode === 27) { //ESC\r\n if (this.mouseTracked) {\r\n this.togglePointerZoom();\r\n }\r\n }\r\n }\r\n\r\n hideInitialIcons() {\r\n if (this.glass) {\r\n this.closeMagnifier();\r\n }\r\n\r\n if (this.view360Icon) {\r\n this.remove360ViewIcon();\r\n }\r\n }\r\n\r\n setCursorPosition(event) {\r\n this.mousePositions = {\r\n x: event.clientX,\r\n y: event.clientY\r\n };\r\n }\r\n\r\n getCursorPositionInCanvas() {\r\n const canvasRect = this.canvas.getBoundingClientRect();\r\n\r\n this.pointerCurrentPosition = {\r\n x: this.mousePositions.x - canvasRect.left,\r\n y: this.mousePositions.y - canvasRect.top\r\n };\r\n\r\n return this.pointerCurrentPosition;\r\n }\r\n\r\n keyDown(event) {\r\n if (!this.imagesLoaded) return;\r\n\r\n if (this.glass) {\r\n this.closeMagnifier();\r\n }\r\n\r\n if (event.keyCode === 37) { // left\r\n this.keysReverse ? this.left() : this.right();\r\n\r\n this.onSpin();\r\n }\r\n\r\n if (event.keyCode === 39) { // right\r\n this.keysReverse ? this.right() : this.left();\r\n\r\n this.onSpin();\r\n }\r\n\r\n if (this.allowSpinY) {\r\n event.preventDefault();\r\n\r\n if (event.keyCode === 38) { // up\r\n this.keysReverse ? this.top() : this.bottom();\r\n\r\n this.onSpin();\r\n }\r\n\r\n if (event.keyCode === 40) { // down\r\n this.keysReverse ? this.bottom() : this.top();\r\n\r\n this.onSpin();\r\n }\r\n }\r\n }\r\n\r\n onSpin() {\r\n if (this.bottomCircle) {\r\n this.hide360ViewCircleIcon();\r\n }\r\n\r\n if (this.view360Icon) {\r\n this.remove360ViewIcon();\r\n }\r\n\r\n if (this.autoplay || this.loopTimeoutId) {\r\n this.stop();\r\n this.autoplay = false;\r\n }\r\n }\r\n\r\n keyUp(event) {\r\n if (!this.imagesLoaded) return;\r\n\r\n if ([37, 39].includes(event.keyCode)) {\r\n this.onFinishSpin();\r\n }\r\n }\r\n\r\n onFinishSpin() {\r\n if (this.bottomCircle) this.show360ViewCircleIcon();\r\n }\r\n\r\n moveActiveIndexUp(itemsSkipped) {\r\n const isReverse = this.controlReverse ? !this.spinReverse : this.spinReverse;\r\n\r\n if (this.stopAtEdges) {\r\n const isReachedTheEdge = this.activeImageX + itemsSkipped >= this.amountX;\r\n\r\n if (isReachedTheEdge) {\r\n this.activeImageX = this.amountX;\r\n\r\n if (isReverse ? this.leftElem : this.rightElem) {\r\n addClass(isReverse ? this.leftElem : this.rightElem, 'not-active');\r\n }\r\n } else {\r\n this.activeImageX += itemsSkipped;\r\n\r\n if (this.rightElem) removeClass(this.rightElem, 'not-active');\r\n\r\n if (this.leftElem) removeClass(this.leftElem, 'not-active');\r\n }\r\n } else {\r\n this.activeImageX = (this.activeImageX + itemsSkipped) % this.amountX || this.amountX;\r\n\r\n if (this.activeImageX === this.amountX && this.allowSpinY) this.spinY = true;\r\n }\r\n }\r\n\r\n moveActiveIndexDown(itemsSkipped) {\r\n const isReverse = this.controlReverse ? !this.spinReverse : this.spinReverse;\r\n\r\n if (this.stopAtEdges) {\r\n const isReachedTheEdge = this.activeImageX - itemsSkipped <= 1;\r\n\r\n if (isReachedTheEdge) {\r\n this.activeImageX = 1;\r\n\r\n if (isReverse ? this.rightElem : this.leftElem) {\r\n addClass(isReverse ? this.rightElem : this.leftElem, 'not-active');\r\n }\r\n } else {\r\n this.activeImageX -= itemsSkipped;\r\n\r\n if (this.leftElem) removeClass(this.leftElem, 'not-active');\r\n\r\n if (this.rightElem) removeClass(this.rightElem, 'not-active');\r\n }\r\n } else {\r\n if (this.activeImageX - itemsSkipped < 1) {\r\n this.activeImageX = this.amountX + (this.activeImageX - itemsSkipped);\r\n this.spinY = true;\r\n } else {\r\n this.activeImageX -= itemsSkipped;\r\n }\r\n }\r\n }\r\n\r\n moveActiveYIndexUp(itemsSkipped) {\r\n const isReverse = this.controlReverse ? !this.spinReverse : this.spinReverse;\r\n\r\n if (this.stopAtEdges) {\r\n const isReachedTheEdge = this.activeImageY + itemsSkipped >= this.amountY;\r\n\r\n if (isReachedTheEdge) {\r\n this.activeImageY = this.amountY;\r\n\r\n if (isReverse ? this.bottomElem : this.topElem) {\r\n addClass(isReverse ? this.bottomElem : this.topElem, 'not-active');\r\n }\r\n } else {\r\n this.activeImageY += itemsSkipped;\r\n\r\n if (this.topElem) removeClass(this.topElem, 'not-active');\r\n\r\n if (this.bottomElem) removeClass(this.bottomElem, 'not-active');\r\n }\r\n } else {\r\n this.activeImageY = (this.activeImageY + itemsSkipped) % this.amountY || this.amountY;\r\n\r\n if (this.activeImageY === this.amountY) this.spinY = false;\r\n }\r\n }\r\n\r\n moveActiveYIndexDown(itemsSkipped) {\r\n const isReverse = this.controlReverse ? !this.spinReverse : this.spinReverse;\r\n\r\n if (this.stopAtEdges) {\r\n const isReachedTheEdge = this.activeImageY - itemsSkipped <= 1;\r\n\r\n if (isReachedTheEdge) {\r\n this.activeImageY = 1;\r\n\r\n if (isReverse ? this.topElem : this.bottomElem) {\r\n addClass(isReverse ? this.topElem : this.bottomElem, 'not-active');\r\n }\r\n } else {\r\n this.activeImageY -= itemsSkipped;\r\n\r\n if (this.bottomElem) removeClass(this.bottomElem, 'not-active');\r\n if (this.topElem) removeClass(this.topElem, 'not-active');\r\n }\r\n } else {\r\n if (this.activeImageY - itemsSkipped < 1) {\r\n this.activeImageY = this.amountY + (this.activeImageY - itemsSkipped);\r\n this.spinY = false;\r\n } else {\r\n this.activeImageY -= itemsSkipped;\r\n }\r\n }\r\n }\r\n\r\n moveRight(currentPositionX) {\r\n const itemsSkippedRight = getItemSkipped(currentPositionX, this.movementStart.x, this.speedFactor);\r\n\r\n this.spinReverse ? this.moveActiveIndexDown(itemsSkippedRight)\r\n : this.moveActiveIndexUp(itemsSkippedRight);\r\n\r\n this.movementStart.x = currentPositionX;\r\n this.activeImageY = 1;\r\n this.update();\r\n }\r\n\r\n moveLeft(currentPositionX) {\r\n const itemsSkippedLeft = getItemSkipped(this.movementStart.x, currentPositionX, this.speedFactor);\r\n\r\n this.spinReverse ? this.moveActiveIndexUp(itemsSkippedLeft)\r\n : this.moveActiveIndexDown(itemsSkippedLeft);\r\n\r\n this.activeImageY = 1;\r\n this.movementStart.x = currentPositionX;\r\n this.update();\r\n }\r\n\r\n moveTop(currentPositionY) {\r\n const itemsSkippedTop = getItemSkipped(this.movementStart.y, currentPositionY, this.speedFactor);\r\n\r\n this.spinReverse ? this.moveActiveYIndexUp(itemsSkippedTop)\r\n : this.moveActiveYIndexDown(itemsSkippedTop);\r\n\r\n this.activeImageX = 1;\r\n this.movementStart.y = currentPositionY;\r\n this.update();\r\n }\r\n\r\n moveBottom(currentPositionY) {\r\n const itemsSkippedBottom = getItemSkipped(currentPositionY, this.movementStart.y, this.speedFactor);\r\n\r\n this.spinReverse ? this.moveActiveYIndexDown(itemsSkippedBottom)\r\n : this.moveActiveYIndexUp(itemsSkippedBottom);\r\n\r\n this.activeImageX = 1;\r\n this.movementStart.y = currentPositionY;\r\n this.update();\r\n }\r\n\r\n onMoveHandler(event) {\r\n const currentPositionX = this.isMobile ? event.touches[0].clientX : event.pageX;\r\n const currentPositionY = this.isMobile ? event.touches[0].clientY : event.pageY;\r\n\r\n const isMoveRight = currentPositionX - this.movementStart.x >= this.speedFactor;\r\n const isMoveLeft = this.movementStart.x - currentPositionX >= this.speedFactor;\r\n const isMoveTop = this.movementStart.y - currentPositionY >= this.speedFactor;\r\n const isMoveBottom = currentPositionY - this.movementStart.y >= this.speedFactor;\r\n\r\n if (this.bottomCircle) this.hide360ViewCircleIcon();\r\n\r\n if (isMoveRight && this.movingDirection === ORIENTATIONS.X) {\r\n this.moveRight(currentPositionX);\r\n\r\n this.isStartSpin = true;\r\n } else if (isMoveLeft && this.movingDirection === ORIENTATIONS.X) {\r\n this.moveLeft(currentPositionX);\r\n\r\n this.isStartSpin = true;\r\n } else if (isMoveTop && this.movingDirection === ORIENTATIONS.Y) {\r\n this.moveTop(currentPositionY);\r\n\r\n this.isStartSpin = true;\r\n } else if (isMoveBottom && this.movingDirection === ORIENTATIONS.Y) {\r\n this.moveBottom(currentPositionY);\r\n\r\n this.isStartSpin = true;\r\n }\r\n }\r\n\r\n left() {\r\n this.movingDirection = ORIENTATIONS.X;\r\n this.activeImageY = this.reversed ? this.amountY : 1;\r\n\r\n this.moveActiveIndexDown(1);\r\n this.update();\r\n }\r\n\r\n right() {\r\n this.movingDirection = ORIENTATIONS.X;\r\n this.activeImageY = this.reversed ? this.amountY : 1;\r\n\r\n this.moveActiveIndexUp(1);\r\n this.update();\r\n }\r\n\r\n top() {\r\n this.movingDirection = ORIENTATIONS.Y;\r\n this.activeImageX = this.reversed ? this.amountX : 1;\r\n\r\n this.moveActiveYIndexUp(1);\r\n this.update();\r\n }\r\n\r\n bottom() {\r\n this.movingDirection = ORIENTATIONS.Y;\r\n this.activeImageX = this.reversed ? this.amountX : 1;\r\n\r\n this.moveActiveYIndexDown(1);\r\n this.update();\r\n }\r\n\r\n loop(reversed) {\r\n const loopTriggers = {\r\n left: this.left.bind(this),\r\n right: this.right.bind(this),\r\n top: this.top.bind(this),\r\n bottom: this.bottom.bind(this)\r\n }\r\n\r\n loop(this.autoplayBehavior, this.spinY, reversed, loopTriggers);\r\n }\r\n\r\n updateContainerAndCanvasSize(image) {\r\n const imageAspectRatio = getImageAspectRatio(image, this.ratio);\r\n\r\n if (this.fullscreenView) {\r\n this.container.width = window.innerWidth * this.devicePixelRatio;\r\n this.container.style.width = window.innerWidth + 'px';\r\n this.container.height = window.innerHeight * this.devicePixelRatio;\r\n this.container.style.height = window.innerHeight + 'px';\r\n this.container.style.maxWidth = 'unset';\r\n\r\n this.canvas.width = window.innerWidth * this.devicePixelRatio;\r\n this.canvas.style.width = window.innerWidth + 'px';\r\n this.canvas.height = window.innerHeight * this.devicePixelRatio;\r\n this.canvas.style.height = window.innerHeight + 'px';\r\n\r\n return;\r\n }\r\n\r\n this.canvas.width = this.container.offsetWidth * this.devicePixelRatio;\r\n this.canvas.style.width = this.container.offsetWidth + 'px';\r\n\r\n this.canvas.height = (this.container.offsetWidth / imageAspectRatio) * this.devicePixelRatio;\r\n this.canvas.style.height = (this.container.offsetWidth / imageAspectRatio) + 'px';\r\n }\r\n\r\n onResizedImageLoad(orientation, image, index) {\r\n if (orientation === ORIENTATIONS.Y) {\r\n this.resizedImagesY[index] = image;\r\n } else {\r\n this.resizedImagesX[index] = image;\r\n }\r\n\r\n const loadedResizedXImages = this.resizedImagesX\r\n .filter(image => image);\r\n const loadedResizedYImages = this.resizedImagesY\r\n .filter(image => image);\r\n\r\n const isAllImagesLoaded = (\r\n loadedResizedXImages.length + loadedResizedYImages.length === this.amountX + this.amountY\r\n );\r\n\r\n if (isAllImagesLoaded) {\r\n this.imagesX = this.resizedImagesX;\r\n this.imagesY = this.resizedImagesY;\r\n\r\n this.update();\r\n }\r\n }\r\n\r\n showImageInfo(ctx) {\r\n ctx.font = `${this.fullscreenView ? 28 : 14}px serif`;\r\n ctx.fillStyle = (this.info === 'white' ? '#FFF' : '#000');\r\n\r\n const imageDimension = `image-dimension: ${this.container.offsetWidth}x${this.container.offsetHeight}px`;\r\n\r\n const currentXImage = 'active-index-x: ' + this.activeImageX;\r\n const currentYImage = 'active-index-y: ' + this.activeImageY;\r\n\r\n const imageIndex = [currentXImage, currentYImage].join(' | ');\r\n\r\n ctx.fillText(imageDimension, 20, this.container.offsetHeight - 35);\r\n ctx.fillText(imageIndex, 20, this.container.offsetHeight - 10);\r\n }\r\n\r\n requestResizedImages() {\r\n if (!this.isReady()) return;\r\n\r\n const responsive = this.ciParams.ciToken;\r\n const firstImage = this.imagesX[0];\r\n\r\n this.update();\r\n if (!responsive || this.container.offsetWidth < firstImage.width * 1.5) return;\r\n\r\n this.speedFactor = getSpeedFactor(this.dragSpeed, this.amountX, this.container.offsetWidth);\r\n const srcX = generateImagesPath(this.srcXConfig);\r\n\r\n\r\n preloadImages(\r\n this.srcXConfig,\r\n srcX,\r\n this.onResizedImageLoad.bind(this, ORIENTATIONS.X),\r\n )\r\n\r\n if (this.allowSpinY) {\r\n const srcY = generateImagesPath(this.srcYConfig);\r\n\r\n preloadImages(\r\n this.srcYConfig,\r\n srcY,\r\n this.onResizedImageLoad.bind(this, ORIENTATIONS.Y),\r\n )\r\n }\r\n }\r\n\r\n update() {\r\n let image = this.imagesX[this.activeImageX - 1];\r\n\r\n if (this.movingDirection === ORIENTATIONS.Y) {\r\n image = this.imagesY[this.activeImageY - 1];\r\n }\r\n\r\n if (!image) return;\r\n\r\n const ctx = this.canvas.getContext(\"2d\");\r\n ctx.scale(this.devicePixelRatio, this.devicePixelRatio);\r\n\r\n this.updateContainerAndCanvasSize(image);\r\n\r\n if (this.fullscreenView) {\r\n const { width, height, offsetX, offsetY } =\r\n contain(this.canvas.width, this.canvas.height, image.width, image.height);\r\n\r\n ctx.drawImage(image, offsetX, offsetY, width, height);\r\n } else {\r\n if (this.mouseTracked) {\r\n this.updateImageScale(ctx);\r\n } else {\r\n if (this.hotspotsConfigs && !this.autoplay) {\r\n updateHotspots(\r\n this.container,\r\n this.hotspotsConfigs,\r\n this.activeImageX,\r\n this.activeImageY,\r\n this.movingDirection,\r\n this.isClicked\r\n );\r\n }\r\n\r\n ctx.drawImage(image, 0, 0, this.canvas.width, this.canvas.height);\r\n }\r\n }\r\n\r\n if (this.info) {\r\n this.showImageInfo(ctx);\r\n }\r\n }\r\n\r\n updateImageScale(ctx) {\r\n let image = this.originalImagesX[this.activeImageX - 1];\r\n\r\n if (this.movingDirection === ORIENTATIONS.Y) {\r\n image = this.originalImagesY[this.activeImageY - 1];\r\n }\r\n\r\n const position = this.getCursorPositionInCanvas();\r\n const imageWidth = this.canvas.width;\r\n const imageHeight = this.canvas.height;\r\n\r\n const width = (this.canvas.width * this.zoomIntensity);\r\n const height = (this.canvas.height * this.zoomIntensity);\r\n\r\n const pointX = 0 - ( (position.x / imageWidth) * (width - this.canvas.width) );\r\n const pointY = 0 - ( (position.y / imageHeight) * (height - this.canvas.height) );\r\n\r\n ctx.drawImage(image, pointX, pointY, width, height);\r\n }\r\n\r\n updatePercentageInLoader(percentage) {\r\n if (this.loader) {\r\n this.loader.style.width = percentage + '%';\r\n }\r\n\r\n if (this.view360Icon) {\r\n this.view360Icon.innerText = percentage + '%';\r\n }\r\n }\r\n\r\n onFirstImageLoaded(image) {\r\n this.add360ViewIcon();\r\n\r\n const ctx = this.canvas.getContext(\"2d\");\r\n ctx.scale(this.devicePixelRatio, this.devicePixelRatio);\r\n this.updateContainerAndCanvasSize(image);\r\n\r\n if (this.fullscreenView) {\r\n const { offsetX, offsetY, width, height } =\r\n contain(this.canvas.width, this.canvas.height, image.width, image.height);\r\n\r\n this.offset = { x: offsetX, y: offsetY };\r\n\r\n this.addCloseFullscreenView();\r\n\r\n ctx.drawImage(image, offsetX, offsetY, width, height);\r\n } else {\r\n ctx.drawImage(image, 0, 0, this.canvas.width, this.canvas.height);\r\n }\r\n\r\n if (this.info) {\r\n this.showImageInfo(ctx);\r\n }\r\n\r\n if (this.magnifier) {\r\n this.addMagnifier();\r\n }\r\n\r\n if (this.boxShadow && !this.fullscreenView) {\r\n this.boxShadowEl = createBoxShadow(this.boxShadow, this.innerBox);\r\n }\r\n\r\n if (this.bottomCircle && !this.fullscreenView) {\r\n this.add360ViewCircleIcon();\r\n }\r\n\r\n if (this.fullscreen && !this.fullscreenView) {\r\n this.addFullscreenIcon();\r\n }\r\n\r\n }\r\n\r\n onAllImagesLoaded() {\r\n this.removeLoader();\r\n this.imagesLoaded = true;\r\n\r\n if (this.autoplay && this.pointerZoom) {\r\n this.container.style.cursor = 'zoom-in';\r\n } else {\r\n this.container.style.cursor = 'grab';\r\n }\r\n\r\n this.speedFactor = getSpeedFactor(this.dragSpeed, this.amountX, this.container.offsetWidth);\r\n\r\n if (this.autoplay) {\r\n this.play();\r\n }\r\n\r\n if (this.disableDrag) {\r\n this.container.style.cursor = 'default';\r\n }\r\n\r\n if (this.view360Icon) {\r\n if (this.hide360Logo) return this.remove360ViewIcon();\r\n\r\n this.view360Icon.innerText = '';\r\n //TODO [deprecated]: remove setView360Icon in the upcoming versions\r\n if (this.logoSrc) setView360Icon(this.view360Icon, this.logoSrc);\r\n }\r\n\r\n this.initControls();\r\n }\r\n\r\n magnify(event) {\r\n event.stopPropagation();\r\n\r\n if (this.mouseTracked) this.togglePointerZoom();\r\n\r\n const currentOriginalImage = getCurrentOriginalImage(\r\n this.movingDirection,\r\n this.imagesX,\r\n this.imagesY,\r\n this.activeImageX,\r\n this.activeImageY\r\n );\r\n\r\n this.isMagnifyOpen = true;\r\n\r\n currentOriginalImage.onload = () => {\r\n if (this.glass) {\r\n this.glass.style.cursor = 'none';\r\n }\r\n };\r\n\r\n this.glass = document.createElement('div');\r\n this.container.style.overflow = 'hidden';\r\n\r\n magnify(\r\n this.container,\r\n this.offset,\r\n currentOriginalImage,\r\n this.glass,\r\n this.magnifier || 3\r\n );\r\n }\r\n\r\n closeMagnifier() {\r\n if (!this.glass) return;\r\n\r\n this.container.style.overflow = 'visible';\r\n this.container.removeChild(this.glass);\r\n this.glass = null;\r\n this.isMagnifyOpen = false;\r\n }\r\n\r\n openFullscreenModal(event) {\r\n event.stopPropagation();\r\n\r\n if (this.mouseTracked) this.togglePointerZoom();\r\n\r\n const fullscreenContainer = createFullscreenModal(this.container);\r\n\r\n new CI360Viewer(fullscreenContainer, true, this.hotspotsConfigs);\r\n }\r\n\r\n setFullscreenEvents(_, event) {\r\n if (event.type === 'click') return this.closeFullscreenModal(event);\r\n if (event.key === 'Escape' && this.container.parentNode.parentNode === document.body) {\r\n this.closeFullscreenModalOnEsc(event);\r\n }\r\n }\r\n\r\n closeFullscreenModalOnEsc(event) {\r\n this.closeFullscreenModal(event);\r\n }\r\n\r\n play() {\r\n if (this.bottomCircle) this.hide360ViewCircleIcon();\r\n\r\n this.remove360ViewIcon();\r\n\r\n this.loopTimeoutId = window.setInterval(() => {\r\n this.loop(this.reversed);\r\n\r\n const isPlayedOnce = isCompletedOneCycle(\r\n this.autoplayBehavior,\r\n this.activeImageX,\r\n this.activeImageY,\r\n this.amountX,\r\n this.amountY,\r\n this.reversed\r\n );\r\n\r\n if (this.playOnce && isPlayedOnce) {\r\n window.clearTimeout(this.loopTimeoutId);\r\n this.autoplay = false;\r\n\r\n if (this.hotspotsConfigs) {\r\n updateHotspots(\r\n this.container,\r\n this.hotspotsConfigs,\r\n this.activeImageX,\r\n this.activeImageY,\r\n this.movingDirection,\r\n this.isClicked\r\n );\r\n }\r\n }\r\n }, this.autoplaySpeed);\r\n }\r\n\r\n stop() {\r\n if (this.bottomCircle) this.show360ViewCircleIcon();\r\n\r\n window.clearTimeout(this.loopTimeoutId);\r\n }\r\n\r\n updateView(forceUpdate, viewers) {\r\n let container = this.container;\r\n\r\n const imageProps = get360ViewProps(container);\r\n const srcPropsChanged = isPropsChangeRequireReload(this, imageProps);\r\n const reInitView = srcPropsChanged || forceUpdate;\r\n\r\n if (reInitView) {\r\n const oldElement = this.container;\r\n const viewIndex = viewers.findIndex(view => view.id === this.container.id);\r\n\r\n container.removeChild(this.innerBox);\r\n container = container.cloneNode(true);\r\n\r\n container.className = container.className.replace(' initialized', '');\r\n\r\n oldElement.parentNode.replaceChild(container, oldElement);\r\n\r\n return viewers.splice(viewIndex, 1, new CI360Viewer(container));\r\n }\r\n\r\n container.style.position = 'relative';\r\n container.style.width = '100%';\r\n container.style.cursor = 'default';\r\n container.setAttribute('draggable', 'false');\r\n\r\n this.stop();\r\n this.init(container, true);\r\n }\r\n\r\n destroy() {\r\n stop();\r\n\r\n const oldElement = this.container;\r\n const newElement = oldElement.cloneNode(true);\r\n const innerBox = newElement.querySelector('.cloudimage-360-inner-box');\r\n\r\n newElement.className = newElement.className.replace(' initialized', '');\r\n newElement.style.position = 'relative';\r\n newElement.style.width = '100%';\r\n newElement.style.cursor = 'default';\r\n newElement.setAttribute('draggable', 'false');\r\n newElement.style.minHeight = 'auto';\r\n newElement.removeChild(innerBox);\r\n oldElement.parentNode.replaceChild(newElement, oldElement);\r\n }\r\n\r\n addCloseFullscreenView(event) {\r\n const closeFullscreenIcon = createCloseFullscreenIcon();\r\n\r\n closeFullscreenIcon.onclick = this.setFullscreenEvents.bind(this, event);\r\n window.onkeyup = this.setFullscreenEvents.bind(this, event);\r\n\r\n this.iconsContainer.appendChild(closeFullscreenIcon);\r\n }\r\n\r\n add360ViewIcon() {\r\n this.view360Icon = create360ViewIcon();\r\n this.innerBox.appendChild(this.view360Icon);\r\n }\r\n\r\n addFullscreenIcon() {\r\n this.fullscreenIcon = createFullscreenIcon();\r\n this.fullscreenIcon.onclick = this.openFullscreenModal.bind(this);\r\n\r\n this.iconsContainer.appendChild(this.fullscreenIcon);\r\n }\r\n\r\n showFullscreenIcon() {\r\n if (!this.fullscreenIcon) return;\r\n\r\n this.fullscreenIcon.style.display = 'block';\r\n this.fullscreenIcon.style.pointerEvents = 'auto';\r\n }\r\n\r\n hideFullscreenIcon() {\r\n if (!this.fullscreenIcon) return;\r\n\r\n this.fullscreenIcon.style.display = 'none';\r\n this.fullscreenIcon.style.pointerEvents = 'none';\r\n }\r\n\r\n addMagnifier() {\r\n this.magnifierIcon = createMagnifierIcon();\r\n this.magnifierIcon.onclick = this.magnify.bind(this);\r\n\r\n this.iconsContainer.appendChild(this.magnifierIcon);\r\n }\r\n\r\n enableMagnifierIcon() {\r\n if (!this.magnifierIcon) return;\r\n\r\n this.magnifierIcon.style.display = 'block';\r\n this.magnifierIcon.style.pointerEvents = 'auto';\r\n }\r\n\r\n disableMagnifierIcon() {\r\n if (!this.magnifierIcon) return;\r\n\r\n this.magnifierIcon.style.display = 'none';\r\n this.magnifierIcon.style.pointerEvents = 'none';\r\n }\r\n\r\n closeFullscreenModal(event) {\r\n event.stopPropagation();\r\n document.body.removeChild(this.container.parentNode);\r\n window.document.body.style.overflow = 'visible';\r\n }\r\n\r\n add360ViewCircleIcon() {\r\n this.view360CircleIcon = create360ViewCircleIcon(this.bottomCircleOffset);\r\n this.innerBox.appendChild(this.view360CircleIcon);\r\n }\r\n\r\n show360ViewCircleIcon() {\r\n if (!this.view360CircleIcon) return;\r\n\r\n this.view360CircleIcon.style.opacity = '1';\r\n }\r\n\r\n hide360ViewCircleIcon() {\r\n if (!this.view360CircleIcon) return;\r\n\r\n this.view360CircleIcon.style.opacity = '0';\r\n }\r\n\r\n remove360ViewCircleIcon() {\r\n if (!this.view360CircleIcon) return;\r\n\r\n this.innerBox.removeChild(this.view360CircleIcon);\r\n this.view360CircleIcon = null;\r\n }\r\n\r\n removeLoader() {\r\n if (!this.loader) return;\r\n\r\n this.innerBox.removeChild(this.loader);\r\n this.loader = null;\r\n }\r\n\r\n remove360ViewIcon() {\r\n if (!this.view360Icon) return;\r\n\r\n try {\r\n this.innerBox.removeChild(this.view360Icon);\r\n this.view360Icon = null;\r\n } catch {}\r\n }\r\n\r\n initControls() {\r\n const onLeftStart = (event) => {\r\n event.stopPropagation();\r\n\r\n this.onSpin();\r\n this.left();\r\n\r\n this.loopTimeoutId = window.setInterval(this.left.bind(this), this.autoplaySpeed);\r\n };\r\n\r\n const onRightStart = (event) => {\r\n event.stopPropagation();\r\n\r\n this.onSpin();\r\n this.right();\r\n\r\n this.loopTimeoutId = window.setInterval(this.right.bind(this), this.autoplaySpeed);\r\n };\r\n\r\n const onTopStart = (event) => {\r\n event.stopPropagation();\r\n\r\n this.onSpin();\r\n this.top();\r\n\r\n this.loopTimeoutId = window.setInterval(this.top.bind(this), this.autoplaySpeed);\r\n };\r\n\r\n const onBottomStart = (event) => {\r\n event.stopPropagation();\r\n\r\n this.onSpin();\r\n this.bottom();\r\n\r\n this.loopTimeoutId = window.setInterval(this.bottom.bind(this), this.autoplaySpeed);\r\n }\r\n\r\n const onEventEnd = () => {\r\n this.onFinishSpin();\r\n window.clearTimeout(this.loopTimeoutId);\r\n };\r\n\r\n const controlsConfig = {\r\n container: this.container,\r\n controlReverse: this.controlReverse,\r\n spinReverse: this.spinReverse,\r\n stopAtEdges: this.stopAtEdges\r\n }\r\n\r\n const controlsTriggers = {\r\n onLeftStart,\r\n onRightStart,\r\n onTopStart,\r\n onBottomStart,\r\n onEventEnd,\r\n };\r\n\r\n const controlsElements = initControls(controlsConfig, controlsTriggers);\r\n\r\n this.topElem = controlsElements.top;\r\n this.bottomElem = controlsElements.bottom;\r\n this.leftElem = controlsElements.left;\r\n this.rightElem = controlsElements.right;\r\n }\r\n\r\n attachEvents(draggable, swipeable, keys) {\r\n window.addEventListener('resize', this.requestResizedImages.bind(this));\r\n\r\n if ( (draggable) && (!this.disableDrag) ) {\r\n this.container.addEventListener('click', this.mouseClick.bind(this));\r\n this.container.addEventListener('mousedown', this.mouseDown.bind(this));\r\n this.container.addEventListener('mousemove', this.mouseMove.bind(this));\r\n this.container.addEventListener('mouseleave', this.mouseLeave.bind(this));\r\n\r\n document.addEventListener('mouseup', this.mouseUp.bind(this));\r\n }\r\n\r\n if ( (swipeable) && (!this.disableDrag) ) {\r\n this.container.addEventListener('touchstart', this.touchStart.bind(this), { passive: true });\r\n this.container.addEventListener('touchend', this.touchEnd.bind(this));\r\n this.container.addEventListener('touchmove', this.touchMove.bind(this));\r\n }\r\n\r\n if (keys) {\r\n document.addEventListener('keydown', this.keyDown.bind(this));\r\n document.addEventListener('keyup', this.keyUp.bind(this));\r\n }\r\n\r\n document.addEventListener('keydown', this.keyDownGeneral.bind(this));\r\n }\r\n\r\n init(container, update = false) {\r\n let {\r\n folder, apiVersion,filenameX, filenameY, imageListX, imageListY, indexZeroBase, amountX, amountY, draggable = true, swipeable = true, keys, keysReverse, bottomCircle, bottomCircleOffset, boxShadow,\r\n autoplay, autoplayBehavior, playOnce, speed, autoplayReverse, disableDrag = true, fullscreen, magnifier, ciToken, ciFilters, ciTransformation, lazyload, lazySelector, spinReverse, dragSpeed, stopAtEdges, controlReverse, hide360Logo, logoSrc, pointerZoom, ratio, imageInfo = 'black'\r\n } = get360ViewProps(container);\r\n\r\n const ciParams = { ciToken, ciFilters, ciTransformation };\r\n\r\n this.folder = folder;\r\n this.apiVersion = apiVersion;\r\n this.filenameX = filenameX;\r\n this.filenameY = filenameY;\r\n this.imageListX = imageListX;\r\n this.imageListY = imageListY;\r\n this.indexZeroBase = indexZeroBase;\r\n this.amountX = imageListX ? JSON.parse(imageListX).length : amountX;\r\n this.amountY = imageListY ? JSON.parse(imageListY).length : amountY;\r\n this.allowSpinY = (!!this.amountY);\r\n this.activeImageX = autoplayReverse ? this.amountX : 1;\r\n this.activeImageY = autoplayReverse ? this.amountY : 1;\r\n this.spinY = (autoplayBehavior === AUTOPLAY_BEHAVIOR.SPIN_YX) ? true : false;\r\n this.bottomCircle = bottomCircle;\r\n this.bottomCircleOffset = bottomCircleOffset;\r\n this.boxShadow = boxShadow;\r\n this.autoplay = autoplay;\r\n this.autoplayBehavior = autoplayBehavior;\r\n this.playOnce = playOnce;\r\n this.speed = speed;\r\n this.reversed = autoplayReverse;\r\n this.disableDrag = disableDrag;\r\n this.fullscreen = fullscreen;\r\n this.magnifier = !this.isMobile && magnifier > 1 ? Math.min(magnifier, 5) : 0;\r\n this.lazySelector = lazySelector;\r\n this.spinReverse = spinReverse;\r\n this.controlReverse = controlReverse;\r\n this.dragSpeed = Math.max(dragSpeed, 50);\r\n this.autoplaySpeed = this.speed * 36 / this.amountX;\r\n this.stopAtEdges = stopAtEdges;\r\n this.hide360Logo = hide360Logo;\r\n this.logoSrc = logoSrc;\r\n this.ciParams = ciParams;\r\n this.apiVersion = apiVersion;\r\n this.pointerZoom = pointerZoom > 1 ? Math.min(pointerZoom, 3) : 0;\r\n this.keysReverse = keysReverse;\r\n this.info = imageInfo;\r\n this.keys = keys;\r\n this.ratio = ratio && JSON.parse(ratio);\r\n\r\n if (update) {\r\n removeChildFromParent(this.innerBox, this.iconsContainer);\r\n removeChildFromParent(this.innerBox, this.boxShadowEl);\r\n removeChildFromParent(this.innerBox, this.view360Icon);\r\n this.remove360ViewCircleIcon();\r\n\r\n this.iconsContainer = createIconsContainer(this.innerBox);\r\n\r\n if (!this.hide360Logo && !this.lazyload && this.logoSrc) {\r\n this.add360ViewIcon();\r\n setView360Icon(this.view360Icon, this.logoSrc);\r\n }\r\n\r\n if (this.magnifier) {\r\n this.addMagnifier();\r\n }\r\n\r\n if (this.bottomCircle && !this.fullscreenView) {\r\n this.add360ViewCircleIcon();\r\n }\r\n\r\n if (this.fullscreen && !this.fullscreenView) {\r\n this.addFullscreenIcon();\r\n }\r\n\r\n if (this.boxShadow && !this.fullscreenView) {\r\n this.boxShadowEl = createBoxShadow(this.boxShadow, this.innerBox);\r\n }\r\n\r\n return this.onAllImagesLoaded();\r\n }\r\n\r\n this.innerBox = createInnerBox(this.container);\r\n this.iconsContainer = createIconsContainer(this.innerBox);\r\n this.canvas = createCanvas(this.innerBox);\r\n this.loader = createLoader(this.innerBox);\r\n\r\n if (this.hotspotsConfigs && !this.fullscreenView) {\r\n createHotspots(container, this.hotspotsConfigs);\r\n }\r\n\r\n applyStylesToContainer(this.container);\r\n\r\n this.srcXConfig = {\r\n folder,\r\n filename: filenameX,\r\n imageList: imageListX,\r\n container,\r\n innerBox: this.innerBox,\r\n apiVersion,\r\n ciParams,\r\n lazySelector,\r\n amount: this.amountX,\r\n indexZeroBase,\r\n fullscreen: this.fullscreenView,\r\n }\r\n\r\n this.srcYConfig = {\r\n ...this.srcXConfig,\r\n filename: filenameY,\r\n orientation: ORIENTATIONS.Y,\r\n imageList: imageListY,\r\n amount: this.amountY\r\n }\r\n\r\n const srcX = generateImagesPath(this.srcXConfig);\r\n\r\n const onImageLoad = (orientation, image, index) => {\r\n if (orientation !== ORIENTATIONS.Y) {\r\n this.imagesX[index] = image;\r\n } else {\r\n this.imagesY[index] = image;\r\n }\r\n\r\n const loadedXImages = this.imagesX.filter(image => image);\r\n const loadedYImages = this.imagesY.filter(image => image);\r\n\r\n const totalAmount = this.amountX + this.amountY;\r\n const totalLoadedImages = loadedXImages.length + loadedYImages.length;\r\n\r\n const isFirstImageLoaded = !index && orientation !== ORIENTATIONS.Y;\r\n const percentage = Math.round(totalLoadedImages / totalAmount * 100);\r\n\r\n this.updatePercentageInLoader(percentage);\r\n\r\n if (isFirstImageLoaded) {\r\n this.onFirstImageLoaded(image);\r\n }\r\n\r\n if (this.isReady()) {\r\n this.onAllImagesLoaded();\r\n }\r\n }\r\n\r\n const loadImages = () => {\r\n preloadImages(this.srcXConfig, srcX, (\r\n onImageLoad.bind(this, ORIENTATIONS.X)\r\n ));\r\n\r\n if (this.allowSpinY) {\r\n const srcY = generateImagesPath(this.srcYConfig);\r\n\r\n preloadImages(\r\n this.srcYConfig,\r\n srcY,\r\n onImageLoad.bind(this, ORIENTATIONS.Y)\r\n );\r\n }\r\n }\r\n\r\n if (lazyload) {\r\n const onFirstImageLoad = (image) => {\r\n this.innerBox.removeChild(image);\r\n\r\n loadImages();\r\n }\r\n\r\n initLazyload(srcX, this.srcXConfig, onFirstImageLoad);\r\n } else {\r\n loadImages();\r\n }\r\n\r\n this.attachEvents(draggable, swipeable, keys);\r\n }\r\n}\r\n\r\nexport default CI360Viewer;\r\n","export const generateZoomOutSteps = (zoomIntenisty) => {\r\n const transitionStepsFactor = 20;\r\n\r\n return Array.from(Array(transitionStepsFactor))\r\n .reduce((acc, _, index) => {\r\n const previousIndex = index - 1;\r\n const previousValue = previousIndex < 0 ? zoomIntenisty : acc[index - 1];\r\n\r\n const step = previousValue - ((zoomIntenisty - 1) / transitionStepsFactor);\r\n const stepFixedValue = +step.toFixed(2);\r\n\r\n (acc || []).push(stepFixedValue);\r\n\r\n return acc;\r\n }, []);\r\n};\r\n","export const generateZoomInSteps = (zoomIntenisty) => {\r\n const transitionStepsFactor = 20;\r\n\r\n return Array.from(Array(transitionStepsFactor))\r\n .reduce((acc, _, index) => {\r\n const previousIndex = index - 1;\r\n const previousValue = previousIndex < 0 ? 1 : acc[index - 1];\r\n\r\n const step = (previousValue) + ((zoomIntenisty - 1) / (transitionStepsFactor));\r\n const stepFixedValue = +step.toFixed(2);\r\n\r\n (acc || []).push(stepFixedValue);\r\n\r\n return acc;\r\n }, []);\r\n};\r\n","import { hideHotspotIcon } from './hide-hotspot-icon';\r\n\r\nexport const hideHotspotsIcons = () => {\r\n const hotspotIconSelector = '[data-hotspot-icon-id]';\r\n const hotspotIcons = document.querySelectorAll(hotspotIconSelector) || [];\r\n\r\n hotspotIcons.forEach((hotspotIcon) => {\r\n hideHotspotIcon(hotspotIcon);\r\n });\r\n};\r\n","import { AUTOPLAY_BEHAVIOR } from '../../constants/auto-play-behavior';\r\n\r\nexport const loop = (autoplayBehavior, spinY, reversed, loopTriggers) => {\r\n const {\r\n bottom, top, left, right,\r\n } = loopTriggers;\r\n\r\n switch (autoplayBehavior) {\r\n case AUTOPLAY_BEHAVIOR.SPIN_Y:\r\n if (reversed) {\r\n bottom();\r\n } else {\r\n top();\r\n }\r\n break;\r\n\r\n case AUTOPLAY_BEHAVIOR.SPIN_XY:\r\n if (spinY) {\r\n if (reversed) {\r\n bottom();\r\n } else {\r\n top();\r\n }\r\n } else if (reversed) {\r\n left();\r\n } else {\r\n right();\r\n }\r\n break;\r\n\r\n case AUTOPLAY_BEHAVIOR.SPIN_YX:\r\n if (spinY) {\r\n if (reversed) {\r\n bottom();\r\n } else {\r\n top();\r\n }\r\n } else if (reversed) {\r\n left();\r\n } else {\r\n right();\r\n }\r\n break;\r\n\r\n case AUTOPLAY_BEHAVIOR.SPIN_X:\r\n default:\r\n if (reversed) {\r\n left();\r\n } else {\r\n right();\r\n }\r\n }\r\n};\r\n","export const getImageAspectRatio = (image, providedRatio) => {\r\n try {\r\n let imageAspectRatio = image.width / image.height;\r\n\r\n if (typeof providedRatio === 'number') {\r\n imageAspectRatio = providedRatio;\r\n }\r\n\r\n if (providedRatio && typeof providedRatio === 'object') {\r\n const mediaQueries = Object.keys(providedRatio)\r\n .sort((a, b) => a - b);\r\n\r\n const activeMedia = mediaQueries.find((mediaQuery) => (\r\n window.innerWidth <= parseInt(mediaQuery, 10)\r\n ));\r\n\r\n if (activeMedia) {\r\n imageAspectRatio = providedRatio[activeMedia];\r\n }\r\n }\r\n\r\n return imageAspectRatio;\r\n } catch {\r\n return 1;\r\n }\r\n}","import { ORIENTATIONS } from '../../constants/orientations';\r\nimport { AND_SYMBOL_REGEX, ORGINAL_SIZE_REGEX } from '../../constants/regex';\r\n\r\nexport const getCurrentOriginalImage = (movingDirection, imagesX, imagesY, activeImageX, activeImageY) => {\r\n const currentImage = new Image();\r\n\r\n const originalImagesXSrcs = imagesX.map((image) => image.src\r\n .replace(ORGINAL_SIZE_REGEX, '')\r\n .replace(AND_SYMBOL_REGEX, '?'));\r\n\r\n const originalImagesYSrcs = imagesY.map((image) => image.src\r\n .replace(ORGINAL_SIZE_REGEX, '')\r\n .replace(AND_SYMBOL_REGEX, '?'));\r\n\r\n currentImage.src = originalImagesXSrcs[activeImageX - 1];\r\n\r\n if (movingDirection === ORIENTATIONS.Y) {\r\n currentImage.src = originalImagesYSrcs[activeImageY - 1];\r\n }\r\n\r\n return currentImage;\r\n};\r\n","import { moveMagnifier } from './move-magnifier';\r\n\r\nexport const magnify = (container, offset, currentImage, glass, zoom) => {\r\n const { x: offsetX = 0, y: offsetY = 0 } = offset || {};\r\n const backgroundSizeX = (container.offsetWidth - (offsetX * 2)) * zoom;\r\n const backgroundSizeY = (container.offsetHeight - (offsetY * 2)) * zoom;\r\n\r\n glass.setAttribute('class', 'cloudimage-360-img-magnifier-glass');\r\n container.prepend(glass);\r\n\r\n glass.style.backgroundImage = `url('${currentImage.src}')`;\r\n glass.style.backgroundSize = `${backgroundSizeX}px ${backgroundSizeY}px`;\r\n\r\n const bw = 3;\r\n const w = glass.offsetWidth / 2;\r\n const h = glass.offsetHeight / 2;\r\n\r\n const containerConfig = {\r\n container, w, h, zoom, bw, offsetX, offsetY,\r\n };\r\n\r\n const MouseMoveHandler = (event) => {\r\n moveMagnifier(event, containerConfig, glass);\r\n };\r\n\r\n const touchHandler = (event) => {\r\n moveMagnifier(event, containerConfig, glass);\r\n };\r\n\r\n glass.addEventListener('mousemove', MouseMoveHandler);\r\n container.addEventListener('mousemove', MouseMoveHandler);\r\n\r\n glass.addEventListener('touchmove', touchHandler, { passive: true });\r\n container.addEventListener('touchmove', touchHandler, { passive: true });\r\n};\r\n","export const createFullscreenModal = (container) => {\r\n const fullscreenModal = document.createElement('div');\r\n\r\n fullscreenModal.className = 'cloudimage-360-fullscreen-modal';\r\n\r\n const fullscreenContainer = container.cloneNode();\r\n\r\n fullscreenContainer.style.height = '100%';\r\n fullscreenContainer.style.maxHeight = '100%';\r\n\r\n fullscreenModal.appendChild(fullscreenContainer);\r\n\r\n window.document.body.style.overflow = 'hidden';\r\n window.document.body.appendChild(fullscreenModal);\r\n\r\n return fullscreenContainer;\r\n};\r\n","import { AUTOPLAY_BEHAVIOR } from '../../constants/auto-play-behavior';\r\n\r\nexport const isCompletedOneCycle = (autoplayBehavior, activeImageX, activeImageY, amountX, amountY, isReversed) => {\r\n switch (autoplayBehavior) {\r\n case AUTOPLAY_BEHAVIOR.SPIN_XY:\r\n case AUTOPLAY_BEHAVIOR.SPIN_Y: {\r\n const isReachedTheEdge = isReversed ? (activeImageY === 1)\r\n : (activeImageY === amountY);\r\n\r\n if (isReachedTheEdge) return true;\r\n\r\n return false;\r\n }\r\n\r\n case AUTOPLAY_BEHAVIOR.SPIN_X:\r\n case AUTOPLAY_BEHAVIOR.SPIN_YX:\r\n default: {\r\n const isReachedTheEdge = isReversed ? (activeImageX === 1)\r\n : (activeImageX === amountX);\r\n\r\n if (isReachedTheEdge) return true;\r\n\r\n return false;\r\n }\r\n }\r\n};\r\n","import { PROPS_REQUIRE_RELOAD } from \"../../constants/props-require-reload\";\r\n\r\nexport const isPropsChangeRequireReload = (currentProps, changedProps) => (\r\n Object.keys(changedProps)\r\n .reduce((acc, current) => {\r\n const isPropChanged = currentProps[current] !== changedProps[current];\r\n const isSrcProp = PROPS_REQUIRE_RELOAD.includes(current);\r\n\r\n if (isSrcProp && isPropChanged) {\r\n acc = true;\r\n }\r\n\r\n return acc;\r\n }, false)\r\n);","export const createCloseFullscreenIcon = () => {\r\n const closeFullscreenIcon = document.createElement('div');\r\n closeFullscreenIcon.className = 'cloudimage-360-close-fullscreen-icon';\r\n\r\n return closeFullscreenIcon;\r\n};\r\n","export const create360ViewIcon = () => {\r\n const view360Icon = document.createElement('div');\r\n\r\n view360Icon.className = 'cloudimage-360-view-360-icon';\r\n view360Icon.innerText = '0%';\r\n\r\n return view360Icon;\r\n};\r\n","export const createFullscreenIcon = () => {\r\n const fullscreenIcon = document.createElement('div');\r\n\r\n fullscreenIcon.className = 'cloudimage-360-fullscreen-icon';\r\n\r\n return fullscreenIcon;\r\n};\r\n","export const createMagnifierIcon = () => {\r\n const magnifyIcon = document.createElement('div');\r\n\r\n magnifyIcon.className = 'cloudimage-360-magnifier-icon';\r\n\r\n return magnifyIcon;\r\n};\r\n","export const create360ViewCircleIcon = (circleOffset) => {\r\n const view360CircleIcon = new Image();\r\n\r\n view360CircleIcon.src = 'https://scaleflex.ultrafast.io/https://scaleflex.api.airstore.io/v1/get/_/2236d56f-914a-5a8b-a3ae-f7bde1c50000/360.svg';\r\n\r\n view360CircleIcon.style.bottom = `${circleOffset}%`;\r\n view360CircleIcon.className = 'cloudimage-360-view-360-circle';\r\n\r\n return view360CircleIcon;\r\n};\r\n","import { addClass } from '../class-names/add-class';\r\n\r\nexport const initControls = (controlsConfig, controlsTriggers) => {\r\n const {\r\n container, controlReverse, spinReverse, stopAtEdges,\r\n } = controlsConfig;\r\n\r\n const {\r\n onRightStart, onLeftStart, onTopStart, onBottomStart,\r\n onEventEnd,\r\n } = controlsTriggers;\r\n\r\n const controlElements = {};\r\n const isReverse = controlReverse ? !spinReverse : spinReverse;\r\n\r\n const left = container.querySelectorAll('.cloudimage-360-left, .cloudimage-360-prev')[0];\r\n\r\n const right = container.querySelectorAll('.cloudimage-360-right, .cloudimage-360-next')[0];\r\n\r\n const top = container.querySelector('.cloudimage-360-top');\r\n\r\n const bottom = container.querySelector('.cloudimage-360-bottom');\r\n\r\n if (left) {\r\n left.style.display = 'block';\r\n left.addEventListener('mousedown', isReverse ? onRightStart : onLeftStart);\r\n left.addEventListener('touchstart', isReverse ? onRightStart : onLeftStart, { passive: true });\r\n left.addEventListener('mouseup', isReverse ? onEventEnd : onEventEnd);\r\n left.addEventListener('touchend', isReverse ? onEventEnd : onEventEnd);\r\n\r\n controlElements.left = left;\r\n }\r\n\r\n if (right) {\r\n right.style.display = 'block';\r\n right.addEventListener('mousedown', isReverse ? onLeftStart : onRightStart);\r\n right.addEventListener('touchstart', isReverse ? onLeftStart : onRightStart, { passive: true });\r\n right.addEventListener('mouseup', onEventEnd);\r\n right.addEventListener('touchend', onEventEnd);\r\n\r\n controlElements.right = right;\r\n }\r\n\r\n if (top) {\r\n top.style.display = 'block';\r\n top.addEventListener('mousedown', isReverse ? onBottomStart : onTopStart);\r\n top.addEventListener('touchstart', isReverse ? onBottomStart : onTopStart);\r\n top.addEventListener('mouseup', isReverse ? onEventEnd : onEventEnd);\r\n top.addEventListener('touchend', isReverse ? onEventEnd : onEventEnd);\r\n\r\n controlElements.top = top;\r\n }\r\n\r\n if (bottom) {\r\n bottom.style.display = 'block';\r\n bottom.addEventListener('mousedown', isReverse ? onTopStart : onBottomStart);\r\n bottom.addEventListener('touchstart', isReverse ? onTopStart : onBottomStart);\r\n bottom.addEventListener('mouseup', isReverse ? onEventEnd : onEventEnd);\r\n bottom.addEventListener('touchend', isReverse ? onEventEnd : onEventEnd);\r\n\r\n controlElements.bottom = bottom;\r\n }\r\n\r\n if (isReverse ? right : left) {\r\n if (stopAtEdges) {\r\n addClass(isReverse ? right : left, 'not-active');\r\n addClass(isReverse ? top : bottom, 'not-active');\r\n }\r\n }\r\n\r\n return controlElements;\r\n};\r\n","import 'core-js/features/array/for-each';\r\nimport 'core-js/features/array/filter';\r\nimport 'core-js/features/array/includes';\r\nimport CI360Viewer from './ci360.service';\r\nimport { isTrue } from './ci360.utils';\r\n\r\nfunction getContainerWithId(container) {\r\n const containerId = container.id;\r\n\r\n if (!containerId) {\r\n const uniqueId = Math.floor(Math.random() * 10000);\r\n const generatedContainerId = `cloudimage-360-view-${uniqueId}`;\r\n\r\n container.id = generatedContainerId;\r\n }\r\n\r\n return container;\r\n}\r\n\r\nfunction init() {\r\n const viewers = [];\r\n const view360Array = document.querySelectorAll('.cloudimage-360:not(.initialized)');\r\n\r\n [].slice.call(view360Array).forEach(_container => {\r\n const container = getContainerWithId(_container);\r\n\r\n const isHotspotsEnabled = isTrue(container, 'hotspots')\r\n\r\n if (!isHotspotsEnabled) {\r\n viewers.push(new CI360Viewer(container));\r\n }\r\n })\r\n\r\n window.CI360._viewers = viewers;\r\n}\r\n\r\nfunction destroy() {\r\n if (isNoViewers()) return;\r\n\r\n window.CI360._viewers.forEach(viewer => { viewer.destroy(); });\r\n\r\n window.CI360._viewers = [];\r\n}\r\n\r\nfunction getActiveIndexByID(id, oriantation) {\r\n if (isNoViewers()) return;\r\n\r\n let currentViewer = window.CI360._viewers.filter(viewer => viewer.id === id)[0];\r\n\r\n if (oriantation === 'y') {\r\n return currentViewer && (currentViewer.activeImageY - 1);\r\n }\r\n\r\n return currentViewer && (currentViewer.activeImageX - 1);\r\n}\r\n\r\nfunction add(id) {\r\n const view360Array = Array.from(document.querySelectorAll('.cloudimage-360:not(.initialized)'));\r\n\r\n if (view360Array.length && id) {\r\n const newViewContainer = view360Array.filter(viewer => viewer.id === id)[0];\r\n\r\n newViewContainer && window.CI360._viewers.push(new CI360Viewer(newViewContainer));\r\n }\r\n}\r\n\r\nfunction update(id = null, forceUpdate = false) {\r\n if (id) {\r\n const view = window.CI360._viewers.filter(viewer => viewer.id === id)[0];\r\n view.updateView(forceUpdate, window.CI360._viewers);\r\n } else {\r\n window.CI360._viewers\r\n .forEach(viewer => { viewer.updateView(forceUpdate, window.CI360._viewers); });\r\n }\r\n}\r\n\r\nfunction isNoViewers() {\r\n return !(window.CI360._viewers && window.CI360._viewers.length > 0);\r\n}\r\n\r\nfunction addHotspots(instanceId, config) {\r\n const view360Array = document.querySelectorAll('.cloudimage-360:not(.initialized)');\r\n const container = Array.from(view360Array)\r\n .find(view => view.id === instanceId);\r\n\r\n if (container) {\r\n window.CI360._viewers.push(new CI360Viewer(container, false, config))\r\n }\r\n}\r\n\r\nwindow.CI360 = window.CI360 || {};\r\nwindow.CI360.init = init;\r\nwindow.CI360.destroy = destroy;\r\nwindow.CI360.getActiveIndexByID = getActiveIndexByID;\r\nwindow.CI360.update = update;\r\nwindow.CI360.add = add;\r\nwindow.CI360.addHotspots = addHotspots;\r\n\r\nif (!window.CI360.notInitOnLoad) {\r\n init();\r\n}","import { GURKHA_SUV_HOTSPOTS_CONFIG } from './hotspots-config.constant';\r\n\r\nconst NIKE_PLUGIN = {\r\n \"data-folder\": \"https://scaleflex.cloudimg.io/v7/demo/360-nike/\",\r\n \"data-filename-x\": \"nike-{index}.jpg\",\r\n \"data-filename-y\": \"nike-y-{index}.jpg\",\r\n \"data-amount-x\": \"35\",\r\n \"data-amount-y\": \"36\",\r\n \"data-autoplay-behavior\": \"spin-xy\",\r\n};\r\n\r\nconst EARBUDS_PLUGIN = {\r\n \"data-folder\": \"https://scaleflex.cloudimg.io/v7/demo/earbuds/\",\r\n \"data-filename-x\": \"{index}.jpg\",\r\n \"data-amount-x\": \"233\",\r\n};\r\n\r\nconst SPIN_DIRECTION_PROPS = [\r\n 'data-filename-y',\r\n 'data-amount-y',\r\n 'data-autoplay-behavior'\r\n];\r\n\r\nconst PLUGIN_PROPS = {\r\n class: { value: \"cloudimage-360\", isRequired: true },\r\n \"data-folder\": {\r\n value: \"https://scaleflex.cloudimg.io/v7/demo/earbuds/\",\r\n isRequired: true,\r\n isUrl: true\r\n },\r\n \"data-filename-x\": { value: \"{index}.jpg\", isRequired: true },\r\n \"data-amount-x\": { value: 233, isRequired: true },\r\n \"data-speed\": { value: 100, isRequired: true },\r\n \"data-drag-speed\": { value: 120, isRequired: true },\r\n \"data-autoplay\": { isRequired: true }\r\n};\r\n\r\nconst PROPERTIES_COLORS = {\r\n NAME: \"#7B9200\",\r\n URL: \"#2D88CB\"\r\n};\r\n\r\nconst URL_PROPERTIES = [\"data-folder\", \"class\"];\r\n\r\nexport {\r\n NIKE_PLUGIN,\r\n EARBUDS_PLUGIN,\r\n SPIN_DIRECTION_PROPS,\r\n PLUGIN_PROPS,\r\n PROPERTIES_COLORS,\r\n URL_PROPERTIES,\r\n GURKHA_SUV_HOTSPOTS_CONFIG\r\n}","import './mobile.init';\r\nimport '../../src';\r\nimport './controllers.css';\r\nimport './styles/main.css';\r\n\r\nimport {\r\n EARBUDS_PLUGIN,\r\n NIKE_PLUGIN,\r\n PLUGIN_PROPS,\r\n PROPERTIES_COLORS,\r\n URL_PROPERTIES,\r\n GURKHA_SUV_HOTSPOTS_CONFIG,\r\n} from \"./constants\";\r\n\r\nconst spinDirections = document.getElementById(\"spin-directions\");\r\nconst imagesY = document.getElementById(\"images-y\");\r\nconst responsive = document.getElementById(\"responsive-checkbox\");\r\nconst boxShadow = document.getElementById(\"box-shadow\");\r\nconst imageXSelector = document.getElementById(\"x-images-selector\");\r\nconst nikeXSelector = document.getElementById(\"nike-x-images\");\r\nconst copyText = document.getElementById(\"copy-text\");\r\nconst codeBlock = document.getElementById(\"code-block\");\r\nconst codeWrapper = document.getElementById(\"code-wrapper\");\r\nconst controlOption = document.getElementById(\"control-option\");\r\nconst autoPlayBehavior = document.getElementById(\"auto-play-behavior\");\r\nlet container = document.getElementById(\"demo-generator\");\r\n\r\nconst copyButton = document.querySelector(\".copy-button\");\r\nconst outputCode = document.querySelector(\".output-code\");\r\nconst pointerZoomCheckbox = document.querySelector(\"[data-checkbox]\");\r\n\r\nconst accordions = document.querySelectorAll(\"[data-accordion]\");\r\nconst pluginCheckboxOptions = document.querySelectorAll(\".plugin-option\");\r\nconst pluginInputs = document.querySelectorAll(\"[plugin-input]\");\r\nlet controlButtons = Array.from(document.querySelectorAll(\"control-buttons\"));\r\n\r\nlet isSpinY = false;\r\n\r\nconst CLOUDIMAGE_360 = window.CI360;\r\n\r\nfunction updateContainer() {\r\n container = document.getElementById(\"demo-generator\");\r\n}\r\n\r\nfunction updateControlButtons() {\r\n controlButtons = Array.from(document.querySelectorAll(\".control-buttons\"));\r\n}\r\n\r\nfunction toggleControlButtons() {\r\n const yButtonsIds = [\"control-up-button\", \"control-down-button\"];\r\n\r\n controlButtons.forEach((button) => {\r\n if (isSpinY) {\r\n button.style.visibility = controlOption.checked ? \"visible\" : \"hidden\";\r\n } else {\r\n button.style.visibility = \"hidden\";\r\n\r\n button.style.visibility =\r\n controlOption.checked && !yButtonsIds.includes(button.id) ? \"visible\" : \"hidden\";\r\n }\r\n });\r\n}\r\n\r\nfunction changeSpinDirectionHandler(event) {\r\n const spinDirection = event.target.value;\r\n const earbudsPlugin = Object.entries(EARBUDS_PLUGIN);\r\n const nikePlugin = Object.entries(NIKE_PLUGIN);\r\n const isSpinYDirection = spinDirection === \"Y\";\r\n\r\n nikePlugin.forEach(([key, value]) => {\r\n updatePluginValues(key, { value }, null, !isSpinYDirection);\r\n isSpinYDirection ?\r\n container.setAttribute(key, value) :\r\n container.removeAttribute(key);\r\n });\r\n\r\n if (isSpinYDirection) {\r\n isSpinY = true;\r\n\r\n imageXSelector.style.display = \"none\";\r\n nikeXSelector.style.display = \"block\";\r\n imagesY.style.display = \"flex\";\r\n } else {\r\n isSpinY = false;\r\n\r\n earbudsPlugin.forEach(([key, value]) => {\r\n container.setAttribute(key, value);\r\n updatePluginValues(key, { value });\r\n });\r\n\r\n imageXSelector.style.display = \"block\";\r\n nikeXSelector.style.display = \"none\";\r\n imagesY.style.display = \"none\";\r\n }\r\n\r\n autoPlayBehavior.disabled = !autoPlayBehavior.disabled\r\n\r\n CLOUDIMAGE_360.update(\"demo-generator\");\r\n updateContainer();\r\n updateControlButtons();\r\n toggleControlButtons();\r\n}\r\n\r\nfunction changePointerZoomHandler(event) {\r\n const ispluginCheckboxChecked = event.target.checked;\r\n const nextCheckbox = event.target.getAttribute(\"data-checkbox\");\r\n const pluginInput = document.querySelector(`[data-input=${nextCheckbox}]`);\r\n const pluginAttribute = event.target.getAttribute(\"data-plugin-value\");\r\n const value = pluginInput[pluginInput.type === \"checkbox\" ? \"checked\" : \"value\"];\r\n\r\n if (ispluginCheckboxChecked) {\r\n container.setAttribute(pluginAttribute, value);\r\n } else {\r\n container.removeAttribute(pluginAttribute);\r\n }\r\n\r\n pluginInput.disabled=!pluginInput.disabled\r\n\r\n CLOUDIMAGE_360.update(\"demo-generator\");\r\n updateContainer();\r\n\r\n updatePluginValues(\r\n pluginAttribute,\r\n { value: value },\r\n event.target.type,\r\n );\r\n}\r\n\r\nfunction changeResponsiveOptionHandler(event) {\r\n const allPluginInput = document.querySelectorAll(\"[responsive-option]\");\r\n const ispluginCheckboxChecked = event.target.checked;\r\n\r\n allPluginInput.forEach((input) => {\r\n const pluginAttribute = input.getAttribute(\"data-plugin-value\");\r\n if (ispluginCheckboxChecked) {\r\n container.setAttribute(pluginAttribute, input.value);\r\n\r\n updatePluginValues(\r\n pluginAttribute,\r\n { value: input.value },\r\n event.target.type,\r\n );\r\n } else {\r\n container.removeAttribute(pluginAttribute);\r\n updatePluginValues(pluginAttribute, { value: \"\" }, event.target.type);\r\n }\r\n\r\n input.disabled=!input.disabled\r\n });\r\n\r\n CLOUDIMAGE_360.update(\"demo-generator\", true);\r\n updateContainer();\r\n}\r\n\r\nfunction changeBoxShadowOptionHandler(event) {\r\n const shadowBoxInput = document.querySelector(\"[box-shadow-option]\");\r\n const ispluginCheckboxChecked = event.target.checked;\r\n const pluginAttribute = shadowBoxInput.getAttribute(\"data-plugin-value\");\r\n\r\n if (ispluginCheckboxChecked) {\r\n container.setAttribute(pluginAttribute, shadowBoxInput.value);\r\n\r\n updatePluginValues(\r\n pluginAttribute,\r\n { value: shadowBoxInput.value },\r\n event.target.type,\r\n );\r\n } else {\r\n container.removeAttribute(pluginAttribute);\r\n updatePluginValues(pluginAttribute, { value: \"\" }, event.target.type);\r\n }\r\n\r\n shadowBoxInput.disabled=!shadowBoxInput.disabled\r\n\r\n CLOUDIMAGE_360.update(\"demo-generator\", true);\r\n updateContainer();\r\n}\r\n\r\nfunction showAccordionContent(event) {\r\n const contentID = event.target.getAttribute(\"data-accordion\");\r\n const accordionContent = (\r\n document.querySelector(`[data-accordion-content=\"${contentID}\"]`)\r\n );\r\n\r\n accordionContent.style.display = !accordionContent.offsetWidth ? \"block\": \"none\";\r\n}\r\n\r\nfunction copyCodeHandler() {\r\n navigator.clipboard.writeText(outputCode.innerText);\r\n\r\n copyText.innerHTML = \"Copied\";\r\n\r\n setTimeout(() => {\r\n copyText.innerHTML = \"Copy\";\r\n }, 500);\r\n}\r\n\r\nfunction pluginCheckboxOptionsHandler(event) {\r\n const ispluginCheckboxChecked = event.target.checked;\r\n const pluginAttribute = event.target.getAttribute(\"data-plugin-value\");\r\n const defaultValue = event.target.value\r\n const value = defaultValue === \"on\" ? \"\" : defaultValue\r\n\r\n if (ispluginCheckboxChecked) {\r\n container.setAttribute(pluginAttribute, value);\r\n } else {\r\n container.removeAttribute(pluginAttribute);\r\n }\r\n\r\n CLOUDIMAGE_360.update(\"demo-generator\");\r\n updateContainer();\r\n updatePluginValues(pluginAttribute, { value: value }, event.target.type);\r\n}\r\n\r\nfunction changePluginInputsHandler(event) {\r\n const value = event.target.value;\r\n const pluginAttribute = event.target.getAttribute(\"data-plugin-value\");\r\n\r\n if (value) {\r\n container.setAttribute(pluginAttribute, value);\r\n } else {\r\n container.removeAttribute(pluginAttribute);\r\n }\r\n\r\n CLOUDIMAGE_360.update(\"demo-generator\");\r\n updateContainer();\r\n updatePluginValues(pluginAttribute, { value }, event.target.type);\r\n}\r\n\r\nfunction updatePluginValues(key, properties = {}, inputType, removeProp) {\r\n const isCheckbox = inputType === \"checkbox\";\r\n const isEmptyInput = !isCheckbox && !properties.value;\r\n\r\n if (\r\n Object.keys(PLUGIN_PROPS).includes(key)\r\n && (isCheckbox || isEmptyInput || removeProp)\r\n ) {\r\n delete PLUGIN_PROPS[key];\r\n } else if (key) {\r\n PLUGIN_PROPS[key] = {};\r\n PLUGIN_PROPS[key].value = properties.value;\r\n }\r\n\r\n updateCodeBlock();\r\n}\r\n\r\nfunction updateCodeBlock() {\r\n codeBlock.innerText = \"\";\r\n\r\n Object.entries(PLUGIN_PROPS).forEach(([key, properties]) => {\r\n const propertyWrapper = document.createElement(\"div\");\r\n const propertyName = document.createElement(\"span\");\r\n const propertyValue = document.createElement(\"span\");\r\n\r\n propertyName.innerText = key;\r\n\r\n propertyName.style.color = PROPERTIES_COLORS.NAME;\r\n\r\n if (URL_PROPERTIES.includes(key)) {\r\n propertyValue.style.color = PROPERTIES_COLORS.URL;\r\n }\r\n\r\n propertyWrapper.appendChild(propertyName);\r\n\r\n if (properties?.value) {\r\n propertyValue.innerText = `\"${properties?.value}\"`;\r\n\r\n propertyWrapper.innerHTML += \"=\";\r\n propertyWrapper.appendChild(propertyValue);\r\n }\r\n\r\n codeBlock.appendChild(propertyWrapper);\r\n codeWrapper.scrollTop = codeWrapper.scrollHeight;\r\n });\r\n}\r\n\r\nupdatePluginValues();\r\nwindow.CI360.addHotspots(\"gurkha-suv\", GURKHA_SUV_HOTSPOTS_CONFIG);\r\n\r\nspinDirections.addEventListener(\"change\", changeSpinDirectionHandler);\r\ncopyButton.addEventListener(\"click\", copyCodeHandler);\r\ncontrolOption.addEventListener(\"change\", toggleControlButtons);\r\nresponsive.addEventListener(\"change\", changeResponsiveOptionHandler);\r\nboxShadow.addEventListener(\"change\", changeBoxShadowOptionHandler);\r\npointerZoomCheckbox.addEventListener(\"change\", changePointerZoomHandler);\r\naccordions.forEach((accordion) => {\r\n accordion.addEventListener(\"click\", showAccordionContent)\r\n});\r\npluginCheckboxOptions.forEach((option) => {\r\n option.addEventListener(\"change\", pluginCheckboxOptionsHandler)\r\n});\r\npluginInputs.forEach((input) => {\r\n input.addEventListener(\"change\", changePluginInputsHandler)\r\n});","const GURKHA_SUV_HOTSPOTS_CONFIG = [\r\n {\r\n variant: {\r\n images: [\r\n { src: 'https://scaleflex.cloudimg.io/v7/demo/360-assets/AIR_SNORKEL_FINAL_JPG.png?vh=88bccb', alt: 'air snorkel' }\r\n ],\r\n title: 'Air Intake Snorkel',\r\n description: 'The snorkel gives the Gurkha an unmatched water-wading ability and ensures ample supply of fresh air for combustion.',\r\n moreDetailsUrl: 'https://forcegurkha.co.in',\r\n },\r\n popupProps: { popupSelector: 'air-intake-popup' },\r\n initialDimensions: [ 1170, 662 ],\r\n positions: [\r\n { imageIndex: 0, xCoord: 527, yCoord: 319 },\r\n { imageIndex: 1, xCoord: 527, yCoord: 319 },\r\n { imageIndex: 2, xCoord: 527 },\r\n { imageIndex: 3, xCoord: 498 },\r\n { imageIndex: 4, xCoord: 470 },\r\n { imageIndex: 5, xCoord: 441 },\r\n { imageIndex: 73, xCoord: 555 },\r\n { imageIndex: 72, xCoord: 586 },\r\n { imageIndex: 71, xCoord: 614 },\r\n { imageIndex: 70, xCoord: 641 },\r\n { imageIndex: 69, xCoord: 668 },\r\n { imageIndex: 68, xCoord: 692 },\r\n { imageIndex: 67, xCoord: 715 },\r\n { imageIndex: 66, xCoord: 736 },\r\n { imageIndex: 65, xCoord: 756 },\r\n { imageIndex: 64, xCoord: 773 },\r\n { imageIndex: 63, xCoord: 787 },\r\n ],\r\n },\r\n {\r\n variant: {\r\n title: 'New Gurkha Technical Specifications',\r\n url: 'https://www.forcegurkha.co.in/specifications/',\r\n newTab: true\r\n },\r\n initialDimensions: [ 1170, 662 ],\r\n popupProps: { popupSelector: 'popup-link'},\r\n positions: [\r\n { imageIndex: 73, xCoord: 355, yCoord: 474 },\r\n { imageIndex: 74, xCoord: 355 },\r\n { imageIndex: 73, xCoord: 355 },\r\n { imageIndex: 72, xCoord: 341, yCoord: 479 },\r\n { imageIndex: 71, xCoord: 336 },\r\n { imageIndex: 70, xCoord: 332 },\r\n { imageIndex: 69, xCoord: 327 },\r\n { imageIndex: 68, xCoord: 326 },\r\n { imageIndex: 67, xCoord: 327 },\r\n { imageIndex: 66, xCoord: 331 },\r\n { imageIndex: 65, xCoord: 334 },\r\n { imageIndex: 64, xCoord: 336 },\r\n { imageIndex: 63, xCoord: 347 },\r\n ],\r\n },\r\n {\r\n variant: {\r\n images: [\r\n { src: 'https://scaleflex.cloudimg.io/v7/demo/360-assets/transparent+%281%29.jpg', alt: 'car accessory' },\r\n { src: 'https://scaleflex.cloudimg.io/v7/demo/360-assets/transparent+%282%29.jpg', alt: 'spoiler' },\r\n { src: 'https://scaleflex.cloudimg.io/v7/demo/360-assets/transparent.jpg', alt: 'car accessory' }\r\n ],\r\n description: 'The All New Force Gurkha ensures best-in-class safety for passengers and security for the vehicle with its full metal body structure.',\r\n moreDetailsTitle: 'Download accessories brochure',\r\n moreDetailsUrl: 'https://www.forcegurkha.co.in/wp-content/themes/force-motors/assets/pdf/Force-Gurkha-accessories-E-brochure.pdf'\r\n },\r\n popupProps: { popupSelector: 'accessories-popup'},\r\n initialDimensions: [ 1170, 662 ],\r\n positions: [\r\n { imageIndex: 11, xCoord: 683, yCoord: 151 },\r\n { imageIndex: 12, xCoord: 683 },\r\n { imageIndex: 13, xCoord: 683 },\r\n { imageIndex: 14, xCoord: 683 },\r\n { imageIndex: 15, xCoord: 683 },\r\n { imageIndex: 16, xCoord: 683 },\r\n { imageIndex: 17, xCoord: 681, yCoord: 152 },\r\n { imageIndex: 18, xCoord: 677, yCoord: 156 },\r\n { imageIndex: 19, xCoord: 671, yCoord: 159 },\r\n { imageIndex: 20, xCoord: 665, yCoord: 163 },\r\n { imageIndex: 21, xCoord: 656, yCoord: 168 },\r\n { imageIndex: 22, xCoord: 650, yCoord: 171 },\r\n { imageIndex: 23, xCoord: 643, yCoord: 176 },\r\n { imageIndex: 24, xCoord:635, yCoord: 178 },\r\n { imageIndex: 25, xCoord:628, yCoord: 181 },\r\n { imageIndex: 26, xCoord:621 },\r\n { imageIndex: 27, xCoord:610 },\r\n { imageIndex: 28, xCoord:598 },\r\n { imageIndex: 29, xCoord:588 },\r\n { imageIndex: 30, xCoord:578 },\r\n { imageIndex: 31, xCoord:570, yCoord: 176 },\r\n { imageIndex: 32, xCoord:560, yCoord: 173 },\r\n ],\r\n },\r\n {\r\n variant: {\r\n images: [\r\n { src: 'https://scaleflex.cloudimg.io/v7/demo/360-assets/feature-5.png', alt: 'car top'},\r\n { src: 'https://scaleflex.cloudimg.io/v7/demo/360-assets/ALL_AROUND_VISIBILITY_UPDATED.png', alt: 'car inside' },\r\n { src: 'https://scaleflex.cloudimg.io/v7/demo/360-assets/feature-2.png', alt: 'transmission' }\r\n ],\r\n description:'All four captain seats with ample head room, leg room and shoulder room.Easy ingress and egress from the rear door into the widest gangway in the category that makes space for all your luggage',\r\n moreDetailsUrl: 'https://www.forcegurkha.co.in/wp-content/themes/force-motors/assets/pdf/Force-Gurkha-accessories-E-brochure.pdf',\r\n },\r\n initialDimensions: [ 1170, 662 ],\r\n popupProps: { popupSelector: 'car-cabin' },\r\n positions: [\r\n { imageIndex: 6, xCoord: 607, yCoord: 246 },\r\n { imageIndex: 7, xCoord: 619 },\r\n { imageIndex: 8, xCoord: 630 },\r\n { imageIndex: 9, xCoord: 637 },\r\n { imageIndex: 10, xCoord: 642 },\r\n ],\r\n },\r\n]\r\n\r\nexport {\r\n GURKHA_SUV_HOTSPOTS_CONFIG\r\n}"],"sourceRoot":""}