{"version":3,"sources":["webpack:///./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack:///./node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js","webpack:///./node_modules/embla-carousel/esm/embla-carousel.esm.js","webpack:///./node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js","webpack:///./node_modules/hotkeys-js/dist/hotkeys.esm.js","webpack:///./node_modules/invariant/browser.js"],"names":["reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","displayName","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","type","KNOWN_STATICS","name","length","prototype","caller","callee","arguments","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","render","Memo","defineProperty","Object","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","module","exports","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","keys","concat","targetStatics","sourceStatics","i","key","descriptor","e","isRecord","subject","toString","call","isObject","Array","isArray","canUseDOM","window","document","createElement","areOptionsEqual","optionsA","optionsB","optionsAKeys","optionsBKeys","JSON","stringify","breakpoints","every","valueA","valueB","sortAndMapPluginToOptions","plugins","sort","a","b","map","plugin","options","arePluginsEqual","pluginsA","pluginsB","optionA","index","_toConsumableArray","arr","_arrayLikeToArray","_arrayWithoutHoles","iter","Symbol","iterator","from","_iterableToArray","_unsupportedIterableToArray","TypeError","_nonIterableSpread","_createForOfIteratorHelper","o","allowArrayLike","it","F","s","n","done","value","_e","f","err","normalCompletion","didErr","step","next","_e2","return","minLen","slice","constructor","test","len","arr2","isNumber","isString","isBoolean","mathAbs","Math","abs","mathSign","sign","deltaAbs","arrayKeys","array","objectKeys","Number","arrayLast","arrayLastIndex","max","arrayIsLastIndex","arrayFromNumber","startAt","undefined","_","object","objectsMergeDeep","objectA","objectB","reduce","mergedObjects","currentObject","forEach","areObjects","isMouseEvent","evt","ownerWindow","MouseEvent","EventStore","listeners","self","add","node","handler","removeListener","passive","addEventListener","removeEventListener","legacyMediaQueryList","addListener","push","clear","filter","remove","Animations","ownerDocument","update","documentVisibleHandler","fixedTimeStep","lastTimeStamp","accumulatedTime","animationId","animate","timeStamp","timeElapsed","requestAnimationFrame","stop","cancelAnimationFrame","init","hidden","destroy","start","Limit","min","reachedMin","reachedMax","reachedAny","constrain","removeOffset","ceil","Counter","loop","loopEnd","counter","withinLimit","get","clone","set","DragHandler","axis","rootNode","target","dragTracker","location","animation","scrollTo","scrollBody","scrollTarget","eventHandler","percentOfView","dragFree","dragThreshold","skipSnaps","baseFriction","watchDrag","crossAxis","cross","direction","focusNodes","nonPassiveEvent","initEvents","dragEvents","goToNextThreshold","measure","snapForceBoost","mouse","touch","freeForceBoost","baseSpeed","isMoving","startScroll","startCross","pointerIsDown","preventScroll","preventClick","isMouse","move","touches","up","lastScroll","readPoint","lastCross","diffScroll","diffCross","cancelable","diff","pointerMove","useFriction","useDuration","preventDefault","targetChanged","byDistance","rawForce","pointerUp","force","baseForce","distance","byIndex","allowedForce","forceFactor","factorAbs","speed","friction","emit","click","stopPropagation","emblaApi","downIfAllowed","isMouseEvt","buttons","button","nodeName","includes","isFocusNode","pointerDown","addDragEvents","down","DragTracker","startEvent","lastEvent","readTime","evtAxis","property","scroll","coord","expired","diffDrag","diffTime","ResizeHandler","container","slides","watchResize","nodeRects","resizeObserver","containerSize","observeNodes","slideSizes","destroyed","readSize","measureSize","ResizeObserver","entries","_step","_iterator","entry","isContainer","slideIndex","indexOf","lastSize","reInit","defaultCallback","observe","disconnect","ScrollBounds","limit","pullBackThreshold","edgeOffsetTolerance","frictionLimit","disabled","shouldConstrain","edge","diffToEdge","diffToTarget","subtract","useBaseFriction","toggleActive","active","ScrollLooper","contentSize","vectors","_Limit2","shouldLoop","loopDistance","v","ScrollTarget","scrollSnaps","targetVector","minDistance","distances","shortcut","targets","matchingTargets","t","snap","_findTargetSnap","ascDiffsToSnaps","d1","d2","findTargetSnap","targetSnapDistance","reachedBound","SlideFocus","root","slideRegistry","eventStore","watchFocus","focusListenerOptions","capture","lastTabPressTime","registerTabPress","event","code","Date","getTime","slide","scrollLeft","group","findIndex","Vector1D","initialValue","normalizeInput","Translate","translate","containerStyle","style","previousTarget","transform","getAttribute","removeAttribute","to","num","newTarget","round","SlideLooper","viewSize","slideSizesWithGaps","snaps","gap","ascItems","descItems","reverse","loopPoints","findLoopPoints","slidesInGap","endPoints","removeSlideSizes","indexes","offset","isEndEdge","slideBounds","end","findSlideBounds","initial","altered","boundEdge","loopPoint","slideLocation","canLoop","_ref","shiftLocation","SlidesHandler","watchSlides","mutationObserver","MutationObserver","mutations","_step2","_iterator2","childList","SlidesToScroll","slidesToScroll","containerRect","slideRects","startGap","endGap","pixelTolerance","startEdge","endEdge","groupByNumber","groupSlides","groupSize","byNumber","groups","rectB","rectA","isFirst","isLast","edgeA","edgeB","gapA","chunkSize","currentSize","previousSize","bySize","Engine","align","scrollAxis","startIndex","duration","inViewThreshold","containScroll","offsetTop","offsetLeft","offsetWidth","offsetHeight","top","right","bottom","left","width","height","contentDirection","isRightToLeft","isVertical","nodeRect","Axis","PercentOfView","alignment","predefined","center","Alignment","containSnaps","_SlideSizes","readEdgeGap","withEdgeGap","slideRect","measureStartGap","getComputedStyle","parseFloat","getPropertyValue","measureEndGap","rect","rects","SlideSizes","_ScrollSnaps","alignments","snapsAligned","g","ScrollSnaps","_ScrollContain","startSnap","endSnap","scrollBounds","snapsBounded","snapAligned","usePixelTolerance","scrollBound","toFixed","scrollContainLimit","lastIndexOf","snapsContained","measureContained","bound","ScrollContain","_ScrollLimit","ScrollLimit","indexPrevious","slideIndexes","_ref2","dragHandler","seek","engine","alpha","_ref3","offsetLocation","previousLocation","scrollLooper","slideLooper","shouldSettle","settled","withinBounds","hasSettled","interpolatedLocation","startLocation","baseDuration","scrollVelocity","scrollDirection","scrollDuration","scrollFriction","rawLocation","rawLocationPrevious","velocity","displacement","scrollDistance","useBaseDuration","ScrollBody","indexCurrent","distanceDiff","indexDiff","targetIndex","ScrollTo","scrollProgress","ScrollProgress","slidesInView","threshold","intersectionObserver","intersectionEntryMap","inViewCache","notInViewCache","createInViewList","inView","list","parseInt","isIntersecting","IntersectionObserver","parentElement","SlidesInView","_SlideRegistry","groupedSlideIndexes","doNotContain","SlideRegistry","slideFocus","resizeHandler","scrollSnapList","slidesHandler","defaultOptions","OptionsHandler","mergeOptions","optionsAtMedia","matchedMediaOptions","media","matchMedia","matches","mediaOption","optionsMediaQueries","optionsList","acc","mediaQueries","PluginsHandler","optionsHandler","activePlugins","_ref4","assign","obj","enumerable","configurable","writable","EmblaCarousel","userOptions","userPlugins","pluginApis","defaultView","pluginsHandler","mediaHandlers","api","getListeners","off","cb","on","EventHandler","reActivate","optionsBase","globalOptions","pluginList","createEngine","activate","withOptions","withPlugins","_options","userContainer","userSlides","customContainer","querySelector","children","customSlides","querySelectorAll","storeElements","_ref5","query","offsetParent","selectedScrollSnap","deActivate","jump","canScrollNext","canScrollPrev","containerNode","internalEngine","previousScrollSnap","scrollNext","scrollPrev","slideNodes","slidesNotInView","setTimeout","_slicedToArray","_arrayWithHoles","_i","_s","_arr","_n","_d","_iterableToArrayLimit","_nonIterableRest","useEmblaCarousel","storedOptions","storedPlugins","_useState","_useState2","setEmblaApi","_useState3","_useState4","viewport","setViewport","current","newEmblaApi","_typeof","isff","navigator","userAgent","toLowerCase","addEvent","method","useCapture","attachEvent","getMods","modifier","mods","getKeys","replace","split","splice","_keyMap","backspace","tab","enter","esc","escape","space","del","delete","ins","insert","home","pageup","pagedown","capslock","num_0","num_1","num_2","num_3","num_4","num_5","num_6","num_7","num_8","num_9","num_multiply","num_add","num_enter","num_subtract","num_decimal","num_divide","_modifier","shift","alt","option","ctrl","control","cmd","command","modifierMap","shiftKey","ctrlKey","altKey","metaKey","_mods","_handlers","k","_downKeys","winListendFocus","_scope","elementHasBindEvent","x","toUpperCase","charCodeAt","setScope","scope","getScope","eachUnbind","_ref$splitKey","splitKey","originKey","unbindKeys","lastKey","keyCode","record","a1","a2","arr1","isIndex","compareArray","element","modifiersMatch","y","hasOwnProperty","returnValue","cancelBubble","dispatch","asterisk","which","charCode","hotkeys","this","keyName","keyNum","getModifierState","keydown","keyup","keyShortcut","_downKeysCurrent","join","isElementBind","clearModifier","_api","deleteScope","newScope","handlers","getPressedKeyCodes","isPressed","srcElement","tagName","flag","isContentEditable","readOnly","trigger","data","find","item","unbind","keysInfo","info","_len","args","_key","keyMap","_hotkeys","noConflict","deep","condition","format","c","d","error","Error","argIndex","framesToPop"],"mappings":"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","file":"js/application~db300d2f-3073dc5c336cc1389310.chunk.js","sourcesContent":["'use strict';\n\nvar reactIs = require('react-is');\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\n\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;","function isObject(subject) {\n  return Object.prototype.toString.call(subject) === '[object Object]';\n}\n\nfunction isRecord(subject) {\n  return isObject(subject) || Array.isArray(subject);\n}\n\nfunction canUseDOM() {\n  return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}\n\nfunction areOptionsEqual(optionsA, optionsB) {\n  var optionsAKeys = Object.keys(optionsA);\n  var optionsBKeys = Object.keys(optionsB);\n  if (optionsAKeys.length !== optionsBKeys.length) return false;\n  var breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}));\n  var breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}));\n  if (breakpointsA !== breakpointsB) return false;\n  return optionsAKeys.every(function (key) {\n    var valueA = optionsA[key];\n    var valueB = optionsB[key];\n    if (typeof valueA === 'function') return \"\".concat(valueA) === \"\".concat(valueB);\n    if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB;\n    return areOptionsEqual(valueA, valueB);\n  });\n}\n\nfunction sortAndMapPluginToOptions(plugins) {\n  return plugins.concat().sort(function (a, b) {\n    return a.name > b.name ? 1 : -1;\n  }).map(function (plugin) {\n    return plugin.options;\n  });\n}\n\nfunction arePluginsEqual(pluginsA, pluginsB) {\n  if (pluginsA.length !== pluginsB.length) return false;\n  var optionsA = sortAndMapPluginToOptions(pluginsA);\n  var optionsB = sortAndMapPluginToOptions(pluginsB);\n  return optionsA.every(function (optionA, index) {\n    var optionB = optionsB[index];\n    return areOptionsEqual(optionA, optionB);\n  });\n}\n\nexport { areOptionsEqual, arePluginsEqual, canUseDOM, sortAndMapPluginToOptions };","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction isNumber(subject) {\n  return typeof subject === 'number';\n}\n\nfunction isString(subject) {\n  return typeof subject === 'string';\n}\n\nfunction isBoolean(subject) {\n  return typeof subject === 'boolean';\n}\n\nfunction isObject(subject) {\n  return Object.prototype.toString.call(subject) === '[object Object]';\n}\n\nfunction mathAbs(n) {\n  return Math.abs(n);\n}\n\nfunction mathSign(n) {\n  return Math.sign(n);\n}\n\nfunction deltaAbs(valueB, valueA) {\n  return mathAbs(valueB - valueA);\n}\n\nfunction factorAbs(valueB, valueA) {\n  if (valueB === 0 || valueA === 0) return 0;\n  if (mathAbs(valueB) <= mathAbs(valueA)) return 0;\n  var diff = deltaAbs(mathAbs(valueB), mathAbs(valueA));\n  return mathAbs(diff / valueB);\n}\n\nfunction roundToTwoDecimals(num) {\n  return Math.round(num * 100) / 100;\n}\n\nfunction arrayKeys(array) {\n  return objectKeys(array).map(Number);\n}\n\nfunction arrayLast(array) {\n  return array[arrayLastIndex(array)];\n}\n\nfunction arrayLastIndex(array) {\n  return Math.max(0, array.length - 1);\n}\n\nfunction arrayIsLastIndex(array, index) {\n  return index === arrayLastIndex(array);\n}\n\nfunction arrayFromNumber(n) {\n  var startAt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  return Array.from(Array(n), function (_, i) {\n    return startAt + i;\n  });\n}\n\nfunction objectKeys(object) {\n  return Object.keys(object);\n}\n\nfunction objectsMergeDeep(objectA, objectB) {\n  return [objectA, objectB].reduce(function (mergedObjects, currentObject) {\n    objectKeys(currentObject).forEach(function (key) {\n      var valueA = mergedObjects[key];\n      var valueB = currentObject[key];\n      var areObjects = isObject(valueA) && isObject(valueB);\n      mergedObjects[key] = areObjects ? objectsMergeDeep(valueA, valueB) : valueB;\n    });\n    return mergedObjects;\n  }, {});\n}\n\nfunction isMouseEvent(evt, ownerWindow) {\n  return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent;\n}\n\nfunction Alignment(align, viewSize) {\n  var predefined = {\n    start: start,\n    center: center,\n    end: end\n  };\n\n  function start() {\n    return 0;\n  }\n\n  function center(n) {\n    return end(n) / 2;\n  }\n\n  function end(n) {\n    return viewSize - n;\n  }\n\n  function measure(n, index) {\n    if (isString(align)) return predefined[align](n);\n    return align(viewSize, n, index);\n  }\n\n  var self = {\n    measure: measure\n  };\n  return self;\n}\n\nfunction EventStore() {\n  var listeners = [];\n\n  function add(node, type, handler) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n      passive: true\n    };\n    var removeListener;\n\n    if ('addEventListener' in node) {\n      node.addEventListener(type, handler, options);\n\n      removeListener = function removeListener() {\n        return node.removeEventListener(type, handler, options);\n      };\n    } else {\n      var legacyMediaQueryList = node;\n      legacyMediaQueryList.addListener(handler);\n\n      removeListener = function removeListener() {\n        return legacyMediaQueryList.removeListener(handler);\n      };\n    }\n\n    listeners.push(removeListener);\n    return self;\n  }\n\n  function clear() {\n    listeners = listeners.filter(function (remove) {\n      return remove();\n    });\n  }\n\n  var self = {\n    add: add,\n    clear: clear\n  };\n  return self;\n}\n\nfunction Animations(ownerDocument, ownerWindow, update, render) {\n  var documentVisibleHandler = EventStore();\n  var fixedTimeStep = 1000 / 60;\n  var lastTimeStamp = null;\n  var accumulatedTime = 0;\n  var animationId = 0;\n\n  function init() {\n    documentVisibleHandler.add(ownerDocument, 'visibilitychange', function () {\n      if (ownerDocument.hidden) reset();\n    });\n  }\n\n  function destroy() {\n    stop();\n    documentVisibleHandler.clear();\n  }\n\n  function animate(timeStamp) {\n    if (!animationId) return;\n\n    if (!lastTimeStamp) {\n      lastTimeStamp = timeStamp;\n      update();\n      update();\n    }\n\n    var timeElapsed = timeStamp - lastTimeStamp;\n    lastTimeStamp = timeStamp;\n    accumulatedTime += timeElapsed;\n\n    while (accumulatedTime >= fixedTimeStep) {\n      update();\n      accumulatedTime -= fixedTimeStep;\n    }\n\n    var alpha = accumulatedTime / fixedTimeStep;\n    render(alpha);\n\n    if (animationId) {\n      animationId = ownerWindow.requestAnimationFrame(animate);\n    }\n  }\n\n  function start() {\n    if (animationId) return;\n    animationId = ownerWindow.requestAnimationFrame(animate);\n  }\n\n  function stop() {\n    ownerWindow.cancelAnimationFrame(animationId);\n    lastTimeStamp = null;\n    accumulatedTime = 0;\n    animationId = 0;\n  }\n\n  function reset() {\n    lastTimeStamp = null;\n    accumulatedTime = 0;\n  }\n\n  var self = {\n    init: init,\n    destroy: destroy,\n    start: start,\n    stop: stop,\n    update: update,\n    render: render\n  };\n  return self;\n}\n\nfunction Axis(axis, contentDirection) {\n  var isRightToLeft = contentDirection === 'rtl';\n  var isVertical = axis === 'y';\n  var scroll = isVertical ? 'y' : 'x';\n  var cross = isVertical ? 'x' : 'y';\n  var sign = !isVertical && isRightToLeft ? -1 : 1;\n  var startEdge = getStartEdge();\n  var endEdge = getEndEdge();\n\n  function measureSize(nodeRect) {\n    var height = nodeRect.height,\n        width = nodeRect.width;\n    return isVertical ? height : width;\n  }\n\n  function getStartEdge() {\n    if (isVertical) return 'top';\n    return isRightToLeft ? 'right' : 'left';\n  }\n\n  function getEndEdge() {\n    if (isVertical) return 'bottom';\n    return isRightToLeft ? 'left' : 'right';\n  }\n\n  function direction(n) {\n    return n * sign;\n  }\n\n  var self = {\n    scroll: scroll,\n    cross: cross,\n    startEdge: startEdge,\n    endEdge: endEdge,\n    measureSize: measureSize,\n    direction: direction\n  };\n  return self;\n}\n\nfunction Limit() {\n  var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n  var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var length = mathAbs(min - max);\n\n  function reachedMin(n) {\n    return n < min;\n  }\n\n  function reachedMax(n) {\n    return n > max;\n  }\n\n  function reachedAny(n) {\n    return reachedMin(n) || reachedMax(n);\n  }\n\n  function constrain(n) {\n    if (!reachedAny(n)) return n;\n    return reachedMin(n) ? min : max;\n  }\n\n  function removeOffset(n) {\n    if (!length) return n;\n    return n - length * Math.ceil((n - max) / length);\n  }\n\n  var self = {\n    length: length,\n    max: max,\n    min: min,\n    constrain: constrain,\n    reachedAny: reachedAny,\n    reachedMax: reachedMax,\n    reachedMin: reachedMin,\n    removeOffset: removeOffset\n  };\n  return self;\n}\n\nfunction Counter(max, start, loop) {\n  var _Limit = Limit(0, max),\n      constrain = _Limit.constrain;\n\n  var loopEnd = max + 1;\n  var counter = withinLimit(start);\n\n  function withinLimit(n) {\n    return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd);\n  }\n\n  function get() {\n    return counter;\n  }\n\n  function set(n) {\n    counter = withinLimit(n);\n    return self;\n  }\n\n  function add(n) {\n    return clone().set(get() + n);\n  }\n\n  function clone() {\n    return Counter(max, get(), loop);\n  }\n\n  var self = {\n    get: get,\n    set: set,\n    add: add,\n    clone: clone\n  };\n  return self;\n}\n\nfunction DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) {\n  var crossAxis = axis.cross,\n      direction = axis.direction;\n  var focusNodes = ['INPUT', 'SELECT', 'TEXTAREA'];\n  var nonPassiveEvent = {\n    passive: false\n  };\n  var initEvents = EventStore();\n  var dragEvents = EventStore();\n  var goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20));\n  var snapForceBoost = {\n    mouse: 300,\n    touch: 400\n  };\n  var freeForceBoost = {\n    mouse: 500,\n    touch: 600\n  };\n  var baseSpeed = dragFree ? 43 : 25;\n  var isMoving = false;\n  var startScroll = 0;\n  var startCross = 0;\n  var pointerIsDown = false;\n  var preventScroll = false;\n  var preventClick = false;\n  var isMouse = false;\n\n  function init(emblaApi) {\n    if (!watchDrag) return;\n\n    function downIfAllowed(evt) {\n      if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt);\n    }\n\n    var node = rootNode;\n    initEvents.add(node, 'dragstart', function (evt) {\n      return evt.preventDefault();\n    }, nonPassiveEvent).add(node, 'touchmove', function () {\n      return undefined;\n    }, nonPassiveEvent).add(node, 'touchend', function () {\n      return undefined;\n    }).add(node, 'touchstart', downIfAllowed).add(node, 'mousedown', downIfAllowed).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click, true);\n  }\n\n  function destroy() {\n    initEvents.clear();\n    dragEvents.clear();\n  }\n\n  function addDragEvents() {\n    var node = isMouse ? ownerDocument : rootNode;\n    dragEvents.add(node, 'touchmove', move, nonPassiveEvent).add(node, 'touchend', up).add(node, 'mousemove', move, nonPassiveEvent).add(node, 'mouseup', up);\n  }\n\n  function isFocusNode(node) {\n    var nodeName = node.nodeName || '';\n    return focusNodes.includes(nodeName);\n  }\n\n  function forceBoost() {\n    var boost = dragFree ? freeForceBoost : snapForceBoost;\n    var type = isMouse ? 'mouse' : 'touch';\n    return boost[type];\n  }\n\n  function allowedForce(force, targetChanged) {\n    var next = index.add(mathSign(force) * -1);\n    var baseForce = scrollTarget.byDistance(force, !dragFree).distance;\n    if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce;\n    if (skipSnaps && targetChanged) return baseForce * 0.5;\n    return scrollTarget.byIndex(next.get(), 0).distance;\n  }\n\n  function down(evt) {\n    var isMouseEvt = isMouseEvent(evt, ownerWindow);\n    isMouse = isMouseEvt;\n    preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving;\n    isMoving = deltaAbs(target.get(), location.get()) >= 2;\n    if (isMouseEvt && evt.button !== 0) return;\n    if (isFocusNode(evt.target)) return;\n    pointerIsDown = true;\n    dragTracker.pointerDown(evt);\n    scrollBody.useFriction(0).useDuration(0);\n    target.set(location);\n    addDragEvents();\n    startScroll = dragTracker.readPoint(evt);\n    startCross = dragTracker.readPoint(evt, crossAxis);\n    eventHandler.emit('pointerDown');\n  }\n\n  function move(evt) {\n    var isTouchEvt = !isMouseEvent(evt, ownerWindow);\n    if (isTouchEvt && evt.touches.length >= 2) return up(evt);\n    var lastScroll = dragTracker.readPoint(evt);\n    var lastCross = dragTracker.readPoint(evt, crossAxis);\n    var diffScroll = deltaAbs(lastScroll, startScroll);\n    var diffCross = deltaAbs(lastCross, startCross);\n\n    if (!preventScroll && !isMouse) {\n      if (!evt.cancelable) return up(evt);\n      preventScroll = diffScroll > diffCross;\n      if (!preventScroll) return up(evt);\n    }\n\n    var diff = dragTracker.pointerMove(evt);\n    if (diffScroll > dragThreshold) preventClick = true;\n    scrollBody.useFriction(0.3).useDuration(0.75);\n    animation.start();\n    target.add(direction(diff));\n    evt.preventDefault();\n  }\n\n  function up(evt) {\n    var currentLocation = scrollTarget.byDistance(0, false);\n    var targetChanged = currentLocation.index !== index.get();\n    var rawForce = dragTracker.pointerUp(evt) * forceBoost();\n    var force = allowedForce(direction(rawForce), targetChanged);\n    var forceFactor = factorAbs(rawForce, force);\n    var speed = baseSpeed - 10 * forceFactor;\n    var friction = baseFriction + forceFactor / 50;\n    preventScroll = false;\n    pointerIsDown = false;\n    dragEvents.clear();\n    scrollBody.useDuration(speed).useFriction(friction);\n    scrollTo.distance(force, !dragFree);\n    isMouse = false;\n    eventHandler.emit('pointerUp');\n  }\n\n  function click(evt) {\n    if (preventClick) {\n      evt.stopPropagation();\n      evt.preventDefault();\n      preventClick = false;\n    }\n  }\n\n  function pointerDown() {\n    return pointerIsDown;\n  }\n\n  var self = {\n    init: init,\n    destroy: destroy,\n    pointerDown: pointerDown\n  };\n  return self;\n}\n\nfunction DragTracker(axis, ownerWindow) {\n  var logInterval = 170;\n  var startEvent;\n  var lastEvent;\n\n  function readTime(evt) {\n    return evt.timeStamp;\n  }\n\n  function readPoint(evt, evtAxis) {\n    var property = evtAxis || axis.scroll;\n    var coord = \"client\".concat(property === 'x' ? 'X' : 'Y');\n    return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord];\n  }\n\n  function pointerDown(evt) {\n    startEvent = evt;\n    lastEvent = evt;\n    return readPoint(evt);\n  }\n\n  function pointerMove(evt) {\n    var diff = readPoint(evt) - readPoint(lastEvent);\n    var expired = readTime(evt) - readTime(startEvent) > logInterval;\n    lastEvent = evt;\n    if (expired) startEvent = evt;\n    return diff;\n  }\n\n  function pointerUp(evt) {\n    if (!startEvent || !lastEvent) return 0;\n    var diffDrag = readPoint(lastEvent) - readPoint(startEvent);\n    var diffTime = readTime(evt) - readTime(startEvent);\n    var expired = readTime(evt) - readTime(lastEvent) > logInterval;\n    var force = diffDrag / diffTime;\n    var isFlick = diffTime && !expired && mathAbs(force) > 0.1;\n    return isFlick ? force : 0;\n  }\n\n  var self = {\n    pointerDown: pointerDown,\n    pointerMove: pointerMove,\n    pointerUp: pointerUp,\n    readPoint: readPoint\n  };\n  return self;\n}\n\nfunction NodeRects() {\n  function measure(node) {\n    var offsetTop = node.offsetTop,\n        offsetLeft = node.offsetLeft,\n        offsetWidth = node.offsetWidth,\n        offsetHeight = node.offsetHeight;\n    var offset = {\n      top: offsetTop,\n      right: offsetLeft + offsetWidth,\n      bottom: offsetTop + offsetHeight,\n      left: offsetLeft,\n      width: offsetWidth,\n      height: offsetHeight\n    };\n    return offset;\n  }\n\n  var self = {\n    measure: measure\n  };\n  return self;\n}\n\nfunction PercentOfView(viewSize) {\n  function measure(n) {\n    return viewSize * (n / 100);\n  }\n\n  var self = {\n    measure: measure\n  };\n  return self;\n}\n\nfunction ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) {\n  var observeNodes = [container].concat(slides);\n  var resizeObserver;\n  var containerSize;\n  var slideSizes = [];\n  var destroyed = false;\n\n  function readSize(node) {\n    return axis.measureSize(nodeRects.measure(node));\n  }\n\n  function init(emblaApi) {\n    if (!watchResize) return;\n    containerSize = readSize(container);\n    slideSizes = slides.map(readSize);\n\n    function defaultCallback(entries) {\n      var _iterator = _createForOfIteratorHelper(entries),\n          _step;\n\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var entry = _step.value;\n          if (destroyed) return;\n          var isContainer = entry.target === container;\n          var slideIndex = slides.indexOf(entry.target);\n          var lastSize = isContainer ? containerSize : slideSizes[slideIndex];\n          var newSize = readSize(isContainer ? container : slides[slideIndex]);\n          var diffSize = mathAbs(newSize - lastSize);\n\n          if (diffSize >= 0.5) {\n            emblaApi.reInit();\n            eventHandler.emit('resize');\n            break;\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n\n    resizeObserver = new ResizeObserver(function (entries) {\n      if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n        defaultCallback(entries);\n      }\n    });\n    ownerWindow.requestAnimationFrame(function () {\n      observeNodes.forEach(function (node) {\n        return resizeObserver.observe(node);\n      });\n    });\n  }\n\n  function destroy() {\n    destroyed = true;\n    if (resizeObserver) resizeObserver.disconnect();\n  }\n\n  var self = {\n    init: init,\n    destroy: destroy\n  };\n  return self;\n}\n\nfunction ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) {\n  var scrollVelocity = 0;\n  var scrollDirection = 0;\n  var scrollDuration = baseDuration;\n  var scrollFriction = baseFriction;\n  var rawLocation = location.get();\n  var rawLocationPrevious = 0;\n\n  function seek() {\n    var displacement = target.get() - location.get();\n    var isInstant = !scrollDuration;\n    var scrollDistance = 0;\n\n    if (isInstant) {\n      scrollVelocity = 0;\n      previousLocation.set(target);\n      location.set(target);\n      scrollDistance = displacement;\n    } else {\n      previousLocation.set(location);\n      scrollVelocity += displacement / scrollDuration;\n      scrollVelocity *= scrollFriction;\n      rawLocation += scrollVelocity;\n      location.add(scrollVelocity);\n      scrollDistance = rawLocation - rawLocationPrevious;\n    }\n\n    scrollDirection = mathSign(scrollDistance);\n    rawLocationPrevious = rawLocation;\n    return self;\n  }\n\n  function settled() {\n    var diff = target.get() - offsetLocation.get();\n    return mathAbs(diff) < 0.001;\n  }\n\n  function duration() {\n    return scrollDuration;\n  }\n\n  function direction() {\n    return scrollDirection;\n  }\n\n  function velocity() {\n    return scrollVelocity;\n  }\n\n  function useBaseDuration() {\n    return useDuration(baseDuration);\n  }\n\n  function useBaseFriction() {\n    return useFriction(baseFriction);\n  }\n\n  function useDuration(n) {\n    scrollDuration = n;\n    return self;\n  }\n\n  function useFriction(n) {\n    scrollFriction = n;\n    return self;\n  }\n\n  var self = {\n    direction: direction,\n    duration: duration,\n    velocity: velocity,\n    seek: seek,\n    settled: settled,\n    useBaseFriction: useBaseFriction,\n    useBaseDuration: useBaseDuration,\n    useFriction: useFriction,\n    useDuration: useDuration\n  };\n  return self;\n}\n\nfunction ScrollBounds(limit, location, target, scrollBody, percentOfView) {\n  var pullBackThreshold = percentOfView.measure(10);\n  var edgeOffsetTolerance = percentOfView.measure(50);\n  var frictionLimit = Limit(0.1, 0.99);\n  var disabled = false;\n\n  function shouldConstrain() {\n    if (disabled) return false;\n    if (!limit.reachedAny(target.get())) return false;\n    if (!limit.reachedAny(location.get())) return false;\n    return true;\n  }\n\n  function constrain(pointerDown) {\n    if (!shouldConstrain()) return;\n    var edge = limit.reachedMin(location.get()) ? 'min' : 'max';\n    var diffToEdge = mathAbs(limit[edge] - location.get());\n    var diffToTarget = target.get() - location.get();\n    var friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance);\n    target.subtract(diffToTarget * friction);\n\n    if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n      target.set(limit.constrain(target.get()));\n      scrollBody.useDuration(25).useBaseFriction();\n    }\n  }\n\n  function toggleActive(active) {\n    disabled = !active;\n  }\n\n  var self = {\n    shouldConstrain: shouldConstrain,\n    constrain: constrain,\n    toggleActive: toggleActive\n  };\n  return self;\n}\n\nfunction ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) {\n  var scrollBounds = Limit(-contentSize + viewSize, 0);\n  var snapsBounded = measureBounded();\n  var scrollContainLimit = findScrollContainLimit();\n  var snapsContained = measureContained();\n\n  function usePixelTolerance(bound, snap) {\n    return deltaAbs(bound, snap) <= 1;\n  }\n\n  function findScrollContainLimit() {\n    var startSnap = snapsBounded[0];\n    var endSnap = arrayLast(snapsBounded);\n    var min = snapsBounded.lastIndexOf(startSnap);\n    var max = snapsBounded.indexOf(endSnap) + 1;\n    return Limit(min, max);\n  }\n\n  function measureBounded() {\n    return snapsAligned.map(function (snapAligned, index) {\n      var min = scrollBounds.min,\n          max = scrollBounds.max;\n      var snap = scrollBounds.constrain(snapAligned);\n      var isFirst = !index;\n      var isLast = arrayIsLastIndex(snapsAligned, index);\n      if (isFirst) return max;\n      if (isLast) return min;\n      if (usePixelTolerance(min, snap)) return min;\n      if (usePixelTolerance(max, snap)) return max;\n      return snap;\n    }).map(function (scrollBound) {\n      return parseFloat(scrollBound.toFixed(3));\n    });\n  }\n\n  function measureContained() {\n    if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max];\n    if (containScroll === 'keepSnaps') return snapsBounded;\n    var min = scrollContainLimit.min,\n        max = scrollContainLimit.max;\n    return snapsBounded.slice(min, max);\n  }\n\n  var self = {\n    snapsContained: snapsContained,\n    scrollContainLimit: scrollContainLimit\n  };\n  return self;\n}\n\nfunction ScrollLimit(contentSize, scrollSnaps, loop) {\n  var max = scrollSnaps[0];\n  var min = loop ? max - contentSize : arrayLast(scrollSnaps);\n  var limit = Limit(min, max);\n  var self = {\n    limit: limit\n  };\n  return self;\n}\n\nfunction ScrollLooper(contentSize, limit, location, vectors) {\n  var jointSafety = 0.1;\n  var min = limit.min + jointSafety;\n  var max = limit.max + jointSafety;\n\n  var _Limit2 = Limit(min, max),\n      reachedMin = _Limit2.reachedMin,\n      reachedMax = _Limit2.reachedMax;\n\n  function shouldLoop(direction) {\n    if (direction === 1) return reachedMax(location.get());\n    if (direction === -1) return reachedMin(location.get());\n    return false;\n  }\n\n  function loop(direction) {\n    if (!shouldLoop(direction)) return;\n    var loopDistance = contentSize * (direction * -1);\n    vectors.forEach(function (v) {\n      return v.add(loopDistance);\n    });\n  }\n\n  var self = {\n    loop: loop\n  };\n  return self;\n}\n\nfunction ScrollProgress(limit) {\n  var max = limit.max,\n      length = limit.length;\n\n  function get(n) {\n    var currentLocation = n - max;\n    return length ? currentLocation / -length : 0;\n  }\n\n  var self = {\n    get: get\n  };\n  return self;\n}\n\nfunction ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) {\n  var startEdge = axis.startEdge,\n      endEdge = axis.endEdge;\n  var groupSlides = slidesToScroll.groupSlides;\n  var alignments = measureSizes().map(alignment.measure);\n  var snaps = measureUnaligned();\n  var snapsAligned = measureAligned();\n\n  function measureSizes() {\n    return groupSlides(slideRects).map(function (rects) {\n      return arrayLast(rects)[endEdge] - rects[0][startEdge];\n    }).map(mathAbs);\n  }\n\n  function measureUnaligned() {\n    return slideRects.map(function (rect) {\n      return containerRect[startEdge] - rect[startEdge];\n    }).map(function (snap) {\n      return -mathAbs(snap);\n    });\n  }\n\n  function measureAligned() {\n    return groupSlides(snaps).map(function (g) {\n      return g[0];\n    }).map(function (snap, index) {\n      return snap + alignments[index];\n    });\n  }\n\n  var self = {\n    snaps: snaps,\n    snapsAligned: snapsAligned\n  };\n  return self;\n}\n\nfunction SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) {\n  var groupSlides = slidesToScroll.groupSlides;\n  var min = scrollContainLimit.min,\n      max = scrollContainLimit.max;\n  var slideRegistry = createSlideRegistry();\n\n  function createSlideRegistry() {\n    var groupedSlideIndexes = groupSlides(slideIndexes);\n    var doNotContain = !containSnaps || containScroll === 'keepSnaps';\n    if (scrollSnaps.length === 1) return [slideIndexes];\n    if (doNotContain) return groupedSlideIndexes;\n    return groupedSlideIndexes.slice(min, max).map(function (group, index, groups) {\n      var isFirst = !index;\n      var isLast = arrayIsLastIndex(groups, index);\n\n      if (isFirst) {\n        var range = arrayLast(groups[0]) + 1;\n        return arrayFromNumber(range);\n      }\n\n      if (isLast) {\n        var _range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1;\n\n        return arrayFromNumber(_range, arrayLast(groups)[0]);\n      }\n\n      return group;\n    });\n  }\n\n  var self = {\n    slideRegistry: slideRegistry\n  };\n  return self;\n}\n\nfunction ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) {\n  var reachedAny = limit.reachedAny,\n      removeOffset = limit.removeOffset,\n      constrain = limit.constrain;\n\n  function minDistance(distances) {\n    return distances.concat().sort(function (a, b) {\n      return mathAbs(a) - mathAbs(b);\n    })[0];\n  }\n\n  function findTargetSnap(target) {\n    var distance = loop ? removeOffset(target) : constrain(target);\n    var ascDiffsToSnaps = scrollSnaps.map(function (snap, index) {\n      return {\n        diff: shortcut(snap - distance, 0),\n        index: index\n      };\n    }).sort(function (d1, d2) {\n      return mathAbs(d1.diff) - mathAbs(d2.diff);\n    });\n    var index = ascDiffsToSnaps[0].index;\n    return {\n      index: index,\n      distance: distance\n    };\n  }\n\n  function shortcut(target, direction) {\n    var targets = [target, target + contentSize, target - contentSize];\n    if (!loop) return target;\n    if (!direction) return minDistance(targets);\n    var matchingTargets = targets.filter(function (t) {\n      return mathSign(t) === direction;\n    });\n    if (matchingTargets.length) return minDistance(matchingTargets);\n    return arrayLast(targets) - contentSize;\n  }\n\n  function byIndex(index, direction) {\n    var diffToSnap = scrollSnaps[index] - targetVector.get();\n    var distance = shortcut(diffToSnap, direction);\n    return {\n      index: index,\n      distance: distance\n    };\n  }\n\n  function byDistance(distance, snap) {\n    var target = targetVector.get() + distance;\n\n    var _findTargetSnap = findTargetSnap(target),\n        index = _findTargetSnap.index,\n        targetSnapDistance = _findTargetSnap.distance;\n\n    var reachedBound = !loop && reachedAny(target);\n    if (!snap || reachedBound) return {\n      index: index,\n      distance: distance\n    };\n    var diffToSnap = scrollSnaps[index] - targetSnapDistance;\n    var snapDistance = distance + shortcut(diffToSnap, 0);\n    return {\n      index: index,\n      distance: snapDistance\n    };\n  }\n\n  var self = {\n    byDistance: byDistance,\n    byIndex: byIndex,\n    shortcut: shortcut\n  };\n  return self;\n}\n\nfunction ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) {\n  function scrollTo(target) {\n    var distanceDiff = target.distance;\n    var indexDiff = target.index !== indexCurrent.get();\n    targetVector.add(distanceDiff);\n\n    if (distanceDiff) {\n      if (scrollBody.duration()) {\n        animation.start();\n      } else {\n        animation.update();\n        animation.render(1);\n        animation.update();\n      }\n    }\n\n    if (indexDiff) {\n      indexPrevious.set(indexCurrent.get());\n      indexCurrent.set(target.index);\n      eventHandler.emit('select');\n    }\n  }\n\n  function distance(n, snap) {\n    var target = scrollTarget.byDistance(n, snap);\n    scrollTo(target);\n  }\n\n  function index(n, direction) {\n    var targetIndex = indexCurrent.clone().set(n);\n    var target = scrollTarget.byIndex(targetIndex.get(), direction);\n    scrollTo(target);\n  }\n\n  var self = {\n    distance: distance,\n    index: index\n  };\n  return self;\n}\n\nfunction SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) {\n  var focusListenerOptions = {\n    passive: true,\n    capture: true\n  };\n  var lastTabPressTime = 0;\n\n  function init(emblaApi) {\n    if (!watchFocus) return;\n\n    function defaultCallback(index) {\n      var nowTime = new Date().getTime();\n      var diffTime = nowTime - lastTabPressTime;\n      if (diffTime > 10) return;\n      eventHandler.emit('slideFocusStart');\n      root.scrollLeft = 0;\n      var group = slideRegistry.findIndex(function (group) {\n        return group.includes(index);\n      });\n      if (!isNumber(group)) return;\n      scrollBody.useDuration(0);\n      scrollTo.index(group, 0);\n      eventHandler.emit('slideFocus');\n    }\n\n    eventStore.add(document, 'keydown', registerTabPress, false);\n    slides.forEach(function (slide, slideIndex) {\n      eventStore.add(slide, 'focus', function (evt) {\n        if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n          defaultCallback(slideIndex);\n        }\n      }, focusListenerOptions);\n    });\n  }\n\n  function registerTabPress(event) {\n    if (event.code === 'Tab') lastTabPressTime = new Date().getTime();\n  }\n\n  var self = {\n    init: init\n  };\n  return self;\n}\n\nfunction Vector1D(initialValue) {\n  var value = initialValue;\n\n  function get() {\n    return value;\n  }\n\n  function set(n) {\n    value = normalizeInput(n);\n  }\n\n  function add(n) {\n    value += normalizeInput(n);\n  }\n\n  function subtract(n) {\n    value -= normalizeInput(n);\n  }\n\n  function normalizeInput(n) {\n    return isNumber(n) ? n : n.get();\n  }\n\n  var self = {\n    get: get,\n    set: set,\n    add: add,\n    subtract: subtract\n  };\n  return self;\n}\n\nfunction Translate(axis, container) {\n  var translate = axis.scroll === 'x' ? x : y;\n  var containerStyle = container.style;\n  var previousTarget = null;\n  var disabled = false;\n\n  function x(n) {\n    return \"translate3d(\".concat(n, \"px,0px,0px)\");\n  }\n\n  function y(n) {\n    return \"translate3d(0px,\".concat(n, \"px,0px)\");\n  }\n\n  function to(target) {\n    if (disabled) return;\n    var newTarget = roundToTwoDecimals(axis.direction(target));\n    if (newTarget === previousTarget) return;\n    containerStyle.transform = translate(newTarget);\n    previousTarget = newTarget;\n  }\n\n  function toggleActive(active) {\n    disabled = !active;\n  }\n\n  function clear() {\n    if (disabled) return;\n    containerStyle.transform = '';\n    if (!container.getAttribute('style')) container.removeAttribute('style');\n  }\n\n  var self = {\n    clear: clear,\n    to: to,\n    toggleActive: toggleActive\n  };\n  return self;\n}\n\nfunction SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) {\n  var roundingSafety = 0.5;\n  var ascItems = arrayKeys(slideSizesWithGaps);\n  var descItems = arrayKeys(slideSizesWithGaps).reverse();\n  var loopPoints = startPoints().concat(endPoints());\n\n  function removeSlideSizes(indexes, from) {\n    return indexes.reduce(function (a, i) {\n      return a - slideSizesWithGaps[i];\n    }, from);\n  }\n\n  function slidesInGap(indexes, gap) {\n    return indexes.reduce(function (a, i) {\n      var remainingGap = removeSlideSizes(a, gap);\n      return remainingGap > 0 ? a.concat([i]) : a;\n    }, []);\n  }\n\n  function findSlideBounds(offset) {\n    return snaps.map(function (snap, index) {\n      return {\n        start: snap - slideSizes[index] + roundingSafety + offset,\n        end: snap + viewSize - roundingSafety + offset\n      };\n    });\n  }\n\n  function findLoopPoints(indexes, offset, isEndEdge) {\n    var slideBounds = findSlideBounds(offset);\n    return indexes.map(function (index) {\n      var initial = isEndEdge ? 0 : -contentSize;\n      var altered = isEndEdge ? contentSize : 0;\n      var boundEdge = isEndEdge ? 'end' : 'start';\n      var loopPoint = slideBounds[index][boundEdge];\n      return {\n        index: index,\n        loopPoint: loopPoint,\n        slideLocation: Vector1D(-1),\n        translate: Translate(axis, slides[index]),\n        target: function target() {\n          return location.get() > loopPoint ? initial : altered;\n        }\n      };\n    });\n  }\n\n  function startPoints() {\n    var gap = scrollSnaps[0];\n    var indexes = slidesInGap(descItems, gap);\n    return findLoopPoints(indexes, contentSize, false);\n  }\n\n  function endPoints() {\n    var gap = viewSize - scrollSnaps[0] - 1;\n    var indexes = slidesInGap(ascItems, gap);\n    return findLoopPoints(indexes, -contentSize, true);\n  }\n\n  function canLoop() {\n    return loopPoints.every(function (_ref) {\n      var index = _ref.index;\n      var otherIndexes = ascItems.filter(function (i) {\n        return i !== index;\n      });\n      return removeSlideSizes(otherIndexes, viewSize) <= 0.1;\n    });\n  }\n\n  function loop() {\n    loopPoints.forEach(function (loopPoint) {\n      var target = loopPoint.target,\n          translate = loopPoint.translate,\n          slideLocation = loopPoint.slideLocation;\n      var shiftLocation = target();\n      if (shiftLocation === slideLocation.get()) return;\n      translate.to(shiftLocation);\n      slideLocation.set(shiftLocation);\n    });\n  }\n\n  function clear() {\n    loopPoints.forEach(function (loopPoint) {\n      return loopPoint.translate.clear();\n    });\n  }\n\n  var self = {\n    canLoop: canLoop,\n    clear: clear,\n    loop: loop,\n    loopPoints: loopPoints\n  };\n  return self;\n}\n\nfunction SlidesHandler(container, eventHandler, watchSlides) {\n  var mutationObserver;\n  var destroyed = false;\n\n  function init(emblaApi) {\n    if (!watchSlides) return;\n\n    function defaultCallback(mutations) {\n      var _iterator2 = _createForOfIteratorHelper(mutations),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var mutation = _step2.value;\n\n          if (mutation.type === 'childList') {\n            emblaApi.reInit();\n            eventHandler.emit('slidesChanged');\n            break;\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n    }\n\n    mutationObserver = new MutationObserver(function (mutations) {\n      if (destroyed) return;\n\n      if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n        defaultCallback(mutations);\n      }\n    });\n    mutationObserver.observe(container, {\n      childList: true\n    });\n  }\n\n  function destroy() {\n    if (mutationObserver) mutationObserver.disconnect();\n    destroyed = true;\n  }\n\n  var self = {\n    init: init,\n    destroy: destroy\n  };\n  return self;\n}\n\nfunction SlidesInView(container, slides, eventHandler, threshold) {\n  var intersectionEntryMap = {};\n  var inViewCache = null;\n  var notInViewCache = null;\n  var intersectionObserver;\n  var destroyed = false;\n\n  function init() {\n    intersectionObserver = new IntersectionObserver(function (entries) {\n      if (destroyed) return;\n      entries.forEach(function (entry) {\n        var index = slides.indexOf(entry.target);\n        intersectionEntryMap[index] = entry;\n      });\n      inViewCache = null;\n      notInViewCache = null;\n      eventHandler.emit('slidesInView');\n    }, {\n      root: container.parentElement,\n      threshold: threshold\n    });\n    slides.forEach(function (slide) {\n      return intersectionObserver.observe(slide);\n    });\n  }\n\n  function destroy() {\n    if (intersectionObserver) intersectionObserver.disconnect();\n    destroyed = true;\n  }\n\n  function createInViewList(inView) {\n    return objectKeys(intersectionEntryMap).reduce(function (list, slideIndex) {\n      var index = parseInt(slideIndex);\n      var isIntersecting = intersectionEntryMap[index].isIntersecting;\n      var inViewMatch = inView && isIntersecting;\n      var notInViewMatch = !inView && !isIntersecting;\n      if (inViewMatch || notInViewMatch) list.push(index);\n      return list;\n    }, []);\n  }\n\n  function get() {\n    var inView = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n    if (inView && inViewCache) return inViewCache;\n    if (!inView && notInViewCache) return notInViewCache;\n    var slideIndexes = createInViewList(inView);\n    if (inView) inViewCache = slideIndexes;\n    if (!inView) notInViewCache = slideIndexes;\n    return slideIndexes;\n  }\n\n  var self = {\n    init: init,\n    destroy: destroy,\n    get: get\n  };\n  return self;\n}\n\nfunction SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) {\n  var measureSize = axis.measureSize,\n      startEdge = axis.startEdge,\n      endEdge = axis.endEdge;\n  var withEdgeGap = slideRects[0] && readEdgeGap;\n  var startGap = measureStartGap();\n  var endGap = measureEndGap();\n  var slideSizes = slideRects.map(measureSize);\n  var slideSizesWithGaps = measureWithGaps();\n\n  function measureStartGap() {\n    if (!withEdgeGap) return 0;\n    var slideRect = slideRects[0];\n    return mathAbs(containerRect[startEdge] - slideRect[startEdge]);\n  }\n\n  function measureEndGap() {\n    if (!withEdgeGap) return 0;\n    var style = ownerWindow.getComputedStyle(arrayLast(slides));\n    return parseFloat(style.getPropertyValue(\"margin-\".concat(endEdge)));\n  }\n\n  function measureWithGaps() {\n    return slideRects.map(function (rect, index, rects) {\n      var isFirst = !index;\n      var isLast = arrayIsLastIndex(rects, index);\n      if (isFirst) return slideSizes[index] + startGap;\n      if (isLast) return slideSizes[index] + endGap;\n      return rects[index + 1][startEdge] - rect[startEdge];\n    }).map(mathAbs);\n  }\n\n  var self = {\n    slideSizes: slideSizes,\n    slideSizesWithGaps: slideSizesWithGaps,\n    startGap: startGap,\n    endGap: endGap\n  };\n  return self;\n}\n\nfunction SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) {\n  var startEdge = axis.startEdge,\n      endEdge = axis.endEdge,\n      direction = axis.direction;\n  var groupByNumber = isNumber(slidesToScroll);\n\n  function byNumber(array, groupSize) {\n    return arrayKeys(array).filter(function (i) {\n      return i % groupSize === 0;\n    }).map(function (i) {\n      return array.slice(i, i + groupSize);\n    });\n  }\n\n  function bySize(array) {\n    if (!array.length) return [];\n    return arrayKeys(array).reduce(function (groups, rectB, index) {\n      var rectA = arrayLast(groups) || 0;\n      var isFirst = rectA === 0;\n      var isLast = rectB === arrayLastIndex(array);\n      var edgeA = containerRect[startEdge] - slideRects[rectA][startEdge];\n      var edgeB = containerRect[startEdge] - slideRects[rectB][endEdge];\n      var gapA = !loop && isFirst ? direction(startGap) : 0;\n      var gapB = !loop && isLast ? direction(endGap) : 0;\n      var chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA));\n      if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB);\n      if (isLast) groups.push(array.length);\n      return groups;\n    }, []).map(function (currentSize, index, groups) {\n      var previousSize = Math.max(groups[index - 1] || 0);\n      return array.slice(previousSize, currentSize);\n    });\n  }\n\n  function groupSlides(array) {\n    return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array);\n  }\n\n  var self = {\n    groupSlides: groupSlides\n  };\n  return self;\n}\n\nfunction Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) {\n  // Options\n  var align = options.align,\n      scrollAxis = options.axis,\n      direction = options.direction,\n      startIndex = options.startIndex,\n      loop = options.loop,\n      duration = options.duration,\n      dragFree = options.dragFree,\n      dragThreshold = options.dragThreshold,\n      inViewThreshold = options.inViewThreshold,\n      groupSlides = options.slidesToScroll,\n      skipSnaps = options.skipSnaps,\n      containScroll = options.containScroll,\n      watchResize = options.watchResize,\n      watchSlides = options.watchSlides,\n      watchDrag = options.watchDrag,\n      watchFocus = options.watchFocus; // Measurements\n\n  var pixelTolerance = 2;\n  var nodeRects = NodeRects();\n  var containerRect = nodeRects.measure(container);\n  var slideRects = slides.map(nodeRects.measure);\n  var axis = Axis(scrollAxis, direction);\n  var viewSize = axis.measureSize(containerRect);\n  var percentOfView = PercentOfView(viewSize);\n  var alignment = Alignment(align, viewSize);\n  var containSnaps = !loop && !!containScroll;\n  var readEdgeGap = loop || !!containScroll;\n\n  var _SlideSizes = SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow),\n      slideSizes = _SlideSizes.slideSizes,\n      slideSizesWithGaps = _SlideSizes.slideSizesWithGaps,\n      startGap = _SlideSizes.startGap,\n      endGap = _SlideSizes.endGap;\n\n  var slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance);\n\n  var _ScrollSnaps = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll),\n      snaps = _ScrollSnaps.snaps,\n      snapsAligned = _ScrollSnaps.snapsAligned;\n\n  var contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps);\n\n  var _ScrollContain = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance),\n      snapsContained = _ScrollContain.snapsContained,\n      scrollContainLimit = _ScrollContain.scrollContainLimit;\n\n  var scrollSnaps = containSnaps ? snapsContained : snapsAligned;\n\n  var _ScrollLimit = ScrollLimit(contentSize, scrollSnaps, loop),\n      limit = _ScrollLimit.limit; // Indexes\n\n\n  var index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop);\n  var indexPrevious = index.clone();\n  var slideIndexes = arrayKeys(slides); // Animation\n\n  var update = function update(_ref2) {\n    var dragHandler = _ref2.dragHandler,\n        scrollBody = _ref2.scrollBody,\n        scrollBounds = _ref2.scrollBounds,\n        loop = _ref2.options.loop;\n    if (!loop) scrollBounds.constrain(dragHandler.pointerDown());\n    scrollBody.seek();\n  };\n\n  var render = function render(_ref3, alpha) {\n    var scrollBody = _ref3.scrollBody,\n        translate = _ref3.translate,\n        location = _ref3.location,\n        offsetLocation = _ref3.offsetLocation,\n        previousLocation = _ref3.previousLocation,\n        scrollLooper = _ref3.scrollLooper,\n        slideLooper = _ref3.slideLooper,\n        dragHandler = _ref3.dragHandler,\n        animation = _ref3.animation,\n        eventHandler = _ref3.eventHandler,\n        scrollBounds = _ref3.scrollBounds,\n        loop = _ref3.options.loop;\n    var shouldSettle = scrollBody.settled();\n    var withinBounds = !scrollBounds.shouldConstrain();\n    var hasSettled = loop ? shouldSettle : shouldSettle && withinBounds;\n\n    if (hasSettled && !dragHandler.pointerDown()) {\n      animation.stop();\n      eventHandler.emit('settle');\n    }\n\n    if (!hasSettled) eventHandler.emit('scroll');\n    var interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha);\n    offsetLocation.set(interpolatedLocation);\n\n    if (loop) {\n      scrollLooper.loop(scrollBody.direction());\n      slideLooper.loop();\n    }\n\n    translate.to(offsetLocation.get());\n  };\n\n  var animation = Animations(ownerDocument, ownerWindow, function () {\n    return update(engine);\n  }, function (alpha) {\n    return render(engine, alpha);\n  }); // Shared\n\n  var friction = 0.68;\n  var startLocation = scrollSnaps[index.get()];\n  var location = Vector1D(startLocation);\n  var previousLocation = Vector1D(startLocation);\n  var offsetLocation = Vector1D(startLocation);\n  var target = Vector1D(startLocation);\n  var scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction);\n  var scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target);\n  var scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler);\n  var scrollProgress = ScrollProgress(limit);\n  var eventStore = EventStore();\n  var slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold);\n\n  var _SlideRegistry = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes),\n      slideRegistry = _SlideRegistry.slideRegistry;\n\n  var slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus); // Engine\n\n  var engine = {\n    ownerDocument: ownerDocument,\n    ownerWindow: ownerWindow,\n    eventHandler: eventHandler,\n    containerRect: containerRect,\n    slideRects: slideRects,\n    animation: animation,\n    axis: axis,\n    dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag),\n    eventStore: eventStore,\n    percentOfView: percentOfView,\n    index: index,\n    indexPrevious: indexPrevious,\n    limit: limit,\n    location: location,\n    offsetLocation: offsetLocation,\n    previousLocation: previousLocation,\n    options: options,\n    resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects),\n    scrollBody: scrollBody,\n    scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView),\n    scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [location, offsetLocation, previousLocation, target]),\n    scrollProgress: scrollProgress,\n    scrollSnapList: scrollSnaps.map(scrollProgress.get),\n    scrollSnaps: scrollSnaps,\n    scrollTarget: scrollTarget,\n    scrollTo: scrollTo,\n    slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides),\n    slideFocus: slideFocus,\n    slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n    slidesInView: slidesInView,\n    slideIndexes: slideIndexes,\n    slideRegistry: slideRegistry,\n    slidesToScroll: slidesToScroll,\n    target: target,\n    translate: Translate(axis, container)\n  };\n  return engine;\n}\n\nfunction EventHandler() {\n  var listeners = {};\n  var api;\n\n  function init(emblaApi) {\n    api = emblaApi;\n  }\n\n  function getListeners(evt) {\n    return listeners[evt] || [];\n  }\n\n  function emit(evt) {\n    getListeners(evt).forEach(function (e) {\n      return e(api, evt);\n    });\n    return self;\n  }\n\n  function on(evt, cb) {\n    listeners[evt] = getListeners(evt).concat([cb]);\n    return self;\n  }\n\n  function off(evt, cb) {\n    listeners[evt] = getListeners(evt).filter(function (e) {\n      return e !== cb;\n    });\n    return self;\n  }\n\n  function clear() {\n    listeners = {};\n  }\n\n  var self = {\n    init: init,\n    emit: emit,\n    off: off,\n    on: on,\n    clear: clear\n  };\n  return self;\n}\n\nvar defaultOptions = {\n  align: 'center',\n  axis: 'x',\n  container: null,\n  slides: null,\n  containScroll: 'trimSnaps',\n  direction: 'ltr',\n  slidesToScroll: 1,\n  inViewThreshold: 0,\n  breakpoints: {},\n  dragFree: false,\n  dragThreshold: 10,\n  loop: false,\n  skipSnaps: false,\n  duration: 25,\n  startIndex: 0,\n  active: true,\n  watchDrag: true,\n  watchResize: true,\n  watchSlides: true,\n  watchFocus: true\n};\n\nfunction OptionsHandler(ownerWindow) {\n  function mergeOptions(optionsA, optionsB) {\n    return objectsMergeDeep(optionsA, optionsB || {});\n  }\n\n  function optionsAtMedia(options) {\n    var optionsAtMedia = options.breakpoints || {};\n    var matchedMediaOptions = objectKeys(optionsAtMedia).filter(function (media) {\n      return ownerWindow.matchMedia(media).matches;\n    }).map(function (media) {\n      return optionsAtMedia[media];\n    }).reduce(function (a, mediaOption) {\n      return mergeOptions(a, mediaOption);\n    }, {});\n    return mergeOptions(options, matchedMediaOptions);\n  }\n\n  function optionsMediaQueries(optionsList) {\n    return optionsList.map(function (options) {\n      return objectKeys(options.breakpoints || {});\n    }).reduce(function (acc, mediaQueries) {\n      return acc.concat(mediaQueries);\n    }, []).map(ownerWindow.matchMedia);\n  }\n\n  var self = {\n    mergeOptions: mergeOptions,\n    optionsAtMedia: optionsAtMedia,\n    optionsMediaQueries: optionsMediaQueries\n  };\n  return self;\n}\n\nfunction PluginsHandler(optionsHandler) {\n  var activePlugins = [];\n\n  function init(emblaApi, plugins) {\n    activePlugins = plugins.filter(function (_ref4) {\n      var options = _ref4.options;\n      return optionsHandler.optionsAtMedia(options).active !== false;\n    });\n    activePlugins.forEach(function (plugin) {\n      return plugin.init(emblaApi, optionsHandler);\n    });\n    return plugins.reduce(function (map, plugin) {\n      return Object.assign(map, _defineProperty({}, plugin.name, plugin));\n    }, {});\n  }\n\n  function destroy() {\n    activePlugins = activePlugins.filter(function (plugin) {\n      return plugin.destroy();\n    });\n  }\n\n  var self = {\n    init: init,\n    destroy: destroy\n  };\n  return self;\n}\n\nfunction EmblaCarousel(root, userOptions, userPlugins) {\n  var ownerDocument = root.ownerDocument;\n  var ownerWindow = ownerDocument.defaultView;\n  var optionsHandler = OptionsHandler(ownerWindow);\n  var pluginsHandler = PluginsHandler(optionsHandler);\n  var mediaHandlers = EventStore();\n  var eventHandler = EventHandler();\n  var mergeOptions = optionsHandler.mergeOptions,\n      optionsAtMedia = optionsHandler.optionsAtMedia,\n      optionsMediaQueries = optionsHandler.optionsMediaQueries;\n  var on = eventHandler.on,\n      off = eventHandler.off,\n      emit = eventHandler.emit;\n  var reInit = reActivate;\n  var destroyed = false;\n  var engine;\n  var optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions);\n  var options = mergeOptions(optionsBase);\n  var pluginList = [];\n  var pluginApis;\n  var container;\n  var slides;\n\n  function storeElements() {\n    var _options = options,\n        userContainer = _options.container,\n        userSlides = _options.slides;\n    var customContainer = isString(userContainer) ? root.querySelector(userContainer) : userContainer;\n    container = customContainer || root.children[0];\n    var customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides;\n    slides = [].slice.call(customSlides || container.children);\n  }\n\n  function createEngine(options) {\n    var engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler);\n\n    if (options.loop && !engine.slideLooper.canLoop()) {\n      var optionsWithoutLoop = Object.assign({}, options, {\n        loop: false\n      });\n      return createEngine(optionsWithoutLoop);\n    }\n\n    return engine;\n  }\n\n  function activate(withOptions, withPlugins) {\n    if (destroyed) return;\n    optionsBase = mergeOptions(optionsBase, withOptions);\n    options = optionsAtMedia(optionsBase);\n    pluginList = withPlugins || pluginList;\n    storeElements();\n    engine = createEngine(options);\n    optionsMediaQueries([optionsBase].concat(_toConsumableArray(pluginList.map(function (_ref5) {\n      var options = _ref5.options;\n      return options;\n    })))).forEach(function (query) {\n      return mediaHandlers.add(query, 'change', reActivate);\n    });\n    if (!options.active) return;\n    engine.translate.to(engine.location.get());\n    engine.animation.init();\n    engine.slidesInView.init();\n    engine.slideFocus.init(self);\n    engine.eventHandler.init(self);\n    engine.resizeHandler.init(self);\n    engine.slidesHandler.init(self);\n    if (engine.options.loop) engine.slideLooper.loop();\n    if (container.offsetParent && slides.length) engine.dragHandler.init(self);\n    pluginApis = pluginsHandler.init(self, pluginList);\n  }\n\n  function reActivate(withOptions, withPlugins) {\n    var startIndex = selectedScrollSnap();\n    deActivate();\n    activate(mergeOptions({\n      startIndex: startIndex\n    }, withOptions), withPlugins);\n    eventHandler.emit('reInit');\n  }\n\n  function deActivate() {\n    engine.dragHandler.destroy();\n    engine.eventStore.clear();\n    engine.translate.clear();\n    engine.slideLooper.clear();\n    engine.resizeHandler.destroy();\n    engine.slidesHandler.destroy();\n    engine.slidesInView.destroy();\n    engine.animation.destroy();\n    pluginsHandler.destroy();\n    mediaHandlers.clear();\n  }\n\n  function destroy() {\n    if (destroyed) return;\n    destroyed = true;\n    mediaHandlers.clear();\n    deActivate();\n    eventHandler.emit('destroy');\n    eventHandler.clear();\n  }\n\n  function scrollTo(index, jump, direction) {\n    if (!options.active || destroyed) return;\n    engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration);\n    engine.scrollTo.index(index, direction || 0);\n  }\n\n  function scrollNext(jump) {\n    var next = engine.index.add(1).get();\n    scrollTo(next, jump, -1);\n  }\n\n  function scrollPrev(jump) {\n    var prev = engine.index.add(-1).get();\n    scrollTo(prev, jump, 1);\n  }\n\n  function canScrollNext() {\n    var next = engine.index.add(1).get();\n    return next !== selectedScrollSnap();\n  }\n\n  function canScrollPrev() {\n    var prev = engine.index.add(-1).get();\n    return prev !== selectedScrollSnap();\n  }\n\n  function scrollSnapList() {\n    return engine.scrollSnapList;\n  }\n\n  function scrollProgress() {\n    return engine.scrollProgress.get(engine.location.get());\n  }\n\n  function selectedScrollSnap() {\n    return engine.index.get();\n  }\n\n  function previousScrollSnap() {\n    return engine.indexPrevious.get();\n  }\n\n  function slidesInView() {\n    return engine.slidesInView.get();\n  }\n\n  function slidesNotInView() {\n    return engine.slidesInView.get(false);\n  }\n\n  function plugins() {\n    return pluginApis;\n  }\n\n  function internalEngine() {\n    return engine;\n  }\n\n  function rootNode() {\n    return root;\n  }\n\n  function containerNode() {\n    return container;\n  }\n\n  function slideNodes() {\n    return slides;\n  }\n\n  var self = {\n    canScrollNext: canScrollNext,\n    canScrollPrev: canScrollPrev,\n    containerNode: containerNode,\n    internalEngine: internalEngine,\n    destroy: destroy,\n    off: off,\n    on: on,\n    emit: emit,\n    plugins: plugins,\n    previousScrollSnap: previousScrollSnap,\n    reInit: reInit,\n    rootNode: rootNode,\n    scrollNext: scrollNext,\n    scrollPrev: scrollPrev,\n    scrollProgress: scrollProgress,\n    scrollSnapList: scrollSnapList,\n    scrollTo: scrollTo,\n    selectedScrollSnap: selectedScrollSnap,\n    slideNodes: slideNodes,\n    slidesInView: slidesInView,\n    slidesNotInView: slidesNotInView\n  };\n  activate(userOptions, userPlugins);\n  setTimeout(function () {\n    return eventHandler.emit('init');\n  }, 0);\n  return self;\n}\n\nEmblaCarousel.globalOptions = undefined;\nexport { EmblaCarousel as default };","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { useRef, useState, useCallback, useEffect } from 'react';\nimport { areOptionsEqual, arePluginsEqual, canUseDOM } from 'embla-carousel-reactive-utils';\nimport EmblaCarousel from 'embla-carousel';\n\nfunction useEmblaCarousel() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var plugins = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n  var storedOptions = useRef(options);\n  var storedPlugins = useRef(plugins);\n\n  var _useState = useState(),\n      _useState2 = _slicedToArray(_useState, 2),\n      emblaApi = _useState2[0],\n      setEmblaApi = _useState2[1];\n\n  var _useState3 = useState(),\n      _useState4 = _slicedToArray(_useState3, 2),\n      viewport = _useState4[0],\n      setViewport = _useState4[1];\n\n  var reInit = useCallback(function () {\n    if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current);\n  }, [emblaApi]);\n  useEffect(function () {\n    if (areOptionsEqual(storedOptions.current, options)) return;\n    storedOptions.current = options;\n    reInit();\n  }, [options, reInit]);\n  useEffect(function () {\n    if (arePluginsEqual(storedPlugins.current, plugins)) return;\n    storedPlugins.current = plugins;\n    reInit();\n  }, [plugins, reInit]);\n  useEffect(function () {\n    if (canUseDOM() && viewport) {\n      EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions;\n      var newEmblaApi = EmblaCarousel(viewport, storedOptions.current, storedPlugins.current);\n      setEmblaApi(newEmblaApi);\n      return function () {\n        return newEmblaApi.destroy();\n      };\n    } else {\n      setEmblaApi(undefined);\n    }\n  }, [viewport, setEmblaApi]);\n  return [setViewport, emblaApi];\n}\n\nuseEmblaCarousel.globalOptions = undefined;\nexport { useEmblaCarousel as default };","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**! \n * hotkeys-js v3.9.4 \n * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies. \n * \n * Copyright (c) 2022 kenny wong <wowohoo@qq.com> \n * http://jaywcjlove.github.io/hotkeys \n * Licensed under the MIT license \n */\nvar isff = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase().indexOf('firefox') > 0 : false; // 绑定事件\n\nfunction addEvent(object, event, method, useCapture) {\n  if (object.addEventListener) {\n    object.addEventListener(event, method, useCapture);\n  } else if (object.attachEvent) {\n    object.attachEvent(\"on\".concat(event), function () {\n      method(window.event);\n    });\n  }\n} // 修饰键转换成对应的键码\n\n\nfunction getMods(modifier, key) {\n  var mods = key.slice(0, key.length - 1);\n\n  for (var i = 0; i < mods.length; i++) {\n    mods[i] = modifier[mods[i].toLowerCase()];\n  }\n\n  return mods;\n} // 处理传的key字符串转换成数组\n\n\nfunction getKeys(key) {\n  if (typeof key !== 'string') key = '';\n  key = key.replace(/\\s/g, ''); // 匹配任何空白字符,包括空格、制表符、换页符等等\n\n  var keys = key.split(','); // 同时设置多个快捷键,以','分割\n\n  var index = keys.lastIndexOf(''); // 快捷键可能包含',',需特殊处理\n\n  for (; index >= 0;) {\n    keys[index - 1] += ',';\n    keys.splice(index, 1);\n    index = keys.lastIndexOf('');\n  }\n\n  return keys;\n} // 比较修饰键的数组\n\n\nfunction compareArray(a1, a2) {\n  var arr1 = a1.length >= a2.length ? a1 : a2;\n  var arr2 = a1.length >= a2.length ? a2 : a1;\n  var isIndex = true;\n\n  for (var i = 0; i < arr1.length; i++) {\n    if (arr2.indexOf(arr1[i]) === -1) isIndex = false;\n  }\n\n  return isIndex;\n}\n\nvar _keyMap = {\n  backspace: 8,\n  tab: 9,\n  clear: 12,\n  enter: 13,\n  return: 13,\n  esc: 27,\n  escape: 27,\n  space: 32,\n  left: 37,\n  up: 38,\n  right: 39,\n  down: 40,\n  del: 46,\n  delete: 46,\n  ins: 45,\n  insert: 45,\n  home: 36,\n  end: 35,\n  pageup: 33,\n  pagedown: 34,\n  capslock: 20,\n  num_0: 96,\n  num_1: 97,\n  num_2: 98,\n  num_3: 99,\n  num_4: 100,\n  num_5: 101,\n  num_6: 102,\n  num_7: 103,\n  num_8: 104,\n  num_9: 105,\n  num_multiply: 106,\n  num_add: 107,\n  num_enter: 108,\n  num_subtract: 109,\n  num_decimal: 110,\n  num_divide: 111,\n  '⇪': 20,\n  ',': 188,\n  '.': 190,\n  '/': 191,\n  '`': 192,\n  '-': isff ? 173 : 189,\n  '=': isff ? 61 : 187,\n  ';': isff ? 59 : 186,\n  '\\'': 222,\n  '[': 219,\n  ']': 221,\n  '\\\\': 220\n}; // Modifier Keys\n\nvar _modifier = {\n  // shiftKey\n  '⇧': 16,\n  shift: 16,\n  // altKey\n  '⌥': 18,\n  alt: 18,\n  option: 18,\n  // ctrlKey\n  '⌃': 17,\n  ctrl: 17,\n  control: 17,\n  // metaKey\n  '⌘': 91,\n  cmd: 91,\n  command: 91\n};\nvar modifierMap = {\n  16: 'shiftKey',\n  18: 'altKey',\n  17: 'ctrlKey',\n  91: 'metaKey',\n  shiftKey: 16,\n  ctrlKey: 17,\n  altKey: 18,\n  metaKey: 91\n};\nvar _mods = {\n  16: false,\n  18: false,\n  17: false,\n  91: false\n};\nvar _handlers = {}; // F1~F12 special key\n\nfor (var k = 1; k < 20; k++) {\n  _keyMap[\"f\".concat(k)] = 111 + k;\n}\n\nvar _downKeys = []; // 记录摁下的绑定键\n\nvar winListendFocus = false; // window是否已经监听了focus事件\n\nvar _scope = 'all'; // 默认热键范围\n\nvar elementHasBindEvent = []; // 已绑定事件的节点记录\n// 返回键码\n\nvar code = function code(x) {\n  return _keyMap[x.toLowerCase()] || _modifier[x.toLowerCase()] || x.toUpperCase().charCodeAt(0);\n}; // 设置获取当前范围(默认为'所有')\n\n\nfunction setScope(scope) {\n  _scope = scope || 'all';\n} // 获取当前范围\n\n\nfunction getScope() {\n  return _scope || 'all';\n} // 获取摁下绑定键的键值\n\n\nfunction getPressedKeyCodes() {\n  return _downKeys.slice(0);\n} // 表单控件控件判断 返回 Boolean\n// hotkey is effective only when filter return true\n\n\nfunction filter(event) {\n  var target = event.target || event.srcElement;\n  var tagName = target.tagName;\n  var flag = true; // ignore: isContentEditable === 'true', <input> and <textarea> when readOnly state is false, <select>\n\n  if (target.isContentEditable || (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') && !target.readOnly) {\n    flag = false;\n  }\n\n  return flag;\n} // 判断摁下的键是否为某个键,返回true或者false\n\n\nfunction isPressed(keyCode) {\n  if (typeof keyCode === 'string') {\n    keyCode = code(keyCode); // 转换成键码\n  }\n\n  return _downKeys.indexOf(keyCode) !== -1;\n} // 循环删除handlers中的所有 scope(范围)\n\n\nfunction deleteScope(scope, newScope) {\n  var handlers;\n  var i; // 没有指定scope,获取scope\n\n  if (!scope) scope = getScope();\n\n  for (var key in _handlers) {\n    if (Object.prototype.hasOwnProperty.call(_handlers, key)) {\n      handlers = _handlers[key];\n\n      for (i = 0; i < handlers.length;) {\n        if (handlers[i].scope === scope) handlers.splice(i, 1);else i++;\n      }\n    }\n  } // 如果scope被删除,将scope重置为all\n\n\n  if (getScope() === scope) setScope(newScope || 'all');\n} // 清除修饰键\n\n\nfunction clearModifier(event) {\n  var key = event.keyCode || event.which || event.charCode;\n\n  var i = _downKeys.indexOf(key); // 从列表中清除按压过的键\n\n\n  if (i >= 0) {\n    _downKeys.splice(i, 1);\n  } // 特殊处理 cmmand 键,在 cmmand 组合快捷键 keyup 只执行一次的问题\n\n\n  if (event.key && event.key.toLowerCase() === 'meta') {\n    _downKeys.splice(0, _downKeys.length);\n  } // 修饰键 shiftKey altKey ctrlKey (command||metaKey) 清除\n\n\n  if (key === 93 || key === 224) key = 91;\n\n  if (key in _mods) {\n    _mods[key] = false; // 将修饰键重置为false\n\n    for (var k in _modifier) {\n      if (_modifier[k] === key) hotkeys[k] = false;\n    }\n  }\n}\n\nfunction unbind(keysInfo) {\n  // unbind(), unbind all keys\n  if (typeof keysInfo === 'undefined') {\n    Object.keys(_handlers).forEach(function (key) {\n      return delete _handlers[key];\n    });\n  } else if (Array.isArray(keysInfo)) {\n    // support like : unbind([{key: 'ctrl+a', scope: 's1'}, {key: 'ctrl-a', scope: 's2', splitKey: '-'}])\n    keysInfo.forEach(function (info) {\n      if (info.key) eachUnbind(info);\n    });\n  } else if (_typeof(keysInfo) === 'object') {\n    // support like unbind({key: 'ctrl+a, ctrl+b', scope:'abc'})\n    if (keysInfo.key) eachUnbind(keysInfo);\n  } else if (typeof keysInfo === 'string') {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    } // support old method\n    // eslint-disable-line\n\n\n    var scope = args[0],\n        method = args[1];\n\n    if (typeof scope === 'function') {\n      method = scope;\n      scope = '';\n    }\n\n    eachUnbind({\n      key: keysInfo,\n      scope: scope,\n      method: method,\n      splitKey: '+'\n    });\n  }\n} // 解除绑定某个范围的快捷键\n\n\nvar eachUnbind = function eachUnbind(_ref) {\n  var key = _ref.key,\n      scope = _ref.scope,\n      method = _ref.method,\n      _ref$splitKey = _ref.splitKey,\n      splitKey = _ref$splitKey === void 0 ? '+' : _ref$splitKey;\n  var multipleKeys = getKeys(key);\n  multipleKeys.forEach(function (originKey) {\n    var unbindKeys = originKey.split(splitKey);\n    var len = unbindKeys.length;\n    var lastKey = unbindKeys[len - 1];\n    var keyCode = lastKey === '*' ? '*' : code(lastKey);\n    if (!_handlers[keyCode]) return; // 判断是否传入范围,没有就获取范围\n\n    if (!scope) scope = getScope();\n    var mods = len > 1 ? getMods(_modifier, unbindKeys) : [];\n    _handlers[keyCode] = _handlers[keyCode].filter(function (record) {\n      // 通过函数判断,是否解除绑定,函数相等直接返回\n      var isMatchingMethod = method ? record.method === method : true;\n      return !(isMatchingMethod && record.scope === scope && compareArray(record.mods, mods));\n    });\n  });\n}; // 对监听对应快捷键的回调函数进行处理\n\n\nfunction eventHandler(event, handler, scope, element) {\n  if (handler.element !== element) {\n    return;\n  }\n\n  var modifiersMatch; // 看它是否在当前范围\n\n  if (handler.scope === scope || handler.scope === 'all') {\n    // 检查是否匹配修饰符(如果有返回true)\n    modifiersMatch = handler.mods.length > 0;\n\n    for (var y in _mods) {\n      if (Object.prototype.hasOwnProperty.call(_mods, y)) {\n        if (!_mods[y] && handler.mods.indexOf(+y) > -1 || _mods[y] && handler.mods.indexOf(+y) === -1) {\n          modifiersMatch = false;\n        }\n      }\n    } // 调用处理程序,如果是修饰键不做处理\n\n\n    if (handler.mods.length === 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91] || modifiersMatch || handler.shortcut === '*') {\n      if (handler.method(event, handler) === false) {\n        if (event.preventDefault) event.preventDefault();else event.returnValue = false;\n        if (event.stopPropagation) event.stopPropagation();\n        if (event.cancelBubble) event.cancelBubble = true;\n      }\n    }\n  }\n} // 处理keydown事件\n\n\nfunction dispatch(event, element) {\n  var asterisk = _handlers['*'];\n  var key = event.keyCode || event.which || event.charCode; // 表单控件过滤 默认表单控件不触发快捷键\n\n  if (!hotkeys.filter.call(this, event)) return; // Gecko(Firefox)的command键值224,在Webkit(Chrome)中保持一致\n  // Webkit左右 command 键值不一样\n\n  if (key === 93 || key === 224) key = 91;\n  /**\n   * Collect bound keys\n   * If an Input Method Editor is processing key input and the event is keydown, return 229.\n   * https://stackoverflow.com/questions/25043934/is-it-ok-to-ignore-keydown-events-with-keycode-229\n   * http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html\n   */\n\n  if (_downKeys.indexOf(key) === -1 && key !== 229) _downKeys.push(key);\n  /**\n   * Jest test cases are required.\n   * ===============================\n   */\n\n  ['ctrlKey', 'altKey', 'shiftKey', 'metaKey'].forEach(function (keyName) {\n    var keyNum = modifierMap[keyName];\n\n    if (event[keyName] && _downKeys.indexOf(keyNum) === -1) {\n      _downKeys.push(keyNum);\n    } else if (!event[keyName] && _downKeys.indexOf(keyNum) > -1) {\n      _downKeys.splice(_downKeys.indexOf(keyNum), 1);\n    } else if (keyName === 'metaKey' && event[keyName] && _downKeys.length === 3) {\n      /**\n       * Fix if Command is pressed:\n       * ===============================\n       */\n      if (!(event.ctrlKey || event.shiftKey || event.altKey)) {\n        _downKeys = _downKeys.slice(_downKeys.indexOf(keyNum));\n      }\n    }\n  });\n  /**\n   * -------------------------------\n   */\n\n  if (key in _mods) {\n    _mods[key] = true; // 将特殊字符的key注册到 hotkeys 上\n\n    for (var k in _modifier) {\n      if (_modifier[k] === key) hotkeys[k] = true;\n    }\n\n    if (!asterisk) return;\n  } // 将 modifierMap 里面的修饰键绑定到 event 中\n\n\n  for (var e in _mods) {\n    if (Object.prototype.hasOwnProperty.call(_mods, e)) {\n      _mods[e] = event[modifierMap[e]];\n    }\n  }\n  /**\n   * https://github.com/jaywcjlove/hotkeys/pull/129\n   * This solves the issue in Firefox on Windows where hotkeys corresponding to special characters would not trigger.\n   * An example of this is ctrl+alt+m on a Swedish keyboard which is used to type μ.\n   * Browser support: https://caniuse.com/#feat=keyboardevent-getmodifierstate\n   */\n\n\n  if (event.getModifierState && !(event.altKey && !event.ctrlKey) && event.getModifierState('AltGraph')) {\n    if (_downKeys.indexOf(17) === -1) {\n      _downKeys.push(17);\n    }\n\n    if (_downKeys.indexOf(18) === -1) {\n      _downKeys.push(18);\n    }\n\n    _mods[17] = true;\n    _mods[18] = true;\n  } // 获取范围 默认为 `all`\n\n\n  var scope = getScope(); // 对任何快捷键都需要做的处理\n\n  if (asterisk) {\n    for (var i = 0; i < asterisk.length; i++) {\n      if (asterisk[i].scope === scope && (event.type === 'keydown' && asterisk[i].keydown || event.type === 'keyup' && asterisk[i].keyup)) {\n        eventHandler(event, asterisk[i], scope, element);\n      }\n    }\n  } // key 不在 _handlers 中返回\n\n\n  if (!(key in _handlers)) return;\n\n  for (var _i = 0; _i < _handlers[key].length; _i++) {\n    if (event.type === 'keydown' && _handlers[key][_i].keydown || event.type === 'keyup' && _handlers[key][_i].keyup) {\n      if (_handlers[key][_i].key) {\n        var record = _handlers[key][_i];\n        var splitKey = record.splitKey;\n        var keyShortcut = record.key.split(splitKey);\n        var _downKeysCurrent = []; // 记录当前按键键值\n\n        for (var a = 0; a < keyShortcut.length; a++) {\n          _downKeysCurrent.push(code(keyShortcut[a]));\n        }\n\n        if (_downKeysCurrent.sort().join('') === _downKeys.sort().join('')) {\n          // 找到处理内容\n          eventHandler(event, record, scope, element);\n        }\n      }\n    }\n  }\n} // 判断 element 是否已经绑定事件\n\n\nfunction isElementBind(element) {\n  return elementHasBindEvent.indexOf(element) > -1;\n}\n\nfunction hotkeys(key, option, method) {\n  _downKeys = [];\n  var keys = getKeys(key); // 需要处理的快捷键列表\n\n  var mods = [];\n  var scope = 'all'; // scope默认为all,所有范围都有效\n\n  var element = document; // 快捷键事件绑定节点\n\n  var i = 0;\n  var keyup = false;\n  var keydown = true;\n  var splitKey = '+';\n  var capture = false; // 对为设定范围的判断\n\n  if (method === undefined && typeof option === 'function') {\n    method = option;\n  }\n\n  if (Object.prototype.toString.call(option) === '[object Object]') {\n    if (option.scope) scope = option.scope; // eslint-disable-line\n\n    if (option.element) element = option.element; // eslint-disable-line\n\n    if (option.keyup) keyup = option.keyup; // eslint-disable-line\n\n    if (option.keydown !== undefined) keydown = option.keydown; // eslint-disable-line\n\n    if (option.capture !== undefined) capture = option.capture; // eslint-disable-line\n\n    if (typeof option.splitKey === 'string') splitKey = option.splitKey; // eslint-disable-line\n  }\n\n  if (typeof option === 'string') scope = option; // 对于每个快捷键进行处理\n\n  for (; i < keys.length; i++) {\n    key = keys[i].split(splitKey); // 按键列表\n\n    mods = []; // 如果是组合快捷键取得组合快捷键\n\n    if (key.length > 1) mods = getMods(_modifier, key); // 将非修饰键转化为键码\n\n    key = key[key.length - 1];\n    key = key === '*' ? '*' : code(key); // *表示匹配所有快捷键\n    // 判断key是否在_handlers中,不在就赋一个空数组\n\n    if (!(key in _handlers)) _handlers[key] = [];\n\n    _handlers[key].push({\n      keyup: keyup,\n      keydown: keydown,\n      scope: scope,\n      mods: mods,\n      shortcut: keys[i],\n      method: method,\n      key: keys[i],\n      splitKey: splitKey,\n      element: element\n    });\n  } // 在全局document上设置快捷键\n\n\n  if (typeof element !== 'undefined' && !isElementBind(element) && window) {\n    elementHasBindEvent.push(element);\n    addEvent(element, 'keydown', function (e) {\n      dispatch(e, element);\n    }, capture);\n\n    if (!winListendFocus) {\n      winListendFocus = true;\n      addEvent(window, 'focus', function () {\n        _downKeys = [];\n      }, capture);\n    }\n\n    addEvent(element, 'keyup', function (e) {\n      dispatch(e, element);\n      clearModifier(e);\n    }, capture);\n  }\n}\n\nfunction trigger(shortcut) {\n  var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all';\n  Object.keys(_handlers).forEach(function (key) {\n    var data = _handlers[key].find(function (item) {\n      return item.scope === scope && item.shortcut === shortcut;\n    });\n\n    if (data && data.method) {\n      data.method();\n    }\n  });\n}\n\nvar _api = {\n  setScope: setScope,\n  getScope: getScope,\n  deleteScope: deleteScope,\n  getPressedKeyCodes: getPressedKeyCodes,\n  isPressed: isPressed,\n  filter: filter,\n  trigger: trigger,\n  unbind: unbind,\n  keyMap: _keyMap,\n  modifier: _modifier,\n  modifierMap: modifierMap\n};\n\nfor (var a in _api) {\n  if (Object.prototype.hasOwnProperty.call(_api, a)) {\n    hotkeys[a] = _api[a];\n  }\n}\n\nif (typeof window !== 'undefined') {\n  var _hotkeys = window.hotkeys;\n\n  hotkeys.noConflict = function (deep) {\n    if (deep && window.hotkeys === hotkeys) {\n      window.hotkeys = _hotkeys;\n    }\n\n    return hotkeys;\n  };\n\n  window.hotkeys = hotkeys;\n}\n\nexport { hotkeys as default };","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function invariant(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n\n    if (format === undefined) {\n      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(format.replace(/%s/g, function () {\n        return args[argIndex++];\n      }));\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n\n    throw error;\n  }\n};\n\nmodule.exports = invariant;"],"sourceRoot":""}