{"version":3,"sources":["webpack:///./node_modules/lodash.debounce/index.js","webpack:///./node_modules/detect-passive-events/lib/index.js","webpack:///./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","webpack:///./node_modules/lodash.throttle/index.js","webpack:///./node_modules/react-image-gallery/build/image-gallery.js","webpack:///./node_modules/react-swipeable/lib/Swipeable.js"],"names":["reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectToString","prototype","toString","nativeMax","Math","max","nativeMin","min","now","Date","isObject","value","type","toNumber","isObjectLike","call","isSymbol","other","valueOf","replace","isBinary","test","slice","module","exports","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","remainingWait","debounced","isInvoking","arguments","this","cancel","clearTimeout","flush","defineProperty","detectPassiveEvents","update","window","addEventListener","passive","get","noop","removeEventListener","hasSupport","default","MapShim","Map","getIndex","arr","key","some","entry","index","class_1","__entries__","length","enumerable","configurable","set","push","delete","entries","splice","has","clear","forEach","callback","ctx","_i","_a","isBrowser","document","global$1","requestAnimationFrame$1","requestAnimationFrame","bind","transitionKeys","mutationObserverSupported","MutationObserver","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","refresh","delay","leadingCall","trailingCall","resolvePending","proxy","timeoutCallback","timeStamp","throttle","addObserver","observer","indexOf","connect_","removeObserver","observers","disconnect_","updateObservers_","activeObservers","filter","gatherActive","hasActive","broadcastActive","observe","attributes","childList","characterData","subtree","disconnect","_b","propertyName","getInstance","instance_","defineConfigurable","target","props","keys","writable","getWindowOf","ownerDocument","defaultView","emptyRect","createRectInit","toFloat","parseFloat","getBordersSize","styles","positions","reduce","size","position","getHTMLElementContentRect","clientWidth","clientHeight","getComputedStyle","paddings","positions_1","getPaddings","horizPad","left","right","vertPad","top","bottom","width","height","boxSizing","round","documentElement","isDocumentElement","vertScrollbar","horizScrollbar","abs","isSVGGraphicsElement","SVGGraphicsElement","SVGElement","getBBox","getContentRect","bbox","getSVGContentRect","x","y","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","isActive","rect","broadcastRect","ResizeObserverEntry","rectInit","Constr","contentRect","DOMRectReadOnly","create","ResizeObserverSPI","controller","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","Element","observations","unobserve","clearActive","_this","observation","map","WeakMap","ResizeObserver","method","debounce","_extends","assign","i","source","hasOwnProperty","_createClass","defineProperties","descriptor","Constructor","protoProps","staticProps","_react2","_interopRequireDefault","_reactSwipeable2","_lodash2","_lodash4","_resizeObserverPolyfill2","_propTypes2","obj","__esModule","screenChangeEvents","ImageGallery","_React$Component","instance","_classCallCheck","ReferenceError","_possibleConstructorReturn","getPrototypeOf","slideToIndex","event","_this$state","state","currentIndex","isTransitioning","_intervalId","pause","play","slideCount","items","nextIndex","setState","previousIndex","offsetPercentage","style","transition","slideDuration","_onSliding","_transitionTimer","_handleScreenChange","fullScreenElement","fullscreenElement","msFullscreenElement","mozFullScreenElement","webkitFullscreenElement","onScreenChange","isFullscreen","_toggleFullScreen","exitFullScreen","fullScreen","_togglePlay","_initGalleryResizing","element","_imageGallerySlideWrapper","resizeObserver","_createResizeObserver","_handleResize","_imageGallery","galleryWidth","offsetWidth","gallerySlideWrapperHeight","offsetHeight","_thumbnailsWrapper","_isThumbnailHorizontal","thumbnailsWrapperHeight","thumbnailsWrapperWidth","_setThumbsTranslate","_getThumbsTranslate","_handleKeyDown","keyCode","which","_canSlideLeft","_slideLeft","_canSlideRight","_slideRight","useBrowserFullscreen","_handleImageError","defaultImage","src","_handleOnSwiped","e","deltaX","deltaY","isFlick","_this$state2","scrollingUpDown","scrollingLeftRight","isRTL","side","_handleOnSwipedTo","_handleSwiping","delta","_this$state3","swipingTransitionDuration","_setScrollDirection","swipingTransition","_slideNext","_slidePrevious","_renderItem","item","onImageError","createElement","className","imageSet","onLoad","onImageLoad","onError","media","srcSet","alt","originalAlt","original","sizes","title","originalTitle","description","_renderThumbInner","onThumbnailError","thumbnail","thumbnailAlt","thumbnailTitle","thumbnailLabel","_onThumbnailClick","onThumbnailClick","startIndex","thumbsTranslate","isPlaying","_unthrottledSlideToIndex","lazyLoad","_lazyLoaded","subClass","superClass","constructor","setPrototypeOf","__proto__","_inherits","nextProps","disableArrowKeys","prevProps","prevState","onSlide","_updateThumbnailTranslate","autoPlay","_onScreenChangeEvent","_offScreenChangeEvent","clearInterval","_this2","_props","slideInterval","setInterval","hovering","infinite","onPlay","onPause","modalFullscreen","gallery","requestFullscreen","msRequestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","setModalFullscreen","exitFullscreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","_this3","eventName","_this4","thumbnailPosition","_state","_state2","slideTo","_sufficientSwipeOffset","swipeThreshold","_canSlideNext","_canSlidePrevious","_state3","indexDifference","scroll","disableThumbnailScroll","_state4","totalScroll","_thumbnails","scrollHeight","scrollWidth","children","alignment","_state5","totalSlides","_state6","_state7","translateX","direction","_slideIsTransitioning","_ignoreIsTransitioning","_isFirstOrLastSlide","_state8","_state9","_state10","_props2","useTranslate3D","baseTranslateX","_getTranslateXForTwoSlide","translate","WebkitTransform","MozTransform","msTransform","OTransform","transform","_props3","verticalTranslateValue","_this5","_state11","_props4","preventDefaultTouchmoveEvent","thumbnailStyle","_getThumbnailStyle","slideLeft","slideRight","slides","thumbnails","bullets","_getAlignmentClassName","originalClass","thumbnailClass","renderItem","renderThumbInner","showItem","slideStyle","_getSlideStyle","slide","onClick","onTouchMove","onTouchEnd","onTouchStart","onMouseOver","onMouseLeave","role","_shouldPushSlideOnInfiniteMode","showThumbnails","showBullets","bulletClass","join","bulletOnClick","itemIndex","slideWrapper","ref","renderCustomControls","showFullscreenButton","renderFullscreenButton","showPlayButton","renderPlayPauseButton","_canNavigate","showNav","renderLeftNav","renderRightNav","disabled","disableSwipe","flickThreshold","onSwiping","onSwiped","stopPropagation","showIndex","indexSeparator","classNames","additionalClass","name","_getThumbnailBarHeight","t","Component","propTypes","number","array","isRequired","bool","string","defaultProps","React","DetectPassiveEvents","rotateByAngle","pos","angle","angleInRadians","PI","cos","sin","calculatePos","_rotateByAngle","changedTouches","clientX","clientY","getMovingPosition","rotationAngle","absX","absY","start","velocity","sqrt","Swipeable","context","swipeable","swiping","eventStart","eventMove","eventEnd","mouseDown","mouseMove","mouseUp","cleanupMouseListeners","setupMouseListeners","elementRef","setupTouchmoveEvent","cleanupTouchmoveEvent","hasPassiveSupport","componentDidMount","componentDidUpdate","componentWillUnmount","trackMouse","onMouseDown","touches","_rotateByAngle2","getPosition","onSwipingLeft","onSwipedLeft","onSwipingRight","onSwipedRight","onSwipingUp","onSwipedUp","onSwipingDown","onSwipedDown","cancelablePageSwipe","preventDefault","onTap","innerRef","render","newProps","nodeName"],"mappings":"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","file":"a223b6991bb8e39aaf056ff8a4420a5579a439bf-47a0b742b0c112bc3fdf.js","sourcesContent":["/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/** Used as references for various `Number` constants. */\n\nvar NAN = 0 / 0;\n/** `Object#toString` result references. */\n\nvar symbolTag = '[object Symbol]';\n/** Used to match leading and trailing whitespace. */\n\nvar reTrim = /^\\s+|\\s+$/g;\n/** Used to detect bad signed hexadecimal string values. */\n\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n/** Used to detect binary string values. */\n\nvar reIsBinary = /^0b[01]+$/i;\n/** Used to detect octal string values. */\n\nvar reIsOctal = /^0o[0-7]+$/i;\n/** Built-in method references without a dependency on `root`. */\n\nvar freeParseInt = parseInt;\n/** Detect free variable `global` from Node.js. */\n\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n/** Detect free variable `self`. */\n\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */\n\nvar root = freeGlobal || freeSelf || Function('return this')();\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar objectToString = objectProto.toString;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n\nvar now = function now() {\n return root.Date.now();\n};\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n\n\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n wait = toNumber(wait) || 0;\n\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\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time; // Start the timer for the trailing edge.\n\n timerId = setTimeout(timerExpired, wait); // Invoke the leading edge.\n\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = now();\n\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n } // Restart the timer.\n\n\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n\n return result;\n }\n\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\n\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\n\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n\n\nfunction isSymbol(value) {\n return typeof value == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag;\n}\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n\n\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n\n if (isSymbol(value)) {\n return NAN;\n }\n\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? other + '' : other;\n }\n\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n\n value = value.replace(reTrim, '');\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}\n\nmodule.exports = debounce;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n}); // adapted from https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n\nvar detectPassiveEvents = {\n update: function update() {\n if (typeof window !== 'undefined' && typeof window.addEventListener === 'function') {\n var passive = false;\n var options = Object.defineProperty({}, 'passive', {\n get: function get() {\n passive = true;\n }\n }); // note: have to set and remove a no-op listener instead of null\n // (which was used previously), becasue Edge v15 throws an error\n // when providing a null callback.\n // https://github.com/rafrex/detect-passive-events/pull/3\n\n var noop = function noop() {};\n\n window.addEventListener('testPassiveEventSupport', noop, options);\n window.removeEventListener('testPassiveEventSupport', noop, options);\n detectPassiveEvents.hasSupport = passive;\n }\n }\n};\ndetectPassiveEvents.update();\nexports.default = detectPassiveEvents;","import \"core-js/modules/es.array.reduce.js\";\n\n/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\n\n/* eslint-disable require-jsdoc, valid-jsdoc */\nvar MapShim = function () {\n if (typeof Map !== 'undefined') {\n return Map;\n }\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\n\n\n function getIndex(arr, key) {\n var result = -1;\n arr.some(function (entry, index) {\n if (entry[0] === key) {\n result = index;\n return true;\n }\n\n return false;\n });\n return result;\n }\n\n return (\n /** @class */\n function () {\n function class_1() {\n this.__entries__ = [];\n }\n\n Object.defineProperty(class_1.prototype, \"size\", {\n /**\r\n * @returns {boolean}\r\n */\n get: function get() {\n return this.__entries__.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\n\n class_1.prototype.get = function (key) {\n var index = getIndex(this.__entries__, key);\n var entry = this.__entries__[index];\n return entry && entry[1];\n };\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.set = function (key, value) {\n var index = getIndex(this.__entries__, key);\n\n if (~index) {\n this.__entries__[index][1] = value;\n } else {\n this.__entries__.push([key, value]);\n }\n };\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.delete = function (key) {\n var entries = this.__entries__;\n var index = getIndex(entries, key);\n\n if (~index) {\n entries.splice(index, 1);\n }\n };\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.has = function (key) {\n return !!~getIndex(this.__entries__, key);\n };\n /**\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.clear = function () {\n this.__entries__.splice(0);\n };\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.forEach = function (callback, ctx) {\n if (ctx === void 0) {\n ctx = null;\n }\n\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\n var entry = _a[_i];\n callback.call(ctx, entry[1], entry[0]);\n }\n };\n\n return class_1;\n }()\n );\n}();\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\n\n\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document; // Returns global object of a current environment.\n\nvar global$1 = function () {\n if (typeof global !== 'undefined' && global.Math === Math) {\n return global;\n }\n\n if (typeof self !== 'undefined' && self.Math === Math) {\n return self;\n }\n\n if (typeof window !== 'undefined' && window.Math === Math) {\n return window;\n } // eslint-disable-next-line no-new-func\n\n\n return Function('return this')();\n}();\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\n\n\nvar requestAnimationFrame$1 = function () {\n if (typeof requestAnimationFrame === 'function') {\n // It's required to use a bounded function because IE sometimes throws\n // an \"Invalid calling object\" error if rAF is invoked without the global\n // object on the left hand side.\n return requestAnimationFrame.bind(global$1);\n }\n\n return function (callback) {\n return setTimeout(function () {\n return callback(Date.now());\n }, 1000 / 60);\n };\n}(); // Defines minimum timeout before adding a trailing call.\n\n\nvar trailingTimeout = 2;\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\n\nfunction throttle(callback, delay) {\n var leadingCall = false,\n trailingCall = false,\n lastCallTime = 0;\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\n\n function resolvePending() {\n if (leadingCall) {\n leadingCall = false;\n callback();\n }\n\n if (trailingCall) {\n proxy();\n }\n }\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\n\n\n function timeoutCallback() {\n requestAnimationFrame$1(resolvePending);\n }\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\n\n\n function proxy() {\n var timeStamp = Date.now();\n\n if (leadingCall) {\n // Reject immediately following calls.\n if (timeStamp - lastCallTime < trailingTimeout) {\n return;\n } // Schedule new call to be in invoked when the pending one is resolved.\n // This is important for \"transitions\" which never actually start\n // immediately so there is a chance that we might miss one if change\n // happens amids the pending invocation.\n\n\n trailingCall = true;\n } else {\n leadingCall = true;\n trailingCall = false;\n setTimeout(timeoutCallback, delay);\n }\n\n lastCallTime = timeStamp;\n }\n\n return proxy;\n} // Minimum delay before invoking the update of observers.\n\n\nvar REFRESH_DELAY = 20; // A list of substrings of CSS properties used to find transition events that\n// might affect dimensions of observed elements.\n\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight']; // Check if MutationObserver is available.\n\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\n\nvar ResizeObserverController =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\n function ResizeObserverController() {\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\n this.connected_ = false;\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\n\n this.mutationEventsAdded_ = false;\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\n\n this.mutationsObserver_ = null;\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\n\n this.observers_ = [];\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\n }\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.addObserver = function (observer) {\n if (!~this.observers_.indexOf(observer)) {\n this.observers_.push(observer);\n } // Add listeners if they haven't been added yet.\n\n\n if (!this.connected_) {\n this.connect_();\n }\n };\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.removeObserver = function (observer) {\n var observers = this.observers_;\n var index = observers.indexOf(observer); // Remove observer if it's present in registry.\n\n if (~index) {\n observers.splice(index, 1);\n } // Remove listeners if controller has no connected observers.\n\n\n if (!observers.length && this.connected_) {\n this.disconnect_();\n }\n };\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.refresh = function () {\n var changesDetected = this.updateObservers_(); // Continue running updates if changes have been detected as there might\n // be future ones caused by CSS transitions.\n\n if (changesDetected) {\n this.refresh();\n }\n };\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\n\n\n ResizeObserverController.prototype.updateObservers_ = function () {\n // Collect observers that have active observations.\n var activeObservers = this.observers_.filter(function (observer) {\n return observer.gatherActive(), observer.hasActive();\n }); // Deliver notifications in a separate cycle in order to avoid any\n // collisions between observers, e.g. when multiple instances of\n // ResizeObserver are tracking the same element and the callback of one\n // of them changes content dimensions of the observed target. Sometimes\n // this may result in notifications being blocked for the rest of observers.\n\n activeObservers.forEach(function (observer) {\n return observer.broadcastActive();\n });\n return activeObservers.length > 0;\n };\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.connect_ = function () {\n // Do nothing if running in a non-browser environment or if listeners\n // have been already added.\n if (!isBrowser || this.connected_) {\n return;\n } // Subscription to the \"Transitionend\" event is used as a workaround for\n // delayed transitions. This way it's possible to capture at least the\n // final state of an element.\n\n\n document.addEventListener('transitionend', this.onTransitionEnd_);\n window.addEventListener('resize', this.refresh);\n\n if (mutationObserverSupported) {\n this.mutationsObserver_ = new MutationObserver(this.refresh);\n this.mutationsObserver_.observe(document, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n } else {\n document.addEventListener('DOMSubtreeModified', this.refresh);\n this.mutationEventsAdded_ = true;\n }\n\n this.connected_ = true;\n };\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.disconnect_ = function () {\n // Do nothing if running in a non-browser environment or if listeners\n // have been already removed.\n if (!isBrowser || !this.connected_) {\n return;\n }\n\n document.removeEventListener('transitionend', this.onTransitionEnd_);\n window.removeEventListener('resize', this.refresh);\n\n if (this.mutationsObserver_) {\n this.mutationsObserver_.disconnect();\n }\n\n if (this.mutationEventsAdded_) {\n document.removeEventListener('DOMSubtreeModified', this.refresh);\n }\n\n this.mutationsObserver_ = null;\n this.mutationEventsAdded_ = false;\n this.connected_ = false;\n };\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\n var _b = _a.propertyName,\n propertyName = _b === void 0 ? '' : _b; // Detect whether transition may affect dimensions of an element.\n\n var isReflowProperty = transitionKeys.some(function (key) {\n return !!~propertyName.indexOf(key);\n });\n\n if (isReflowProperty) {\n this.refresh();\n }\n };\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\n\n\n ResizeObserverController.getInstance = function () {\n if (!this.instance_) {\n this.instance_ = new ResizeObserverController();\n }\n\n return this.instance_;\n };\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\n\n\n ResizeObserverController.instance_ = null;\n return ResizeObserverController;\n}();\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\n\n\nvar defineConfigurable = function defineConfigurable(target, props) {\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var key = _a[_i];\n Object.defineProperty(target, key, {\n value: props[key],\n enumerable: false,\n writable: false,\n configurable: true\n });\n }\n\n return target;\n};\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\n\n\nvar getWindowOf = function getWindowOf(target) {\n // Assume that the element is an instance of Node, which means that it\n // has the \"ownerDocument\" property from which we can retrieve a\n // corresponding global object.\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView; // Return the local global object if it's not possible extract one from\n // provided element.\n\n return ownerGlobal || global$1;\n}; // Placeholder of an empty content rectangle.\n\n\nvar emptyRect = createRectInit(0, 0, 0, 0);\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\n\nfunction toFloat(value) {\n return parseFloat(value) || 0;\n}\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\n\n\nfunction getBordersSize(styles) {\n var positions = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n positions[_i - 1] = arguments[_i];\n }\n\n return positions.reduce(function (size, position) {\n var value = styles['border-' + position + '-width'];\n return size + toFloat(value);\n }, 0);\n}\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\n\n\nfunction getPaddings(styles) {\n var positions = ['top', 'right', 'bottom', 'left'];\n var paddings = {};\n\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\n var position = positions_1[_i];\n var value = styles['padding-' + position];\n paddings[position] = toFloat(value);\n }\n\n return paddings;\n}\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getSVGContentRect(target) {\n var bbox = target.getBBox();\n return createRectInit(0, 0, bbox.width, bbox.height);\n}\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getHTMLElementContentRect(target) {\n // Client width & height properties can't be\n // used exclusively as they provide rounded values.\n var clientWidth = target.clientWidth,\n clientHeight = target.clientHeight; // By this condition we can catch all non-replaced inline, hidden and\n // detached elements. Though elements with width & height properties less\n // than 0.5 will be discarded as well.\n //\n // Without it we would need to implement separate methods for each of\n // those cases and it's not possible to perform a precise and performance\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\n // gives wrong results for elements with width & height less than 0.5.\n\n if (!clientWidth && !clientHeight) {\n return emptyRect;\n }\n\n var styles = getWindowOf(target).getComputedStyle(target);\n var paddings = getPaddings(styles);\n var horizPad = paddings.left + paddings.right;\n var vertPad = paddings.top + paddings.bottom; // Computed styles of width & height are being used because they are the\n // only dimensions available to JS that contain non-rounded values. It could\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\n // affected by CSS transformations let alone paddings, borders and scroll bars.\n\n var width = toFloat(styles.width),\n height = toFloat(styles.height); // Width & height include paddings and borders when the 'border-box' box\n // model is applied (except for IE).\n\n if (styles.boxSizing === 'border-box') {\n // Following conditions are required to handle Internet Explorer which\n // doesn't include paddings and borders to computed CSS dimensions.\n //\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\n // properties then it's either IE, and thus we don't need to subtract\n // anything, or an element merely doesn't have paddings/borders styles.\n if (Math.round(width + horizPad) !== clientWidth) {\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\n }\n\n if (Math.round(height + vertPad) !== clientHeight) {\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\n }\n } // Following steps can't be applied to the document's root element as its\n // client[Width/Height] properties represent viewport area of the window.\n // Besides, it's as well not necessary as the itself neither has\n // rendered scroll bars nor it can be clipped.\n\n\n if (!isDocumentElement(target)) {\n // In some browsers (only in Firefox, actually) CSS width & height\n // include scroll bars size which can be removed at this step as scroll\n // bars are the only difference between rounded dimensions + paddings\n // and \"client\" properties, though that is not always true in Chrome.\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\n var horizScrollbar = Math.round(height + vertPad) - clientHeight; // Chrome has a rather weird rounding of \"client\" properties.\n // E.g. for an element with content width of 314.2px it sometimes gives\n // the client width of 315px and for the width of 314.7px it may give\n // 314px. And it doesn't happen all the time. So just ignore this delta\n // as a non-relevant.\n\n if (Math.abs(vertScrollbar) !== 1) {\n width -= vertScrollbar;\n }\n\n if (Math.abs(horizScrollbar) !== 1) {\n height -= horizScrollbar;\n }\n }\n\n return createRectInit(paddings.left, paddings.top, width, height);\n}\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\n\n\nvar isSVGGraphicsElement = function () {\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\n // interface.\n if (typeof SVGGraphicsElement !== 'undefined') {\n return function (target) {\n return target instanceof getWindowOf(target).SVGGraphicsElement;\n };\n } // If it's so, then check that element is at least an instance of the\n // SVGElement and that it has the \"getBBox\" method.\n // eslint-disable-next-line no-extra-parens\n\n\n return function (target) {\n return target instanceof getWindowOf(target).SVGElement && typeof target.getBBox === 'function';\n };\n}();\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\n\n\nfunction isDocumentElement(target) {\n return target === getWindowOf(target).document.documentElement;\n}\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getContentRect(target) {\n if (!isBrowser) {\n return emptyRect;\n }\n\n if (isSVGGraphicsElement(target)) {\n return getSVGContentRect(target);\n }\n\n return getHTMLElementContentRect(target);\n}\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\n\n\nfunction createReadOnlyRect(_a) {\n var x = _a.x,\n y = _a.y,\n width = _a.width,\n height = _a.height; // If DOMRectReadOnly is available use it as a prototype for the rectangle.\n\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\n var rect = Object.create(Constr.prototype); // Rectangle's properties are not writable and non-enumerable.\n\n defineConfigurable(rect, {\n x: x,\n y: y,\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: height + y,\n left: x\n });\n return rect;\n}\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction createRectInit(x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n}\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\n\n\nvar ResizeObservation =\n/** @class */\nfunction () {\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\n function ResizeObservation(target) {\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\n this.broadcastWidth = 0;\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\n\n this.broadcastHeight = 0;\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\n\n this.contentRect_ = createRectInit(0, 0, 0, 0);\n this.target = target;\n }\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\n\n\n ResizeObservation.prototype.isActive = function () {\n var rect = getContentRect(this.target);\n this.contentRect_ = rect;\n return rect.width !== this.broadcastWidth || rect.height !== this.broadcastHeight;\n };\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\n\n\n ResizeObservation.prototype.broadcastRect = function () {\n var rect = this.contentRect_;\n this.broadcastWidth = rect.width;\n this.broadcastHeight = rect.height;\n return rect;\n };\n\n return ResizeObservation;\n}();\n\nvar ResizeObserverEntry =\n/** @class */\nfunction () {\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\n function ResizeObserverEntry(target, rectInit) {\n var contentRect = createReadOnlyRect(rectInit); // According to the specification following properties are not writable\n // and are also not enumerable in the native implementation.\n //\n // Property accessors are not being used as they'd require to define a\n // private WeakMap storage which may cause memory leaks in browsers that\n // don't support this type of collections.\n\n defineConfigurable(this, {\n target: target,\n contentRect: contentRect\n });\n }\n\n return ResizeObserverEntry;\n}();\n\nvar ResizeObserverSPI =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\n function ResizeObserverSPI(callback, controller, callbackCtx) {\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\n this.activeObservations_ = [];\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\n\n this.observations_ = new MapShim();\n\n if (typeof callback !== 'function') {\n throw new TypeError('The callback provided as parameter 1 is not a function.');\n }\n\n this.callback_ = callback;\n this.controller_ = controller;\n this.callbackCtx_ = callbackCtx;\n }\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.observe = function (target) {\n if (!arguments.length) {\n throw new TypeError('1 argument required, but only 0 present.');\n } // Do nothing if current environment doesn't have the Element interface.\n\n\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\n return;\n }\n\n if (!(target instanceof getWindowOf(target).Element)) {\n throw new TypeError('parameter 1 is not of type \"Element\".');\n }\n\n var observations = this.observations_; // Do nothing if element is already being observed.\n\n if (observations.has(target)) {\n return;\n }\n\n observations.set(target, new ResizeObservation(target));\n this.controller_.addObserver(this); // Force the update of observations.\n\n this.controller_.refresh();\n };\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.unobserve = function (target) {\n if (!arguments.length) {\n throw new TypeError('1 argument required, but only 0 present.');\n } // Do nothing if current environment doesn't have the Element interface.\n\n\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\n return;\n }\n\n if (!(target instanceof getWindowOf(target).Element)) {\n throw new TypeError('parameter 1 is not of type \"Element\".');\n }\n\n var observations = this.observations_; // Do nothing if element is not being observed.\n\n if (!observations.has(target)) {\n return;\n }\n\n observations.delete(target);\n\n if (!observations.size) {\n this.controller_.removeObserver(this);\n }\n };\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.disconnect = function () {\n this.clearActive();\n this.observations_.clear();\n this.controller_.removeObserver(this);\n };\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.gatherActive = function () {\n var _this = this;\n\n this.clearActive();\n this.observations_.forEach(function (observation) {\n if (observation.isActive()) {\n _this.activeObservations_.push(observation);\n }\n });\n };\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.broadcastActive = function () {\n // Do nothing if observer doesn't have active observations.\n if (!this.hasActive()) {\n return;\n }\n\n var ctx = this.callbackCtx_; // Create ResizeObserverEntry instance for every active observation.\n\n var entries = this.activeObservations_.map(function (observation) {\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\n });\n this.callback_.call(ctx, entries, ctx);\n this.clearActive();\n };\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.clearActive = function () {\n this.activeObservations_.splice(0);\n };\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\n\n\n ResizeObserverSPI.prototype.hasActive = function () {\n return this.activeObservations_.length > 0;\n };\n\n return ResizeObserverSPI;\n}(); // Registry of internal observers. If WeakMap is not available use current shim\n// for the Map collection as it has all required methods and because WeakMap\n// can't be fully polyfilled anyway.\n\n\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\n\nvar ResizeObserver =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\n function ResizeObserver(callback) {\n if (!(this instanceof ResizeObserver)) {\n throw new TypeError('Cannot call a class as a function.');\n }\n\n if (!arguments.length) {\n throw new TypeError('1 argument required, but only 0 present.');\n }\n\n var controller = ResizeObserverController.getInstance();\n var observer = new ResizeObserverSPI(callback, controller, this);\n observers.set(this, observer);\n }\n\n return ResizeObserver;\n}(); // Expose public methods of ResizeObserver.\n\n\n['observe', 'unobserve', 'disconnect'].forEach(function (method) {\n ResizeObserver.prototype[method] = function () {\n var _a;\n\n return (_a = observers.get(this))[method].apply(_a, arguments);\n };\n});\n\nvar index = function () {\n // Export existing implementation if available.\n if (typeof global$1.ResizeObserver !== 'undefined') {\n return global$1.ResizeObserver;\n }\n\n return ResizeObserver;\n}();\n\nexport default index;","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/** Used as references for various `Number` constants. */\n\nvar NAN = 0 / 0;\n/** `Object#toString` result references. */\n\nvar symbolTag = '[object Symbol]';\n/** Used to match leading and trailing whitespace. */\n\nvar reTrim = /^\\s+|\\s+$/g;\n/** Used to detect bad signed hexadecimal string values. */\n\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n/** Used to detect binary string values. */\n\nvar reIsBinary = /^0b[01]+$/i;\n/** Used to detect octal string values. */\n\nvar reIsOctal = /^0o[0-7]+$/i;\n/** Built-in method references without a dependency on `root`. */\n\nvar freeParseInt = parseInt;\n/** Detect free variable `global` from Node.js. */\n\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n/** Detect free variable `self`. */\n\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */\n\nvar root = freeGlobal || freeSelf || Function('return this')();\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar objectToString = objectProto.toString;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n\nvar now = function now() {\n return root.Date.now();\n};\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n\n\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n wait = toNumber(wait) || 0;\n\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\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time; // Start the timer for the trailing edge.\n\n timerId = setTimeout(timerExpired, wait); // Invoke the leading edge.\n\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = now();\n\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n } // Restart the timer.\n\n\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n\n return result;\n }\n\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n\n\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\n\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\n\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n\n\nfunction isSymbol(value) {\n return typeof value == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag;\n}\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n\n\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n\n if (isSymbol(value)) {\n return NAN;\n }\n\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? other + '' : other;\n }\n\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n\n value = value.replace(reTrim, '');\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}\n\nmodule.exports = throttle;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactSwipeable = require('react-swipeable');\n\nvar _reactSwipeable2 = _interopRequireDefault(_reactSwipeable);\n\nvar _lodash = require('lodash.throttle');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _lodash3 = require('lodash.debounce');\n\nvar _lodash4 = _interopRequireDefault(_lodash3);\n\nvar _resizeObserverPolyfill = require('resize-observer-polyfill');\n\nvar _resizeObserverPolyfill2 = _interopRequireDefault(_resizeObserverPolyfill);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\nvar screenChangeEvents = ['fullscreenchange', 'MSFullscreenChange', 'mozfullscreenchange', 'webkitfullscreenchange'];\n\nvar ImageGallery = function (_React$Component) {\n _inherits(ImageGallery, _React$Component);\n\n function ImageGallery(props) {\n _classCallCheck(this, ImageGallery);\n\n var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ImageGallery).call(this, props));\n\n _this.slideToIndex = function (index, event) {\n var _this$state = _this.state;\n var currentIndex = _this$state.currentIndex;\n var isTransitioning = _this$state.isTransitioning;\n\n if (!isTransitioning) {\n if (event) {\n if (_this._intervalId) {\n // user triggered event while ImageGallery is playing, reset interval\n _this.pause(false);\n\n _this.play(false);\n }\n }\n\n var slideCount = _this.props.items.length - 1;\n var nextIndex = index;\n\n if (index < 0) {\n nextIndex = slideCount;\n } else if (index > slideCount) {\n nextIndex = 0;\n }\n\n _this.setState({\n previousIndex: currentIndex,\n currentIndex: nextIndex,\n isTransitioning: nextIndex !== currentIndex,\n offsetPercentage: 0,\n style: {\n transition: 'all ' + _this.props.slideDuration + 'ms ease-out'\n }\n }, _this._onSliding);\n }\n };\n\n _this._onSliding = function () {\n var isTransitioning = _this.state.isTransitioning;\n _this._transitionTimer = window.setTimeout(function () {\n if (isTransitioning) {\n _this.setState({\n isTransitioning: !isTransitioning\n });\n }\n }, _this.props.slideDuration + 50);\n };\n\n _this._handleScreenChange = function () {\n /*\n handles screen change events that the browser triggers e.g. esc key\n */\n var fullScreenElement = document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n\n if (_this.props.onScreenChange) {\n _this.props.onScreenChange(fullScreenElement);\n }\n\n _this.setState({\n isFullscreen: !!fullScreenElement\n });\n };\n\n _this._toggleFullScreen = function () {\n if (_this.state.isFullscreen) {\n _this.exitFullScreen();\n } else {\n _this.fullScreen();\n }\n };\n\n _this._togglePlay = function () {\n if (_this._intervalId) {\n _this.pause();\n } else {\n _this.play();\n }\n };\n\n _this._initGalleryResizing = function (element) {\n /*\n When image-gallery-slide-wrapper unmounts and mounts when thumbnail bar position is changed\n ref is called twice, once with null and another with the element.\n Make sure element is available before calling observe.\n */\n if (element) {\n _this._imageGallerySlideWrapper = element;\n _this.resizeObserver = new _resizeObserverPolyfill2.default(_this._createResizeObserver);\n\n _this.resizeObserver.observe(element);\n }\n };\n\n _this._createResizeObserver = (0, _lodash4.default)(function (entries) {\n if (!entries) return;\n entries.forEach(function () {\n _this._handleResize();\n });\n }, 300);\n\n _this._handleResize = function () {\n var currentIndex = _this.state.currentIndex;\n\n if (_this._imageGallery) {\n _this.setState({\n galleryWidth: _this._imageGallery.offsetWidth\n });\n }\n\n if (_this._imageGallerySlideWrapper) {\n _this.setState({\n gallerySlideWrapperHeight: _this._imageGallerySlideWrapper.offsetHeight\n });\n }\n\n if (_this._thumbnailsWrapper) {\n if (_this._isThumbnailHorizontal()) {\n _this.setState({\n thumbnailsWrapperHeight: _this._thumbnailsWrapper.offsetHeight\n });\n } else {\n _this.setState({\n thumbnailsWrapperWidth: _this._thumbnailsWrapper.offsetWidth\n });\n }\n } // Adjust thumbnail container when thumbnail width or height is adjusted\n\n\n _this._setThumbsTranslate(-_this._getThumbsTranslate(currentIndex));\n };\n\n _this._handleKeyDown = function (event) {\n var LEFT_ARROW = 37;\n var RIGHT_ARROW = 39;\n var ESC_KEY = 27;\n var key = parseInt(event.keyCode || event.which || 0);\n\n switch (key) {\n case LEFT_ARROW:\n if (_this._canSlideLeft() && !_this._intervalId) {\n _this._slideLeft();\n }\n\n break;\n\n case RIGHT_ARROW:\n if (_this._canSlideRight() && !_this._intervalId) {\n _this._slideRight();\n }\n\n break;\n\n case ESC_KEY:\n if (_this.state.isFullscreen && !_this.props.useBrowserFullscreen) {\n _this.exitFullScreen();\n }\n\n }\n };\n\n _this._handleImageError = function (event) {\n if (_this.props.defaultImage && event.target.src.indexOf(_this.props.defaultImage) === -1) {\n event.target.src = _this.props.defaultImage;\n }\n };\n\n _this._handleOnSwiped = function (e, deltaX, deltaY, isFlick) {\n var _this$state2 = _this.state;\n var scrollingUpDown = _this$state2.scrollingUpDown;\n var scrollingLeftRight = _this$state2.scrollingLeftRight;\n var isRTL = _this.props.isRTL;\n\n if (scrollingUpDown) {\n // user stopped scrollingUpDown\n _this.setState({\n scrollingUpDown: false\n });\n }\n\n if (scrollingLeftRight) {\n // user stopped scrollingLeftRight\n _this.setState({\n scrollingLeftRight: false\n });\n }\n\n if (!scrollingUpDown) {\n // don't swipe if user is scrolling\n var side = (deltaX > 0 ? 1 : -1) * (isRTL ? -1 : 1); //if it is RTL the direction is reversed\n\n _this._handleOnSwipedTo(side, isFlick);\n }\n };\n\n _this._handleSwiping = function (e, deltaX, deltaY, delta) {\n var _this$state3 = _this.state;\n var galleryWidth = _this$state3.galleryWidth;\n var isTransitioning = _this$state3.isTransitioning;\n var scrollingUpDown = _this$state3.scrollingUpDown;\n var swipingTransitionDuration = _this.props.swipingTransitionDuration;\n\n _this._setScrollDirection(deltaX, deltaY);\n\n if (!isTransitioning && !scrollingUpDown) {\n var side = deltaX < 0 ? 1 : -1;\n var offsetPercentage = delta / galleryWidth * 100;\n\n if (Math.abs(offsetPercentage) >= 100) {\n offsetPercentage = 100;\n }\n\n var swipingTransition = {\n transition: 'transform ' + swipingTransitionDuration + 'ms ease-out'\n };\n\n _this.setState({\n offsetPercentage: side * offsetPercentage,\n style: swipingTransition\n });\n } else {\n // don't move the slide\n _this.setState({\n offsetPercentage: 0\n });\n }\n };\n\n _this._slideLeft = function () {\n _this.props.isRTL ? _this._slideNext() : _this._slidePrevious();\n };\n\n _this._slideRight = function () {\n _this.props.isRTL ? _this._slidePrevious() : _this._slideNext();\n };\n\n _this._slidePrevious = function (event) {\n _this.slideToIndex(_this.state.currentIndex - 1, event);\n };\n\n _this._slideNext = function (event) {\n _this.slideToIndex(_this.state.currentIndex + 1, event);\n };\n\n _this._renderItem = function (item) {\n var onImageError = _this.props.onImageError || _this._handleImageError;\n return _react2.default.createElement('div', {\n className: 'image-gallery-image'\n }, item.imageSet ? _react2.default.createElement('picture', {\n onLoad: _this.props.onImageLoad,\n onError: onImageError\n }, item.imageSet.map(function (source, index) {\n return _react2.default.createElement('source', {\n key: index,\n media: source.media,\n srcSet: source.srcSet,\n type: source.type\n });\n }), _react2.default.createElement('img', {\n alt: item.originalAlt,\n src: item.original\n })) : _react2.default.createElement('img', {\n src: item.original,\n alt: item.originalAlt,\n srcSet: item.srcSet,\n sizes: item.sizes,\n title: item.originalTitle,\n onLoad: _this.props.onImageLoad,\n onError: onImageError\n }), item.description && _react2.default.createElement('span', {\n className: 'image-gallery-description'\n }, item.description));\n };\n\n _this._renderThumbInner = function (item) {\n var onThumbnailError = _this.props.onThumbnailError || _this._handleImageError;\n return _react2.default.createElement('div', {\n className: 'image-gallery-thumbnail-inner'\n }, _react2.default.createElement('img', {\n src: item.thumbnail,\n alt: item.thumbnailAlt,\n title: item.thumbnailTitle,\n onError: onThumbnailError\n }), item.thumbnailLabel && _react2.default.createElement('div', {\n className: 'image-gallery-thumbnail-label'\n }, item.thumbnailLabel));\n };\n\n _this._onThumbnailClick = function (event, index) {\n _this.slideToIndex(index, event);\n\n if (_this.props.onThumbnailClick) {\n _this.props.onThumbnailClick(event, index);\n }\n };\n\n _this.state = {\n currentIndex: props.startIndex,\n thumbsTranslate: 0,\n offsetPercentage: 0,\n galleryWidth: 0,\n thumbnailsWrapperWidth: 0,\n thumbnailsWrapperHeight: 0,\n isFullscreen: false,\n isPlaying: false\n }; // Used to update the throttle if slideDuration changes\n\n _this._unthrottledSlideToIndex = _this.slideToIndex;\n _this.slideToIndex = (0, _lodash2.default)(_this._unthrottledSlideToIndex, props.slideDuration, {\n trailing: false\n });\n\n if (props.lazyLoad) {\n _this._lazyLoaded = [];\n }\n\n return _this;\n }\n\n _createClass(ImageGallery, [{\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n if (this.props.disableArrowKeys !== nextProps.disableArrowKeys) {\n if (nextProps.disableArrowKeys) {\n window.removeEventListener('keydown', this._handleKeyDown);\n } else {\n window.addEventListener('keydown', this._handleKeyDown);\n }\n }\n\n if (nextProps.lazyLoad && (!this.props.lazyLoad || this.props.items !== nextProps.items)) {\n this._lazyLoaded = [];\n }\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps, prevState) {\n var itemsChanged = prevProps.items.length !== this.props.items.length;\n\n if (itemsChanged) {\n this._handleResize();\n }\n\n if (prevState.currentIndex !== this.state.currentIndex) {\n if (this.props.onSlide) {\n this.props.onSlide(this.state.currentIndex);\n }\n\n this._updateThumbnailTranslate(prevState.currentIndex);\n }\n\n if (prevProps.slideDuration !== this.props.slideDuration) {\n this.slideToIndex = (0, _lodash2.default)(this._unthrottledSlideToIndex, this.props.slideDuration, {\n trailing: false\n });\n }\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (this.props.autoPlay) {\n this.play();\n }\n\n if (!this.props.disableArrowKeys) {\n window.addEventListener('keydown', this._handleKeyDown);\n }\n\n this._onScreenChangeEvent();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (!this.props.disableArrowKeys) {\n window.removeEventListener('keydown', this._handleKeyDown);\n }\n\n this._offScreenChangeEvent();\n\n if (this._intervalId) {\n window.clearInterval(this._intervalId);\n this._intervalId = null;\n }\n\n if (this.resizeObserver && this._imageGallerySlideWrapper) {\n this.resizeObserver.unobserve(this._imageGallerySlideWrapper);\n }\n\n if (this._transitionTimer) {\n window.clearTimeout(this._transitionTimer);\n }\n\n if (this._createResizeObserver) {\n this._createResizeObserver();\n }\n }\n }, {\n key: 'play',\n value: function play() {\n var _this2 = this;\n\n var callback = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];\n\n if (!this._intervalId) {\n var _props = this.props;\n var slideInterval = _props.slideInterval;\n var slideDuration = _props.slideDuration;\n this.setState({\n isPlaying: true\n });\n this._intervalId = window.setInterval(function () {\n if (!_this2.state.hovering) {\n if (!_this2.props.infinite && !_this2._canSlideRight()) {\n _this2.pause();\n } else {\n _this2.slideToIndex(_this2.state.currentIndex + 1);\n }\n }\n }, Math.max(slideInterval, slideDuration));\n\n if (this.props.onPlay && callback) {\n this.props.onPlay(this.state.currentIndex);\n }\n }\n }\n }, {\n key: 'pause',\n value: function pause() {\n var callback = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];\n\n if (this._intervalId) {\n window.clearInterval(this._intervalId);\n this._intervalId = null;\n this.setState({\n isPlaying: false\n });\n\n if (this.props.onPause && callback) {\n this.props.onPause(this.state.currentIndex);\n }\n }\n }\n }, {\n key: 'setModalFullscreen',\n value: function setModalFullscreen(state) {\n this.setState({\n modalFullscreen: state\n }); // manually call because browser does not support screenchange events\n\n if (this.props.onScreenChange) {\n this.props.onScreenChange(state);\n }\n }\n }, {\n key: 'fullScreen',\n value: function fullScreen() {\n var gallery = this._imageGallery;\n\n if (this.props.useBrowserFullscreen) {\n if (gallery.requestFullscreen) {\n gallery.requestFullscreen();\n } else if (gallery.msRequestFullscreen) {\n gallery.msRequestFullscreen();\n } else if (gallery.mozRequestFullScreen) {\n gallery.mozRequestFullScreen();\n } else if (gallery.webkitRequestFullscreen) {\n gallery.webkitRequestFullscreen();\n } else {\n // fallback to fullscreen modal for unsupported browsers\n this.setModalFullscreen(true);\n }\n } else {\n this.setModalFullscreen(true);\n }\n\n this.setState({\n isFullscreen: true\n });\n }\n }, {\n key: 'exitFullScreen',\n value: function exitFullScreen() {\n if (this.state.isFullscreen) {\n if (this.props.useBrowserFullscreen) {\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 } else {\n // fallback to fullscreen modal for unsupported browsers\n this.setModalFullscreen(false);\n }\n } else {\n this.setModalFullscreen(false);\n }\n\n this.setState({\n isFullscreen: false\n });\n }\n }\n }, {\n key: 'getCurrentIndex',\n value: function getCurrentIndex() {\n return this.state.currentIndex;\n }\n }, {\n key: '_onScreenChangeEvent',\n value: function _onScreenChangeEvent() {\n var _this3 = this;\n\n screenChangeEvents.map(function (eventName) {\n document.addEventListener(eventName, _this3._handleScreenChange);\n });\n }\n }, {\n key: '_offScreenChangeEvent',\n value: function _offScreenChangeEvent() {\n var _this4 = this;\n\n screenChangeEvents.map(function (eventName) {\n document.removeEventListener(eventName, _this4._handleScreenChange);\n });\n }\n }, {\n key: '_isThumbnailHorizontal',\n value: function _isThumbnailHorizontal() {\n var thumbnailPosition = this.props.thumbnailPosition;\n return thumbnailPosition === 'left' || thumbnailPosition === 'right';\n }\n }, {\n key: '_setScrollDirection',\n value: function _setScrollDirection(deltaX, deltaY) {\n var _state = this.state;\n var scrollingUpDown = _state.scrollingUpDown;\n var scrollingLeftRight = _state.scrollingLeftRight;\n var x = Math.abs(deltaX);\n var y = Math.abs(deltaY); // If y > x the user is scrolling up and down\n\n if (y > x && !scrollingUpDown && !scrollingLeftRight) {\n this.setState({\n scrollingUpDown: true\n });\n } else if (!scrollingLeftRight && !scrollingUpDown) {\n this.setState({\n scrollingLeftRight: true\n });\n }\n }\n }, {\n key: '_handleOnSwipedTo',\n value: function _handleOnSwipedTo(side, isFlick) {\n var _state2 = this.state;\n var currentIndex = _state2.currentIndex;\n var isTransitioning = _state2.isTransitioning;\n var slideTo = currentIndex;\n\n if ((this._sufficientSwipeOffset() || isFlick) && !isTransitioning) {\n slideTo += side;\n }\n\n if (side < 0) {\n if (!this._canSlideLeft()) {\n slideTo = currentIndex;\n }\n } else {\n if (!this._canSlideRight()) {\n slideTo = currentIndex;\n }\n }\n\n this._unthrottledSlideToIndex(slideTo);\n }\n }, {\n key: '_sufficientSwipeOffset',\n value: function _sufficientSwipeOffset() {\n return Math.abs(this.state.offsetPercentage) > this.props.swipeThreshold;\n }\n }, {\n key: '_canNavigate',\n value: function _canNavigate() {\n return this.props.items.length >= 2;\n }\n }, {\n key: '_canSlideLeft',\n value: function _canSlideLeft() {\n return this.props.infinite || (this.props.isRTL ? this._canSlideNext() : this._canSlidePrevious());\n }\n }, {\n key: '_canSlideRight',\n value: function _canSlideRight() {\n return this.props.infinite || (this.props.isRTL ? this._canSlidePrevious() : this._canSlideNext());\n }\n }, {\n key: '_canSlidePrevious',\n value: function _canSlidePrevious() {\n return this.state.currentIndex > 0;\n }\n }, {\n key: '_canSlideNext',\n value: function _canSlideNext() {\n return this.state.currentIndex < this.props.items.length - 1;\n }\n }, {\n key: '_updateThumbnailTranslate',\n value: function _updateThumbnailTranslate(previousIndex) {\n var _state3 = this.state;\n var thumbsTranslate = _state3.thumbsTranslate;\n var currentIndex = _state3.currentIndex;\n\n if (this.state.currentIndex === 0) {\n this._setThumbsTranslate(0);\n } else {\n var indexDifference = Math.abs(previousIndex - currentIndex);\n\n var scroll = this._getThumbsTranslate(indexDifference);\n\n if (scroll > 0) {\n if (previousIndex < currentIndex) {\n this._setThumbsTranslate(thumbsTranslate - scroll);\n } else if (previousIndex > currentIndex) {\n this._setThumbsTranslate(thumbsTranslate + scroll);\n }\n }\n }\n }\n }, {\n key: '_setThumbsTranslate',\n value: function _setThumbsTranslate(thumbsTranslate) {\n this.setState({\n thumbsTranslate: thumbsTranslate\n });\n }\n }, {\n key: '_getThumbsTranslate',\n value: function _getThumbsTranslate(indexDifference) {\n if (this.props.disableThumbnailScroll) {\n return 0;\n }\n\n var _state4 = this.state;\n var thumbnailsWrapperWidth = _state4.thumbnailsWrapperWidth;\n var thumbnailsWrapperHeight = _state4.thumbnailsWrapperHeight;\n var totalScroll = void 0;\n\n if (this._thumbnails) {\n // total scroll required to see the last thumbnail\n if (this._isThumbnailHorizontal()) {\n if (this._thumbnails.scrollHeight <= thumbnailsWrapperHeight) {\n return 0;\n }\n\n totalScroll = this._thumbnails.scrollHeight - thumbnailsWrapperHeight;\n } else {\n if (this._thumbnails.scrollWidth <= thumbnailsWrapperWidth || thumbnailsWrapperWidth <= 0) {\n return 0;\n }\n\n totalScroll = this._thumbnails.scrollWidth - thumbnailsWrapperWidth;\n }\n\n var totalThumbnails = this._thumbnails.children.length; // scroll-x required per index change\n\n var perIndexScroll = totalScroll / (totalThumbnails - 1);\n return indexDifference * perIndexScroll;\n }\n }\n }, {\n key: '_getAlignmentClassName',\n value: function _getAlignmentClassName(index) {\n // LEFT, and RIGHT alignments are necessary for lazyLoad\n var currentIndex = this.state.currentIndex;\n var alignment = '';\n var LEFT = 'left';\n var CENTER = 'center';\n var RIGHT = 'right';\n\n switch (index) {\n case currentIndex - 1:\n alignment = ' ' + LEFT;\n break;\n\n case currentIndex:\n alignment = ' ' + CENTER;\n break;\n\n case currentIndex + 1:\n alignment = ' ' + RIGHT;\n break;\n }\n\n if (this.props.items.length >= 3 && this.props.infinite) {\n if (index === 0 && currentIndex === this.props.items.length - 1) {\n // set first slide as right slide if were sliding right from last slide\n alignment = ' ' + RIGHT;\n } else if (index === this.props.items.length - 1 && currentIndex === 0) {\n // set last slide as left slide if were sliding left from first slide\n alignment = ' ' + LEFT;\n }\n }\n\n return alignment;\n }\n }, {\n key: '_isGoingFromFirstToLast',\n value: function _isGoingFromFirstToLast() {\n var _state5 = this.state;\n var currentIndex = _state5.currentIndex;\n var previousIndex = _state5.previousIndex;\n var totalSlides = this.props.items.length - 1;\n return previousIndex === 0 && currentIndex === totalSlides;\n }\n }, {\n key: '_isGoingFromLastToFirst',\n value: function _isGoingFromLastToFirst() {\n var _state6 = this.state;\n var currentIndex = _state6.currentIndex;\n var previousIndex = _state6.previousIndex;\n var totalSlides = this.props.items.length - 1;\n return previousIndex === totalSlides && currentIndex === 0;\n }\n }, {\n key: '_getTranslateXForTwoSlide',\n value: function _getTranslateXForTwoSlide(index) {\n // For taking care of infinite swipe when there are only two slides\n var _state7 = this.state;\n var currentIndex = _state7.currentIndex;\n var offsetPercentage = _state7.offsetPercentage;\n var previousIndex = _state7.previousIndex;\n var baseTranslateX = -100 * currentIndex;\n var translateX = baseTranslateX + index * 100 + offsetPercentage; // keep track of user swiping direction\n\n if (offsetPercentage > 0) {\n this.direction = 'left';\n } else if (offsetPercentage < 0) {\n this.direction = 'right';\n } // when swiping make sure the slides are on the correct side\n\n\n if (currentIndex === 0 && index === 1 && offsetPercentage > 0) {\n translateX = -100 + offsetPercentage;\n } else if (currentIndex === 1 && index === 0 && offsetPercentage < 0) {\n translateX = 100 + offsetPercentage;\n }\n\n if (currentIndex !== previousIndex) {\n // when swiped move the slide to the correct side\n if (previousIndex === 0 && index === 0 && offsetPercentage === 0 && this.direction === 'left') {\n translateX = 100;\n } else if (previousIndex === 1 && index === 1 && offsetPercentage === 0 && this.direction === 'right') {\n translateX = -100;\n }\n } else {\n // keep the slide on the correct slide even when not a swipe\n if (currentIndex === 0 && index === 1 && offsetPercentage === 0 && this.direction === 'left') {\n translateX = -100;\n } else if (currentIndex === 1 && index === 0 && offsetPercentage === 0 && this.direction === 'right') {\n translateX = 100;\n }\n }\n\n return translateX;\n }\n }, {\n key: '_getThumbnailBarHeight',\n value: function _getThumbnailBarHeight() {\n if (this._isThumbnailHorizontal()) {\n return {\n height: this.state.gallerySlideWrapperHeight\n };\n }\n\n return {};\n }\n }, {\n key: '_shouldPushSlideOnInfiniteMode',\n value: function _shouldPushSlideOnInfiniteMode(index) {\n /*\n Push(show) slide if slide is the current slide, and the next slide\n OR\n The slide is going more than 1 slide left, or right, but not going from\n first to last and not going from last to first\n There is an edge case where if you go to the first or last slide, when they're\n not left, or right of each other they will try to catch up in the background\n so unless were going from first to last or vice versa we don't want the first\n or last slide to show up during our transition\n */\n return !this._slideIsTransitioning(index) || this._ignoreIsTransitioning() && !this._isFirstOrLastSlide(index);\n }\n }, {\n key: '_slideIsTransitioning',\n value: function _slideIsTransitioning(index) {\n /*\n returns true if the gallery is transitioning and the index is not the\n previous or currentIndex\n */\n var _state8 = this.state;\n var isTransitioning = _state8.isTransitioning;\n var previousIndex = _state8.previousIndex;\n var currentIndex = _state8.currentIndex;\n var indexIsNotPreviousOrNextSlide = !(index === previousIndex || index === currentIndex);\n return isTransitioning && indexIsNotPreviousOrNextSlide;\n }\n }, {\n key: '_isFirstOrLastSlide',\n value: function _isFirstOrLastSlide(index) {\n var totalSlides = this.props.items.length - 1;\n var isLastSlide = index === totalSlides;\n var isFirstSlide = index === 0;\n return isLastSlide || isFirstSlide;\n }\n }, {\n key: '_ignoreIsTransitioning',\n value: function _ignoreIsTransitioning() {\n /*\n Ignore isTransitioning because were not going to sibling slides\n e.g. center to left or center to right\n */\n var _state9 = this.state;\n var previousIndex = _state9.previousIndex;\n var currentIndex = _state9.currentIndex;\n var totalSlides = this.props.items.length - 1; // we want to show the in between slides transition\n\n var slidingMoreThanOneSlideLeftOrRight = Math.abs(previousIndex - currentIndex) > 1;\n var notGoingFromFirstToLast = !(previousIndex === 0 && currentIndex === totalSlides);\n var notGoingFromLastToFirst = !(previousIndex === totalSlides && currentIndex === 0);\n return slidingMoreThanOneSlideLeftOrRight && notGoingFromFirstToLast && notGoingFromLastToFirst;\n }\n }, {\n key: '_getSlideStyle',\n value: function _getSlideStyle(index) {\n var _state10 = this.state;\n var currentIndex = _state10.currentIndex;\n var offsetPercentage = _state10.offsetPercentage;\n var _props2 = this.props;\n var infinite = _props2.infinite;\n var items = _props2.items;\n var useTranslate3D = _props2.useTranslate3D;\n var isRTL = _props2.isRTL;\n var baseTranslateX = -100 * currentIndex;\n var totalSlides = items.length - 1; // calculates where the other slides belong based on currentIndex\n // if it is RTL the base line should be reversed\n\n var translateX = (baseTranslateX + index * 100) * (isRTL ? -1 : 1) + offsetPercentage;\n\n if (infinite && items.length > 2) {\n if (currentIndex === 0 && index === totalSlides) {\n // make the last slide the slide before the first\n // if it is RTL the base line should be reversed\n translateX = -100 * (isRTL ? -1 : 1) + offsetPercentage;\n } else if (currentIndex === totalSlides && index === 0) {\n // make the first slide the slide after the last\n // if it is RTL the base line should be reversed\n translateX = 100 * (isRTL ? -1 : 1) + offsetPercentage;\n }\n } // Special case when there are only 2 items with infinite on\n\n\n if (infinite && items.length === 2) {\n translateX = this._getTranslateXForTwoSlide(index);\n }\n\n var translate = 'translate(' + translateX + '%, 0)';\n\n if (useTranslate3D) {\n translate = 'translate3d(' + translateX + '%, 0, 0)';\n }\n\n return {\n WebkitTransform: translate,\n MozTransform: translate,\n msTransform: translate,\n OTransform: translate,\n transform: translate\n };\n }\n }, {\n key: '_getThumbnailStyle',\n value: function _getThumbnailStyle() {\n var translate = void 0;\n var _props3 = this.props;\n var useTranslate3D = _props3.useTranslate3D;\n var isRTL = _props3.isRTL;\n var thumbsTranslate = this.state.thumbsTranslate;\n var verticalTranslateValue = isRTL ? thumbsTranslate * -1 : thumbsTranslate;\n\n if (this._isThumbnailHorizontal()) {\n translate = 'translate(0, ' + thumbsTranslate + 'px)';\n\n if (useTranslate3D) {\n translate = 'translate3d(0, ' + thumbsTranslate + 'px, 0)';\n }\n } else {\n translate = 'translate(' + verticalTranslateValue + 'px, 0)';\n\n if (useTranslate3D) {\n translate = 'translate3d(' + verticalTranslateValue + 'px, 0, 0)';\n }\n }\n\n return {\n WebkitTransform: translate,\n MozTransform: translate,\n msTransform: translate,\n OTransform: translate,\n transform: translate\n };\n }\n }, {\n key: 'render',\n value: function render() {\n var _this5 = this;\n\n var _state11 = this.state;\n var currentIndex = _state11.currentIndex;\n var isFullscreen = _state11.isFullscreen;\n var modalFullscreen = _state11.modalFullscreen;\n var isPlaying = _state11.isPlaying;\n var scrollingLeftRight = _state11.scrollingLeftRight;\n var _props4 = this.props;\n var infinite = _props4.infinite;\n var preventDefaultTouchmoveEvent = _props4.preventDefaultTouchmoveEvent;\n var isRTL = _props4.isRTL;\n\n var thumbnailStyle = this._getThumbnailStyle();\n\n var thumbnailPosition = this.props.thumbnailPosition;\n var slideLeft = this._slideLeft;\n var slideRight = this._slideRight;\n var slides = [];\n var thumbnails = [];\n var bullets = [];\n this.props.items.forEach(function (item, index) {\n var alignment = _this5._getAlignmentClassName(index);\n\n var originalClass = item.originalClass ? ' ' + item.originalClass : '';\n var thumbnailClass = item.thumbnailClass ? ' ' + item.thumbnailClass : '';\n var renderItem = item.renderItem || _this5.props.renderItem || _this5._renderItem;\n var renderThumbInner = item.renderThumbInner || _this5.props.renderThumbInner || _this5._renderThumbInner;\n var showItem = !_this5.props.lazyLoad || alignment || _this5._lazyLoaded[index];\n\n if (showItem && _this5.props.lazyLoad) {\n _this5._lazyLoaded[index] = true;\n }\n\n var slideStyle = _this5._getSlideStyle(index);\n\n var slide = _react2.default.createElement('div', {\n key: index,\n className: 'image-gallery-slide' + alignment + originalClass,\n style: _extends(slideStyle, _this5.state.style),\n onClick: _this5.props.onClick,\n onTouchMove: _this5.props.onTouchMove,\n onTouchEnd: _this5.props.onTouchEnd,\n onTouchStart: _this5.props.onTouchStart,\n onMouseOver: _this5.props.onMouseOver,\n onMouseLeave: _this5.props.onMouseLeave,\n role: _this5.props.onClick && 'button'\n }, showItem ? renderItem(item) : _react2.default.createElement('div', {\n style: {\n height: '100%'\n }\n }));\n\n if (infinite) {\n // don't add some slides while transitioning to avoid background transitions\n if (_this5._shouldPushSlideOnInfiniteMode(index)) {\n slides.push(slide);\n }\n } else {\n slides.push(slide);\n }\n\n if (_this5.props.showThumbnails) {\n thumbnails.push(_react2.default.createElement('a', {\n key: index,\n role: 'button',\n 'aria-pressed': currentIndex === index ? 'true' : 'false',\n 'aria-label': 'Go to Slide ' + (index + 1),\n className: 'image-gallery-thumbnail' + (currentIndex === index ? ' active' : '') + thumbnailClass,\n onClick: function onClick(event) {\n return _this5._onThumbnailClick(event, index);\n }\n }, renderThumbInner(item)));\n }\n\n if (_this5.props.showBullets) {\n var bulletOnClick = function bulletOnClick(event) {\n if (item.bulletOnClick) {\n item.bulletOnClick({\n item: item,\n itemIndex: index,\n currentIndex: currentIndex\n });\n }\n\n return _this5.slideToIndex.call(_this5, index, event);\n };\n\n bullets.push(_react2.default.createElement('button', {\n key: index,\n type: 'button',\n className: ['image-gallery-bullet', currentIndex === index ? 'active' : '', item.bulletClass || ''].join(' '),\n onClick: bulletOnClick,\n 'aria-pressed': currentIndex === index ? 'true' : 'false',\n 'aria-label': 'Go to Slide ' + (index + 1)\n }));\n }\n });\n\n var slideWrapper = _react2.default.createElement('div', {\n ref: this._initGalleryResizing,\n className: 'image-gallery-slide-wrapper ' + thumbnailPosition + ' ' + (isRTL ? 'image-gallery-rtl' : '')\n }, this.props.renderCustomControls && this.props.renderCustomControls(), this.props.showFullscreenButton && this.props.renderFullscreenButton(this._toggleFullScreen, isFullscreen), this.props.showPlayButton && this.props.renderPlayPauseButton(this._togglePlay, isPlaying), this._canNavigate() ? [this.props.showNav && _react2.default.createElement('span', {\n key: 'navigation'\n }, this.props.renderLeftNav(slideLeft, !this._canSlideLeft()), this.props.renderRightNav(slideRight, !this._canSlideRight())), _react2.default.createElement(_reactSwipeable2.default, {\n className: 'image-gallery-swipe',\n disabled: this.props.disableSwipe,\n key: 'swipeable',\n delta: 0,\n flickThreshold: this.props.flickThreshold,\n onSwiping: this._handleSwiping,\n onSwiped: this._handleOnSwiped,\n stopPropagation: this.props.stopPropagation,\n preventDefaultTouchmoveEvent: preventDefaultTouchmoveEvent || scrollingLeftRight\n }, _react2.default.createElement('div', {\n className: 'image-gallery-slides'\n }, slides))] : _react2.default.createElement('div', {\n className: 'image-gallery-slides'\n }, slides), this.props.showBullets && _react2.default.createElement('div', {\n className: 'image-gallery-bullets'\n }, _react2.default.createElement('div', {\n className: 'image-gallery-bullets-container',\n role: 'navigation',\n 'aria-label': 'Bullet Navigation'\n }, bullets)), this.props.showIndex && _react2.default.createElement('div', {\n className: 'image-gallery-index'\n }, _react2.default.createElement('span', {\n className: 'image-gallery-index-current'\n }, this.state.currentIndex + 1), _react2.default.createElement('span', {\n className: 'image-gallery-index-separator'\n }, this.props.indexSeparator), _react2.default.createElement('span', {\n className: 'image-gallery-index-total'\n }, this.props.items.length)));\n\n var classNames = ['image-gallery', this.props.additionalClass, modalFullscreen ? 'fullscreen-modal' : ''].filter(function (name) {\n return typeof name === 'string';\n }).join(' ');\n return _react2.default.createElement('div', {\n ref: function ref(i) {\n return _this5._imageGallery = i;\n },\n className: classNames,\n 'aria-live': 'polite'\n }, _react2.default.createElement('div', {\n className: 'image-gallery-content' + (isFullscreen ? ' fullscreen' : '')\n }, (thumbnailPosition === 'bottom' || thumbnailPosition === 'right') && slideWrapper, this.props.showThumbnails && _react2.default.createElement('div', {\n className: 'image-gallery-thumbnails-wrapper ' + thumbnailPosition + ' ' + (!this._isThumbnailHorizontal() && isRTL ? 'thumbnails-wrapper-rtl' : ''),\n style: this._getThumbnailBarHeight()\n }, _react2.default.createElement('div', {\n className: 'image-gallery-thumbnails',\n ref: function ref(i) {\n return _this5._thumbnailsWrapper = i;\n }\n }, _react2.default.createElement('div', {\n ref: function ref(t) {\n return _this5._thumbnails = t;\n },\n className: 'image-gallery-thumbnails-container',\n style: thumbnailStyle,\n 'aria-label': 'Thumbnail Navigation'\n }, thumbnails))), (thumbnailPosition === 'top' || thumbnailPosition === 'left') && slideWrapper));\n }\n }]);\n\n return ImageGallery;\n}(_react2.default.Component);\n\nImageGallery.propTypes = {\n flickThreshold: _propTypes2.default.number,\n items: _propTypes2.default.array.isRequired,\n showNav: _propTypes2.default.bool,\n autoPlay: _propTypes2.default.bool,\n lazyLoad: _propTypes2.default.bool,\n infinite: _propTypes2.default.bool,\n showIndex: _propTypes2.default.bool,\n showBullets: _propTypes2.default.bool,\n showThumbnails: _propTypes2.default.bool,\n showPlayButton: _propTypes2.default.bool,\n showFullscreenButton: _propTypes2.default.bool,\n disableThumbnailScroll: _propTypes2.default.bool,\n disableArrowKeys: _propTypes2.default.bool,\n disableSwipe: _propTypes2.default.bool,\n useBrowserFullscreen: _propTypes2.default.bool,\n preventDefaultTouchmoveEvent: _propTypes2.default.bool,\n defaultImage: _propTypes2.default.string,\n indexSeparator: _propTypes2.default.string,\n thumbnailPosition: _propTypes2.default.string,\n startIndex: _propTypes2.default.number,\n slideDuration: _propTypes2.default.number,\n slideInterval: _propTypes2.default.number,\n swipeThreshold: _propTypes2.default.number,\n swipingTransitionDuration: _propTypes2.default.number,\n onSlide: _propTypes2.default.func,\n onScreenChange: _propTypes2.default.func,\n onPause: _propTypes2.default.func,\n onPlay: _propTypes2.default.func,\n onClick: _propTypes2.default.func,\n onImageLoad: _propTypes2.default.func,\n onImageError: _propTypes2.default.func,\n onTouchMove: _propTypes2.default.func,\n onTouchEnd: _propTypes2.default.func,\n onTouchStart: _propTypes2.default.func,\n onMouseOver: _propTypes2.default.func,\n onMouseLeave: _propTypes2.default.func,\n onThumbnailError: _propTypes2.default.func,\n onThumbnailClick: _propTypes2.default.func,\n renderCustomControls: _propTypes2.default.func,\n renderLeftNav: _propTypes2.default.func,\n renderRightNav: _propTypes2.default.func,\n renderPlayPauseButton: _propTypes2.default.func,\n renderFullscreenButton: _propTypes2.default.func,\n renderItem: _propTypes2.default.func,\n stopPropagation: _propTypes2.default.bool,\n additionalClass: _propTypes2.default.string,\n useTranslate3D: _propTypes2.default.bool,\n isRTL: _propTypes2.default.bool\n};\nImageGallery.defaultProps = {\n items: [],\n showNav: true,\n autoPlay: false,\n lazyLoad: false,\n infinite: true,\n showIndex: false,\n showBullets: false,\n showThumbnails: true,\n showPlayButton: true,\n showFullscreenButton: true,\n disableThumbnailScroll: false,\n disableArrowKeys: false,\n disableSwipe: false,\n useTranslate3D: true,\n isRTL: false,\n useBrowserFullscreen: true,\n preventDefaultTouchmoveEvent: false,\n flickThreshold: 0.4,\n stopPropagation: false,\n indexSeparator: ' / ',\n thumbnailPosition: 'bottom',\n startIndex: 0,\n slideDuration: 450,\n swipingTransitionDuration: 0,\n slideInterval: 3000,\n swipeThreshold: 30,\n renderLeftNav: function renderLeftNav(onClick, disabled) {\n return _react2.default.createElement('button', {\n type: 'button',\n className: 'image-gallery-left-nav',\n disabled: disabled,\n onClick: onClick,\n 'aria-label': 'Previous Slide'\n });\n },\n renderRightNav: function renderRightNav(onClick, disabled) {\n return _react2.default.createElement('button', {\n type: 'button',\n className: 'image-gallery-right-nav',\n disabled: disabled,\n onClick: onClick,\n 'aria-label': 'Next Slide'\n });\n },\n renderPlayPauseButton: function renderPlayPauseButton(onClick, isPlaying) {\n return _react2.default.createElement('button', {\n type: 'button',\n className: 'image-gallery-play-button' + (isPlaying ? ' active' : ''),\n onClick: onClick,\n 'aria-label': 'Play or Pause Slideshow'\n });\n },\n renderFullscreenButton: function renderFullscreenButton(onClick, isFullscreen) {\n return _react2.default.createElement('button', {\n type: 'button',\n className: 'image-gallery-fullscreen-button' + (isFullscreen ? ' active' : ''),\n onClick: onClick,\n 'aria-label': 'Open Fullscreen'\n });\n }\n};\nexports.default = ImageGallery;","'use strict';\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\nvar React = require('react');\n\nvar DetectPassiveEvents = require('detect-passive-events').default;\n\nfunction getInitialState() {\n return {\n x: null,\n y: null,\n swiping: false,\n start: 0\n };\n}\n\nfunction getMovingPosition(e) {\n return 'changedTouches' in e ? {\n x: e.changedTouches[0].clientX,\n y: e.changedTouches[0].clientY\n } : {\n x: e.clientX,\n y: e.clientY\n };\n}\n\nfunction getPosition(e) {\n return 'touches' in e ? {\n x: e.touches[0].clientX,\n y: e.touches[0].clientY\n } : {\n x: e.clientX,\n y: e.clientY\n };\n}\n\nfunction rotateByAngle(pos, angle) {\n if (angle === 0) {\n return pos;\n }\n\n var x = pos.x,\n y = pos.y;\n var angleInRadians = Math.PI / 180 * angle;\n var rotatedX = x * Math.cos(angleInRadians) + y * Math.sin(angleInRadians);\n var rotatedY = y * Math.cos(angleInRadians) - x * Math.sin(angleInRadians);\n return {\n x: rotatedX,\n y: rotatedY\n };\n}\n\nfunction calculatePos(e, state) {\n var _rotateByAngle = rotateByAngle(getMovingPosition(e), state.rotationAngle),\n x = _rotateByAngle.x,\n y = _rotateByAngle.y;\n\n var deltaX = state.x - x;\n var deltaY = state.y - y;\n var absX = Math.abs(deltaX);\n var absY = Math.abs(deltaY);\n var time = Date.now() - state.start;\n var velocity = Math.sqrt(absX * absX + absY * absY) / time;\n return {\n deltaX: deltaX,\n deltaY: deltaY,\n absX: absX,\n absY: absY,\n velocity: velocity\n };\n}\n\nvar Swipeable = function (_React$Component) {\n _inherits(Swipeable, _React$Component);\n\n function Swipeable(props, context) {\n _classCallCheck(this, Swipeable);\n\n var _this = _possibleConstructorReturn(this, _React$Component.call(this, props, context));\n\n _this.swipeable = getInitialState();\n _this.eventStart = _this.eventStart.bind(_this);\n _this.eventMove = _this.eventMove.bind(_this);\n _this.eventEnd = _this.eventEnd.bind(_this);\n _this.mouseDown = _this.mouseDown.bind(_this);\n _this.mouseMove = _this.mouseMove.bind(_this);\n _this.mouseUp = _this.mouseUp.bind(_this);\n _this.cleanupMouseListeners = _this.cleanupMouseListeners.bind(_this);\n _this.setupMouseListeners = _this.setupMouseListeners.bind(_this);\n _this.elementRef = _this.elementRef.bind(_this);\n _this.setupTouchmoveEvent = _this.setupTouchmoveEvent.bind(_this);\n _this.cleanupTouchmoveEvent = _this.cleanupTouchmoveEvent.bind(_this);\n _this.hasPassiveSupport = DetectPassiveEvents.hasSupport;\n return _this;\n }\n\n Swipeable.prototype.componentDidMount = function componentDidMount() {\n if (this.props.preventDefaultTouchmoveEvent) {\n this.setupTouchmoveEvent();\n }\n };\n\n Swipeable.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (prevProps.disabled !== this.props.disabled) {\n this.cleanupMouseListeners();\n this.swipeable = getInitialState();\n }\n\n if (prevProps.preventDefaultTouchmoveEvent && !this.props.preventDefaultTouchmoveEvent) {\n this.cleanupTouchmoveEvent();\n } else if (!prevProps.preventDefaultTouchmoveEvent && this.props.preventDefaultTouchmoveEvent) {\n this.setupTouchmoveEvent();\n }\n };\n\n Swipeable.prototype.componentWillUnmount = function componentWillUnmount() {\n this.cleanupMouseListeners();\n };\n\n Swipeable.prototype.setupTouchmoveEvent = function setupTouchmoveEvent() {\n if (this.element && this.hasPassiveSupport) {\n this.element.addEventListener('touchmove', this.eventMove, {\n passive: false\n });\n }\n };\n\n Swipeable.prototype.setupMouseListeners = function setupMouseListeners() {\n document.addEventListener('mousemove', this.mouseMove);\n document.addEventListener('mouseup', this.mouseUp);\n };\n\n Swipeable.prototype.cleanupTouchmoveEvent = function cleanupTouchmoveEvent() {\n if (this.element && this.hasPassiveSupport) {\n this.element.removeEventListener('touchmove', this.eventMove, {\n passive: false\n });\n }\n };\n\n Swipeable.prototype.cleanupMouseListeners = function cleanupMouseListeners() {\n document.removeEventListener('mousemove', this.mouseMove);\n document.removeEventListener('mouseup', this.mouseUp);\n };\n\n Swipeable.prototype.mouseDown = function mouseDown(e) {\n if (!this.props.trackMouse || e.type !== 'mousedown') {\n return;\n }\n\n if (typeof this.props.onMouseDown === 'function') this.props.onMouseDown(e);\n this.setupMouseListeners();\n this.eventStart(e);\n };\n\n Swipeable.prototype.mouseMove = function mouseMove(e) {\n this.eventMove(e);\n };\n\n Swipeable.prototype.mouseUp = function mouseUp(e) {\n this.cleanupMouseListeners();\n this.eventEnd(e);\n };\n\n Swipeable.prototype.eventStart = function eventStart(e) {\n if (e.touches && e.touches.length > 1) return;\n var rotationAngle = this.props.rotationAngle;\n\n var _rotateByAngle2 = rotateByAngle(getPosition(e), rotationAngle),\n x = _rotateByAngle2.x,\n y = _rotateByAngle2.y;\n\n if (this.props.stopPropagation) e.stopPropagation();\n this.swipeable = {\n start: Date.now(),\n x: x,\n y: y,\n swiping: false,\n rotationAngle: rotationAngle\n };\n };\n\n Swipeable.prototype.eventMove = function eventMove(e) {\n var _props = this.props,\n stopPropagation = _props.stopPropagation,\n delta = _props.delta,\n onSwiping = _props.onSwiping,\n onSwiped = _props.onSwiped,\n onSwipingLeft = _props.onSwipingLeft,\n onSwipedLeft = _props.onSwipedLeft,\n onSwipingRight = _props.onSwipingRight,\n onSwipedRight = _props.onSwipedRight,\n onSwipingUp = _props.onSwipingUp,\n onSwipedUp = _props.onSwipedUp,\n onSwipingDown = _props.onSwipingDown,\n onSwipedDown = _props.onSwipedDown,\n preventDefaultTouchmoveEvent = _props.preventDefaultTouchmoveEvent;\n\n if (!this.swipeable.x || !this.swipeable.y || e.touches && e.touches.length > 1) {\n return;\n }\n\n var pos = calculatePos(e, this.swipeable);\n if (pos.absX < delta && pos.absY < delta && !this.swipeable.swiping) return;\n if (stopPropagation) e.stopPropagation();\n\n if (onSwiping) {\n onSwiping(e, pos.deltaX, pos.deltaY, pos.absX, pos.absY, pos.velocity);\n }\n\n var cancelablePageSwipe = false;\n\n if (onSwiping || onSwiped) {\n cancelablePageSwipe = true;\n }\n\n if (pos.absX > pos.absY) {\n if (pos.deltaX > 0) {\n if (onSwipingLeft || onSwipedLeft) {\n onSwipingLeft && onSwipingLeft(e, pos.absX);\n cancelablePageSwipe = true;\n }\n } else if (onSwipingRight || onSwipedRight) {\n onSwipingRight && onSwipingRight(e, pos.absX);\n cancelablePageSwipe = true;\n }\n } else if (pos.deltaY > 0) {\n if (onSwipingUp || onSwipedUp) {\n onSwipingUp && onSwipingUp(e, pos.absY);\n cancelablePageSwipe = true;\n }\n } else if (onSwipingDown || onSwipedDown) {\n onSwipingDown && onSwipingDown(e, pos.absY);\n cancelablePageSwipe = true;\n }\n\n this.swipeable.swiping = true;\n if (cancelablePageSwipe && preventDefaultTouchmoveEvent) e.preventDefault();\n };\n\n Swipeable.prototype.eventEnd = function eventEnd(e) {\n var _props2 = this.props,\n stopPropagation = _props2.stopPropagation,\n flickThreshold = _props2.flickThreshold,\n onSwiped = _props2.onSwiped,\n onSwipedLeft = _props2.onSwipedLeft,\n onSwipedRight = _props2.onSwipedRight,\n onSwipedUp = _props2.onSwipedUp,\n onSwipedDown = _props2.onSwipedDown,\n onTap = _props2.onTap;\n\n if (this.swipeable.swiping) {\n var pos = calculatePos(e, this.swipeable);\n if (stopPropagation) e.stopPropagation();\n var isFlick = pos.velocity > flickThreshold;\n onSwiped && onSwiped(e, pos.deltaX, pos.deltaY, isFlick, pos.velocity);\n\n if (pos.absX > pos.absY) {\n if (pos.deltaX > 0) {\n onSwipedLeft && onSwipedLeft(e, pos.deltaX, isFlick);\n } else {\n onSwipedRight && onSwipedRight(e, pos.deltaX, isFlick);\n }\n } else if (pos.deltaY > 0) {\n onSwipedUp && onSwipedUp(e, pos.deltaY, isFlick);\n } else {\n onSwipedDown && onSwipedDown(e, pos.deltaY, isFlick);\n }\n } else {\n onTap && onTap(e);\n }\n\n this.swipeable = getInitialState();\n };\n\n Swipeable.prototype.elementRef = function elementRef(element) {\n this.element = element;\n this.props.innerRef && this.props.innerRef(element);\n };\n\n Swipeable.prototype.render = function render() {\n var newProps = _extends({}, this.props);\n\n if (!this.props.disabled) {\n newProps.onTouchStart = this.eventStart;\n\n if (!this.props.preventDefaultTouchmoveEvent || !this.hasPassiveSupport) {\n newProps.onTouchMove = this.eventMove;\n }\n\n newProps.onTouchEnd = this.eventEnd;\n newProps.onMouseDown = this.mouseDown;\n }\n\n newProps.ref = this.elementRef;\n delete newProps.onSwiped;\n delete newProps.onSwiping;\n delete newProps.onSwipingUp;\n delete newProps.onSwipingRight;\n delete newProps.onSwipingDown;\n delete newProps.onSwipingLeft;\n delete newProps.onSwipedUp;\n delete newProps.onSwipedRight;\n delete newProps.onSwipedDown;\n delete newProps.onSwipedLeft;\n delete newProps.onTap;\n delete newProps.flickThreshold;\n delete newProps.delta;\n delete newProps.preventDefaultTouchmoveEvent;\n delete newProps.stopPropagation;\n delete newProps.nodeName;\n delete newProps.children;\n delete newProps.trackMouse;\n delete newProps.disabled;\n delete newProps.innerRef;\n delete newProps.rotationAngle;\n return React.createElement(this.props.nodeName, newProps, this.props.children);\n };\n\n return Swipeable;\n}(React.Component);\n\nSwipeable.defaultProps = {\n flickThreshold: 0.6,\n delta: 10,\n preventDefaultTouchmoveEvent: false,\n stopPropagation: false,\n nodeName: 'div',\n disabled: false,\n rotationAngle: 0\n};\nmodule.exports = Swipeable;"],"sourceRoot":""}