{"version":3,"sources":["../node_modules/@glidejs/glide/dist/glide.esm.js","templates/sections/carousels.coffee"],"names":["defaults","type","startAt","perView","focusAt","gap","autoplay","hoverpause","keyboard","bound","swipeThreshold","dragThreshold","perTouch","touchRatio","touchAngle","animationDuration","rewind","rewindDuration","animationTimingFunc","throttle","direction","peek","breakpoints","classes","ltr","rtl","slider","carousel","swipeable","dragging","cloneSlide","activeNav","activeSlide","disabledArrow","warn","msg","console","error","_typeof","Symbol","iterator","obj","constructor","prototype","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","_extends","assign","arguments","source","hasOwnProperty","call","get","object","property","receiver","Function","desc","getOwnPropertyDescriptor","undefined","parent","getPrototypeOf","value","getter","inherits","subClass","superClass","create","setPrototypeOf","__proto__","possibleConstructorReturn","self","ReferenceError","toInt","parseInt","toFloat","parseFloat","isString","isObject","isNumber","isFunction","isUndefined","isArray","Array","mount","glide","extensions","events","components","name","_name","define","prop","definition","sortKeys","keys","sort","reduce","r","k","mergeOptions","settings","options","EventsBus","hop","event","handler","on","index","push","remove","context","emit","forEach","item","Glide","selector","_c","_t","_e","disabled","transformers","pattern","Run","make","distance","Transition","disable","Move","interval","_o","set","o","_i","_d","status","Components","Events","move","_this","calculate","after","isOffset","enable","steps","countableSteps","isEnd","isType","Math","min","isStart","_m","substr","Html","slides","now","Date","getTime","func","wait","timeout","args","result","previous","later","leading","apply","throttled","at","remaining","clearTimeout","trailing","setTimeout","cancel","MARGIN_TYPE","Gaps","len","style","Direction","marginLeft","marginRight","Sizes","wrapper","children","siblings","node","parentNode","n","firstChild","matched","nextSibling","nodeType","exist","window","HTMLElement","TRACK_SELECTOR","root","track","querySelector","slice","filter","slide","classList","contains","_r","document","t","Peek","_v","before","offset","movement","slideWidth","translate","is","setupSlides","width","setupWrapper","dimention","wrapperSize","offsetWidth","grow","Clones","reductor","Build","typeClass","activeClass","add","sibling","removeClasses","items","collect","_Glide$settings","part","start","end","max","floor","clone","cloneNode","_clone","unshift","append","_Components$Html","half","prepend","reverse","appendChild","_i2","insertBefore","_i3","removeChild","EventsBinder","listeners","el","closure","capture","addEventListener","removeEventListener","Resize","Binder","bind","unbind","off","destroy","VALID_DIRECTIONS","FLIPED_MOVEMENTS","resolve","token","split","join","addClass","removeClass","indexOf","Rtl","modify","Gap","Grow","Peeking","Focusing","mutator","TRANSFORMERS","concat","mutate","transformer","Translate","transform","compose","duration","transition","callback","supportsPassive","opts","e","supportsPassive$1","START_EVENTS","MOVE_EVENTS","END_EVENTS","MOUSE_EVENTS","Swipe","swipeSin","swipeStartX","swipeStartY","moveable","passive","bindSwipeStart","swipe","touches","pageX","pageY","bindSwipeMove","bindSwipeEnd","subExSx","subEySy","powEX","abs","powEY","swipeHypotenuse","sqrt","swipeCathetus","asin","PI","stopPropagation","threshold","swipeDistance","swipeDeg","round","unbindSwipeMove","unbindSwipeEnd","unbindSwipeStart","_this2","_this3","changedTouches","Images","dragstart","preventDefault","Anchors","detached","prevented","_a","querySelectorAll","click","detach","draggable","setAttribute","getAttribute","removeAttribute","attach","NAV_SELECTOR","CONTROLS_SELECTOR","Controls","_n","addBindings","setActive","removeActive","controls","removeBindings","elements","currentTarget","Keyboard","press","keyCode","Autoplay","setInterval","stop","time","clearInterval","sortBreakpoints","points","Breakpoints","match","matchMedia","point","matches","COMPONENTS","Glide$1","_Core","Glide$$1","_default","exports","default"],"mappings":"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","file":"carousels.3f4b927c.map","sourceRoot":"../src","sourcesContent":["/*!\n * Glide.js v3.2.4\n * (c) 2013-2018 Jędrzej Chałubek <jedrzej.chalubek@gmail.com> (http://jedrzejchalubek.com/)\n * Released under the MIT License.\n */\n\nvar defaults = {\n  /**\n   * Type of the movement.\n   *\n   * Available types:\n   * `slider` - Rewinds slider to the start/end when it reaches the first or last slide.\n   * `carousel` - Changes slides without starting over when it reaches the first or last slide.\n   *\n   * @type {String}\n   */\n  type: 'slider',\n\n  /**\n   * Start at specific slide number defined with zero-based index.\n   *\n   * @type {Number}\n   */\n  startAt: 0,\n\n  /**\n   * A number of slides visible on the single viewport.\n   *\n   * @type {Number}\n   */\n  perView: 1,\n\n  /**\n   * Focus currently active slide at a specified position in the track.\n   *\n   * Available inputs:\n   * `center` - Current slide will be always focused at the center of a track.\n   * `0,1,2,3...` - Current slide will be focused on the specified zero-based index.\n   *\n   * @type {String|Number}\n   */\n  focusAt: 0,\n\n  /**\n   * A size of the gap added between slides.\n   *\n   * @type {Number}\n   */\n  gap: 10,\n\n  /**\n   * Change slides after a specified interval. Use `false` for turning off autoplay.\n   *\n   * @type {Number|Boolean}\n   */\n  autoplay: false,\n\n  /**\n   * Stop autoplay on mouseover event.\n   *\n   * @type {Boolean}\n   */\n  hoverpause: true,\n\n  /**\n   * Allow for changing slides with left and right keyboard arrows.\n   *\n   * @type {Boolean}\n   */\n  keyboard: true,\n\n  /**\n   * Stop running `perView` number of slides from the end. Use this\n   * option if you don't want to have an empty space after\n   * a slider. Works only with `slider` type and a\n   * non-centered `focusAt` setting.\n   *\n   * @type {Boolean}\n   */\n  bound: false,\n\n  /**\n   * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping.\n   *\n   * @type {Number|Boolean}\n   */\n  swipeThreshold: 80,\n\n  /**\n   * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging.\n   *\n   * @type {Number|Boolean}\n   */\n  dragThreshold: 120,\n\n  /**\n   * A maximum number of slides to which movement will be made on swiping or dragging. Use `false` for unlimited.\n   *\n   * @type {Number|Boolean}\n   */\n  perTouch: false,\n\n  /**\n   * Moving distance ratio of the slides on a swiping and dragging.\n   *\n   * @type {Number}\n   */\n  touchRatio: 0.5,\n\n  /**\n   * Angle required to activate slides moving on swiping or dragging.\n   *\n   * @type {Number}\n   */\n  touchAngle: 45,\n\n  /**\n   * Duration of the animation in milliseconds.\n   *\n   * @type {Number}\n   */\n  animationDuration: 400,\n\n  /**\n   * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end.\n   *\n   * @type {Boolean}\n   */\n  rewind: true,\n\n  /**\n   * Duration of the rewinding animation of the `slider` type in milliseconds.\n   *\n   * @type {Number}\n   */\n  rewindDuration: 800,\n\n  /**\n   * Easing function for the animation.\n   *\n   * @type {String}\n   */\n  animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)',\n\n  /**\n   * Throttle costly events at most once per every wait milliseconds.\n   *\n   * @type {Number}\n   */\n  throttle: 10,\n\n  /**\n   * Moving direction mode.\n   *\n   * Available inputs:\n   * - 'ltr' - left to right movement,\n   * - 'rtl' - right to left movement.\n   *\n   * @type {String}\n   */\n  direction: 'ltr',\n\n  /**\n   * The distance value of the next and previous viewports which\n   * have to peek in the current view. Accepts number and\n   * pixels as a string. Left and right peeking can be\n   * set up separately with a directions object.\n   *\n   * For example:\n   * `100` - Peek 100px on the both sides.\n   * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side.\n   *\n   * @type {Number|String|Object}\n   */\n  peek: 0,\n\n  /**\n   * Collection of options applied at specified media breakpoints.\n   * For example: display two slides per view under 800px.\n   * `{\n   *   '800px': {\n   *     perView: 2\n   *   }\n   * }`\n   */\n  breakpoints: {},\n\n  /**\n   * Collection of internally used HTML classes.\n   *\n   * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object\n   * @type {Object}\n   */\n  classes: {\n    direction: {\n      ltr: 'glide--ltr',\n      rtl: 'glide--rtl'\n    },\n    slider: 'glide--slider',\n    carousel: 'glide--carousel',\n    swipeable: 'glide--swipeable',\n    dragging: 'glide--dragging',\n    cloneSlide: 'glide__slide--clone',\n    activeNav: 'glide__bullet--active',\n    activeSlide: 'glide__slide--active',\n    disabledArrow: 'glide__arrow--disabled'\n  }\n};\n\n/**\n * Outputs warning message to the bowser console.\n *\n * @param  {String} msg\n * @return {Void}\n */\nfunction warn(msg) {\n  console.error(\"[Glide warn]: \" + msg);\n}\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar get = function get(object, property, receiver) {\n  if (object === null) object = Function.prototype;\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent === null) {\n      return undefined;\n    } else {\n      return get(parent, property, receiver);\n    }\n  } else if (\"value\" in desc) {\n    return desc.value;\n  } else {\n    var getter = desc.get;\n\n    if (getter === undefined) {\n      return undefined;\n    }\n\n    return getter.call(receiver);\n  }\n};\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n/**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toInt(value) {\n  return parseInt(value);\n}\n\n/**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toFloat(value) {\n  return parseFloat(value);\n}\n\n/**\n * Indicates whether the specified value is a string.\n *\n * @param  {*}   value\n * @return {Boolean}\n */\nfunction isString(value) {\n  return typeof value === 'string';\n}\n\n/**\n * Indicates whether the specified value is an object.\n *\n * @param  {*} value\n * @return {Boolean}\n *\n * @see https://github.com/jashkenas/underscore\n */\nfunction isObject(value) {\n  var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\n  return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n}\n\n/**\n * Indicates whether the specified value is a number.\n *\n * @param  {*} value\n * @return {Boolean}\n */\nfunction isNumber(value) {\n  return typeof value === 'number';\n}\n\n/**\n * Indicates whether the specified value is a function.\n *\n * @param  {*} value\n * @return {Boolean}\n */\nfunction isFunction(value) {\n  return typeof value === 'function';\n}\n\n/**\n * Indicates whether the specified value is undefined.\n *\n * @param  {*} value\n * @return {Boolean}\n */\nfunction isUndefined(value) {\n  return typeof value === 'undefined';\n}\n\n/**\n * Indicates whether the specified value is an array.\n *\n * @param  {*} value\n * @return {Boolean}\n */\nfunction isArray(value) {\n  return value.constructor === Array;\n}\n\n/**\n * Creates and initializes specified collection of extensions.\n * Each extension receives access to instance of glide and rest of components.\n *\n * @param {Object} glide\n * @param {Object} extensions\n *\n * @returns {Object}\n */\nfunction mount(glide, extensions, events) {\n  var components = {};\n\n  for (var name in extensions) {\n    if (isFunction(extensions[name])) {\n      components[name] = extensions[name](glide, components, events);\n    } else {\n      warn('Extension must be a function');\n    }\n  }\n\n  for (var _name in components) {\n    if (isFunction(components[_name].mount)) {\n      components[_name].mount();\n    }\n  }\n\n  return components;\n}\n\n/**\n * Defines getter and setter property on the specified object.\n *\n * @param  {Object} obj         Object where property has to be defined.\n * @param  {String} prop        Name of the defined property.\n * @param  {Object} definition  Get and set definitions for the property.\n * @return {Void}\n */\nfunction define(obj, prop, definition) {\n  Object.defineProperty(obj, prop, definition);\n}\n\n/**\n * Sorts aphabetically object keys.\n *\n * @param  {Object} obj\n * @return {Object}\n */\nfunction sortKeys(obj) {\n  return Object.keys(obj).sort().reduce(function (r, k) {\n    r[k] = obj[k];\n\n    return r[k], r;\n  }, {});\n}\n\n/**\n * Merges passed settings object with default options.\n *\n * @param  {Object} defaults\n * @param  {Object} settings\n * @return {Object}\n */\nfunction mergeOptions(defaults, settings) {\n  var options = _extends({}, defaults, settings);\n\n  // `Object.assign` do not deeply merge objects, so we\n  // have to do it manually for every nested object\n  // in options. Although it does not look smart,\n  // it's smaller and faster than some fancy\n  // merging deep-merge algorithm script.\n  if (settings.hasOwnProperty('classes')) {\n    options.classes = _extends({}, defaults.classes, settings.classes);\n\n    if (settings.classes.hasOwnProperty('direction')) {\n      options.classes.direction = _extends({}, defaults.classes.direction, settings.classes.direction);\n    }\n  }\n\n  if (settings.hasOwnProperty('breakpoints')) {\n    options.breakpoints = _extends({}, defaults.breakpoints, settings.breakpoints);\n  }\n\n  return options;\n}\n\nvar EventsBus = function () {\n  /**\n   * Construct a EventBus instance.\n   *\n   * @param {Object} events\n   */\n  function EventsBus() {\n    var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    classCallCheck(this, EventsBus);\n\n    this.events = events;\n    this.hop = events.hasOwnProperty;\n  }\n\n  /**\n   * Adds listener to the specifed event.\n   *\n   * @param {String|Array} event\n   * @param {Function} handler\n   */\n\n\n  createClass(EventsBus, [{\n    key: 'on',\n    value: function on(event, handler) {\n      if (isArray(event)) {\n        for (var i = 0; i < event.length; i++) {\n          this.on(event[i], handler);\n        }\n      }\n\n      // Create the event's object if not yet created\n      if (!this.hop.call(this.events, event)) {\n        this.events[event] = [];\n      }\n\n      // Add the handler to queue\n      var index = this.events[event].push(handler) - 1;\n\n      // Provide handle back for removal of event\n      return {\n        remove: function remove() {\n          delete this.events[event][index];\n        }\n      };\n    }\n\n    /**\n     * Runs registered handlers for specified event.\n     *\n     * @param {String|Array} event\n     * @param {Object=} context\n     */\n\n  }, {\n    key: 'emit',\n    value: function emit(event, context) {\n      if (isArray(event)) {\n        for (var i = 0; i < event.length; i++) {\n          this.emit(event[i], context);\n        }\n      }\n\n      // If the event doesn't exist, or there's no handlers in queue, just leave\n      if (!this.hop.call(this.events, event)) {\n        return;\n      }\n\n      // Cycle through events queue, fire!\n      this.events[event].forEach(function (item) {\n        item(context || {});\n      });\n    }\n  }]);\n  return EventsBus;\n}();\n\nvar Glide = function () {\n  /**\r\n   * Construct glide.\r\n   *\r\n   * @param  {String} selector\r\n   * @param  {Object} options\r\n   */\n  function Glide(selector) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    classCallCheck(this, Glide);\n\n    this._c = {};\n    this._t = [];\n    this._e = new EventsBus();\n\n    this.disabled = false;\n    this.selector = selector;\n    this.settings = mergeOptions(defaults, options);\n    this.index = this.settings.startAt;\n  }\n\n  /**\r\n   * Initializes glide.\r\n   *\r\n   * @param {Object} extensions Collection of extensions to initialize.\r\n   * @return {Glide}\r\n   */\n\n\n  createClass(Glide, [{\n    key: 'mount',\n    value: function mount$$1() {\n      var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      this._e.emit('mount.before');\n\n      if (isObject(extensions)) {\n        this._c = mount(this, extensions, this._e);\n      } else {\n        warn('You need to provide a object on `mount()`');\n      }\n\n      this._e.emit('mount.after');\n\n      return this;\n    }\n\n    /**\r\n     * Collects an instance `translate` transformers.\r\n     *\r\n     * @param  {Array} transformers Collection of transformers.\r\n     * @return {Void}\r\n     */\n\n  }, {\n    key: 'mutate',\n    value: function mutate() {\n      var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n      if (isArray(transformers)) {\n        this._t = transformers;\n      } else {\n        warn('You need to provide a array on `mutate()`');\n      }\n\n      return this;\n    }\n\n    /**\r\n     * Updates glide with specified settings.\r\n     *\r\n     * @param {Object} settings\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'update',\n    value: function update() {\n      var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      this.settings = mergeOptions(this.settings, settings);\n\n      if (settings.hasOwnProperty('startAt')) {\n        this.index = settings.startAt;\n      }\n\n      this._e.emit('update');\n\n      return this;\n    }\n\n    /**\r\n     * Change slide with specified pattern. A pattern must be in the special format:\r\n     * `>` - Move one forward\r\n     * `<` - Move one backward\r\n     * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide)\r\n     * `>>` - Rewinds to end (last slide)\r\n     * `<<` - Rewinds to start (first slide)\r\n     *\r\n     * @param {String} pattern\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'go',\n    value: function go(pattern) {\n      this._c.Run.make(pattern);\n\n      return this;\n    }\n\n    /**\r\n     * Move track by specified distance.\r\n     *\r\n     * @param {String} distance\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'move',\n    value: function move(distance) {\n      this._c.Transition.disable();\n      this._c.Move.make(distance);\n\n      return this;\n    }\n\n    /**\r\n     * Destroy instance and revert all changes done by this._c.\r\n     *\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this._e.emit('destroy');\n\n      return this;\n    }\n\n    /**\r\n     * Start instance autoplaying.\r\n     *\r\n     * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'play',\n    value: function play() {\n      var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (interval) {\n        this.settings.autoplay = interval;\n      }\n\n      this._e.emit('play');\n\n      return this;\n    }\n\n    /**\r\n     * Stop instance autoplaying.\r\n     *\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'pause',\n    value: function pause() {\n      this._e.emit('pause');\n\n      return this;\n    }\n\n    /**\r\n     * Sets glide into a idle status.\r\n     *\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'disable',\n    value: function disable() {\n      this.disabled = true;\n\n      return this;\n    }\n\n    /**\r\n     * Sets glide into a active status.\r\n     *\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'enable',\n    value: function enable() {\n      this.disabled = false;\n\n      return this;\n    }\n\n    /**\r\n     * Adds cuutom event listener with handler.\r\n     *\r\n     * @param  {String|Array} event\r\n     * @param  {Function} handler\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'on',\n    value: function on(event, handler) {\n      this._e.on(event, handler);\n\n      return this;\n    }\n\n    /**\r\n     * Checks if glide is a precised type.\r\n     *\r\n     * @param  {String} name\r\n     * @return {Boolean}\r\n     */\n\n  }, {\n    key: 'isType',\n    value: function isType(name) {\n      return this.settings.type === name;\n    }\n\n    /**\r\n     * Gets value of the core options.\r\n     *\r\n     * @return {Object}\r\n     */\n\n  }, {\n    key: 'settings',\n    get: function get$$1() {\n      return this._o;\n    }\n\n    /**\r\n     * Sets value of the core options.\r\n     *\r\n     * @param  {Object} o\r\n     * @return {Void}\r\n     */\n    ,\n    set: function set$$1(o) {\n      if (isObject(o)) {\n        this._o = o;\n      } else {\n        warn('Options must be an `object` instance.');\n      }\n    }\n\n    /**\r\n     * Gets current index of the slider.\r\n     *\r\n     * @return {Object}\r\n     */\n\n  }, {\n    key: 'index',\n    get: function get$$1() {\n      return this._i;\n    }\n\n    /**\r\n     * Sets current index a slider.\r\n     *\r\n     * @return {Object}\r\n     */\n    ,\n    set: function set$$1(i) {\n      this._i = toInt(i);\n    }\n\n    /**\r\n     * Gets type name of the slider.\r\n     *\r\n     * @return {String}\r\n     */\n\n  }, {\n    key: 'type',\n    get: function get$$1() {\n      return this.settings.type;\n    }\n\n    /**\r\n     * Gets value of the idle status.\r\n     *\r\n     * @return {Boolean}\r\n     */\n\n  }, {\n    key: 'disabled',\n    get: function get$$1() {\n      return this._d;\n    }\n\n    /**\r\n     * Sets value of the idle status.\r\n     *\r\n     * @return {Boolean}\r\n     */\n    ,\n    set: function set$$1(status) {\n      this._d = !!status;\n    }\n  }]);\n  return Glide;\n}();\n\nfunction Run (Glide, Components, Events) {\n  var Run = {\n    /**\n     * Initializes autorunning of the glide.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this._o = false;\n    },\n\n\n    /**\n     * Makes glides running based on the passed moving schema.\n     *\n     * @param {String} move\n     */\n    make: function make(move) {\n      var _this = this;\n\n      if (!Glide.disabled) {\n        Glide.disable();\n\n        this.move = move;\n\n        Events.emit('run.before', this.move);\n\n        this.calculate();\n\n        Events.emit('run', this.move);\n\n        Components.Transition.after(function () {\n          if (_this.isOffset('<') || _this.isOffset('>')) {\n            _this._o = false;\n\n            Events.emit('run.offset', _this.move);\n          }\n\n          Events.emit('run.after', _this.move);\n\n          Glide.enable();\n        });\n      }\n    },\n\n\n    /**\n     * Calculates current index based on defined move.\n     *\n     * @return {Void}\n     */\n    calculate: function calculate() {\n      var move = this.move,\n          length = this.length;\n      var steps = move.steps,\n          direction = move.direction;\n\n\n      var countableSteps = isNumber(toInt(steps)) && toInt(steps) !== 0;\n\n      switch (direction) {\n        case '>':\n          if (steps === '>') {\n            Glide.index = length;\n          } else if (this.isEnd()) {\n            if (!(Glide.isType('slider') && !Glide.settings.rewind)) {\n              this._o = true;\n\n              Glide.index = 0;\n            }\n\n            Events.emit('run.end', move);\n          } else if (countableSteps) {\n            Glide.index += Math.min(length - Glide.index, -toInt(steps));\n          } else {\n            Glide.index++;\n          }\n          break;\n\n        case '<':\n          if (steps === '<') {\n            Glide.index = 0;\n          } else if (this.isStart()) {\n            if (!(Glide.isType('slider') && !Glide.settings.rewind)) {\n              this._o = true;\n\n              Glide.index = length;\n            }\n\n            Events.emit('run.start', move);\n          } else if (countableSteps) {\n            Glide.index -= Math.min(Glide.index, toInt(steps));\n          } else {\n            Glide.index--;\n          }\n          break;\n\n        case '=':\n          Glide.index = steps;\n          break;\n      }\n    },\n\n\n    /**\n     * Checks if we are on the first slide.\n     *\n     * @return {Boolean}\n     */\n    isStart: function isStart() {\n      return Glide.index === 0;\n    },\n\n\n    /**\n     * Checks if we are on the last slide.\n     *\n     * @return {Boolean}\n     */\n    isEnd: function isEnd() {\n      return Glide.index === this.length;\n    },\n\n\n    /**\n     * Checks if we are making a offset run.\n     *\n     * @param {String} direction\n     * @return {Boolean}\n     */\n    isOffset: function isOffset(direction) {\n      return this._o && this.move.direction === direction;\n    }\n  };\n\n  define(Run, 'move', {\n    /**\n     * Gets value of the move schema.\n     *\n     * @returns {Object}\n     */\n    get: function get() {\n      return this._m;\n    },\n\n\n    /**\n     * Sets value of the move schema.\n     *\n     * @returns {Object}\n     */\n    set: function set(value) {\n      this._m = {\n        direction: value.substr(0, 1),\n        steps: value.substr(1) ? value.substr(1) : 0\n      };\n    }\n  });\n\n  define(Run, 'length', {\n    /**\n     * Gets value of the running distance based\n     * on zero-indexing number of slides.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      var settings = Glide.settings;\n      var length = Components.Html.slides.length;\n\n      // If the `bound` option is acitve, a maximum running distance should be\n      // reduced by `perView` and `focusAt` settings. Running distance\n      // should end before creating an empty space after instance.\n\n      if (Glide.isType('slider') && settings.focusAt !== 'center' && settings.bound) {\n        return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n      }\n\n      return length - 1;\n    }\n  });\n\n  define(Run, 'offset', {\n    /**\n     * Gets status of the offsetting flag.\n     *\n     * @return {Boolean}\n     */\n    get: function get() {\n      return this._o;\n    }\n  });\n\n  return Run;\n}\n\n/**\n * Returns a current time.\n *\n * @return {Number}\n */\nfunction now() {\n  return new Date().getTime();\n}\n\n/**\n * Returns a function, that, when invoked, will only be triggered\n * at most once during a given window of time.\n *\n * @param {Function} func\n * @param {Number} wait\n * @param {Object=} options\n * @return {Function}\n *\n * @see https://github.com/jashkenas/underscore\n */\nfunction throttle(func, wait, options) {\n  var timeout = void 0,\n      context = void 0,\n      args = void 0,\n      result = void 0;\n  var previous = 0;\n  if (!options) options = {};\n\n  var later = function later() {\n    previous = options.leading === false ? 0 : now();\n    timeout = null;\n    result = func.apply(context, args);\n    if (!timeout) context = args = null;\n  };\n\n  var throttled = function throttled() {\n    var at = now();\n    if (!previous && options.leading === false) previous = at;\n    var remaining = wait - (at - previous);\n    context = this;\n    args = arguments;\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n      previous = at;\n      result = func.apply(context, args);\n      if (!timeout) context = args = null;\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout(later, remaining);\n    }\n    return result;\n  };\n\n  throttled.cancel = function () {\n    clearTimeout(timeout);\n    previous = 0;\n    timeout = context = args = null;\n  };\n\n  return throttled;\n}\n\nvar MARGIN_TYPE = {\n  ltr: ['marginLeft', 'marginRight'],\n  rtl: ['marginRight', 'marginLeft']\n};\n\nfunction Gaps (Glide, Components, Events) {\n  var Gaps = {\n    /**\n     * Applies gaps between slides. First and last\n     * slides do not receive it's edge margins.\n     *\n     * @param {HTMLCollection} slides\n     * @return {Void}\n     */\n    apply: function apply(slides) {\n      for (var i = 0, len = slides.length; i < len; i++) {\n        var style = slides[i].style;\n        var direction = Components.Direction.value;\n\n        if (i !== 0) {\n          style[MARGIN_TYPE[direction][0]] = this.value / 2 + 'px';\n        } else {\n          style[MARGIN_TYPE[direction][0]] = '';\n        }\n\n        if (i !== slides.length - 1) {\n          style[MARGIN_TYPE[direction][1]] = this.value / 2 + 'px';\n        } else {\n          style[MARGIN_TYPE[direction][1]] = '';\n        }\n      }\n    },\n\n\n    /**\n     * Removes gaps from the slides.\n     *\n     * @param {HTMLCollection} slides\n     * @returns {Void}\n    */\n    remove: function remove(slides) {\n      for (var i = 0, len = slides.length; i < len; i++) {\n        var style = slides[i].style;\n\n        style.marginLeft = '';\n        style.marginRight = '';\n      }\n    }\n  };\n\n  define(Gaps, 'value', {\n    /**\n     * Gets value of the gap.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      return toInt(Glide.settings.gap);\n    }\n  });\n\n  define(Gaps, 'grow', {\n    /**\n     * Gets additional dimentions value caused by gaps.\n     * Used to increase width of the slides wrapper.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      return Gaps.value * (Components.Sizes.length - 1);\n    }\n  });\n\n  define(Gaps, 'reductor', {\n    /**\n     * Gets reduction value caused by gaps.\n     * Used to subtract width of the slides.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      var perView = Glide.settings.perView;\n\n      return Gaps.value * (perView - 1) / perView;\n    }\n  });\n\n  /**\n   * Apply calculated gaps:\n   * - after building, so slides (including clones) will receive proper margins\n   * - on updating via API, to recalculate gaps with new options\n   */\n  Events.on(['build.after', 'update'], throttle(function () {\n    Gaps.apply(Components.Html.wrapper.children);\n  }, 30));\n\n  /**\n   * Remove gaps:\n   * - on destroying to bring markup to its inital state\n   */\n  Events.on('destroy', function () {\n    Gaps.remove(Components.Html.wrapper.children);\n  });\n\n  return Gaps;\n}\n\n/**\n * Finds siblings nodes of the passed node.\n *\n * @param  {Element} node\n * @return {Array}\n */\nfunction siblings(node) {\n  if (node && node.parentNode) {\n    var n = node.parentNode.firstChild;\n    var matched = [];\n\n    for (; n; n = n.nextSibling) {\n      if (n.nodeType === 1 && n !== node) {\n        matched.push(n);\n      }\n    }\n\n    return matched;\n  }\n\n  return [];\n}\n\n/**\n * Checks if passed node exist and is a valid element.\n *\n * @param  {Element} node\n * @return {Boolean}\n */\nfunction exist(node) {\n  if (node && node instanceof window.HTMLElement) {\n    return true;\n  }\n\n  return false;\n}\n\nvar TRACK_SELECTOR = '[data-glide-el=\"track\"]';\n\nfunction Html (Glide, Components) {\n  var Html = {\n    /**\n     * Setup slider HTML nodes.\n     *\n     * @param {Glide} glide\n     */\n    mount: function mount() {\n      this.root = Glide.selector;\n      this.track = this.root.querySelector(TRACK_SELECTOR);\n      this.slides = Array.prototype.slice.call(this.wrapper.children).filter(function (slide) {\n        return !slide.classList.contains(Glide.settings.classes.cloneSlide);\n      });\n    }\n  };\n\n  define(Html, 'root', {\n    /**\n     * Gets node of the glide main element.\n     *\n     * @return {Object}\n     */\n    get: function get() {\n      return Html._r;\n    },\n\n\n    /**\n     * Sets node of the glide main element.\n     *\n     * @return {Object}\n     */\n    set: function set(r) {\n      if (isString(r)) {\n        r = document.querySelector(r);\n      }\n\n      if (exist(r)) {\n        Html._r = r;\n      } else {\n        warn('Root element must be a existing Html node');\n      }\n    }\n  });\n\n  define(Html, 'track', {\n    /**\n     * Gets node of the glide track with slides.\n     *\n     * @return {Object}\n     */\n    get: function get() {\n      return Html._t;\n    },\n\n\n    /**\n     * Sets node of the glide track with slides.\n     *\n     * @return {Object}\n     */\n    set: function set(t) {\n      if (exist(t)) {\n        Html._t = t;\n      } else {\n        warn('Could not find track element. Please use ' + TRACK_SELECTOR + ' attribute.');\n      }\n    }\n  });\n\n  define(Html, 'wrapper', {\n    /**\n     * Gets node of the slides wrapper.\n     *\n     * @return {Object}\n     */\n    get: function get() {\n      return Html.track.children[0];\n    }\n  });\n\n  return Html;\n}\n\nfunction Peek (Glide, Components, Events) {\n  var Peek = {\n    /**\n     * Setups how much to peek based on settings.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.value = Glide.settings.peek;\n    }\n  };\n\n  define(Peek, 'value', {\n    /**\n     * Gets value of the peek.\n     *\n     * @returns {Number|Object}\n     */\n    get: function get() {\n      return Peek._v;\n    },\n\n\n    /**\n     * Sets value of the peek.\n     *\n     * @param {Number|Object} value\n     * @return {Void}\n     */\n    set: function set(value) {\n      if (isObject(value)) {\n        value.before = toInt(value.before);\n        value.after = toInt(value.after);\n      } else {\n        value = toInt(value);\n      }\n\n      Peek._v = value;\n    }\n  });\n\n  define(Peek, 'reductor', {\n    /**\n     * Gets reduction value caused by peek.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      var value = Peek.value;\n      var perView = Glide.settings.perView;\n\n      if (isObject(value)) {\n        return value.before / perView + value.after / perView;\n      }\n\n      return value * 2 / perView;\n    }\n  });\n\n  /**\n   * Recalculate peeking sizes on:\n   * - when resizing window to update to proper percents\n   */\n  Events.on(['resize', 'update'], function () {\n    Peek.mount();\n  });\n\n  return Peek;\n}\n\nfunction Move (Glide, Components, Events) {\n  var Move = {\n    /**\n     * Constructs move component.\n     *\n     * @returns {Void}\n     */\n    mount: function mount() {\n      this._o = 0;\n    },\n\n\n    /**\n     * Calculates a movement value based on passed offset and currently active index.\n     *\n     * @param  {Number} offset\n     * @return {Void}\n     */\n    make: function make() {\n      var _this = this;\n\n      var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      this.offset = offset;\n\n      Events.emit('move', {\n        movement: this.value\n      });\n\n      Components.Transition.after(function () {\n        Events.emit('move.after', {\n          movement: _this.value\n        });\n      });\n    }\n  };\n\n  define(Move, 'offset', {\n    /**\n     * Gets an offset value used to modify current translate.\n     *\n     * @return {Object}\n     */\n    get: function get() {\n      return Move._o;\n    },\n\n\n    /**\n     * Sets an offset value used to modify current translate.\n     *\n     * @return {Object}\n     */\n    set: function set(value) {\n      Move._o = !isUndefined(value) ? toInt(value) : 0;\n    }\n  });\n\n  define(Move, 'translate', {\n    /**\n     * Gets a raw movement value.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Components.Sizes.slideWidth * Glide.index;\n    }\n  });\n\n  define(Move, 'value', {\n    /**\n     * Gets an actual movement value corrected by offset.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      var offset = this.offset;\n      var translate = this.translate;\n\n      if (Components.Direction.is('rtl')) {\n        return translate + offset;\n      }\n\n      return translate - offset;\n    }\n  });\n\n  /**\n   * Make movement to proper slide on:\n   * - before build, so glide will start at `startAt` index\n   * - on each standard run to move to newly calculated index\n   */\n  Events.on(['build.before', 'run'], function () {\n    Move.make();\n  });\n\n  return Move;\n}\n\nfunction Sizes (Glide, Components, Events) {\n  var Sizes = {\n    /**\n     * Setups dimentions of slides.\n     *\n     * @return {Void}\n     */\n    setupSlides: function setupSlides() {\n      var slides = Components.Html.slides;\n\n      for (var i = 0; i < slides.length; i++) {\n        slides[i].style.width = this.slideWidth + 'px';\n      }\n    },\n\n\n    /**\n     * Setups dimentions of slides wrapper.\n     *\n     * @return {Void}\n     */\n    setupWrapper: function setupWrapper(dimention) {\n      Components.Html.wrapper.style.width = this.wrapperSize + 'px';\n    },\n\n\n    /**\n     * Removes applied styles from HTML elements.\n     *\n     * @returns {Void}\n     */\n    remove: function remove() {\n      var slides = Components.Html.slides;\n\n      for (var i = 0; i < slides.length; i++) {\n        slides[i].style.width = '';\n      }\n\n      Components.Html.wrapper.style.width = '';\n    }\n  };\n\n  define(Sizes, 'length', {\n    /**\n     * Gets count number of the slides.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Components.Html.slides.length;\n    }\n  });\n\n  define(Sizes, 'width', {\n    /**\n     * Gets width value of the glide.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Components.Html.root.offsetWidth;\n    }\n  });\n\n  define(Sizes, 'wrapperSize', {\n    /**\n     * Gets size of the slides wrapper.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow;\n    }\n  });\n\n  define(Sizes, 'slideWidth', {\n    /**\n     * Gets width value of the single slide.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor;\n    }\n  });\n\n  /**\n   * Apply calculated glide's dimensions:\n   * - before building, so other dimentions (e.g. translate) will be calculated propertly\n   * - when resizing window to recalculate sildes dimensions\n   * - on updating via API, to calculate dimensions based on new options\n   */\n  Events.on(['build.before', 'resize', 'update'], function () {\n    Sizes.setupSlides();\n    Sizes.setupWrapper();\n  });\n\n  /**\n   * Remove calculated glide's dimensions:\n   * - on destoting to bring markup to its inital state\n   */\n  Events.on('destroy', function () {\n    Sizes.remove();\n  });\n\n  return Sizes;\n}\n\nfunction Build (Glide, Components, Events) {\n  var Build = {\n    /**\n     * Init glide building. Adds classes, sets\n     * dimensions and setups initial state.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      Events.emit('build.before');\n\n      this.typeClass();\n      this.activeClass();\n\n      Events.emit('build.after');\n    },\n\n\n    /**\n     * Adds `type` class to the glide element.\n     *\n     * @return {Void}\n     */\n    typeClass: function typeClass() {\n      Components.Html.root.classList.add(Glide.settings.classes[Glide.settings.type]);\n    },\n\n\n    /**\n     * Sets active class to current slide.\n     *\n     * @return {Void}\n     */\n    activeClass: function activeClass() {\n      var classes = Glide.settings.classes;\n      var slide = Components.Html.slides[Glide.index];\n\n      if (slide) {\n        slide.classList.add(classes.activeSlide);\n\n        siblings(slide).forEach(function (sibling) {\n          sibling.classList.remove(classes.activeSlide);\n        });\n      }\n    },\n\n\n    /**\n     * Removes HTML classes applied at building.\n     *\n     * @return {Void}\n     */\n    removeClasses: function removeClasses() {\n      var classes = Glide.settings.classes;\n\n      Components.Html.root.classList.remove(classes[Glide.settings.type]);\n\n      Components.Html.slides.forEach(function (sibling) {\n        sibling.classList.remove(classes.activeSlide);\n      });\n    }\n  };\n\n  /**\n   * Clear building classes:\n   * - on destroying to bring HTML to its initial state\n   * - on updating to remove classes before remounting component\n   */\n  Events.on(['destroy', 'update'], function () {\n    Build.removeClasses();\n  });\n\n  /**\n   * Remount component:\n   * - on resizing of the window to calculate new dimentions\n   * - on updating settings via API\n   */\n  Events.on(['resize', 'update'], function () {\n    Build.mount();\n  });\n\n  /**\n   * Swap active class of current slide:\n   * - after each move to the new index\n   */\n  Events.on('move.after', function () {\n    Build.activeClass();\n  });\n\n  return Build;\n}\n\nfunction Clones (Glide, Components, Events) {\n  var Clones = {\n    /**\n     * Create pattern map and collect slides to be cloned.\n     */\n    mount: function mount() {\n      this.items = [];\n\n      if (Glide.isType('carousel')) {\n        this.items = this.collect();\n      }\n    },\n\n\n    /**\n     * Collect clones with pattern.\n     *\n     * @return {Void}\n     */\n    collect: function collect() {\n      var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var slides = Components.Html.slides;\n      var _Glide$settings = Glide.settings,\n          perView = _Glide$settings.perView,\n          classes = _Glide$settings.classes;\n\n\n      var peekIncrementer = +!!Glide.settings.peek;\n      var part = perView + peekIncrementer;\n      var start = slides.slice(0, part);\n      var end = slides.slice(-part);\n\n      for (var r = 0; r < Math.max(1, Math.floor(perView / slides.length)); r++) {\n        for (var i = 0; i < start.length; i++) {\n          var clone = start[i].cloneNode(true);\n\n          clone.classList.add(classes.cloneSlide);\n\n          items.push(clone);\n        }\n\n        for (var _i = 0; _i < end.length; _i++) {\n          var _clone = end[_i].cloneNode(true);\n\n          _clone.classList.add(classes.cloneSlide);\n\n          items.unshift(_clone);\n        }\n      }\n\n      return items;\n    },\n\n\n    /**\n     * Append cloned slides with generated pattern.\n     *\n     * @return {Void}\n     */\n    append: function append() {\n      var items = this.items;\n      var _Components$Html = Components.Html,\n          wrapper = _Components$Html.wrapper,\n          slides = _Components$Html.slides;\n\n\n      var half = Math.floor(items.length / 2);\n      var prepend = items.slice(0, half).reverse();\n      var append = items.slice(half, items.length);\n\n      for (var i = 0; i < append.length; i++) {\n        wrapper.appendChild(append[i]);\n      }\n\n      for (var _i2 = 0; _i2 < prepend.length; _i2++) {\n        wrapper.insertBefore(prepend[_i2], slides[0]);\n      }\n\n      for (var _i3 = 0; _i3 < items.length; _i3++) {\n        items[_i3].style.width = Components.Sizes.slideWidth + 'px';\n      }\n    },\n\n\n    /**\n     * Remove all cloned slides.\n     *\n     * @return {Void}\n     */\n    remove: function remove() {\n      var items = this.items;\n\n\n      for (var i = 0; i < items.length; i++) {\n        Components.Html.wrapper.removeChild(items[i]);\n      }\n    }\n  };\n\n  define(Clones, 'grow', {\n    /**\n     * Gets additional dimentions value caused by clones.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length;\n    }\n  });\n\n  /**\n   * Append additional slide's clones:\n   * - while glide's type is `carousel`\n   */\n  Events.on('update', function () {\n    Clones.remove();\n    Clones.mount();\n    Clones.append();\n  });\n\n  /**\n   * Append additional slide's clones:\n   * - while glide's type is `carousel`\n   */\n  Events.on('build.before', function () {\n    if (Glide.isType('carousel')) {\n      Clones.append();\n    }\n  });\n\n  /**\n   * Remove clones HTMLElements:\n   * - on destroying, to bring HTML to its initial state\n   */\n  Events.on('destroy', function () {\n    Clones.remove();\n  });\n\n  return Clones;\n}\n\nvar EventsBinder = function () {\n  /**\n   * Construct a EventsBinder instance.\n   */\n  function EventsBinder() {\n    var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    classCallCheck(this, EventsBinder);\n\n    this.listeners = listeners;\n  }\n\n  /**\n   * Adds events listeners to arrows HTML elements.\n   *\n   * @param  {String|Array} events\n   * @param  {Element|Window|Document} el\n   * @param  {Function} closure\n   * @param  {Boolean|Object} capture\n   * @return {Void}\n   */\n\n\n  createClass(EventsBinder, [{\n    key: 'on',\n    value: function on(events, el, closure) {\n      var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n      if (isString(events)) {\n        events = [events];\n      }\n\n      for (var i = 0; i < events.length; i++) {\n        this.listeners[events[i]] = closure;\n\n        el.addEventListener(events[i], this.listeners[events[i]], capture);\n      }\n    }\n\n    /**\n     * Removes event listeners from arrows HTML elements.\n     *\n     * @param  {String|Array} events\n     * @param  {Element|Window|Document} el\n     * @return {Void}\n     */\n\n  }, {\n    key: 'off',\n    value: function off(events, el) {\n      if (isString(events)) {\n        events = [events];\n      }\n\n      for (var i = 0; i < events.length; i++) {\n        el.removeEventListener(events[i], this.listeners[events[i]], false);\n      }\n    }\n\n    /**\n     * Destroy collected listeners.\n     *\n     * @returns {Void}\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      delete this.listeners;\n    }\n  }]);\n  return EventsBinder;\n}();\n\nfunction Resize (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  var Resize = {\n    /**\n     * Initializes window bindings.\n     */\n    mount: function mount() {\n      this.bind();\n    },\n\n\n    /**\n     * Binds `rezsize` listener to the window.\n     * It's a costly event, so we are debouncing it.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      Binder.on('resize', window, throttle(function () {\n        Events.emit('resize');\n      }, Glide.settings.throttle));\n    },\n\n\n    /**\n     * Unbinds listeners from the window.\n     *\n     * @return {Void}\n     */\n    unbind: function unbind() {\n      Binder.off('resize', window);\n    }\n  };\n\n  /**\n   * Remove bindings from window:\n   * - on destroying, to remove added EventListener\n   */\n  Events.on('destroy', function () {\n    Resize.unbind();\n    Binder.destroy();\n  });\n\n  return Resize;\n}\n\nvar VALID_DIRECTIONS = ['ltr', 'rtl'];\nvar FLIPED_MOVEMENTS = {\n  '>': '<',\n  '<': '>',\n  '=': '='\n};\n\nfunction Direction (Glide, Components, Events) {\n  var Direction = {\n    /**\n     * Setups gap value based on settings.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.value = Glide.settings.direction;\n    },\n\n\n    /**\n     * Resolves pattern based on direction value\n     *\n     * @param {String} pattern\n     * @returns {String}\n     */\n    resolve: function resolve(pattern) {\n      var token = pattern.slice(0, 1);\n\n      if (this.is('rtl')) {\n        return pattern.split(token).join(FLIPED_MOVEMENTS[token]);\n      }\n\n      return pattern;\n    },\n\n\n    /**\n     * Checks value of direction mode.\n     *\n     * @param {String} direction\n     * @returns {Boolean}\n     */\n    is: function is(direction) {\n      return this.value === direction;\n    },\n\n\n    /**\n     * Applies direction class to the root HTML element.\n     *\n     * @return {Void}\n     */\n    addClass: function addClass() {\n      Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]);\n    },\n\n\n    /**\n     * Removes direction class from the root HTML element.\n     *\n     * @return {Void}\n     */\n    removeClass: function removeClass() {\n      Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]);\n    }\n  };\n\n  define(Direction, 'value', {\n    /**\n     * Gets value of the direction.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      return Direction._v;\n    },\n\n\n    /**\n     * Sets value of the direction.\n     *\n     * @param {String} value\n     * @return {Void}\n     */\n    set: function set(value) {\n      if (VALID_DIRECTIONS.indexOf(value) > -1) {\n        Direction._v = value;\n      } else {\n        warn('Direction value must be `ltr` or `rtl`');\n      }\n    }\n  });\n\n  /**\n   * Clear direction class:\n   * - on destroy to bring HTML to its initial state\n   * - on update to remove class before reappling bellow\n   */\n  Events.on(['destroy', 'update'], function () {\n    Direction.removeClass();\n  });\n\n  /**\n   * Remount component:\n   * - on update to reflect changes in direction value\n   */\n  Events.on('update', function () {\n    Direction.mount();\n  });\n\n  /**\n   * Apply direction class:\n   * - before building to apply class for the first time\n   * - on updating to reapply direction class that may changed\n   */\n  Events.on(['build.before', 'update'], function () {\n    Direction.addClass();\n  });\n\n  return Direction;\n}\n\n/**\n * Reflects value of glide movement.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Rtl (Glide, Components) {\n  return {\n    /**\n     * Negates the passed translate if glide is in RTL option.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      if (Components.Direction.is('rtl')) {\n        return -translate;\n      }\n\n      return translate;\n    }\n  };\n}\n\n/**\n * Updates glide movement with a `gap` settings.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Gap (Glide, Components) {\n  return {\n    /**\n     * Modifies passed translate value with number in the `gap` settings.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      return translate + Components.Gaps.value * Glide.index;\n    }\n  };\n}\n\n/**\n * Updates glide movement with width of additional clones width.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Grow (Glide, Components) {\n  return {\n    /**\n     * Adds to the passed translate width of the half of clones.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      return translate + Components.Clones.grow / 2;\n    }\n  };\n}\n\n/**\n * Updates glide movement with a `peek` settings.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Peeking (Glide, Components) {\n  return {\n    /**\n     * Modifies passed translate value with a `peek` setting.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      if (Glide.settings.focusAt >= 0) {\n        var peek = Components.Peek.value;\n\n        if (isObject(peek)) {\n          return translate - peek.before;\n        }\n\n        return translate - peek;\n      }\n\n      return translate;\n    }\n  };\n}\n\n/**\n * Updates glide movement with a `focusAt` settings.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Focusing (Glide, Components) {\n  return {\n    /**\n     * Modifies passed translate value with index in the `focusAt` setting.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      var gap = Components.Gaps.value;\n      var width = Components.Sizes.width;\n      var focusAt = Glide.settings.focusAt;\n      var slideWidth = Components.Sizes.slideWidth;\n\n      if (focusAt === 'center') {\n        return translate - (width / 2 - slideWidth / 2);\n      }\n\n      return translate - slideWidth * focusAt - gap * focusAt;\n    }\n  };\n}\n\n/**\n * Applies diffrent transformers on translate value.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction mutator (Glide, Components, Events) {\n  /**\n   * Merge instance transformers with collection of default transformers.\n   * It's important that the Rtl component be last on the list,\n   * so it reflects all previous transformations.\n   *\n   * @type {Array}\n   */\n  var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]);\n\n  return {\n    /**\n     * Piplines translate value with registered transformers.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    mutate: function mutate(translate) {\n      for (var i = 0; i < TRANSFORMERS.length; i++) {\n        var transformer = TRANSFORMERS[i];\n\n        if (isFunction(transformer) && isFunction(transformer().modify)) {\n          translate = transformer(Glide, Components, Events).modify(translate);\n        } else {\n          warn('Transformer should be a function that returns an object with `modify()` method');\n        }\n      }\n\n      return translate;\n    }\n  };\n}\n\nfunction Translate (Glide, Components, Events) {\n  var Translate = {\n    /**\n     * Sets value of translate on HTML element.\n     *\n     * @param {Number} value\n     * @return {Void}\n     */\n    set: function set(value) {\n      var transform = mutator(Glide, Components).mutate(value);\n\n      Components.Html.wrapper.style.transform = 'translate3d(' + -1 * transform + 'px, 0px, 0px)';\n    },\n\n\n    /**\n     * Removes value of translate from HTML element.\n     *\n     * @return {Void}\n     */\n    remove: function remove() {\n      Components.Html.wrapper.style.transform = '';\n    }\n  };\n\n  /**\n   * Set new translate value:\n   * - on move to reflect index change\n   * - on updating via API to reflect possible changes in options\n   */\n  Events.on('move', function (context) {\n    var gap = Components.Gaps.value;\n    var length = Components.Sizes.length;\n    var width = Components.Sizes.slideWidth;\n\n    if (Glide.isType('carousel') && Components.Run.isOffset('<')) {\n      Components.Transition.after(function () {\n        Events.emit('translate.jump');\n\n        Translate.set(width * (length - 1));\n      });\n\n      return Translate.set(-width - gap * length);\n    }\n\n    if (Glide.isType('carousel') && Components.Run.isOffset('>')) {\n      Components.Transition.after(function () {\n        Events.emit('translate.jump');\n\n        Translate.set(0);\n      });\n\n      return Translate.set(width * length + gap * length);\n    }\n\n    return Translate.set(context.movement);\n  });\n\n  /**\n   * Remove translate:\n   * - on destroying to bring markup to its inital state\n   */\n  Events.on('destroy', function () {\n    Translate.remove();\n  });\n\n  return Translate;\n}\n\nfunction Transition (Glide, Components, Events) {\n  /**\n   * Holds inactivity status of transition.\n   * When true transition is not applied.\n   *\n   * @type {Boolean}\n   */\n  var disabled = false;\n\n  var Transition = {\n    /**\n     * Composes string of the CSS transition.\n     *\n     * @param {String} property\n     * @return {String}\n     */\n    compose: function compose(property) {\n      var settings = Glide.settings;\n\n      if (!disabled) {\n        return property + ' ' + this.duration + 'ms ' + settings.animationTimingFunc;\n      }\n\n      return property + ' 0ms ' + settings.animationTimingFunc;\n    },\n\n\n    /**\n     * Sets value of transition on HTML element.\n     *\n     * @param {String=} property\n     * @return {Void}\n     */\n    set: function set() {\n      var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n\n      Components.Html.wrapper.style.transition = this.compose(property);\n    },\n\n\n    /**\n     * Removes value of transition from HTML element.\n     *\n     * @return {Void}\n     */\n    remove: function remove() {\n      Components.Html.wrapper.style.transition = '';\n    },\n\n\n    /**\n     * Runs callback after animation.\n     *\n     * @param  {Function} callback\n     * @return {Void}\n     */\n    after: function after(callback) {\n      setTimeout(function () {\n        callback();\n      }, this.duration);\n    },\n\n\n    /**\n     * Enable transition.\n     *\n     * @return {Void}\n     */\n    enable: function enable() {\n      disabled = false;\n\n      this.set();\n    },\n\n\n    /**\n     * Disable transition.\n     *\n     * @return {Void}\n     */\n    disable: function disable() {\n      disabled = true;\n\n      this.set();\n    }\n  };\n\n  define(Transition, 'duration', {\n    /**\n     * Gets duration of the transition based\n     * on currently running animation type.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      var settings = Glide.settings;\n\n      if (Glide.isType('slider') && Components.Run.offset) {\n        return settings.rewindDuration;\n      }\n\n      return settings.animationDuration;\n    }\n  });\n\n  /**\n   * Set transition `style` value:\n   * - on each moving, because it may be cleared by offset move\n   */\n  Events.on('move', function () {\n    Transition.set();\n  });\n\n  /**\n   * Disable transition:\n   * - before initial build to avoid transitioning from `0` to `startAt` index\n   * - while resizing window and recalculating dimentions\n   * - on jumping from offset transition at start and end edges in `carousel` type\n   */\n  Events.on(['build.before', 'resize', 'translate.jump'], function () {\n    Transition.disable();\n  });\n\n  /**\n   * Enable transition:\n   * - on each running, because it may be disabled by offset move\n   */\n  Events.on('run', function () {\n    Transition.enable();\n  });\n\n  /**\n   * Remove transition:\n   * - on destroying to bring markup to its inital state\n   */\n  Events.on('destroy', function () {\n    Transition.remove();\n  });\n\n  return Transition;\n}\n\n/**\n * Test via a getter in the options object to see\n * if the passive property is accessed.\n *\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n */\n\nvar supportsPassive = false;\n\ntry {\n  var opts = Object.defineProperty({}, 'passive', {\n    get: function get() {\n      supportsPassive = true;\n    }\n  });\n\n  window.addEventListener('testPassive', null, opts);\n  window.removeEventListener('testPassive', null, opts);\n} catch (e) {}\n\nvar supportsPassive$1 = supportsPassive;\n\nvar START_EVENTS = ['touchstart', 'mousedown'];\nvar MOVE_EVENTS = ['touchmove', 'mousemove'];\nvar END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\nvar MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\n\nfunction Swipe (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  var swipeSin = 0;\n  var swipeStartX = 0;\n  var swipeStartY = 0;\n  var disabled = false;\n  var moveable = true;\n  var capture = supportsPassive$1 ? { passive: true } : false;\n\n  var Swipe = {\n    /**\n     * Initializes swipe bindings.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.bindSwipeStart();\n    },\n\n\n    /**\n     * Handler for `swipestart` event. Calculates entry points of the user's tap.\n     *\n     * @param {Object} event\n     * @return {Void}\n     */\n    start: function start(event) {\n      if (!disabled && !Glide.disabled) {\n        this.disable();\n\n        var swipe = this.touches(event);\n\n        moveable = true;\n        swipeSin = null;\n        swipeStartX = toInt(swipe.pageX);\n        swipeStartY = toInt(swipe.pageY);\n\n        this.bindSwipeMove();\n        this.bindSwipeEnd();\n\n        Events.emit('swipe.start');\n      }\n    },\n\n\n    /**\n     * Handler for `swipemove` event. Calculates user's tap angle and distance.\n     *\n     * @param {Object} event\n     */\n    move: function move(event) {\n      if (!Glide.disabled) {\n        var _Glide$settings = Glide.settings,\n            touchAngle = _Glide$settings.touchAngle,\n            touchRatio = _Glide$settings.touchRatio,\n            classes = _Glide$settings.classes;\n\n\n        var swipe = this.touches(event);\n\n        var subExSx = toInt(swipe.pageX) - swipeStartX;\n        var subEySy = toInt(swipe.pageY) - swipeStartY;\n        var powEX = Math.abs(subExSx << 2);\n        var powEY = Math.abs(subEySy << 2);\n        var swipeHypotenuse = Math.sqrt(powEX + powEY);\n        var swipeCathetus = Math.sqrt(powEY);\n\n        swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n        if (moveable && swipeSin * 180 / Math.PI < touchAngle) {\n          event.stopPropagation();\n\n          Components.Move.make(subExSx * toFloat(touchRatio));\n\n          Components.Html.root.classList.add(classes.dragging);\n\n          Events.emit('swipe.move');\n        } else {\n          moveable = false;\n\n          return false;\n        }\n      }\n    },\n\n\n    /**\n     * Handler for `swipeend` event. Finitializes user's tap and decides about glide move.\n     *\n     * @param {Object} event\n     * @return {Void}\n     */\n    end: function end(event) {\n      if (!Glide.disabled) {\n        var settings = Glide.settings;\n\n        var swipe = this.touches(event);\n        var threshold = this.threshold(event);\n\n        var swipeDistance = swipe.pageX - swipeStartX;\n        var swipeDeg = swipeSin * 180 / Math.PI;\n        var steps = Math.round(swipeDistance / Components.Sizes.slideWidth);\n\n        this.enable();\n\n        if (moveable) {\n          if (swipeDistance > threshold && swipeDeg < settings.touchAngle) {\n            // While swipe is positive and greater than threshold move backward.\n            if (settings.perTouch) {\n              steps = Math.min(steps, toInt(settings.perTouch));\n            }\n\n            if (Components.Direction.is('rtl')) {\n              steps = -steps;\n            }\n\n            Components.Run.make(Components.Direction.resolve('<' + steps));\n          } else if (swipeDistance < -threshold && swipeDeg < settings.touchAngle) {\n            // While swipe is negative and lower than negative threshold move forward.\n            if (settings.perTouch) {\n              steps = Math.max(steps, -toInt(settings.perTouch));\n            }\n\n            if (Components.Direction.is('rtl')) {\n              steps = -steps;\n            }\n\n            Components.Run.make(Components.Direction.resolve('>' + steps));\n          } else {\n            // While swipe don't reach distance apply previous transform.\n            Components.Move.make();\n          }\n        }\n\n        Components.Html.root.classList.remove(settings.classes.dragging);\n\n        this.unbindSwipeMove();\n        this.unbindSwipeEnd();\n\n        Events.emit('swipe.end');\n      }\n    },\n\n\n    /**\n     * Binds swipe's starting event.\n     *\n     * @return {Void}\n     */\n    bindSwipeStart: function bindSwipeStart() {\n      var _this = this;\n\n      var settings = Glide.settings;\n\n      if (settings.swipeThreshold) {\n        Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n          _this.start(event);\n        }, capture);\n      }\n\n      if (settings.dragThreshold) {\n        Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n          _this.start(event);\n        }, capture);\n      }\n    },\n\n\n    /**\n     * Unbinds swipe's starting event.\n     *\n     * @return {Void}\n     */\n    unbindSwipeStart: function unbindSwipeStart() {\n      Binder.off(START_EVENTS[0], Components.Html.wrapper);\n      Binder.off(START_EVENTS[1], Components.Html.wrapper);\n    },\n\n\n    /**\n     * Binds swipe's moving event.\n     *\n     * @return {Void}\n     */\n    bindSwipeMove: function bindSwipeMove() {\n      var _this2 = this;\n\n      Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) {\n        _this2.move(event);\n      }, Glide.settings.throttle), capture);\n    },\n\n\n    /**\n     * Unbinds swipe's moving event.\n     *\n     * @return {Void}\n     */\n    unbindSwipeMove: function unbindSwipeMove() {\n      Binder.off(MOVE_EVENTS, Components.Html.wrapper);\n    },\n\n\n    /**\n     * Binds swipe's ending event.\n     *\n     * @return {Void}\n     */\n    bindSwipeEnd: function bindSwipeEnd() {\n      var _this3 = this;\n\n      Binder.on(END_EVENTS, Components.Html.wrapper, function (event) {\n        _this3.end(event);\n      });\n    },\n\n\n    /**\n     * Unbinds swipe's ending event.\n     *\n     * @return {Void}\n     */\n    unbindSwipeEnd: function unbindSwipeEnd() {\n      Binder.off(END_EVENTS, Components.Html.wrapper);\n    },\n\n\n    /**\n     * Normalizes event touches points accorting to different types.\n     *\n     * @param {Object} event\n     */\n    touches: function touches(event) {\n      if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n        return event;\n      }\n\n      return event.touches[0] || event.changedTouches[0];\n    },\n\n\n    /**\n     * Gets value of minimum swipe distance settings based on event type.\n     *\n     * @return {Number}\n     */\n    threshold: function threshold(event) {\n      var settings = Glide.settings;\n\n      if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n        return settings.dragThreshold;\n      }\n\n      return settings.swipeThreshold;\n    },\n\n\n    /**\n     * Enables swipe event.\n     *\n     * @return {self}\n     */\n    enable: function enable() {\n      disabled = false;\n\n      Components.Transition.enable();\n\n      return this;\n    },\n\n\n    /**\n     * Disables swipe event.\n     *\n     * @return {self}\n     */\n    disable: function disable() {\n      disabled = true;\n\n      Components.Transition.disable();\n\n      return this;\n    }\n  };\n\n  /**\n   * Add component class:\n   * - after initial building\n   */\n  Events.on('build.after', function () {\n    Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n  });\n\n  /**\n   * Remove swiping bindings:\n   * - on destroying, to remove added EventListeners\n   */\n  Events.on('destroy', function () {\n    Swipe.unbindSwipeStart();\n    Swipe.unbindSwipeMove();\n    Swipe.unbindSwipeEnd();\n    Binder.destroy();\n  });\n\n  return Swipe;\n}\n\nfunction Images (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  var Images = {\n    /**\n     * Binds listener to glide wrapper.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.bind();\n    },\n\n\n    /**\n     * Binds `dragstart` event on wrapper to prevent dragging images.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      Binder.on('dragstart', Components.Html.wrapper, this.dragstart);\n    },\n\n\n    /**\n     * Unbinds `dragstart` event on wrapper.\n     *\n     * @return {Void}\n     */\n    unbind: function unbind() {\n      Binder.off('dragstart', Components.Html.wrapper);\n    },\n\n\n    /**\n     * Event handler. Prevents dragging.\n     *\n     * @return {Void}\n     */\n    dragstart: function dragstart(event) {\n      event.preventDefault();\n    }\n  };\n\n  /**\n   * Remove bindings from images:\n   * - on destroying, to remove added EventListeners\n   */\n  Events.on('destroy', function () {\n    Images.unbind();\n    Binder.destroy();\n  });\n\n  return Images;\n}\n\nfunction Anchors (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  /**\n   * Holds detaching status of anchors.\n   * Prevents detaching of already detached anchors.\n   *\n   * @private\n   * @type {Boolean}\n   */\n  var detached = false;\n\n  /**\n   * Holds preventing status of anchors.\n   * If `true` redirection after click will be disabled.\n   *\n   * @private\n   * @type {Boolean}\n   */\n  var prevented = false;\n\n  var Anchors = {\n    /**\n     * Setups a initial state of anchors component.\n     *\n     * @returns {Void}\n     */\n    mount: function mount() {\n      /**\n       * Holds collection of anchors elements.\n       *\n       * @private\n       * @type {HTMLCollection}\n       */\n      this._a = Components.Html.wrapper.querySelectorAll('a');\n\n      this.bind();\n    },\n\n\n    /**\n     * Binds events to anchors inside a track.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      Binder.on('click', Components.Html.wrapper, this.click);\n    },\n\n\n    /**\n     * Unbinds events attached to anchors inside a track.\n     *\n     * @return {Void}\n     */\n    unbind: function unbind() {\n      Binder.off('click', Components.Html.wrapper);\n    },\n\n\n    /**\n     * Handler for click event. Prevents clicks when glide is in `prevent` status.\n     *\n     * @param  {Object} event\n     * @return {Void}\n     */\n    click: function click(event) {\n      event.stopPropagation();\n\n      if (prevented) {\n        event.preventDefault();\n      }\n    },\n\n\n    /**\n     * Detaches anchors click event inside glide.\n     *\n     * @return {self}\n     */\n    detach: function detach() {\n      prevented = true;\n\n      if (!detached) {\n        for (var i = 0; i < this.items.length; i++) {\n          this.items[i].draggable = false;\n\n          this.items[i].setAttribute('data-href', this.items[i].getAttribute('href'));\n\n          this.items[i].removeAttribute('href');\n        }\n\n        detached = true;\n      }\n\n      return this;\n    },\n\n\n    /**\n     * Attaches anchors click events inside glide.\n     *\n     * @return {self}\n     */\n    attach: function attach() {\n      prevented = false;\n\n      if (detached) {\n        for (var i = 0; i < this.items.length; i++) {\n          this.items[i].draggable = true;\n\n          this.items[i].setAttribute('href', this.items[i].getAttribute('data-href'));\n        }\n\n        detached = false;\n      }\n\n      return this;\n    }\n  };\n\n  define(Anchors, 'items', {\n    /**\n     * Gets collection of the arrows HTML elements.\n     *\n     * @return {HTMLElement[]}\n     */\n    get: function get() {\n      return Anchors._a;\n    }\n  });\n\n  /**\n   * Detach anchors inside slides:\n   * - on swiping, so they won't redirect to its `href` attributes\n   */\n  Events.on('swipe.move', function () {\n    Anchors.detach();\n  });\n\n  /**\n   * Attach anchors inside slides:\n   * - after swiping and transitions ends, so they can redirect after click again\n   */\n  Events.on('swipe.end', function () {\n    Components.Transition.after(function () {\n      Anchors.attach();\n    });\n  });\n\n  /**\n   * Unbind anchors inside slides:\n   * - on destroying, to bring anchors to its initial state\n   */\n  Events.on('destroy', function () {\n    Anchors.attach();\n    Anchors.unbind();\n    Binder.destroy();\n  });\n\n  return Anchors;\n}\n\nvar NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\nvar CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\n\nfunction Controls (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  var Controls = {\n    /**\n     * Inits arrows. Binds events listeners\n     * to the arrows HTML elements.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      /**\n       * Collection of navigation HTML elements.\n       *\n       * @private\n       * @type {HTMLCollection}\n       */\n      this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR);\n\n      /**\n       * Collection of controls HTML elements.\n       *\n       * @private\n       * @type {HTMLCollection}\n       */\n      this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n\n      this.addBindings();\n    },\n\n\n    /**\n     * Sets active class to current slide.\n     *\n     * @return {Void}\n     */\n    setActive: function setActive() {\n      for (var i = 0; i < this._n.length; i++) {\n        this.addClass(this._n[i].children);\n      }\n    },\n\n\n    /**\n     * Removes active class to current slide.\n     *\n     * @return {Void}\n     */\n    removeActive: function removeActive() {\n      for (var i = 0; i < this._n.length; i++) {\n        this.removeClass(this._n[i].children);\n      }\n    },\n\n\n    /**\n     * Toggles active class on items inside navigation.\n     *\n     * @param  {HTMLElement} controls\n     * @return {Void}\n     */\n    addClass: function addClass(controls) {\n      var settings = Glide.settings;\n      var item = controls[Glide.index];\n\n      item.classList.add(settings.classes.activeNav);\n\n      siblings(item).forEach(function (sibling) {\n        sibling.classList.remove(settings.classes.activeNav);\n      });\n    },\n\n\n    /**\n     * Removes active class from active control.\n     *\n     * @param  {HTMLElement} controls\n     * @return {Void}\n     */\n    removeClass: function removeClass(controls) {\n      controls[Glide.index].classList.remove(Glide.settings.classes.activeNav);\n    },\n\n\n    /**\n     * Adds handles to the each group of controls.\n     *\n     * @return {Void}\n     */\n    addBindings: function addBindings() {\n      for (var i = 0; i < this._c.length; i++) {\n        this.bind(this._c[i].children);\n      }\n    },\n\n\n    /**\n     * Removes handles from the each group of controls.\n     *\n     * @return {Void}\n     */\n    removeBindings: function removeBindings() {\n      for (var i = 0; i < this._c.length; i++) {\n        this.unbind(this._c[i].children);\n      }\n    },\n\n\n    /**\n     * Binds events to arrows HTML elements.\n     *\n     * @param {HTMLCollection} elements\n     * @return {Void}\n     */\n    bind: function bind(elements) {\n      for (var i = 0; i < elements.length; i++) {\n        Binder.on(['click', 'touchstart'], elements[i], this.click);\n      }\n    },\n\n\n    /**\n     * Unbinds events binded to the arrows HTML elements.\n     *\n     * @param {HTMLCollection} elements\n     * @return {Void}\n     */\n    unbind: function unbind(elements) {\n      for (var i = 0; i < elements.length; i++) {\n        Binder.off(['click', 'touchstart'], elements[i]);\n      }\n    },\n\n\n    /**\n     * Handles `click` event on the arrows HTML elements.\n     * Moves slider in driection precised in\n     * `data-glide-dir` attribute.\n     *\n     * @param {Object} event\n     * @return {Void}\n     */\n    click: function click(event) {\n      event.preventDefault();\n\n      Components.Run.make(Components.Direction.resolve(event.currentTarget.getAttribute('data-glide-dir')));\n    }\n  };\n\n  define(Controls, 'items', {\n    /**\n     * Gets collection of the controls HTML elements.\n     *\n     * @return {HTMLElement[]}\n     */\n    get: function get() {\n      return Controls._c;\n    }\n  });\n\n  /**\n   * Swap active class of current navigation item:\n   * - after mounting to set it to initial index\n   * - after each move to the new index\n   */\n  Events.on(['mount.after', 'move.after'], function () {\n    Controls.setActive();\n  });\n\n  /**\n   * Remove bindings and HTML Classes:\n   * - on destroying, to bring markup to its initial state\n   */\n  Events.on('destroy', function () {\n    Controls.removeBindings();\n    Controls.removeActive();\n    Binder.destroy();\n  });\n\n  return Controls;\n}\n\nfunction Keyboard (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  var Keyboard = {\n    /**\n     * Binds keyboard events on component mount.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      if (Glide.settings.keyboard) {\n        this.bind();\n      }\n    },\n\n\n    /**\n     * Adds keyboard press events.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      Binder.on('keyup', document, this.press);\n    },\n\n\n    /**\n     * Removes keyboard press events.\n     *\n     * @return {Void}\n     */\n    unbind: function unbind() {\n      Binder.off('keyup', document);\n    },\n\n\n    /**\n     * Handles keyboard's arrows press and moving glide foward and backward.\n     *\n     * @param  {Object} event\n     * @return {Void}\n     */\n    press: function press(event) {\n      if (event.keyCode === 39) {\n        Components.Run.make(Components.Direction.resolve('>'));\n      }\n\n      if (event.keyCode === 37) {\n        Components.Run.make(Components.Direction.resolve('<'));\n      }\n    }\n  };\n\n  /**\n   * Remove bindings from keyboard:\n   * - on destroying to remove added events\n   * - on updating to remove events before remounting\n   */\n  Events.on(['destroy', 'update'], function () {\n    Keyboard.unbind();\n  });\n\n  /**\n   * Remount component\n   * - on updating to reflect potential changes in settings\n   */\n  Events.on('update', function () {\n    Keyboard.mount();\n  });\n\n  /**\n   * Destroy binder:\n   * - on destroying to remove listeners\n   */\n  Events.on('destroy', function () {\n    Binder.destroy();\n  });\n\n  return Keyboard;\n}\n\nfunction Autoplay (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  var Autoplay = {\n    /**\n     * Initializes autoplaying and events.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.start();\n\n      if (Glide.settings.hoverpause) {\n        this.bind();\n      }\n    },\n\n\n    /**\n     * Starts autoplaying in configured interval.\n     *\n     * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings\n     * @return {Void}\n     */\n    start: function start() {\n      var _this = this;\n\n      if (Glide.settings.autoplay) {\n        if (isUndefined(this._i)) {\n          this._i = setInterval(function () {\n            _this.stop();\n\n            Components.Run.make('>');\n\n            _this.start();\n          }, this.time);\n        }\n      }\n    },\n\n\n    /**\n     * Stops autorunning of the glide.\n     *\n     * @return {Void}\n     */\n    stop: function stop() {\n      this._i = clearInterval(this._i);\n    },\n\n\n    /**\n     * Stops autoplaying while mouse is over glide's area.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      var _this2 = this;\n\n      Binder.on('mouseover', Components.Html.root, function () {\n        _this2.stop();\n      });\n\n      Binder.on('mouseout', Components.Html.root, function () {\n        _this2.start();\n      });\n    },\n\n\n    /**\n     * Unbind mouseover events.\n     *\n     * @returns {Void}\n     */\n    unbind: function unbind() {\n      Binder.off(['mouseover', 'mouseout'], Components.Html.root);\n    }\n  };\n\n  define(Autoplay, 'time', {\n    /**\n     * Gets time period value for the autoplay interval. Prioritizes\n     * times in `data-glide-autoplay` attrubutes over options.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay');\n\n      if (autoplay) {\n        return toInt(autoplay);\n      }\n\n      return toInt(Glide.settings.autoplay);\n    }\n  });\n\n  /**\n   * Stop autoplaying and unbind events:\n   * - on destroying, to clear defined interval\n   * - on updating via API to reset interval that may changed\n   */\n  Events.on(['destroy', 'update'], function () {\n    Autoplay.unbind();\n  });\n\n  /**\n   * Stop autoplaying:\n   * - before each run, to restart autoplaying\n   * - on pausing via API\n   * - on destroying, to clear defined interval\n   * - while starting a swipe\n   * - on updating via API to reset interval that may changed\n   */\n  Events.on(['run.before', 'pause', 'destroy', 'swipe.start', 'update'], function () {\n    Autoplay.stop();\n  });\n\n  /**\n   * Start autoplaying:\n   * - after each run, to restart autoplaying\n   * - on playing via API\n   * - while ending a swipe\n   */\n  Events.on(['run.after', 'play', 'swipe.end'], function () {\n    Autoplay.start();\n  });\n\n  /**\n   * Remount autoplaying:\n   * - on updating via API to reset interval that may changed\n   */\n  Events.on('update', function () {\n    Autoplay.mount();\n  });\n\n  /**\n   * Destroy a binder:\n   * - on destroying glide instance to clearup listeners\n   */\n  Events.on('destroy', function () {\n    Binder.destroy();\n  });\n\n  return Autoplay;\n}\n\n/**\n * Sorts keys of breakpoint object so they will be ordered from lower to bigger.\n *\n * @param {Object} points\n * @returns {Object}\n */\nfunction sortBreakpoints(points) {\n  if (isObject(points)) {\n    return sortKeys(points);\n  } else {\n    warn('Breakpoints option must be an object');\n  }\n\n  return {};\n}\n\nfunction Breakpoints (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  /**\n   * Holds reference to settings.\n   *\n   * @type {Object}\n   */\n  var settings = Glide.settings;\n\n  /**\n   * Holds reference to breakpoints object in settings. Sorts breakpoints\n   * from smaller to larger. It is required in order to proper\n   * matching currently active breakpoint settings.\n   *\n   * @type {Object}\n   */\n  var points = sortBreakpoints(settings.breakpoints);\n\n  /**\n   * Cache initial settings before overwritting.\n   *\n   * @type {Object}\n   */\n  var defaults = _extends({}, settings);\n\n  var Breakpoints = {\n    /**\n     * Matches settings for currectly matching media breakpoint.\n     *\n     * @param {Object} points\n     * @returns {Object}\n     */\n    match: function match(points) {\n      if (typeof window.matchMedia !== 'undefined') {\n        for (var point in points) {\n          if (points.hasOwnProperty(point)) {\n            if (window.matchMedia('(max-width: ' + point + 'px)').matches) {\n              return points[point];\n            }\n          }\n        }\n      }\n\n      return defaults;\n    }\n  };\n\n  /**\n   * Overwrite instance settings with currently matching breakpoint settings.\n   * This happens right after component initialization.\n   */\n  _extends(settings, Breakpoints.match(points));\n\n  /**\n   * Update glide with settings of matched brekpoint:\n   * - window resize to update slider\n   */\n  Binder.on('resize', window, throttle(function () {\n    Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n  }, Glide.settings.throttle));\n\n  /**\n   * Resort and update default settings:\n   * - on reinit via API, so breakpoint matching will be performed with options\n   */\n  Events.on('update', function () {\n    points = sortBreakpoints(points);\n\n    defaults = _extends({}, settings);\n  });\n\n  /**\n   * Unbind resize listener:\n   * - on destroying, to bring markup to its initial state\n   */\n  Events.on('destroy', function () {\n    Binder.off('resize', window);\n  });\n\n  return Breakpoints;\n}\n\nvar COMPONENTS = {\n  // Required\n  Html: Html,\n  Translate: Translate,\n  Transition: Transition,\n  Direction: Direction,\n  Peek: Peek,\n  Sizes: Sizes,\n  Gaps: Gaps,\n  Move: Move,\n  Clones: Clones,\n  Resize: Resize,\n  Build: Build,\n  Run: Run,\n\n  // Optional\n  Swipe: Swipe,\n  Images: Images,\n  Anchors: Anchors,\n  Controls: Controls,\n  Keyboard: Keyboard,\n  Autoplay: Autoplay,\n  Breakpoints: Breakpoints\n};\n\nvar Glide$1 = function (_Core) {\n  inherits(Glide$$1, _Core);\n\n  function Glide$$1() {\n    classCallCheck(this, Glide$$1);\n    return possibleConstructorReturn(this, (Glide$$1.__proto__ || Object.getPrototypeOf(Glide$$1)).apply(this, arguments));\n  }\n\n  createClass(Glide$$1, [{\n    key: 'mount',\n    value: function mount() {\n      var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      return get(Glide$$1.prototype.__proto__ || Object.getPrototypeOf(Glide$$1.prototype), 'mount', this).call(this, _extends({}, COMPONENTS, extensions));\n    }\n  }]);\n  return Glide$$1;\n}(Glide);\n\nexport default Glide$1;\n","import Glide from '@glidejs/glide'\n\n\n# Carousels on Sections 12, 14\n\ndocument.addEventListener 'DOMContentLoaded', (e) ->\n  glide12 = new Glide '.js-glide-12',\n    type: 'carousel'\n    startAt: 0\n    perView: 1\n    gap: 0\n  .mount()\n\n  glide14 = new Glide '.js-glide-14',\n    type: 'carousel'\n    startAt: 0\n    perView: 1\n    gap: 0\n  .mount()\n\n"]}