{"version":3,"sources":["node_modules/browser-pack/_prelude.js","bundle.js","helpers/carouselRange.ts","library/components/cardGrid/cardGrid.ts","library/components/careersCarousel/careersCarousel.ts","library/components/featureBanner/featureBanner.ts","library/components/featureCarousel/featureCarousel.ts","library/components/filterElement/filterElement.ts","library/components/fullMediaCarousel/fullMediaCarousel.ts","library/components/fullWidthMedia/fullWidthMedia.ts","library/components/header/header.ts","library/components/iconCardCarousel/iconCardCarousel.ts","library/components/imageCardCarousel/imageCardCarousel.ts","library/components/itemCardCarousel/itemCardCarousel.ts","library/components/largeIconsGrid/largeIconsGrid.ts","library/components/logoCarousel/logoCarousel.ts","library/components/mediaCarousel/mediaCarousel.ts","library/components/mediaWithText/mediaWithText.ts","library/components/miniIconsGrid/miniIconsGrid.ts","library/components/mobileMenu/mobileMenu.ts","library/components/pageCardCarousel/pageCardCarousel.ts","library/components/pagination/pagination.ts","library/components/quickLinks/quickLinks.ts","library/components/statsComponent/statsComponent.ts","library/components/testimonials/testimonials.ts","library/components/videoComponent/videoComponent.ts","node_modules/@glidejs/glide/dist/glide.js"],"names":["f","exports","module","define","amd","window","global","self","this","Bundle","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","Object","defineProperty","value","handlePadding","handleContainerPaddingLeft","handleCarouselButtons","setRangeMax","arr","input","perView","totalSlides","max","steps","Math","ceil","toString","setRangeThumbWidth","Number","carousel","glide","buttons","querySelector","classList","add","disable","remove","enable","container","innerWidth","style","setProperty","2","cardGridFilters_1","paginationElement_1","grid_1","labels_1","parentId_1","types_1","topics_1","pageSize_1","pageNumber_1","hasNextPage_1","hasPreviousPage_1","totalCount_1","totalPages_1","cards_1","baseURL_1","fetchData_1","setPaginationData_1","renderCards_1","getFilters_1","generateFilterString_1","createTagListener_1","disableFilters_1","enableFilters_1","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","result","done","then","rejected","apply","__generator","body","y","_","sent","trys","ops","g","verb","throw","return","Symbol","iterator","v","TypeError","op","label","pop","push","__importDefault","mod","__esModule","default","filterElement_1","pagination_1","cardGrid","document","cardGridTrigger","querySelectorAll","getAttribute","location","origin","error_1","_a","disablePagination","url","fetch","headers","Content-Type","response","ok","json","statusText","data","items","enablePagination","innerHTML","console","error","totalPages","totalItems","hasNextPage","hasPreviousPage","updatePagination","forEach","card","cardElement","createElement","href","link","className","imageUrl","title","featureTag","date","mediaType","content","name","appendChild","filters","filter","category","array","string","item","tag","addEventListener","key","tags","setAttribute","disabled","toggle","li","target","tagName","closest","contains","parseInt","textContent","../filterElement/filterElement","../pagination/pagination","3","glide_1","carouselRange_1","careerCarousels","type","gap","bound","rewind","breakpoints","1200","800","600","480","carouselRange","mount","carouselContainer","setTimeout","go","parentElement","slides","settings","on","currentIndex","index","flex","../../../helpers/carouselRange","@glidejs/glide","4","resetFeatureBannerVideo","currentHour","featureBannerVideos","Date","getHours","Array","from","5","featureCarousels","760","550","featureCarouselContainer","6","closeAllDropdowns","selectedFilters","removeTag","button","removeChild","toggleBottom","children","bottom","dropdown","dropdownButton","createTagListener","checkbox","find","cb","checked","lbl","findIndex","splice","stopPropagation","num","handleEvent","preventDefault","some","7","fullMediaCarousels","mediaItems","leftButton","rightButton","featureBannerVideosArray","fullMediaVideoContainer","fullMediaButton","fullMediaContent","fullMediaVideo","play","9","trigger","nextElementSibling","display","opacity","event","_this","activeElement","10","iconCarousels","992","450","11","imageCardCarouselContainer","12","13","itemCardCarousels","14","largeIconGrid","cards","mobilePerView","largeIconsCarouselRange","itemCount","rightArrow","leftArrow","largeIconsCurrentIndex","rangeMax","width","15","handleCarouselWidth","glideSlides","clientWidth","1300","1100","16","mediaCarousels","componentType","peek","before","after","1380","1180","900","700","playButtons","videos","modals","closeVideoModal","video","pause","currentTime","modal","close","showModal","id","17","videoContainer","placeholder","18","miniIconsCarouselRange","miniIconsCurrentIndex","19","mobileMenuIcon","mobileMenuButton","mobileMenu","html","handleMenuIcon","closeNestedLinks","overflow","nestedLink","titleElement","itemId","nestedLinks","backButton","20","21","paginationElements","element","page","allPages","itemsPerPage","text","liTag","renderedPages","Set","min","has","startMiddleRange","endMiddleRange","createPagination","22","quickLinksSelect","23","countersArray_1","countersContainerArray_1","counters","countersContainer","bounding","getBoundingClientRect","top","left","right","documentElement","innerHeight","clientHeight","isCounterInViewport","counter","updateCount","count","24","25","videoContainerComponent","videoComponentButton","videoComponentVideo","showVideoComponentVideo","26","factory","_typeof","obj","constructor","prototype","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","enumerable","configurable","writable","_createClass","protoProps","staticProps","_getPrototypeOf","setPrototypeOf","getPrototypeOf","__proto__","_setPrototypeOf","_possibleConstructorReturn","ReferenceError","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","NewTarget","Super","arguments","_get","get","property","receiver","base","object","hasOwnProperty","_superPropBase","desc","getOwnPropertyDescriptor","defaults","startAt","focusAt","autoplay","hoverpause","keyboard","swipeThreshold","dragThreshold","perSwipe","touchRatio","touchAngle","animationDuration","rewindDuration","animationTimingFunc","waitForTransition","throttle","direction","cloningRatio","classes","swipeable","dragging","ltr","rtl","slider","slide","clone","active","arrow","nav","warn","msg","concat","toInt","isString","isObject","isFunction","isUndefined","isArray","prop","definition","mergeOptions","options","assign","EventsBus","events","undefined","hop","handler","context","emit","Glide$1","Glide","selector","_c","_t","_e","extensions","_name","components","transformers","pattern","Run","make","distance","Transition","Move","interval","_o","set","_i","_d","status","now","getTime","func","wait","later","previous","leading","timeout","args","throttled","at","remaining","clearTimeout","trailing","cancel","MARGIN_TYPE","siblings","node","parentNode","firstChild","matched","nextSibling","nodeType","exist","HTMLElement","toArray","nodeList","slice","TRACK_SELECTOR","EventsBinder","listeners","el","closure","capture","removeEventListener","VALID_DIRECTIONS","FLIPED_MOVEMENTS",">","<","=","Rtl","Components","modify","translate","Direction","is","mutator","Events","TRANSFORMERS","multiplier","floor","Sizes","slideWidth","Gaps","Clones","grow","Peek","mutate","transformer","supportsPassive","opts","supportsPassive$1","START_EVENTS","MOVE_EVENTS","END_EVENTS","MOUSE_EVENTS","CONTROLS_SELECTOR","PREVIOUS_CONTROLS_SELECTOR","NEXT_CONTROLS_SELECTOR","sortBreakpoints","points","keys","sort","reduce","k","COMPONENTS","Html","root","track","collectSlides","wrapper","_r","Translate","transform","translate3d","mozTransform","webkitTransform","getStartIndex","isOffset","getTravelDistance","travelDistance","isType","movement","startWidth","compose","duration","transition","callback","offset","token","split","join","addClass","removeClass","_v","indexOf","setupSlides","setupWrapper","wrapperSize","offsetWidth","reductor","len","marginLeft","marginRight","collect","_Glide$settings","cloneCount","round","append","reverse","prepend","cloneNode","_clone","unshift","_Components$Html","half","_i2","insertBefore","_i3","Resize","Binder","bind","unbind","off","destroy","Build","typeClass","activeClass","sibling","removeClasses","_Glide$settings$class","move","calculate","isStart","isEnd","viewSize","calculateForwardIndex","isBound","normalizeForwardIndex","_index","calculateBackwardIndex","normalizeBackwardIndex","_m","substr","Swipe","swipeSin","swipeStartX","swipeStartY","passive","bindSwipeStart","start","swipe","touches","pageX","pageY","bindSwipeMove","bindSwipeEnd","subExSx","subEySy","powEX","abs","powEY","swipeHypotenuse","sqrt","swipeCathetus","asin","PI","parseFloat","end","swipeDistance","swipeDeg","_Glide$settings2","threshold","unbindSwipeMove","unbindSwipeEnd","_Glide$settings3","unbindSwipeStart","_this2","_this3","changedTouches","Images","dragstart","Anchors","detached","prevented","click","detach","draggable","attach","Controls","_n","_arrowControls","addBindings","setActive","removeActive","controls","setArrowState","resetArrowState","disableArrow","_len","lists","_key","list","_len2","_key2","removeBindings","elements","currentTarget","Keyboard","press","Autoplay","setInterval","stop","time","clearInterval","Breakpoints","match","matchMedia","point","matches","_inherits","subClass","superClass","create","_super","globalThis"],"mappings":"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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar filterElement_1 = __importDefault(require(\"../filterElement/filterElement\"));\r\nvar pagination_1 = require(\"../pagination/pagination\");\r\nvar cardGrid = document.querySelector(\".card-grid\");\r\nif (cardGrid) {\r\n var cardGridFilters_1 = cardGrid.querySelector(\".card-grid__filters\");\r\n var cardGridTrigger = cardGrid.querySelector(\".card-grid__trigger\");\r\n var paginationElement_1 = cardGrid.querySelector(\".pagination\");\r\n var grid_1 = cardGrid.querySelector(\".card-grid__grid\");\r\n var labels_1 = cardGrid.querySelectorAll('.filters__dropdown-content label');\r\n var parentId_1 = cardGrid.getAttribute(\"data-parent-id\");\r\n var types_1 = [];\r\n var topics_1 = [];\r\n var pageSize_1 = 8;\r\n var pageNumber_1 = 1;\r\n var hasNextPage_1 = false;\r\n var hasPreviousPage_1 = false;\r\n var totalCount_1 = 0;\r\n var totalPages_1 = 0;\r\n var cards_1 = [];\r\n var baseURL_1 = window.location.origin;\r\n var fetchData_1 = function () { return __awaiter(void 0, void 0, void 0, function () {\r\n var url, response, data, error_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n pagination_1.disablePagination(paginationElement_1);\r\n disableFilters_1();\r\n getFilters_1();\r\n url = baseURL_1 + \"/umbraco/api/imagecards/GetChildPages?parentId=\" + parentId_1 + \"&page=\" + pageNumber_1 + \"&pageSize=\" + pageSize_1 + generateFilterString_1(\"featureTags\", topics_1) + generateFilterString_1(\"mediaTypes\", types_1);\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 4, , 5]);\r\n return [4, fetch(url, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n }\r\n })];\r\n case 2:\r\n response = _a.sent();\r\n if (!response.ok) {\r\n throw new Error('Network response was not ok ' + response.statusText);\r\n }\r\n return [4, response.json()];\r\n case 3:\r\n data = _a.sent();\r\n cards_1 = data.items;\r\n setPaginationData_1(data);\r\n renderCards_1();\r\n pagination_1.enablePagination(paginationElement_1);\r\n enableFilters_1();\r\n return [3, 5];\r\n case 4:\r\n error_1 = _a.sent();\r\n grid_1.innerHTML = \"There was an error\";\r\n console.error('There was a problem with the fetch operation:', error_1);\r\n return [3, 5];\r\n case 5: return [2];\r\n }\r\n });\r\n }); };\r\n var setPaginationData_1 = function (data) {\r\n totalPages_1 = data.totalPages;\r\n totalCount_1 = data.totalItems;\r\n hasNextPage_1 = data.hasNextPage;\r\n hasPreviousPage_1 = data.hasPreviousPage;\r\n pagination_1.updatePagination(pageNumber_1, totalPages_1, totalCount_1, pageSize_1, hasNextPage_1, hasPreviousPage_1);\r\n };\r\n var renderCards_1 = function () {\r\n grid_1.innerHTML = \"\";\r\n if (cards_1.length > 0) {\r\n cards_1.forEach(function (card) {\r\n var cardElement = document.createElement(\"a\");\r\n cardElement.href = card.link.url;\r\n cardElement.className = \"card-grid__card flex flex--column\";\r\n cardElement.innerHTML = \"\\n \" + (card.imageUrl ? \"\\n
\\n \" + card.title + \"\\n\\n \" + (card.featureTag ? \"\\n
\\n \" + card.featureTag + \"\\n
\"\r\n : \"\") + \"\\n\\n
\"\r\n : \"\") + \"\\n
\\n \" + (card.featureTag && !card.imageUrl ? \"\\n
\\n \" + card.featureTag + \"\\n
\"\r\n : \"\") + \"\\n
\\n\\n \" + (card.date ? \"\\n \\n \" + card.date + \"\\n \"\r\n : \"\") + \"\\n\\n \" + card.mediaType + \"\\n
\\n

\\n \" + card.title + \"\\n

\\n

\\n \" + card.content + \"\\n

\\n \\n
\\n \";\r\n grid_1.appendChild(cardElement);\r\n });\r\n }\r\n else {\r\n grid_1.innerHTML = \"No results found\";\r\n }\r\n };\r\n var getFilters_1 = function () {\r\n var filters = filterElement_1.default;\r\n types_1 = [];\r\n topics_1 = [];\r\n filters.forEach(function (filter) {\r\n if (filter.category === 0) {\r\n types_1.push(filter.name);\r\n }\r\n else if (filter.category === 1) {\r\n topics_1.push(filter.name);\r\n }\r\n });\r\n };\r\n var generateFilterString_1 = function (category, array) {\r\n var string = \"\";\r\n if (array.length > 0) {\r\n string += \"&\";\r\n }\r\n array.forEach(function (item, i) {\r\n string += category + \"=\" + item;\r\n if (i < array.length - 1) {\r\n string += \"&\";\r\n }\r\n });\r\n return string;\r\n };\r\n var createTagListener_1 = function () {\r\n var tags = cardGrid.querySelectorAll(\".filters__tag\");\r\n tags.forEach(function (tag) {\r\n tag.addEventListener(\"click\", function () {\r\n pageNumber_1 = 1;\r\n fetchData_1();\r\n });\r\n tag.addEventListener('keydown', function (e) {\r\n if (e.key === 'Enter') {\r\n pageNumber_1 = 1;\r\n fetchData_1();\r\n }\r\n });\r\n });\r\n };\r\n var disableFilters_1 = function () {\r\n var tags = cardGrid.querySelectorAll(\".filters__tag\");\r\n labels_1.forEach(function (label) {\r\n label.classList.add(\"filters__dropdown-label--disabled\");\r\n label.setAttribute(\"tabindex\", \"-1\");\r\n });\r\n tags.forEach(function (tag) {\r\n tag.disabled = true;\r\n });\r\n };\r\n var enableFilters_1 = function () {\r\n var tags = cardGrid.querySelectorAll(\".filters__tag\");\r\n labels_1.forEach(function (label) {\r\n label.classList.remove(\"filters__dropdown-label--disabled\");\r\n label.setAttribute(\"tabindex\", \"0\");\r\n });\r\n tags.forEach(function (tag) {\r\n tag.disabled = false;\r\n });\r\n };\r\n labels_1.forEach(function (label) {\r\n label.addEventListener(\"click\", function () {\r\n pageNumber_1 = 1;\r\n fetchData_1();\r\n createTagListener_1();\r\n });\r\n label.addEventListener('keydown', function (e) {\r\n if (e.key === 'Enter') {\r\n pageNumber_1 = 1;\r\n fetchData_1();\r\n createTagListener_1();\r\n }\r\n });\r\n });\r\n if (cardGridTrigger) {\r\n cardGridTrigger.addEventListener(\"click\", function () {\r\n cardGridFilters_1.classList.toggle(\"card-grid__filters--active\");\r\n });\r\n }\r\n paginationElement_1.addEventListener(\"click\", function (e) {\r\n var target = e.target;\r\n if (target.tagName === 'BUTTON') {\r\n var li = target.closest('button');\r\n if (li.classList.contains('prev')) {\r\n pageNumber_1 = pageNumber_1 - 1;\r\n }\r\n else if (li.classList.contains('next')) {\r\n pageNumber_1 = pageNumber_1 + 1;\r\n }\r\n else if (li.classList.contains('pagination__numb')) {\r\n pageNumber_1 = parseInt(target.textContent);\r\n }\r\n pagination_1.disablePagination(paginationElement_1);\r\n fetchData_1();\r\n pagination_1.updatePagination(pageNumber_1, totalPages_1, totalCount_1, pageSize_1, hasNextPage_1, hasPreviousPage_1);\r\n }\r\n });\r\n fetchData_1();\r\n}\r\n},{\"../filterElement/filterElement\":6,\"../pagination/pagination\":21}],3:[function(require,module,exports){\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar glide_1 = __importDefault(require(\"@glidejs/glide\"));\r\nvar carouselRange_1 = require(\"../../../helpers/carouselRange\");\r\nvar careerCarousels = document.querySelectorAll('.careers-carousel__inner');\r\nif (careerCarousels.length > 0) {\r\n careerCarousels.forEach(function (item) {\r\n var glide = new glide_1.default(item, {\r\n type: 'slider',\r\n perView: 3,\r\n gap: 60,\r\n bound: true,\r\n rewind: false,\r\n breakpoints: {\r\n 1200: {\r\n perView: 3,\r\n gap: 30,\r\n },\r\n 800: {\r\n perView: 1.7,\r\n gap: 30,\r\n },\r\n 600: {\r\n perView: 1.4,\r\n gap: 30,\r\n },\r\n 480: {\r\n perView: 1.2,\r\n gap: 30,\r\n },\r\n },\r\n });\r\n glide.mount();\r\n var carouselRange = item.querySelector('.careers-carousel__range');\r\n carouselRange.addEventListener('input', function (e) {\r\n setTimeout(function () {\r\n glide.go(\"=\" + carouselRange.value);\r\n }, 500);\r\n });\r\n var carouselContainer = item.parentElement;\r\n var slides = item.querySelectorAll('.careers-carousel__item');\r\n carouselRange_1.setRangeMax(slides, carouselRange, glide.settings.perView);\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n glide.on('move.after', function () {\r\n var currentIndex = glide.index;\r\n carouselRange.value = currentIndex;\r\n });\r\n glide.on('resize', function () {\r\n carouselRange_1.setRangeMax(slides, carouselRange, glide.settings.perView);\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n carouselRange_1.handlePadding(slides, glide.settings.perView, carouselContainer);\r\n glide.go(\"=0\");\r\n });\r\n if (slides.length < 3) {\r\n var carouselItems = item.querySelectorAll('.careers-carousel__item');\r\n carouselItems.forEach(function (item) {\r\n item.style.flex = \"1\";\r\n });\r\n }\r\n });\r\n}\r\n},{\"../../../helpers/carouselRange\":1,\"@glidejs/glide\":26}],4:[function(require,module,exports){\nvar featureBannerVideos = document.querySelectorAll(\".feature-banner__video\");\r\nvar featureBannerVideosMorning = document.querySelectorAll(\".feature-banner__video-morning\");\r\nvar featureBannerVideosAfternoon = document.querySelectorAll(\".feature-banner__video-afternoon\");\r\nvar featureBannerVideosEvening = document.querySelectorAll(\".feature-banner__video-evening\");\r\nif (featureBannerVideos) {\r\n getLocation();\r\n function getLocation() {\r\n var now = new Date();\r\n var currentHour = now.getHours();\r\n var featureBannerVideosArray = Array.from(featureBannerVideos);\r\n featureBannerVideosArray.forEach(function (item) {\r\n resetFeatureBannerVideo(item);\r\n switch (true) {\r\n case currentHour < 6:\r\n item.classList.contains(\"feature-banner__video-morning\") && item.classList.add(\"feature-banner__video--active\");\r\n break;\r\n case currentHour >= 6 && currentHour < 12:\r\n item.classList.contains(\"feature-banner__video-morning\") && item.classList.add(\"feature-banner__video--active\");\r\n break;\r\n case currentHour >= 12 && currentHour <= 17:\r\n item.classList.contains(\"feature-banner__video-afternoon\") && item.classList.add(\"feature-banner__video--active\");\r\n break;\r\n case currentHour > 17:\r\n item.classList.contains(\"feature-banner__video-evening\") && item.classList.add(\"feature-banner__video--active\");\r\n break;\r\n default:\r\n item.classList.contains(\"feature-banner__video-morning\") && item.classList.add(\"feature-banner__video--active\");\r\n break;\r\n }\r\n });\r\n }\r\n function resetFeatureBannerVideo(item) {\r\n item.classList.remove(\"feature-banner__video--active\");\r\n }\r\n}\r\n},{}],5:[function(require,module,exports){\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar glide_1 = __importDefault(require(\"@glidejs/glide\"));\r\nvar carouselRange_1 = require(\"../../../helpers/carouselRange\");\r\nvar featureCarousels = document.querySelectorAll('.feature-carousel__inner');\r\nif (featureCarousels.length > 0) {\r\n featureCarousels.forEach(function (item) {\r\n var glide = new glide_1.default(item, {\r\n type: 'slider',\r\n perView: 3.52,\r\n gap: 20,\r\n bound: true,\r\n rewind: false,\r\n breakpoints: {\r\n 1200: {\r\n perView: 2.5,\r\n },\r\n 760: {\r\n perView: 1.7,\r\n },\r\n 550: {\r\n perView: 1.2,\r\n },\r\n },\r\n });\r\n glide.mount();\r\n var featureCarouselContainer = item.parentElement;\r\n var carouselRange = item.querySelector('.feature-carousel__range');\r\n carouselRange.addEventListener('input', function (e) {\r\n setTimeout(function () {\r\n glide.go(\"=\" + carouselRange.value);\r\n }, 500);\r\n });\r\n var slides = item.querySelectorAll('.feature-carousel__item');\r\n carouselRange_1.setRangeMax(slides, carouselRange, glide.settings.perView);\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n carouselRange_1.handleContainerPaddingLeft(slides, glide.settings.perView, featureCarouselContainer);\r\n glide.on('move.after', function () {\r\n var currentIndex = glide.index;\r\n carouselRange.value = currentIndex;\r\n });\r\n glide.on('resize', function () {\r\n carouselRange_1.setRangeMax(slides, carouselRange, glide.settings.perView);\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n carouselRange_1.handleContainerPaddingLeft(slides, glide.settings.perView, featureCarouselContainer);\r\n glide.go(\"=0\");\r\n });\r\n if (slides.length < 3) {\r\n var carouselItems = item.querySelectorAll('.feature-carousel__item');\r\n carouselItems.forEach(function (item) {\r\n item.style.flex = \"1\";\r\n });\r\n }\r\n });\r\n}\r\n},{\"../../../helpers/carouselRange\":1,\"@glidejs/glide\":26}],6:[function(require,module,exports){\n\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar filters = document.querySelectorAll(\".filters\");\r\nvar selectedFilters = [];\r\nvar closeAllDropdowns = function () {\r\n var contents = document.querySelectorAll(\".filters__dropdown-content\");\r\n contents.forEach(function (item) { return item.classList.remove(\"filters__dropdown-content--active\"); });\r\n};\r\ndocument.addEventListener('click', closeAllDropdowns);\r\ndocument.addEventListener('keydown', function (e) {\r\n if (e.key === 'Escape') {\r\n closeAllDropdowns();\r\n }\r\n});\r\nfilters.forEach(function (filter, i) {\r\n var tags = filter.querySelector(\".filters__tags\");\r\n var dropdown = filter.querySelector('.filters__dropdown-content');\r\n var dropdownButton = filter.querySelector('.filters__dropdown-button');\r\n var bottom = filter.querySelector('.filters__bottom');\r\n var createTag = function (tag) {\r\n var value = tag;\r\n var button = document.createElement(\"button\");\r\n button.className = \"flex flex--align-center filters__tag\";\r\n button.innerHTML = \"\\n \" + value + \"\\n \\n \";\r\n createTagListener(button, value);\r\n tags.appendChild(button);\r\n };\r\n var removeTag = function (value) {\r\n var buttons = document.querySelectorAll('.filters__tag');\r\n buttons.forEach(function (button) {\r\n var buttonValue = button.querySelector('.filters__tag-name').textContent;\r\n if (buttonValue === value) {\r\n button.parentElement.removeChild(button);\r\n }\r\n });\r\n };\r\n var createTagListener = function (button, value) {\r\n button.addEventListener(\"click\", function () {\r\n removeTag(value);\r\n var checkbox = Array.from(document.querySelectorAll(\"input[type='checkbox']\")).find(function (cb) { return cb.value === value; });\r\n if (checkbox) {\r\n checkbox.checked = false;\r\n }\r\n var label = Array.from(document.querySelectorAll('.filters__dropdown-content label')).find(function (lbl) { return lbl.querySelector(\"input\").value === value; });\r\n if (label) {\r\n label.classList.remove(\"filters__dropdown-label--active\");\r\n }\r\n var index = selectedFilters.findIndex(function (filter) { return filter.name === value; });\r\n if (index > -1) {\r\n selectedFilters.splice(index, 1);\r\n }\r\n toggleBottom();\r\n });\r\n };\r\n var toggleBottom = function () {\r\n if (tags.children.length > 0) {\r\n bottom.classList.add(\"filters__bottom--active\");\r\n }\r\n else {\r\n bottom.classList.remove(\"filters__bottom--active\");\r\n }\r\n };\r\n dropdownButton.addEventListener('click', function (e) {\r\n e.stopPropagation();\r\n var contents = document.querySelectorAll(\".filters__dropdown-content\");\r\n contents.forEach(function (item, num) {\r\n if (num !== i) {\r\n item.classList.remove(\"filters__dropdown-content--active\");\r\n }\r\n });\r\n if (dropdown.classList.contains(\"filters__dropdown-content--active\")) {\r\n dropdown.classList.remove(\"filters__dropdown-content--active\");\r\n }\r\n else {\r\n dropdown.classList.add(\"filters__dropdown-content--active\");\r\n }\r\n });\r\n var labels = filter.querySelectorAll('.filters__dropdown-content label');\r\n labels.forEach(function (label) {\r\n var handleEvent = function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n var checkbox = label.querySelector(\"input\");\r\n checkbox.checked = !checkbox.checked;\r\n if (checkbox.checked) {\r\n if (!selectedFilters.some(function (filter) { return filter.name === checkbox.value; })) {\r\n selectedFilters.push({ name: checkbox.value, category: i });\r\n createTag(checkbox.value);\r\n }\r\n }\r\n else {\r\n var index = selectedFilters.findIndex(function (filter) { return filter.name === checkbox.value; });\r\n if (index > -1) {\r\n selectedFilters.splice(index, 1);\r\n removeTag(checkbox.value);\r\n }\r\n }\r\n label.classList.toggle(\"filters__dropdown-label--active\", checkbox.checked);\r\n toggleBottom();\r\n };\r\n label.addEventListener('click', handleEvent);\r\n label.addEventListener('keydown', function (e) {\r\n if (e.key === 'Enter') {\r\n handleEvent(e);\r\n }\r\n });\r\n });\r\n});\r\nexports.default = selectedFilters;\r\n},{}],7:[function(require,module,exports){\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar glide_1 = __importDefault(require(\"@glidejs/glide\"));\r\nvar fullMediaCarousels = document.querySelectorAll('.full-media-carousel__inner');\r\nif (fullMediaCarousels.length > 0) {\r\n fullMediaCarousels.forEach(function (item) {\r\n var mediaItems = item.querySelectorAll('.full-media-carousel__item');\r\n var leftButton = item.querySelector('.full-media-carousel__arrow-left');\r\n var rightButton = item.querySelector('.full-media-carousel__arrow-right');\r\n var glide = new glide_1.default(item, {\r\n type: 'slider',\r\n perView: 1,\r\n gap: 0,\r\n rewind: false,\r\n bound: true,\r\n });\r\n if (mediaItems.length == 1) {\r\n leftButton.classList.add('hidden');\r\n rightButton.classList.add('hidden');\r\n glide.disable();\r\n }\r\n glide.mount();\r\n });\r\n}\r\n},{\"@glidejs/glide\":26}],8:[function(require,module,exports){\nvar fullMediaVideoContainer = document.querySelectorAll(\".full-media\");\r\nif (fullMediaVideoContainer) {\r\n var fullMediaVideoContainerArray = Array.from(fullMediaVideoContainer);\r\n fullMediaVideoContainerArray.forEach(function (item) {\r\n var fullMediaButton = item.querySelector(\".full-media__button\");\r\n var fullMediaContent = item.querySelector(\".full-media__content\");\r\n var fullMediaVideo = item.querySelector(\".full-media__video\");\r\n item.addEventListener(\"click\", function (e) {\r\n showFullMediaVideo(item);\r\n });\r\n function showFullMediaVideo(item) {\r\n item.classList.toggle(\"full-media--active\");\r\n fullMediaButton.classList.toggle(\"full-media__button--active\");\r\n fullMediaContent.classList.toggle(\"full-media__content--active\");\r\n fullMediaVideo.classList.toggle(\"full-media__video--active\");\r\n fullMediaVideo.play();\r\n fullMediaVideo.setAttribute(\"controls\", \"controls\");\r\n }\r\n });\r\n}\r\n},{}],9:[function(require,module,exports){\ndocument.addEventListener('DOMContentLoaded', function () {\r\n var dropdownTriggers = document.querySelectorAll('.dropdown .header__title, .dropdown .header__link');\r\n dropdownTriggers.forEach(function (trigger) {\r\n trigger.addEventListener('focus', function () {\r\n this.nextElementSibling.style.display = 'flex';\r\n this.nextElementSibling.style.opacity = 1;\r\n });\r\n trigger.addEventListener('blur', function () {\r\n this.nextElementSibling.style.display = 'none';\r\n this.nextElementSibling.style.opacity = 0;\r\n });\r\n });\r\n var dropdownLinks = document.querySelectorAll('.dropdown-content a');\r\n dropdownLinks.forEach(function (link) {\r\n link.addEventListener('focus', function () {\r\n this.closest('.dropdown-content').style.display = 'flex';\r\n this.closest('.dropdown-content').style.opacity = 1;\r\n });\r\n link.addEventListener('blur', function (event) {\r\n var _this = this;\r\n setTimeout(function () {\r\n if (!_this.closest('.dropdown').contains(document.activeElement)) {\r\n _this.closest('.dropdown-content').style.display = 'none';\r\n _this.closest('.dropdown-content').style.opacity = 0;\r\n }\r\n }, 0);\r\n });\r\n });\r\n});\r\n},{}],10:[function(require,module,exports){\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar glide_1 = __importDefault(require(\"@glidejs/glide\"));\r\nvar carouselRange_1 = require(\"../../../helpers/carouselRange\");\r\nvar iconCarousels = document.querySelectorAll('.icon-carousel__inner');\r\nif (iconCarousels.length > 0) {\r\n iconCarousels.forEach(function (item) {\r\n var glide = new glide_1.default(item, {\r\n type: 'slider',\r\n perView: 3,\r\n gap: 60,\r\n rewind: false,\r\n bound: true,\r\n breakpoints: {\r\n 992: {\r\n perView: 2.5,\r\n gap: 30,\r\n },\r\n 600: {\r\n perView: 1.7,\r\n gap: 30,\r\n },\r\n 450: {\r\n perView: 1.2,\r\n gap: 30,\r\n },\r\n },\r\n });\r\n glide.mount();\r\n var carouselRange = item.querySelector('.icon-carousel__range');\r\n carouselRange.addEventListener('input', function (e) {\r\n setTimeout(function () {\r\n glide.go(\"=\" + carouselRange.value);\r\n }, 500);\r\n });\r\n var carouselContainer = item.parentElement;\r\n var slides = item.querySelectorAll('.icon-carousel__item');\r\n carouselRange_1.setRangeMax(slides, carouselRange, glide.settings.perView);\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n carouselRange_1.handlePadding(slides, glide.settings.perView, carouselContainer);\r\n glide.on('move.after', function () {\r\n var currentIndex = glide.index;\r\n carouselRange.value = currentIndex;\r\n });\r\n glide.on('resize', function () {\r\n carouselRange_1.setRangeMax(slides, carouselRange, glide.settings.perView);\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n carouselRange_1.handlePadding(slides, glide.settings.perView, carouselContainer);\r\n glide.go(\"=0\");\r\n });\r\n if (slides.length < 3) {\r\n var carouselItems = item.querySelectorAll('.icon-carousel__item');\r\n carouselItems.forEach(function (item) {\r\n item.style.flex = \"1\";\r\n });\r\n }\r\n });\r\n}\r\n},{\"../../../helpers/carouselRange\":1,\"@glidejs/glide\":26}],11:[function(require,module,exports){\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar glide_1 = __importDefault(require(\"@glidejs/glide\"));\r\nvar carouselRange_1 = require(\"../../../helpers/carouselRange\");\r\nvar imageCardCarousels = document.querySelectorAll('.image-carousel__inner');\r\nimageCardCarousels.forEach(function (item) {\r\n var glide = new glide_1.default(item, {\r\n type: 'slider',\r\n perView: 3.5,\r\n gap: 20,\r\n rewind: false,\r\n bound: true,\r\n breakpoints: {\r\n 1200: {\r\n perView: 2.5,\r\n gap: 30,\r\n },\r\n 760: {\r\n perView: 1.7,\r\n gap: 30,\r\n },\r\n 550: {\r\n perView: 1.2,\r\n gap: 20,\r\n },\r\n },\r\n });\r\n glide.mount();\r\n var imageCardCarouselContainer = item.parentElement;\r\n var carouselRange = item.querySelector('.image-carousel__range');\r\n carouselRange.addEventListener('input', function (e) {\r\n setTimeout(function () {\r\n glide.go(\"=\" + carouselRange.value);\r\n }, 500);\r\n });\r\n var slides = item.querySelectorAll('.image-carousel__item');\r\n carouselRange_1.setRangeMax(slides, carouselRange, glide.settings.perView);\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n carouselRange_1.handleContainerPaddingLeft(slides, glide.settings.perView, imageCardCarouselContainer);\r\n glide.on('move.after', function () {\r\n var currentIndex = glide.index;\r\n carouselRange.value = currentIndex;\r\n });\r\n glide.on('resize', function () {\r\n carouselRange_1.setRangeMax(slides, carouselRange, glide.settings.perView);\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n carouselRange_1.handleContainerPaddingLeft(slides, glide.settings.perView, imageCardCarouselContainer);\r\n glide.go(\"=0\");\r\n });\r\n});\r\n},{\"../../../helpers/carouselRange\":1,\"@glidejs/glide\":26}],12:[function(require,module,exports){\n\n},{}],13:[function(require,module,exports){\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar glide_1 = __importDefault(require(\"@glidejs/glide\"));\r\nvar carouselRange_1 = require(\"../../../helpers/carouselRange\");\r\nvar itemCardCarousels = document.querySelectorAll('.item-carousel__inner');\r\nif (itemCardCarousels.length > 0) {\r\n itemCardCarousels.forEach(function (item) {\r\n var glide = new glide_1.default(item, {\r\n type: 'slider',\r\n perView: 3,\r\n gap: 20,\r\n rewind: false,\r\n bound: true,\r\n breakpoints: {\r\n 992: {\r\n perView: 2.5,\r\n },\r\n 800: {\r\n perView: 1.7,\r\n },\r\n 550: {\r\n perView: 1.2,\r\n },\r\n },\r\n });\r\n glide.mount();\r\n var carouselContainer = item.parentElement;\r\n var carouselRange = item.querySelector('.item-carousel__range');\r\n carouselRange.addEventListener('input', function (e) {\r\n setTimeout(function () {\r\n glide.go(\"=\" + carouselRange.value);\r\n }, 500);\r\n });\r\n var slides = item.querySelectorAll('.item-carousel__item');\r\n carouselRange_1.setRangeMax(slides, carouselRange, glide.settings.perView);\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n carouselRange_1.handlePadding(slides, glide.settings.perView, carouselContainer);\r\n glide.on('move.after', function () {\r\n var currentIndex = glide.index;\r\n carouselRange.value = currentIndex;\r\n });\r\n glide.on('resize', function () {\r\n carouselRange_1.setRangeMax(slides, carouselRange, glide.settings.perView);\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n carouselRange_1.handlePadding(slides, glide.settings.perView, carouselContainer);\r\n glide.go(\"=0\");\r\n });\r\n if (slides.length < 3) {\r\n var carouselItems = item.querySelectorAll('.item-carousel__item');\r\n carouselItems.forEach(function (item) {\r\n item.style.flex = \"1\";\r\n });\r\n }\r\n });\r\n}\r\n},{\"../../../helpers/carouselRange\":1,\"@glidejs/glide\":26}],14:[function(require,module,exports){\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar glide_1 = __importDefault(require(\"@glidejs/glide\"));\r\nvar largeIconGrid = document.querySelectorAll(\".large-icons-grid__carousel-inner\");\r\nlargeIconGrid.forEach(function (item) {\r\n var cards = item.querySelectorAll(\".large-icons-grid__carousel-card\");\r\n var carousel = item.parentElement;\r\n var mobilePerView = 1.2;\r\n if (cards.length < 2) {\r\n mobilePerView = 1;\r\n carousel.classList.add(\"large-icons-grid__carousel--padding-right\");\r\n }\r\n var glide = new glide_1.default(item, {\r\n type: 'slider',\r\n perView: 3.5,\r\n gap: 20,\r\n rewind: false,\r\n breakpoints: {\r\n 1200: {\r\n perView: 2.5,\r\n },\r\n 760: {\r\n perView: 1.7,\r\n },\r\n 550: {\r\n perView: mobilePerView,\r\n },\r\n }\r\n });\r\n var largeIconsCarouselRange = document.querySelector(\".large-icons-grid__carousel-range\");\r\n var items = item.querySelectorAll(\".large-icons-grid__carousel-card\");\r\n var itemCount = items.length;\r\n if (itemCount == 1) {\r\n var rightArrow = item.querySelector('.large-icons-grid__carousel-arrow-right');\r\n var leftArrow = item.querySelector('.large-icons-grid__carousel-arrow-left');\r\n rightArrow.classList.add('hidden');\r\n leftArrow.classList.add('hidden');\r\n }\r\n glide.mount();\r\n largeIconsCarouselRange.addEventListener(\"input\", function (e) {\r\n setTimeout(function () {\r\n glide.go(\"=\" + largeIconsCarouselRange.value);\r\n }, 500);\r\n });\r\n glide.on('move.after', function () {\r\n var largeIconsCurrentIndex = glide.index;\r\n largeIconsCarouselRange.value = largeIconsCurrentIndex;\r\n var rightButton = item.querySelector(\".large-icons-grid__carousel-arrow-right\");\r\n if (largeIconsCurrentIndex > itemCount - 1) {\r\n rightButton.classList.add('glide__arrow--disabled');\r\n }\r\n else if (largeIconsCurrentIndex < itemCount - 1) {\r\n rightButton.classList.remove('glide__arrow--disabled');\r\n }\r\n });\r\n});\r\nif (largeIconGrid) {\r\n largeIconGrid.forEach(function (item) {\r\n var slides = item.querySelectorAll(\".large-icons-grid__carousel-card\");\r\n var largeIconsCarouselRange = item.querySelector(\".large-icons-grid__carousel-range\");\r\n setRangeMax(slides, largeIconsCarouselRange);\r\n });\r\n}\r\nfunction setRangeMax(arr, input) {\r\n var slidesLength = Array.from(arr).length;\r\n var rangeMax = (slidesLength - 1).toString();\r\n input.max = rangeMax;\r\n setRangeThumbWidth(rangeMax, input);\r\n}\r\nfunction setRangeThumbWidth(max, input) {\r\n var width = 200 / +max;\r\n input.style.setProperty('--thumb-size', width.toString() + \"px\");\r\n if (max === \"1\") {\r\n input.style.setProperty('--thumb-size', \"100px\");\r\n }\r\n}\r\n},{\"@glidejs/glide\":26}],15:[function(require,module,exports){\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar glide_1 = __importDefault(require(\"@glidejs/glide\"));\r\nvar carouselRange_1 = require(\"../../../helpers/carouselRange\");\r\nvar logoCarousels = document.querySelectorAll('.logo-carousel__inner');\r\nlogoCarousels.forEach(function (item) {\r\n var glide = new glide_1.default(item, {\r\n type: 'slider',\r\n perView: 6,\r\n gap: 40,\r\n bound: true,\r\n rewind: true,\r\n breakpoints: {\r\n 1300: {\r\n perView: 5,\r\n },\r\n 1100: {\r\n perView: 4,\r\n },\r\n 450: {\r\n perView: 1.2,\r\n },\r\n },\r\n });\r\n glide.mount();\r\n var handleCarouselWidth = function () {\r\n var glideSlides = item.querySelector('.glide__slides');\r\n var width = glideSlides.clientWidth;\r\n var newWidth = width - 40;\r\n glideSlides.style.width = newWidth + \"px\";\r\n };\r\n handleCarouselWidth();\r\n var slides = item.querySelectorAll('.logo-carousel__item');\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n glide.on('resize', function () {\r\n handleCarouselWidth();\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n glide.go(\"=0\");\r\n });\r\n});\r\n},{\"../../../helpers/carouselRange\":1,\"@glidejs/glide\":26}],16:[function(require,module,exports){\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar glide_1 = __importDefault(require(\"@glidejs/glide\"));\r\nvar mediaCarousels = document.querySelectorAll('.media-carousel__inner');\r\nmediaCarousels.forEach(function (item) {\r\n var slides = item.querySelectorAll('.media-carousel__item');\r\n var componentType = 'carousel';\r\n if (slides.length < 2)\r\n componentType = 'slider';\r\n var glide = new glide_1.default(item, {\r\n type: componentType,\r\n perView: 1,\r\n peek: {\r\n before: 474,\r\n after: 474\r\n },\r\n gap: 60,\r\n rewind: true,\r\n bound: true,\r\n breakpoints: {\r\n 1380: {\r\n perView: 1,\r\n gap: 60,\r\n peek: {\r\n before: 400,\r\n after: 400\r\n },\r\n },\r\n 1180: {\r\n perView: 1,\r\n gap: 60,\r\n peek: {\r\n before: 300,\r\n after: 300\r\n },\r\n },\r\n 900: {\r\n perView: 1,\r\n gap: 30,\r\n peek: {\r\n before: 200,\r\n after: 200\r\n },\r\n },\r\n 700: {\r\n perView: 1,\r\n gap: 30,\r\n peek: {\r\n before: 100,\r\n after: 100\r\n },\r\n },\r\n 550: {\r\n perView: 1,\r\n gap: 30,\r\n peek: {\r\n before: 80,\r\n after: 80\r\n },\r\n },\r\n 480: {\r\n perView: 1,\r\n gap: 30,\r\n peek: {\r\n before: 0,\r\n after: 0\r\n },\r\n },\r\n },\r\n });\r\n glide.mount();\r\n if (componentType === 'slider') {\r\n var leftArrow = item.querySelector('.media-carousel__arrow-left');\r\n var rightArrow = item.querySelector('.media-carousel__arrow-right');\r\n leftArrow.classList.add('hidden');\r\n rightArrow.classList.add('hidden');\r\n glide.disable();\r\n }\r\n});\r\nmediaCarousels.forEach(function (carousel) {\r\n var playButtons = carousel.querySelectorAll('.media-carousel__button');\r\n var videos = carousel.querySelectorAll('.modal-video__video');\r\n var modals = carousel.querySelectorAll('.modal-video');\r\n playButtons.forEach(function (button, index) {\r\n button.addEventListener('click', function () {\r\n var video = videos[index];\r\n var modal = modals[index];\r\n modal === null || modal === void 0 ? void 0 : modal.showModal();\r\n video === null || video === void 0 ? void 0 : video.play();\r\n });\r\n });\r\n window.addEventListener('click', function (event) {\r\n videos.forEach(function (video) {\r\n if (video && event.target.className == 'modal-video') {\r\n closeVideoModal(video);\r\n }\r\n if (video && event.target.id == 'modal-video__close') {\r\n closeVideoModal(video);\r\n }\r\n if (event.target.id == 'modal-video__close-icon') {\r\n closeVideoModal(video);\r\n }\r\n });\r\n });\r\n function closeVideoModal(video) {\r\n video.pause();\r\n video.currentTime = 0;\r\n modals.forEach(function (modal) {\r\n var modalElement = modal;\r\n modalElement.close();\r\n });\r\n }\r\n});\r\n},{\"@glidejs/glide\":26}],17:[function(require,module,exports){\nvar videoContainer = document.querySelector(\".media-with-text__right\");\r\nvar placeholder = document.querySelector(\".media-with-text__placeholder\");\r\nvar button = document.querySelector(\".media-with-text__button\");\r\nvar video = document.querySelector(\".media-with-text__video\");\r\nif (videoContainer) {\r\n videoContainer.addEventListener(\"click\", function (e) {\r\n if (video) {\r\n showVideo();\r\n }\r\n });\r\n function showVideo() {\r\n placeholder.classList.remove(\"media-with-text__placeholder--active\");\r\n button.classList.remove(\"media-with-text__button--active\");\r\n video.classList.add(\"media-with-text__video--active\");\r\n video.play();\r\n }\r\n}\r\n},{}],18:[function(require,module,exports){\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar glide_1 = __importDefault(require(\"@glidejs/glide\"));\r\nvar miniIconsGridCarousel = document.querySelectorAll(\".mini-icons-grid__carousel-inner\");\r\nminiIconsGridCarousel.forEach(function (item) {\r\n var cards = item.querySelectorAll(\".mini-icons-grid__carousel-card\");\r\n var carousel = item.parentElement;\r\n var mobilePerView = 1.2;\r\n if (cards.length < 2) {\r\n mobilePerView = 1;\r\n carousel.classList.add(\"mini-icons-grid__carousel--padding-right\");\r\n }\r\n var glide = new glide_1.default(item, {\r\n type: 'slider',\r\n perView: 3.5,\r\n gap: 20,\r\n rewind: false,\r\n breakpoints: {\r\n 1200: {\r\n perView: 2.5,\r\n },\r\n 760: {\r\n perView: 1.7,\r\n },\r\n 550: {\r\n perView: mobilePerView,\r\n },\r\n }\r\n });\r\n glide.mount();\r\n var miniIconsCarouselRange = item.querySelector(\".mini-icons-grid__carousel-range\");\r\n var slides = item.querySelectorAll(\".mini-icons-grid__carousel-card\");\r\n miniIconsCarouselRange.addEventListener(\"input\", function (e) {\r\n setTimeout(function () {\r\n glide.go(\"=\" + miniIconsCarouselRange.value);\r\n }, 500);\r\n });\r\n glide.on('move.after', function () {\r\n var miniIconsCurrentIndex = glide.index;\r\n miniIconsCarouselRange.value = miniIconsCurrentIndex;\r\n });\r\n setRangeMax(slides, miniIconsCarouselRange);\r\n function setRangeMax(arr, input) {\r\n var slidesLength = Array.from(arr).length;\r\n var rangeMax = (slidesLength - 1).toString();\r\n input.max = rangeMax;\r\n setRangeThumbWidth(rangeMax);\r\n }\r\n function setRangeThumbWidth(max) {\r\n var miniIconsCarouselRange = item.querySelector(\".mini-icons-grid__carousel-range\");\r\n var width = 200 / +max;\r\n miniIconsCarouselRange.style.setProperty('--thumb-size', width.toString() + \"px\");\r\n if (max === \"1\") {\r\n miniIconsCarouselRange.style.setProperty('--thumb-size', \"100px\");\r\n }\r\n }\r\n});\r\n},{\"@glidejs/glide\":26}],19:[function(require,module,exports){\nvar mobileMenuIcon = document.querySelector(\".menu-mobile__icon\");\r\nvar mobileMenuButton = document.querySelector(\".header__button\");\r\nvar mobileMenu = document.querySelector(\".menu-mobile__overlay\");\r\nvar html = document.querySelector(\"html\");\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n setupMenuItems();\r\n setupBackButton();\r\n setupMenuIcon();\r\n setupMenuButton();\r\n});\r\nfunction setupMenuItems() {\r\n document.querySelectorAll('.menu-mobile__item').forEach(function (item) {\r\n item.addEventListener('click', function () {\r\n var itemId = this.getAttribute('data-item-id');\r\n openNestedLinks(itemId);\r\n });\r\n });\r\n}\r\nfunction setupBackButton() {\r\n document.querySelectorAll('.menu-mobile__back-button').forEach(function (backButton) {\r\n backButton.addEventListener('click', function (event) {\r\n handleBackButtonClick(event);\r\n });\r\n });\r\n}\r\nfunction setupMenuIcon() {\r\n if (mobileMenuIcon) {\r\n mobileMenuIcon.addEventListener(\"click\", handleMenuIcon);\r\n }\r\n}\r\nfunction setupMenuButton() {\r\n mobileMenuButton === null || mobileMenuButton === void 0 ? void 0 : mobileMenuButton.addEventListener(\"keydown\", function (e) {\r\n if (e.key === \"Enter\") {\r\n handleMenuIcon(e);\r\n }\r\n });\r\n mobileMenu === null || mobileMenu === void 0 ? void 0 : mobileMenu.addEventListener(\"keydown\", function (e) {\r\n if (e.key === \"Escape\") {\r\n handleMenuIcon(e);\r\n }\r\n });\r\n}\r\nfunction openNestedLinks(itemId) {\r\n document.querySelectorAll('.menu-mobile__item').forEach(function (item) {\r\n if (item.getAttribute('data-item-id') !== itemId) {\r\n item.classList.add('menu-mobile__item--hidden');\r\n }\r\n });\r\n var nestedLinks = document.querySelector(\"[data-item-id='\" + itemId + \"']\");\r\n if (nestedLinks) {\r\n nestedLinks.classList.remove('menu-mobile__item--hidden');\r\n var link = nestedLinks.querySelector('.menu-mobile__nested-links');\r\n link.style.display = 'flex';\r\n }\r\n document.querySelectorAll('.menu-mobile__title').forEach(function (titleElement) {\r\n titleElement.style.display = 'none';\r\n });\r\n}\r\nfunction handleMenuIcon(event) {\r\n closeNestedLinks();\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n toggleMenuIcon();\r\n}\r\nfunction handleBackButtonClick(event) {\r\n closeNestedLinks();\r\n event.stopPropagation();\r\n}\r\nfunction closeNestedLinks() {\r\n document.querySelectorAll('.menu-mobile__item').forEach(function (item) {\r\n item.classList.remove('menu-mobile__item--hidden');\r\n });\r\n document.querySelectorAll('.menu-mobile__nested-links').forEach(function (nestedLink) {\r\n nestedLink.style.display = 'none';\r\n });\r\n document.querySelectorAll('.menu-mobile__title').forEach(function (titleElement) {\r\n titleElement.style.display = 'block';\r\n });\r\n}\r\nfunction toggleMenuIcon() {\r\n mobileMenuIcon.classList.toggle(\"menu-mobile__icon--open\");\r\n mobileMenu.classList.toggle(\"menu-mobile__overlay--active\");\r\n html.style.overflow = mobileMenuIcon.classList.contains(\"menu-mobile__icon--open\") ? \"hidden\" : \"auto\";\r\n}\r\n},{}],20:[function(require,module,exports){\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar glide_1 = __importDefault(require(\"@glidejs/glide\"));\r\nvar carouselRange_1 = require(\"../../../helpers/carouselRange\");\r\nvar pageCardCarousels = document.querySelectorAll('.page-carousel__inner');\r\npageCardCarousels.forEach(function (item) {\r\n var glide = new glide_1.default(item, {\r\n type: 'slider',\r\n perView: 3,\r\n gap: 60,\r\n rewind: false,\r\n bound: true,\r\n breakpoints: {\r\n 992: {\r\n perView: 2.5,\r\n gap: 30,\r\n },\r\n 600: {\r\n perView: 1.7,\r\n gap: 30,\r\n },\r\n 450: {\r\n perView: 1.2,\r\n gap: 30,\r\n },\r\n },\r\n });\r\n glide.mount();\r\n var carouselRange = item.querySelector('.page-carousel__range');\r\n carouselRange.addEventListener('input', function (e) {\r\n setTimeout(function () {\r\n glide.go(\"=\" + carouselRange.value);\r\n }, 500);\r\n });\r\n var carouselContainer = item.parentElement;\r\n var slides = item.querySelectorAll('.page-carousel__item');\r\n carouselRange_1.setRangeMax(slides, carouselRange, glide.settings.perView);\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n carouselRange_1.handlePadding(slides, glide.settings.perView, carouselContainer);\r\n glide.on('move.after', function () {\r\n var currentIndex = glide.index;\r\n carouselRange.value = currentIndex;\r\n });\r\n glide.on('resize', function () {\r\n carouselRange_1.setRangeMax(slides, carouselRange, glide.settings.perView);\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n carouselRange_1.handlePadding(slides, glide.settings.perView, carouselContainer);\r\n glide.go(\"=0\");\r\n });\r\n if (slides.length < 3) {\r\n var carouselItems = item.querySelectorAll('.page-carousel__item');\r\n carouselItems.forEach(function (item) {\r\n item.style.flex = \"1\";\r\n });\r\n }\r\n});\r\n},{\"../../../helpers/carouselRange\":1,\"@glidejs/glide\":26}],21:[function(require,module,exports){\n\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.enablePagination = exports.disablePagination = exports.updatePagination = void 0;\r\nvar paginationElements = document.querySelectorAll(\".pagination\");\r\nfunction updatePagination(page, allPages, totalItems, itemsPerPage, hasNextPage, hasPreviousPage) {\r\n paginationElements.forEach(function (item) {\r\n if (totalItems < 1) {\r\n item.classList.add(\"pagination--hidden\");\r\n }\r\n else {\r\n item.classList.remove(\"pagination--hidden\");\r\n }\r\n var element = item.querySelector(\".pagination__inner\");\r\n var text = item.querySelector(\".pagination__text\");\r\n if (totalItems > itemsPerPage) {\r\n text.textContent = \"Showing \" + (itemsPerPage * page >= totalItems ? totalItems : itemsPerPage * page) + \" of \" + totalItems + \" results\";\r\n }\r\n else {\r\n text.textContent = \"Showing \" + totalItems + \" of \" + totalItems + \" results\";\r\n }\r\n var totalPages = allPages;\r\n element.innerHTML = createPagination(totalPages, page, hasNextPage, hasPreviousPage);\r\n disablePagination(element);\r\n });\r\n}\r\nexports.updatePagination = updatePagination;\r\nfunction createPagination(totalPages, page, hasNextPage, hasPreviousPage) {\r\n var liTag = \"\";\r\n var active = \"\";\r\n var renderedPages = new Set();\r\n if (page > 1 && hasPreviousPage) {\r\n liTag += \"\";\r\n }\r\n for (var i = 1; i <= Math.min(3, totalPages); i++) {\r\n if (!renderedPages.has(i)) {\r\n active = page === i ? \"pagination__btn--active\" : \"\";\r\n liTag += \"\";\r\n renderedPages.add(i);\r\n }\r\n }\r\n if (page > 4 && totalPages > 6 && !renderedPages.has(\"...\")) {\r\n liTag += \"\";\r\n }\r\n var startMiddleRange = Math.max(4, page - 1);\r\n var endMiddleRange = Math.min(totalPages - 2, page + 1);\r\n for (var i = startMiddleRange; i <= endMiddleRange; i++) {\r\n if (!renderedPages.has(i)) {\r\n active = page === i ? \"pagination__btn--active\" : \"\";\r\n liTag += \"\";\r\n renderedPages.add(i);\r\n }\r\n }\r\n if (page < totalPages - 3 && totalPages > 6 && !renderedPages.has(\"...\")) {\r\n liTag += \"\";\r\n }\r\n for (var i = totalPages - 2; i <= totalPages; i++) {\r\n if (!renderedPages.has(i)) {\r\n active = page === i ? \"pagination__btn--active\" : \"\";\r\n liTag += \"\";\r\n renderedPages.add(i);\r\n }\r\n }\r\n if (page < totalPages && hasNextPage) {\r\n liTag += \"\";\r\n }\r\n return liTag;\r\n}\r\nfunction disablePagination(element) {\r\n var buttons = element.querySelectorAll(\"button\");\r\n buttons.forEach(function (button) {\r\n button.disabled = true;\r\n });\r\n}\r\nexports.disablePagination = disablePagination;\r\nfunction enablePagination(element) {\r\n var buttons = element.querySelectorAll(\"button\");\r\n buttons.forEach(function (button) {\r\n button.disabled = false;\r\n });\r\n}\r\nexports.enablePagination = enablePagination;\r\n},{}],22:[function(require,module,exports){\nvar quickLinksSelect = document.querySelector(\".quick-links__select\");\r\nif (quickLinksSelect) {\r\n quickLinksSelect.addEventListener(\"change\", function (e) {\r\n window.location.href = quickLinksSelect.value;\r\n });\r\n}\r\n},{}],23:[function(require,module,exports){\nvar counters = document.querySelectorAll('.stats__number');\r\nvar countersContainer = document.querySelectorAll('.stats');\r\nif (countersContainer) {\r\n var countersArray_1 = Array.from(counters);\r\n var countersContainerArray_1 = Array.from(countersContainer);\r\n var speed_1 = 100;\r\n function isCounterInViewport(element) {\r\n var bounding = element.getBoundingClientRect();\r\n if (bounding.top >= 0 &&\r\n bounding.left >= 0 &&\r\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth) &&\r\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n window.addEventListener('scroll', function (event) {\r\n countersContainerArray_1.forEach(function (item) {\r\n if (isCounterInViewport(item)) {\r\n countersArray_1.forEach(function (counter) {\r\n var updateCount = function () {\r\n var target = +counter.getAttribute('data-target');\r\n var count = +counter.textContent;\r\n var inc = target / speed_1;\r\n if (count < target) {\r\n counter.textContent = Math.ceil(count + inc).toString();\r\n setTimeout(updateCount, 200);\r\n }\r\n else {\r\n counter.textContent = Math.ceil(target).toString();\r\n }\r\n };\r\n updateCount();\r\n });\r\n }\r\n });\r\n }, false);\r\n}\r\n},{}],24:[function(require,module,exports){\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar glide_1 = __importDefault(require(\"@glidejs/glide\"));\r\nvar carouselRange_1 = require(\"../../../helpers/carouselRange\");\r\nvar testimonialsCarousels = document.querySelectorAll(\".testimonials__inner\");\r\ntestimonialsCarousels.forEach(function (item) {\r\n var glide = new glide_1.default(item, {\r\n type: 'slider',\r\n perView: 1,\r\n gap: 60,\r\n rewind: true,\r\n breakpoints: {\r\n 480: {\r\n perView: 1.2,\r\n gap: 20,\r\n },\r\n }\r\n });\r\n glide.mount();\r\n var carouselRange = item.querySelector(\".testimonials__range\");\r\n carouselRange.addEventListener(\"input\", function (e) {\r\n setTimeout(function () {\r\n glide.go(\"=\" + carouselRange.value);\r\n }, 500);\r\n });\r\n var slides = item.querySelectorAll('.testimonials__item');\r\n carouselRange_1.setRangeMax(slides, carouselRange, glide.settings.perView);\r\n carouselRange_1.handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n glide.on('move.after', function () {\r\n var currentIndex = glide.index;\r\n carouselRange.value = currentIndex;\r\n });\r\n});\r\n},{\"../../../helpers/carouselRange\":1,\"@glidejs/glide\":26}],25:[function(require,module,exports){\nvar videoContainerComponent = document.querySelectorAll(\".video\");\r\nif (videoContainerComponent) {\r\n var videoContainerComponentArray = Array.from(videoContainerComponent);\r\n videoContainerComponentArray.forEach(function (item) {\r\n var videoComponentButton = item.querySelector(\".video__button\");\r\n var videoComponentVideo = item.querySelector(\".video__video\");\r\n item.addEventListener(\"click\", function (e) {\r\n if (!videoComponentVideo.classList.contains(\"video__video--active\")) {\r\n showVideoComponentVideo();\r\n }\r\n });\r\n videoComponentButton.addEventListener(\"click\", function (e) {\r\n if (!videoComponentVideo.classList.contains(\"video__video--active\")) {\r\n showVideoComponentVideo();\r\n }\r\n });\r\n function showVideoComponentVideo() {\r\n videoComponentButton.classList.remove(\"video__button--active\");\r\n videoComponentVideo.classList.add(\"video__video--active\");\r\n videoComponentVideo.setAttribute(\"controls\", \"controls\");\r\n videoComponentVideo.play();\r\n }\r\n });\r\n}\r\n},{}],26:[function(require,module,exports){\n/*!\n * Glide.js v3.6.0\n * (c) 2013-2022 Jędrzej Chałubek (https://github.com/jedrzejchalubek/)\n * Released under the MIT License.\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Glide = factory());\n})(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\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 function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n }\n\n function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n }\n\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n }\n\n function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n }\n\n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n }\n\n function _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n }\n\n function _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n }\n\n function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n }\n\n function _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n }\n\n var 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 number of slides moved on single swipe.\n *\n * Available types:\n * `` - Moves slider by one slide per swipe\n * `|` - Moves slider between views per swipe (number of slides defined in `perView` options)\n *\n * @type {String}\n */\n perSwipe: '',\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 * Wait for the animation to finish until the next user input can be processed\n *\n * @type {boolean}\n */\n waitForTransition: true,\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 * Defines how many clones of current viewport will be generated.\n *\n * @type {Number}\n */\n cloningRatio: 1,\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 swipeable: 'glide--swipeable',\n dragging: 'glide--dragging',\n direction: {\n ltr: 'glide--ltr',\n rtl: 'glide--rtl'\n },\n type: {\n slider: 'glide--slider',\n carousel: 'glide--carousel'\n },\n slide: {\n clone: 'glide__slide--clone',\n active: 'glide__slide--active'\n },\n arrow: {\n disabled: 'glide__arrow--disabled'\n },\n nav: {\n active: 'glide__bullet--active'\n }\n }\n };\n\n /**\n * Outputs warning message to the bowser console.\n *\n * @param {String} msg\n * @return {Void}\n */\n function warn(msg) {\n console.error(\"[Glide warn]: \".concat(msg));\n }\n\n /**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\n function toInt(value) {\n return parseInt(value);\n }\n /**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\n\n function toFloat(value) {\n return parseFloat(value);\n }\n /**\n * Indicates whether the specified value is a string.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n function isString(value) {\n return typeof value === 'string';\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 */\n\n function isObject(value) {\n var type = _typeof(value);\n\n return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n }\n /**\n * Indicates whether the specified value is a function.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n function isFunction(value) {\n return typeof value === 'function';\n }\n /**\n * Indicates whether the specified value is undefined.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n /**\n * Indicates whether the specified value is an array.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n function 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 */\n\n function 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 */\n function define(obj, prop, definition) {\n Object.defineProperty(obj, prop, definition);\n }\n /**\n * Sorts aphabetically object keys.\n *\n * @param {Object} obj\n * @return {Object}\n */\n\n function sortKeys(obj) {\n return Object.keys(obj).sort().reduce(function (r, k) {\n r[k] = obj[k];\n return r[k], r;\n }, {});\n }\n /**\n * Merges passed settings object with default options.\n *\n * @param {Object} defaults\n * @param {Object} settings\n * @return {Object}\n */\n\n function mergeOptions(defaults, settings) {\n var options = Object.assign({}, defaults, settings); // `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\n if (settings.hasOwnProperty('classes')) {\n options.classes = Object.assign({}, defaults.classes, settings.classes);\n\n if (settings.classes.hasOwnProperty('direction')) {\n options.classes.direction = Object.assign({}, defaults.classes.direction, settings.classes.direction);\n }\n\n if (settings.classes.hasOwnProperty('type')) {\n options.classes.type = Object.assign({}, defaults.classes.type, settings.classes.type);\n }\n\n if (settings.classes.hasOwnProperty('slide')) {\n options.classes.slide = Object.assign({}, defaults.classes.slide, settings.classes.slide);\n }\n\n if (settings.classes.hasOwnProperty('arrow')) {\n options.classes.arrow = Object.assign({}, defaults.classes.arrow, settings.classes.arrow);\n }\n\n if (settings.classes.hasOwnProperty('nav')) {\n options.classes.nav = Object.assign({}, defaults.classes.nav, settings.classes.nav);\n }\n }\n\n if (settings.hasOwnProperty('breakpoints')) {\n options.breakpoints = Object.assign({}, defaults.breakpoints, settings.breakpoints);\n }\n\n return options;\n }\n\n var EventsBus = /*#__PURE__*/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\n _classCallCheck(this, EventsBus);\n\n this.events = events;\n this.hop = events.hasOwnProperty;\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 return;\n } // Create the event's object if not yet created\n\n\n if (!this.hop.call(this.events, event)) {\n this.events[event] = [];\n } // Add the handler to queue\n\n\n var index = this.events[event].push(handler) - 1; // Provide handle back for removal of event\n\n return {\n remove: function remove() {\n delete this.events[event][index];\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 return;\n } // If the event doesn't exist, or there's no handlers in queue, just leave\n\n\n if (!this.hop.call(this.events, event)) {\n return;\n } // Cycle through events queue, fire!\n\n\n this.events[event].forEach(function (item) {\n item(context || {});\n });\n }\n }]);\n\n return EventsBus;\n }();\n\n var Glide$1 = /*#__PURE__*/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\n _classCallCheck(this, Glide);\n\n this._c = {};\n this._t = [];\n this._e = new EventsBus();\n this.disabled = false;\n this.selector = selector;\n this.settings = mergeOptions(defaults, options);\n this.index = this.settings.startAt;\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 /**\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 /**\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 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 /**\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 * `|>` - Move one viewport forward\r\n * `|<` - Move one viewport backward\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 /**\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\n this._c.Move.make(distance);\n\n return this;\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 /**\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 /**\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 /**\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 return this;\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 return this;\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 /**\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 /**\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() {\n return this._o;\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(o) {\n if (isObject(o)) {\n this._o = o;\n } else {\n warn('Options must be an `object` instance.');\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() {\n return this._i;\n }\n /**\r\n * Sets current index a slider.\r\n *\r\n * @return {Object}\r\n */\n ,\n set: function set(i) {\n this._i = toInt(i);\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() {\n return this.settings.type;\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() {\n return this._d;\n }\n /**\r\n * Sets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n ,\n set: function set(status) {\n this._d = !!status;\n }\n }]);\n\n return Glide;\n }();\n\n function 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 * 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.settings.waitForTransition || Glide.disable();\n this.move = move;\n Events.emit('run.before', this.move);\n this.calculate();\n Events.emit('run', this.move);\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()) {\n _this._o = false;\n Events.emit('run.offset', _this.move);\n }\n\n Events.emit('run.after', _this.move);\n Glide.enable();\n });\n }\n },\n\n /**\n * Calculates current index based on defined move.\n *\n * @return {Number|Undefined}\n */\n calculate: function calculate() {\n var move = this.move,\n length = this.length;\n var steps = move.steps,\n direction = move.direction; // By default assume that size of view is equal to one slide\n\n var viewSize = 1; // While direction is `=` we want jump to\n // a specified index described in steps.\n\n if (direction === '=') {\n // Check if bound is true, \n // as we want to avoid whitespaces.\n if (Glide.settings.bound && toInt(steps) > length) {\n Glide.index = length;\n return;\n }\n\n Glide.index = steps;\n return;\n } // When pattern is equal to `>>` we want\n // fast forward to the last slide.\n\n\n if (direction === '>' && steps === '>') {\n Glide.index = length;\n return;\n } // When pattern is equal to `<<` we want\n // fast forward to the first slide.\n\n\n if (direction === '<' && steps === '<') {\n Glide.index = 0;\n return;\n } // pagination movement\n\n\n if (direction === '|') {\n viewSize = Glide.settings.perView || 1;\n } // we are moving forward\n\n\n if (direction === '>' || direction === '|' && steps === '>') {\n var index = calculateForwardIndex(viewSize);\n\n if (index > length) {\n this._o = true;\n }\n\n Glide.index = normalizeForwardIndex(index, viewSize);\n return;\n } // we are moving backward\n\n\n if (direction === '<' || direction === '|' && steps === '<') {\n var _index = calculateBackwardIndex(viewSize);\n\n if (_index < 0) {\n this._o = true;\n }\n\n Glide.index = normalizeBackwardIndex(_index, viewSize);\n return;\n }\n\n warn(\"Invalid direction pattern [\".concat(direction).concat(steps, \"] has been used\"));\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 * 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 * Checks if we are making a offset run.\n *\n * @param {String} direction\n * @return {Boolean}\n */\n isOffset: function isOffset() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n if (!direction) {\n return this._o;\n }\n\n if (!this._o) {\n return false;\n } // did we view to the right?\n\n\n if (direction === '|>') {\n return this.move.direction === '|' && this.move.steps === '>';\n } // did we view to the left?\n\n\n if (direction === '|<') {\n return this.move.direction === '|' && this.move.steps === '<';\n }\n\n return this.move.direction === direction;\n },\n\n /**\n * Checks if bound mode is active\n *\n * @return {Boolean}\n */\n isBound: function isBound() {\n return Glide.isType('slider') && Glide.settings.focusAt !== 'center' && Glide.settings.bound;\n }\n };\n /**\n * Returns index value to move forward/to the right\n *\n * @param viewSize\n * @returns {Number}\n */\n\n function calculateForwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index + viewSize;\n }\n\n return index + (viewSize - index % viewSize);\n }\n /**\n * Normalizes the given forward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {Number}\n */\n\n\n function normalizeForwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index <= length) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index - (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on the last possible index value given by bound\n if (Run.isBound() && !Run.isEnd()) {\n return length;\n }\n\n return 0;\n }\n\n if (Run.isBound()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n /**\n * Calculates index value to move backward/to the left\n *\n * @param viewSize\n * @returns {Number}\n */\n\n\n function calculateBackwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index - viewSize;\n } // ensure our back navigation results in the same index as a forward navigation\n // to experience a homogeneous paging\n\n\n var view = Math.ceil(index / viewSize);\n return (view - 1) * viewSize;\n }\n /**\n * Normalizes the given backward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {*}\n */\n\n\n function normalizeBackwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index >= 0) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index + (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on first possible index value before we to rewind to the length given by bound\n if (Run.isBound() && Run.isStart()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n\n return 0;\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 * Sets value of the move schema.\n *\n * @returns {Object}\n */\n set: function set(value) {\n var step = value.substr(1);\n this._m = {\n direction: value.substr(0, 1),\n steps: step ? toInt(step) ? toInt(step) : step : 0\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; // If the `bound` option is active, 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 (this.isBound()) {\n return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n }\n\n return length - 1;\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 return Run;\n }\n\n /**\n * Returns a current time.\n *\n * @return {Number}\n */\n function 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 */\n\n function throttle(func, wait, options) {\n var timeout, context, args, result;\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\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\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\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\n var MARGIN_TYPE = {\n ltr: ['marginLeft', 'marginRight'],\n rtl: ['marginRight', 'marginLeft']\n };\n function 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]] = \"\".concat(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]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][1]] = '';\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 style.marginLeft = '';\n style.marginRight = '';\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 define(Gaps, 'grow', {\n /**\n * Gets additional dimensions 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;\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 return Gaps.value * (perView - 1) / perView;\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\n Events.on(['build.after', 'update'], throttle(function () {\n Gaps.apply(Components.Html.wrapper.children);\n }, 30));\n /**\n * Remove gaps:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Gaps.remove(Components.Html.wrapper.children);\n });\n return Gaps;\n }\n\n /**\n * Finds siblings nodes of the passed node.\n *\n * @param {Element} node\n * @return {Array}\n */\n function 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 * Checks if passed node exist and is a valid element.\n *\n * @param {Element} node\n * @return {Boolean}\n */\n\n function exist(node) {\n if (node && node instanceof window.HTMLElement) {\n return true;\n }\n\n return false;\n }\n /**\n * Coerces a NodeList to an Array.\n *\n * @param {NodeList} nodeList\n * @return {Array}\n */\n\n function toArray(nodeList) {\n return Array.prototype.slice.call(nodeList);\n }\n\n var TRACK_SELECTOR = '[data-glide-el=\"track\"]';\n function Html (Glide, Components, Events) {\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.collectSlides();\n },\n\n /**\n * Collect slides\n */\n collectSlides: function collectSlides() {\n this.slides = toArray(this.wrapper.children).filter(function (slide) {\n return !slide.classList.contains(Glide.settings.classes.slide.clone);\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 * 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 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 * 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 \".concat(TRACK_SELECTOR, \" attribute.\"));\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 * Add/remove/reorder dynamic slides\n */\n\n Events.on('update', function () {\n Html.collectSlides();\n });\n return Html;\n }\n\n function 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 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 * 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 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 * Recalculate peeking sizes on:\n * - when resizing window to update to proper percents\n */\n\n Events.on(['resize', 'update'], function () {\n Peek.mount();\n });\n return Peek;\n }\n\n function 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 * 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 this.offset = offset;\n Events.emit('move', {\n movement: this.value\n });\n Components.Transition.after(function () {\n Events.emit('move.after', {\n movement: _this.value\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 * 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 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 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 * 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\n Events.on(['build.before', 'run'], function () {\n Move.make();\n });\n return Move;\n }\n\n function Sizes (Glide, Components, Events) {\n var Sizes = {\n /**\n * Setups dimensions of slides.\n *\n * @return {Void}\n */\n setupSlides: function setupSlides() {\n var width = \"\".concat(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 * Setups dimensions of slides wrapper.\n *\n * @return {Void}\n */\n setupWrapper: function setupWrapper() {\n Components.Html.wrapper.style.width = \"\".concat(this.wrapperSize, \"px\");\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 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 define(Sizes, 'width', {\n /**\n * Gets width value of the slider (visible area).\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.track.offsetWidth;\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 define(Sizes, 'slideWidth', {\n /**\n * Gets width value of a 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 * Apply calculated glide's dimensions:\n * - before building, so other dimensions (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\n Events.on(['build.before', 'resize', 'update'], function () {\n Sizes.setupSlides();\n Sizes.setupWrapper();\n });\n /**\n * Remove calculated glide's dimensions:\n * - on destoting to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Sizes.remove();\n });\n return Sizes;\n }\n\n function 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 this.typeClass();\n this.activeClass();\n Events.emit('build.after');\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.type[Glide.settings.type]);\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.slide.active);\n siblings(slide).forEach(function (sibling) {\n sibling.classList.remove(classes.slide.active);\n });\n }\n },\n\n /**\n * Removes HTML classes applied at building.\n *\n * @return {Void}\n */\n removeClasses: function removeClasses() {\n var _Glide$settings$class = Glide.settings.classes,\n type = _Glide$settings$class.type,\n slide = _Glide$settings$class.slide;\n Components.Html.root.classList.remove(type[Glide.settings.type]);\n Components.Html.slides.forEach(function (sibling) {\n sibling.classList.remove(slide.active);\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\n Events.on(['destroy', 'update'], function () {\n Build.removeClasses();\n });\n /**\n * Remount component:\n * - on resizing of the window to calculate new dimensions\n * - on updating settings via API\n */\n\n Events.on(['resize', 'update'], function () {\n Build.mount();\n });\n /**\n * Swap active class of current slide:\n * - after each move to the new index\n */\n\n Events.on('move.after', function () {\n Build.activeClass();\n });\n return Build;\n }\n\n function 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 * Collect clones with pattern.\n *\n * @return {[]}\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 cloningRatio = _Glide$settings.cloningRatio;\n\n if (slides.length !== 0) {\n var peekIncrementer = +!!Glide.settings.peek;\n var cloneCount = perView + peekIncrementer + Math.round(perView / 2);\n var append = slides.slice(0, cloneCount).reverse();\n var prepend = slides.slice(cloneCount * -1);\n\n for (var r = 0; r < Math.max(cloningRatio, Math.floor(perView / slides.length)); r++) {\n for (var i = 0; i < append.length; i++) {\n var clone = append[i].cloneNode(true);\n clone.classList.add(classes.slide.clone);\n items.push(clone);\n }\n\n for (var _i = 0; _i < prepend.length; _i++) {\n var _clone = prepend[_i].cloneNode(true);\n\n _clone.classList.add(classes.slide.clone);\n\n items.unshift(_clone);\n }\n }\n }\n\n return items;\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 var half = Math.floor(items.length / 2);\n var prepend = items.slice(0, half).reverse();\n var append = items.slice(half * -1).reverse();\n var width = \"\".concat(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 * Remove all cloned slides.\n *\n * @return {Void}\n */\n remove: function remove() {\n var items = this.items;\n\n for (var i = 0; i < items.length; i++) {\n Components.Html.wrapper.removeChild(items[i]);\n }\n }\n };\n define(Clones, 'grow', {\n /**\n * Gets additional dimensions 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 * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('update', function () {\n Clones.remove();\n Clones.mount();\n Clones.append();\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('build.before', function () {\n if (Glide.isType('carousel')) {\n Clones.append();\n }\n });\n /**\n * Remove clones HTMLElements:\n * - on destroying, to bring HTML to its initial state\n */\n\n Events.on('destroy', function () {\n Clones.remove();\n });\n return Clones;\n }\n\n var EventsBinder = /*#__PURE__*/function () {\n /**\n * Construct a EventsBinder instance.\n */\n function EventsBinder() {\n var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBinder);\n\n this.listeners = listeners;\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 el.addEventListener(events[i], this.listeners[events[i]], capture);\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 * Destroy collected listeners.\n *\n * @returns {Void}\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n delete this.listeners;\n }\n }]);\n\n return EventsBinder;\n }();\n\n function Resize (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Resize = {\n /**\n * Initializes window bindings.\n */\n mount: function mount() {\n this.bind();\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 * Unbinds listeners from the window.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('resize', window);\n }\n };\n /**\n * Remove bindings from window:\n * - on destroying, to remove added EventListener\n */\n\n Events.on('destroy', function () {\n Resize.unbind();\n Binder.destroy();\n });\n return Resize;\n }\n\n var VALID_DIRECTIONS = ['ltr', 'rtl'];\n var FLIPED_MOVEMENTS = {\n '>': '<',\n '<': '>',\n '=': '='\n };\n function 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 * 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 * 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 * 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 * 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 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 * 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 * Clear direction class:\n * - on destroy to bring HTML to its initial state\n * - on update to remove class before reappling bellow\n */\n\n Events.on(['destroy', 'update'], function () {\n Direction.removeClass();\n });\n /**\n * Remount component:\n * - on update to reflect changes in direction value\n */\n\n Events.on('update', function () {\n Direction.mount();\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\n Events.on(['build.before', 'update'], function () {\n Direction.addClass();\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 */\n function 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 */\n function 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 var multiplier = Math.floor(translate / Components.Sizes.slideWidth);\n return translate + Components.Gaps.value * multiplier;\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 */\n function 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 */\n\n function 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 */\n function 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 */\n\n function 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 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\n function 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 var translate3d = \"translate3d(\".concat(-1 * transform, \"px, 0px, 0px)\");\n Components.Html.wrapper.style.mozTransform = translate3d; // needed for supported Firefox 10-15\n\n Components.Html.wrapper.style.webkitTransform = translate3d; // needed for supported Chrome 10-35, Safari 5.1-8, and Opera 15-22\n\n Components.Html.wrapper.style.transform = translate3d;\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 * @return {number}\n */\n getStartIndex: function getStartIndex() {\n var length = Components.Sizes.length;\n var index = Glide.index;\n var perView = Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n return length + (index - perView);\n } // \"modulo length\" converts an index that equals length to zero\n\n\n return (index + perView) % length;\n },\n\n /**\n * @return {number}\n */\n getTravelDistance: function getTravelDistance() {\n var travelDistance = Components.Sizes.slideWidth * Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n // reverse travel distance so that we don't have to change subtract operations\n return travelDistance * -1;\n }\n\n return travelDistance;\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\n Events.on('move', function (context) {\n if (!Glide.isType('carousel') || !Components.Run.isOffset()) {\n return Translate.set(context.movement);\n }\n\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n Translate.set(Components.Sizes.slideWidth * Glide.index);\n });\n var startWidth = Components.Sizes.slideWidth * Components.Translate.getStartIndex();\n return Translate.set(startWidth - Components.Translate.getTravelDistance());\n });\n /**\n * Remove translate:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Translate.remove();\n });\n return Translate;\n }\n\n function 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 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 \"\".concat(property, \" \").concat(this.duration, \"ms \").concat(settings.animationTimingFunc);\n }\n\n return \"\".concat(property, \" 0ms \").concat(settings.animationTimingFunc);\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 Components.Html.wrapper.style.transition = this.compose(property);\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 * 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 * Enable transition.\n *\n * @return {Void}\n */\n enable: function enable() {\n disabled = false;\n this.set();\n },\n\n /**\n * Disable transition.\n *\n * @return {Void}\n */\n disable: function disable() {\n disabled = true;\n this.set();\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 * Set transition `style` value:\n * - on each moving, because it may be cleared by offset move\n */\n\n Events.on('move', function () {\n Transition.set();\n });\n /**\n * Disable transition:\n * - before initial build to avoid transitioning from `0` to `startAt` index\n * - while resizing window and recalculating dimensions\n * - on jumping from offset transition at start and end edges in `carousel` type\n */\n\n Events.on(['build.before', 'resize', 'translate.jump'], function () {\n Transition.disable();\n });\n /**\n * Enable transition:\n * - on each running, because it may be disabled by offset move\n */\n\n Events.on('run', function () {\n Transition.enable();\n });\n /**\n * Remove transition:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Transition.remove();\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 var supportsPassive = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n } catch (e) {}\n\n var supportsPassive$1 = supportsPassive;\n\n var START_EVENTS = ['touchstart', 'mousedown'];\n var MOVE_EVENTS = ['touchmove', 'mousemove'];\n var END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\n var MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\n function Swipe (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var swipeSin = 0;\n var swipeStartX = 0;\n var swipeStartY = 0;\n var disabled = false;\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Swipe = {\n /**\n * Initializes swipe bindings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bindSwipeStart();\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 var swipe = this.touches(event);\n swipeSin = null;\n swipeStartX = toInt(swipe.pageX);\n swipeStartY = toInt(swipe.pageY);\n this.bindSwipeMove();\n this.bindSwipeEnd();\n Events.emit('swipe.start');\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 var swipe = this.touches(event);\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 swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n if (swipeSin * 180 / Math.PI < touchAngle) {\n event.stopPropagation();\n Components.Move.make(subExSx * toFloat(touchRatio));\n Components.Html.root.classList.add(classes.dragging);\n Events.emit('swipe.move');\n } else {\n return false;\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 _Glide$settings2 = Glide.settings,\n perSwipe = _Glide$settings2.perSwipe,\n touchAngle = _Glide$settings2.touchAngle,\n classes = _Glide$settings2.classes;\n var swipe = this.touches(event);\n var threshold = this.threshold(event);\n var swipeDistance = swipe.pageX - swipeStartX;\n var swipeDeg = swipeSin * 180 / Math.PI;\n this.enable();\n\n if (swipeDistance > threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\n } else if (swipeDistance < -threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n } else {\n // While swipe don't reach distance apply previous transform.\n Components.Move.make();\n }\n\n Components.Html.root.classList.remove(classes.dragging);\n this.unbindSwipeMove();\n this.unbindSwipeEnd();\n Events.emit('swipe.end');\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 _Glide$settings3 = Glide.settings,\n swipeThreshold = _Glide$settings3.swipeThreshold,\n dragThreshold = _Glide$settings3.dragThreshold;\n\n if (swipeThreshold) {\n Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n\n if (dragThreshold) {\n Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\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 * 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 * 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 * 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 * 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 * 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 * 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 * Enables swipe event.\n *\n * @return {self}\n */\n enable: function enable() {\n disabled = false;\n Components.Transition.enable();\n return this;\n },\n\n /**\n * Disables swipe event.\n *\n * @return {self}\n */\n disable: function disable() {\n disabled = true;\n Components.Transition.disable();\n return this;\n }\n };\n /**\n * Add component class:\n * - after initial building\n */\n\n Events.on('build.after', function () {\n Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n });\n /**\n * Remove swiping bindings:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Swipe.unbindSwipeStart();\n Swipe.unbindSwipeMove();\n Swipe.unbindSwipeEnd();\n Binder.destroy();\n });\n return Swipe;\n }\n\n function Images (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\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 * 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 * 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 * Event handler. Prevents dragging.\n *\n * @return {Void}\n */\n dragstart: function dragstart(event) {\n event.preventDefault();\n }\n };\n /**\n * Remove bindings from images:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Images.unbind();\n Binder.destroy();\n });\n return Images;\n }\n\n function 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 * Holds detaching status of anchors.\n * Prevents detaching of already detached anchors.\n *\n * @private\n * @type {Boolean}\n */\n\n var detached = false;\n /**\n * Holds preventing status of anchors.\n * If `true` redirection after click will be disabled.\n *\n * @private\n * @type {Boolean}\n */\n\n var prevented = false;\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 this.bind();\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 * 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 * 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 * 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\n detached = true;\n }\n\n return this;\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\n detached = false;\n }\n\n return this;\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 * Detach anchors inside slides:\n * - on swiping, so they won't redirect to its `href` attributes\n */\n\n Events.on('swipe.move', function () {\n Anchors.detach();\n });\n /**\n * Attach anchors inside slides:\n * - after swiping and transitions ends, so they can redirect after click again\n */\n\n Events.on('swipe.end', function () {\n Components.Transition.after(function () {\n Anchors.attach();\n });\n });\n /**\n * Unbind anchors inside slides:\n * - on destroying, to bring anchors to its initial state\n */\n\n Events.on('destroy', function () {\n Anchors.attach();\n Anchors.unbind();\n Binder.destroy();\n });\n return Anchors;\n }\n\n var NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\n var CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\n var PREVIOUS_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\"<\\\"]\");\n var NEXT_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\">\\\"]\");\n function Controls (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\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 * Collection of controls HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n\n this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n /**\n * Collection of arrow control HTML elements.\n *\n * @private\n * @type {Object}\n */\n\n this._arrowControls = {\n previous: Components.Html.root.querySelectorAll(PREVIOUS_CONTROLS_SELECTOR),\n next: Components.Html.root.querySelectorAll(NEXT_CONTROLS_SELECTOR)\n };\n this.addBindings();\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 * 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 * 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 return;\n }\n\n if (item) {\n item.classList.add(settings.classes.nav.active);\n siblings(item).forEach(function (sibling) {\n sibling.classList.remove(settings.classes.nav.active);\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.nav.active);\n }\n },\n\n /**\n * Calculates, removes or adds `Glide.settings.classes.disabledArrow` class on the control arrows\n */\n setArrowState: function setArrowState() {\n if (Glide.settings.rewind) {\n return;\n }\n\n var next = Controls._arrowControls.next;\n var previous = Controls._arrowControls.previous;\n this.resetArrowState(next, previous);\n\n if (Glide.index === 0) {\n this.disableArrow(previous);\n }\n\n if (Glide.index === Components.Run.length) {\n this.disableArrow(next);\n }\n },\n\n /**\n * Removes `Glide.settings.classes.disabledArrow` from given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n resetArrowState: function resetArrowState() {\n var settings = Glide.settings;\n\n for (var _len = arguments.length, lists = new Array(_len), _key = 0; _key < _len; _key++) {\n lists[_key] = arguments[_key];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.remove(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds `Glide.settings.classes.disabledArrow` to given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n disableArrow: function disableArrow() {\n var settings = Glide.settings;\n\n for (var _len2 = arguments.length, lists = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n lists[_key2] = arguments[_key2];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.add(settings.classes.arrow.disabled);\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 * 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 * 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 * 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 * Handles `click` event on the arrows HTML elements.\n * Moves slider in direction given via the\n * `data-glide-dir` attribute.\n *\n * @param {Object} event\n * @return {void}\n */\n click: function click(event) {\n if (!supportsPassive$1 && event.type === 'touchstart') {\n event.preventDefault();\n }\n\n var direction = event.currentTarget.getAttribute('data-glide-dir');\n Components.Run.make(Components.Direction.resolve(direction));\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 * 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\n Events.on(['mount.after', 'move.after'], function () {\n Controls.setActive();\n });\n /**\n * Add or remove disabled class of arrow elements\n */\n\n Events.on(['mount.after', 'run'], function () {\n Controls.setArrowState();\n });\n /**\n * Remove bindings and HTML Classes:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Controls.removeBindings();\n Controls.removeActive();\n Binder.destroy();\n });\n return Controls;\n }\n\n function Keyboard (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\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 * Adds keyboard press events.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('keyup', document, this.press);\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 * 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 var perSwipe = Glide.settings.perSwipe;\n\n if (event.code === 'ArrowRight') {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n }\n\n if (event.code === 'ArrowLeft') {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\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\n Events.on(['destroy', 'update'], function () {\n Keyboard.unbind();\n });\n /**\n * Remount component\n * - on updating to reflect potential changes in settings\n */\n\n Events.on('update', function () {\n Keyboard.mount();\n });\n /**\n * Destroy binder:\n * - on destroying to remove listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Keyboard;\n }\n\n function Autoplay (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Autoplay = {\n /**\n * Initializes autoplaying and events.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.enable();\n this.start();\n\n if (Glide.settings.hoverpause) {\n this.bind();\n }\n },\n\n /**\n * Enables autoplaying\n *\n * @returns {Void}\n */\n enable: function enable() {\n this._e = true;\n },\n\n /**\n * Disables autoplaying.\n *\n * @returns {Void}\n */\n disable: function disable() {\n this._e = false;\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 (!this._e) {\n return;\n }\n\n this.enable();\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\n Events.emit('autoplay');\n }, this.time);\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 * 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 if (_this2._e) {\n _this2.stop();\n }\n });\n Binder.on('mouseout', Components.Html.root, function () {\n if (_this2._e) {\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 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 * 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\n Events.on(['destroy', 'update'], function () {\n Autoplay.unbind();\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\n Events.on(['run.before', 'swipe.start', 'update'], function () {\n Autoplay.stop();\n });\n Events.on(['pause', 'destroy'], function () {\n Autoplay.disable();\n Autoplay.stop();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['run.after', 'swipe.end'], function () {\n Autoplay.start();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['play'], function () {\n Autoplay.enable();\n Autoplay.start();\n });\n /**\n * Remount autoplaying:\n * - on updating via API to reset interval that may changed\n */\n\n Events.on('update', function () {\n Autoplay.mount();\n });\n /**\n * Destroy a binder:\n * - on destroying glide instance to clearup listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\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 */\n\n function 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\n function 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 * Holds reference to settings.\n *\n * @type {Object}\n */\n\n var settings = Glide.settings;\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\n var points = sortBreakpoints(settings.breakpoints);\n /**\n * Cache initial settings before overwritting.\n *\n * @type {Object}\n */\n\n var defaults = Object.assign({}, settings);\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: \".concat(point, \"px)\")).matches) {\n return points[point];\n }\n }\n }\n }\n\n return defaults;\n }\n };\n /**\n * Overwrite instance settings with currently matching breakpoint settings.\n * This happens right after component initialization.\n */\n\n Object.assign(settings, Breakpoints.match(points));\n /**\n * Update glide with settings of matched brekpoint:\n * - window resize to update slider\n */\n\n Binder.on('resize', window, throttle(function () {\n Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n }, Glide.settings.throttle));\n /**\n * Resort and update default settings:\n * - on reinit via API, so breakpoint matching will be performed with options\n */\n\n Events.on('update', function () {\n points = sortBreakpoints(points);\n defaults = Object.assign({}, settings);\n });\n /**\n * Unbind resize listener:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Binder.off('resize', window);\n });\n return Breakpoints;\n }\n\n var 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 // Optional\n Swipe: Swipe,\n Images: Images,\n Anchors: Anchors,\n Controls: Controls,\n Keyboard: Keyboard,\n Autoplay: Autoplay,\n Breakpoints: Breakpoints\n };\n\n var Glide = /*#__PURE__*/function (_Core) {\n _inherits(Glide, _Core);\n\n var _super = _createSuper(Glide);\n\n function Glide() {\n _classCallCheck(this, Glide);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return _get(_getPrototypeOf(Glide.prototype), \"mount\", this).call(this, Object.assign({}, COMPONENTS, extensions));\n }\n }]);\n\n return Glide;\n }(Glide$1);\n\n return Glide;\n\n}));\n\n},{}]},{},[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25])(25)\n});\n\n","export const setRangeMax = (arr: NodeListOf, input: HTMLInputElement, perView: number) => {\r\n const totalSlides = arr.length;\r\n\r\n if (totalSlides <= perView) {\r\n input.max = '0';\r\n } else {\r\n const steps = Math.ceil(totalSlides - perView);\r\n input.max = steps.toString();\r\n }\r\n\r\n setRangeThumbWidth(Number(input.max), input);\r\n}\r\n\r\nexport const handleCarouselButtons = (arr: NodeListOf, perView: number, carousel: HTMLElement, glide) => {\r\n const totalSlides = arr.length;\r\n const buttons = carousel.querySelector('[data-glide-el=\"controls\"]') as HTMLElement;\r\n\r\n if (totalSlides <= perView) {\r\n buttons.classList.add('hidden');\r\n glide.disable()\r\n } else {\r\n buttons.classList.remove('hidden');\r\n glide.enable()\r\n }\r\n}\r\n\r\n// Used for carousels containers that have \"container container--padding-left\" classes\r\nexport const handleContainerPaddingLeft = (arr: NodeListOf, perView: number, container: HTMLElement) => {\r\n const totalSlides = arr.length;\r\n\r\n if (totalSlides <= perView) {\r\n container.classList.remove('container--padding-left');\r\n } else{\r\n container.classList.add('container--padding-left');\r\n }\r\n} \r\n\r\n// Used for carousels containers that have \"container\" class only\r\nexport const handlePadding = (arr: NodeListOf, perView: number, container: HTMLElement) => {\r\n const totalSlides = arr.length;\r\n\r\n if(window.innerWidth < 992) {\r\n if (totalSlides <= perView) {\r\n container.classList.remove('container--padding-left');\r\n } else {\r\n container.classList.add('container--padding-left');\r\n }\r\n } else {\r\n container.classList.remove('container--padding-left');\r\n }\r\n};\r\n\r\nconst setRangeThumbWidth = (max: number, input: HTMLInputElement) => {\r\n const width = max === 1 ? 100 : 200 / max;\r\n input.style.setProperty('--thumb-size', `${width}px`);\r\n}\r\n","import selectedFilters from \"../filterElement/filterElement\";\r\nimport { updatePagination, disablePagination, enablePagination } from \"../pagination/pagination\";\r\nconst cardGrid = document.querySelector(\".card-grid\") as HTMLElement;\r\n\r\nif (cardGrid) {\r\n const cardGridFilters = cardGrid.querySelector(\".card-grid__filters\") as HTMLElement;\r\n const cardGridTrigger = cardGrid.querySelector(\".card-grid__trigger\") as HTMLElement;\r\n const paginationElement = cardGrid.querySelector(\".pagination\") as HTMLElement;\r\n const grid = cardGrid.querySelector(\".card-grid__grid\") as HTMLElement;\r\n const labels: NodeListOf = cardGrid.querySelectorAll('.filters__dropdown-content label');\r\n\r\n const parentId = cardGrid.getAttribute(\"data-parent-id\") as string;\r\n\r\n let types: Array = [];\r\n let topics: Array = [];\r\n let pageSize: number = 8;\r\n\r\n let pageNumber: number = 1;\r\n let hasNextPage: boolean = false;\r\n let hasPreviousPage: boolean = false;\r\n let totalCount: number = 0;\r\n let totalPages: number = 0;\r\n\r\n let cards: Array = [];\r\n\r\n const baseURL = window.location.origin;\r\n\r\n const fetchData = async () => {\r\n disablePagination(paginationElement)\r\n disableFilters()\r\n getFilters()\r\n\r\n const url = `${baseURL}/umbraco/api/imagecards/GetChildPages?parentId=${parentId}&page=${pageNumber}&pageSize=${pageSize}${generateFilterString(\"featureTags\", topics)}${generateFilterString(\"mediaTypes\", types)}`;\r\n\r\n try {\r\n const response = await fetch(url, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error('Network response was not ok ' + response.statusText);\r\n }\r\n\r\n const data = await response.json();\r\n cards = data.items;\r\n\r\n setPaginationData(data)\r\n renderCards()\r\n enablePagination(paginationElement)\r\n enableFilters()\r\n } catch (error) {\r\n grid.innerHTML = \"There was an error\"\r\n console.error('There was a problem with the fetch operation:', error);\r\n }\r\n }\r\n\r\n const setPaginationData = (data: any) => {\r\n totalPages = data.totalPages\r\n totalCount = data.totalItems\r\n hasNextPage = data.hasNextPage\r\n hasPreviousPage = data.hasPreviousPage\r\n\r\n updatePagination(pageNumber, totalPages, totalCount, pageSize, hasNextPage, hasPreviousPage)\r\n }\r\n\r\n const renderCards = () => {\r\n grid.innerHTML = \"\";\r\n\r\n if (cards.length > 0) {\r\n cards.forEach(card => {\r\n const cardElement = document.createElement(\"a\");\r\n cardElement.href = card.link.url;\r\n cardElement.className = \"card-grid__card flex flex--column\";\r\n\r\n cardElement.innerHTML = `\r\n ${card.imageUrl ? `\r\n
\r\n ${card.title}\r\n\r\n ${card.featureTag ? `\r\n
\r\n ${card.featureTag}\r\n
`\r\n : \"\"}\r\n\r\n
`\r\n : \"\"}\r\n
\r\n ${card.featureTag && !card.imageUrl ? `\r\n
\r\n ${card.featureTag}\r\n
`\r\n : \"\"}\r\n
\r\n\r\n ${card.date ? `\r\n \r\n ${card.date}\r\n `\r\n : \"\"}\r\n\r\n ${card.mediaType}\r\n
\r\n

\r\n ${card.title}\r\n

\r\n

\r\n ${card.content}\r\n

\r\n \r\n
\r\n `\r\n\r\n grid.appendChild(cardElement)\r\n })\r\n } else {\r\n grid.innerHTML = \"No results found\"\r\n }\r\n }\r\n\r\n const getFilters = () => {\r\n const filters = selectedFilters;\r\n\r\n types = [];\r\n topics = [];\r\n\r\n filters.forEach(filter => {\r\n if (filter.category === 0) {\r\n types.push(filter.name)\r\n } else if (filter.category === 1) {\r\n topics.push(filter.name)\r\n }\r\n })\r\n }\r\n\r\n const generateFilterString = (category: string, array: Array) => {\r\n let string = \"\";\r\n\r\n if (array.length > 0) {\r\n string += \"&\";\r\n }\r\n\r\n array.forEach((item, i) => {\r\n string += `${category}=${item}`;\r\n\r\n if (i < array.length - 1) {\r\n string += \"&\";\r\n }\r\n })\r\n\r\n return string;\r\n }\r\n\r\n const createTagListener = () => {\r\n const tags: NodeListOf = cardGrid.querySelectorAll(\".filters__tag\");\r\n\r\n tags.forEach(tag => {\r\n tag.addEventListener(\"click\", () => {\r\n pageNumber = 1\r\n fetchData()\r\n })\r\n\r\n tag.addEventListener('keydown', (e: KeyboardEvent) => {\r\n if (e.key === 'Enter') {\r\n pageNumber = 1\r\n fetchData()\r\n }\r\n });\r\n })\r\n }\r\n\r\n const disableFilters = () => {\r\n const tags: NodeListOf = cardGrid.querySelectorAll(\".filters__tag\");\r\n\r\n labels.forEach(label => {\r\n label.classList.add(\"filters__dropdown-label--disabled\");\r\n label.setAttribute(\"tabindex\", \"-1\");\r\n })\r\n\r\n tags.forEach((tag: HTMLButtonElement) => {\r\n tag.disabled = true;\r\n })\r\n }\r\n\r\n const enableFilters = () => {\r\n const tags: NodeListOf = cardGrid.querySelectorAll(\".filters__tag\");\r\n\r\n labels.forEach(label => {\r\n label.classList.remove(\"filters__dropdown-label--disabled\");\r\n label.setAttribute(\"tabindex\", \"0\");\r\n })\r\n\r\n tags.forEach((tag: HTMLButtonElement) => {\r\n tag.disabled = false;\r\n })\r\n }\r\n\r\n labels.forEach(label => {\r\n label.addEventListener(\"click\", () => {\r\n pageNumber = 1\r\n fetchData()\r\n createTagListener()\r\n })\r\n\r\n label.addEventListener('keydown', (e: KeyboardEvent) => {\r\n if (e.key === 'Enter') {\r\n pageNumber = 1\r\n fetchData()\r\n createTagListener()\r\n }\r\n });\r\n })\r\n\r\n if (cardGridTrigger) {\r\n cardGridTrigger.addEventListener(\"click\", () => {\r\n cardGridFilters.classList.toggle(\"card-grid__filters--active\");\r\n })\r\n }\r\n\r\n paginationElement.addEventListener(\"click\", e => {\r\n const target = e.target as HTMLElement;\r\n\r\n if (target.tagName === 'BUTTON') {\r\n const li = target.closest('button');\r\n\r\n if (li.classList.contains('prev')) {\r\n pageNumber = pageNumber - 1;\r\n } else if (li.classList.contains('next')) {\r\n pageNumber = pageNumber + 1;\r\n } else if (li.classList.contains('pagination__numb')) {\r\n pageNumber = parseInt(target.textContent);\r\n }\r\n\r\n disablePagination(paginationElement)\r\n fetchData();\r\n updatePagination(pageNumber, totalPages, totalCount, pageSize, hasNextPage, hasPreviousPage)\r\n }\r\n })\r\n\r\n fetchData()\r\n}","import Glide from '@glidejs/glide';\r\nimport { setRangeMax, handleCarouselButtons, handlePadding } from '../../../helpers/carouselRange';\r\n\r\nconst careerCarousels: NodeListOf = document.querySelectorAll('.careers-carousel__inner');\r\n\r\nif (careerCarousels.length > 0) {\r\n careerCarousels.forEach((item) => {\r\n var glide = new Glide(item, {\r\n type: 'slider',\r\n perView: 3,\r\n gap: 60,\r\n bound: true,\r\n rewind: false,\r\n breakpoints: {\r\n 1200: {\r\n perView: 3,\r\n gap: 30,\r\n },\r\n 800: {\r\n perView: 1.7,\r\n gap: 30,\r\n },\r\n 600: {\r\n perView: 1.4,\r\n gap: 30,\r\n },\r\n 480: {\r\n perView: 1.2,\r\n gap: 30,\r\n },\r\n },\r\n });\r\n\r\n glide.mount();\r\n\r\n const carouselRange = item.querySelector('.careers-carousel__range') as HTMLInputElement;\r\n\r\n carouselRange.addEventListener('input', (e) => {\r\n setTimeout(() => {\r\n glide.go(`=${carouselRange.value}`);\r\n }, 500);\r\n });\r\n\r\n const carouselContainer = item.parentElement as HTMLElement;\r\n const slides: NodeListOf = item.querySelectorAll('.careers-carousel__item');\r\n setRangeMax(slides, carouselRange, glide.settings.perView);\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide)\r\n\r\n glide.on('move.after', () => {\r\n const currentIndex = glide.index;\r\n carouselRange.value = currentIndex;\r\n });\r\n\r\n glide.on('resize', () => {\r\n setRangeMax(slides, carouselRange, glide.settings.perView);\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n handlePadding(slides, glide.settings.perView, carouselContainer)\r\n glide.go(`=0`);\r\n });\r\n\r\n // Covers the phantom gap that appears in the carousel when there are less than 3 slides\r\n if (slides.length < 3) {\r\n const carouselItems: NodeListOf = item.querySelectorAll('.careers-carousel__item');\r\n\r\n carouselItems.forEach((item) => {\r\n item.style.flex = \"1\";\r\n })\r\n }\r\n });\r\n}\r\n","const featureBannerVideos = document.querySelectorAll(\".feature-banner__video\")\r\nconst featureBannerVideosMorning = document.querySelectorAll(\".feature-banner__video-morning\")\r\nconst featureBannerVideosAfternoon = document.querySelectorAll(\".feature-banner__video-afternoon\")\r\nconst featureBannerVideosEvening = document.querySelectorAll(\".feature-banner__video-evening\")\r\n\r\nif(featureBannerVideos){\r\n getLocation()\r\n\r\n function getLocation() {\r\n const now = new Date();\r\n const currentHour = now.getHours();\r\n\r\n const featureBannerVideosArray = Array.from(featureBannerVideos)\r\n\r\n featureBannerVideosArray.forEach(item => {\r\n resetFeatureBannerVideo(item)\r\n\r\n switch (true) {\r\n case currentHour < 6:\r\n item.classList.contains(\"feature-banner__video-morning\") && item.classList.add(\"feature-banner__video--active\")\r\n break;\r\n case currentHour >= 6 && currentHour < 12:\r\n item.classList.contains(\"feature-banner__video-morning\") && item.classList.add(\"feature-banner__video--active\")\r\n break;\r\n case currentHour >= 12 && currentHour <= 17:\r\n item.classList.contains(\"feature-banner__video-afternoon\") && item.classList.add(\"feature-banner__video--active\")\r\n break;\r\n case currentHour > 17:\r\n item.classList.contains(\"feature-banner__video-evening\") && item.classList.add(\"feature-banner__video--active\")\r\n break;\r\n default:\r\n item.classList.contains(\"feature-banner__video-morning\") && item.classList.add(\"feature-banner__video--active\")\r\n break;\r\n } \r\n }) \r\n }\r\n\r\n function resetFeatureBannerVideo (item){\r\n item.classList.remove(\"feature-banner__video--active\")\r\n }\r\n}","import Glide from '@glidejs/glide';\r\nimport { setRangeMax, handleCarouselButtons, handleContainerPaddingLeft } from '../../../helpers/carouselRange';\r\n\r\nconst featureCarousels: NodeListOf = document.querySelectorAll('.feature-carousel__inner');\r\n\r\nif (featureCarousels.length > 0) {\r\n featureCarousels.forEach((item) => {\r\n var glide = new Glide(item, {\r\n type: 'slider',\r\n perView: 3.52,\r\n gap: 20,\r\n bound: true,\r\n rewind: false,\r\n breakpoints: {\r\n 1200: {\r\n perView: 2.5,\r\n },\r\n 760: {\r\n perView: 1.7,\r\n },\r\n 550: {\r\n perView: 1.2,\r\n },\r\n },\r\n });\r\n\r\n glide.mount();\r\n\r\n const featureCarouselContainer = item.parentElement as HTMLElement;\r\n const carouselRange = item.querySelector('.feature-carousel__range') as HTMLInputElement;\r\n\r\n carouselRange.addEventListener('input', (e) => {\r\n setTimeout(() => {\r\n glide.go(`=${carouselRange.value}`);\r\n }, 500);\r\n });\r\n\r\n const slides: NodeListOf = item.querySelectorAll('.feature-carousel__item');\r\n setRangeMax(slides, carouselRange, glide.settings.perView);\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide)\r\n handleContainerPaddingLeft(slides, glide.settings.perView,featureCarouselContainer)\r\n\r\n glide.on('move.after', () => {\r\n const currentIndex = glide.index;\r\n carouselRange.value = currentIndex;\r\n });\r\n\r\n glide.on('resize', () => {\r\n setRangeMax(slides, carouselRange, glide.settings.perView);\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide)\r\n handleContainerPaddingLeft(slides, glide.settings.perView,featureCarouselContainer)\r\n glide.go(`=0`);\r\n \r\n });\r\n\r\n // Covers the phantom gap that appears in the carousel when there are less than 3 slides\r\n if(slides.length < 3) {\r\n const carouselItems: NodeListOf = item.querySelectorAll('.feature-carousel__item');\r\n\r\n carouselItems.forEach((item) => {\r\n item.style.flex = \"1\";\r\n })\r\n }\r\n });\r\n}\r\n","const filters: NodeListOf = document.querySelectorAll(\".filters\");\r\nlet selectedFilters = [] as Array;\r\n\r\nconst closeAllDropdowns = () => {\r\n const contents: NodeListOf = document.querySelectorAll(\".filters__dropdown-content\");\r\n contents.forEach(item => item.classList.remove(\"filters__dropdown-content--active\"));\r\n};\r\n\r\ndocument.addEventListener('click', closeAllDropdowns);\r\n\r\ndocument.addEventListener('keydown', (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n closeAllDropdowns();\r\n }\r\n});\r\n\r\nfilters.forEach((filter, i) => {\r\n const tags = filter.querySelector(\".filters__tags\") as HTMLElement;\r\n const dropdown = filter.querySelector('.filters__dropdown-content') as HTMLElement;\r\n const dropdownButton = filter.querySelector('.filters__dropdown-button') as HTMLElement;\r\n const bottom = filter.querySelector('.filters__bottom') as HTMLElement;\r\n\r\n const createTag = (tag: string) => {\r\n const value = tag;\r\n\r\n const button = document.createElement(\"button\");\r\n button.className = \"flex flex--align-center filters__tag\";\r\n button.innerHTML = `\r\n ${value}\r\n \r\n `;\r\n\r\n createTagListener(button, value);\r\n tags.appendChild(button);\r\n };\r\n\r\n const removeTag = (value: string) => {\r\n const buttons: NodeListOf = document.querySelectorAll('.filters__tag');\r\n\r\n buttons.forEach(button => {\r\n const buttonValue = button.querySelector('.filters__tag-name').textContent;\r\n\r\n if (buttonValue === value) {\r\n button.parentElement.removeChild(button);\r\n }\r\n });\r\n };\r\n\r\n const createTagListener = (button: HTMLElement, value: string) => {\r\n button.addEventListener(\"click\", () => {\r\n removeTag(value);\r\n\r\n const checkbox = Array.from(document.querySelectorAll(\"input[type='checkbox']\")).find(cb => (cb as HTMLInputElement).value === value);\r\n if (checkbox) {\r\n (checkbox as HTMLInputElement).checked = false;\r\n }\r\n\r\n const label = Array.from(document.querySelectorAll('.filters__dropdown-content label')).find(lbl => lbl.querySelector(\"input\").value === value);\r\n if (label) {\r\n label.classList.remove(\"filters__dropdown-label--active\");\r\n }\r\n\r\n const index = selectedFilters.findIndex(filter => filter.name === value);\r\n if (index > -1) {\r\n selectedFilters.splice(index, 1);\r\n }\r\n\r\n toggleBottom()\r\n });\r\n };\r\n\r\n const toggleBottom = () => {\r\n if (tags.children.length > 0) {\r\n bottom.classList.add(\"filters__bottom--active\");\r\n } else {\r\n bottom.classList.remove(\"filters__bottom--active\");\r\n }\r\n }\r\n\r\n dropdownButton.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n\r\n const contents: NodeListOf = document.querySelectorAll(\".filters__dropdown-content\");\r\n\r\n contents.forEach((item, num) => {\r\n if (num !== i) {\r\n item.classList.remove(\"filters__dropdown-content--active\");\r\n }\r\n })\r\n\r\n if (dropdown.classList.contains(\"filters__dropdown-content--active\")) {\r\n dropdown.classList.remove(\"filters__dropdown-content--active\");\r\n } else {\r\n dropdown.classList.add(\"filters__dropdown-content--active\");\r\n }\r\n });\r\n\r\n const labels: NodeListOf = filter.querySelectorAll('.filters__dropdown-content label');\r\n\r\n labels.forEach(label => {\r\n const handleEvent = (e: Event) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n const checkbox: HTMLInputElement = label.querySelector(\"input\");\r\n checkbox.checked = !checkbox.checked;\r\n\r\n if (checkbox.checked) {\r\n if (!selectedFilters.some(filter => filter.name === checkbox.value)) {\r\n selectedFilters.push({ name: checkbox.value, category: i });\r\n createTag(checkbox.value);\r\n }\r\n } else {\r\n const index = selectedFilters.findIndex(filter => filter.name === checkbox.value);\r\n\r\n if (index > -1) {\r\n selectedFilters.splice(index, 1);\r\n removeTag(checkbox.value);\r\n }\r\n }\r\n\r\n label.classList.toggle(\"filters__dropdown-label--active\", checkbox.checked);\r\n\r\n toggleBottom()\r\n };\r\n\r\n label.addEventListener('click', handleEvent);\r\n\r\n label.addEventListener('keydown', (e: KeyboardEvent) => {\r\n if (e.key === 'Enter') {\r\n handleEvent(e);\r\n }\r\n });\r\n });\r\n});\r\n\r\nexport default selectedFilters;","import Glide from '@glidejs/glide';\r\n\r\nconst fullMediaCarousels: NodeListOf = document.querySelectorAll('.full-media-carousel__inner');\r\n\r\nif (fullMediaCarousels.length > 0) {\r\n fullMediaCarousels.forEach((item) => {\r\n const mediaItems = item.querySelectorAll('.full-media-carousel__item');\r\n const leftButton = item.querySelector('.full-media-carousel__arrow-left');\r\n const rightButton = item.querySelector('.full-media-carousel__arrow-right');\r\n\r\n var glide = new Glide(item, {\r\n type: 'slider',\r\n perView: 1,\r\n gap: 0,\r\n rewind: false,\r\n bound: true,\r\n });\r\n\r\n if (mediaItems.length == 1) {\r\n leftButton.classList.add('hidden');\r\n rightButton.classList.add('hidden');\r\n glide.disable();\r\n }\r\n\r\n glide.mount();\r\n });\r\n}\r\n","const fullMediaVideoContainer = document.querySelectorAll(\".full-media\")\r\n\r\nif(fullMediaVideoContainer){\r\nconst fullMediaVideoContainerArray = Array.from(fullMediaVideoContainer)\r\n\r\nfullMediaVideoContainerArray.forEach(item => {\r\n const fullMediaButton = item.querySelector(\".full-media__button\") as HTMLElement\r\n const fullMediaContent = item.querySelector(\".full-media__content\") as HTMLElement\r\n const fullMediaVideo = item.querySelector(\".full-media__video\") as HTMLVideoElement\r\n\r\n item.addEventListener(\"click\", e => {\r\n showFullMediaVideo(item)\r\n })\r\n\r\n function showFullMediaVideo(item) {\r\n item.classList.toggle(\"full-media--active\")\r\n fullMediaButton.classList.toggle(\"full-media__button--active\")\r\n fullMediaContent.classList.toggle(\"full-media__content--active\")\r\n fullMediaVideo.classList.toggle(\"full-media__video--active\")\r\n fullMediaVideo.play()\r\n fullMediaVideo.setAttribute(\"controls\",\"controls\") \r\n }\r\n })\r\n}","document.addEventListener('DOMContentLoaded', function() {\r\n var dropdownTriggers = document.querySelectorAll('.dropdown .header__title, .dropdown .header__link');\r\n\r\n dropdownTriggers.forEach(function(trigger) {\r\n trigger.addEventListener('focus', function() {\r\n this.nextElementSibling.style.display = 'flex'; // Show dropdown\r\n this.nextElementSibling.style.opacity = 1;\r\n });\r\n\r\n trigger.addEventListener('blur', function() {\r\n this.nextElementSibling.style.display = 'none'; // Hide dropdown\r\n this.nextElementSibling.style.opacity = 0;\r\n });\r\n });\r\n\r\n var dropdownLinks = document.querySelectorAll('.dropdown-content a');\r\n\r\n dropdownLinks.forEach(function(link) {\r\n link.addEventListener('focus', function() {\r\n this.closest('.dropdown-content').style.display = 'flex'; // Keep dropdown open\r\n this.closest('.dropdown-content').style.opacity = 1;\r\n });\r\n\r\n link.addEventListener('blur', function(event) {\r\n // Delay hiding to check if next focused element is within the same dropdown\r\n setTimeout(() => {\r\n if (!this.closest('.dropdown').contains(document.activeElement)) {\r\n this.closest('.dropdown-content').style.display = 'none';\r\n this.closest('.dropdown-content').style.opacity = 0;\r\n }\r\n }, 0);\r\n });\r\n });\r\n});","import Glide from '@glidejs/glide';\r\nimport { setRangeMax, handleCarouselButtons, handlePadding } from '../../../helpers/carouselRange';\r\n\r\nconst iconCarousels: NodeListOf = document.querySelectorAll('.icon-carousel__inner');\r\n\r\nif (iconCarousels.length > 0) {\r\n iconCarousels.forEach((item) => {\r\n var glide = new Glide(item, {\r\n type: 'slider',\r\n perView: 3,\r\n gap: 60,\r\n rewind: false,\r\n bound: true,\r\n breakpoints: {\r\n 992: {\r\n perView: 2.5,\r\n gap: 30,\r\n },\r\n 600: {\r\n perView: 1.7,\r\n gap: 30,\r\n },\r\n 450: {\r\n perView: 1.2,\r\n gap: 30,\r\n },\r\n },\r\n });\r\n\r\n glide.mount();\r\n\r\n const carouselRange = item.querySelector('.icon-carousel__range') as HTMLInputElement;\r\n\r\n carouselRange.addEventListener('input', (e) => {\r\n setTimeout(() => {\r\n glide.go(`=${carouselRange.value}`);\r\n }, 500);\r\n });\r\n\r\n const carouselContainer = item.parentElement as HTMLElement;\r\n const slides: NodeListOf = item.querySelectorAll('.icon-carousel__item');\r\n setRangeMax(slides, carouselRange, glide.settings.perView);\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide)\r\n handlePadding(slides, glide.settings.perView, carouselContainer)\r\n\r\n glide.on('move.after', () => {\r\n const currentIndex = glide.index;\r\n carouselRange.value = currentIndex;\r\n });\r\n\r\n glide.on('resize', () => {\r\n setRangeMax(slides, carouselRange, glide.settings.perView);\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n handlePadding(slides, glide.settings.perView, carouselContainer)\r\n glide.go(`=0`);\r\n });\r\n\r\n // Covers the phantom gap that appears in the carousel when there are less than 3 slides\r\n if(slides.length < 3) {\r\n const carouselItems: NodeListOf = item.querySelectorAll('.icon-carousel__item');\r\n\r\n carouselItems.forEach((item) => {\r\n item.style.flex = \"1\";\r\n })\r\n }\r\n });\r\n}","import Glide from '@glidejs/glide';\r\nimport { setRangeMax, handleCarouselButtons, handleContainerPaddingLeft } from '../../../helpers/carouselRange';\r\n\r\nconst imageCardCarousels: NodeListOf = document.querySelectorAll('.image-carousel__inner');\r\n\r\nimageCardCarousels.forEach((item) => {\r\n var glide = new Glide(item, {\r\n type: 'slider',\r\n perView: 3.5,\r\n gap: 20,\r\n rewind: false,\r\n bound: true,\r\n breakpoints: {\r\n 1200: {\r\n perView: 2.5,\r\n gap: 30,\r\n },\r\n 760: {\r\n perView: 1.7,\r\n gap: 30,\r\n },\r\n 550: {\r\n perView: 1.2,\r\n gap: 20,\r\n },\r\n },\r\n });\r\n\r\n glide.mount();\r\n\r\n const imageCardCarouselContainer = item.parentElement as HTMLElement;\r\n const carouselRange = item.querySelector('.image-carousel__range') as HTMLInputElement;\r\n\r\n carouselRange.addEventListener('input', (e) => {\r\n setTimeout(() => {\r\n glide.go(`=${carouselRange.value}`);\r\n }, 500);\r\n });\r\n\r\n const slides: NodeListOf = item.querySelectorAll('.image-carousel__item');\r\n setRangeMax(slides, carouselRange, glide.settings.perView);\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide)\r\n handleContainerPaddingLeft(slides, glide.settings.perView,imageCardCarouselContainer)\r\n\r\n glide.on('move.after', () => {\r\n const currentIndex = glide.index;\r\n carouselRange.value = currentIndex;\r\n });\r\n\r\n glide.on('resize', () => {\r\n setRangeMax(slides, carouselRange, glide.settings.perView);\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n handleContainerPaddingLeft(slides, glide.settings.perView,imageCardCarouselContainer);\r\n glide.go(`=0`);\r\n });\r\n});\r\n","import Glide from '@glidejs/glide';\r\nimport { setRangeMax, handleCarouselButtons, handlePadding } from '../../../helpers/carouselRange';\r\n\r\nconst itemCardCarousels: NodeListOf = document.querySelectorAll('.item-carousel__inner');\r\n\r\nif (itemCardCarousels.length > 0) {\r\n itemCardCarousels.forEach((item) => {\r\n var glide = new Glide(item, {\r\n type: 'slider',\r\n perView: 3,\r\n gap: 20,\r\n rewind: false,\r\n bound: true,\r\n breakpoints: {\r\n 992: {\r\n perView: 2.5,\r\n },\r\n 800: {\r\n perView: 1.7,\r\n },\r\n 550: {\r\n perView: 1.2,\r\n },\r\n },\r\n });\r\n\r\n glide.mount();\r\n\r\n const carouselContainer = item.parentElement as HTMLElement;\r\n const carouselRange = item.querySelector('.item-carousel__range') as HTMLInputElement;\r\n\r\n carouselRange.addEventListener('input', (e) => {\r\n setTimeout(() => {\r\n glide.go(`=${carouselRange.value}`);\r\n }, 500);\r\n });\r\n\r\n const slides: NodeListOf = item.querySelectorAll('.item-carousel__item');\r\n setRangeMax(slides, carouselRange, glide.settings.perView);\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide)\r\n handlePadding(slides, glide.settings.perView, carouselContainer)\r\n\r\n glide.on('move.after', () => {\r\n const currentIndex = glide.index;\r\n carouselRange.value = currentIndex;\r\n });\r\n\r\n glide.on('resize', () => {\r\n setRangeMax(slides, carouselRange, glide.settings.perView);\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n handlePadding(slides, glide.settings.perView, carouselContainer)\r\n glide.go(`=0`);\r\n });\r\n\r\n if(slides.length < 3) {\r\n const carouselItems: NodeListOf = item.querySelectorAll('.item-carousel__item');\r\n\r\n carouselItems.forEach((item) => {\r\n item.style.flex = \"1\";\r\n })\r\n }\r\n });\r\n}\r\n","import Glide from '@glidejs/glide';\r\n\r\nconst largeIconGrid: NodeListOf = document.querySelectorAll(\".large-icons-grid__carousel-inner\");\r\n\r\nlargeIconGrid.forEach(item => {\r\n const cards: NodeListOf = item.querySelectorAll(\".large-icons-grid__carousel-card\");\r\n const carousel = item.parentElement as HTMLElement;\r\n\r\n let mobilePerView = 1.2 as number;\r\n\r\n if (cards.length < 2) {\r\n mobilePerView = 1;\r\n\r\n carousel.classList.add(\"large-icons-grid__carousel--padding-right\");\r\n }\r\n\r\n var glide = new Glide(item, {\r\n type: 'slider',\r\n perView: 3.5,\r\n gap: 20,\r\n rewind: false,\r\n breakpoints: {\r\n 1200: {\r\n perView: 2.5,\r\n },\r\n 760: {\r\n perView: 1.7,\r\n },\r\n 550: {\r\n perView: mobilePerView,\r\n },\r\n }\r\n })\r\n\r\n const largeIconsCarouselRange = document.querySelector(\".large-icons-grid__carousel-range\") as HTMLInputElement\r\n const items: NodeListOf = item.querySelectorAll(\".large-icons-grid__carousel-card\")\r\n const itemCount = items.length as number;\r\n\r\n if (itemCount == 1) {\r\n const rightArrow = item.querySelector('.large-icons-grid__carousel-arrow-right') as HTMLElement;\r\n const leftArrow = item.querySelector('.large-icons-grid__carousel-arrow-left') as HTMLElement;\r\n\r\n rightArrow.classList.add('hidden');\r\n leftArrow.classList.add('hidden');\r\n }\r\n\r\n glide.mount()\r\n\r\n largeIconsCarouselRange.addEventListener(\"input\", e => {\r\n setTimeout(() => {\r\n glide.go(`=${largeIconsCarouselRange.value}`)\r\n }, 500);\r\n })\r\n\r\n glide.on('move.after', () => {\r\n const largeIconsCurrentIndex = glide.index;\r\n largeIconsCarouselRange.value = largeIconsCurrentIndex\r\n const rightButton = item.querySelector(\".large-icons-grid__carousel-arrow-right\") as HTMLElement;\r\n\r\n if (largeIconsCurrentIndex > itemCount - 1) {\r\n rightButton.classList.add('glide__arrow--disabled');\r\n } else if (largeIconsCurrentIndex < itemCount - 1) {\r\n rightButton.classList.remove('glide__arrow--disabled');\r\n }\r\n })\r\n})\r\n\r\nif (largeIconGrid) {\r\n largeIconGrid.forEach(item => {\r\n const slides: NodeListOf = item.querySelectorAll(\".large-icons-grid__carousel-card\")\r\n const largeIconsCarouselRange = item.querySelector(\".large-icons-grid__carousel-range\") as HTMLInputElement\r\n\r\n setRangeMax(slides, largeIconsCarouselRange)\r\n })\r\n}\r\n\r\nfunction setRangeMax(arr, input) {\r\n const slidesLength = Array.from(arr).length\r\n const rangeMax = (slidesLength - 1).toString()\r\n input.max = rangeMax\r\n\r\n setRangeThumbWidth(rangeMax, input)\r\n}\r\n\r\nfunction setRangeThumbWidth(max, input) {\r\n const width = 200 / +max\r\n input.style.setProperty('--thumb-size', width.toString() + \"px\");\r\n\r\n if (max === \"1\") {\r\n input.style.setProperty('--thumb-size', \"100px\");\r\n }\r\n}","import Glide from '@glidejs/glide';\r\nimport { handleCarouselButtons } from '../../../helpers/carouselRange';\r\n\r\nconst logoCarousels: NodeListOf = document.querySelectorAll('.logo-carousel__inner');\r\n\r\nlogoCarousels.forEach((item) => {\r\n var glide = new Glide(item, {\r\n type: 'slider',\r\n perView: 6,\r\n gap: 40,\r\n bound: true,\r\n rewind: true,\r\n breakpoints: {\r\n 1300: {\r\n perView: 5,\r\n },\r\n 1100: {\r\n perView: 4,\r\n },\r\n 450: {\r\n perView: 1.2,\r\n },\r\n },\r\n });\r\n\r\n glide.mount();\r\n\r\n // Solution to prevent right edge slide from being cut off\r\n const handleCarouselWidth = () => {\r\n const glideSlides = item.querySelector('.glide__slides') as HTMLElement;\r\n const width = glideSlides.clientWidth;\r\n const newWidth = width - 40;\r\n\r\n glideSlides.style.width = `${newWidth}px`;\r\n }\r\n\r\n handleCarouselWidth()\r\n\r\n const slides: NodeListOf = item.querySelectorAll('.logo-carousel__item');\r\n\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide)\r\n\r\n glide.on('resize', () => {\r\n handleCarouselWidth()\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide)\r\n\r\n glide.go(`=0`);\r\n })\r\n});\r\n\r\n","import Glide from '@glidejs/glide';\r\n\r\nconst mediaCarousels: NodeListOf = document.querySelectorAll('.media-carousel__inner');\r\n\r\nmediaCarousels.forEach((item) => {\r\n const slides: NodeListOf = item.querySelectorAll('.media-carousel__item');\r\n\r\n let componentType = 'carousel' as string;\r\n\r\n if (slides.length < 2) componentType = 'slider';\r\n\r\n var glide = new Glide(item, {\r\n type: componentType,\r\n perView: 1,\r\n peek: {\r\n before: 474,\r\n after: 474\r\n },\r\n gap: 60,\r\n rewind: true,\r\n bound: true,\r\n breakpoints: {\r\n 1380: {\r\n perView: 1,\r\n gap: 60,\r\n peek: {\r\n before: 400,\r\n after: 400\r\n },\r\n },\r\n 1180: {\r\n perView: 1,\r\n gap: 60,\r\n peek: {\r\n before: 300,\r\n after: 300\r\n },\r\n },\r\n 900: {\r\n perView: 1,\r\n gap: 30,\r\n peek: {\r\n before: 200,\r\n after: 200\r\n },\r\n },\r\n 700: {\r\n perView: 1,\r\n gap: 30,\r\n peek: {\r\n before: 100,\r\n after: 100\r\n },\r\n },\r\n 550: {\r\n perView: 1,\r\n gap: 30,\r\n peek: {\r\n before: 80,\r\n after: 80\r\n },\r\n },\r\n 480: {\r\n perView: 1,\r\n gap: 30,\r\n peek: {\r\n before: 0,\r\n after: 0\r\n },\r\n },\r\n },\r\n });\r\n\r\n glide.mount();\r\n\r\n if (componentType === 'slider') {\r\n const leftArrow = item.querySelector('.media-carousel__arrow-left') as HTMLElement;\r\n const rightArrow = item.querySelector('.media-carousel__arrow-right') as HTMLElement;\r\n\r\n leftArrow.classList.add('hidden');\r\n rightArrow.classList.add('hidden');\r\n\r\n glide.disable();\r\n }\r\n});\r\n\r\nmediaCarousels.forEach(carousel => {\r\n const playButtons: NodeListOf = carousel.querySelectorAll('.media-carousel__button');\r\n const videos: NodeListOf = carousel.querySelectorAll('.modal-video__video');\r\n const modals: NodeListOf = carousel.querySelectorAll('.modal-video');\r\n\r\n playButtons.forEach((button, index) => {\r\n button.addEventListener('click', () => {\r\n const video = videos[index] as HTMLVideoElement;\r\n const modal = modals[index] as HTMLDialogElement;\r\n\r\n modal?.showModal();\r\n video?.play();\r\n });\r\n });\r\n\r\n window.addEventListener('click', event => {\r\n videos.forEach(video => {\r\n if (video && (event.target as Element).className == 'modal-video') {\r\n closeVideoModal(video);\r\n }\r\n\r\n if (video && (event.target as Element).id == 'modal-video__close') {\r\n closeVideoModal(video);\r\n }\r\n\r\n if ((event.target as Element).id == 'modal-video__close-icon') {\r\n closeVideoModal(video);\r\n }\r\n });\r\n });\r\n\r\n function closeVideoModal(video: HTMLVideoElement) {\r\n video.pause();\r\n video.currentTime = 0;\r\n\r\n modals.forEach(modal => {\r\n const modalElement = modal as HTMLDialogElement;\r\n\r\n modalElement.close();\r\n });\r\n }\r\n});\r\n","const videoContainer = document.querySelector(\".media-with-text__right\") as HTMLElement\r\nconst placeholder = document.querySelector(\".media-with-text__placeholder\") as HTMLElement\r\nconst button = document.querySelector(\".media-with-text__button\") as HTMLElement\r\nconst video = document.querySelector(\".media-with-text__video\") as HTMLVideoElement\r\n\r\nif(videoContainer){\r\n videoContainer.addEventListener(\"click\", e => {\r\n if(video) {\r\n showVideo()\r\n }\r\n })\r\n\r\n function showVideo() {\r\n placeholder.classList.remove(\"media-with-text__placeholder--active\")\r\n button.classList.remove(\"media-with-text__button--active\")\r\n video.classList.add(\"media-with-text__video--active\")\r\n video.play()\r\n }\r\n}","import Glide from '@glidejs/glide'\r\n\r\nconst miniIconsGridCarousel: NodeListOf = document.querySelectorAll(\".mini-icons-grid__carousel-inner\");\r\n\r\nminiIconsGridCarousel.forEach(item => {\r\n const cards: NodeListOf = item.querySelectorAll(\".mini-icons-grid__carousel-card\");\r\n const carousel = item.parentElement as HTMLElement;\r\n\r\n let mobilePerView = 1.2 as number;\r\n\r\n if (cards.length < 2) {\r\n mobilePerView = 1;\r\n\r\n carousel.classList.add(\"mini-icons-grid__carousel--padding-right\");\r\n }\r\n\r\n var glide = new Glide(item, {\r\n type: 'slider',\r\n perView: 3.5,\r\n gap: 20,\r\n rewind: false,\r\n breakpoints: {\r\n 1200: {\r\n perView: 2.5,\r\n },\r\n 760: {\r\n perView: 1.7,\r\n },\r\n 550: {\r\n perView: mobilePerView,\r\n },\r\n }\r\n })\r\n\r\n glide.mount()\r\n\r\n const miniIconsCarouselRange = item.querySelector(\".mini-icons-grid__carousel-range\") as HTMLInputElement;\r\n const slides: NodeListOf = item.querySelectorAll(\".mini-icons-grid__carousel-card\");\r\n\r\n miniIconsCarouselRange.addEventListener(\"input\", e => {\r\n setTimeout(() => {\r\n glide.go(`=${miniIconsCarouselRange.value}`)\r\n }, 500);\r\n })\r\n\r\n glide.on('move.after', () => {\r\n const miniIconsCurrentIndex = glide.index;\r\n miniIconsCarouselRange.value = miniIconsCurrentIndex\r\n })\r\n\r\n setRangeMax(slides, miniIconsCarouselRange)\r\n\r\n function setRangeMax(arr, input) {\r\n const slidesLength = Array.from(arr).length\r\n const rangeMax = (slidesLength - 1).toString()\r\n input.max = rangeMax\r\n\r\n setRangeThumbWidth(rangeMax)\r\n }\r\n\r\n function setRangeThumbWidth(max) {\r\n const miniIconsCarouselRange = item.querySelector(\".mini-icons-grid__carousel-range\") as HTMLInputElement\r\n const width = 200 / +max\r\n miniIconsCarouselRange.style.setProperty('--thumb-size', width.toString() + \"px\");\r\n\r\n if (max === \"1\") {\r\n miniIconsCarouselRange.style.setProperty('--thumb-size', \"100px\");\r\n }\r\n }\r\n})","const mobileMenuIcon = document.querySelector(\".menu-mobile__icon\") as HTMLElement\r\nconst mobileMenuButton = document.querySelector(\".header__button\") as HTMLElement\r\nconst mobileMenu = document.querySelector(\".menu-mobile__overlay\") as HTMLElement\r\nconst html = document.querySelector(\"html\") as HTMLElement\r\n\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n setupMenuItems();\r\n setupBackButton();\r\n setupMenuIcon();\r\n setupMenuButton();\r\n});\r\n\r\nfunction setupMenuItems() {\r\n document.querySelectorAll('.menu-mobile__item').forEach(item => {\r\n item.addEventListener('click', function() {\r\n const itemId = (this as HTMLElement).getAttribute('data-item-id');\r\n openNestedLinks(itemId);\r\n });\r\n });\r\n}\r\n\r\nfunction setupBackButton() {\r\n document.querySelectorAll('.menu-mobile__back-button').forEach(backButton => {\r\n backButton.addEventListener('click', function(event) {\r\n handleBackButtonClick(event);\r\n });\r\n });\r\n}\r\n\r\nfunction setupMenuIcon() {\r\n if (mobileMenuIcon) {\r\n mobileMenuIcon.addEventListener(\"click\", handleMenuIcon);\r\n }\r\n}\r\n\r\nfunction setupMenuButton() {\r\n mobileMenuButton?.addEventListener(\"keydown\", e => {\r\n if (e.key === \"Enter\") {\r\n handleMenuIcon(e);\r\n }\r\n });\r\n\r\n mobileMenu?.addEventListener(\"keydown\", e => {\r\n if (e.key === \"Escape\") {\r\n handleMenuIcon(e);\r\n }\r\n });\r\n}\r\n\r\nfunction openNestedLinks(itemId: string | null) {\r\n document.querySelectorAll('.menu-mobile__item').forEach(item => {\r\n \r\n if (item.getAttribute('data-item-id') !== itemId) {\r\n (item as HTMLElement).classList.add('menu-mobile__item--hidden');\r\n }\r\n });\r\n\r\n const nestedLinks = document.querySelector(`[data-item-id='${itemId}']`) as HTMLElement | null;\r\n if (nestedLinks) {\r\n nestedLinks.classList.remove('menu-mobile__item--hidden');\r\n const link = nestedLinks.querySelector('.menu-mobile__nested-links') as HTMLElement;\r\n link.style.display = 'flex';\r\n }\r\n\r\n document.querySelectorAll('.menu-mobile__title').forEach(titleElement => {\r\n (titleElement as HTMLElement).style.display = 'none';\r\n });\r\n}\r\n\r\n\r\nfunction handleMenuIcon(event?: Event) {\r\n closeNestedLinks();\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n toggleMenuIcon();\r\n}\r\n\r\nfunction handleBackButtonClick(event) {\r\n closeNestedLinks();\r\n event.stopPropagation();\r\n}\r\n\r\nfunction closeNestedLinks() {\r\n document.querySelectorAll('.menu-mobile__item').forEach(item => {\r\n (item as HTMLElement).classList.remove('menu-mobile__item--hidden');\r\n });\r\n\r\n document.querySelectorAll('.menu-mobile__nested-links').forEach(nestedLink => {\r\n (nestedLink as HTMLElement).style.display = 'none';\r\n });\r\n\r\n document.querySelectorAll('.menu-mobile__title').forEach(titleElement => {\r\n (titleElement as HTMLElement).style.display = 'block';\r\n });\r\n}\r\n\r\nfunction toggleMenuIcon() {\r\n mobileMenuIcon.classList.toggle(\"menu-mobile__icon--open\");\r\n mobileMenu.classList.toggle(\"menu-mobile__overlay--active\");\r\n html.style.overflow = mobileMenuIcon.classList.contains(\"menu-mobile__icon--open\") ? \"hidden\" : \"auto\";\r\n}","import Glide from '@glidejs/glide';\r\nimport { setRangeMax, handleCarouselButtons, handlePadding } from '../../../helpers/carouselRange';\r\n\r\nconst pageCardCarousels: NodeListOf = document.querySelectorAll('.page-carousel__inner');\r\n\r\n pageCardCarousels.forEach((item) => {\r\n var glide = new Glide(item, {\r\n type: 'slider',\r\n perView: 3,\r\n gap: 60,\r\n rewind: false,\r\n bound: true,\r\n breakpoints: {\r\n 992: {\r\n perView: 2.5,\r\n gap: 30,\r\n },\r\n 600: {\r\n perView: 1.7,\r\n gap: 30,\r\n },\r\n 450: {\r\n perView: 1.2,\r\n gap: 30,\r\n },\r\n },\r\n });\r\n\r\n glide.mount();\r\n\r\n const carouselRange = item.querySelector('.page-carousel__range') as HTMLInputElement;\r\n\r\n carouselRange.addEventListener('input', e => {\r\n setTimeout(() => {\r\n glide.go(`=${carouselRange.value}`);\r\n }, 500);\r\n });\r\n\r\n const carouselContainer = item.parentElement as HTMLElement;\r\n const slides: NodeListOf = item.querySelectorAll('.page-carousel__item');\r\n setRangeMax(slides, carouselRange, glide.settings.perView);\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide)\r\n handlePadding(slides, glide.settings.perView, carouselContainer)\r\n\r\n glide.on('move.after', () => {\r\n const currentIndex = glide.index;\r\n carouselRange.value = currentIndex;\r\n });\r\n\r\n glide.on('resize', () => {\r\n setRangeMax(slides, carouselRange, glide.settings.perView);\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n handlePadding(slides, glide.settings.perView, carouselContainer)\r\n glide.go(`=0`);\r\n });\r\n\r\n // Covers the phantom gap that appears in the carousel when there are less than 3 slides\r\n if(slides.length < 3) {\r\n const carouselItems: NodeListOf = item.querySelectorAll('.page-carousel__item');\r\n\r\n carouselItems.forEach((item) => {\r\n item.style.flex = \"1\";\r\n })\r\n }\r\n });\r\n","const paginationElements = document.querySelectorAll(\".pagination\");\r\n\r\nexport function updatePagination(page: number, allPages: number, totalItems: number, itemsPerPage: number, hasNextPage: boolean, hasPreviousPage: boolean) {\r\n paginationElements.forEach(item => {\r\n if (totalItems < 1) {\r\n item.classList.add(\"pagination--hidden\");\r\n } else {\r\n item.classList.remove(\"pagination--hidden\");\r\n }\r\n\r\n const element: HTMLElement = item.querySelector(\".pagination__inner\");\r\n const text: HTMLElement = item.querySelector(\".pagination__text\");\r\n\r\n if (totalItems > itemsPerPage) {\r\n text.textContent = `Showing ${itemsPerPage * page >= totalItems ? totalItems : itemsPerPage * page} of ${totalItems} results`\r\n } else {\r\n text.textContent = `Showing ${totalItems} of ${totalItems} results`\r\n }\r\n\r\n const totalPages = allPages;\r\n\r\n element.innerHTML = createPagination(totalPages, page, hasNextPage, hasPreviousPage);\r\n\r\n disablePagination(element)\r\n });\r\n}\r\n\r\nfunction createPagination(\r\n totalPages: number,\r\n page: number,\r\n hasNextPage: boolean,\r\n hasPreviousPage: boolean\r\n) {\r\n let liTag: string = \"\";\r\n let active: string = \"\";\r\n let renderedPages: Set = new Set();\r\n\r\n // Add the \"Previous\" button\r\n if (page > 1 && hasPreviousPage) {\r\n liTag += ``;\r\n }\r\n\r\n // Always show the first 3 pages\r\n for (let i = 1; i <= Math.min(3, totalPages); i++) {\r\n if (!renderedPages.has(i)) {\r\n active = page === i ? \"pagination__btn--active\" : \"\";\r\n liTag += ``;\r\n renderedPages.add(i); // Mark this page as rendered\r\n }\r\n }\r\n\r\n // Add ellipsis after the first 3 pages if necessary\r\n if (page > 4 && totalPages > 6 && !renderedPages.has(\"...\")) {\r\n liTag += ``;\r\n }\r\n\r\n // Add the middle range pages \r\n const startMiddleRange = Math.max(4, page - 1);\r\n const endMiddleRange = Math.min(totalPages - 2, page + 1);\r\n for (let i = startMiddleRange; i <= endMiddleRange; i++) {\r\n if (!renderedPages.has(i)) {\r\n active = page === i ? \"pagination__btn--active\" : \"\";\r\n liTag += ``;\r\n renderedPages.add(i);\r\n }\r\n }\r\n\r\n // Add ellipsis before the last 3 pages if necessary\r\n if (page < totalPages - 3 && totalPages > 6 && !renderedPages.has(\"...\")) {\r\n liTag += ``;\r\n }\r\n\r\n // Always show the last 3 pages\r\n for (let i = totalPages - 2; i <= totalPages; i++) {\r\n if (!renderedPages.has(i)) {\r\n active = page === i ? \"pagination__btn--active\" : \"\";\r\n liTag += ``;\r\n renderedPages.add(i);\r\n }\r\n }\r\n\r\n // Add the \"Next\" button\r\n if (page < totalPages && hasNextPage) {\r\n liTag += ``;\r\n }\r\n\r\n return liTag;\r\n}\r\n\r\nexport function disablePagination(element: HTMLElement) {\r\n const buttons: NodeListOf = element.querySelectorAll(\"button\");\r\n\r\n buttons.forEach(button => {\r\n button.disabled = true;\r\n });\r\n}\r\n\r\nexport function enablePagination(element: HTMLElement) {\r\n const buttons: NodeListOf = element.querySelectorAll(\"button\");\r\n\r\n buttons.forEach(button => {\r\n button.disabled = false;\r\n });\r\n}","const quickLinksSelect = document.querySelector(\".quick-links__select\") as HTMLInputElement\r\n\r\nif(quickLinksSelect){\r\n quickLinksSelect.addEventListener(\"change\", e => {\r\n window.location.href=quickLinksSelect.value\r\n })\r\n}","const counters = document.querySelectorAll('.stats__number');\r\nconst countersContainer = document.querySelectorAll('.stats');\r\n\r\nif(countersContainer){\r\n const countersArray = Array.from(counters)\r\n const countersContainerArray = Array.from(countersContainer)\r\n const speed = 100; \r\n\r\n function isCounterInViewport(element) {\r\n const bounding = element.getBoundingClientRect();\r\n\r\n if (\r\n bounding.top >= 0 &&\r\n bounding.left >= 0 &&\r\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth) &&\r\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight)\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n window.addEventListener('scroll', function (event) {\r\n countersContainerArray.forEach(item => {\r\n if (isCounterInViewport(item)) {\r\n countersArray.forEach(counter => {\r\n const updateCount = () => {\r\n const target = +counter.getAttribute('data-target');\r\n const count = +counter.textContent;\r\n \r\n const inc = target / speed;\r\n \r\n if (count < target) {\r\n counter.textContent = Math.ceil(count + inc).toString();\r\n setTimeout(updateCount, 200);\r\n } else {\r\n counter.textContent = Math.ceil(target).toString();\r\n }\r\n };\r\n updateCount()\r\n });\r\n }\r\n })\r\n }, false);\r\n}\r\n","import Glide from '@glidejs/glide';\r\nimport { setRangeMax, handleCarouselButtons } from '../../../helpers/carouselRange';\r\n\r\nconst testimonialsCarousels: NodeListOf = document.querySelectorAll(\".testimonials__inner\")\r\n\r\ntestimonialsCarousels.forEach(item => {\r\n var glide = new Glide(item, {\r\n type: 'slider',\r\n perView: 1,\r\n gap: 60,\r\n rewind: true,\r\n breakpoints: {\r\n 480: {\r\n perView: 1.2,\r\n gap: 20,\r\n },\r\n }\r\n })\r\n\r\n glide.mount()\r\n\r\n const carouselRange = item.querySelector(\".testimonials__range\") as HTMLInputElement\r\n\r\n carouselRange.addEventListener(\"input\", e => {\r\n setTimeout(() => {\r\n glide.go(`=${carouselRange.value}`)\r\n }, 500);\r\n })\r\n\r\n const slides: NodeListOf = item.querySelectorAll('.testimonials__item');\r\n setRangeMax(slides, carouselRange, glide.settings.perView);\r\n handleCarouselButtons(slides, glide.settings.perView, item, glide);\r\n\r\n glide.on('move.after', () => {\r\n const currentIndex = glide.index;\r\n carouselRange.value = currentIndex\r\n })\r\n})","const videoContainerComponent = document.querySelectorAll(\".video\")\r\n\r\nif(videoContainerComponent){\r\nconst videoContainerComponentArray = Array.from(videoContainerComponent)\r\n\r\nvideoContainerComponentArray.forEach(item => {\r\n const videoComponentButton = item.querySelector(\".video__button\") as HTMLElement\r\n const videoComponentVideo = item.querySelector(\".video__video\") as HTMLVideoElement\r\n\r\n item.addEventListener(\"click\", e => {\r\n if(!videoComponentVideo.classList.contains(\"video__video--active\"))\r\n {\r\n showVideoComponentVideo()\r\n }\r\n })\r\n\r\n videoComponentButton.addEventListener(\"click\", e =>{\r\n if(!videoComponentVideo.classList.contains(\"video__video--active\"))\r\n {\r\n showVideoComponentVideo()\r\n }\r\n })\r\n\r\n function showVideoComponentVideo() {\r\n videoComponentButton.classList.remove(\"video__button--active\")\r\n videoComponentVideo.classList.add(\"video__video--active\")\r\n videoComponentVideo.setAttribute(\"controls\", \"controls\")\r\n videoComponentVideo.play()\r\n }\r\n })\r\n}","/*!\n * Glide.js v3.6.0\n * (c) 2013-2022 Jędrzej Chałubek (https://github.com/jedrzejchalubek/)\n * Released under the MIT License.\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Glide = factory());\n})(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\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 function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n }\n\n function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n }\n\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n }\n\n function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n }\n\n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n }\n\n function _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n }\n\n function _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n }\n\n function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n }\n\n function _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n }\n\n var 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 number of slides moved on single swipe.\n *\n * Available types:\n * `` - Moves slider by one slide per swipe\n * `|` - Moves slider between views per swipe (number of slides defined in `perView` options)\n *\n * @type {String}\n */\n perSwipe: '',\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 * Wait for the animation to finish until the next user input can be processed\n *\n * @type {boolean}\n */\n waitForTransition: true,\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 * Defines how many clones of current viewport will be generated.\n *\n * @type {Number}\n */\n cloningRatio: 1,\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 swipeable: 'glide--swipeable',\n dragging: 'glide--dragging',\n direction: {\n ltr: 'glide--ltr',\n rtl: 'glide--rtl'\n },\n type: {\n slider: 'glide--slider',\n carousel: 'glide--carousel'\n },\n slide: {\n clone: 'glide__slide--clone',\n active: 'glide__slide--active'\n },\n arrow: {\n disabled: 'glide__arrow--disabled'\n },\n nav: {\n active: 'glide__bullet--active'\n }\n }\n };\n\n /**\n * Outputs warning message to the bowser console.\n *\n * @param {String} msg\n * @return {Void}\n */\n function warn(msg) {\n console.error(\"[Glide warn]: \".concat(msg));\n }\n\n /**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\n function toInt(value) {\n return parseInt(value);\n }\n /**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\n\n function toFloat(value) {\n return parseFloat(value);\n }\n /**\n * Indicates whether the specified value is a string.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n function isString(value) {\n return typeof value === 'string';\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 */\n\n function isObject(value) {\n var type = _typeof(value);\n\n return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n }\n /**\n * Indicates whether the specified value is a function.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n function isFunction(value) {\n return typeof value === 'function';\n }\n /**\n * Indicates whether the specified value is undefined.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n /**\n * Indicates whether the specified value is an array.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n function 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 */\n\n function 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 */\n function define(obj, prop, definition) {\n Object.defineProperty(obj, prop, definition);\n }\n /**\n * Sorts aphabetically object keys.\n *\n * @param {Object} obj\n * @return {Object}\n */\n\n function sortKeys(obj) {\n return Object.keys(obj).sort().reduce(function (r, k) {\n r[k] = obj[k];\n return r[k], r;\n }, {});\n }\n /**\n * Merges passed settings object with default options.\n *\n * @param {Object} defaults\n * @param {Object} settings\n * @return {Object}\n */\n\n function mergeOptions(defaults, settings) {\n var options = Object.assign({}, defaults, settings); // `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\n if (settings.hasOwnProperty('classes')) {\n options.classes = Object.assign({}, defaults.classes, settings.classes);\n\n if (settings.classes.hasOwnProperty('direction')) {\n options.classes.direction = Object.assign({}, defaults.classes.direction, settings.classes.direction);\n }\n\n if (settings.classes.hasOwnProperty('type')) {\n options.classes.type = Object.assign({}, defaults.classes.type, settings.classes.type);\n }\n\n if (settings.classes.hasOwnProperty('slide')) {\n options.classes.slide = Object.assign({}, defaults.classes.slide, settings.classes.slide);\n }\n\n if (settings.classes.hasOwnProperty('arrow')) {\n options.classes.arrow = Object.assign({}, defaults.classes.arrow, settings.classes.arrow);\n }\n\n if (settings.classes.hasOwnProperty('nav')) {\n options.classes.nav = Object.assign({}, defaults.classes.nav, settings.classes.nav);\n }\n }\n\n if (settings.hasOwnProperty('breakpoints')) {\n options.breakpoints = Object.assign({}, defaults.breakpoints, settings.breakpoints);\n }\n\n return options;\n }\n\n var EventsBus = /*#__PURE__*/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\n _classCallCheck(this, EventsBus);\n\n this.events = events;\n this.hop = events.hasOwnProperty;\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 return;\n } // Create the event's object if not yet created\n\n\n if (!this.hop.call(this.events, event)) {\n this.events[event] = [];\n } // Add the handler to queue\n\n\n var index = this.events[event].push(handler) - 1; // Provide handle back for removal of event\n\n return {\n remove: function remove() {\n delete this.events[event][index];\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 return;\n } // If the event doesn't exist, or there's no handlers in queue, just leave\n\n\n if (!this.hop.call(this.events, event)) {\n return;\n } // Cycle through events queue, fire!\n\n\n this.events[event].forEach(function (item) {\n item(context || {});\n });\n }\n }]);\n\n return EventsBus;\n }();\n\n var Glide$1 = /*#__PURE__*/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\n _classCallCheck(this, Glide);\n\n this._c = {};\n this._t = [];\n this._e = new EventsBus();\n this.disabled = false;\n this.selector = selector;\n this.settings = mergeOptions(defaults, options);\n this.index = this.settings.startAt;\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 /**\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 /**\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 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 /**\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 * `|>` - Move one viewport forward\r\n * `|<` - Move one viewport backward\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 /**\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\n this._c.Move.make(distance);\n\n return this;\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 /**\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 /**\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 /**\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 return this;\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 return this;\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 /**\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 /**\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() {\n return this._o;\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(o) {\n if (isObject(o)) {\n this._o = o;\n } else {\n warn('Options must be an `object` instance.');\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() {\n return this._i;\n }\n /**\r\n * Sets current index a slider.\r\n *\r\n * @return {Object}\r\n */\n ,\n set: function set(i) {\n this._i = toInt(i);\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() {\n return this.settings.type;\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() {\n return this._d;\n }\n /**\r\n * Sets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n ,\n set: function set(status) {\n this._d = !!status;\n }\n }]);\n\n return Glide;\n }();\n\n function 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 * 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.settings.waitForTransition || Glide.disable();\n this.move = move;\n Events.emit('run.before', this.move);\n this.calculate();\n Events.emit('run', this.move);\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()) {\n _this._o = false;\n Events.emit('run.offset', _this.move);\n }\n\n Events.emit('run.after', _this.move);\n Glide.enable();\n });\n }\n },\n\n /**\n * Calculates current index based on defined move.\n *\n * @return {Number|Undefined}\n */\n calculate: function calculate() {\n var move = this.move,\n length = this.length;\n var steps = move.steps,\n direction = move.direction; // By default assume that size of view is equal to one slide\n\n var viewSize = 1; // While direction is `=` we want jump to\n // a specified index described in steps.\n\n if (direction === '=') {\n // Check if bound is true, \n // as we want to avoid whitespaces.\n if (Glide.settings.bound && toInt(steps) > length) {\n Glide.index = length;\n return;\n }\n\n Glide.index = steps;\n return;\n } // When pattern is equal to `>>` we want\n // fast forward to the last slide.\n\n\n if (direction === '>' && steps === '>') {\n Glide.index = length;\n return;\n } // When pattern is equal to `<<` we want\n // fast forward to the first slide.\n\n\n if (direction === '<' && steps === '<') {\n Glide.index = 0;\n return;\n } // pagination movement\n\n\n if (direction === '|') {\n viewSize = Glide.settings.perView || 1;\n } // we are moving forward\n\n\n if (direction === '>' || direction === '|' && steps === '>') {\n var index = calculateForwardIndex(viewSize);\n\n if (index > length) {\n this._o = true;\n }\n\n Glide.index = normalizeForwardIndex(index, viewSize);\n return;\n } // we are moving backward\n\n\n if (direction === '<' || direction === '|' && steps === '<') {\n var _index = calculateBackwardIndex(viewSize);\n\n if (_index < 0) {\n this._o = true;\n }\n\n Glide.index = normalizeBackwardIndex(_index, viewSize);\n return;\n }\n\n warn(\"Invalid direction pattern [\".concat(direction).concat(steps, \"] has been used\"));\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 * 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 * Checks if we are making a offset run.\n *\n * @param {String} direction\n * @return {Boolean}\n */\n isOffset: function isOffset() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n if (!direction) {\n return this._o;\n }\n\n if (!this._o) {\n return false;\n } // did we view to the right?\n\n\n if (direction === '|>') {\n return this.move.direction === '|' && this.move.steps === '>';\n } // did we view to the left?\n\n\n if (direction === '|<') {\n return this.move.direction === '|' && this.move.steps === '<';\n }\n\n return this.move.direction === direction;\n },\n\n /**\n * Checks if bound mode is active\n *\n * @return {Boolean}\n */\n isBound: function isBound() {\n return Glide.isType('slider') && Glide.settings.focusAt !== 'center' && Glide.settings.bound;\n }\n };\n /**\n * Returns index value to move forward/to the right\n *\n * @param viewSize\n * @returns {Number}\n */\n\n function calculateForwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index + viewSize;\n }\n\n return index + (viewSize - index % viewSize);\n }\n /**\n * Normalizes the given forward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {Number}\n */\n\n\n function normalizeForwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index <= length) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index - (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on the last possible index value given by bound\n if (Run.isBound() && !Run.isEnd()) {\n return length;\n }\n\n return 0;\n }\n\n if (Run.isBound()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n /**\n * Calculates index value to move backward/to the left\n *\n * @param viewSize\n * @returns {Number}\n */\n\n\n function calculateBackwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index - viewSize;\n } // ensure our back navigation results in the same index as a forward navigation\n // to experience a homogeneous paging\n\n\n var view = Math.ceil(index / viewSize);\n return (view - 1) * viewSize;\n }\n /**\n * Normalizes the given backward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {*}\n */\n\n\n function normalizeBackwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index >= 0) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index + (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on first possible index value before we to rewind to the length given by bound\n if (Run.isBound() && Run.isStart()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n\n return 0;\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 * Sets value of the move schema.\n *\n * @returns {Object}\n */\n set: function set(value) {\n var step = value.substr(1);\n this._m = {\n direction: value.substr(0, 1),\n steps: step ? toInt(step) ? toInt(step) : step : 0\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; // If the `bound` option is active, 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 (this.isBound()) {\n return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n }\n\n return length - 1;\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 return Run;\n }\n\n /**\n * Returns a current time.\n *\n * @return {Number}\n */\n function 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 */\n\n function throttle(func, wait, options) {\n var timeout, context, args, result;\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\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\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\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\n var MARGIN_TYPE = {\n ltr: ['marginLeft', 'marginRight'],\n rtl: ['marginRight', 'marginLeft']\n };\n function 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]] = \"\".concat(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]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][1]] = '';\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 style.marginLeft = '';\n style.marginRight = '';\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 define(Gaps, 'grow', {\n /**\n * Gets additional dimensions 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;\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 return Gaps.value * (perView - 1) / perView;\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\n Events.on(['build.after', 'update'], throttle(function () {\n Gaps.apply(Components.Html.wrapper.children);\n }, 30));\n /**\n * Remove gaps:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Gaps.remove(Components.Html.wrapper.children);\n });\n return Gaps;\n }\n\n /**\n * Finds siblings nodes of the passed node.\n *\n * @param {Element} node\n * @return {Array}\n */\n function 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 * Checks if passed node exist and is a valid element.\n *\n * @param {Element} node\n * @return {Boolean}\n */\n\n function exist(node) {\n if (node && node instanceof window.HTMLElement) {\n return true;\n }\n\n return false;\n }\n /**\n * Coerces a NodeList to an Array.\n *\n * @param {NodeList} nodeList\n * @return {Array}\n */\n\n function toArray(nodeList) {\n return Array.prototype.slice.call(nodeList);\n }\n\n var TRACK_SELECTOR = '[data-glide-el=\"track\"]';\n function Html (Glide, Components, Events) {\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.collectSlides();\n },\n\n /**\n * Collect slides\n */\n collectSlides: function collectSlides() {\n this.slides = toArray(this.wrapper.children).filter(function (slide) {\n return !slide.classList.contains(Glide.settings.classes.slide.clone);\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 * 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 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 * 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 \".concat(TRACK_SELECTOR, \" attribute.\"));\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 * Add/remove/reorder dynamic slides\n */\n\n Events.on('update', function () {\n Html.collectSlides();\n });\n return Html;\n }\n\n function 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 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 * 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 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 * Recalculate peeking sizes on:\n * - when resizing window to update to proper percents\n */\n\n Events.on(['resize', 'update'], function () {\n Peek.mount();\n });\n return Peek;\n }\n\n function 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 * 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 this.offset = offset;\n Events.emit('move', {\n movement: this.value\n });\n Components.Transition.after(function () {\n Events.emit('move.after', {\n movement: _this.value\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 * 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 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 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 * 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\n Events.on(['build.before', 'run'], function () {\n Move.make();\n });\n return Move;\n }\n\n function Sizes (Glide, Components, Events) {\n var Sizes = {\n /**\n * Setups dimensions of slides.\n *\n * @return {Void}\n */\n setupSlides: function setupSlides() {\n var width = \"\".concat(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 * Setups dimensions of slides wrapper.\n *\n * @return {Void}\n */\n setupWrapper: function setupWrapper() {\n Components.Html.wrapper.style.width = \"\".concat(this.wrapperSize, \"px\");\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 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 define(Sizes, 'width', {\n /**\n * Gets width value of the slider (visible area).\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.track.offsetWidth;\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 define(Sizes, 'slideWidth', {\n /**\n * Gets width value of a 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 * Apply calculated glide's dimensions:\n * - before building, so other dimensions (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\n Events.on(['build.before', 'resize', 'update'], function () {\n Sizes.setupSlides();\n Sizes.setupWrapper();\n });\n /**\n * Remove calculated glide's dimensions:\n * - on destoting to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Sizes.remove();\n });\n return Sizes;\n }\n\n function 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 this.typeClass();\n this.activeClass();\n Events.emit('build.after');\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.type[Glide.settings.type]);\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.slide.active);\n siblings(slide).forEach(function (sibling) {\n sibling.classList.remove(classes.slide.active);\n });\n }\n },\n\n /**\n * Removes HTML classes applied at building.\n *\n * @return {Void}\n */\n removeClasses: function removeClasses() {\n var _Glide$settings$class = Glide.settings.classes,\n type = _Glide$settings$class.type,\n slide = _Glide$settings$class.slide;\n Components.Html.root.classList.remove(type[Glide.settings.type]);\n Components.Html.slides.forEach(function (sibling) {\n sibling.classList.remove(slide.active);\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\n Events.on(['destroy', 'update'], function () {\n Build.removeClasses();\n });\n /**\n * Remount component:\n * - on resizing of the window to calculate new dimensions\n * - on updating settings via API\n */\n\n Events.on(['resize', 'update'], function () {\n Build.mount();\n });\n /**\n * Swap active class of current slide:\n * - after each move to the new index\n */\n\n Events.on('move.after', function () {\n Build.activeClass();\n });\n return Build;\n }\n\n function 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 * Collect clones with pattern.\n *\n * @return {[]}\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 cloningRatio = _Glide$settings.cloningRatio;\n\n if (slides.length !== 0) {\n var peekIncrementer = +!!Glide.settings.peek;\n var cloneCount = perView + peekIncrementer + Math.round(perView / 2);\n var append = slides.slice(0, cloneCount).reverse();\n var prepend = slides.slice(cloneCount * -1);\n\n for (var r = 0; r < Math.max(cloningRatio, Math.floor(perView / slides.length)); r++) {\n for (var i = 0; i < append.length; i++) {\n var clone = append[i].cloneNode(true);\n clone.classList.add(classes.slide.clone);\n items.push(clone);\n }\n\n for (var _i = 0; _i < prepend.length; _i++) {\n var _clone = prepend[_i].cloneNode(true);\n\n _clone.classList.add(classes.slide.clone);\n\n items.unshift(_clone);\n }\n }\n }\n\n return items;\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 var half = Math.floor(items.length / 2);\n var prepend = items.slice(0, half).reverse();\n var append = items.slice(half * -1).reverse();\n var width = \"\".concat(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 * Remove all cloned slides.\n *\n * @return {Void}\n */\n remove: function remove() {\n var items = this.items;\n\n for (var i = 0; i < items.length; i++) {\n Components.Html.wrapper.removeChild(items[i]);\n }\n }\n };\n define(Clones, 'grow', {\n /**\n * Gets additional dimensions 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 * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('update', function () {\n Clones.remove();\n Clones.mount();\n Clones.append();\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('build.before', function () {\n if (Glide.isType('carousel')) {\n Clones.append();\n }\n });\n /**\n * Remove clones HTMLElements:\n * - on destroying, to bring HTML to its initial state\n */\n\n Events.on('destroy', function () {\n Clones.remove();\n });\n return Clones;\n }\n\n var EventsBinder = /*#__PURE__*/function () {\n /**\n * Construct a EventsBinder instance.\n */\n function EventsBinder() {\n var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBinder);\n\n this.listeners = listeners;\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 el.addEventListener(events[i], this.listeners[events[i]], capture);\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 * Destroy collected listeners.\n *\n * @returns {Void}\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n delete this.listeners;\n }\n }]);\n\n return EventsBinder;\n }();\n\n function Resize (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Resize = {\n /**\n * Initializes window bindings.\n */\n mount: function mount() {\n this.bind();\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 * Unbinds listeners from the window.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('resize', window);\n }\n };\n /**\n * Remove bindings from window:\n * - on destroying, to remove added EventListener\n */\n\n Events.on('destroy', function () {\n Resize.unbind();\n Binder.destroy();\n });\n return Resize;\n }\n\n var VALID_DIRECTIONS = ['ltr', 'rtl'];\n var FLIPED_MOVEMENTS = {\n '>': '<',\n '<': '>',\n '=': '='\n };\n function 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 * 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 * 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 * 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 * 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 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 * 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 * Clear direction class:\n * - on destroy to bring HTML to its initial state\n * - on update to remove class before reappling bellow\n */\n\n Events.on(['destroy', 'update'], function () {\n Direction.removeClass();\n });\n /**\n * Remount component:\n * - on update to reflect changes in direction value\n */\n\n Events.on('update', function () {\n Direction.mount();\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\n Events.on(['build.before', 'update'], function () {\n Direction.addClass();\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 */\n function 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 */\n function 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 var multiplier = Math.floor(translate / Components.Sizes.slideWidth);\n return translate + Components.Gaps.value * multiplier;\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 */\n function 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 */\n\n function 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 */\n function 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 */\n\n function 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 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\n function 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 var translate3d = \"translate3d(\".concat(-1 * transform, \"px, 0px, 0px)\");\n Components.Html.wrapper.style.mozTransform = translate3d; // needed for supported Firefox 10-15\n\n Components.Html.wrapper.style.webkitTransform = translate3d; // needed for supported Chrome 10-35, Safari 5.1-8, and Opera 15-22\n\n Components.Html.wrapper.style.transform = translate3d;\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 * @return {number}\n */\n getStartIndex: function getStartIndex() {\n var length = Components.Sizes.length;\n var index = Glide.index;\n var perView = Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n return length + (index - perView);\n } // \"modulo length\" converts an index that equals length to zero\n\n\n return (index + perView) % length;\n },\n\n /**\n * @return {number}\n */\n getTravelDistance: function getTravelDistance() {\n var travelDistance = Components.Sizes.slideWidth * Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n // reverse travel distance so that we don't have to change subtract operations\n return travelDistance * -1;\n }\n\n return travelDistance;\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\n Events.on('move', function (context) {\n if (!Glide.isType('carousel') || !Components.Run.isOffset()) {\n return Translate.set(context.movement);\n }\n\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n Translate.set(Components.Sizes.slideWidth * Glide.index);\n });\n var startWidth = Components.Sizes.slideWidth * Components.Translate.getStartIndex();\n return Translate.set(startWidth - Components.Translate.getTravelDistance());\n });\n /**\n * Remove translate:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Translate.remove();\n });\n return Translate;\n }\n\n function 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 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 \"\".concat(property, \" \").concat(this.duration, \"ms \").concat(settings.animationTimingFunc);\n }\n\n return \"\".concat(property, \" 0ms \").concat(settings.animationTimingFunc);\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 Components.Html.wrapper.style.transition = this.compose(property);\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 * 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 * Enable transition.\n *\n * @return {Void}\n */\n enable: function enable() {\n disabled = false;\n this.set();\n },\n\n /**\n * Disable transition.\n *\n * @return {Void}\n */\n disable: function disable() {\n disabled = true;\n this.set();\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 * Set transition `style` value:\n * - on each moving, because it may be cleared by offset move\n */\n\n Events.on('move', function () {\n Transition.set();\n });\n /**\n * Disable transition:\n * - before initial build to avoid transitioning from `0` to `startAt` index\n * - while resizing window and recalculating dimensions\n * - on jumping from offset transition at start and end edges in `carousel` type\n */\n\n Events.on(['build.before', 'resize', 'translate.jump'], function () {\n Transition.disable();\n });\n /**\n * Enable transition:\n * - on each running, because it may be disabled by offset move\n */\n\n Events.on('run', function () {\n Transition.enable();\n });\n /**\n * Remove transition:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Transition.remove();\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 var supportsPassive = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n } catch (e) {}\n\n var supportsPassive$1 = supportsPassive;\n\n var START_EVENTS = ['touchstart', 'mousedown'];\n var MOVE_EVENTS = ['touchmove', 'mousemove'];\n var END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\n var MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\n function Swipe (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var swipeSin = 0;\n var swipeStartX = 0;\n var swipeStartY = 0;\n var disabled = false;\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Swipe = {\n /**\n * Initializes swipe bindings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bindSwipeStart();\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 var swipe = this.touches(event);\n swipeSin = null;\n swipeStartX = toInt(swipe.pageX);\n swipeStartY = toInt(swipe.pageY);\n this.bindSwipeMove();\n this.bindSwipeEnd();\n Events.emit('swipe.start');\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 var swipe = this.touches(event);\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 swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n if (swipeSin * 180 / Math.PI < touchAngle) {\n event.stopPropagation();\n Components.Move.make(subExSx * toFloat(touchRatio));\n Components.Html.root.classList.add(classes.dragging);\n Events.emit('swipe.move');\n } else {\n return false;\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 _Glide$settings2 = Glide.settings,\n perSwipe = _Glide$settings2.perSwipe,\n touchAngle = _Glide$settings2.touchAngle,\n classes = _Glide$settings2.classes;\n var swipe = this.touches(event);\n var threshold = this.threshold(event);\n var swipeDistance = swipe.pageX - swipeStartX;\n var swipeDeg = swipeSin * 180 / Math.PI;\n this.enable();\n\n if (swipeDistance > threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\n } else if (swipeDistance < -threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n } else {\n // While swipe don't reach distance apply previous transform.\n Components.Move.make();\n }\n\n Components.Html.root.classList.remove(classes.dragging);\n this.unbindSwipeMove();\n this.unbindSwipeEnd();\n Events.emit('swipe.end');\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 _Glide$settings3 = Glide.settings,\n swipeThreshold = _Glide$settings3.swipeThreshold,\n dragThreshold = _Glide$settings3.dragThreshold;\n\n if (swipeThreshold) {\n Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n\n if (dragThreshold) {\n Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\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 * 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 * 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 * 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 * 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 * 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 * 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 * Enables swipe event.\n *\n * @return {self}\n */\n enable: function enable() {\n disabled = false;\n Components.Transition.enable();\n return this;\n },\n\n /**\n * Disables swipe event.\n *\n * @return {self}\n */\n disable: function disable() {\n disabled = true;\n Components.Transition.disable();\n return this;\n }\n };\n /**\n * Add component class:\n * - after initial building\n */\n\n Events.on('build.after', function () {\n Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n });\n /**\n * Remove swiping bindings:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Swipe.unbindSwipeStart();\n Swipe.unbindSwipeMove();\n Swipe.unbindSwipeEnd();\n Binder.destroy();\n });\n return Swipe;\n }\n\n function Images (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\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 * 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 * 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 * Event handler. Prevents dragging.\n *\n * @return {Void}\n */\n dragstart: function dragstart(event) {\n event.preventDefault();\n }\n };\n /**\n * Remove bindings from images:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Images.unbind();\n Binder.destroy();\n });\n return Images;\n }\n\n function 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 * Holds detaching status of anchors.\n * Prevents detaching of already detached anchors.\n *\n * @private\n * @type {Boolean}\n */\n\n var detached = false;\n /**\n * Holds preventing status of anchors.\n * If `true` redirection after click will be disabled.\n *\n * @private\n * @type {Boolean}\n */\n\n var prevented = false;\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 this.bind();\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 * 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 * 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 * 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\n detached = true;\n }\n\n return this;\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\n detached = false;\n }\n\n return this;\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 * Detach anchors inside slides:\n * - on swiping, so they won't redirect to its `href` attributes\n */\n\n Events.on('swipe.move', function () {\n Anchors.detach();\n });\n /**\n * Attach anchors inside slides:\n * - after swiping and transitions ends, so they can redirect after click again\n */\n\n Events.on('swipe.end', function () {\n Components.Transition.after(function () {\n Anchors.attach();\n });\n });\n /**\n * Unbind anchors inside slides:\n * - on destroying, to bring anchors to its initial state\n */\n\n Events.on('destroy', function () {\n Anchors.attach();\n Anchors.unbind();\n Binder.destroy();\n });\n return Anchors;\n }\n\n var NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\n var CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\n var PREVIOUS_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\"<\\\"]\");\n var NEXT_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\">\\\"]\");\n function Controls (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\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 * Collection of controls HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n\n this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n /**\n * Collection of arrow control HTML elements.\n *\n * @private\n * @type {Object}\n */\n\n this._arrowControls = {\n previous: Components.Html.root.querySelectorAll(PREVIOUS_CONTROLS_SELECTOR),\n next: Components.Html.root.querySelectorAll(NEXT_CONTROLS_SELECTOR)\n };\n this.addBindings();\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 * 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 * 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 return;\n }\n\n if (item) {\n item.classList.add(settings.classes.nav.active);\n siblings(item).forEach(function (sibling) {\n sibling.classList.remove(settings.classes.nav.active);\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.nav.active);\n }\n },\n\n /**\n * Calculates, removes or adds `Glide.settings.classes.disabledArrow` class on the control arrows\n */\n setArrowState: function setArrowState() {\n if (Glide.settings.rewind) {\n return;\n }\n\n var next = Controls._arrowControls.next;\n var previous = Controls._arrowControls.previous;\n this.resetArrowState(next, previous);\n\n if (Glide.index === 0) {\n this.disableArrow(previous);\n }\n\n if (Glide.index === Components.Run.length) {\n this.disableArrow(next);\n }\n },\n\n /**\n * Removes `Glide.settings.classes.disabledArrow` from given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n resetArrowState: function resetArrowState() {\n var settings = Glide.settings;\n\n for (var _len = arguments.length, lists = new Array(_len), _key = 0; _key < _len; _key++) {\n lists[_key] = arguments[_key];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.remove(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds `Glide.settings.classes.disabledArrow` to given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n disableArrow: function disableArrow() {\n var settings = Glide.settings;\n\n for (var _len2 = arguments.length, lists = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n lists[_key2] = arguments[_key2];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.add(settings.classes.arrow.disabled);\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 * 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 * 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 * 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 * Handles `click` event on the arrows HTML elements.\n * Moves slider in direction given via the\n * `data-glide-dir` attribute.\n *\n * @param {Object} event\n * @return {void}\n */\n click: function click(event) {\n if (!supportsPassive$1 && event.type === 'touchstart') {\n event.preventDefault();\n }\n\n var direction = event.currentTarget.getAttribute('data-glide-dir');\n Components.Run.make(Components.Direction.resolve(direction));\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 * 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\n Events.on(['mount.after', 'move.after'], function () {\n Controls.setActive();\n });\n /**\n * Add or remove disabled class of arrow elements\n */\n\n Events.on(['mount.after', 'run'], function () {\n Controls.setArrowState();\n });\n /**\n * Remove bindings and HTML Classes:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Controls.removeBindings();\n Controls.removeActive();\n Binder.destroy();\n });\n return Controls;\n }\n\n function Keyboard (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\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 * Adds keyboard press events.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('keyup', document, this.press);\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 * 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 var perSwipe = Glide.settings.perSwipe;\n\n if (event.code === 'ArrowRight') {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n }\n\n if (event.code === 'ArrowLeft') {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\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\n Events.on(['destroy', 'update'], function () {\n Keyboard.unbind();\n });\n /**\n * Remount component\n * - on updating to reflect potential changes in settings\n */\n\n Events.on('update', function () {\n Keyboard.mount();\n });\n /**\n * Destroy binder:\n * - on destroying to remove listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Keyboard;\n }\n\n function Autoplay (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Autoplay = {\n /**\n * Initializes autoplaying and events.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.enable();\n this.start();\n\n if (Glide.settings.hoverpause) {\n this.bind();\n }\n },\n\n /**\n * Enables autoplaying\n *\n * @returns {Void}\n */\n enable: function enable() {\n this._e = true;\n },\n\n /**\n * Disables autoplaying.\n *\n * @returns {Void}\n */\n disable: function disable() {\n this._e = false;\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 (!this._e) {\n return;\n }\n\n this.enable();\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\n Events.emit('autoplay');\n }, this.time);\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 * 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 if (_this2._e) {\n _this2.stop();\n }\n });\n Binder.on('mouseout', Components.Html.root, function () {\n if (_this2._e) {\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 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 * 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\n Events.on(['destroy', 'update'], function () {\n Autoplay.unbind();\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\n Events.on(['run.before', 'swipe.start', 'update'], function () {\n Autoplay.stop();\n });\n Events.on(['pause', 'destroy'], function () {\n Autoplay.disable();\n Autoplay.stop();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['run.after', 'swipe.end'], function () {\n Autoplay.start();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['play'], function () {\n Autoplay.enable();\n Autoplay.start();\n });\n /**\n * Remount autoplaying:\n * - on updating via API to reset interval that may changed\n */\n\n Events.on('update', function () {\n Autoplay.mount();\n });\n /**\n * Destroy a binder:\n * - on destroying glide instance to clearup listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\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 */\n\n function 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\n function 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 * Holds reference to settings.\n *\n * @type {Object}\n */\n\n var settings = Glide.settings;\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\n var points = sortBreakpoints(settings.breakpoints);\n /**\n * Cache initial settings before overwritting.\n *\n * @type {Object}\n */\n\n var defaults = Object.assign({}, settings);\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: \".concat(point, \"px)\")).matches) {\n return points[point];\n }\n }\n }\n }\n\n return defaults;\n }\n };\n /**\n * Overwrite instance settings with currently matching breakpoint settings.\n * This happens right after component initialization.\n */\n\n Object.assign(settings, Breakpoints.match(points));\n /**\n * Update glide with settings of matched brekpoint:\n * - window resize to update slider\n */\n\n Binder.on('resize', window, throttle(function () {\n Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n }, Glide.settings.throttle));\n /**\n * Resort and update default settings:\n * - on reinit via API, so breakpoint matching will be performed with options\n */\n\n Events.on('update', function () {\n points = sortBreakpoints(points);\n defaults = Object.assign({}, settings);\n });\n /**\n * Unbind resize listener:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Binder.off('resize', window);\n });\n return Breakpoints;\n }\n\n var 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 // Optional\n Swipe: Swipe,\n Images: Images,\n Anchors: Anchors,\n Controls: Controls,\n Keyboard: Keyboard,\n Autoplay: Autoplay,\n Breakpoints: Breakpoints\n };\n\n var Glide = /*#__PURE__*/function (_Core) {\n _inherits(Glide, _Core);\n\n var _super = _createSuper(Glide);\n\n function Glide() {\n _classCallCheck(this, Glide);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return _get(_getPrototypeOf(Glide.prototype), \"mount\", this).call(this, Object.assign({}, COMPONENTS, extensions));\n }\n }]);\n\n return Glide;\n }(Glide$1);\n\n return Glide;\n\n}));\n"]}