{"version":3,"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","this","hop","on","event","handler","index","push","remove","emit","context","forEach","item","Glide","selector","_c","_t","_e","disabled","mount$$1","mutate","transformers","update","go","pattern","Run","make","move","distance","Transition","disable","Move","destroy","play","interval","pause","enable","isType","get$$1","_o","set","set$$1","o","_i","_d","status","Components","Events","_this","calculate","after","isStart","isEnd","isOffset","steps","countableSteps","Math","min","_m","step","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","peekIncrementer","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","off","removeEventListener","Resize","Binder","bind","unbind","VALID_DIRECTIONS","FLIPED_MOVEMENTS","resolve","token","split","join","addClass","removeClass","indexOf","Rtl","modify","Gap","Grow","Peeking","Focusing","mutator","TRANSFORMERS","concat","transformer","Translate","transform","compose","duration","transition","callback","supportsPassive","opts","e","supportsPassive$1","START_EVENTS","MOVE_EVENTS","END_EVENTS","MOUSE_EVENTS","Swipe","swipeSin","swipeStartX","swipeStartY","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"],"sources":["./node_modules/@glidejs/glide/dist/glide.esm.js"],"sourcesContent":["/*!\n * Glide.js v3.4.1\n * (c) 2013-2019 Jędrzej Chałubek (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.isStart()) {\n Events.emit('run.start', _this.move);\n }\n\n if (_this.isEnd()) {\n Events.emit('run.end', _this.move);\n }\n\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 } 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 } 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 default:\n warn('Invalid direction pattern [' + direction + steps + '] has been used');\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 var step = value.substr(1);\n\n this._m = {\n direction: value.substr(0, 1),\n steps: step ? toInt(step) ? toInt(step) : step : 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 width = this.slideWidth + 'px';\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = width;\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 var width = Components.Sizes.slideWidth + 'px';\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 = width;\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 * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n }, {\n key: 'off',\n value: function off(events, el) {\n var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\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]], capture);\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 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 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 (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 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 (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 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, capture);\n Binder.off(START_EVENTS[1], Components.Html.wrapper, capture);\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, capture);\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 if (prevented) {\n event.stopPropagation();\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 capture = supportsPassive$1 ? { passive: true } : false;\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 if (item) {\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 /**\n * Removes active class from active control.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n removeClass: function removeClass(controls) {\n var item = controls[Glide.index];\n\n if (item) {\n item.classList.remove(Glide.settings.classes.activeNav);\n }\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', elements[i], this.click);\n Binder.on('touchstart', elements[i], this.click, capture);\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"],"mappings":"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"}