{"version":3,"file":"rpmblocks.min.js","sources":["../blocks/banner/banner.js","../blocks/calendar/calendar.js","../blocks/buttons/buttons.js","../node_modules/@glidejs/glide/dist/glide.esm.js","../blocks/callout/callout.js","../blocks/columns/columns.js","../blocks/cast/cast.js","../blocks/creative/creative.js","../blocks/gallery/gallery.js","../blocks/newsletter/newsletter.js","../blocks/image/image.js","../blocks/text/text.js"],"sourcesContent":["export const RPMBanner = (function () {\n\t'use strict';\n\n\tlet $musicPlayer;\n\n\tfunction init() {\n\t\tevents();\n\t}\n\n\tfunction events() {\n\t\t$musicPlayer = $('.rpmblock--banner__music');\n\t\tif(!$musicPlayer.length > 0) return;\n\t\t\n\t\t$musicPlayer.each(function(){\n\t\t\tlet $this = $(this);\n\t\t\tlet $button = $this.find('.rpmblock--banner__music-button');\n\t\t\tlet $player = $this.find('.rpmblock--banner__music-player');\n\t\t\t$button.on('click', function(){\n\t\t\t\tif($this.hasClass('active')) {\n\t\t\t\t\t$this.removeClass('active');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$this.addClass('active');\n\t\t\t})\n\t\t});\n\t}\n\n\treturn {\n\t\tinit: init,\n\t};\n})();\n","export const RPMCalendar = (function() {\n\t'use strict';\n\t\n\tlet weeklyCalendar;\n\t\n\tfunction init() {\n\t\tweekly();\n\t}\n\n\tfunction weekly() {\n\t\tweeklyCalendar = document.querySelector('#weekly-calendar');\n\t\tif(!weeklyCalendar) return;\n\t\t// console.log(weeklyCalendar);\n\n\t\tvar COMMONUTILS = {\n\t\t\tpageWidth: function() {\n\t\t\t\t\"use strict\";\n\t\t\t\t// console.log('sdsdfdsf');\n\t\t\t\treturn document.documentElement.clientWidth;\n\t\t\t},\n\n\t\t\t// FUNCTION TO EXECUTE CODE BASED ON LOCATION\n\t\t\tuserLocation: function() {\n\t\t\t\t\"use strict\";\n\n\t\t\t\t// let json = \n\n\t\t\t\t// console.log( weeklyCalendar.dataset.events );\n\n\t\t\t\tSCHEDULE.initWeekly();\n\t\t\t\tSCHEDULE.Fetch( weeklyCalendar.dataset.events,\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tSCHEDULE.Weekly(\"#weekly-calendar\");\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t};\n\n\t\t// NAMESPACE FOR SCHEDULE FUNCTIONS\n\t\tvar SCHEDULE = {\n\t\t\t// JSON results for show dates and times will be stored here\n\t\t\tTimes: null,\n\t\t\tAvail: null,\n\n\t\t\t// sched: 'calendar/_data/schedule.json?4',\n\t\t\tSchedule: null,\n\n\n\t\t\tgetData: function(schedule, targetdiv, href) {\n\n\t\t\t\t// console.log(\"schedule: \", schedule);\n\n\t\t\t\t$.getJSON(schedule, {\n\t\t\t\t\tformat: \"json\"\n\t\t\t\t}, function(data) {\n\n\t\t\t\t\t// data = JSON.stringify(data);\n\n\n\t\t\t\t\tvar dd = new Date();\n\t\t\t\t\tvar dn = dd.getMonth();\n\t\t\t\t\tdn++; // because months are 0 indexed\n\n\t\t\t\t\tfor (di = 0; di <= data.schedule_info.length; di++) { // changed < to <= to compare fill length\n\n\t\t\t\t\t\tcurrentMonth = Number(data.schedule_info[0].dateID);\n\n\t\t\t\t\t\tif (currentMonth < dn) {\n\t\t\t\t\t\t\tdata.schedule_info.shift();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\t//data.schedule_info.shift();\n\t\t\t\t\t// console.log(data.schedule_info[1].dateID);\n\n\n\n\t\t\t\t\t// SCHEDULE.Schedule = data;\n\t\t\t\t\t// console.log(SCHEDULE.Schedule)\n\t\t\t\t\t// var results = SCHEDULE.schedulePop(SCHEDULE.Schedule, href); //********\n\t\t\t\t\t// $(targetdiv).append(results);\n\n\n\t\t\t\t\t// HIDE ARROWS ON FIRST/LAST MONTHS\n\t\t\t\t\t$(\".cal-right\").click(function(e) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tvar months = $(\".month\").length - 1;\n\t\t\t\t\t\tvar next = $(\".month:visible\").index();\n\n\t\t\t\t\t\tif ($(\".cal-left\").hasClass(\"inactive\")) {\n\t\t\t\t\t\t\t$(\".cal-left\").removeClass(\"inactive\");\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif ($(\".month:visible\").index() < months) {\n\t\t\t\t\t\t\t$(\".month:visible\").hide();\n\t\t\t\t\t\t\t$(\".month\").eq(next).fadeIn(\"slow\");\n\t\t\t\t\t\t} else if ($(\".month:visible\").index() == months) {\n\t\t\t\t\t\t\t$(this).addClass(\"inactive\");\n\t\t\t\t\t\t\t$(\".month:visible\").hide();\n\t\t\t\t\t\t\t$(\".month\").eq(next).fadeIn(\"slow\");\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t$(\".cal-left\").click(function(e) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tvar months = 1;\n\t\t\t\t\t\tvar next = $(\".month:visible\").index() - 2;\n\t\t\t\t\t\tif ($(\".cal-right\").hasClass(\"inactive\")) {\n\t\t\t\t\t\t\t$(\".cal-right\").removeClass(\"inactive\");\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif ($(\".month:visible\").index() > months) {\n\t\t\t\t\t\t\t$(\".month:visible\").hide();\n\t\t\t\t\t\t\t$(\".month\").eq(next).fadeIn(\"slow\");\n\t\t\t\t\t\t} else if ($(\".month:visible\").index() == months) {\n\t\t\t\t\t\t\t$(this).addClass(\"inactive\");\n\t\t\t\t\t\t\t$(\".month:visible\").hide();\n\t\t\t\t\t\t\t$(\".month\").eq(next).fadeIn(\"slow\");\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t//COMMONUTILS.mobileTickets (\".ticket-link.premium-tickets, .month a\", \"10232\");\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t// Get JSON file, call appropriate parsing function after\n\t\t\tFetch: function(source, callback) {\n\t\t\t\tif(typeof source === 'string') {\n\t\t\t\t\tlet data = JSON.parse(source);\n\t\t\t\t\tSCHEDULE.Times = data.schedule_info;\n\t\t\t\t\tcallback();\n\t\t\t\t} else {\n\t\t\t\t\t$.getJSON(source, function(data) {\n\t\t\t\t\t\t// console.log('here', data);\n\t\t\t\t\t\t// Format dates if Ticketmaster calendar\n\t\t\t\t\t\tSCHEDULE.Times = data.schedule_info;\n\t\t\t\t\t\t// console.log('schedule times set');\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Populates Schedule Menu\n\t\t\tPopulateWeekly: function(container, eventslist) {\n\n\t\t\t\t// console.log('here', eventslist);\n\n\t\t\t\t//Append ticket links to corresponding date div\n\t\t\t\tfor (var i = 0; i < eventslist.length; i++) {\n\t\t\t\t\t//var eventDate = \".\" + eventslist[i].start.slice(-5);\n\t\t\t\t\tlet eventDate = \".\" + eventslist[i].start;\n\t\t\t\t\tlet eventTime = eventslist[i].title;\n\t\t\t\t\tlet isBest = eventslist[i].best ? 'event-time--best' : '';\n\t\t\t\t\tlet eventInfo;\n\n\t\t\t\t\teventTime = eventTime.replace(\":00 \", \"\");\n\n\t\t\t\t\t// var eventInfo = \"\" + eventTime + \"\";\n\n\t\t\t\t\tif (eventTime != \"3:00PM\") {\n\t\t\t\t\t\teventInfo = \"\" + eventTime + \"\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\teventInfo = \"\" + eventTime + \"\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Best availability (weekly on homepage)\n\t\t\t\t\t$('#weekly-calendar').find(eventDate).find(\".tc\").append(eventInfo);\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t// WEEKLY LINK FORMATTING\n\t\t\t// Call this for Ticketmaster calendars with direct performance ticket links\n\t\t\tWeekly: function(container) {\n\t\t\t\t// console.log('what', SCHEDULE.Times);\n\n\t\t\t\tvar eventslist = [];\n\n\t\t\t\t//Date fix\n\t\t\t\tvar calDate = new Date();\n\t\t\t\tcalDate.setDate(calDate.getDate() - 1);\n\n\t\t\t\t//var wDays = 0;\n\n\t\t\t\t// Format events for calendar\n\t\t\t\tfor (var i = 0; i < Object.keys(SCHEDULE.Times).length; i++) {\n\n\t\t\t\t\tvar showYear = SCHEDULE.Times[i].year;\n\t\t\t\t\tvar showMonth = SCHEDULE.Times[i].dateID;\n\t\t\t\t\tif (showMonth.length < 2 && showMonth < 10) { // +0 to front of time if needed\n\t\t\t\t\t\tvar zeroString = '0';\n\t\t\t\t\t\tshowMonth = zeroString.concat(showMonth);\n\t\t\t\t\t}\n\t\t\t\t\tvar linkMonth = showMonth;\n\t\t\t\t\tvar hoursKey = Object.keys(SCHEDULE.Times[i].hours);\n\n\t\t\t\t\tfor (var j = 0; j < hoursKey.length; j++) {\n\t\t\t\t\t\tvar showDay = hoursKey[j];\n\t\t\t\t\t\tvar timesKey = Object.keys(SCHEDULE.Times[i].hours[showDay]);\n\t\t\t\t\t\t// console.log(timesKey);\n\t\t\t\t\t\tfor (var k = 0; k < timesKey.length; k++) {\n\t\t\t\t\t\t\tvar eveMat = timesKey[k];\n\t\t\t\t\t\t\tvar theTime = SCHEDULE.Times[i].hours[showDay][eveMat];\n\t\t\t\t\t\t\tvar linkTime = theTime;\n\n\t\t\t\t\t\t\tif (linkTime && linkTime.length < 7) { // +0 to front of time if needed\n\t\t\t\t\t\t\t\tvar zeroString = '0';\n\t\t\t\t\t\t\t\tlinkTime = zeroString.concat(linkTime);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (eveMat != 'dark') {\n\n\t\t\t\t\t\t\t\tvar linkDay = (Number(showDay)+1).toString();\n\t\t\t\t\t\t\t\tif (linkDay.length < 2 && linkDay < 10) { // +0 to front of time if needed\n\t\t\t\t\t\t\t\t\tvar zs = '0';\n\t\t\t\t\t\t\t\t\tlinkDay = zs.concat(linkDay);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tlet showDate = linkMonth + \"/\" + linkDay + \"/\" + showYear;\n\t\t\t\t\t\t\t\tvar startDate = showYear + \"-\" + showMonth + \"-\" + linkDay;\n\n\t\t\t\t\t\t\t\tif (calDate <= new Date(startDate)) {\n\t\t\t\t\t\t\t\t\teventslist.push({\n\t\t\t\t\t\t\t\t\t\tstart: startDate, // previously: SCHEDULE.Times[i].date,\n\t\t\t\t\t\t\t\t\t\turl: 'http://www.telecharge.com/Broadway/Waitress/Ticket?PerformanceDateTime=' + showDate + '%20' + linkTime.time + 'PM',\n\t\t\t\t\t\t\t\t\t\ttitle: theTime.time + 'PM',\n\t\t\t\t\t\t\t\t\t\tbest: theTime.best,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\n\t\t\t\t\t};\n\t\t\t\t\t/*\n\t\t\t\t\twDays++;\n\t\t\t\t\tif (wDays == 7) { break; }\n\t\t\t\t\t*/\n\t\t\t\t}\n\t\t\t\tSCHEDULE.PopulateWeekly(container, eventslist);\n\t\t\t},\n\n\t\t\t//calendar creation function\n\t\t\tinitWeekly: function() {\n\n\t\t\t\tvar months = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n\n\t\t\t\tvar calText = \"\";\n\t\t\t\tdocument.getElementById(\"weekly-calendar\").innerHTML = calText;\n\n\t\t\t\tvar thisDay = new Date();\n\t\t\t\tvar weekday = new Array(7);\n\t\t\t\tweekday[0] = \"SUN\";\n\t\t\t\tweekday[1] = \"MON\";\n\t\t\t\tweekday[2] = \"TUE\";\n\t\t\t\tweekday[3] = \"WED\";\n\t\t\t\tweekday[4] = \"THU\";\n\t\t\t\tweekday[5] = \"FRI\";\n\t\t\t\tweekday[6] = \"SAT\";\n\n\t\t\t\t// get today's date\n\t\t\t\tvar d = thisDay.getDate();\n\t\t\t\tvar m = thisDay.getMonth();\n\t\t\t\tvar y = thisDay.getFullYear();\n\t\t\t\tvar n = weekday[thisDay.getDay()];\n\n\t\t\t\t// generate weekday names\n\t\t\t\tcalText += '
';\n\t\t\t\tfor (let i = thisDay.getDay(); i < thisDay.getDay() + 7; i++) {\n\t\t\t\t\tlet the_day = i;\n\t\t\t\t\tif (the_day > 6) {\n\t\t\t\t\t\tthe_day = the_day - 7;\n\t\t\t\t\t}\n\t\t\t\t\tcalText += '
' + weekday[the_day] + '
';\n\t\t\t\t}\n\t\t\t\tcalText += '
';\n\n\t\t\t\t//calText = '

' + months[m] + \" \" + y + '

CLICK ON A DATE TO BUY ONLINE.
Sun
Mon
Tue
Wed
Thu
Fri
Sat
';\n\n\t\t\t\tcalText += '
'; // open a week row\n\t\t\t\tfor (let j = 0; j < 14; j++) {\n\n\t\t\t\t\tvar d = thisDay.getDate();\n\t\t\t\t\tvar m = thisDay.getMonth();\n\t\t\t\t\tvar y = thisDay.getFullYear();\n\t\t\t\t\tvar n = weekday[thisDay.getDay()];\n\n\t\t\t\t\tif (m < 9) {\n\t\t\t\t\t\tif (d <= 9) {\n\t\t\t\t\t\t\tvar thisDate = y + \"-0\" + (m + 1) + \"-0\" + d;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar thisDate = y + \"-0\" + (m + 1) + \"-\" + d;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (d <= 9) {\n\t\t\t\t\t\t\tvar thisDate = y + \"-\" + (m + 1) + \"-0\" + d;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar thisDate = y + \"-\" + (m + 1) + \"-\" + d;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcalText += '

' + n + '

' + (m + 1) + '/' + d + '

';\n\t\t\t\t\t//calText += \"
\" + j + \"
\";\n\t\t\t\t\tcalText += '
';\n\t\t\t\t\t//ind++;\n\n\t\t\t\t\tthisDay.setDate(thisDay.getDate() + 1);\n\n\n\t\t\t\t\t// wrap after 7 days; change to a new week row\n\t\t\t\t\tif (j == 6) {\n\t\t\t\t\t\tcalText += '
';\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\tcalText += '
'; // close a week row\n\n\t\t\t\tdocument.getElementById(\"weekly-calendar\").innerHTML += calText;\n\n\t\t\t\tcalText = \"\";\n\n\n\t\t\t\t//}\n\n\t\t\t}\n\n\t\t};\n\n\t\tCOMMONUTILS.userLocation(COMMONUTILS.currentPage);\n\t}\n\n\n\treturn {\n\t\tinit: init\n\t};\n})();\n","export const RPMButtons = (function() {\n\t'use strict';\n\n\tfunction init() {\n\t\tevents();\n\t}\n\n\tfunction events() {}\n\n\treturn {\n\t\tinit: init\n\t};\n})();\n","/*!\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","import Glide from '@glidejs/glide';\n\nexport const RPMCallout = (function() {\n\t'use strict';\n\n\tlet $callouts;\n\n\tfunction init() {\n\t\t$callouts = $('.rpmblock--callout');\n\t\tevents();\n\t}\n\n\tfunction events() {\n\t\t$callouts.each(function(){\n\t\t\tlet $callout = $(this);\n\t\t\tlet $glides = $callout.find('.glide');\n\t\t\tif(!$glides) return;\n\t\t\t$glides.each(function(){\n\t\t\t\tlet glide = this;\n\t\t\t\tnew Glide(glide, {\n\t\t\t\t\ttype: 'carousel',\n\t\t\t\t\tperView: 1,\n\t\t\t\t\tautoplay: 5000,\n\t\t\t\t\thoverpause: true\n\t\t\t\t}).mount()\n\t\t\t});\n\t\t\t\n\t\t});\n\t}\n\n\treturn {\n\t\tinit: init\n\t};\n})();\n","export const RPMColumns = (function () {\n\t'use strict';\n\n\tfunction init() {\n\t\tevents();\n\t}\n\n\tfunction events() {}\n\n\treturn {\n\t\tinit: init,\n\t};\n})();\n","export const RPMCast = (function() {\n\t'use strict';\n\n\tlet $gallery;\n\n\tfunction init() {\n\t\tevents();\n\t}\n\n\tfunction hasNext(nextImage) {\n\t\t// console.log('next', nextImage);\n\t\tif(nextImage.hasClass('rpmblock--cast__member')) {\n\t\t\t$gallery.find('.rpmblock--gallery__nav-next button').prop(\"disabled\", false);\n\t\t}\n\t\telse {\n\t\t\t$gallery.find('.rpmblock--gallery__nav-next button').prop(\"disabled\", true);\n\t\t}\n\t}\n\n\tfunction hasPrev(prevImage) {\n\t\t// console.log('prev', prevImage);\n\t\tif(prevImage.hasClass('rpmblock--cast__member')) {\n\t\t\t$gallery.find('.rpmblock--gallery__nav-prev button').prop(\"disabled\", false);\n\t\t}\n\t\telse {\n\t\t\t$gallery.find('.rpmblock--gallery__nav-prev button').prop(\"disabled\", true);\n\t\t}\n\t}\n\n\tfunction events() {\n\t\t$gallery = $('.rpmblock--cast');\n\t\tlet $gallery_slides = $gallery.find('.rpmblock--cast__member');\n\t\tlet $gallery_prev = $gallery.find('.rpmblock--gallery__nav-prev');\n\t\tlet $gallery_next = $gallery.find('.rpmblock--gallery__nav-next');\n\t\tlet $close = $gallery.find('.modal__close');\n\n\t\tif( !$gallery_slides.length > 1 ) return;\n\n\t\t$gallery_slides.on('click', function(){\n\t\t\t// console.log('here');\n\t\t\thasPrev($gallery.find('.modal.is-open').parent().prev());\n\t\t\thasNext($gallery.find('.modal.is-open').parent().next());\n\t\t});\n\t\t$close.on('click',function(){\n\t\t\t// $gallery.find('.modal.is-open').removeClass('is-open');\n\t\t\t// $('body').removeClass('modal--is-open');\n\t\t\tMicroModal.close();\n\t\t\t$gallery.find('.modal.is-open').removeClass('is-open');\n\t\t});\n\t\t$gallery_prev.on('click', function(){\n\t\t\t$gallery.find('.modal.is-open').removeClass('is-open').parent().prev().find('.modal').addClass('is-open')\n\t\t\thasPrev($gallery.find('.modal.is-open').parent().prev());\n\t\t\thasNext($gallery.find('.modal.is-open').parent().next());\n\t\t});\n\t\t$gallery_next.on('click', function(){\n\t\t\t$gallery.find('.modal.is-open').removeClass('is-open').parent().next().find('.modal').addClass('is-open')\n\t\t\thasPrev($gallery.find('.modal.is-open').parent().prev());\n\t\t\thasNext($gallery.find('.modal.is-open').parent().next());\n\t\t});\n\n\t}\n\n\treturn {\n\t\tinit: init\n\t};\n})();\n","export const RPMCreative = (function() {\n\t'use strict';\n\n\tfunction init() {\n\t\tevents();\n\t}\n\n\tfunction events() {}\n\n\treturn {\n\t\tinit: init\n\t};\n})();\n","export const RPMGallery = (function() {\n\t'use strict';\n\n\tlet $gallery;\n\n\tfunction init() {\n\t\tevents();\n\t}\n\n\tfunction hasNext(nextImage) {\n\t\t// console.log('next', nextImage);\n\t\tif(nextImage.hasClass('rpmblock--gallery__image')) {\n\t\t\t$gallery.find('.rpmblock--gallery__nav-next button').prop(\"disabled\", false);\n\t\t}\n\t\telse {\n\t\t\t$gallery.find('.rpmblock--gallery__nav-next button').prop(\"disabled\", true);\n\t\t}\n\t}\n\n\tfunction hasPrev(prevImage) {\n\t\t// console.log('prev', prevImage);\n\t\tif(prevImage.hasClass('rpmblock--gallery__image')) {\n\t\t\t$gallery.find('.rpmblock--gallery__nav-prev button').prop(\"disabled\", false);\n\t\t}\n\t\telse {\n\t\t\t$gallery.find('.rpmblock--gallery__nav-prev button').prop(\"disabled\", true);\n\t\t}\n\t}\n\n\tfunction events() {\n\t\t$gallery = $('.rpmblock--gallery__images');\n\t\tlet $gallery_slides = $gallery.children('.rpmblock--gallery__image');\n\t\tlet $gallery_prev = $gallery.find('.rpmblock--gallery__nav-prev');\n\t\tlet $gallery_next = $gallery.find('.rpmblock--gallery__nav-next');\n\t\tlet $close = $gallery.find('.modal__close');\n\n\t\tif( !$gallery_slides.length > 1 ) return;\n\n\t\t$gallery_slides.on('click', function(){\n\t\t\t// console.log('here');\n\t\t\thasPrev($gallery.find('.modal.is-open').parent().prev());\n\t\t\thasNext($gallery.find('.modal.is-open').parent().next());\n\t\t});\n\t\t$close.on('click',function(){\n\t\t\tMicroModal.close();\n\t\t\t$gallery.find('.modal.is-open').removeClass('is-open');\n\t\t\t// $('body').removeClass('modal--is-open');\n\t\t});\n\t\t$gallery_prev.on('click', function(){\n\t\t\t$gallery.find('.modal.is-open').removeClass('is-open').parent().prev().find('.modal').addClass('is-open')\n\t\t\thasPrev($gallery.find('.modal.is-open').parent().prev());\n\t\t\thasNext($gallery.find('.modal.is-open').parent().next());\n\t\t});\n\t\t$gallery_next.on('click', function(){\n\t\t\t$gallery.find('.modal.is-open').removeClass('is-open').parent().next().find('.modal').addClass('is-open')\n\t\t\thasPrev($gallery.find('.modal.is-open').parent().prev());\n\t\t\thasNext($gallery.find('.modal.is-open').parent().next());\n\t\t});\n\n\t}\n\n\treturn {\n\t\tinit: init\n\t};\n})();\n","export const RPMNewsletter = (function() {\n\t'use strict';\n\n\tfunction init() {\n\t\tevents();\n\t}\n\n\tfunction events() {}\n\n\treturn {\n\t\tinit: init\n\t};\n})();\n","export const RPMImage = (function() {\n\t'use strict';\n\n\tfunction init() {\n\t\tevents();\n\t}\n\n\tfunction events() {}\n\n\treturn {\n\t\tinit: init\n\t};\n})();\n","export const RPMText = (function () {\n\t'use strict';\n\n\tfunction init() {\n\t\tevents();\n\t}\n\n\tfunction events() {}\n\n\treturn {\n\t\tinit: init,\n\t};\n})();\n"],"names":["$musicPlayer","weeklyCalendar","RPMBanner","init","$","length","each","$this","this","$button","find","on","hasClass","removeClass","addClass","RPMButtons","RPMCalendar","document","querySelector","COMMONUTILS","pageWidth","documentElement","clientWidth","userLocation","SCHEDULE","initWeekly","Fetch","dataset","events","Weekly","Times","Avail","Schedule","getData","schedule","targetdiv","href","getJSON","format","data","dn","Date","getMonth","di","schedule_info","currentMonth","Number","dateID","shift","click","e","preventDefault","months","next","index","hide","eq","fadeIn","source","callback","JSON","parse","PopulateWeekly","container","eventslist","i","eventDate","start","eventTime","title","isBest","best","eventInfo","replace","url","append","calDate","setDate","getDate","Object","keys","showYear","year","showMonth","concat","linkMonth","hoursKey","hours","j","showDay","timesKey","k","eveMat","theTime","linkTime","linkDay","toString","showDate","startDate","push","time","calText","getElementById","innerHTML","thisDay","weekday","Array","d","m","y","getFullYear","getDay","the_day","thisDate","currentPage","weekly","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","descriptor","enumerable","configurable","writable","defineProperty","key","protoProps","staticProps","_extends","assign","arguments","hasOwnProperty","call","get","object","property","receiver","Function","desc","getOwnPropertyDescriptor","undefined","parent","getPrototypeOf","value","getter","possibleConstructorReturn","self","ReferenceError","toInt","parseInt","isString","isObject","isFunction","isUndefined","isArray","mount","glide","extensions","components","name","_name","define","prop","definition","mergeOptions","settings","options","EventsBus","hop","event","handler","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","now","getTime","func","wait","timeout","args","result","previous","later","leading","apply","throttled","at","remaining","clearTimeout","trailing","setTimeout","cancel","MARGIN_TYPE","siblings","node","parentNode","n","firstChild","matched","nextSibling","nodeType","exist","window","HTMLElement","TRACK_SELECTOR","EventsBinder","listeners","el","closure","capture","addEventListener","removeEventListener","VALID_DIRECTIONS","FLIPED_MOVEMENTS","Rtl","Components","modify","translate","Direction","is","Gap","Gaps","Grow","Clones","grow","Peeking","Peek","before","Focusing","width","Sizes","slideWidth","supportsPassive","opts","supportsPassive$1","START_EVENTS","MOVE_EVENTS","END_EVENTS","MOUSE_EVENTS","sortBreakpoints","points","sort","reduce","r","COMPONENTS","Html","root","track","slides","slice","wrapper","children","filter","slide","classList","contains","_r","t","Translate","Events","transform","TRANSFORMERS","mutate","transformer","mutator","style","isType","isOffset","after","movement","compose","duration","transition","enable","offset","resolve","token","split","join","add","_v","indexOf","setupSlides","setupWrapper","dimention","wrapperSize","offsetWidth","reductor","len","marginLeft","marginRight","_this","items","collect","_Glide$settings","peekIncrementer","part","end","Math","max","floor","clone","cloneNode","_clone","unshift","_Components$Html","half","prepend","reverse","appendChild","_i2","insertBefore","_i3","removeChild","Resize","Binder","bind","unbind","off","destroy","Build","typeClass","activeClass","sibling","removeClasses","move","calculate","isStart","isEnd","steps","countableSteps","min","_m","step","substr","Swipe","swipeSin","swipeStartX","swipeStartY","passive","bindSwipeStart","swipe","touches","pageX","pageY","bindSwipeMove","bindSwipeEnd","subExSx","subEySy","powEX","abs","powEY","swipeHypotenuse","sqrt","swipeCathetus","asin","PI","stopPropagation","parseFloat","threshold","swipeDistance","swipeDeg","round","unbindSwipeMove","unbindSwipeEnd","unbindSwipeStart","_this2","_this3","changedTouches","Images","dragstart","Anchors","detached","prevented","_a","querySelectorAll","detach","draggable","setAttribute","getAttribute","removeAttribute","attach","Controls","_n","addBindings","setActive","removeActive","controls","removeBindings","elements","currentTarget","Keyboard","press","keyCode","Autoplay","setInterval","stop","clearInterval","Breakpoints","match","matchMedia","point","matches","Glide$1","_Core","Glide$$1","__proto__","subClass","superClass","create","setPrototypeOf","inherits","RPMCallout","$glides","RPMColumns","RPMCast","$gallery","hasNext","nextImage","hasPrev","prevImage","$gallery_slides","$gallery_prev","$gallery_next","$close","prev","MicroModal","close","RPMCreative","RPMGallery","RPMNewsletter","RPMImage","RPMText"],"mappings":"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"}