{"version":3,"sources":["webpack:///./src/mixins/flashcard.js","webpack:///./src/components/flashcard/FlashcardImageViewer.vue?94be","webpack:///./src/components/flashcard/FlashcardLevelBar.vue","webpack:///src/components/flashcard/FlashcardLevelBar.vue","webpack:///./src/components/flashcard/FlashcardLevelBar.vue?e8e9","webpack:///./src/components/flashcard/FlashcardLevelBar.vue?e7b2","webpack:///./src/components/flashcard/FlashcardLevelBar.vue?740b","webpack:///./node_modules/v-viewer/dist/index.es.js","webpack:///./node_modules/viewerjs/dist/viewer.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///./src/components/flashcard/FlashcardImageViewer.vue","webpack:///src/components/flashcard/FlashcardImageViewer.vue","webpack:///./src/components/flashcard/FlashcardImageViewer.vue?6885","webpack:///./src/components/flashcard/FlashcardImageViewer.vue?4f99"],"names":["methods","stateFlashcard","label","descriptionFlashcard","render","_vm","this","_c","_self","staticClass","attrs","progress","barColor","_v","_s","level","staticRenderFns","inheritAttrs","name","data","props","type","String","Number","default","component","freeGlobal","global","Object","freeGlobal$1","freeSelf","self","root","Function","root$1","Symbol$1","Symbol","Symbol$2","objectProto$8","prototype","hasOwnProperty$6","hasOwnProperty","nativeObjectToString$1","toString","symToStringTag$1","toStringTag","getRawTag","value","isOwn","call","tag","unmasked","e","result","objectProto$7","nativeObjectToString","objectToString","nullTag","undefinedTag","symToStringTag","baseGetTag","isObjectLike","isArray","Array","isArray$1","isObject","parseInt","identity","asyncTag","funcTag$1","genTag","proxyTag","isFunction","coreJsData","coreJsData$1","maskSrcKey","uid","exec","keys","IE_PROTO","isMasked","func","funcProto$1","funcToString$1","toSource","reRegExpChar","reIsHostCtor","funcProto","objectProto$6","funcToString","hasOwnProperty$5","reIsNative","RegExp","replace","baseIsNative","pattern","test","getValue","object","key","getNative","apply","thisArg","args","length","HOT_COUNT","HOT_SPAN","nativeNow","Date","now","shortOut","count","lastCalled","stamp","remaining","arguments","constant","defineProperty","defineProperty$1","baseSetToString","string","baseSetToString$1","setToString","setToString$1","MAX_SAFE_INTEGER$1","reIsUint","isIndex","baseAssignValue","eq","other","objectProto$5","hasOwnProperty$4","assignValue","objValue","copyObject","source","customizer","isNew","index2","newValue","nativeMax$1","Math","max","overRest","start","transform","array","otherArgs","baseRest","MAX_SAFE_INTEGER","isLength","isArrayLike","isIterateeCall","createAssigner","assigner","sources","guard","objectProto$4","isPrototype","Ctor","constructor","proto","baseTimes","n","iteratee","argsTag$1","baseIsArguments","objectProto$3","hasOwnProperty$3","propertyIsEnumerable","isArguments","isArguments$1","stubFalse","freeExports$1","exports","nodeType","freeModule$1","module","moduleExports$1","Buffer","nativeIsBuffer","isBuffer","isBuffer$1","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeExports","freeModule","moduleExports","freeProcess","process","nodeUtil","types","require","binding","nodeUtil$1","nodeIsTypedArray","isTypedArray","isTypedArray$1","objectProto$2","hasOwnProperty$2","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","push","overArg","arg","nativeKeys","nativeKeys$1","objectProto$1","hasOwnProperty$1","baseKeys","objectProto","min","_h","$createElement","_t","images","options","normalizeComponent","scriptExports","render2","staticRenderFns2","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","beforeCreate","concat","__vue2_script","rebuild","Boolean","trigger","computed","watch","$nextTick","onChange","deep","rebuildViewer","createViewer","destroyViewer","updateViewer","$viewer","update","$emit","destroy","$el","__cssModules","__component__","__vue2_injectStyles","o","factory","ownKeys","r","t","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","_objectSpread2","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_typeof","iterator","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","i","descriptor","configurable","writable","_toPropertyKey","_createClass","protoProps","staticProps","obj","_toPrimitive","input","hint","prim","toPrimitive","undefined","res","DEFAULTS","backdrop","button","navbar","title","toolbar","className","container","fullscreen","inheritedAttributes","initialCoverage","initialViewIndex","inline","interval","keyboard","focus","loading","loop","minWidth","minHeight","movable","rotatable","scalable","zoomable","zoomOnTouch","zoomOnWheel","slideOnTouch","toggleOnDblclick","tooltip","transition","zIndex","zIndexInline","zoomRatio","minZoomRatio","maxZoomRatio","url","ready","show","shown","hide","hidden","view","viewed","move","moved","rotate","rotated","scale","scaled","zoom","zoomed","play","stop","TEMPLATE","IS_BROWSER","window","document","WINDOW","IS_TOUCH_DEVICE","documentElement","HAS_POINTER_EVENT","NAMESPACE","ACTION_MOVE","ACTION_SWITCH","ACTION_ZOOM","CLASS_ACTIVE","CLASS_CLOSE","CLASS_FADE","CLASS_FIXED","CLASS_FULLSCREEN","CLASS_FULLSCREEN_EXIT","CLASS_HIDE","CLASS_HIDE_MD_DOWN","CLASS_HIDE_SM_DOWN","CLASS_HIDE_XS_DOWN","CLASS_IN","CLASS_INVISIBLE","CLASS_LOADING","CLASS_MOVE","CLASS_OPEN","CLASS_SHOW","CLASS_TRANSITION","EVENT_CLICK","EVENT_DBLCLICK","EVENT_DRAG_START","EVENT_FOCUSIN","EVENT_KEY_DOWN","EVENT_LOAD","EVENT_ERROR","EVENT_TOUCH_END","EVENT_TOUCH_MOVE","EVENT_TOUCH_START","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_RESIZE","EVENT_TRANSITION_END","EVENT_WHEEL","EVENT_READY","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","EVENT_VIEW","EVENT_VIEWED","EVENT_MOVE","EVENT_MOVED","EVENT_ROTATE","EVENT_ROTATED","EVENT_SCALE","EVENT_SCALED","EVENT_ZOOM","EVENT_ZOOMED","EVENT_PLAY","EVENT_STOP","DATA_ACTION","REGEXP_SPACES","BUTTONS","isString","isNaN","isNumber","isUndefined","isPlainObject","_constructor","error","callback","assign","_len","_key","REGEXP_SUFFIX","setStyle","element","styles","style","property","escapeHTMLEntities","hasClass","classList","contains","indexOf","addClass","elem","trim","removeClass","remove","toggleClass","added","REGEXP_HYPHENATE","hyphenate","toLowerCase","getData","dataset","getAttribute","setData","setAttribute","onceSupported","supported","once","listener","get","set","addEventListener","removeEventListener","removeListener","handler","split","event","listeners","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","Event","CustomEvent","bubbles","cancelable","detail","createEvent","initCustomEvent","getOffset","box","getBoundingClientRect","left","pageXOffset","clientLeft","top","pageYOffset","clientTop","getTransforms","_ref","scaleX","scaleY","translateX","translateY","values","join","WebkitTransform","msTransform","getImageNameFromURL","decodeURIComponent","IS_SAFARI","navigator","userAgent","getImageNaturalSizes","image","newImage","createElement","naturalWidth","naturalHeight","body","onload","width","height","removeChild","src","cssText","appendChild","getResponsiveClass","getMaxZoomRatio","pointers","pointers2","ratios","pointer","pointerId","pointer2","x1","abs","startX","y1","startY","x2","endX","y2","endY","z1","sqrt","z2","ratio","sort","a","b","getPointer","_ref2","endOnly","pageX","pageY","end","timeStamp","getPointersCenter","_ref3","initContainer","initViewer","initList","renderViewer","initBody","ownerDocument","scrollbarWidth","innerWidth","clientWidth","initialBodyPaddingRight","paddingRight","initialBodyComputedPaddingRight","getComputedStyle","containerData","innerHeight","viewerData","offsetWidth","offsetHeight","parentData","fulled","viewer","_this","list","items","innerHTML","index","alt","getImageURL","item","img","onLoad","onError","firstElementChild","loadImage","renderList","next","nextElementSibling","gutter","marginLeft","outerWidth","resetList","initImage","done","sizingImage","_this2","footerHeight","footer","viewerWidth","viewerHeight","oldImageData","imageData","imageInitializing","abort","aspectRatio","x","y","oldRatio","initialImageData","renderImage","_this3","marginTop","viewing","moving","rotating","scaling","zooming","onTransitionEnd","imageRendering","resetImage","parentNode","events","bind","canvas","onClick","click","onDragStart","dragstart","onPointerDown","pointerdown","onPointerMove","pointermove","onPointerUp","pointerup","onKeyDown","keydown","onResize","resize","onWheel","wheel","passive","capture","onDblclick","dblclick","unbind","handlers","action","localName","parentElement","isTrusted","clearTimeout","clickCanvasTimeout","played","exit","full","pointerMoved","toggle","reset","prev","preventDefault","doubleClickImageTimeout","originalEvent","load","timeout","originalImage","parentWidth","parentHeight","filled","keyCode","which","charCode","playing","ctrlKey","buttons","showing","hiding","pointerType","changedTouches","touch","identifier","isSwitchable","change","imageClicked","setTimeout","isShown","close","open","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","player","getElementsByTagName","_this4","wheeling","delta","deltaY","wheelDelta","immediate","build","transitioning","id","removeAttribute","initialOffsetWidth","hideImmediately","onViewerTransitionEnd","onImageTransitionEnd","zoomTo","querySelector","activeItem","onViewed","complete","maxIndex","moveTo","_originalEvent","oldX","oldY","changed","degree","rotateTo","oldDegree","_scaleX","_scaleY","_this5","oldScaleX","oldScaleY","showTooltip","pivot","_this6","_zoomable","newWidth","newHeight","offset","center","_this7","total","onLoadWhenPlay","requestFullscreen","referrerPolicy","_this8","exitFullscreen","_this9","enforceFocus","_this10","clearEnforceFocus","_this11","tooltipBox","textContent","round","tooltipping","fading","_this12","isImg","querySelectorAll","changedIndexes","changedIndex","destroyed","delaying","initializing","onStart","others","onFocusin","parseFloat","fucus","webkitRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","mozRequestFullScreen","msRequestFullscreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","offsetX","offsetY","absoluteOffsetX","p","AnotherViewer","Viewer","getUniqueID","Error","init","template","custom","zoomButtons","slice","rotateButtons","scaleButtons","size","rotates","position","insertBefore","nextSibling","originalModule","webpackPolyfill","create","children","l","ref","on","inited","imageSrc","$event","stopPropagation","showImage","components"],"mappings":"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","file":"js/FlashcardFavouriteSimulator~FlashcardSimulator~Inicio.7463fab4.js","sourcesContent":["export default {\n methods: {\n stateFlashcard (label) {\n if (label === 'Fácil') {\n return 'FACIL'\n } else if (label === 'Normal') {\n return 'NORMAL'\n } else if (label === 'Difícil') {\n return 'DIFICIL'\n } else if (label === 'No lo sé') {\n return 'NO_LA_SE'\n }\n },\n descriptionFlashcard (label) {\n if (label === 'FACIL') {\n return 'Fácil'\n } else if (label === 'NORMAL') {\n return 'Normal'\n } else if (label === 'DIFICIL') {\n return 'Difícil'\n } else if (label === 'NO_LA_SE') {\n return 'No lo sé'\n }\n }\n }\n}\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FlashcardImageViewer.vue?vue&type=style&index=0&id=2e92c60f&prod&lang=css\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-progress-linear',{staticClass:\"bar\",attrs:{\"value\":_vm.progress,\"height\":\"65\",\"width\":\"100%\",\"background-color\":\"#fff\",\"color\":_vm.barColor}},[_c('span',{staticClass:\"bar__label d-flex justify-center align-center\"},[_vm._v(_vm._s(_vm.level))])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FlashcardLevelBar.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FlashcardLevelBar.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./FlashcardLevelBar.vue?vue&type=template&id=966a498c&scoped=true\"\nimport script from \"./FlashcardLevelBar.vue?vue&type=script&lang=js\"\nexport * from \"./FlashcardLevelBar.vue?vue&type=script&lang=js\"\nimport style0 from \"./FlashcardLevelBar.vue?vue&type=style&index=0&id=966a498c&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"966a498c\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FlashcardLevelBar.vue?vue&type=style&index=0&id=966a498c&prod&lang=scss&scoped=true\"","import Viewer from \"viewerjs\";\nexport { default as Viewer } from \"viewerjs\";\nimport Vue from \"vue\";\nvar freeGlobal = typeof global == \"object\" && global && global.Object === Object && global;\nvar freeGlobal$1 = freeGlobal;\nvar freeSelf = typeof self == \"object\" && self && self.Object === Object && self;\nvar root = freeGlobal$1 || freeSelf || Function(\"return this\")();\nvar root$1 = root;\nvar Symbol$1 = root$1.Symbol;\nvar Symbol$2 = Symbol$1;\nvar objectProto$8 = Object.prototype;\nvar hasOwnProperty$6 = objectProto$8.hasOwnProperty;\nvar nativeObjectToString$1 = objectProto$8.toString;\nvar symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : void 0;\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), tag = value[symToStringTag$1];\n try {\n value[symToStringTag$1] = void 0;\n var unmasked = true;\n } catch (e) {\n }\n var result = nativeObjectToString$1.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag$1] = tag;\n } else {\n delete value[symToStringTag$1];\n }\n }\n return result;\n}\nvar objectProto$7 = Object.prototype;\nvar nativeObjectToString = objectProto$7.toString;\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\nvar nullTag = \"[object Null]\", undefinedTag = \"[object Undefined]\";\nvar symToStringTag = Symbol$2 ? Symbol$2.toStringTag : void 0;\nfunction baseGetTag(value) {\n if (value == null) {\n return value === void 0 ? undefinedTag : nullTag;\n }\n return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n}\nfunction isObjectLike(value) {\n return value != null && typeof value == \"object\";\n}\nvar symbolTag = \"[object Symbol]\";\nfunction isSymbol(value) {\n return typeof value == \"symbol\" || isObjectLike(value) && baseGetTag(value) == symbolTag;\n}\nvar isArray = Array.isArray;\nvar isArray$1 = isArray;\nvar reWhitespace = /\\s/;\nfunction trimmedEndIndex(string) {\n var index2 = string.length;\n while (index2-- && reWhitespace.test(string.charAt(index2))) {\n }\n return index2;\n}\nvar reTrimStart = /^\\s+/;\nfunction baseTrim(string) {\n return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, \"\") : string;\n}\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == \"object\" || type == \"function\");\n}\nvar NAN = 0 / 0;\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\nvar reIsBinary = /^0b[01]+$/i;\nvar reIsOctal = /^0o[0-7]+$/i;\nvar freeParseInt = parseInt;\nfunction toNumber(value) {\n if (typeof value == \"number\") {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == \"function\" ? value.valueOf() : value;\n value = isObject(other) ? other + \"\" : other;\n }\n if (typeof value != \"string\") {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n}\nfunction identity(value) {\n return value;\n}\nvar asyncTag = \"[object AsyncFunction]\", funcTag$1 = \"[object Function]\", genTag = \"[object GeneratorFunction]\", proxyTag = \"[object Proxy]\";\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\nvar coreJsData = root$1[\"__core-js_shared__\"];\nvar coreJsData$1 = coreJsData;\nvar maskSrcKey = function() {\n var uid = /[^.]+$/.exec(coreJsData$1 && coreJsData$1.keys && coreJsData$1.keys.IE_PROTO || \"\");\n return uid ? \"Symbol(src)_1.\" + uid : \"\";\n}();\nfunction isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n}\nvar funcProto$1 = Function.prototype;\nvar funcToString$1 = funcProto$1.toString;\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString$1.call(func);\n } catch (e) {\n }\n try {\n return func + \"\";\n } catch (e) {\n }\n }\n return \"\";\n}\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\nvar funcProto = Function.prototype, objectProto$6 = Object.prototype;\nvar funcToString = funcProto.toString;\nvar hasOwnProperty$5 = objectProto$6.hasOwnProperty;\nvar reIsNative = RegExp(\n \"^\" + funcToString.call(hasOwnProperty$5).replace(reRegExpChar, \"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, \"$1.*?\") + \"$\"\n);\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\nfunction getValue(object, key) {\n return object == null ? void 0 : object[key];\n}\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : void 0;\n}\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0:\n return func.call(thisArg);\n case 1:\n return func.call(thisArg, args[0]);\n case 2:\n return func.call(thisArg, args[0], args[1]);\n case 3:\n return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\nvar HOT_COUNT = 800, HOT_SPAN = 16;\nvar nativeNow = Date.now;\nfunction shortOut(func) {\n var count = 0, lastCalled = 0;\n return function() {\n var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(void 0, arguments);\n };\n}\nfunction constant(value) {\n return function() {\n return value;\n };\n}\nvar defineProperty = function() {\n try {\n var func = getNative(Object, \"defineProperty\");\n func({}, \"\", {});\n return func;\n } catch (e) {\n }\n}();\nvar defineProperty$1 = defineProperty;\nvar baseSetToString = !defineProperty$1 ? identity : function(func, string) {\n return defineProperty$1(func, \"toString\", {\n \"configurable\": true,\n \"enumerable\": false,\n \"value\": constant(string),\n \"writable\": true\n });\n};\nvar baseSetToString$1 = baseSetToString;\nvar setToString = shortOut(baseSetToString$1);\nvar setToString$1 = setToString;\nvar MAX_SAFE_INTEGER$1 = 9007199254740991;\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER$1 : length;\n return !!length && (type == \"number\" || type != \"symbol\" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);\n}\nfunction baseAssignValue(object, key, value) {\n if (key == \"__proto__\" && defineProperty$1) {\n defineProperty$1(object, key, {\n \"configurable\": true,\n \"enumerable\": true,\n \"value\": value,\n \"writable\": true\n });\n } else {\n object[key] = value;\n }\n}\nfunction eq(value, other) {\n return value === other || value !== value && other !== other;\n}\nvar objectProto$5 = Object.prototype;\nvar hasOwnProperty$4 = objectProto$5.hasOwnProperty;\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) {\n baseAssignValue(object, key, value);\n }\n}\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n var index2 = -1, length = props.length;\n while (++index2 < length) {\n var key = props[index2];\n var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;\n if (newValue === void 0) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\nvar nativeMax$1 = Math.max;\nfunction overRest(func, start, transform) {\n start = nativeMax$1(start === void 0 ? func.length - 1 : start, 0);\n return function() {\n var args = arguments, index2 = -1, length = nativeMax$1(args.length - start, 0), array = Array(length);\n while (++index2 < length) {\n array[index2] = args[start + index2];\n }\n index2 = -1;\n var otherArgs = Array(start + 1);\n while (++index2 < start) {\n otherArgs[index2] = args[index2];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\nfunction baseRest(func, start) {\n return setToString$1(overRest(func, start, identity), func + \"\");\n}\nvar MAX_SAFE_INTEGER = 9007199254740991;\nfunction isLength(value) {\n return typeof value == \"number\" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\nfunction isIterateeCall(value, index2, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index2;\n if (type == \"number\" ? isArrayLike(object) && isIndex(index2, object.length) : type == \"string\" && index2 in object) {\n return eq(object[index2], value);\n }\n return false;\n}\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index2 = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;\n customizer = assigner.length > 3 && typeof customizer == \"function\" ? (length--, customizer) : void 0;\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? void 0 : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index2 < length) {\n var source = sources[index2];\n if (source) {\n assigner(object, source, index2, customizer);\n }\n }\n return object;\n });\n}\nvar objectProto$4 = Object.prototype;\nfunction isPrototype(value) {\n var Ctor = value && value.constructor, proto = typeof Ctor == \"function\" && Ctor.prototype || objectProto$4;\n return value === proto;\n}\nfunction baseTimes(n, iteratee) {\n var index2 = -1, result = Array(n);\n while (++index2 < n) {\n result[index2] = iteratee(index2);\n }\n return result;\n}\nvar argsTag$1 = \"[object Arguments]\";\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag$1;\n}\nvar objectProto$3 = Object.prototype;\nvar hasOwnProperty$3 = objectProto$3.hasOwnProperty;\nvar propertyIsEnumerable = objectProto$3.propertyIsEnumerable;\nvar isArguments = baseIsArguments(function() {\n return arguments;\n}()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty$3.call(value, \"callee\") && !propertyIsEnumerable.call(value, \"callee\");\n};\nvar isArguments$1 = isArguments;\nfunction stubFalse() {\n return false;\n}\nvar freeExports$1 = typeof exports == \"object\" && exports && !exports.nodeType && exports;\nvar freeModule$1 = freeExports$1 && typeof module == \"object\" && module && !module.nodeType && module;\nvar moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1;\nvar Buffer = moduleExports$1 ? root$1.Buffer : void 0;\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : void 0;\nvar isBuffer = nativeIsBuffer || stubFalse;\nvar isBuffer$1 = isBuffer;\nvar argsTag = \"[object Arguments]\", arrayTag = \"[object Array]\", boolTag = \"[object Boolean]\", dateTag = \"[object Date]\", errorTag = \"[object Error]\", funcTag = \"[object Function]\", mapTag = \"[object Map]\", numberTag = \"[object Number]\", objectTag = \"[object Object]\", regexpTag = \"[object RegExp]\", setTag = \"[object Set]\", stringTag = \"[object String]\", weakMapTag = \"[object WeakMap]\";\nvar arrayBufferTag = \"[object ArrayBuffer]\", dataViewTag = \"[object DataView]\", float32Tag = \"[object Float32Array]\", float64Tag = \"[object Float64Array]\", int8Tag = \"[object Int8Array]\", int16Tag = \"[object Int16Array]\", int32Tag = \"[object Int32Array]\", uint8Tag = \"[object Uint8Array]\", uint8ClampedTag = \"[object Uint8ClampedArray]\", uint16Tag = \"[object Uint16Array]\", uint32Tag = \"[object Uint32Array]\";\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\nvar freeExports = typeof exports == \"object\" && exports && !exports.nodeType && exports;\nvar freeModule = freeExports && typeof module == \"object\" && module && !module.nodeType && module;\nvar moduleExports = freeModule && freeModule.exports === freeExports;\nvar freeProcess = moduleExports && freeGlobal$1.process;\nvar nodeUtil = function() {\n try {\n var types = freeModule && freeModule.require && freeModule.require(\"util\").types;\n if (types) {\n return types;\n }\n return freeProcess && freeProcess.binding && freeProcess.binding(\"util\");\n } catch (e) {\n }\n}();\nvar nodeUtil$1 = nodeUtil;\nvar nodeIsTypedArray = nodeUtil$1 && nodeUtil$1.isTypedArray;\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\nvar isTypedArray$1 = isTypedArray;\nvar objectProto$2 = Object.prototype;\nvar hasOwnProperty$2 = objectProto$2.hasOwnProperty;\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray$1(value), isArg = !isArr && isArguments$1(value), isBuff = !isArr && !isArg && isBuffer$1(value), isType = !isArr && !isArg && !isBuff && isTypedArray$1(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;\n for (var key in value) {\n if ((inherited || hasOwnProperty$2.call(value, key)) && !(skipIndexes && (key == \"length\" || isBuff && (key == \"offset\" || key == \"parent\") || isType && (key == \"buffer\" || key == \"byteLength\" || key == \"byteOffset\") || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\nvar nativeKeys = overArg(Object.keys, Object);\nvar nativeKeys$1 = nativeKeys;\nvar objectProto$1 = Object.prototype;\nvar hasOwnProperty$1 = objectProto$1.hasOwnProperty;\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys$1(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty$1.call(object, key) && key != \"constructor\") {\n result.push(key);\n }\n }\n return result;\n}\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\nvar objectProto = Object.prototype;\nvar hasOwnProperty = objectProto.hasOwnProperty;\nvar assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n});\nvar assign$1 = assign;\nvar now = function() {\n return root$1.Date.now();\n};\nvar now$1 = now;\nvar FUNC_ERROR_TEXT = \"Expected a function\";\nvar nativeMax = Math.max, nativeMin = Math.min;\nfunction debounce(func, wait, options) {\n var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;\n if (typeof func != \"function\") {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = \"maxWait\" in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = \"trailing\" in options ? !!options.trailing : trailing;\n }\n function invokeFunc(time) {\n var args = lastArgs, thisArg = lastThis;\n lastArgs = lastThis = void 0;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n function leadingEdge(time) {\n lastInvokeTime = time;\n timerId = setTimeout(timerExpired, wait);\n return leading ? invokeFunc(time) : result;\n }\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;\n return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;\n return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n function timerExpired() {\n var time = now$1();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n function trailingEdge(time) {\n timerId = void 0;\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = void 0;\n return result;\n }\n function cancel() {\n if (timerId !== void 0) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = void 0;\n }\n function flush() {\n return timerId === void 0 ? result : trailingEdge(now$1());\n }\n function debounced() {\n var time = now$1(), isInvoking = shouldInvoke(time);\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n if (isInvoking) {\n if (timerId === void 0) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === void 0) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\nvar render = function() {\n var _vm = this;\n var _h = _vm.$createElement;\n var _c = _vm._self._c || _h;\n return _c(\"div\", [_vm._t(\"default\", null, { \"images\": _vm.images, \"options\": _vm.options })], 2);\n};\nvar staticRenderFns = [];\nfunction normalizeComponent(scriptExports, render2, staticRenderFns2, functionalTemplate, injectStyles, scopeId, moduleIdentifier, shadowMode) {\n var options = typeof scriptExports === \"function\" ? scriptExports.options : scriptExports;\n if (render2) {\n options.render = render2;\n options.staticRenderFns = staticRenderFns2;\n options._compiled = true;\n }\n if (functionalTemplate) {\n options.functional = true;\n }\n if (scopeId) {\n options._scopeId = \"data-v-\" + scopeId;\n }\n var hook;\n if (moduleIdentifier) {\n hook = function(context) {\n context = context || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext;\n if (!context && typeof __VUE_SSR_CONTEXT__ !== \"undefined\") {\n context = __VUE_SSR_CONTEXT__;\n }\n if (injectStyles) {\n injectStyles.call(this, context);\n }\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier);\n }\n };\n options._ssrRegister = hook;\n } else if (injectStyles) {\n hook = shadowMode ? function() {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n );\n } : injectStyles;\n }\n if (hook) {\n if (options.functional) {\n options._injectStyles = hook;\n var originalRender = options.render;\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context);\n return originalRender(h, context);\n };\n } else {\n var existing = options.beforeCreate;\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n }\n }\n return {\n exports: scriptExports,\n options\n };\n}\nconst __vue2_script = {\n props: {\n images: {\n type: Array\n },\n rebuild: {\n type: Boolean,\n default: false\n },\n trigger: {},\n options: {\n type: Object\n }\n },\n data() {\n return {};\n },\n computed: {},\n watch: {\n images() {\n this.$nextTick(() => {\n this.onChange();\n });\n },\n trigger: {\n handler() {\n this.$nextTick(() => {\n this.onChange();\n });\n },\n deep: true\n },\n options: {\n handler() {\n this.$nextTick(() => {\n this.rebuildViewer();\n });\n },\n deep: true\n }\n },\n mounted() {\n this.createViewer();\n },\n unmounted() {\n this.destroyViewer();\n },\n methods: {\n onChange() {\n if (this.rebuild) {\n this.rebuildViewer();\n } else {\n this.updateViewer();\n }\n },\n rebuildViewer() {\n this.destroyViewer();\n this.createViewer();\n },\n updateViewer() {\n if (this.$viewer) {\n this.$viewer.update();\n this.$emit(\"inited\", this.$viewer);\n } else {\n this.createViewer();\n }\n },\n destroyViewer() {\n this.$viewer && this.$viewer.destroy();\n },\n createViewer() {\n this.$viewer = new Viewer(this.$el, this.options);\n this.$emit(\"inited\", this.$viewer);\n }\n }\n};\nconst __cssModules = {};\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n __vue2_script,\n render,\n staticRenderFns,\n false,\n __vue2_injectStyles,\n null,\n null,\n null\n);\nfunction __vue2_injectStyles(context) {\n for (let o in __cssModules) {\n this[o] = __cssModules[o];\n }\n}\nvar component = /* @__PURE__ */ function() {\n return __component__.exports;\n}();\nconst directive = ({ name = \"viewer\", debug = false } = {}) => {\n function createViewer(el, options, rebuild = false, observer = false) {\n Vue.nextTick(() => {\n if (observer && !imageDiff(el))\n return;\n if (rebuild || !el[`$${name}`]) {\n destroyViewer(el);\n el[`$${name}`] = new Viewer(el, options);\n log(\"Viewer created\");\n } else {\n el[`$${name}`].update();\n log(\"Viewer updated\");\n }\n });\n }\n function imageDiff(el) {\n const imageContent = el.innerHTML.match(//g);\n const viewerImageText = imageContent ? imageContent.join(\"\") : void 0;\n if (el.__viewerImageDiffCache === viewerImageText) {\n log(\"Element change detected, but image(s) has not changed\");\n return false;\n } else {\n log(\"Image change detected\");\n el.__viewerImageDiffCache = viewerImageText;\n return true;\n }\n }\n function createObserver(el, options, debouncedCreateViewer, rebuild) {\n destroyObserver(el);\n const MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;\n if (!MutationObserver) {\n log(\"Observer not supported\");\n return;\n }\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n log(`Viewer mutation:${mutation.type}`);\n debouncedCreateViewer(el, options, rebuild, true);\n });\n });\n const config = { attributes: true, childList: true, characterData: true, subtree: true };\n observer.observe(el, config);\n el.__viewerMutationObserver = observer;\n log(\"Observer created\");\n }\n function createWatcher(el, { expression }, vnode, debouncedCreateViewer) {\n const simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/;\n if (!expression || !simplePathRE.test(expression)) {\n log(\"Only simple dot-delimited paths can create watcher\");\n return;\n }\n el.__viewerUnwatch = vnode.context.$watch(expression, (newVal, oldVal) => {\n log(\"Change detected by watcher: \", expression);\n debouncedCreateViewer(el, newVal, true);\n }, {\n deep: true\n });\n log(\"Watcher created, expression: \", expression);\n }\n function destroyViewer(el) {\n if (!el[`$${name}`]) {\n return;\n }\n el[`$${name}`].destroy();\n delete el[`$${name}`];\n log(\"Viewer destroyed\");\n }\n function destroyObserver(el) {\n if (!el.__viewerMutationObserver) {\n return;\n }\n el.__viewerMutationObserver.disconnect();\n delete el.__viewerMutationObserver;\n log(\"Observer destroyed\");\n }\n function destroyWatcher(el) {\n if (!el.__viewerUnwatch) {\n return;\n }\n el.__viewerUnwatch();\n delete el.__viewerUnwatch;\n log(\"Watcher destroyed\");\n }\n function log() {\n debug && console.log(...arguments);\n }\n const directive2 = {\n bind(el, binding, vnode) {\n log(\"Viewer bind\");\n const debouncedCreateViewer = debounce(createViewer, 50);\n debouncedCreateViewer(el, binding.value);\n createWatcher(el, binding, vnode, debouncedCreateViewer);\n if (!binding.modifiers.static) {\n createObserver(el, binding.value, debouncedCreateViewer, binding.modifiers.rebuild);\n }\n },\n unbind(el, binding) {\n log(\"Viewer unbind\");\n destroyObserver(el);\n destroyWatcher(el);\n destroyViewer(el);\n }\n };\n return directive2;\n};\nconst api = ({ images = [], options = {} } = {}) => {\n options = assign$1(options, {\n inline: false\n });\n const ViewerToken = Vue.extend({\n render(h) {\n return h(\n \"div\",\n {\n style: {\n display: \"none\"\n },\n class: [\"__viewer-token\"]\n },\n images.map((attr) => {\n return h(\n \"img\",\n {\n attrs: typeof attr === \"string\" ? { src: attr } : attr\n }\n );\n })\n );\n }\n });\n const token = new ViewerToken();\n token.$mount();\n document.body.appendChild(token.$el);\n const $viewer = new Viewer(token.$el, options);\n const $destroy = $viewer.destroy.bind($viewer);\n $viewer.destroy = function() {\n $destroy();\n token.$destroy();\n document.body.removeChild(token.$el);\n return $viewer;\n };\n $viewer.show();\n token.$el.addEventListener(\"hidden\", function() {\n if (this.viewer === $viewer) {\n $viewer.destroy();\n }\n });\n return $viewer;\n};\nvar index = {\n install(Vue2, { name = \"viewer\", debug = false, defaultOptions } = {}) {\n Viewer.setDefaults(defaultOptions);\n Vue2.component(name, assign$1(component, { name }));\n Vue2.directive(name, directive({ name, debug }));\n Vue2.prototype[`$${name}Api`] = api;\n },\n setDefaults(defaultOptions) {\n Viewer.setDefaults(defaultOptions);\n }\n};\nexport { api, component, index as default, directive };\n","/*!\n * Viewer.js v1.11.6\n * https://fengyuanchen.github.io/viewerjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2023-09-17T03:16:38.052Z\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Viewer = factory());\n})(this, (function () { 'use strict';\n\n function ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n }\n function _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n }\n function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\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 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, _toPropertyKey(descriptor.key), descriptor);\n }\n }\n function _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 function _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\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 return obj;\n }\n function _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n }\n function _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n }\n\n var DEFAULTS = {\n /**\n * Enable a modal backdrop, specify `static` for a backdrop\n * which doesn't close the modal on click.\n * @type {boolean}\n */\n backdrop: true,\n /**\n * Show the button on the top-right of the viewer.\n * @type {boolean}\n */\n button: true,\n /**\n * Show the navbar.\n * @type {boolean | number}\n */\n navbar: true,\n /**\n * Specify the visibility and the content of the title.\n * @type {boolean | number | Function | Array}\n */\n title: true,\n /**\n * Show the toolbar.\n * @type {boolean | number | Object}\n */\n toolbar: true,\n /**\n * Custom class name(s) to add to the viewer's root element.\n * @type {string}\n */\n className: '',\n /**\n * Define where to put the viewer in modal mode.\n * @type {string | Element}\n */\n container: 'body',\n /**\n * Filter the images for viewing. Return true if the image is viewable.\n * @type {Function}\n */\n filter: null,\n /**\n * Enable to request fullscreen when play.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/FullscreenOptions}\n * @type {boolean|FullscreenOptions}\n */\n fullscreen: true,\n /**\n * Define the extra attributes to inherit from the original image.\n * @type {Array}\n */\n inheritedAttributes: ['crossOrigin', 'decoding', 'isMap', 'loading', 'referrerPolicy', 'sizes', 'srcset', 'useMap'],\n /**\n * Define the initial coverage of the viewing image.\n * @type {number}\n */\n initialCoverage: 0.9,\n /**\n * Define the initial index of the image for viewing.\n * @type {number}\n */\n initialViewIndex: 0,\n /**\n * Enable inline mode.\n * @type {boolean}\n */\n inline: false,\n /**\n * The amount of time to delay between automatically cycling an image when playing.\n * @type {number}\n */\n interval: 5000,\n /**\n * Enable keyboard support.\n * @type {boolean}\n */\n keyboard: true,\n /**\n * Focus the viewer when initialized.\n * @type {boolean}\n */\n focus: true,\n /**\n * Indicate if show a loading spinner when load image or not.\n * @type {boolean}\n */\n loading: true,\n /**\n * Indicate if enable loop viewing or not.\n * @type {boolean}\n */\n loop: true,\n /**\n * Min width of the viewer in inline mode.\n * @type {number}\n */\n minWidth: 200,\n /**\n * Min height of the viewer in inline mode.\n * @type {number}\n */\n minHeight: 100,\n /**\n * Enable to move the image.\n * @type {boolean}\n */\n movable: true,\n /**\n * Enable to rotate the image.\n * @type {boolean}\n */\n rotatable: true,\n /**\n * Enable to scale the image.\n * @type {boolean}\n */\n scalable: true,\n /**\n * Enable to zoom the image.\n * @type {boolean}\n */\n zoomable: true,\n /**\n * Enable to zoom the current image by dragging on the touch screen.\n * @type {boolean}\n */\n zoomOnTouch: true,\n /**\n * Enable to zoom the image by wheeling mouse.\n * @type {boolean}\n */\n zoomOnWheel: true,\n /**\n * Enable to slide to the next or previous image by swiping on the touch screen.\n * @type {boolean}\n */\n slideOnTouch: true,\n /**\n * Indicate if toggle the image size between its natural size\n * and initial size when double click on the image or not.\n * @type {boolean}\n */\n toggleOnDblclick: true,\n /**\n * Show the tooltip with image ratio (percentage) when zoom in or zoom out.\n * @type {boolean}\n */\n tooltip: true,\n /**\n * Enable CSS3 Transition for some special elements.\n * @type {boolean}\n */\n transition: true,\n /**\n * Define the CSS `z-index` value of viewer in modal mode.\n * @type {number}\n */\n zIndex: 2015,\n /**\n * Define the CSS `z-index` value of viewer in inline mode.\n * @type {number}\n */\n zIndexInline: 0,\n /**\n * Define the ratio when zoom the image by wheeling mouse.\n * @type {number}\n */\n zoomRatio: 0.1,\n /**\n * Define the min ratio of the image when zoom out.\n * @type {number}\n */\n minZoomRatio: 0.01,\n /**\n * Define the max ratio of the image when zoom in.\n * @type {number}\n */\n maxZoomRatio: 100,\n /**\n * Define where to get the original image URL for viewing.\n * @type {string | Function}\n */\n url: 'src',\n /**\n * Event shortcuts.\n * @type {Function}\n */\n ready: null,\n show: null,\n shown: null,\n hide: null,\n hidden: null,\n view: null,\n viewed: null,\n move: null,\n moved: null,\n rotate: null,\n rotated: null,\n scale: null,\n scaled: null,\n zoom: null,\n zoomed: null,\n play: null,\n stop: null\n };\n\n var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ';\n\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'viewer';\n\n // Actions\n var ACTION_MOVE = 'move';\n var ACTION_SWITCH = 'switch';\n var ACTION_ZOOM = 'zoom';\n\n // Classes\n var CLASS_ACTIVE = \"\".concat(NAMESPACE, \"-active\");\n var CLASS_CLOSE = \"\".concat(NAMESPACE, \"-close\");\n var CLASS_FADE = \"\".concat(NAMESPACE, \"-fade\");\n var CLASS_FIXED = \"\".concat(NAMESPACE, \"-fixed\");\n var CLASS_FULLSCREEN = \"\".concat(NAMESPACE, \"-fullscreen\");\n var CLASS_FULLSCREEN_EXIT = \"\".concat(NAMESPACE, \"-fullscreen-exit\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_HIDE_MD_DOWN = \"\".concat(NAMESPACE, \"-hide-md-down\");\n var CLASS_HIDE_SM_DOWN = \"\".concat(NAMESPACE, \"-hide-sm-down\");\n var CLASS_HIDE_XS_DOWN = \"\".concat(NAMESPACE, \"-hide-xs-down\");\n var CLASS_IN = \"\".concat(NAMESPACE, \"-in\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_LOADING = \"\".concat(NAMESPACE, \"-loading\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n var CLASS_OPEN = \"\".concat(NAMESPACE, \"-open\");\n var CLASS_SHOW = \"\".concat(NAMESPACE, \"-show\");\n var CLASS_TRANSITION = \"\".concat(NAMESPACE, \"-transition\");\n\n // Native events\n var EVENT_CLICK = 'click';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_DRAG_START = 'dragstart';\n var EVENT_FOCUSIN = 'focusin';\n var EVENT_KEY_DOWN = 'keydown';\n var EVENT_LOAD = 'load';\n var EVENT_ERROR = 'error';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_RESIZE = 'resize';\n var EVENT_TRANSITION_END = 'transitionend';\n var EVENT_WHEEL = 'wheel';\n\n // Custom events\n var EVENT_READY = 'ready';\n var EVENT_SHOW = 'show';\n var EVENT_SHOWN = 'shown';\n var EVENT_HIDE = 'hide';\n var EVENT_HIDDEN = 'hidden';\n var EVENT_VIEW = 'view';\n var EVENT_VIEWED = 'viewed';\n var EVENT_MOVE = 'move';\n var EVENT_MOVED = 'moved';\n var EVENT_ROTATE = 'rotate';\n var EVENT_ROTATED = 'rotated';\n var EVENT_SCALE = 'scale';\n var EVENT_SCALED = 'scaled';\n var EVENT_ZOOM = 'zoom';\n var EVENT_ZOOMED = 'zoomed';\n var EVENT_PLAY = 'play';\n var EVENT_STOP = 'stop';\n\n // Data keys\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n\n // RegExps\n var REGEXP_SPACES = /\\s\\s*/;\n\n // Misc\n var BUTTONS = ['zoom-in', 'zoom-out', 'one-to-one', 'reset', 'prev', 'play', 'next', 'rotate-left', 'rotate-right', 'flip-horizontal', 'flip-vertical'];\n\n /**\n * Check if the given value is a string.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a string, else `false`.\n */\n function isString(value) {\n return typeof value === 'string';\n }\n\n /**\n * Check if the given value is not a number.\n */\n var isNaN = Number.isNaN || WINDOW.isNaN;\n\n /**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n\n /**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n\n /**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\n function isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n }\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n /**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\n function isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\n function isFunction(value) {\n return typeof value === 'function';\n }\n\n /**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\n function forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n var length = data.length;\n var i;\n for (i = 0; i < length; i += 1) {\n if (callback.call(data, data[i], i, data) === false) {\n break;\n }\n }\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n return data;\n }\n\n /**\n * Extend the given object.\n * @param {*} obj - The object to be extended.\n * @param {*} args - The rest objects which will be merged to the first object.\n * @returns {Object} The extended object.\n */\n var assign = Object.assign || function assign(obj) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (isObject(obj) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n obj[key] = arg[key];\n });\n }\n });\n }\n return obj;\n };\n var REGEXP_SUFFIX = /^(?:width|height|left|top|marginLeft|marginTop)$/;\n\n /**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n function setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value += 'px';\n }\n style[property] = value;\n });\n }\n\n /**\n * Escape a string for using in HTML.\n * @param {String} value - The string to escape.\n * @returns {String} Returns the escaped string.\n */\n function escapeHTMLEntities(value) {\n return isString(value) ? value.replace(/&(?!amp;|quot;|#39;|lt;|gt;)/g, '&').replace(/\"/g, '"').replace(/'/g, ''').replace(//g, '>') : value;\n }\n\n /**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\n function hasClass(element, value) {\n if (!element || !value) {\n return false;\n }\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n }\n\n /**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\n function addClass(element, value) {\n if (!element || !value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n }\n\n /**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\n function removeClass(element, value) {\n if (!element || !value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n }\n\n /**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\n function toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n }\n var REGEXP_HYPHENATE = /([a-z\\d])([A-Z])/g;\n\n /**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\n function hyphenate(value) {\n return value.replace(REGEXP_HYPHENATE, '$1-$2').toLowerCase();\n }\n\n /**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\n function getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(hyphenate(name)));\n }\n\n /**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\n function setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(hyphenate(name)), data);\n }\n }\n var onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n return supported;\n }();\n\n /**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\n }\n\n /**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\n }\n\n /**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @param {Object} options - The additional event options.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n function dispatchEvent(element, type, data, options) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, _objectSpread2({\n bubbles: true,\n cancelable: true,\n detail: data\n }, options));\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n return element.dispatchEvent(event);\n }\n\n /**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\n function getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n }\n\n /**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\n function getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n }\n\n /**\n * Get an image name from an image url.\n * @param {string} url - The target url.\n * @example\n * // picture.jpg\n * getImageNameFromURL('https://domain.com/path/to/picture.jpg?size=1280×960')\n * @returns {string} A string contains the image name.\n */\n function getImageNameFromURL(url) {\n return isString(url) ? decodeURIComponent(url.replace(/^.*\\//, '').replace(/[?&#].*$/, '')) : '';\n }\n var IS_SAFARI = WINDOW.navigator && /Version\\/\\d+(\\.\\d+)+?\\s+Safari/i.test(WINDOW.navigator.userAgent);\n\n /**\n * Get an image's natural sizes.\n * @param {string} image - The target image.\n * @param {Object} options - The viewer options.\n * @param {Function} callback - The callback function.\n * @returns {HTMLImageElement} The new image.\n */\n function getImageNaturalSizes(image, options, callback) {\n var newImage = document.createElement('img');\n\n // Modern browsers (except Safari)\n if (image.naturalWidth && !IS_SAFARI) {\n callback(image.naturalWidth, image.naturalHeight);\n return newImage;\n }\n var body = document.body || document.documentElement;\n newImage.onload = function () {\n callback(newImage.width, newImage.height);\n if (!IS_SAFARI) {\n body.removeChild(newImage);\n }\n };\n forEach(options.inheritedAttributes, function (name) {\n var value = image.getAttribute(name);\n if (value !== null) {\n newImage.setAttribute(name, value);\n }\n });\n newImage.src = image.src;\n\n // iOS Safari will convert the image automatically\n // with its orientation once append it into DOM\n if (!IS_SAFARI) {\n newImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(newImage);\n }\n return newImage;\n }\n\n /**\n * Get the related class name of a responsive type number.\n * @param {string} type - The responsive type.\n * @returns {string} The related class name.\n */\n function getResponsiveClass(type) {\n switch (type) {\n case 2:\n return CLASS_HIDE_XS_DOWN;\n case 3:\n return CLASS_HIDE_SM_DOWN;\n case 4:\n return CLASS_HIDE_MD_DOWN;\n default:\n return '';\n }\n }\n\n /**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\n function getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n var ratios = [];\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n ratios.push(ratio);\n });\n });\n ratios.sort(function (a, b) {\n return Math.abs(a) < Math.abs(b);\n });\n return ratios[0];\n }\n\n /**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n function getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n timeStamp: Date.now(),\n startX: pageX,\n startY: pageY\n }, end);\n }\n\n /**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\n function getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n }\n\n var render = {\n render: function render() {\n this.initContainer();\n this.initViewer();\n this.initList();\n this.renderViewer();\n },\n initBody: function initBody() {\n var ownerDocument = this.element.ownerDocument;\n var body = ownerDocument.body || ownerDocument.documentElement;\n this.body = body;\n this.scrollbarWidth = window.innerWidth - ownerDocument.documentElement.clientWidth;\n this.initialBodyPaddingRight = body.style.paddingRight;\n this.initialBodyComputedPaddingRight = window.getComputedStyle(body).paddingRight;\n },\n initContainer: function initContainer() {\n this.containerData = {\n width: window.innerWidth,\n height: window.innerHeight\n };\n },\n initViewer: function initViewer() {\n var options = this.options,\n parent = this.parent;\n var viewerData;\n if (options.inline) {\n viewerData = {\n width: Math.max(parent.offsetWidth, options.minWidth),\n height: Math.max(parent.offsetHeight, options.minHeight)\n };\n this.parentData = viewerData;\n }\n if (this.fulled || !viewerData) {\n viewerData = this.containerData;\n }\n this.viewerData = assign({}, viewerData);\n },\n renderViewer: function renderViewer() {\n if (this.options.inline && !this.fulled) {\n setStyle(this.viewer, this.viewerData);\n }\n },\n initList: function initList() {\n var _this = this;\n var element = this.element,\n options = this.options,\n list = this.list;\n var items = [];\n\n // initList may be called in this.update, so should keep idempotent\n list.innerHTML = '';\n forEach(this.images, function (image, index) {\n var src = image.src;\n var alt = image.alt || getImageNameFromURL(src);\n var url = _this.getImageURL(image);\n if (src || url) {\n var item = document.createElement('li');\n var img = document.createElement('img');\n forEach(options.inheritedAttributes, function (name) {\n var value = image.getAttribute(name);\n if (value !== null) {\n img.setAttribute(name, value);\n }\n });\n if (options.navbar) {\n img.src = src || url;\n }\n img.alt = alt;\n img.setAttribute('data-original-url', url || src);\n item.setAttribute('data-index', index);\n item.setAttribute('data-viewer-action', 'view');\n item.setAttribute('role', 'button');\n if (options.keyboard) {\n item.setAttribute('tabindex', 0);\n }\n item.appendChild(img);\n list.appendChild(item);\n items.push(item);\n }\n });\n this.items = items;\n forEach(items, function (item) {\n var image = item.firstElementChild;\n var onLoad;\n var onError;\n setData(image, 'filled', true);\n if (options.loading) {\n addClass(item, CLASS_LOADING);\n }\n addListener(image, EVENT_LOAD, onLoad = function onLoad(event) {\n removeListener(image, EVENT_ERROR, onError);\n if (options.loading) {\n removeClass(item, CLASS_LOADING);\n }\n _this.loadImage(event);\n }, {\n once: true\n });\n addListener(image, EVENT_ERROR, onError = function onError() {\n removeListener(image, EVENT_LOAD, onLoad);\n if (options.loading) {\n removeClass(item, CLASS_LOADING);\n }\n }, {\n once: true\n });\n });\n if (options.transition) {\n addListener(element, EVENT_VIEWED, function () {\n addClass(list, CLASS_TRANSITION);\n }, {\n once: true\n });\n }\n },\n renderList: function renderList() {\n var index = this.index;\n var item = this.items[index];\n if (!item) {\n return;\n }\n var next = item.nextElementSibling;\n var gutter = parseInt(window.getComputedStyle(next || item).marginLeft, 10);\n var offsetWidth = item.offsetWidth;\n var outerWidth = offsetWidth + gutter;\n\n // Place the active item in the center of the screen\n setStyle(this.list, assign({\n width: outerWidth * this.length - gutter\n }, getTransforms({\n translateX: (this.viewerData.width - offsetWidth) / 2 - outerWidth * index\n })));\n },\n resetList: function resetList() {\n var list = this.list;\n list.innerHTML = '';\n removeClass(list, CLASS_TRANSITION);\n setStyle(list, getTransforms({\n translateX: 0\n }));\n },\n initImage: function initImage(done) {\n var _this2 = this;\n var options = this.options,\n image = this.image,\n viewerData = this.viewerData;\n var footerHeight = this.footer.offsetHeight;\n var viewerWidth = viewerData.width;\n var viewerHeight = Math.max(viewerData.height - footerHeight, footerHeight);\n var oldImageData = this.imageData || {};\n var sizingImage;\n this.imageInitializing = {\n abort: function abort() {\n sizingImage.onload = null;\n }\n };\n sizingImage = getImageNaturalSizes(image, options, function (naturalWidth, naturalHeight) {\n var aspectRatio = naturalWidth / naturalHeight;\n var initialCoverage = Math.max(0, Math.min(1, options.initialCoverage));\n var width = viewerWidth;\n var height = viewerHeight;\n _this2.imageInitializing = false;\n if (viewerHeight * aspectRatio > viewerWidth) {\n height = viewerWidth / aspectRatio;\n } else {\n width = viewerHeight * aspectRatio;\n }\n initialCoverage = isNumber(initialCoverage) ? initialCoverage : 0.9;\n width = Math.min(width * initialCoverage, naturalWidth);\n height = Math.min(height * initialCoverage, naturalHeight);\n var left = (viewerWidth - width) / 2;\n var top = (viewerHeight - height) / 2;\n var imageData = {\n left: left,\n top: top,\n x: left,\n y: top,\n width: width,\n height: height,\n oldRatio: 1,\n ratio: width / naturalWidth,\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight\n };\n var initialImageData = assign({}, imageData);\n if (options.rotatable) {\n imageData.rotate = oldImageData.rotate || 0;\n initialImageData.rotate = 0;\n }\n if (options.scalable) {\n imageData.scaleX = oldImageData.scaleX || 1;\n imageData.scaleY = oldImageData.scaleY || 1;\n initialImageData.scaleX = 1;\n initialImageData.scaleY = 1;\n }\n _this2.imageData = imageData;\n _this2.initialImageData = initialImageData;\n if (done) {\n done();\n }\n });\n },\n renderImage: function renderImage(done) {\n var _this3 = this;\n var image = this.image,\n imageData = this.imageData;\n setStyle(image, assign({\n width: imageData.width,\n height: imageData.height,\n // XXX: Not to use translateX/Y to avoid image shaking when zooming\n marginLeft: imageData.x,\n marginTop: imageData.y\n }, getTransforms(imageData)));\n if (done) {\n if ((this.viewing || this.moving || this.rotating || this.scaling || this.zooming) && this.options.transition && hasClass(image, CLASS_TRANSITION)) {\n var onTransitionEnd = function onTransitionEnd() {\n _this3.imageRendering = false;\n done();\n };\n this.imageRendering = {\n abort: function abort() {\n removeListener(image, EVENT_TRANSITION_END, onTransitionEnd);\n }\n };\n addListener(image, EVENT_TRANSITION_END, onTransitionEnd, {\n once: true\n });\n } else {\n done();\n }\n }\n },\n resetImage: function resetImage() {\n var image = this.image;\n if (image) {\n if (this.viewing) {\n this.viewing.abort();\n }\n image.parentNode.removeChild(image);\n this.image = null;\n this.title.innerHTML = '';\n }\n }\n };\n\n var events = {\n bind: function bind() {\n var options = this.options,\n viewer = this.viewer,\n canvas = this.canvas;\n var document = this.element.ownerDocument;\n addListener(viewer, EVENT_CLICK, this.onClick = this.click.bind(this));\n addListener(viewer, EVENT_DRAG_START, this.onDragStart = this.dragstart.bind(this));\n addListener(canvas, EVENT_POINTER_DOWN, this.onPointerDown = this.pointerdown.bind(this));\n addListener(document, EVENT_POINTER_MOVE, this.onPointerMove = this.pointermove.bind(this));\n addListener(document, EVENT_POINTER_UP, this.onPointerUp = this.pointerup.bind(this));\n addListener(document, EVENT_KEY_DOWN, this.onKeyDown = this.keydown.bind(this));\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n if (options.zoomable && options.zoomOnWheel) {\n addListener(viewer, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n if (options.toggleOnDblclick) {\n addListener(canvas, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n },\n unbind: function unbind() {\n var options = this.options,\n viewer = this.viewer,\n canvas = this.canvas;\n var document = this.element.ownerDocument;\n removeListener(viewer, EVENT_CLICK, this.onClick);\n removeListener(viewer, EVENT_DRAG_START, this.onDragStart);\n removeListener(canvas, EVENT_POINTER_DOWN, this.onPointerDown);\n removeListener(document, EVENT_POINTER_MOVE, this.onPointerMove);\n removeListener(document, EVENT_POINTER_UP, this.onPointerUp);\n removeListener(document, EVENT_KEY_DOWN, this.onKeyDown);\n removeListener(window, EVENT_RESIZE, this.onResize);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(viewer, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleOnDblclick) {\n removeListener(canvas, EVENT_DBLCLICK, this.onDblclick);\n }\n }\n };\n\n var handlers = {\n click: function click(event) {\n var options = this.options,\n imageData = this.imageData;\n var target = event.target;\n var action = getData(target, DATA_ACTION);\n if (!action && target.localName === 'img' && target.parentElement.localName === 'li') {\n target = target.parentElement;\n action = getData(target, DATA_ACTION);\n }\n\n // Cancel the emulated click when the native click event was triggered.\n if (IS_TOUCH_DEVICE && event.isTrusted && target === this.canvas) {\n clearTimeout(this.clickCanvasTimeout);\n }\n switch (action) {\n case 'mix':\n if (this.played) {\n this.stop();\n } else if (options.inline) {\n if (this.fulled) {\n this.exit();\n } else {\n this.full();\n }\n } else {\n this.hide();\n }\n break;\n case 'hide':\n if (!this.pointerMoved) {\n this.hide();\n }\n break;\n case 'view':\n this.view(getData(target, 'index'));\n break;\n case 'zoom-in':\n this.zoom(0.1, true);\n break;\n case 'zoom-out':\n this.zoom(-0.1, true);\n break;\n case 'one-to-one':\n this.toggle();\n break;\n case 'reset':\n this.reset();\n break;\n case 'prev':\n this.prev(options.loop);\n break;\n case 'play':\n this.play(options.fullscreen);\n break;\n case 'next':\n this.next(options.loop);\n break;\n case 'rotate-left':\n this.rotate(-90);\n break;\n case 'rotate-right':\n this.rotate(90);\n break;\n case 'flip-horizontal':\n this.scaleX(-imageData.scaleX || -1);\n break;\n case 'flip-vertical':\n this.scaleY(-imageData.scaleY || -1);\n break;\n default:\n if (this.played) {\n this.stop();\n }\n }\n },\n dblclick: function dblclick(event) {\n event.preventDefault();\n if (this.viewed && event.target === this.image) {\n // Cancel the emulated double click when the native dblclick event was triggered.\n if (IS_TOUCH_DEVICE && event.isTrusted) {\n clearTimeout(this.doubleClickImageTimeout);\n }\n\n // XXX: No pageX/Y properties in custom event, fallback to the original event.\n this.toggle(event.isTrusted ? event : event.detail && event.detail.originalEvent);\n }\n },\n load: function load() {\n var _this = this;\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = false;\n }\n var element = this.element,\n options = this.options,\n image = this.image,\n index = this.index,\n viewerData = this.viewerData;\n removeClass(image, CLASS_INVISIBLE);\n if (options.loading) {\n removeClass(this.canvas, CLASS_LOADING);\n }\n image.style.cssText = 'height:0;' + \"margin-left:\".concat(viewerData.width / 2, \"px;\") + \"margin-top:\".concat(viewerData.height / 2, \"px;\") + 'max-width:none!important;' + 'position:relative;' + 'width:0;';\n this.initImage(function () {\n toggleClass(image, CLASS_MOVE, options.movable);\n toggleClass(image, CLASS_TRANSITION, options.transition);\n _this.renderImage(function () {\n _this.viewed = true;\n _this.viewing = false;\n if (isFunction(options.viewed)) {\n addListener(element, EVENT_VIEWED, options.viewed, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_VIEWED, {\n originalImage: _this.images[index],\n index: index,\n image: image\n }, {\n cancelable: false\n });\n });\n });\n },\n loadImage: function loadImage(event) {\n var image = event.target;\n var parent = image.parentNode;\n var parentWidth = parent.offsetWidth || 30;\n var parentHeight = parent.offsetHeight || 50;\n var filled = !!getData(image, 'filled');\n getImageNaturalSizes(image, this.options, function (naturalWidth, naturalHeight) {\n var aspectRatio = naturalWidth / naturalHeight;\n var width = parentWidth;\n var height = parentHeight;\n if (parentHeight * aspectRatio > parentWidth) {\n if (filled) {\n width = parentHeight * aspectRatio;\n } else {\n height = parentWidth / aspectRatio;\n }\n } else if (filled) {\n height = parentWidth / aspectRatio;\n } else {\n width = parentHeight * aspectRatio;\n }\n setStyle(image, assign({\n width: width,\n height: height\n }, getTransforms({\n translateX: (parentWidth - width) / 2,\n translateY: (parentHeight - height) / 2\n })));\n });\n },\n keydown: function keydown(event) {\n var options = this.options;\n if (!options.keyboard) {\n return;\n }\n var keyCode = event.keyCode || event.which || event.charCode;\n switch (keyCode) {\n // Enter\n case 13:\n if (this.viewer.contains(event.target)) {\n this.click(event);\n }\n break;\n }\n if (!this.fulled) {\n return;\n }\n switch (keyCode) {\n // Escape\n case 27:\n if (this.played) {\n this.stop();\n } else if (options.inline) {\n if (this.fulled) {\n this.exit();\n }\n } else {\n this.hide();\n }\n break;\n\n // Space\n case 32:\n if (this.played) {\n this.stop();\n }\n break;\n\n // ArrowLeft\n case 37:\n if (this.played && this.playing) {\n this.playing.prev();\n } else {\n this.prev(options.loop);\n }\n break;\n\n // ArrowUp\n case 38:\n // Prevent scroll on Firefox\n event.preventDefault();\n\n // Zoom in\n this.zoom(options.zoomRatio, true);\n break;\n\n // ArrowRight\n case 39:\n if (this.played && this.playing) {\n this.playing.next();\n } else {\n this.next(options.loop);\n }\n break;\n\n // ArrowDown\n case 40:\n // Prevent scroll on Firefox\n event.preventDefault();\n\n // Zoom out\n this.zoom(-options.zoomRatio, true);\n break;\n\n // Ctrl + 0\n case 48:\n // Fall through\n\n // Ctrl + 1\n // eslint-disable-next-line no-fallthrough\n case 49:\n if (event.ctrlKey) {\n event.preventDefault();\n this.toggle();\n }\n break;\n }\n },\n dragstart: function dragstart(event) {\n if (event.target.localName === 'img') {\n event.preventDefault();\n }\n },\n pointerdown: function pointerdown(event) {\n var options = this.options,\n pointers = this.pointers;\n var buttons = event.buttons,\n button = event.button;\n this.pointerMoved = false;\n if (!this.viewed || this.showing || this.viewing || this.hiding\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n\n // Prevent default behaviours as page zooming in touch devices.\n event.preventDefault();\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n pointers[event.pointerId || 0] = getPointer(event);\n }\n var action = options.movable ? ACTION_MOVE : false;\n if (options.zoomOnTouch && options.zoomable && Object.keys(pointers).length > 1) {\n action = ACTION_ZOOM;\n } else if (options.slideOnTouch && (event.pointerType === 'touch' || event.type === 'touchstart') && this.isSwitchable()) {\n action = ACTION_SWITCH;\n }\n if (options.transition && (action === ACTION_MOVE || action === ACTION_ZOOM)) {\n removeClass(this.image, CLASS_TRANSITION);\n }\n this.action = action;\n },\n pointermove: function pointermove(event) {\n var pointers = this.pointers,\n action = this.action;\n if (!this.viewed || !action) {\n return;\n }\n event.preventDefault();\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n this.change(event);\n },\n pointerup: function pointerup(event) {\n var _this2 = this;\n var options = this.options,\n action = this.action,\n pointers = this.pointers;\n var pointer;\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n pointer = pointers[touch.identifier];\n delete pointers[touch.identifier];\n });\n } else {\n pointer = pointers[event.pointerId || 0];\n delete pointers[event.pointerId || 0];\n }\n if (!action) {\n return;\n }\n event.preventDefault();\n if (options.transition && (action === ACTION_MOVE || action === ACTION_ZOOM)) {\n addClass(this.image, CLASS_TRANSITION);\n }\n this.action = false;\n\n // Emulate click and double click in touch devices to support backdrop and image zooming (#210).\n if (IS_TOUCH_DEVICE && action !== ACTION_ZOOM && pointer && Date.now() - pointer.timeStamp < 500) {\n clearTimeout(this.clickCanvasTimeout);\n clearTimeout(this.doubleClickImageTimeout);\n if (options.toggleOnDblclick && this.viewed && event.target === this.image) {\n if (this.imageClicked) {\n this.imageClicked = false;\n\n // This timeout will be cleared later when a native dblclick event is triggering\n this.doubleClickImageTimeout = setTimeout(function () {\n dispatchEvent(_this2.image, EVENT_DBLCLICK, {\n originalEvent: event\n });\n }, 50);\n } else {\n this.imageClicked = true;\n\n // The default timing of a double click in Windows is 500 ms\n this.doubleClickImageTimeout = setTimeout(function () {\n _this2.imageClicked = false;\n }, 500);\n }\n } else {\n this.imageClicked = false;\n if (options.backdrop && options.backdrop !== 'static' && event.target === this.canvas) {\n // This timeout will be cleared later when a native click event is triggering\n this.clickCanvasTimeout = setTimeout(function () {\n dispatchEvent(_this2.canvas, EVENT_CLICK, {\n originalEvent: event\n });\n }, 50);\n }\n }\n }\n },\n resize: function resize() {\n var _this3 = this;\n if (!this.isShown || this.hiding) {\n return;\n }\n if (this.fulled) {\n this.close();\n this.initBody();\n this.open();\n }\n this.initContainer();\n this.initViewer();\n this.renderViewer();\n this.renderList();\n if (this.viewed) {\n this.initImage(function () {\n _this3.renderImage();\n });\n }\n if (this.played) {\n if (this.options.fullscreen && this.fulled && !(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) {\n this.stop();\n return;\n }\n forEach(this.player.getElementsByTagName('img'), function (image) {\n addListener(image, EVENT_LOAD, _this3.loadImage.bind(_this3), {\n once: true\n });\n dispatchEvent(image, EVENT_LOAD);\n });\n }\n },\n wheel: function wheel(event) {\n var _this4 = this;\n if (!this.viewed) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this4.wheeling = false;\n }, 50);\n var ratio = Number(this.options.zoomRatio) || 0.1;\n var delta = 1;\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n this.zoom(-delta * ratio, true, null, event);\n }\n };\n\n var methods = {\n /** Show the viewer (only available in modal mode)\n * @param {boolean} [immediate=false] - Indicates if show the viewer immediately or not.\n * @returns {Viewer} this\n */\n show: function show() {\n var immediate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var element = this.element,\n options = this.options;\n if (options.inline || this.showing || this.isShown || this.showing) {\n return this;\n }\n if (!this.ready) {\n this.build();\n if (this.ready) {\n this.show(immediate);\n }\n return this;\n }\n if (isFunction(options.show)) {\n addListener(element, EVENT_SHOW, options.show, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_SHOW) === false || !this.ready) {\n return this;\n }\n if (this.hiding) {\n this.transitioning.abort();\n }\n this.showing = true;\n this.open();\n var viewer = this.viewer;\n removeClass(viewer, CLASS_HIDE);\n viewer.setAttribute('role', 'dialog');\n viewer.setAttribute('aria-labelledby', this.title.id);\n viewer.setAttribute('aria-modal', true);\n viewer.removeAttribute('aria-hidden');\n if (options.transition && !immediate) {\n var shown = this.shown.bind(this);\n this.transitioning = {\n abort: function abort() {\n removeListener(viewer, EVENT_TRANSITION_END, shown);\n removeClass(viewer, CLASS_IN);\n }\n };\n addClass(viewer, CLASS_TRANSITION);\n\n // Force reflow to enable CSS3 transition\n viewer.initialOffsetWidth = viewer.offsetWidth;\n addListener(viewer, EVENT_TRANSITION_END, shown, {\n once: true\n });\n addClass(viewer, CLASS_IN);\n } else {\n addClass(viewer, CLASS_IN);\n this.shown();\n }\n return this;\n },\n /**\n * Hide the viewer (only available in modal mode)\n * @param {boolean} [immediate=false] - Indicates if hide the viewer immediately or not.\n * @returns {Viewer} this\n */\n hide: function hide() {\n var _this = this;\n var immediate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var element = this.element,\n options = this.options;\n if (options.inline || this.hiding || !(this.isShown || this.showing)) {\n return this;\n }\n if (isFunction(options.hide)) {\n addListener(element, EVENT_HIDE, options.hide, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_HIDE) === false) {\n return this;\n }\n if (this.showing) {\n this.transitioning.abort();\n }\n this.hiding = true;\n if (this.played) {\n this.stop();\n } else if (this.viewing) {\n this.viewing.abort();\n }\n var viewer = this.viewer,\n image = this.image;\n var hideImmediately = function hideImmediately() {\n removeClass(viewer, CLASS_IN);\n _this.hidden();\n };\n if (options.transition && !immediate) {\n var onViewerTransitionEnd = function onViewerTransitionEnd(event) {\n // Ignore all propagating `transitionend` events (#275).\n if (event && event.target === viewer) {\n removeListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd);\n _this.hidden();\n }\n };\n var onImageTransitionEnd = function onImageTransitionEnd() {\n // In case of show the viewer by `viewer.show(true)` previously (#407).\n if (hasClass(viewer, CLASS_TRANSITION)) {\n addListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd);\n removeClass(viewer, CLASS_IN);\n } else {\n hideImmediately();\n }\n };\n this.transitioning = {\n abort: function abort() {\n if (_this.viewed && hasClass(image, CLASS_TRANSITION)) {\n removeListener(image, EVENT_TRANSITION_END, onImageTransitionEnd);\n } else if (hasClass(viewer, CLASS_TRANSITION)) {\n removeListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd);\n }\n }\n };\n\n // In case of hiding the viewer when holding on the image (#255),\n // note that the `CLASS_TRANSITION` class will be removed on pointer down.\n if (this.viewed && hasClass(image, CLASS_TRANSITION)) {\n addListener(image, EVENT_TRANSITION_END, onImageTransitionEnd, {\n once: true\n });\n this.zoomTo(0, false, null, null, true);\n } else {\n onImageTransitionEnd();\n }\n } else {\n hideImmediately();\n }\n return this;\n },\n /**\n * View one of the images with image's index\n * @param {number} index - The index of the image to view.\n * @returns {Viewer} this\n */\n view: function view() {\n var _this2 = this;\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.initialViewIndex;\n index = Number(index) || 0;\n if (this.hiding || this.played || index < 0 || index >= this.length || this.viewed && index === this.index) {\n return this;\n }\n if (!this.isShown) {\n this.index = index;\n return this.show();\n }\n if (this.viewing) {\n this.viewing.abort();\n }\n var element = this.element,\n options = this.options,\n title = this.title,\n canvas = this.canvas;\n var item = this.items[index];\n var img = item.querySelector('img');\n var url = getData(img, 'originalUrl');\n var alt = img.getAttribute('alt');\n var image = document.createElement('img');\n forEach(options.inheritedAttributes, function (name) {\n var value = img.getAttribute(name);\n if (value !== null) {\n image.setAttribute(name, value);\n }\n });\n image.src = url;\n image.alt = alt;\n if (isFunction(options.view)) {\n addListener(element, EVENT_VIEW, options.view, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_VIEW, {\n originalImage: this.images[index],\n index: index,\n image: image\n }) === false || !this.isShown || this.hiding || this.played) {\n return this;\n }\n var activeItem = this.items[this.index];\n if (activeItem) {\n removeClass(activeItem, CLASS_ACTIVE);\n activeItem.removeAttribute('aria-selected');\n }\n addClass(item, CLASS_ACTIVE);\n item.setAttribute('aria-selected', true);\n if (options.focus) {\n item.focus();\n }\n this.image = image;\n this.viewed = false;\n this.index = index;\n this.imageData = {};\n addClass(image, CLASS_INVISIBLE);\n if (options.loading) {\n addClass(canvas, CLASS_LOADING);\n }\n canvas.innerHTML = '';\n canvas.appendChild(image);\n\n // Center current item\n this.renderList();\n\n // Clear title\n title.innerHTML = '';\n\n // Generate title after viewed\n var onViewed = function onViewed() {\n var imageData = _this2.imageData;\n var render = Array.isArray(options.title) ? options.title[1] : options.title;\n title.innerHTML = escapeHTMLEntities(isFunction(render) ? render.call(_this2, image, imageData) : \"\".concat(alt, \" (\").concat(imageData.naturalWidth, \" \\xD7 \").concat(imageData.naturalHeight, \")\"));\n };\n var onLoad;\n var onError;\n addListener(element, EVENT_VIEWED, onViewed, {\n once: true\n });\n this.viewing = {\n abort: function abort() {\n removeListener(element, EVENT_VIEWED, onViewed);\n if (image.complete) {\n if (_this2.imageRendering) {\n _this2.imageRendering.abort();\n } else if (_this2.imageInitializing) {\n _this2.imageInitializing.abort();\n }\n } else {\n // Cancel download to save bandwidth.\n image.src = '';\n removeListener(image, EVENT_LOAD, onLoad);\n if (_this2.timeout) {\n clearTimeout(_this2.timeout);\n }\n }\n }\n };\n if (image.complete) {\n this.load();\n } else {\n addListener(image, EVENT_LOAD, onLoad = function onLoad() {\n removeListener(image, EVENT_ERROR, onError);\n _this2.load();\n }, {\n once: true\n });\n addListener(image, EVENT_ERROR, onError = function onError() {\n removeListener(image, EVENT_LOAD, onLoad);\n if (_this2.timeout) {\n clearTimeout(_this2.timeout);\n _this2.timeout = false;\n }\n removeClass(image, CLASS_INVISIBLE);\n if (options.loading) {\n removeClass(_this2.canvas, CLASS_LOADING);\n }\n }, {\n once: true\n });\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n\n // Make the image visible if it fails to load within 1s\n this.timeout = setTimeout(function () {\n removeClass(image, CLASS_INVISIBLE);\n _this2.timeout = false;\n }, 1000);\n }\n return this;\n },\n /**\n * View the previous image\n * @param {boolean} [loop=false] - Indicate if view the last one\n * when it is the first one at present.\n * @returns {Viewer} this\n */\n prev: function prev() {\n var loop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var index = this.index - 1;\n if (index < 0) {\n index = loop ? this.length - 1 : 0;\n }\n this.view(index);\n return this;\n },\n /**\n * View the next image\n * @param {boolean} [loop=false] - Indicate if view the first one\n * when it is the last one at present.\n * @returns {Viewer} this\n */\n next: function next() {\n var loop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var maxIndex = this.length - 1;\n var index = this.index + 1;\n if (index > maxIndex) {\n index = loop ? 0 : maxIndex;\n }\n this.view(index);\n return this;\n },\n /**\n * Move the image with relative offsets.\n * @param {number} x - The moving distance in the horizontal direction.\n * @param {number} [y=x] The moving distance in the vertical direction.\n * @returns {Viewer} this\n */\n move: function move(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var imageData = this.imageData;\n this.moveTo(isUndefined(x) ? x : imageData.x + Number(x), isUndefined(y) ? y : imageData.y + Number(y));\n return this;\n },\n /**\n * Move the image to an absolute point.\n * @param {number} x - The new position in the horizontal direction.\n * @param {number} [y=x] - The new position in the vertical direction.\n * @param {Event} [_originalEvent=null] - The original event if any.\n * @returns {Viewer} this\n */\n moveTo: function moveTo(x) {\n var _this3 = this;\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var _originalEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var element = this.element,\n options = this.options,\n imageData = this.imageData;\n x = Number(x);\n y = Number(y);\n if (this.viewed && !this.played && options.movable) {\n var oldX = imageData.x;\n var oldY = imageData.y;\n var changed = false;\n if (isNumber(x)) {\n changed = true;\n } else {\n x = oldX;\n }\n if (isNumber(y)) {\n changed = true;\n } else {\n y = oldY;\n }\n if (changed) {\n if (isFunction(options.move)) {\n addListener(element, EVENT_MOVE, options.move, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_MOVE, {\n x: x,\n y: y,\n oldX: oldX,\n oldY: oldY,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n imageData.x = x;\n imageData.y = y;\n imageData.left = x;\n imageData.top = y;\n this.moving = true;\n this.renderImage(function () {\n _this3.moving = false;\n if (isFunction(options.moved)) {\n addListener(element, EVENT_MOVED, options.moved, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_MOVED, {\n x: x,\n y: y,\n oldX: oldX,\n oldY: oldY,\n originalEvent: _originalEvent\n }, {\n cancelable: false\n });\n });\n }\n }\n return this;\n },\n /**\n * Rotate the image with a relative degree.\n * @param {number} degree - The rotate degree.\n * @returns {Viewer} this\n */\n rotate: function rotate(degree) {\n this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n return this;\n },\n /**\n * Rotate the image to an absolute degree.\n * @param {number} degree - The rotate degree.\n * @returns {Viewer} this\n */\n rotateTo: function rotateTo(degree) {\n var _this4 = this;\n var element = this.element,\n options = this.options,\n imageData = this.imageData;\n degree = Number(degree);\n if (isNumber(degree) && this.viewed && !this.played && options.rotatable) {\n var oldDegree = imageData.rotate;\n if (isFunction(options.rotate)) {\n addListener(element, EVENT_ROTATE, options.rotate, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_ROTATE, {\n degree: degree,\n oldDegree: oldDegree\n }) === false) {\n return this;\n }\n imageData.rotate = degree;\n this.rotating = true;\n this.renderImage(function () {\n _this4.rotating = false;\n if (isFunction(options.rotated)) {\n addListener(element, EVENT_ROTATED, options.rotated, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_ROTATED, {\n degree: degree,\n oldDegree: oldDegree\n }, {\n cancelable: false\n });\n });\n }\n return this;\n },\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Viewer} this\n */\n scaleX: function scaleX(_scaleX) {\n this.scale(_scaleX, this.imageData.scaleY);\n return this;\n },\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Viewer} this\n */\n scaleY: function scaleY(_scaleY) {\n this.scale(this.imageData.scaleX, _scaleY);\n return this;\n },\n /**\n * Scale the image.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Viewer} this\n */\n scale: function scale(scaleX) {\n var _this5 = this;\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var element = this.element,\n options = this.options,\n imageData = this.imageData;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n if (this.viewed && !this.played && options.scalable) {\n var oldScaleX = imageData.scaleX;\n var oldScaleY = imageData.scaleY;\n var changed = false;\n if (isNumber(scaleX)) {\n changed = true;\n } else {\n scaleX = oldScaleX;\n }\n if (isNumber(scaleY)) {\n changed = true;\n } else {\n scaleY = oldScaleY;\n }\n if (changed) {\n if (isFunction(options.scale)) {\n addListener(element, EVENT_SCALE, options.scale, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_SCALE, {\n scaleX: scaleX,\n scaleY: scaleY,\n oldScaleX: oldScaleX,\n oldScaleY: oldScaleY\n }) === false) {\n return this;\n }\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n this.scaling = true;\n this.renderImage(function () {\n _this5.scaling = false;\n if (isFunction(options.scaled)) {\n addListener(element, EVENT_SCALED, options.scaled, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_SCALED, {\n scaleX: scaleX,\n scaleY: scaleY,\n oldScaleX: oldScaleX,\n oldScaleY: oldScaleY\n }, {\n cancelable: false\n });\n });\n }\n }\n return this;\n },\n /**\n * Zoom the image with a relative ratio.\n * @param {number} ratio - The target ratio.\n * @param {boolean} [showTooltip=false] - Indicates whether to show the tooltip.\n * @param {Object} [pivot] - The pivot point coordinate for zooming.\n * @param {Event} [_originalEvent=null] - The original event if any.\n * @returns {Viewer} this\n */\n zoom: function zoom(ratio) {\n var showTooltip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var pivot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var _originalEvent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var imageData = this.imageData;\n ratio = Number(ratio);\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n this.zoomTo(imageData.width * ratio / imageData.naturalWidth, showTooltip, pivot, _originalEvent);\n return this;\n },\n /**\n * Zoom the image to an absolute ratio.\n * @param {number} ratio - The target ratio.\n * @param {boolean} [showTooltip] - Indicates whether to show the tooltip.\n * @param {Object} [pivot] - The pivot point coordinate for zooming.\n * @param {Event} [_originalEvent=null] - The original event if any.\n * @param {Event} [_zoomable=false] - Indicates if the current zoom is available or not.\n * @returns {Viewer} this\n */\n zoomTo: function zoomTo(ratio) {\n var _this6 = this;\n var showTooltip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var pivot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var _originalEvent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var _zoomable = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n var element = this.element,\n options = this.options,\n pointers = this.pointers,\n imageData = this.imageData;\n var x = imageData.x,\n y = imageData.y,\n width = imageData.width,\n height = imageData.height,\n naturalWidth = imageData.naturalWidth,\n naturalHeight = imageData.naturalHeight;\n ratio = Math.max(0, ratio);\n if (isNumber(ratio) && this.viewed && !this.played && (_zoomable || options.zoomable)) {\n if (!_zoomable) {\n var minZoomRatio = Math.max(0.01, options.minZoomRatio);\n var maxZoomRatio = Math.min(100, options.maxZoomRatio);\n ratio = Math.min(Math.max(ratio, minZoomRatio), maxZoomRatio);\n }\n if (_originalEvent) {\n switch (_originalEvent.type) {\n case 'wheel':\n if (options.zoomRatio >= 0.055 && ratio > 0.95 && ratio < 1.05) {\n ratio = 1;\n }\n break;\n case 'pointermove':\n case 'touchmove':\n case 'mousemove':\n if (ratio > 0.99 && ratio < 1.01) {\n ratio = 1;\n }\n break;\n }\n }\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n var offsetWidth = newWidth - width;\n var offsetHeight = newHeight - height;\n var oldRatio = imageData.ratio;\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: oldRatio,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n this.zooming = true;\n if (_originalEvent) {\n var offset = getOffset(this.viewer);\n var center = pointers && Object.keys(pointers).length > 0 ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n };\n\n // Zoom from the triggering point of the event\n imageData.x -= offsetWidth * ((center.pageX - offset.left - x) / width);\n imageData.y -= offsetHeight * ((center.pageY - offset.top - y) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n imageData.x -= offsetWidth * ((pivot.x - x) / width);\n imageData.y -= offsetHeight * ((pivot.y - y) / height);\n } else {\n // Zoom from the center of the image\n imageData.x -= offsetWidth / 2;\n imageData.y -= offsetHeight / 2;\n }\n imageData.left = imageData.x;\n imageData.top = imageData.y;\n imageData.width = newWidth;\n imageData.height = newHeight;\n imageData.oldRatio = oldRatio;\n imageData.ratio = ratio;\n this.renderImage(function () {\n _this6.zooming = false;\n if (isFunction(options.zoomed)) {\n addListener(element, EVENT_ZOOMED, options.zoomed, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_ZOOMED, {\n ratio: ratio,\n oldRatio: oldRatio,\n originalEvent: _originalEvent\n }, {\n cancelable: false\n });\n });\n if (showTooltip) {\n this.tooltip();\n }\n }\n return this;\n },\n /**\n * Play the images\n * @param {boolean|FullscreenOptions} [fullscreen=false] - Indicate if request fullscreen or not.\n * @returns {Viewer} this\n */\n play: function play() {\n var _this7 = this;\n var fullscreen = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (!this.isShown || this.played) {\n return this;\n }\n var element = this.element,\n options = this.options;\n if (isFunction(options.play)) {\n addListener(element, EVENT_PLAY, options.play, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_PLAY) === false) {\n return this;\n }\n var player = this.player;\n var onLoad = this.loadImage.bind(this);\n var list = [];\n var total = 0;\n var index = 0;\n this.played = true;\n this.onLoadWhenPlay = onLoad;\n if (fullscreen) {\n this.requestFullscreen(fullscreen);\n }\n addClass(player, CLASS_SHOW);\n forEach(this.items, function (item, i) {\n var img = item.querySelector('img');\n var image = document.createElement('img');\n image.src = getData(img, 'originalUrl');\n image.alt = img.getAttribute('alt');\n image.referrerPolicy = img.referrerPolicy;\n total += 1;\n addClass(image, CLASS_FADE);\n toggleClass(image, CLASS_TRANSITION, options.transition);\n if (hasClass(item, CLASS_ACTIVE)) {\n addClass(image, CLASS_IN);\n index = i;\n }\n list.push(image);\n addListener(image, EVENT_LOAD, onLoad, {\n once: true\n });\n player.appendChild(image);\n });\n if (isNumber(options.interval) && options.interval > 0) {\n var prev = function prev() {\n clearTimeout(_this7.playing.timeout);\n removeClass(list[index], CLASS_IN);\n index -= 1;\n index = index >= 0 ? index : total - 1;\n addClass(list[index], CLASS_IN);\n _this7.playing.timeout = setTimeout(prev, options.interval);\n };\n var next = function next() {\n clearTimeout(_this7.playing.timeout);\n removeClass(list[index], CLASS_IN);\n index += 1;\n index = index < total ? index : 0;\n addClass(list[index], CLASS_IN);\n _this7.playing.timeout = setTimeout(next, options.interval);\n };\n if (total > 1) {\n this.playing = {\n prev: prev,\n next: next,\n timeout: setTimeout(next, options.interval)\n };\n }\n }\n return this;\n },\n // Stop play\n stop: function stop() {\n var _this8 = this;\n if (!this.played) {\n return this;\n }\n var element = this.element,\n options = this.options;\n if (isFunction(options.stop)) {\n addListener(element, EVENT_STOP, options.stop, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_STOP) === false) {\n return this;\n }\n var player = this.player;\n clearTimeout(this.playing.timeout);\n this.playing = false;\n this.played = false;\n forEach(player.getElementsByTagName('img'), function (image) {\n removeListener(image, EVENT_LOAD, _this8.onLoadWhenPlay);\n });\n removeClass(player, CLASS_SHOW);\n player.innerHTML = '';\n this.exitFullscreen();\n return this;\n },\n // Enter modal mode (only available in inline mode)\n full: function full() {\n var _this9 = this;\n var options = this.options,\n viewer = this.viewer,\n image = this.image,\n list = this.list;\n if (!this.isShown || this.played || this.fulled || !options.inline) {\n return this;\n }\n this.fulled = true;\n this.open();\n addClass(this.button, CLASS_FULLSCREEN_EXIT);\n if (options.transition) {\n removeClass(list, CLASS_TRANSITION);\n if (this.viewed) {\n removeClass(image, CLASS_TRANSITION);\n }\n }\n addClass(viewer, CLASS_FIXED);\n viewer.setAttribute('role', 'dialog');\n viewer.setAttribute('aria-labelledby', this.title.id);\n viewer.setAttribute('aria-modal', true);\n viewer.removeAttribute('style');\n setStyle(viewer, {\n zIndex: options.zIndex\n });\n if (options.focus) {\n this.enforceFocus();\n }\n this.initContainer();\n this.viewerData = assign({}, this.containerData);\n this.renderList();\n if (this.viewed) {\n this.initImage(function () {\n _this9.renderImage(function () {\n if (options.transition) {\n setTimeout(function () {\n addClass(image, CLASS_TRANSITION);\n addClass(list, CLASS_TRANSITION);\n }, 0);\n }\n });\n });\n }\n return this;\n },\n // Exit modal mode (only available in inline mode)\n exit: function exit() {\n var _this10 = this;\n var options = this.options,\n viewer = this.viewer,\n image = this.image,\n list = this.list;\n if (!this.isShown || this.played || !this.fulled || !options.inline) {\n return this;\n }\n this.fulled = false;\n this.close();\n removeClass(this.button, CLASS_FULLSCREEN_EXIT);\n if (options.transition) {\n removeClass(list, CLASS_TRANSITION);\n if (this.viewed) {\n removeClass(image, CLASS_TRANSITION);\n }\n }\n if (options.focus) {\n this.clearEnforceFocus();\n }\n viewer.removeAttribute('role');\n viewer.removeAttribute('aria-labelledby');\n viewer.removeAttribute('aria-modal');\n removeClass(viewer, CLASS_FIXED);\n setStyle(viewer, {\n zIndex: options.zIndexInline\n });\n this.viewerData = assign({}, this.parentData);\n this.renderViewer();\n this.renderList();\n if (this.viewed) {\n this.initImage(function () {\n _this10.renderImage(function () {\n if (options.transition) {\n setTimeout(function () {\n addClass(image, CLASS_TRANSITION);\n addClass(list, CLASS_TRANSITION);\n }, 0);\n }\n });\n });\n }\n return this;\n },\n // Show the current ratio of the image with percentage\n tooltip: function tooltip() {\n var _this11 = this;\n var options = this.options,\n tooltipBox = this.tooltipBox,\n imageData = this.imageData;\n if (!this.viewed || this.played || !options.tooltip) {\n return this;\n }\n tooltipBox.textContent = \"\".concat(Math.round(imageData.ratio * 100), \"%\");\n if (!this.tooltipping) {\n if (options.transition) {\n if (this.fading) {\n dispatchEvent(tooltipBox, EVENT_TRANSITION_END);\n }\n addClass(tooltipBox, CLASS_SHOW);\n addClass(tooltipBox, CLASS_FADE);\n addClass(tooltipBox, CLASS_TRANSITION);\n tooltipBox.removeAttribute('aria-hidden');\n\n // Force reflow to enable CSS3 transition\n tooltipBox.initialOffsetWidth = tooltipBox.offsetWidth;\n addClass(tooltipBox, CLASS_IN);\n } else {\n addClass(tooltipBox, CLASS_SHOW);\n tooltipBox.removeAttribute('aria-hidden');\n }\n } else {\n clearTimeout(this.tooltipping);\n }\n this.tooltipping = setTimeout(function () {\n if (options.transition) {\n addListener(tooltipBox, EVENT_TRANSITION_END, function () {\n removeClass(tooltipBox, CLASS_SHOW);\n removeClass(tooltipBox, CLASS_FADE);\n removeClass(tooltipBox, CLASS_TRANSITION);\n tooltipBox.setAttribute('aria-hidden', true);\n _this11.fading = false;\n }, {\n once: true\n });\n removeClass(tooltipBox, CLASS_IN);\n _this11.fading = true;\n } else {\n removeClass(tooltipBox, CLASS_SHOW);\n tooltipBox.setAttribute('aria-hidden', true);\n }\n _this11.tooltipping = false;\n }, 1000);\n return this;\n },\n /**\n * Toggle the image size between its current size and natural size\n * @param {Event} [_originalEvent=null] - The original event if any.\n * @returns {Viewer} this\n */\n toggle: function toggle() {\n var _originalEvent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n if (this.imageData.ratio === 1) {\n this.zoomTo(this.imageData.oldRatio, true, null, _originalEvent);\n } else {\n this.zoomTo(1, true, null, _originalEvent);\n }\n return this;\n },\n // Reset the image to its initial state\n reset: function reset() {\n if (this.viewed && !this.played) {\n this.imageData = assign({}, this.initialImageData);\n this.renderImage();\n }\n return this;\n },\n // Update viewer when images changed\n update: function update() {\n var _this12 = this;\n var element = this.element,\n options = this.options,\n isImg = this.isImg;\n\n // Destroy viewer if the target image was deleted\n if (isImg && !element.parentNode) {\n return this.destroy();\n }\n var images = [];\n forEach(isImg ? [element] : element.querySelectorAll('img'), function (image) {\n if (isFunction(options.filter)) {\n if (options.filter.call(_this12, image)) {\n images.push(image);\n }\n } else if (_this12.getImageURL(image)) {\n images.push(image);\n }\n });\n if (!images.length) {\n return this;\n }\n this.images = images;\n this.length = images.length;\n if (this.ready) {\n var changedIndexes = [];\n forEach(this.items, function (item, i) {\n var img = item.querySelector('img');\n var image = images[i];\n if (image && img) {\n if (image.src !== img.src\n\n // Title changed (#408)\n || image.alt !== img.alt) {\n changedIndexes.push(i);\n }\n } else {\n changedIndexes.push(i);\n }\n });\n setStyle(this.list, {\n width: 'auto'\n });\n this.initList();\n if (this.isShown) {\n if (this.length) {\n if (this.viewed) {\n var changedIndex = changedIndexes.indexOf(this.index);\n if (changedIndex >= 0) {\n this.viewed = false;\n this.view(Math.max(Math.min(this.index - changedIndex, this.length - 1), 0));\n } else {\n var activeItem = this.items[this.index];\n\n // Reactivate the current viewing item after reset the list.\n addClass(activeItem, CLASS_ACTIVE);\n activeItem.setAttribute('aria-selected', true);\n }\n }\n } else {\n this.image = null;\n this.viewed = false;\n this.index = 0;\n this.imageData = {};\n this.canvas.innerHTML = '';\n this.title.innerHTML = '';\n }\n }\n } else {\n this.build();\n }\n return this;\n },\n // Destroy the viewer\n destroy: function destroy() {\n var element = this.element,\n options = this.options;\n if (!element[NAMESPACE]) {\n return this;\n }\n this.destroyed = true;\n if (this.ready) {\n if (this.played) {\n this.stop();\n }\n if (options.inline) {\n if (this.fulled) {\n this.exit();\n }\n this.unbind();\n } else if (this.isShown) {\n if (this.viewing) {\n if (this.imageRendering) {\n this.imageRendering.abort();\n } else if (this.imageInitializing) {\n this.imageInitializing.abort();\n }\n }\n if (this.hiding) {\n this.transitioning.abort();\n }\n this.hidden();\n } else if (this.showing) {\n this.transitioning.abort();\n this.hidden();\n }\n this.ready = false;\n this.viewer.parentNode.removeChild(this.viewer);\n } else if (options.inline) {\n if (this.delaying) {\n this.delaying.abort();\n } else if (this.initializing) {\n this.initializing.abort();\n }\n }\n if (!options.inline) {\n removeListener(element, EVENT_CLICK, this.onStart);\n }\n element[NAMESPACE] = undefined;\n return this;\n }\n };\n\n var others = {\n getImageURL: function getImageURL(image) {\n var url = this.options.url;\n if (isString(url)) {\n url = image.getAttribute(url);\n } else if (isFunction(url)) {\n url = url.call(this, image);\n } else {\n url = '';\n }\n return url;\n },\n enforceFocus: function enforceFocus() {\n var _this = this;\n this.clearEnforceFocus();\n addListener(document, EVENT_FOCUSIN, this.onFocusin = function (event) {\n var viewer = _this.viewer;\n var target = event.target;\n if (target === document || target === viewer || viewer.contains(target)) {\n return;\n }\n while (target) {\n // Avoid conflicts with other modals (#474, #540)\n if (target.getAttribute('tabindex') !== null || target.getAttribute('aria-modal') === 'true') {\n return;\n }\n target = target.parentElement;\n }\n viewer.focus();\n });\n },\n clearEnforceFocus: function clearEnforceFocus() {\n if (this.onFocusin) {\n removeListener(document, EVENT_FOCUSIN, this.onFocusin);\n this.onFocusin = null;\n }\n },\n open: function open() {\n var body = this.body;\n addClass(body, CLASS_OPEN);\n if (this.scrollbarWidth > 0) {\n body.style.paddingRight = \"\".concat(this.scrollbarWidth + (parseFloat(this.initialBodyComputedPaddingRight) || 0), \"px\");\n }\n },\n close: function close() {\n var body = this.body;\n removeClass(body, CLASS_OPEN);\n if (this.scrollbarWidth > 0) {\n body.style.paddingRight = this.initialBodyPaddingRight;\n }\n },\n shown: function shown() {\n var element = this.element,\n options = this.options,\n viewer = this.viewer;\n this.fulled = true;\n this.isShown = true;\n this.render();\n this.bind();\n this.showing = false;\n if (options.focus) {\n viewer.focus();\n this.enforceFocus();\n }\n if (isFunction(options.shown)) {\n addListener(element, EVENT_SHOWN, options.shown, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_SHOWN) === false) {\n return;\n }\n if (this.ready && this.isShown && !this.hiding) {\n this.view(this.index);\n }\n },\n hidden: function hidden() {\n var element = this.element,\n options = this.options,\n viewer = this.viewer;\n if (options.fucus) {\n this.clearEnforceFocus();\n }\n this.close();\n this.unbind();\n addClass(viewer, CLASS_HIDE);\n viewer.removeAttribute('role');\n viewer.removeAttribute('aria-labelledby');\n viewer.removeAttribute('aria-modal');\n viewer.setAttribute('aria-hidden', true);\n this.resetList();\n this.resetImage();\n this.fulled = false;\n this.viewed = false;\n this.isShown = false;\n this.hiding = false;\n if (!this.destroyed) {\n if (isFunction(options.hidden)) {\n addListener(element, EVENT_HIDDEN, options.hidden, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_HIDDEN, null, {\n cancelable: false\n });\n }\n },\n requestFullscreen: function requestFullscreen(options) {\n var document = this.element.ownerDocument;\n if (this.fulled && !(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) {\n var documentElement = document.documentElement;\n\n // Element.requestFullscreen()\n if (documentElement.requestFullscreen) {\n // Avoid TypeError when convert `options` to dictionary\n if (isPlainObject(options)) {\n documentElement.requestFullscreen(options);\n } else {\n documentElement.requestFullscreen();\n }\n } else if (documentElement.webkitRequestFullscreen) {\n documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\n } else if (documentElement.mozRequestFullScreen) {\n documentElement.mozRequestFullScreen();\n } else if (documentElement.msRequestFullscreen) {\n documentElement.msRequestFullscreen();\n }\n }\n },\n exitFullscreen: function exitFullscreen() {\n var document = this.element.ownerDocument;\n if (this.fulled && (document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) {\n // Document.exitFullscreen()\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen();\n }\n }\n },\n change: function change(event) {\n var options = this.options,\n pointers = this.pointers;\n var pointer = pointers[Object.keys(pointers)[0]];\n\n // In the case of the `pointers` object is empty (#421)\n if (!pointer) {\n return;\n }\n var offsetX = pointer.endX - pointer.startX;\n var offsetY = pointer.endY - pointer.startY;\n switch (this.action) {\n // Move the current image\n case ACTION_MOVE:\n if (offsetX !== 0 || offsetY !== 0) {\n this.pointerMoved = true;\n this.move(offsetX, offsetY, event);\n }\n break;\n\n // Zoom the current image\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), false, null, event);\n break;\n case ACTION_SWITCH:\n {\n this.action = 'switched';\n var absoluteOffsetX = Math.abs(offsetX);\n if (absoluteOffsetX > 1 && absoluteOffsetX > Math.abs(offsetY)) {\n // Empty `pointers` as `touchend` event will not be fired after swiped in iOS browsers.\n this.pointers = {};\n if (offsetX > 1) {\n this.prev(options.loop);\n } else if (offsetX < -1) {\n this.next(options.loop);\n }\n }\n break;\n }\n }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n },\n isSwitchable: function isSwitchable() {\n var imageData = this.imageData,\n viewerData = this.viewerData;\n return this.length > 1 && imageData.x >= 0 && imageData.y >= 0 && imageData.width <= viewerData.width && imageData.height <= viewerData.height;\n }\n };\n\n var AnotherViewer = WINDOW.Viewer;\n var getUniqueID = function (id) {\n return function () {\n id += 1;\n return id;\n };\n }(-1);\n var Viewer = /*#__PURE__*/function () {\n /**\n * Create a new Viewer.\n * @param {Element} element - The target element for viewing.\n * @param {Object} [options={}] - The configuration options.\n */\n function Viewer(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Viewer);\n if (!element || element.nodeType !== 1) {\n throw new Error('The first argument is required and must be an element.');\n }\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.action = false;\n this.fading = false;\n this.fulled = false;\n this.hiding = false;\n this.imageClicked = false;\n this.imageData = {};\n this.index = this.options.initialViewIndex;\n this.isImg = false;\n this.isShown = false;\n this.length = 0;\n this.moving = false;\n this.played = false;\n this.playing = false;\n this.pointers = {};\n this.ready = false;\n this.rotating = false;\n this.scaling = false;\n this.showing = false;\n this.timeout = false;\n this.tooltipping = false;\n this.viewed = false;\n this.viewing = false;\n this.wheeling = false;\n this.zooming = false;\n this.pointerMoved = false;\n this.id = getUniqueID();\n this.init();\n }\n _createClass(Viewer, [{\n key: \"init\",\n value: function init() {\n var _this = this;\n var element = this.element,\n options = this.options;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n\n // The `focus` option requires the `keyboard` option set to `true`.\n if (options.focus && !options.keyboard) {\n options.focus = false;\n }\n var isImg = element.localName === 'img';\n var images = [];\n forEach(isImg ? [element] : element.querySelectorAll('img'), function (image) {\n if (isFunction(options.filter)) {\n if (options.filter.call(_this, image)) {\n images.push(image);\n }\n } else if (_this.getImageURL(image)) {\n images.push(image);\n }\n });\n this.isImg = isImg;\n this.length = images.length;\n this.images = images;\n this.initBody();\n\n // Override `transition` option if it is not supported\n if (isUndefined(document.createElement(NAMESPACE).style.transition)) {\n options.transition = false;\n }\n if (options.inline) {\n var count = 0;\n var progress = function progress() {\n count += 1;\n if (count === _this.length) {\n var timeout;\n _this.initializing = false;\n _this.delaying = {\n abort: function abort() {\n clearTimeout(timeout);\n }\n };\n\n // build asynchronously to keep `this.viewer` is accessible in `ready` event handler.\n timeout = setTimeout(function () {\n _this.delaying = false;\n _this.build();\n }, 0);\n }\n };\n this.initializing = {\n abort: function abort() {\n forEach(images, function (image) {\n if (!image.complete) {\n removeListener(image, EVENT_LOAD, progress);\n removeListener(image, EVENT_ERROR, progress);\n }\n });\n }\n };\n forEach(images, function (image) {\n if (image.complete) {\n progress();\n } else {\n var onLoad;\n var onError;\n addListener(image, EVENT_LOAD, onLoad = function onLoad() {\n removeListener(image, EVENT_ERROR, onError);\n progress();\n }, {\n once: true\n });\n addListener(image, EVENT_ERROR, onError = function onError() {\n removeListener(image, EVENT_LOAD, onLoad);\n progress();\n }, {\n once: true\n });\n }\n });\n } else {\n addListener(element, EVENT_CLICK, this.onStart = function (_ref) {\n var target = _ref.target;\n if (target.localName === 'img' && (!isFunction(options.filter) || options.filter.call(_this, target))) {\n _this.view(_this.images.indexOf(target));\n }\n });\n }\n }\n }, {\n key: \"build\",\n value: function build() {\n if (this.ready) {\n return;\n }\n var element = this.element,\n options = this.options;\n var parent = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var viewer = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var title = viewer.querySelector(\".\".concat(NAMESPACE, \"-title\"));\n var toolbar = viewer.querySelector(\".\".concat(NAMESPACE, \"-toolbar\"));\n var navbar = viewer.querySelector(\".\".concat(NAMESPACE, \"-navbar\"));\n var button = viewer.querySelector(\".\".concat(NAMESPACE, \"-button\"));\n var canvas = viewer.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n this.parent = parent;\n this.viewer = viewer;\n this.title = title;\n this.toolbar = toolbar;\n this.navbar = navbar;\n this.button = button;\n this.canvas = canvas;\n this.footer = viewer.querySelector(\".\".concat(NAMESPACE, \"-footer\"));\n this.tooltipBox = viewer.querySelector(\".\".concat(NAMESPACE, \"-tooltip\"));\n this.player = viewer.querySelector(\".\".concat(NAMESPACE, \"-player\"));\n this.list = viewer.querySelector(\".\".concat(NAMESPACE, \"-list\"));\n viewer.id = \"\".concat(NAMESPACE).concat(this.id);\n title.id = \"\".concat(NAMESPACE, \"Title\").concat(this.id);\n addClass(title, !options.title ? CLASS_HIDE : getResponsiveClass(Array.isArray(options.title) ? options.title[0] : options.title));\n addClass(navbar, !options.navbar ? CLASS_HIDE : getResponsiveClass(options.navbar));\n toggleClass(button, CLASS_HIDE, !options.button);\n if (options.keyboard) {\n button.setAttribute('tabindex', 0);\n }\n if (options.backdrop) {\n addClass(viewer, \"\".concat(NAMESPACE, \"-backdrop\"));\n if (!options.inline && options.backdrop !== 'static') {\n setData(canvas, DATA_ACTION, 'hide');\n }\n }\n if (isString(options.className) && options.className) {\n // In case there are multiple class names\n options.className.split(REGEXP_SPACES).forEach(function (className) {\n addClass(viewer, className);\n });\n }\n if (options.toolbar) {\n var list = document.createElement('ul');\n var custom = isPlainObject(options.toolbar);\n var zoomButtons = BUTTONS.slice(0, 3);\n var rotateButtons = BUTTONS.slice(7, 9);\n var scaleButtons = BUTTONS.slice(9);\n if (!custom) {\n addClass(toolbar, getResponsiveClass(options.toolbar));\n }\n forEach(custom ? options.toolbar : BUTTONS, function (value, index) {\n var deep = custom && isPlainObject(value);\n var name = custom ? hyphenate(index) : value;\n var show = deep && !isUndefined(value.show) ? value.show : value;\n if (!show || !options.zoomable && zoomButtons.indexOf(name) !== -1 || !options.rotatable && rotateButtons.indexOf(name) !== -1 || !options.scalable && scaleButtons.indexOf(name) !== -1) {\n return;\n }\n var size = deep && !isUndefined(value.size) ? value.size : value;\n var click = deep && !isUndefined(value.click) ? value.click : value;\n var item = document.createElement('li');\n if (options.keyboard) {\n item.setAttribute('tabindex', 0);\n }\n item.setAttribute('role', 'button');\n addClass(item, \"\".concat(NAMESPACE, \"-\").concat(name));\n if (!isFunction(click)) {\n setData(item, DATA_ACTION, name);\n }\n if (isNumber(show)) {\n addClass(item, getResponsiveClass(show));\n }\n if (['small', 'large'].indexOf(size) !== -1) {\n addClass(item, \"\".concat(NAMESPACE, \"-\").concat(size));\n } else if (name === 'play') {\n addClass(item, \"\".concat(NAMESPACE, \"-large\"));\n }\n if (isFunction(click)) {\n addListener(item, EVENT_CLICK, click);\n }\n list.appendChild(item);\n });\n toolbar.appendChild(list);\n } else {\n addClass(toolbar, CLASS_HIDE);\n }\n if (!options.rotatable) {\n var rotates = toolbar.querySelectorAll('li[class*=\"rotate\"]');\n addClass(rotates, CLASS_INVISIBLE);\n forEach(rotates, function (rotate) {\n toolbar.appendChild(rotate);\n });\n }\n if (options.inline) {\n addClass(button, CLASS_FULLSCREEN);\n setStyle(viewer, {\n zIndex: options.zIndexInline\n });\n if (window.getComputedStyle(parent).position === 'static') {\n setStyle(parent, {\n position: 'relative'\n });\n }\n parent.insertBefore(viewer, element.nextSibling);\n } else {\n addClass(button, CLASS_CLOSE);\n addClass(viewer, CLASS_FIXED);\n addClass(viewer, CLASS_FADE);\n addClass(viewer, CLASS_HIDE);\n setStyle(viewer, {\n zIndex: options.zIndex\n });\n var container = options.container;\n if (isString(container)) {\n container = element.ownerDocument.querySelector(container);\n }\n if (!container) {\n container = this.body;\n }\n container.appendChild(viewer);\n }\n if (options.inline) {\n this.render();\n this.bind();\n this.isShown = true;\n }\n this.ready = true;\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_READY) === false) {\n this.ready = false;\n return;\n }\n if (this.ready && options.inline) {\n this.view(this.index);\n }\n }\n\n /**\n * Get the no conflict viewer class.\n * @returns {Viewer} The viewer class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Viewer = AnotherViewer;\n return Viewer;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n return Viewer;\n }();\n assign(Viewer.prototype, render, events, handlers, methods, others);\n\n return Viewer;\n\n}));\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"d-flex flex-column align-center justify-center\",attrs:{\"id\":\"app\"}},[_c('viewer',{ref:\"viewer\",staticClass:\"viewer\",attrs:{\"options\":_vm.options},on:{\"inited\":_vm.inited}},[_c('img',{staticClass:\"image\",attrs:{\"src\":_vm.imageSrc},on:{\"click\":function($event){$event.stopPropagation();return _vm.showImage.apply(null, arguments)}}})])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FlashcardImageViewer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FlashcardImageViewer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./FlashcardImageViewer.vue?vue&type=template&id=2e92c60f\"\nimport script from \"./FlashcardImageViewer.vue?vue&type=script&lang=js\"\nexport * from \"./FlashcardImageViewer.vue?vue&type=script&lang=js\"\nimport style0 from \"./FlashcardImageViewer.vue?vue&type=style&index=0&id=2e92c60f&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}