{"version":3,"file":"./modules/Slider.xxxxxxxx.js","mappings":"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","sources":["webpack:///./libs/tiny-slider-2.9.4.js","webpack:///./modules/NivTSlider.ts","webpack:///./modules/Slider.ts"],"sourcesContent":["'use strict';\r\n\r\nObject.defineProperty(exports, '__esModule', { value: true });\r\n\r\nvar win$1 = window;\r\nvar raf = win$1.requestAnimationFrame || win$1.webkitRequestAnimationFrame || win$1.mozRequestAnimationFrame || win$1.msRequestAnimationFrame || function (cb) {\r\n  return setTimeout(cb, 16);\r\n};\r\n\r\nvar win = window;\r\nvar caf = win.cancelAnimationFrame || win.mozCancelAnimationFrame || function (id) {\r\n  clearTimeout(id);\r\n};\r\n\r\nfunction extend() {\r\n  var obj,\r\n      name,\r\n      copy,\r\n      target = arguments[0] || {},\r\n      i = 1,\r\n      length = arguments.length;\r\n\r\n  for (; i < length; i++) {\r\n    if ((obj = arguments[i]) !== null) {\r\n      for (name in obj) {\r\n        copy = obj[name];\r\n\r\n        if (target === copy) {\r\n          continue;\r\n        } else if (copy !== undefined) {\r\n          target[name] = copy;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return target;\r\n}\r\n\r\nfunction checkStorageValue(value) {\r\n  return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\r\n}\r\n\r\nfunction setLocalStorage(storage, key, value, access) {\r\n  if (access) {\r\n    try {\r\n      storage.setItem(key, value);\r\n    } catch (e) {}\r\n  }\r\n\r\n  return value;\r\n}\r\n\r\nfunction getSlideId() {\r\n  var id = window.tnsId;\r\n  window.tnsId = !id ? 1 : id + 1;\r\n  return 'tns' + window.tnsId;\r\n}\r\n\r\nfunction getBody() {\r\n  var doc = document,\r\n      body = doc.body;\r\n\r\n  if (!body) {\r\n    body = doc.createElement('body');\r\n    body.fake = true;\r\n  }\r\n\r\n  return body;\r\n}\r\n\r\nvar docElement = document.documentElement;\r\n\r\nfunction setFakeBody(body) {\r\n  var docOverflow = '';\r\n\r\n  if (body.fake) {\r\n    docOverflow = docElement.style.overflow; //avoid crashing IE8, if background image is used\r\n\r\n    body.style.background = ''; //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\r\n\r\n    body.style.overflow = docElement.style.overflow = 'hidden';\r\n    docElement.appendChild(body);\r\n  }\r\n\r\n  return docOverflow;\r\n}\r\n\r\nfunction resetFakeBody(body, docOverflow) {\r\n  if (body.fake) {\r\n    body.remove();\r\n    docElement.style.overflow = docOverflow; // Trigger layout so kinetic scrolling isn't disabled in iOS6+\r\n    // eslint-disable-next-line\r\n\r\n    docElement.offsetHeight;\r\n  }\r\n}\r\n\r\n// get css-calc \r\nfunction calc() {\r\n  var doc = document,\r\n      body = getBody(),\r\n      docOverflow = setFakeBody(body),\r\n      div = doc.createElement('div'),\r\n      result = false;\r\n  body.appendChild(div);\r\n\r\n  try {\r\n    var str = '(10px * 10)',\r\n        vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\r\n        val;\r\n\r\n    for (var i = 0; i < 3; i++) {\r\n      val = vals[i];\r\n      div.style.width = val;\r\n\r\n      if (div.offsetWidth === 100) {\r\n        result = val.replace(str, '');\r\n        break;\r\n      }\r\n    }\r\n  } catch (e) {}\r\n\r\n  body.fake ? resetFakeBody(body, docOverflow) : div.remove();\r\n  return result;\r\n}\r\n\r\n// get subpixel support value\r\nfunction percentageLayout() {\r\n  // check subpixel layout supporting\r\n  var doc = document,\r\n      body = getBody(),\r\n      docOverflow = setFakeBody(body),\r\n      wrapper = doc.createElement('div'),\r\n      outer = doc.createElement('div'),\r\n      str = '',\r\n      count = 70,\r\n      perPage = 3,\r\n      supported = false;\r\n  wrapper.className = \"tns-t-subp2\";\r\n  outer.className = \"tns-t-ct\";\r\n\r\n  for (var i = 0; i < count; i++) {\r\n    str += '<div></div>';\r\n  }\r\n\r\n  outer.innerHTML = str;\r\n  wrapper.appendChild(outer);\r\n  body.appendChild(wrapper);\r\n  supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\r\n  body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\r\n  return supported;\r\n}\r\n\r\nfunction mediaquerySupport() {\r\n  if (window.matchMedia || window.msMatchMedia) {\r\n    return true;\r\n  }\r\n\r\n  var doc = document,\r\n      body = getBody(),\r\n      docOverflow = setFakeBody(body),\r\n      div = doc.createElement('div'),\r\n      style = doc.createElement('style'),\r\n      rule = '@media all and (min-width:1px){.tns-mq-test{position:absolute}}',\r\n      position;\r\n  style.type = 'text/css';\r\n  div.className = 'tns-mq-test';\r\n  body.appendChild(style);\r\n  body.appendChild(div);\r\n\r\n  if (style.styleSheet) {\r\n    style.styleSheet.cssText = rule;\r\n  } else {\r\n    style.appendChild(doc.createTextNode(rule));\r\n  }\r\n\r\n  position = window.getComputedStyle ? window.getComputedStyle(div).position : div.currentStyle['position'];\r\n  body.fake ? resetFakeBody(body, docOverflow) : div.remove();\r\n  return position === \"absolute\";\r\n}\r\n\r\n// create and append style sheet\r\nfunction createStyleSheet(media, nonce) {\r\n  // Create the <style> tag\r\n  var style = document.createElement(\"style\"); // style.setAttribute(\"type\", \"text/css\");\r\n  // Add a media (and/or media query) here if you'd like!\r\n  // style.setAttribute(\"media\", \"screen\")\r\n  // style.setAttribute(\"media\", \"only screen and (max-width : 1024px)\")\r\n\r\n  if (media) {\r\n    style.setAttribute(\"media\", media);\r\n  } // Add nonce attribute for Content Security Policy\r\n\r\n\r\n  if (nonce) {\r\n    style.setAttribute(\"nonce\", nonce);\r\n  } // WebKit hack :(\r\n  // style.appendChild(document.createTextNode(\"\"));\r\n  // Add the <style> element to the page\r\n\r\n\r\n  document.querySelector('head').appendChild(style);\r\n  return style.sheet ? style.sheet : style.styleSheet;\r\n}\r\n\r\n// cross browsers addRule method\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n  // return raf(function() {\r\n  'insertRule' in sheet ? sheet.insertRule(selector + '{' + rules + '}', index) : sheet.addRule(selector, rules, index); // });\r\n}\r\n\r\n// cross browsers addRule method\r\nfunction removeCSSRule(sheet, index) {\r\n  // return raf(function() {\r\n  'deleteRule' in sheet ? sheet.deleteRule(index) : sheet.removeRule(index); // });\r\n}\r\n\r\nfunction getCssRulesLength(sheet) {\r\n  var rule = 'insertRule' in sheet ? sheet.cssRules : sheet.rules;\r\n  return rule.length;\r\n}\r\n\r\nfunction toDegree(y, x) {\r\n  return Math.atan2(y, x) * (180 / Math.PI);\r\n}\r\n\r\nfunction getTouchDirection(angle, range) {\r\n  var direction = false,\r\n      gap = Math.abs(90 - Math.abs(angle));\r\n\r\n  if (gap >= 90 - range) {\r\n    direction = 'horizontal';\r\n  } else if (gap <= range) {\r\n    direction = 'vertical';\r\n  }\r\n\r\n  return direction;\r\n}\r\n\r\n// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\r\nfunction forEach(arr, callback, scope) {\r\n  for (var i = 0, l = arr.length; i < l; i++) {\r\n    callback.call(scope, arr[i], i);\r\n  }\r\n}\r\n\r\nvar classListSupport = ('classList' in document.createElement('_'));\r\n\r\nvar hasClass = classListSupport ? function (el, str) {\r\n  return el.classList.contains(str);\r\n} : function (el, str) {\r\n  return el.className.indexOf(str) >= 0;\r\n};\r\n\r\nvar addClass = classListSupport ? function (el, str) {\r\n  if (!hasClass(el, str)) {\r\n    el.classList.add(str);\r\n  }\r\n} : function (el, str) {\r\n  if (!hasClass(el, str)) {\r\n    el.className += ' ' + str;\r\n  }\r\n};\r\n\r\nvar removeClass = classListSupport ? function (el, str) {\r\n  if (hasClass(el, str)) {\r\n    el.classList.remove(str);\r\n  }\r\n} : function (el, str) {\r\n  if (hasClass(el, str)) {\r\n    el.className = el.className.replace(str, '');\r\n  }\r\n};\r\n\r\nfunction hasAttr(el, attr) {\r\n  return el.hasAttribute(attr);\r\n}\r\n\r\nfunction getAttr(el, attr) {\r\n  return el.getAttribute(attr);\r\n}\r\n\r\nfunction isNodeList(el) {\r\n  // Only NodeList has the \"item()\" function\r\n  return typeof el.item !== \"undefined\";\r\n}\r\n\r\nfunction setAttrs(els, attrs) {\r\n  els = isNodeList(els) || els instanceof Array ? els : [els];\r\n\r\n  if (Object.prototype.toString.call(attrs) !== '[object Object]') {\r\n    return;\r\n  }\r\n\r\n  for (var i = els.length; i--;) {\r\n    for (var key in attrs) {\r\n      els[i].setAttribute(key, attrs[key]);\r\n    }\r\n  }\r\n}\r\n\r\nfunction removeAttrs(els, attrs) {\r\n  els = isNodeList(els) || els instanceof Array ? els : [els];\r\n  attrs = attrs instanceof Array ? attrs : [attrs];\r\n  var attrLength = attrs.length;\r\n\r\n  for (var i = els.length; i--;) {\r\n    for (var j = attrLength; j--;) {\r\n      els[i].removeAttribute(attrs[j]);\r\n    }\r\n  }\r\n}\r\n\r\nfunction arrayFromNodeList(nl) {\r\n  var arr = [];\r\n\r\n  for (var i = 0, l = nl.length; i < l; i++) {\r\n    arr.push(nl[i]);\r\n  }\r\n\r\n  return arr;\r\n}\r\n\r\nfunction hideElement(el, forceHide) {\r\n  if (el.style.display !== 'none') {\r\n    el.style.display = 'none';\r\n  }\r\n}\r\n\r\nfunction showElement(el, forceHide) {\r\n  if (el.style.display === 'none') {\r\n    el.style.display = '';\r\n  }\r\n}\r\n\r\nfunction isVisible(el) {\r\n  return window.getComputedStyle(el).display !== 'none';\r\n}\r\n\r\nfunction whichProperty(props) {\r\n  if (typeof props === 'string') {\r\n    var arr = [props],\r\n        Props = props.charAt(0).toUpperCase() + props.substr(1),\r\n        prefixes = ['Webkit', 'Moz', 'ms', 'O'];\r\n    prefixes.forEach(function (prefix) {\r\n      if (prefix !== 'ms' || props === 'transform') {\r\n        arr.push(prefix + Props);\r\n      }\r\n    });\r\n    props = arr;\r\n  }\r\n\r\n  var el = document.createElement('fakeelement');\r\n      props.length;\r\n\r\n  for (var i = 0; i < props.length; i++) {\r\n    var prop = props[i];\r\n\r\n    if (el.style[prop] !== undefined) {\r\n      return prop;\r\n    }\r\n  }\r\n\r\n  return false; // explicit for ie9-\r\n}\r\n\r\nfunction has3DTransforms(tf) {\r\n  if (!tf) {\r\n    return false;\r\n  }\r\n\r\n  if (!window.getComputedStyle) {\r\n    return false;\r\n  }\r\n\r\n  var doc = document,\r\n      body = getBody(),\r\n      docOverflow = setFakeBody(body),\r\n      el = doc.createElement('p'),\r\n      has3d,\r\n      cssTF = tf.length > 9 ? '-' + tf.slice(0, -9).toLowerCase() + '-' : '';\r\n  cssTF += 'transform'; // Add it to the body to get the computed style\r\n\r\n  body.insertBefore(el, null);\r\n  el.style[tf] = 'translate3d(1px,1px,1px)';\r\n  has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\r\n  body.fake ? resetFakeBody(body, docOverflow) : el.remove();\r\n  return has3d !== undefined && has3d.length > 0 && has3d !== \"none\";\r\n}\r\n\r\n// get transitionend, animationend based on transitionDuration\r\n// @propin: string\r\n// @propOut: string, first-letter uppercase\r\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\r\nfunction getEndProperty(propIn, propOut) {\r\n  var endProp = false;\r\n\r\n  if (/^Webkit/.test(propIn)) {\r\n    endProp = 'webkit' + propOut + 'End';\r\n  } else if (/^O/.test(propIn)) {\r\n    endProp = 'o' + propOut + 'End';\r\n  } else if (propIn) {\r\n    endProp = propOut.toLowerCase() + 'end';\r\n  }\r\n\r\n  return endProp;\r\n}\r\n\r\n// Test via a getter in the options object to see if the passive property is accessed\r\nvar supportsPassive = false;\r\n\r\ntry {\r\n  var opts = Object.defineProperty({}, 'passive', {\r\n    get: function () {\r\n      supportsPassive = true;\r\n    }\r\n  });\r\n  window.addEventListener(\"test\", null, opts);\r\n} catch (e) {}\r\n\r\nvar passiveOption = supportsPassive ? {\r\n  passive: true\r\n} : false;\r\n\r\nfunction addEvents(el, obj, preventScrolling) {\r\n  for (var prop in obj) {\r\n    var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 && !preventScrolling ? passiveOption : false;\r\n    el.addEventListener(prop, obj[prop], option);\r\n  }\r\n}\r\n\r\nfunction removeEvents(el, obj) {\r\n  for (var prop in obj) {\r\n    var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 ? passiveOption : false;\r\n    el.removeEventListener(prop, obj[prop], option);\r\n  }\r\n}\r\n\r\nfunction Events() {\r\n  return {\r\n    topics: {},\r\n    on: function (eventName, fn) {\r\n      this.topics[eventName] = this.topics[eventName] || [];\r\n      this.topics[eventName].push(fn);\r\n    },\r\n    off: function (eventName, fn) {\r\n      if (this.topics[eventName]) {\r\n        for (var i = 0; i < this.topics[eventName].length; i++) {\r\n          if (this.topics[eventName][i] === fn) {\r\n            this.topics[eventName].splice(i, 1);\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    },\r\n    emit: function (eventName, data) {\r\n      data.type = eventName;\r\n\r\n      if (this.topics[eventName]) {\r\n        this.topics[eventName].forEach(function (fn) {\r\n          fn(data, eventName);\r\n        });\r\n      }\r\n    }\r\n  };\r\n}\r\n\r\nfunction jsTransform(element, attr, prefix, postfix, to, duration, callback) {\r\n  var tick = Math.min(duration, 10),\r\n      unit = to.indexOf('%') >= 0 ? '%' : 'px',\r\n      to = to.replace(unit, ''),\r\n      from = Number(element.style[attr].replace(prefix, '').replace(postfix, '').replace(unit, '')),\r\n      positionTick = (to - from) / duration * tick;\r\n  setTimeout(moveElement, tick);\r\n\r\n  function moveElement() {\r\n    duration -= tick;\r\n    from += positionTick;\r\n    element.style[attr] = prefix + from + unit + postfix;\r\n\r\n    if (duration > 0) {\r\n      setTimeout(moveElement, tick);\r\n    } else {\r\n      callback();\r\n    }\r\n  }\r\n}\r\n\r\n// Object.keys\r\nif (!Object.keys) {\r\n  Object.keys = function (object) {\r\n    var keys = [];\r\n\r\n    for (var name in object) {\r\n      if (Object.prototype.hasOwnProperty.call(object, name)) {\r\n        keys.push(name);\r\n      }\r\n    }\r\n\r\n    return keys;\r\n  };\r\n} // ChildNode.remove\r\n\r\n\r\nif (!(\"remove\" in Element.prototype)) {\r\n  Element.prototype.remove = function () {\r\n    if (this.parentNode) {\r\n      this.parentNode.removeChild(this);\r\n    }\r\n  };\r\n}\r\nvar tns = function (options) {\r\n  options = extend({\r\n    container: '.slider',\r\n    mode: 'carousel',\r\n    axis: 'horizontal',\r\n    items: 1,\r\n    gutter: 0,\r\n    edgePadding: 0,\r\n    fixedWidth: false,\r\n    autoWidth: false,\r\n    viewportMax: false,\r\n    slideBy: 1,\r\n    center: false,\r\n    controls: true,\r\n    controlsPosition: 'top',\r\n    controlsText: ['prev', 'next'],\r\n    controlsContainer: false,\r\n    prevButton: false,\r\n    nextButton: false,\r\n    nav: true,\r\n    navPosition: 'top',\r\n    navContainer: false,\r\n    navAsThumbnails: false,\r\n    arrowKeys: false,\r\n    speed: 300,\r\n    autoplay: false,\r\n    autoplayPosition: 'top',\r\n    autoplayTimeout: 5000,\r\n    autoplayDirection: 'forward',\r\n    autoplayText: ['start', 'stop'],\r\n    autoplayHoverPause: false,\r\n    autoplayButton: false,\r\n    autoplayButtonOutput: true,\r\n    autoplayResetOnVisibility: true,\r\n    animateIn: 'tns-fadeIn',\r\n    animateOut: 'tns-fadeOut',\r\n    animateNormal: 'tns-normal',\r\n    animateDelay: false,\r\n    loop: true,\r\n    rewind: false,\r\n    autoHeight: false,\r\n    responsive: false,\r\n    lazyload: false,\r\n    lazyloadSelector: '.tns-lazy-img',\r\n    touch: true,\r\n    mouseDrag: false,\r\n    swipeAngle: 15,\r\n    nested: false,\r\n    preventActionWhenRunning: false,\r\n    preventScrollOnTouch: false,\r\n    freezable: true,\r\n    onInit: false,\r\n    useLocalStorage: true,\r\n    nonce: false\r\n  }, options || {});\r\n  var doc = document,\r\n      win = window,\r\n      KEYS = {\r\n    ENTER: 13,\r\n    SPACE: 32,\r\n    LEFT: 37,\r\n    RIGHT: 39\r\n  },\r\n      tnsStorage = {},\r\n      localStorageAccess = options.useLocalStorage;\r\n\r\n  if (localStorageAccess) {\r\n    // check browser version and local storage access\r\n    var browserInfo = navigator.userAgent;\r\n    var uid = new Date();\r\n\r\n    try {\r\n      tnsStorage = win.localStorage;\r\n\r\n      if (tnsStorage) {\r\n        tnsStorage.setItem(uid, uid);\r\n        localStorageAccess = tnsStorage.getItem(uid) == uid;\r\n        tnsStorage.removeItem(uid);\r\n      } else {\r\n        localStorageAccess = false;\r\n      }\r\n\r\n      if (!localStorageAccess) {\r\n        tnsStorage = {};\r\n      }\r\n    } catch (e) {\r\n      localStorageAccess = false;\r\n    }\r\n\r\n    if (localStorageAccess) {\r\n      // remove storage when browser version changes\r\n      if (tnsStorage['tnsApp'] && tnsStorage['tnsApp'] !== browserInfo) {\r\n        ['tC', 'tPL', 'tMQ', 'tTf', 't3D', 'tTDu', 'tTDe', 'tADu', 'tADe', 'tTE', 'tAE'].forEach(function (item) {\r\n          tnsStorage.removeItem(item);\r\n        });\r\n      } // update browserInfo\r\n\r\n\r\n      localStorage['tnsApp'] = browserInfo;\r\n    }\r\n  }\r\n\r\n  var CALC = tnsStorage['tC'] ? checkStorageValue(tnsStorage['tC']) : setLocalStorage(tnsStorage, 'tC', calc(), localStorageAccess),\r\n      PERCENTAGELAYOUT = tnsStorage['tPL'] ? checkStorageValue(tnsStorage['tPL']) : setLocalStorage(tnsStorage, 'tPL', percentageLayout(), localStorageAccess),\r\n      CSSMQ = tnsStorage['tMQ'] ? checkStorageValue(tnsStorage['tMQ']) : setLocalStorage(tnsStorage, 'tMQ', mediaquerySupport(), localStorageAccess),\r\n      TRANSFORM = tnsStorage['tTf'] ? checkStorageValue(tnsStorage['tTf']) : setLocalStorage(tnsStorage, 'tTf', whichProperty('transform'), localStorageAccess),\r\n      HAS3DTRANSFORMS = tnsStorage['t3D'] ? checkStorageValue(tnsStorage['t3D']) : setLocalStorage(tnsStorage, 't3D', has3DTransforms(TRANSFORM), localStorageAccess),\r\n      TRANSITIONDURATION = tnsStorage['tTDu'] ? checkStorageValue(tnsStorage['tTDu']) : setLocalStorage(tnsStorage, 'tTDu', whichProperty('transitionDuration'), localStorageAccess),\r\n      TRANSITIONDELAY = tnsStorage['tTDe'] ? checkStorageValue(tnsStorage['tTDe']) : setLocalStorage(tnsStorage, 'tTDe', whichProperty('transitionDelay'), localStorageAccess),\r\n      ANIMATIONDURATION = tnsStorage['tADu'] ? checkStorageValue(tnsStorage['tADu']) : setLocalStorage(tnsStorage, 'tADu', whichProperty('animationDuration'), localStorageAccess),\r\n      ANIMATIONDELAY = tnsStorage['tADe'] ? checkStorageValue(tnsStorage['tADe']) : setLocalStorage(tnsStorage, 'tADe', whichProperty('animationDelay'), localStorageAccess),\r\n      TRANSITIONEND = tnsStorage['tTE'] ? checkStorageValue(tnsStorage['tTE']) : setLocalStorage(tnsStorage, 'tTE', getEndProperty(TRANSITIONDURATION, 'Transition'), localStorageAccess),\r\n      ANIMATIONEND = tnsStorage['tAE'] ? checkStorageValue(tnsStorage['tAE']) : setLocalStorage(tnsStorage, 'tAE', getEndProperty(ANIMATIONDURATION, 'Animation'), localStorageAccess); // get element nodes from selectors\r\n\r\n  var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\r\n      tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'],\r\n      optionsElements = {};\r\n\r\n  tnsList.forEach(function (item) {\r\n    if (typeof options[item] === 'string') {\r\n      var str = options[item],\r\n          el = doc.querySelector(str);\r\n\r\n          optionsElements[item] = str;\r\n          \r\n      if (el && el.nodeName) {\r\n          options[item] = el;\r\n\r\n      } else {\r\n        if (supportConsoleWarn) {\r\n          console.warn('Can\\'t find', options[item]);\r\n        }\r\n\r\n        return;\r\n      }\r\n    }\r\n  }); // make sure at least 1 slide\r\n  \r\n  if (options.container.children.length < 1) {\r\n    if (supportConsoleWarn) {\r\n      console.warn('No slides found in', options.container);\r\n    }\r\n\r\n    return;\r\n  } // update options\r\n\r\n\r\n  var responsive = options.responsive,\r\n      nested = options.nested,\r\n      carousel = options.mode === 'carousel' ? true : false;\r\n\r\n  if (responsive) {\r\n    // apply responsive[0] to options and remove it\r\n    if (0 in responsive) {\r\n      options = extend(options, responsive[0]);\r\n      delete responsive[0];\r\n    }\r\n\r\n    var responsiveTem = {};\r\n\r\n    for (var key in responsive) {\r\n      var val = responsive[key]; // update responsive\r\n      // from: 300: 2\r\n      // to:\r\n      //   300: {\r\n      //     items: 2\r\n      //   }\r\n\r\n      val = typeof val === 'number' ? {\r\n        items: val\r\n      } : val;\r\n      responsiveTem[key] = val;\r\n    }\r\n\r\n    responsive = responsiveTem;\r\n    responsiveTem = null;\r\n  } // update options\r\n\r\n\r\n  function updateOptions(obj) {\r\n    for (var key in obj) {\r\n      if (!carousel) {\r\n        if (key === 'slideBy') {\r\n          obj[key] = 'page';\r\n        }\r\n\r\n        if (key === 'edgePadding') {\r\n          obj[key] = false;\r\n        }\r\n\r\n        if (key === 'autoHeight') {\r\n          obj[key] = false;\r\n        }\r\n      } // update responsive options\r\n\r\n\r\n      if (key === 'responsive') {\r\n        updateOptions(obj[key]);\r\n      }\r\n    }\r\n  }\r\n\r\n  if (!carousel) {\r\n    updateOptions(options);\r\n  } // === define and set variables ===\r\n\r\n\r\n  if (!carousel) {\r\n    options.axis = 'horizontal';\r\n    options.slideBy = 'page';\r\n    options.edgePadding = false;\r\n    var animateIn = options.animateIn,\r\n        animateOut = options.animateOut,\r\n        animateDelay = options.animateDelay,\r\n        animateNormal = options.animateNormal;\r\n  }\r\n\r\n  var horizontal = options.axis === 'horizontal' ? true : false,\r\n      outerWrapper = doc.createElement('div'),\r\n      innerWrapper = doc.createElement('div'),\r\n      middleWrapper,\r\n      container = options.container,\r\n      containerParent = container.parentNode,\r\n      containerHTML = container.outerHTML,\r\n      slideItems = Array.from(container.children).filter(node => node.tagName.toLowerCase() !== 'script'),\r\n      slideCount = slideItems.length,\r\n      breakpointZone,\r\n      windowWidth = getWindowWidth(),\r\n      isOn = false;\r\n  \r\n  if (responsive) {\r\n    setBreakpointZone();\r\n  }\r\n\r\n  if (carousel) {\r\n    container.className += ' tns-vpfix';\r\n  } // fixedWidth: viewport > rightBoundary > indexMax\r\n\r\n\r\n  var autoWidth = options.autoWidth,\r\n      fixedWidth = getOption('fixedWidth'),\r\n      edgePadding = getOption('edgePadding'),\r\n      gutter = getOption('gutter'),\r\n      viewport = getViewportWidth(),\r\n      center = getOption('center'),\r\n      items = !autoWidth ? Math.floor(getOption('items')) : 1,\r\n      slideBy = getOption('slideBy'),\r\n      viewportMax = options.viewportMax || options.fixedWidthViewportWidth,\r\n      arrowKeys = getOption('arrowKeys'),\r\n      speed = getOption('speed'),\r\n      rewind = options.rewind,\r\n      loop = rewind ? false : options.loop,\r\n      autoHeight = getOption('autoHeight'),\r\n      controls = getOption('controls'),\r\n      controlsText = getOption('controlsText'),\r\n      nav = getOption('nav'),\r\n      touch = getOption('touch'),\r\n      mouseDrag = getOption('mouseDrag'),\r\n      autoplay = getOption('autoplay'),\r\n      autoplayTimeout = getOption('autoplayTimeout'),\r\n      autoplayText = getOption('autoplayText'),\r\n      autoplayHoverPause = getOption('autoplayHoverPause'),\r\n      autoplayResetOnVisibility = getOption('autoplayResetOnVisibility'),\r\n      sheet = createStyleSheet(null, getOption('nonce')),\r\n      lazyload = options.lazyload,\r\n      lazyloadSelector = options.lazyloadSelector,\r\n      slidePositions,\r\n      // collection of slide positions\r\n  slideItemsOut = [],\r\n      cloneCount = loop ? getCloneCountForLoop() : 0,\r\n      slideCountNew = !carousel ? slideCount + cloneCount : slideCount + cloneCount * 2,\r\n      hasRightDeadZone = (fixedWidth || autoWidth) && !loop ? true : false,\r\n      rightBoundary = fixedWidth ? getRightBoundary() : null,\r\n      updateIndexBeforeTransform = !carousel || !loop ? true : false,\r\n      // transform\r\n  transformAttr = horizontal ? 'left' : 'top',\r\n      transformPrefix = '',\r\n      transformPostfix = '',\r\n      // index\r\n  getIndexMax = function () {\r\n    if (fixedWidth) {\r\n      return function () {\r\n        return center && !loop ? slideCount - 1 : Math.ceil(-rightBoundary / (fixedWidth + gutter));\r\n      };\r\n    } else if (autoWidth) {\r\n      return function () {\r\n        for (var i = 0; i < slideCountNew; i++) {\r\n          if (slidePositions[i] >= -rightBoundary) {\r\n            return i;\r\n          }\r\n        }\r\n      };\r\n    } else {\r\n      return function () {\r\n        if (center && carousel && !loop) {\r\n          return slideCount - 1;\r\n        } else {\r\n          return loop || carousel ? Math.max(0, slideCountNew - Math.ceil(items)) : slideCountNew - 1;\r\n        }\r\n      };\r\n    }\r\n  }(),\r\n      index = getStartIndex(getOption('startIndex')),\r\n      indexCached = index;\r\n      getCurrentSlide();\r\n      var indexMin = 0,\r\n      indexMax = !autoWidth ? getIndexMax() : null,\r\n      preventActionWhenRunning = options.preventActionWhenRunning,\r\n      swipeAngle = options.swipeAngle,\r\n      moveDirectionExpected = swipeAngle ? '?' : true,\r\n      running = false,\r\n      onInit = options.onInit,\r\n      events = new Events(),\r\n      // id, class\r\n  newContainerClasses = ' tns-slider tns-' + options.mode,\r\n      slideId = container.id || getSlideId(),\r\n      disable = getOption('disable'),\r\n      disabled = false,\r\n      freezable = options.freezable,\r\n      freeze = freezable && !autoWidth ? getFreeze() : false,\r\n      frozen = false,\r\n      controlsEvents = {\r\n    'click': onControlsClick,\r\n    'keydown': onControlsKeydown\r\n  },\r\n      navEvents = {\r\n    'click': onNavClick,\r\n    'keydown': onNavKeydown\r\n  },\r\n      hoverEvents = {\r\n    'mouseover': mouseoverPause,\r\n    'mouseout': mouseoutRestart\r\n  },\r\n      visibilityEvent = {\r\n    'visibilitychange': onVisibilityChange\r\n  },\r\n      docmentKeydownEvent = {\r\n    'keydown': onDocumentKeydown\r\n  },\r\n      touchEvents = {\r\n    'touchstart': onPanStart,\r\n    'touchmove': onPanMove,\r\n    'touchend': onPanEnd,\r\n    'touchcancel': onPanEnd\r\n  },\r\n      dragEvents = {\r\n    'mousedown': onPanStart,\r\n    'mousemove': onPanMove,\r\n    'mouseup': onPanEnd,\r\n    'mouseleave': onPanEnd\r\n  },\r\n      hasControls = hasOption('controls'),\r\n      hasNav = hasOption('nav'),\r\n      navAsThumbnails = autoWidth ? true : options.navAsThumbnails,\r\n      hasAutoplay = hasOption('autoplay'),\r\n      hasTouch = hasOption('touch'),\r\n      hasMouseDrag = hasOption('mouseDrag'),\r\n      slideActiveClass = 'tns-slide-active',\r\n      slideClonedClass = 'tns-slide-cloned',\r\n      imgCompleteClass = 'tns-complete',\r\n      imgEvents = {\r\n    'load': onImgLoaded,\r\n    'error': onImgFailed\r\n  },\r\n      imgsComplete,\r\n      liveregionCurrent,\r\n      preventScroll = options.preventScrollOnTouch === 'force' ? true : false; // controls\r\n\r\n\r\n  if (hasControls) {\r\n    var controlsContainer = options.controlsContainer,\r\n        controlsContainerHTML = options.controlsContainer ? options.controlsContainer.outerHTML : '',\r\n        prevButton = options.prevButton,\r\n        nextButton = options.nextButton,\r\n        prevButtonHTML = options.prevButton ? options.prevButton.outerHTML : '',\r\n        nextButtonHTML = options.nextButton ? options.nextButton.outerHTML : '',\r\n        prevIsButton,\r\n        nextIsButton;\r\n  } // nav\r\n\r\n\r\n  if (hasNav) {\r\n    var navContainer = options.navContainer,\r\n        navContainerHTML = options.navContainer ? options.navContainer.outerHTML : '',\r\n        navItems,\r\n        pages = autoWidth ? slideCount : getPages(),\r\n        pagesCached = 0,\r\n        navClicked = -1,\r\n        navCurrentIndex = getCurrentNavIndex(),\r\n        navCurrentIndexCached = navCurrentIndex,\r\n        navActiveClass = 'tns-nav-active',\r\n        navStr = 'Carousel Page ',\r\n        navStrCurrent = ' (Current Slide)';\r\n  } // autoplay\r\n\r\n\r\n  if (hasAutoplay) {\r\n    var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\r\n        autoplayButton = options.autoplayButton,\r\n        autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\r\n        autoplayHtmlStrings = ['<span class=\\'tns-visually-hidden\\'>', ' animation</span>'],\r\n        autoplayTimer,\r\n        animating,\r\n        autoplayHoverPaused,\r\n        autoplayUserPaused,\r\n        autoplayVisibilityPaused;\r\n  }\r\n\r\n  if (hasTouch || hasMouseDrag) {\r\n    var initPosition = {},\r\n        lastPosition = {},\r\n        translateInit,\r\n        panStart = false,\r\n        rafIndex,\r\n        getDist = horizontal ? function (a, b) {\r\n      return a.x - b.x;\r\n    } : function (a, b) {\r\n      return a.y - b.y;\r\n    };\r\n  } // disable slider when slidecount <= items\r\n\r\n\r\n  if (!autoWidth) {\r\n    resetVariblesWhenDisable(disable || freeze);\r\n  }\r\n\r\n  if (TRANSFORM) {\r\n    transformAttr = TRANSFORM;\r\n    transformPrefix = 'translate';\r\n\r\n    if (HAS3DTRANSFORMS) {\r\n      transformPrefix += horizontal ? '3d(' : '3d(0px, ';\r\n      transformPostfix = horizontal ? ', 0px, 0px)' : ', 0px)';\r\n    } else {\r\n      transformPrefix += horizontal ? 'X(' : 'Y(';\r\n      transformPostfix = ')';\r\n    }\r\n  }\r\n\r\n  if (carousel) {\r\n    container.className = container.className.replace('tns-vpfix', '');\r\n  }\r\n\r\n  initStructure();\r\n  initSheet();\r\n  initSliderTransform(); // === COMMON FUNCTIONS === //\r\n\r\n  function resetVariblesWhenDisable(condition) {\r\n    if (condition) {\r\n      controls = nav = touch = mouseDrag = arrowKeys = autoplay = autoplayHoverPause = autoplayResetOnVisibility = false;\r\n    }\r\n  }\r\n\r\n  function getCurrentSlide() {\r\n    var tem = carousel ? index - cloneCount : index;\r\n\r\n    while (tem < 0) {\r\n      tem += slideCount;\r\n    }\r\n\r\n    return tem % slideCount + 1;\r\n  }\r\n\r\n  function getStartIndex(ind) {\r\n    ind = ind ? Math.max(0, Math.min(loop ? slideCount - 1 : slideCount - items, ind)) : 0;\r\n    return carousel ? ind + cloneCount : ind;\r\n  }\r\n\r\n  function getAbsIndex(i) {\r\n    if (i == null) {\r\n      i = index;\r\n    }\r\n\r\n    if (carousel) {\r\n      i -= cloneCount;\r\n    }\r\n\r\n    while (i < 0) {\r\n      i += slideCount;\r\n    }\r\n\r\n    return Math.floor(i % slideCount);\r\n  }\r\n\r\n  function getCurrentNavIndex() {\r\n    var absIndex = getAbsIndex(),\r\n        result;\r\n    result = navAsThumbnails ? absIndex : fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) : Math.floor(absIndex / items); // set active nav to the last one when reaches the right edge\r\n\r\n    if (!loop && carousel && index === indexMax) {\r\n      result = pages - 1;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  function getItemsMax() {\r\n    // fixedWidth or autoWidth while viewportMax is not available\r\n    if (autoWidth || fixedWidth && !viewportMax) {\r\n      return slideCount - 1; // most cases\r\n    } else {\r\n      var str = fixedWidth ? 'fixedWidth' : 'items',\r\n          arr = [];\r\n\r\n      if (fixedWidth || options[str] < slideCount) {\r\n        arr.push(options[str]);\r\n      }\r\n\r\n      if (responsive) {\r\n        for (var bp in responsive) {\r\n          var tem = responsive[bp][str];\r\n\r\n          if (tem && (fixedWidth || tem < slideCount)) {\r\n            arr.push(tem);\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!arr.length) {\r\n        arr.push(0);\r\n      }\r\n\r\n      return Math.ceil(fixedWidth ? viewportMax / Math.min.apply(null, arr) : Math.max.apply(null, arr));\r\n    }\r\n  }\r\n\r\n  function getCloneCountForLoop() {\r\n    var itemsMax = getItemsMax(),\r\n        result = carousel ? Math.ceil((itemsMax * 5 - slideCount) / 2) : itemsMax * 4 - slideCount;\r\n    result = Math.max(itemsMax, result);\r\n    return hasOption('edgePadding') ? result + 1 : result;\r\n  }\r\n\r\n  function getWindowWidth() {\r\n    return win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;\r\n  }\r\n\r\n  function getInsertPosition(pos) {\r\n    return pos === 'top' ? 'afterbegin' : 'beforeend';\r\n  }\r\n\r\n  function getClientWidth(el) {\r\n    if (el == null) {\r\n      return;\r\n    }\r\n\r\n    var div = doc.createElement('div'),\r\n        rect,\r\n        width;\r\n    el.appendChild(div);\r\n    rect = div.getBoundingClientRect();\r\n    width = rect.right - rect.left;\r\n    div.remove();\r\n    return width || getClientWidth(el.parentNode);\r\n  }\r\n\r\n  function getViewportWidth() {\r\n    var gap = edgePadding ? edgePadding * 2 - gutter : 0;\r\n    return getClientWidth(containerParent) - gap;\r\n  }\r\n\r\n  function hasOption(item) {\r\n    if (options[item]) {\r\n      return true;\r\n    } else {\r\n      if (responsive) {\r\n        for (var bp in responsive) {\r\n          if (responsive[bp][item]) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n\r\n      return false;\r\n    }\r\n  } // get option:\r\n  // fixed width: viewport, fixedWidth, gutter => items\r\n  // others: window width => all variables\r\n  // all: items => slideBy\r\n\r\n\r\n  function getOption(item, ww) {\r\n    if (ww == null) {\r\n      ww = windowWidth;\r\n    }\r\n\r\n    if (item === 'items' && fixedWidth) {\r\n      return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\r\n    } else {\r\n      var result = options[item];\r\n\r\n      if (responsive) {\r\n        for (var bp in responsive) {\r\n          // bp: convert string to number\r\n          if (ww >= parseInt(bp)) {\r\n            if (item in responsive[bp]) {\r\n              result = responsive[bp][item];\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (item === 'slideBy' && result === 'page') {\r\n        result = getOption('items');\r\n      }\r\n\r\n      if (!carousel && (item === 'slideBy' || item === 'items')) {\r\n        result = Math.floor(result);\r\n      }\r\n\r\n      return result;\r\n    }\r\n  }\r\n\r\n  function getSlideMarginLeft(i) {\r\n    return CALC ? CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' : i * 100 / slideCountNew + '%';\r\n  }\r\n\r\n  function getInnerWrapperStyles(edgePaddingTem, gutterTem, fixedWidthTem, speedTem, autoHeightBP) {\r\n    var str = '';\r\n\r\n    if (edgePaddingTem !== undefined) {\r\n      var gap = edgePaddingTem;\r\n\r\n      if (gutterTem) {\r\n        gap -= gutterTem;\r\n      }\r\n\r\n      str = horizontal ? 'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' : 'margin: ' + edgePaddingTem + 'px 0 ' + gap + 'px 0;';\r\n    } else if (gutterTem && !fixedWidthTem) {\r\n      var gutterTemUnit = '-' + gutterTem + 'px',\r\n          dir = horizontal ? gutterTemUnit + ' 0 0' : '0 ' + gutterTemUnit + ' 0';\r\n      str = 'margin: 0 ' + dir + ';';\r\n    }\r\n\r\n    if (!carousel && autoHeightBP && TRANSITIONDURATION && speedTem) {\r\n      str += getTransitionDurationStyle(speedTem);\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  function getContainerWidth(fixedWidthTem, gutterTem, itemsTem) {\r\n    if (fixedWidthTem) {\r\n      return (fixedWidthTem + gutterTem) * slideCountNew + 'px';\r\n    } else {\r\n      return CALC ? CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' : slideCountNew * 100 / itemsTem + '%';\r\n    }\r\n  }\r\n\r\n  function getSlideWidthStyle(fixedWidthTem, gutterTem, itemsTem) {\r\n    var width;\r\n\r\n    if (fixedWidthTem) {\r\n      width = fixedWidthTem + gutterTem + 'px';\r\n    } else {\r\n      if (!carousel) {\r\n        itemsTem = Math.floor(itemsTem);\r\n      }\r\n\r\n      var dividend = carousel ? slideCountNew : itemsTem;\r\n      width = CALC ? CALC + '(100% / ' + dividend + ')' : 100 / dividend + '%';\r\n    }\r\n\r\n    width = 'width:' + width; // inner slider: overwrite outer slider styles\r\n\r\n    return nested !== 'inner' ? width + ';' : width + ' !important;';\r\n  }\r\n\r\n  function getSlideGutterStyle(gutterTem) {\r\n    var str = ''; // gutter maybe interger || 0\r\n    // so can't use 'if (gutter)'\r\n\r\n    if (gutterTem !== false) {\r\n      var prop = horizontal ? 'padding-' : 'margin-',\r\n          dir = horizontal ? 'right' : 'bottom';\r\n      str = prop + dir + ': ' + gutterTem + 'px;';\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  function getCSSPrefix(name, num) {\r\n    var prefix = name.substring(0, name.length - num).toLowerCase();\r\n\r\n    if (prefix) {\r\n      prefix = '-' + prefix + '-';\r\n    }\r\n\r\n    return prefix;\r\n  }\r\n\r\n  function getTransitionDurationStyle(speed) {\r\n    return getCSSPrefix(TRANSITIONDURATION, 18) + 'transition-duration:' + speed / 1000 + 's;';\r\n  }\r\n\r\n  function getAnimationDurationStyle(speed) {\r\n    return getCSSPrefix(ANIMATIONDURATION, 17) + 'animation-duration:' + speed / 1000 + 's;';\r\n  }\r\n\r\n  function initStructure() {\r\n    var classOuter = 'tns-outer',\r\n        classInner = 'tns-inner';\r\n        hasOption('gutter');\r\n    outerWrapper.className = classOuter;\r\n    innerWrapper.className = classInner;\r\n    outerWrapper.id = slideId + '-ow';\r\n    innerWrapper.id = slideId + '-iw'; // set container properties\r\n\r\n    if (container.id === '') {\r\n      container.id = slideId;\r\n    }\r\n\r\n    newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\r\n    newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\r\n\r\n    if (autoWidth) {\r\n      newContainerClasses += ' tns-autowidth';\r\n    }\r\n\r\n    newContainerClasses += ' tns-' + options.axis;\r\n    container.className += newContainerClasses; // add constrain layer for carousel\r\n\r\n    if (carousel) {\r\n      middleWrapper = doc.createElement('div');\r\n      middleWrapper.id = slideId + '-mw';\r\n      middleWrapper.className = 'tns-ovh';\r\n      outerWrapper.appendChild(middleWrapper);\r\n      middleWrapper.appendChild(innerWrapper);\r\n    } else {\r\n      outerWrapper.appendChild(innerWrapper);\r\n    }\r\n\r\n    if (autoHeight) {\r\n      var wp = middleWrapper ? middleWrapper : innerWrapper;\r\n      wp.className += ' tns-ah';\r\n    }\r\n\r\n    containerParent.insertBefore(outerWrapper, container);\r\n    innerWrapper.appendChild(container); // add id, class, aria attributes\r\n    // before clone slides\r\n\r\n    forEach(slideItems, function (item, i) {\r\n      addClass(item, 'tns-item');\r\n\r\n      if (!item.id) {\r\n        item.id = slideId + '-item' + i;\r\n      }\r\n\r\n      if (!carousel && animateNormal) {\r\n        addClass(item, animateNormal);\r\n      }\r\n\r\n      setAttrs(item, {\r\n        'aria-hidden': 'true',\r\n        'tabindex': '-1'\r\n      });\r\n    }); // ## clone slides\r\n    // carousel: n + slides + n\r\n    // gallery:      slides + n\r\n\r\n    if (cloneCount) {\r\n      var fragmentBefore = doc.createDocumentFragment(),\r\n          fragmentAfter = doc.createDocumentFragment();\r\n\r\n      for (var j = cloneCount; j--;) {\r\n        var num = j % slideCount,\r\n            cloneFirst = slideItems[num].cloneNode(true);\r\n        addClass(cloneFirst, slideClonedClass);\r\n        removeAttrs(cloneFirst, 'id');\r\n        fragmentAfter.insertBefore(cloneFirst, fragmentAfter.firstChild);\r\n\r\n        if (carousel) {\r\n          var cloneLast = slideItems[slideCount - 1 - num].cloneNode(true);\r\n          addClass(cloneLast, slideClonedClass);\r\n          removeAttrs(cloneLast, 'id');\r\n          fragmentBefore.appendChild(cloneLast);\r\n        }\r\n      }\r\n\r\n      container.insertBefore(fragmentBefore, container.firstChild);\r\n      container.appendChild(fragmentAfter);\r\n      slideItems = Array.from(container.children).filter(node => node.tagName.toLowerCase() !== 'script');\r\n    }\r\n  }\r\n\r\n  function initSliderTransform() {\r\n    // ## images loaded/failed\r\n    if (hasOption('autoHeight') || autoWidth || !horizontal) {\r\n      var imgs = container.querySelectorAll('img'); // add img load event listener\r\n\r\n      forEach(imgs, function (img) {\r\n        var src = img.src;\r\n\r\n        if (!lazyload) {\r\n          // not data img\r\n          if (src && src.indexOf('data:image') < 0) {\r\n            img.src = '';\r\n            addEvents(img, imgEvents);\r\n            addClass(img, 'loading');\r\n            img.src = src; // data img\r\n          } else {\r\n            imgLoaded(img);\r\n          }\r\n        }\r\n      }); // set imgsComplete\r\n\r\n      raf(function () {\r\n        imgsLoadedCheck(arrayFromNodeList(imgs), function () {\r\n          imgsComplete = true;\r\n        });\r\n      }); // reset imgs for auto height: check visible imgs only\r\n\r\n      if (hasOption('autoHeight')) {\r\n        imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1));\r\n      }\r\n\r\n      lazyload ? initSliderTransformStyleCheck() : raf(function () {\r\n        imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck);\r\n      });\r\n    } else {\r\n      // set container transform property\r\n      if (carousel) {\r\n        doContainerTransformSilent();\r\n      } // update slider tools and events\r\n\r\n\r\n      initTools();\r\n      initEvents();\r\n    }\r\n  }\r\n\r\n  function initSliderTransformStyleCheck() {\r\n    if (autoWidth && slideCount > 1) {\r\n      // check styles application\r\n      var num = loop ? index : slideCount - 1;\r\n\r\n      (function stylesApplicationCheck() {\r\n        var left = slideItems[num].getBoundingClientRect().left;\r\n        var right = slideItems[num - 1].getBoundingClientRect().right;\r\n        Math.abs(left - right) <= 1 ? initSliderTransformCore() : setTimeout(function () {\r\n          stylesApplicationCheck();\r\n        }, 16);\r\n      })();\r\n    } else {\r\n      initSliderTransformCore();\r\n    }\r\n  }\r\n\r\n  function initSliderTransformCore() {\r\n    // run Fn()s which are rely on image loading\r\n    if (!horizontal || autoWidth) {\r\n      setSlidePositions();\r\n\r\n      if (autoWidth) {\r\n        rightBoundary = getRightBoundary();\r\n\r\n        if (freezable) {\r\n          freeze = getFreeze();\r\n        }\r\n\r\n        indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\r\n\r\n        resetVariblesWhenDisable(disable || freeze);\r\n      } else {\r\n        updateContentWrapperHeight();\r\n      }\r\n    } // set container transform property\r\n\r\n\r\n    if (carousel) {\r\n      doContainerTransformSilent();\r\n    } // update slider tools and events\r\n\r\n\r\n    initTools();\r\n    initEvents();\r\n  }\r\n\r\n  function initSheet() {\r\n    // gallery:\r\n    // set animation classes and left value for gallery slider\r\n    if (!carousel) {\r\n      for (var i = index, l = index + Math.min(slideCount, items); i < l; i++) {\r\n        var item = slideItems[i];\r\n        item.style.left = (i - index) * 100 / items + '%';\r\n        addClass(item, animateIn);\r\n        removeClass(item, animateNormal);\r\n      }\r\n    } // #### LAYOUT\r\n    // ## INLINE-BLOCK VS FLOAT\r\n    // ## PercentageLayout:\r\n    // slides: inline-block\r\n    // remove blank space between slides by set font-size: 0\r\n    // ## Non PercentageLayout:\r\n    // slides: float\r\n    //         margin-right: -100%\r\n    //         margin-left: ~\r\n    // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\r\n\r\n\r\n    if (horizontal) {\r\n      if (PERCENTAGELAYOUT || autoWidth) {\r\n        addCSSRule(sheet, '#' + slideId + ' > .tns-item', 'font-size:' + win.getComputedStyle(slideItems[0]).fontSize + ';', getCssRulesLength(sheet));\r\n        addCSSRule(sheet, '#' + slideId, 'font-size:0;', getCssRulesLength(sheet));\r\n      } else if (carousel) {\r\n        forEach(slideItems, function (slide, i) {\r\n          slide.style.marginLeft = getSlideMarginLeft(i);\r\n        });\r\n      }\r\n    } // ## BASIC STYLES\r\n\r\n\r\n    if (CSSMQ) {\r\n      // middle wrapper style\r\n      if (TRANSITIONDURATION) {\r\n        var str = middleWrapper && options.autoHeight ? getTransitionDurationStyle(options.speed) : '';\r\n        addCSSRule(sheet, '#' + slideId + '-mw', str, getCssRulesLength(sheet));\r\n      } // inner wrapper styles\r\n\r\n\r\n      str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\r\n      addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet)); // container styles\r\n\r\n      if (carousel) {\r\n        str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\r\n\r\n        if (TRANSITIONDURATION) {\r\n          str += getTransitionDurationStyle(speed);\r\n        }\r\n\r\n        addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\r\n      } // slide styles\r\n\r\n\r\n      str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\r\n\r\n      if (options.gutter) {\r\n        str += getSlideGutterStyle(options.gutter);\r\n      } // set gallery items transition-duration\r\n\r\n\r\n      if (!carousel) {\r\n        if (TRANSITIONDURATION) {\r\n          str += getTransitionDurationStyle(speed);\r\n        }\r\n\r\n        if (ANIMATIONDURATION) {\r\n          str += getAnimationDurationStyle(speed);\r\n        }\r\n      }\r\n\r\n      if (str) {\r\n        addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\r\n      } // non CSS mediaqueries: IE8\r\n      // ## update inner wrapper, container, slides if needed\r\n      // set inline styles for inner wrapper & container\r\n      // insert stylesheet (one line) for slides only (since slides are many)\r\n\r\n    } else {\r\n      // middle wrapper styles\r\n      update_carousel_transition_duration(); // inner wrapper styles\r\n\r\n      innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight); // container styles\r\n\r\n      if (carousel && horizontal && !autoWidth) {\r\n        container.style.width = getContainerWidth(fixedWidth, gutter, items);\r\n      } // slide styles\r\n\r\n\r\n      var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\r\n\r\n      if (gutter) {\r\n        str += getSlideGutterStyle(gutter);\r\n      } // append to the last line\r\n\r\n\r\n      if (str) {\r\n        addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\r\n      }\r\n    } // ## MEDIAQUERIES\r\n\r\n\r\n    if (responsive && CSSMQ) {\r\n      for (var bp in responsive) {\r\n        // bp: convert string to number\r\n        bp = parseInt(bp);\r\n        var opts = responsive[bp],\r\n            str = '',\r\n            middleWrapperStr = '',\r\n            innerWrapperStr = '',\r\n            containerStr = '',\r\n            slideStr = '',\r\n            itemsBP = !autoWidth ? getOption('items', bp) : null,\r\n            fixedWidthBP = getOption('fixedWidth', bp),\r\n            speedBP = getOption('speed', bp),\r\n            edgePaddingBP = getOption('edgePadding', bp),\r\n            autoHeightBP = getOption('autoHeight', bp),\r\n            gutterBP = getOption('gutter', bp); // middle wrapper string\r\n\r\n        if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\r\n          middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\r\n        } // inner wrapper string\r\n\r\n\r\n        if ('edgePadding' in opts || 'gutter' in opts) {\r\n          innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\r\n        } // container string\r\n\r\n\r\n        if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || fixedWidth && 'gutter' in opts)) {\r\n          containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\r\n        }\r\n\r\n        if (TRANSITIONDURATION && 'speed' in opts) {\r\n          containerStr += getTransitionDurationStyle(speedBP);\r\n        }\r\n\r\n        if (containerStr) {\r\n          containerStr = '#' + slideId + '{' + containerStr + '}';\r\n        } // slide string\r\n\r\n\r\n        if ('fixedWidth' in opts || fixedWidth && 'gutter' in opts || !carousel && 'items' in opts) {\r\n          slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\r\n        }\r\n\r\n        if ('gutter' in opts) {\r\n          slideStr += getSlideGutterStyle(gutterBP);\r\n        } // set gallery items transition-duration\r\n\r\n\r\n        if (!carousel && 'speed' in opts) {\r\n          if (TRANSITIONDURATION) {\r\n            slideStr += getTransitionDurationStyle(speedBP);\r\n          }\r\n\r\n          if (ANIMATIONDURATION) {\r\n            slideStr += getAnimationDurationStyle(speedBP);\r\n          }\r\n        }\r\n\r\n        if (slideStr) {\r\n          slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}';\r\n        } // add up\r\n\r\n\r\n        str = middleWrapperStr + innerWrapperStr + containerStr + slideStr;\r\n\r\n        if (str) {\r\n          sheet.insertRule('@media (min-width: ' + bp / 16 + 'em) {' + str + '}', sheet.cssRules.length);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  function initTools() {\r\n    // == slides ==\r\n    updateSlideStatus(); // == live region ==\r\n\r\n    outerWrapper.insertAdjacentHTML('afterbegin', '<div class=\"tns-liveregion tns-visually-hidden\" aria-live=\"polite\" aria-atomic=\"true\">slide <span class=\"current\">' + getLiveRegionStr() + '</span>  of ' + slideCount + '</div>');\r\n    liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current'); // == autoplayInit ==\r\n\r\n    if (hasAutoplay) {\r\n      var txt = autoplay ? 'stop' : 'start';\r\n\r\n      if (autoplayButton) {\r\n        setAttrs(autoplayButton, {\r\n          'data-action': txt\r\n        });\r\n      } else if (options.autoplayButtonOutput) {\r\n        outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '<button type=\"button\" data-action=\"' + txt + '\">' + autoplayHtmlStrings[0] + txt + autoplayHtmlStrings[1] + autoplayText[0] + '</button>');\r\n        autoplayButton = outerWrapper.querySelector('[data-action]');\r\n      } // add event\r\n\r\n\r\n      if (autoplayButton) {\r\n        addEvents(autoplayButton, {\r\n          'click': toggleAutoplay\r\n        });\r\n      }\r\n\r\n      if (autoplay) {\r\n        startAutoplay();\r\n\r\n        if (autoplayHoverPause) {\r\n          addEvents(container, hoverEvents);\r\n        }\r\n\r\n        if (autoplayResetOnVisibility) {\r\n          addEvents(container, visibilityEvent);\r\n        }\r\n      }\r\n    } // == navInit ==\r\n\r\n\r\n    if (hasNav) {\r\n      // will not hide the navs in case they're thumbnails\r\n\r\n      if (navContainer) {\r\n        setAttrs(navContainer, {\r\n          'aria-label': 'Carousel Pagination'\r\n        });\r\n        navItems = navContainer.children;\r\n        forEach(navItems, function (item, i) {\r\n          setAttrs(item, {\r\n            'data-nav': i,\r\n            'tabindex': '-1',\r\n            'aria-label': navStr + (i + 1),\r\n            'aria-controls': slideId\r\n          });\r\n        }); // generated nav\r\n      } else {\r\n        var navHtml = '',\r\n            hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\r\n\r\n        for (var i = 0; i < slideCount; i++) {\r\n          // hide nav items by default\r\n          navHtml += '<button type=\"button\" data-nav=\"' + i + '\" tabindex=\"-1\" aria-controls=\"' + slideId + '\" ' + hiddenStr + ' aria-label=\"' + navStr + (i + 1) + '\"></button>';\r\n        }\r\n\r\n        navHtml = '<div class=\"tns-nav\" aria-label=\"Carousel Pagination\">' + navHtml + '</div>';\r\n        outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\r\n        navContainer = outerWrapper.querySelector('.tns-nav');\r\n        navItems = navContainer.children;\r\n      }\r\n\r\n      updateNavVisibility(); // add transition\r\n\r\n      if (TRANSITIONDURATION) {\r\n        var prefix = TRANSITIONDURATION.substring(0, TRANSITIONDURATION.length - 18).toLowerCase(),\r\n            str = 'transition: all ' + speed / 1000 + 's';\r\n\r\n        if (prefix) {\r\n          str = '-' + prefix + '-' + str;\r\n        }\r\n\r\n        addCSSRule(sheet, '[aria-controls^=' + slideId + '-item]', str, getCssRulesLength(sheet));\r\n      }\r\n\r\n      setAttrs(navItems[navCurrentIndex], {\r\n        'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent\r\n      });\r\n      removeAttrs(navItems[navCurrentIndex], 'tabindex');\r\n      addClass(navItems[navCurrentIndex], navActiveClass); // add events\r\n\r\n      addEvents(navContainer, navEvents);\r\n    } // == controlsInit ==\r\n\r\n\r\n    if (hasControls) {\r\n      if (!controlsContainer && (!prevButton || !nextButton)) {\r\n        outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '<div class=\"tns-controls\" aria-label=\"Carousel Navigation\" tabindex=\"0\"><button type=\"button\" data-controls=\"prev\" tabindex=\"-1\" aria-controls=\"' + slideId + '\">' + controlsText[0] + '</button><button type=\"button\" data-controls=\"next\" tabindex=\"-1\" aria-controls=\"' + slideId + '\">' + controlsText[1] + '</button></div>');\r\n        controlsContainer = outerWrapper.querySelector('.tns-controls');\r\n      }\r\n\r\n      if (!prevButton || !nextButton) {\r\n        prevButton = controlsContainer.children[0];\r\n        nextButton = controlsContainer.children[1];\r\n      }\r\n\r\n      if (options.controlsContainer) {\r\n        setAttrs(controlsContainer, {\r\n          'aria-label': 'Carousel Navigation',\r\n          'tabindex': '0'\r\n        });\r\n      }\r\n\r\n      if (options.controlsContainer || options.prevButton && options.nextButton) {\r\n        setAttrs([prevButton, nextButton], {\r\n          'aria-controls': slideId,\r\n          'tabindex': '-1'\r\n        });\r\n      }\r\n\r\n      if (options.controlsContainer || options.prevButton && options.nextButton) {\r\n        setAttrs(prevButton, {\r\n          'data-controls': 'prev'\r\n        });\r\n        setAttrs(nextButton, {\r\n          'data-controls': 'next'\r\n        });\r\n      }\r\n\r\n      prevIsButton = isButton(prevButton);\r\n      nextIsButton = isButton(nextButton);\r\n      updateControlsStatus(); // add events\r\n\r\n      if (controlsContainer) {\r\n        addEvents(controlsContainer, controlsEvents);\r\n      } else {\r\n        addEvents(prevButton, controlsEvents);\r\n        addEvents(nextButton, controlsEvents);\r\n      }\r\n    } // hide tools if needed\r\n\r\n\r\n    disableUI();\r\n  }\r\n\r\n  function initEvents() {\r\n    // add events\r\n    if (carousel && TRANSITIONEND) {\r\n      var eve = {};\r\n      eve[TRANSITIONEND] = onTransitionEnd;\r\n      addEvents(container, eve);\r\n    }\r\n\r\n    if (touch) {\r\n      addEvents(container, touchEvents, options.preventScrollOnTouch);\r\n    }\r\n\r\n    if (mouseDrag) {\r\n      addEvents(container, dragEvents);\r\n    }\r\n\r\n    if (arrowKeys) {\r\n      addEvents(doc, docmentKeydownEvent);\r\n    }\r\n\r\n    if (nested === 'inner') {\r\n      events.on('outerResized', function () {\r\n        resizeTasks();\r\n        events.emit('innerLoaded', info());\r\n      });\r\n    } else if (responsive || fixedWidth || autoWidth || autoHeight || !horizontal) {\r\n      addEvents(win, {\r\n        'resize': onResize\r\n      });\r\n    }\r\n\r\n    if (autoHeight) {\r\n      if (nested === 'outer') {\r\n        events.on('innerLoaded', doAutoHeight);\r\n      } else if (!disable) {\r\n        doAutoHeight();\r\n      }\r\n    }\r\n\r\n    doLazyLoad();\r\n\r\n    if (disable) {\r\n      disableSlider();\r\n    } else if (freeze) {\r\n      freezeSlider();\r\n    }\r\n\r\n    events.on('indexChanged', additionalUpdates);\r\n\r\n    if (nested === 'inner') {\r\n      events.emit('innerLoaded', info());\r\n    }\r\n\r\n    if (typeof onInit === 'function') {\r\n      onInit(info());\r\n    }\r\n\r\n    isOn = true;\r\n  }\r\n\r\n  function destroy() {\r\n    // sheet\r\n    sheet.disabled = true;\r\n\r\n    if (sheet.ownerNode) {\r\n      sheet.ownerNode.remove();\r\n    } // remove win event listeners\r\n\r\n\r\n    removeEvents(win, {\r\n      'resize': onResize\r\n    }); // arrowKeys, controls, nav\r\n\r\n    if (arrowKeys) {\r\n      removeEvents(doc, docmentKeydownEvent);\r\n    }\r\n\r\n    if (controlsContainer) {\r\n      removeEvents(controlsContainer, controlsEvents);\r\n    }\r\n\r\n    if (navContainer) {\r\n      removeEvents(navContainer, navEvents);\r\n    } // autoplay\r\n\r\n\r\n    removeEvents(container, hoverEvents);\r\n    removeEvents(container, visibilityEvent);\r\n\r\n    if (autoplayButton) {\r\n      removeEvents(autoplayButton, {\r\n        'click': toggleAutoplay\r\n      });\r\n    }\r\n\r\n    if (autoplay) {\r\n      clearInterval(autoplayTimer);\r\n    } // container\r\n\r\n\r\n    if (carousel && TRANSITIONEND) {\r\n      var eve = {};\r\n      eve[TRANSITIONEND] = onTransitionEnd;\r\n      removeEvents(container, eve);\r\n    }\r\n\r\n    if (touch) {\r\n      removeEvents(container, touchEvents);\r\n    }\r\n\r\n    if (mouseDrag) {\r\n      removeEvents(container, dragEvents);\r\n    } // cache Object values in options && reset HTML\r\n\r\n\r\n    var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\r\n    tnsList.forEach(function (item, i) {\r\n      var el = item === 'container' ? outerWrapper : options[item];\r\n\r\n      if (typeof el === 'object' && el) {\r\n        var prevEl = el.previousElementSibling ? el.previousElementSibling : false,\r\n            parentEl = el.parentNode;\r\n        el.outerHTML = htmlList[i];\r\n        options[item] = prevEl ? prevEl.nextElementSibling : parentEl.firstElementChild;\r\n      }\r\n    }); // reset variables\r\n\r\n    tnsList = animateIn = animateOut = animateDelay = animateNormal = horizontal = outerWrapper = innerWrapper = container = containerParent = containerHTML = slideItems = slideCount = breakpointZone = windowWidth = autoWidth = fixedWidth = edgePadding = gutter = viewport = items = slideBy = viewportMax = arrowKeys = speed = rewind = loop = autoHeight = sheet = lazyload = slidePositions = slideItemsOut = cloneCount = slideCountNew = hasRightDeadZone = rightBoundary = updateIndexBeforeTransform = transformAttr = transformPrefix = transformPostfix = getIndexMax = index = indexCached = indexMin = indexMax = swipeAngle = moveDirectionExpected = running = onInit = events = newContainerClasses = slideId = disable = disabled = freezable = freeze = frozen = controlsEvents = navEvents = hoverEvents = visibilityEvent = docmentKeydownEvent = touchEvents = dragEvents = hasControls = hasNav = navAsThumbnails = hasAutoplay = hasTouch = hasMouseDrag = slideActiveClass = imgCompleteClass = imgEvents = imgsComplete = controls = controlsText = controlsContainer = controlsContainerHTML = prevButton = nextButton = prevIsButton = nextIsButton = nav = navContainer = navContainerHTML = navItems = pages = pagesCached = navClicked = navCurrentIndex = navCurrentIndexCached = navActiveClass = navStr = navStrCurrent = autoplay = autoplayTimeout = autoplayDirection = autoplayText = autoplayHoverPause = autoplayButton = autoplayButtonHTML = autoplayResetOnVisibility = autoplayHtmlStrings = autoplayTimer = animating = autoplayHoverPaused = autoplayUserPaused = autoplayVisibilityPaused = initPosition = lastPosition = translateInit = panStart = rafIndex = getDist = touch = mouseDrag = null; // check variables\r\n    // [animateIn, animateOut, animateDelay, animateNormal, horizontal, outerWrapper, innerWrapper, container, containerParent, containerHTML, slideItems, slideCount, breakpointZone, windowWidth, autoWidth, fixedWidth, edgePadding, gutter, viewport, items, slideBy, viewportMax, arrowKeys, speed, rewind, loop, autoHeight, sheet, lazyload, slidePositions, slideItemsOut, cloneCount, slideCountNew, hasRightDeadZone, rightBoundary, updateIndexBeforeTransform, transformAttr, transformPrefix, transformPostfix, getIndexMax, index, indexCached, indexMin, indexMax, resizeTimer, swipeAngle, moveDirectionExpected, running, onInit, events, newContainerClasses, slideId, disable, disabled, freezable, freeze, frozen, controlsEvents, navEvents, hoverEvents, visibilityEvent, docmentKeydownEvent, touchEvents, dragEvents, hasControls, hasNav, navAsThumbnails, hasAutoplay, hasTouch, hasMouseDrag, slideActiveClass, imgCompleteClass, imgEvents, imgsComplete, controls, controlsText, controlsContainer, controlsContainerHTML, prevButton, nextButton, prevIsButton, nextIsButton, nav, navContainer, navContainerHTML, navItems, pages, pagesCached, navClicked, navCurrentIndex, navCurrentIndexCached, navActiveClass, navStr, navStrCurrent, autoplay, autoplayTimeout, autoplayDirection, autoplayText, autoplayHoverPause, autoplayButton, autoplayButtonHTML, autoplayResetOnVisibility, autoplayHtmlStrings, autoplayTimer, animating, autoplayHoverPaused, autoplayUserPaused, autoplayVisibilityPaused, initPosition, lastPosition, translateInit, disX, disY, panStart, rafIndex, getDist, touch, mouseDrag ].forEach(function(item) { if (item !== null) { console.log(item); } });\r\n\r\n    for (var a in this) {\r\n      if (a !== 'rebuild') {\r\n        this[a] = null;\r\n      }\r\n    }\r\n\r\n    isOn = false;\r\n  } // === ON RESIZE ===\r\n  // responsive || fixedWidth || autoWidth || !horizontal\r\n\r\n\r\n  function onResize(e) {\r\n    raf(function () {\r\n      resizeTasks(getEvent(e));\r\n    });\r\n  }\r\n\r\n  function resizeTasks(e) {\r\n    if (!isOn) {\r\n      return;\r\n    }\r\n\r\n    if (nested === 'outer') {\r\n      events.emit('outerResized', info(e));\r\n    }\r\n\r\n    windowWidth = getWindowWidth();\r\n    var bpChanged,\r\n        breakpointZoneTem = breakpointZone,\r\n        needContainerTransform = false;\r\n\r\n    if (responsive) {\r\n      setBreakpointZone();\r\n      bpChanged = breakpointZoneTem !== breakpointZone; // if (hasRightDeadZone) { needContainerTransform = true; } // *?\r\n\r\n      if (bpChanged) {\r\n        events.emit('newBreakpointStart', info(e));\r\n      }\r\n    }\r\n\r\n    var indChanged,\r\n        itemsChanged,\r\n        itemsTem = items,\r\n        disableTem = disable,\r\n        freezeTem = freeze,\r\n        arrowKeysTem = arrowKeys,\r\n        controlsTem = controls,\r\n        navTem = nav,\r\n        touchTem = touch,\r\n        mouseDragTem = mouseDrag,\r\n        autoplayTem = autoplay,\r\n        autoplayHoverPauseTem = autoplayHoverPause,\r\n        autoplayResetOnVisibilityTem = autoplayResetOnVisibility,\r\n        indexTem = index;\r\n\r\n    if (bpChanged) {\r\n      var fixedWidthTem = fixedWidth,\r\n          autoHeightTem = autoHeight,\r\n          controlsTextTem = controlsText,\r\n          centerTem = center,\r\n          autoplayTextTem = autoplayText;\r\n\r\n      if (!CSSMQ) {\r\n        var gutterTem = gutter,\r\n            edgePaddingTem = edgePadding;\r\n      }\r\n    } // get option:\r\n    // fixed width: viewport, fixedWidth, gutter => items\r\n    // others: window width => all variables\r\n    // all: items => slideBy\r\n\r\n\r\n    arrowKeys = getOption('arrowKeys');\r\n    controls = getOption('controls');\r\n    nav = getOption('nav');\r\n    touch = getOption('touch');\r\n    center = getOption('center');\r\n    mouseDrag = getOption('mouseDrag');\r\n    autoplay = getOption('autoplay');\r\n    autoplayHoverPause = getOption('autoplayHoverPause');\r\n    autoplayResetOnVisibility = getOption('autoplayResetOnVisibility');\r\n\r\n    if (bpChanged) {\r\n      disable = getOption('disable');\r\n      fixedWidth = getOption('fixedWidth');\r\n      speed = getOption('speed');\r\n      autoHeight = getOption('autoHeight');\r\n      controlsText = getOption('controlsText');\r\n      autoplayText = getOption('autoplayText');\r\n      autoplayTimeout = getOption('autoplayTimeout');\r\n\r\n      if (!CSSMQ) {\r\n        edgePadding = getOption('edgePadding');\r\n        gutter = getOption('gutter');\r\n      }\r\n    } // update options\r\n\r\n\r\n    resetVariblesWhenDisable(disable);\r\n    viewport = getViewportWidth(); // <= edgePadding, gutter\r\n\r\n    if ((!horizontal || autoWidth) && !disable) {\r\n      setSlidePositions();\r\n\r\n      if (!horizontal) {\r\n        updateContentWrapperHeight(); // <= setSlidePositions\r\n\r\n        needContainerTransform = true;\r\n      }\r\n    }\r\n\r\n    if (fixedWidth || autoWidth) {\r\n      rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\r\n      // fixedWidth: <= viewport, fixedWidth, gutter\r\n\r\n      indexMax = getIndexMax(); // autoWidth: <= rightBoundary, slidePositions\r\n      // fixedWidth: <= rightBoundary, fixedWidth, gutter\r\n    }\r\n\r\n    if (bpChanged || fixedWidth) {\r\n      items = getOption('items');\r\n      slideBy = getOption('slideBy');\r\n      itemsChanged = items !== itemsTem;\r\n\r\n      if (itemsChanged) {\r\n        if (!fixedWidth && !autoWidth) {\r\n          indexMax = getIndexMax();\r\n        } // <= items\r\n        // check index before transform in case\r\n        // slider reach the right edge then items become bigger\r\n\r\n\r\n        updateIndex();\r\n      }\r\n    }\r\n\r\n    if (bpChanged) {\r\n      if (disable !== disableTem) {\r\n        if (disable) {\r\n          disableSlider();\r\n        } else {\r\n          enableSlider(); // <= slidePositions, rightBoundary, indexMax\r\n        }\r\n      }\r\n    }\r\n\r\n    if (freezable && (bpChanged || fixedWidth || autoWidth)) {\r\n      freeze = getFreeze(); // <= autoWidth: slidePositions, gutter, viewport, rightBoundary\r\n      // <= fixedWidth: fixedWidth, gutter, rightBoundary\r\n      // <= others: items\r\n\r\n      if (freeze !== freezeTem) {\r\n        if (freeze) {\r\n          doContainerTransform(getContainerTransformValue(getStartIndex(0)));\r\n          freezeSlider();\r\n        } else {\r\n          unfreezeSlider();\r\n          needContainerTransform = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    resetVariblesWhenDisable(disable || freeze); // controls, nav, touch, mouseDrag, arrowKeys, autoplay, autoplayHoverPause, autoplayResetOnVisibility\r\n\r\n    if (!autoplay) {\r\n      autoplayHoverPause = autoplayResetOnVisibility = false;\r\n    }\r\n\r\n    if (arrowKeys !== arrowKeysTem) {\r\n      arrowKeys ? addEvents(doc, docmentKeydownEvent) : removeEvents(doc, docmentKeydownEvent);\r\n    }\r\n\r\n    if (controls !== controlsTem) {\r\n      if (controls) {\r\n        if (controlsContainer) {\r\n          showElement(controlsContainer);\r\n        } else {\r\n          if (prevButton) {\r\n            showElement(prevButton);\r\n          }\r\n\r\n          if (nextButton) {\r\n            showElement(nextButton);\r\n          }\r\n        }\r\n      } else {\r\n        if (controlsContainer) {\r\n          hideElement(controlsContainer);\r\n        } else {\r\n          if (prevButton) {\r\n            hideElement(prevButton);\r\n          }\r\n\r\n          if (nextButton) {\r\n            hideElement(nextButton);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (nav !== navTem) {\r\n      if (nav) {\r\n        showElement(navContainer);\r\n        updateNavVisibility();\r\n      } else {\r\n        hideElement(navContainer);\r\n      }\r\n    }\r\n\r\n    if (touch !== touchTem) {\r\n      touch ? addEvents(container, touchEvents, options.preventScrollOnTouch) : removeEvents(container, touchEvents);\r\n    }\r\n\r\n    if (mouseDrag !== mouseDragTem) {\r\n      mouseDrag ? addEvents(container, dragEvents) : removeEvents(container, dragEvents);\r\n    }\r\n\r\n    if (autoplay !== autoplayTem) {\r\n      if (autoplay) {\r\n        if (autoplayButton) {\r\n          showElement(autoplayButton);\r\n        }\r\n\r\n        if (!animating && !autoplayUserPaused) {\r\n          startAutoplay();\r\n        }\r\n      } else {\r\n        if (autoplayButton) {\r\n          hideElement(autoplayButton);\r\n        }\r\n\r\n        if (animating) {\r\n          stopAutoplay();\r\n        }\r\n      }\r\n    }\r\n\r\n    if (autoplayHoverPause !== autoplayHoverPauseTem) {\r\n      autoplayHoverPause ? addEvents(container, hoverEvents) : removeEvents(container, hoverEvents);\r\n    }\r\n\r\n    if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\r\n      autoplayResetOnVisibility ? addEvents(doc, visibilityEvent) : removeEvents(doc, visibilityEvent);\r\n    }\r\n\r\n    if (bpChanged) {\r\n      if (fixedWidth !== fixedWidthTem || center !== centerTem) {\r\n        needContainerTransform = true;\r\n      }\r\n\r\n      if (autoHeight !== autoHeightTem) {\r\n        if (!autoHeight) {\r\n          innerWrapper.style.height = '';\r\n        }\r\n      }\r\n\r\n      if (controls && controlsText !== controlsTextTem) {\r\n        prevButton.innerHTML = controlsText[0];\r\n        nextButton.innerHTML = controlsText[1];\r\n      }\r\n\r\n      if (autoplayButton && autoplayText !== autoplayTextTem) {\r\n        var i = autoplay ? 1 : 0,\r\n            html = autoplayButton.innerHTML,\r\n            len = html.length - autoplayTextTem[i].length;\r\n\r\n        if (html.substring(len) === autoplayTextTem[i]) {\r\n          autoplayButton.innerHTML = html.substring(0, len) + autoplayText[i];\r\n        }\r\n      }\r\n    } else {\r\n      if (center && (fixedWidth || autoWidth)) {\r\n        needContainerTransform = true;\r\n      }\r\n    }\r\n\r\n    if (itemsChanged || fixedWidth && !autoWidth) {\r\n      pages = getPages();\r\n      updateNavVisibility();\r\n    }\r\n\r\n    indChanged = index !== indexTem;\r\n\r\n    if (indChanged) {\r\n      events.emit('indexChanged', info());\r\n      needContainerTransform = true;\r\n    } else if (itemsChanged) {\r\n      if (!indChanged) {\r\n        additionalUpdates();\r\n      }\r\n    } else if (fixedWidth || autoWidth) {\r\n      doLazyLoad();\r\n      updateSlideStatus();\r\n      updateLiveRegion();\r\n    }\r\n\r\n    if (itemsChanged && !carousel) {\r\n      updateGallerySlidePositions();\r\n    }\r\n\r\n    if (!disable && !freeze) {\r\n      // non-mediaqueries: IE8\r\n      if (bpChanged && !CSSMQ) {\r\n        // middle wrapper styles\r\n        // inner wrapper styles\r\n        if (edgePadding !== edgePaddingTem || gutter !== gutterTem) {\r\n          innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, speed, autoHeight);\r\n        }\r\n\r\n        if (horizontal) {\r\n          // container styles\r\n          if (carousel) {\r\n            container.style.width = getContainerWidth(fixedWidth, gutter, items);\r\n          } // slide styles\r\n\r\n\r\n          var str = getSlideWidthStyle(fixedWidth, gutter, items) + getSlideGutterStyle(gutter); // remove the last line and\r\n          // add new styles\r\n\r\n          removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\r\n          addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\r\n        }\r\n      } // auto height\r\n\r\n\r\n      if (autoHeight) {\r\n        doAutoHeight();\r\n      }\r\n\r\n      if (needContainerTransform) {\r\n        doContainerTransformSilent();\r\n        indexCached = index;\r\n      }\r\n    }\r\n\r\n    if (bpChanged) {\r\n      events.emit('newBreakpointEnd', info(e));\r\n    }\r\n  } // === INITIALIZATION FUNCTIONS === //\r\n\r\n\r\n  function getFreeze() {\r\n    if (!fixedWidth && !autoWidth) {\r\n      var a = center ? items - (items - 1) / 2 : items;\r\n      return slideCount <= a;\r\n    }\r\n\r\n    var width = fixedWidth ? (fixedWidth + gutter) * slideCount : slidePositions[slideCount],\r\n        vp = edgePadding ? viewport + edgePadding * 2 : viewport + gutter;\r\n\r\n    if (center) {\r\n      vp -= fixedWidth ? (viewport - fixedWidth) / 2 : (viewport - (slidePositions[index + 1] - slidePositions[index] - gutter)) / 2;\r\n    }\r\n\r\n    return width <= vp;\r\n  }\r\n\r\n  function setBreakpointZone() {\r\n    breakpointZone = 0;\r\n\r\n    for (var bp in responsive) {\r\n      bp = parseInt(bp); // convert string to number\r\n\r\n      if (windowWidth >= bp) {\r\n        breakpointZone = bp;\r\n      }\r\n    }\r\n  } // (slideBy, indexMin, indexMax) => index\r\n\r\n\r\n  var updateIndex = function () {\r\n    return loop ? carousel ? // loop + carousel\r\n    function () {\r\n      var leftEdge = indexMin,\r\n          rightEdge = indexMax;\r\n      leftEdge += slideBy;\r\n      rightEdge -= slideBy; // adjust edges when has edge paddings\r\n      // or fixed-width slider with extra space on the right side\r\n\r\n      if (edgePadding) {\r\n        leftEdge += 1;\r\n        rightEdge -= 1;\r\n      } else if (fixedWidth) {\r\n        if ((viewport + gutter) % (fixedWidth + gutter)) {\r\n          rightEdge -= 1;\r\n        }\r\n      }\r\n\r\n      if (cloneCount) {\r\n        if (index > rightEdge) {\r\n          index -= slideCount;\r\n        } else if (index < leftEdge) {\r\n          index += slideCount;\r\n        }\r\n      }\r\n    } : // loop + gallery\r\n    function () {\r\n      if (index > indexMax) {\r\n        while (index >= indexMin + slideCount) {\r\n          index -= slideCount;\r\n        }\r\n      } else if (index < indexMin) {\r\n        while (index <= indexMax - slideCount) {\r\n          index += slideCount;\r\n        }\r\n      }\r\n    } : // non-loop\r\n    function () {\r\n      index = Math.max(indexMin, Math.min(indexMax, index));\r\n    };\r\n  }();\r\n\r\n  function disableUI() {\r\n    if (!autoplay && autoplayButton) {\r\n      hideElement(autoplayButton);\r\n    }\r\n\r\n    if (!nav && navContainer) {\r\n      hideElement(navContainer);\r\n    }\r\n\r\n    if (!controls) {\r\n      if (controlsContainer) {\r\n        hideElement(controlsContainer);\r\n      } else {\r\n        if (prevButton) {\r\n          hideElement(prevButton);\r\n        }\r\n\r\n        if (nextButton) {\r\n          hideElement(nextButton);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  function enableUI() {\r\n    if (autoplay && autoplayButton) {\r\n      showElement(autoplayButton);\r\n    }\r\n\r\n    if (nav && navContainer) {\r\n      showElement(navContainer);\r\n    }\r\n\r\n    if (controls) {\r\n      if (controlsContainer) {\r\n        showElement(controlsContainer);\r\n      } else {\r\n        if (prevButton) {\r\n          showElement(prevButton);\r\n        }\r\n\r\n        if (nextButton) {\r\n          showElement(nextButton);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  function freezeSlider() {\r\n    if (frozen) {\r\n      return;\r\n    } // remove edge padding from inner wrapper\r\n\r\n\r\n    if (edgePadding) {\r\n      innerWrapper.style.margin = '0px';\r\n    } // add class tns-transparent to cloned slides\r\n\r\n\r\n    if (cloneCount) {\r\n      var str = 'tns-transparent';\r\n\r\n      for (var i = cloneCount; i--;) {\r\n        if (carousel) {\r\n          addClass(slideItems[i], str);\r\n        }\r\n\r\n        addClass(slideItems[slideCountNew - i - 1], str);\r\n      }\r\n    } // update tools\r\n\r\n\r\n    disableUI();\r\n    frozen = true;\r\n  }\r\n\r\n  function unfreezeSlider() {\r\n    if (!frozen) {\r\n      return;\r\n    } // restore edge padding for inner wrapper\r\n    // for mordern browsers\r\n\r\n\r\n    if (edgePadding && CSSMQ) {\r\n      innerWrapper.style.margin = '';\r\n    } // remove class tns-transparent to cloned slides\r\n\r\n\r\n    if (cloneCount) {\r\n      var str = 'tns-transparent';\r\n\r\n      for (var i = cloneCount; i--;) {\r\n        if (carousel) {\r\n          removeClass(slideItems[i], str);\r\n        }\r\n\r\n        removeClass(slideItems[slideCountNew - i - 1], str);\r\n      }\r\n    } // update tools\r\n\r\n\r\n    enableUI();\r\n    frozen = false;\r\n  }\r\n\r\n  function disableSlider() {\r\n    if (disabled) {\r\n      return;\r\n    }\r\n\r\n    sheet.disabled = true;\r\n    container.className = container.className.replace(newContainerClasses.substring(1), '');\r\n    removeAttrs(container, ['style']);\r\n\r\n    if (loop) {\r\n      for (var j = cloneCount; j--;) {\r\n        if (carousel) {\r\n          hideElement(slideItems[j]);\r\n        }\r\n\r\n        hideElement(slideItems[slideCountNew - j - 1]);\r\n      }\r\n    } // vertical slider\r\n\r\n\r\n    if (!horizontal || !carousel) {\r\n      removeAttrs(innerWrapper, ['style']);\r\n    } // gallery\r\n\r\n\r\n    if (!carousel) {\r\n      for (var i = index, l = index + slideCount; i < l; i++) {\r\n        var item = slideItems[i];\r\n        removeAttrs(item, ['style']);\r\n        removeClass(item, animateIn);\r\n        removeClass(item, animateNormal);\r\n      }\r\n    } // update tools\r\n\r\n\r\n    disableUI();\r\n    disabled = true;\r\n  }\r\n\r\n  function enableSlider() {\r\n    if (!disabled) {\r\n      return;\r\n    }\r\n\r\n    sheet.disabled = false;\r\n    container.className += newContainerClasses;\r\n    doContainerTransformSilent();\r\n\r\n    if (loop) {\r\n      for (var j = cloneCount; j--;) {\r\n        if (carousel) {\r\n          showElement(slideItems[j]);\r\n        }\r\n\r\n        showElement(slideItems[slideCountNew - j - 1]);\r\n      }\r\n    } // gallery\r\n\r\n\r\n    if (!carousel) {\r\n      for (var i = index, l = index + slideCount; i < l; i++) {\r\n        var item = slideItems[i],\r\n            classN = i < index + items ? animateIn : animateNormal;\r\n        item.style.left = (i - index) * 100 / items + '%';\r\n        addClass(item, classN);\r\n      }\r\n    } // update tools\r\n\r\n\r\n    enableUI();\r\n    disabled = false;\r\n  }\r\n\r\n  function updateLiveRegion() {\r\n    var str = getLiveRegionStr();\r\n\r\n    if (liveregionCurrent.innerHTML !== str) {\r\n      liveregionCurrent.innerHTML = str;\r\n    }\r\n  }\r\n\r\n  function getLiveRegionStr() {\r\n    var arr = getVisibleSlideRange(),\r\n        start = arr[0] + 1,\r\n        end = arr[1] + 1;\r\n    return start === end ? start + '' : start + ' to ' + end;\r\n  }\r\n\r\n  function getVisibleSlideRange(val) {\r\n    if (val == null) {\r\n      val = getContainerTransformValue();\r\n    }\r\n\r\n    var start = index,\r\n        end,\r\n        rangestart,\r\n        rangeend; // get range start, range end for autoWidth and fixedWidth\r\n\r\n    if (center || edgePadding) {\r\n      if (autoWidth || fixedWidth) {\r\n        rangestart = -(parseFloat(val) + edgePadding);\r\n        rangeend = rangestart + viewport + edgePadding * 2;\r\n      }\r\n    } else {\r\n      if (autoWidth) {\r\n        rangestart = slidePositions[index];\r\n        rangeend = rangestart + viewport;\r\n      }\r\n    } // get start, end\r\n    // - check auto width\r\n\r\n\r\n    if (autoWidth) {\r\n      slidePositions.forEach(function (point, i) {\r\n        if (i < slideCountNew) {\r\n          if ((center || edgePadding) && point <= rangestart + 0.5) {\r\n            start = i;\r\n          }\r\n\r\n          if (rangeend - point >= 0.5) {\r\n            end = i;\r\n          }\r\n        }\r\n      }); // - check percentage width, fixed width\r\n    } else {\r\n      if (fixedWidth) {\r\n        var cell = fixedWidth + gutter;\r\n\r\n        if (center || edgePadding) {\r\n          start = Math.floor(rangestart / cell);\r\n          end = Math.ceil(rangeend / cell - 1);\r\n        } else {\r\n          end = start + Math.ceil(viewport / cell) - 1;\r\n        }\r\n      } else {\r\n        if (center || edgePadding) {\r\n          var a = items - 1;\r\n\r\n          if (center) {\r\n            start -= a / 2;\r\n            end = index + a / 2;\r\n          } else {\r\n            end = index + a;\r\n          }\r\n\r\n          if (edgePadding) {\r\n            var b = edgePadding * items / viewport;\r\n            start -= b;\r\n            end += b;\r\n          }\r\n\r\n          start = Math.floor(start);\r\n          end = Math.ceil(end);\r\n        } else {\r\n          end = start + items - 1;\r\n        }\r\n      }\r\n\r\n      start = Math.max(start, 0);\r\n      end = Math.min(end, slideCountNew - 1);\r\n    }\r\n\r\n    return [start, end];\r\n  }\r\n\r\n  function doLazyLoad() {\r\n    if (lazyload && !disable) {\r\n      var arg = getVisibleSlideRange();\r\n      arg.push(lazyloadSelector);\r\n      getImageArray.apply(null, arg).forEach(function (img) {\r\n        if (!hasClass(img, imgCompleteClass)) {\r\n          // stop propagation transitionend event to container\r\n          var eve = {};\r\n\r\n          eve[TRANSITIONEND] = function (e) {\r\n            e.stopPropagation();\r\n          };\r\n\r\n          addEvents(img, eve);\r\n          addEvents(img, imgEvents); // update src\r\n\r\n          img.src = getAttr(img, 'data-src'); // update srcset\r\n\r\n          var srcset = getAttr(img, 'data-srcset');\r\n\r\n          if (srcset) {\r\n            img.srcset = srcset;\r\n          }\r\n\r\n          addClass(img, 'loading');\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  function onImgLoaded(e) {\r\n    imgLoaded(getTarget(e));\r\n  }\r\n\r\n  function onImgFailed(e) {\r\n    imgFailed(getTarget(e));\r\n  }\r\n\r\n  function imgLoaded(img) {\r\n    addClass(img, 'loaded');\r\n    imgCompleted(img);\r\n  }\r\n\r\n  function imgFailed(img) {\r\n    addClass(img, 'failed');\r\n    imgCompleted(img);\r\n  }\r\n\r\n  function imgCompleted(img) {\r\n    addClass(img, imgCompleteClass);\r\n    removeClass(img, 'loading');\r\n    removeEvents(img, imgEvents);\r\n  }\r\n\r\n  function getImageArray(start, end, imgSelector) {\r\n    var imgs = [];\r\n\r\n    if (!imgSelector) {\r\n      imgSelector = 'img';\r\n    }\r\n\r\n    while (start <= end) {\r\n      forEach(slideItems[start].querySelectorAll(imgSelector), function (img) {\r\n        imgs.push(img);\r\n      });\r\n      start++;\r\n    }\r\n\r\n    return imgs;\r\n  } // check if all visible images are loaded\r\n  // and update container height if it's done\r\n\r\n\r\n  function doAutoHeight() {\r\n    var imgs = getImageArray.apply(null, getVisibleSlideRange());\r\n    raf(function () {\r\n      imgsLoadedCheck(imgs, updateInnerWrapperHeight);\r\n    });\r\n  }\r\n\r\n  function imgsLoadedCheck(imgs, cb) {\r\n    // execute callback function if all images are complete\r\n    if (imgsComplete) {\r\n      return cb();\r\n    } // check image classes\r\n\r\n\r\n    imgs.forEach(function (img, index) {\r\n      if (!lazyload && img.complete) {\r\n        imgCompleted(img);\r\n      } // Check image.complete\r\n\r\n\r\n      if (hasClass(img, imgCompleteClass)) {\r\n        imgs.splice(index, 1);\r\n      }\r\n    }); // execute callback function if selected images are all complete\r\n\r\n    if (!imgs.length) {\r\n      return cb();\r\n    } // otherwise execute this functiona again\r\n\r\n\r\n    raf(function () {\r\n      imgsLoadedCheck(imgs, cb);\r\n    });\r\n  }\r\n\r\n  function additionalUpdates() {\r\n    doLazyLoad();\r\n    updateSlideStatus();\r\n    updateLiveRegion();\r\n    updateControlsStatus();\r\n    updateNavStatus();\r\n  }\r\n\r\n  function update_carousel_transition_duration() {\r\n    if (carousel && autoHeight) {\r\n      middleWrapper.style[TRANSITIONDURATION] = speed / 1000 + 's';\r\n    }\r\n  }\r\n\r\n  function getMaxSlideHeight(slideStart, slideRange) {\r\n    var heights = [];\r\n\r\n    for (var i = slideStart, l = Math.min(slideStart + slideRange, slideCountNew); i < l; i++) {\r\n      heights.push(slideItems[i].offsetHeight);\r\n    }\r\n\r\n    return Math.max.apply(null, heights);\r\n  } // update inner wrapper height\r\n  // 1. get the max-height of the visible slides\r\n  // 2. set transitionDuration to speed\r\n  // 3. update inner wrapper height to max-height\r\n  // 4. set transitionDuration to 0s after transition done\r\n\r\n\r\n  function updateInnerWrapperHeight() {\r\n    var maxHeight = autoHeight ? getMaxSlideHeight(index, items) : getMaxSlideHeight(cloneCount, slideCount),\r\n        wp = middleWrapper ? middleWrapper : innerWrapper;\r\n\r\n    if (wp.style.height !== maxHeight) {\r\n      wp.style.height = maxHeight + 'px';\r\n    }\r\n  } // get the distance from the top edge of the first slide to each slide\r\n  // (init) => slidePositions\r\n\r\n\r\n  function setSlidePositions() {\r\n    slidePositions = [0];\r\n    var attr = horizontal ? 'left' : 'top',\r\n        attr2 = horizontal ? 'right' : 'bottom',\r\n        base = slideItems[0].getBoundingClientRect()[attr];\r\n    forEach(slideItems, function (item, i) {\r\n      // skip the first slide\r\n      if (i) {\r\n        slidePositions.push(item.getBoundingClientRect()[attr] - base);\r\n      } // add the end edge\r\n\r\n\r\n      if (i === slideCountNew - 1) {\r\n        slidePositions.push(item.getBoundingClientRect()[attr2] - base);\r\n      }\r\n    });\r\n  } // update slide\r\n\r\n\r\n  function updateSlideStatus() {\r\n    var range = getVisibleSlideRange(),\r\n        start = range[0],\r\n        end = range[1];\r\n    forEach(slideItems, function (item, i) {\r\n      // show slides\r\n      if (i >= start && i <= end) {\r\n        if (hasAttr(item, 'aria-hidden')) {\r\n          removeAttrs(item, ['aria-hidden', 'tabindex']);\r\n          addClass(item, slideActiveClass);\r\n        } // hide slides\r\n\r\n      } else {\r\n        if (!hasAttr(item, 'aria-hidden')) {\r\n          setAttrs(item, {\r\n            'aria-hidden': 'true',\r\n            'tabindex': '-1'\r\n          });\r\n          removeClass(item, slideActiveClass);\r\n        }\r\n      }\r\n    });\r\n  } // gallery: update slide position\r\n\r\n\r\n  function updateGallerySlidePositions() {\r\n    var l = index + Math.min(slideCount, items);\r\n\r\n    for (var i = slideCountNew; i--;) {\r\n      var item = slideItems[i];\r\n\r\n      if (i >= index && i < l) {\r\n        // add transitions to visible slides when adjusting their positions\r\n        addClass(item, 'tns-moving');\r\n        item.style.left = (i - index) * 100 / items + '%';\r\n        addClass(item, animateIn);\r\n        removeClass(item, animateNormal);\r\n      } else if (item.style.left) {\r\n        item.style.left = '';\r\n        addClass(item, animateNormal);\r\n        removeClass(item, animateIn);\r\n      } // remove outlet animation\r\n\r\n\r\n      removeClass(item, animateOut);\r\n    } // removing '.tns-moving'\r\n\r\n\r\n    setTimeout(function () {\r\n      forEach(slideItems, function (el) {\r\n        removeClass(el, 'tns-moving');\r\n      });\r\n    }, 300);\r\n  } // set tabindex on Nav\r\n\r\n\r\n  function updateNavStatus() {\r\n    // get current nav\r\n    if (nav) {\r\n      navCurrentIndex = navClicked >= 0 ? navClicked : getCurrentNavIndex();\r\n      navClicked = -1;\r\n\r\n      if (navCurrentIndex !== navCurrentIndexCached) {\r\n        var navPrev = navItems[navCurrentIndexCached],\r\n            navCurrent = navItems[navCurrentIndex];\r\n        setAttrs(navPrev, {\r\n          'tabindex': '-1',\r\n          'aria-label': navStr + (navCurrentIndexCached + 1)\r\n        });\r\n        removeClass(navPrev, navActiveClass);\r\n        setAttrs(navCurrent, {\r\n          'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent\r\n        });\r\n        removeAttrs(navCurrent, 'tabindex');\r\n        addClass(navCurrent, navActiveClass);\r\n        navCurrentIndexCached = navCurrentIndex;\r\n      }\r\n    }\r\n  }\r\n\r\n  function getLowerCaseNodeName(el) {\r\n    return el.nodeName.toLowerCase();\r\n  }\r\n\r\n  function isButton(el) {\r\n    return getLowerCaseNodeName(el) === 'button';\r\n  }\r\n\r\n  function isAriaDisabled(el) {\r\n    return el.getAttribute('aria-disabled') === 'true';\r\n  }\r\n\r\n  function disEnableElement(isButton, el, val) {\r\n    if (isButton) {\r\n      el.disabled = val;\r\n    } else {\r\n      el.setAttribute('aria-disabled', val.toString());\r\n    }\r\n  } // set 'disabled' to true on controls when reach the edges\r\n\r\n\r\n  function updateControlsStatus() {\r\n    if (!controls || rewind || loop) {\r\n      return;\r\n    }\r\n\r\n    var prevDisabled = prevIsButton ? prevButton.disabled : isAriaDisabled(prevButton);\r\n    var nextDisabled = nextIsButton ? nextButton.disabled : isAriaDisabled(nextButton);\r\n    var disablePrev, disableNext; // Declare outside if block\r\n    \r\n    disablePrev = index <= indexMin ? true : false;\r\n    disableNext = !rewind && index >= indexMax ? true : false;\r\n    \r\n    if (disablePrev && !prevDisabled) {\r\n      disEnableElement(prevIsButton, prevButton, true);\r\n    }\r\n\r\n    if (!disablePrev && prevDisabled) {\r\n      disEnableElement(prevIsButton, prevButton, false);\r\n    }\r\n\r\n    if (disableNext && !nextDisabled) {\r\n      disEnableElement(nextIsButton, nextButton, true);\r\n    }\r\n\r\n    if (!disableNext && nextDisabled) {\r\n      disEnableElement(nextIsButton, nextButton, false);\r\n    }\r\n  } // set duration\r\n\r\n\r\n  function resetDuration(el, str) {\r\n    if (TRANSITIONDURATION) {\r\n      el.style[TRANSITIONDURATION] = str;\r\n    }\r\n  }\r\n\r\n  function getSliderWidth() {\r\n    return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\r\n  }\r\n\r\n  function getCenterGap(num) {\r\n    if (num == null) {\r\n      num = index;\r\n    }\r\n\r\n    var gap = edgePadding ? gutter : 0;\r\n    return autoWidth ? (viewport - gap - (slidePositions[num + 1] - slidePositions[num] - gutter)) / 2 : fixedWidth ? (viewport - fixedWidth) / 2 : (items - 1) / 2;\r\n  }\r\n\r\n  function getRightBoundary() {\r\n    var gap = edgePadding ? gutter : 0,\r\n        result = viewport + gap - getSliderWidth();\r\n\r\n    if (center && !loop) {\r\n      result = fixedWidth ? -(fixedWidth + gutter) * (slideCountNew - 1) - getCenterGap() : getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\r\n    }\r\n\r\n    if (result > 0) {\r\n      result = 0;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  function isRTL() {\r\n    return document.documentElement.getAttribute('dir') === 'rtl';\r\n  }\r\n\r\n  function getContainerTransformValue(num) {\r\n    if (num == null) {\r\n      num = index;\r\n    }\r\n\r\n    var val;\r\n\r\n    if (horizontal && !autoWidth) {\r\n      if (fixedWidth) {\r\n        val = -(fixedWidth + gutter) * num;\r\n\r\n        if (center) {\r\n          val += getCenterGap();\r\n        }\r\n      } else {\r\n        var denominator = TRANSFORM ? slideCountNew : items;\r\n\r\n        if (center) {\r\n          num -= getCenterGap();\r\n        }\r\n\r\n        val = -num * 100 / denominator;\r\n      }\r\n    } else {\r\n      val = -slidePositions[num];\r\n\r\n      if (center && autoWidth) {\r\n        val += getCenterGap();\r\n      }\r\n    }\r\n\r\n    if (hasRightDeadZone) {\r\n      val = Math.max(val, rightBoundary);\r\n    }\r\n\r\n    if (isRTL()) {\r\n      val *= -1;\r\n    }\r\n\r\n    val += horizontal && !autoWidth && !fixedWidth ? '%' : 'px';\r\n    return val;\r\n  }\r\n\r\n  function doContainerTransformSilent(val) {\r\n    resetDuration(container, '0s');\r\n    doContainerTransform(val);\r\n  }\r\n\r\n  function doContainerTransform(val) {\r\n    if (val == null) {\r\n      val = getContainerTransformValue();\r\n    }\r\n\r\n    container.style[transformAttr] = transformPrefix + val + transformPostfix;\r\n  }\r\n\r\n  function animateSlide(number, classOut, classIn, isOut) {\r\n    var l = number + items;\r\n\r\n    if (!loop) {\r\n      l = Math.min(l, slideCountNew);\r\n    }\r\n\r\n    for (var i = number; i < l; i++) {\r\n      var item = slideItems[i]; // set item positions\r\n\r\n      if (!isOut) {\r\n        item.style.left = (i - index) * 100 / items + '%';\r\n      }\r\n\r\n      if (animateDelay && TRANSITIONDELAY) {\r\n        item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\r\n      }\r\n\r\n      removeClass(item, classOut);\r\n      addClass(item, classIn);\r\n\r\n      if (isOut) {\r\n        slideItemsOut.push(item);\r\n      }\r\n    }\r\n  } // make transfer after click/drag:\r\n  // 1. change 'transform' property for mordern browsers\r\n  // 2. change 'left' property for legacy browsers\r\n\r\n\r\n  var transformCore = function () {\r\n    return carousel ? function () {\r\n      resetDuration(container, '');\r\n\r\n      if (TRANSITIONDURATION || !speed) {\r\n        // for morden browsers with non-zero duration or\r\n        // zero duration for all browsers\r\n        doContainerTransform(); // run fallback function manually\r\n        // when duration is 0 / container is hidden\r\n\r\n        if (!speed || !isVisible(container)) {\r\n          onTransitionEnd();\r\n        }\r\n      } else {\r\n        // for old browser with non-zero duration\r\n        jsTransform(container, transformAttr, transformPrefix, transformPostfix, getContainerTransformValue(), speed, onTransitionEnd);\r\n      }\r\n\r\n      if (!horizontal) {\r\n        updateContentWrapperHeight();\r\n      }\r\n    } : function () {\r\n      slideItemsOut = [];\r\n      var eve = {};\r\n      eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\r\n      removeEvents(slideItems[indexCached], eve);\r\n      addEvents(slideItems[index], eve);\r\n      animateSlide(indexCached, animateIn, animateOut, true);\r\n      animateSlide(index, animateNormal, animateIn); // run fallback function manually\r\n      // when transition or animation not supported / duration is 0\r\n\r\n      if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) {\r\n        onTransitionEnd();\r\n      }\r\n    };\r\n  }();\r\n\r\n  function render(e, sliderMoved) {\r\n    if (updateIndexBeforeTransform) {\r\n      updateIndex();\r\n    } // render when slider was moved (touch or drag) even though index may not change\r\n\r\n\r\n    if (index !== indexCached || sliderMoved) {\r\n      // events\r\n      events.emit('indexChanged', info());\r\n      events.emit('transitionStart', info());\r\n\r\n      if (autoHeight) {\r\n        doAutoHeight();\r\n      } // pause autoplay when click or keydown from user\r\n\r\n\r\n      if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) {\r\n        stopAutoplay();\r\n      }\r\n\r\n      running = true;\r\n      transformCore();\r\n    }\r\n  }\r\n  /*\r\n   * Transfer prefixed properties to the same format\r\n   * CSS: -Webkit-Transform => webkittransform\r\n   * JS: WebkitTransform => webkittransform\r\n   * @param {string} str - property\r\n   *\r\n   */\r\n\r\n\r\n  function strTrans(str) {\r\n    return str.toLowerCase().replace(/-/g, '');\r\n  } // AFTER TRANSFORM\r\n  // Things need to be done after a transfer:\r\n  // 1. check index\r\n  // 2. add classes to visible slide\r\n  // 3. disable controls buttons when reach the first/last slide in non-loop slider\r\n  // 4. update nav status\r\n  // 5. lazyload images\r\n  // 6. update container height\r\n\r\n\r\n  function onTransitionEnd(event) {\r\n    // check running on gallery mode\r\n    // make sure trantionend/animationend events run only once\r\n    if (carousel || running) {\r\n      events.emit('transitionEnd', info(event));\r\n\r\n      if (!carousel && slideItemsOut.length > 0) {\r\n        for (var i = 0; i < slideItemsOut.length; i++) {\r\n          var item = slideItemsOut[i]; // set item positions\r\n\r\n          item.style.left = '';\r\n\r\n          if (ANIMATIONDELAY && TRANSITIONDELAY) {\r\n            item.style[ANIMATIONDELAY] = '';\r\n            item.style[TRANSITIONDELAY] = '';\r\n          }\r\n\r\n          removeClass(item, animateOut);\r\n          addClass(item, animateNormal);\r\n        }\r\n      }\r\n      /* update slides, nav, controls after checking ...\r\n       * => legacy browsers who don't support 'event'\r\n       *    have to check event first, otherwise event.target will cause an error\r\n       * => or 'gallery' mode:\r\n       *   + event target is slide item\r\n       * => or 'carousel' mode:\r\n       *   + event target is container,\r\n       *   + event.property is the same with transform attribute\r\n       */\r\n\r\n\r\n      if (!event || !carousel && event.target.parentNode === container || event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\r\n        if (!updateIndexBeforeTransform) {\r\n          var indexTem = index;\r\n          updateIndex();\r\n\r\n          if (index !== indexTem) {\r\n            events.emit('indexChanged', info());\r\n            doContainerTransformSilent();\r\n          }\r\n        }\r\n\r\n        if (nested === 'inner') {\r\n          events.emit('innerLoaded', info());\r\n        }\r\n\r\n        running = false;\r\n        indexCached = index;\r\n      }\r\n    }\r\n  } // # ACTIONS\r\n\r\n\r\n  function goTo(targetIndex, e) {\r\n    if (freeze) {\r\n      return;\r\n    } // prev slideBy\r\n\r\n\r\n    if (targetIndex === 'prev') {\r\n      onControlsClick(e, -1); // next slideBy\r\n    } else if (targetIndex === 'next') {\r\n      onControlsClick(e, 1); // go to exact slide\r\n    } else {\r\n      if (running) {\r\n        if (preventActionWhenRunning) {\r\n          return;\r\n        } else {\r\n          onTransitionEnd();\r\n        }\r\n      }\r\n\r\n      var absIndex = getAbsIndex(),\r\n          indexGap = 0;\r\n\r\n      if (targetIndex === 'first') {\r\n        indexGap = -absIndex;\r\n      } else if (targetIndex === 'last') {\r\n        indexGap = carousel ? slideCount - items - absIndex : slideCount - 1 - absIndex;\r\n      } else {\r\n        if (typeof targetIndex !== 'number') {\r\n          targetIndex = parseInt(targetIndex);\r\n        }\r\n\r\n        if (!isNaN(targetIndex)) {\r\n          // from directly called goTo function\r\n          if (!e) {\r\n            targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex));\r\n          }\r\n\r\n          indexGap = targetIndex - absIndex;\r\n        }\r\n      } // gallery: make sure new page won't overlap with current page\r\n\r\n\r\n      if (!carousel && indexGap && Math.abs(indexGap) < items) {\r\n        var factor = indexGap > 0 ? 1 : -1;\r\n        indexGap += index + indexGap - slideCount >= indexMin ? slideCount * factor : slideCount * 2 * factor * -1;\r\n      }\r\n\r\n      index += indexGap; // make sure index is in range\r\n\r\n      if (carousel && loop) {\r\n        if (index < indexMin) {\r\n          index += slideCount;\r\n        }\r\n\r\n        if (index > indexMax) {\r\n          index -= slideCount;\r\n        }\r\n      } // if index is changed, start rendering\r\n\r\n\r\n      if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\r\n        render(e);\r\n      }\r\n    }\r\n  } // on controls click\r\n\r\n\r\n  function onControlsClick(e, dir) {\r\n    if (running) {\r\n      if (preventActionWhenRunning) {\r\n        return;\r\n      } else {\r\n        onTransitionEnd();\r\n      }\r\n    }\r\n\r\n    var passEventObject;\r\n    let rtlDir = dir; // Keep original dir for LTR\r\n\r\n    if (isRTL()) { // Reverse direction in RTL\r\n      rtlDir *= -1;\r\n    }\r\n\r\n    if (!dir) {\r\n      e = getEvent(e);\r\n      var target = getTarget(e);\r\n\r\n      while (target !== controlsContainer && [prevButton, nextButton].indexOf(target) < 0) {\r\n        target = target.parentNode;\r\n      }\r\n\r\n      var targetIn = [prevButton, nextButton].indexOf(target);\r\n\r\n      if (targetIn >= 0) {\r\n        passEventObject = true;\r\n        rtlDir = targetIn === 0 ? -1 : 1; // Still use -1 for prevButton index 0, and 1 for nextButton index 1, but reverse meaning later in render.\r\n      }\r\n    }\r\n\r\n    if (rewind) {\r\n      if (index === indexMin && rtlDir === -1) { // Use rtlDir here\r\n        goTo('last', e);\r\n        return;\r\n      } else if (index === indexMax && rtlDir === 1) { // Use rtlDir here\r\n        goTo('first', e);\r\n        return;\r\n      }\r\n    }\r\n\r\n    if (rtlDir) { // Use rtlDir here\r\n      index += slideBy * rtlDir; // Use rtlDir here\r\n\r\n      if (autoWidth) {\r\n        index = Math.floor(index);\r\n      }\r\n      render(passEventObject || e && e.type === 'keydown' ? e : null);\r\n    }\r\n  } // on nav click\r\n\r\n\r\n  function onNavClick(e) {\r\n    if (running) {\r\n      if (preventActionWhenRunning) {\r\n        return;\r\n      } else {\r\n        onTransitionEnd();\r\n      }\r\n    }\r\n\r\n    e = getEvent(e);\r\n    var target = getTarget(e),\r\n        navIndex; // find the clicked nav item\r\n\r\n    while (target !== navContainer && !hasAttr(target, 'data-nav')) {\r\n      target = target.parentNode;\r\n    }\r\n\r\n    if (hasAttr(target, 'data-nav')) {\r\n      var navIndex = navClicked = Number(getAttr(target, 'data-nav')),\r\n          targetIndexBase = fixedWidth || autoWidth ? navIndex * slideCount / pages : navIndex * items,\r\n          targetIndex = navAsThumbnails ? navIndex : Math.min(Math.ceil(targetIndexBase), slideCount - 1);\r\n      goTo(targetIndex, e);\r\n\r\n      if (navCurrentIndex === navIndex) {\r\n        if (animating) {\r\n          stopAutoplay();\r\n        }\r\n\r\n        navClicked = -1; // reset navClicked\r\n      }\r\n    }\r\n  } // autoplay functions\r\n\r\n\r\n  function setAutoplayTimer() {\r\n    autoplayTimer = setInterval(function () {\r\n      onControlsClick(null, autoplayDirection);\r\n    }, autoplayTimeout);\r\n    animating = true;\r\n  }\r\n\r\n  function stopAutoplayTimer() {\r\n    clearInterval(autoplayTimer);\r\n    animating = false;\r\n  }\r\n\r\n  function updateAutoplayButton(action, txt) {\r\n    setAttrs(autoplayButton, {\r\n      'data-action': action\r\n    });\r\n    autoplayButton.innerHTML = autoplayHtmlStrings[0] + action + autoplayHtmlStrings[1] + txt;\r\n  }\r\n\r\n  function startAutoplay() {\r\n    setAutoplayTimer();\r\n\r\n    if (autoplayButton) {\r\n      updateAutoplayButton('stop', autoplayText[1]);\r\n    }\r\n  }\r\n\r\n  function stopAutoplay() {\r\n    stopAutoplayTimer();\r\n\r\n    if (autoplayButton) {\r\n      updateAutoplayButton('start', autoplayText[0]);\r\n    }\r\n  } // programaitcally play/pause the slider\r\n\r\n\r\n  function play() {\r\n    if (autoplay && !animating) {\r\n      startAutoplay();\r\n      autoplayUserPaused = false;\r\n    }\r\n  }\r\n\r\n  function pause() {\r\n    if (animating) {\r\n      stopAutoplay();\r\n      autoplayUserPaused = true;\r\n    }\r\n  }\r\n\r\n  function toggleAutoplay() {\r\n    if (animating) {\r\n      stopAutoplay();\r\n      autoplayUserPaused = true;\r\n    } else {\r\n      startAutoplay();\r\n      autoplayUserPaused = false;\r\n    }\r\n  }\r\n\r\n  function onVisibilityChange() {\r\n    if (doc.hidden) {\r\n      if (animating) {\r\n        stopAutoplayTimer();\r\n        autoplayVisibilityPaused = true;\r\n      }\r\n    } else if (autoplayVisibilityPaused) {\r\n      setAutoplayTimer();\r\n      autoplayVisibilityPaused = false;\r\n    }\r\n  }\r\n\r\n  function mouseoverPause() {\r\n    if (animating) {\r\n      stopAutoplayTimer();\r\n      autoplayHoverPaused = true;\r\n    }\r\n  }\r\n\r\n  function mouseoutRestart() {\r\n    if (autoplayHoverPaused) {\r\n      setAutoplayTimer();\r\n      autoplayHoverPaused = false;\r\n    }\r\n  } // keydown events on document\r\n\r\n\r\n  function onDocumentKeydown(e) {\r\n    e = getEvent(e);\r\n    var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\r\n\r\n    if (keyIndex >= 0) {\r\n      onControlsClick(e, keyIndex === 0 ? -1 : 1);\r\n    }\r\n  } // on key control\r\n\r\n\r\n  function onControlsKeydown(e) {\r\n    e = getEvent(e);\r\n    var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\r\n\r\n    if (keyIndex >= 0) {\r\n      if (keyIndex === 0) {\r\n        if (!prevButton.disabled) {\r\n          onControlsClick(e, -1);\r\n        }\r\n      } else if (!nextButton.disabled) {\r\n        onControlsClick(e, 1);\r\n      }\r\n    }\r\n  } // set focus\r\n\r\n\r\n  function setFocus(el) {\r\n    el.focus();\r\n  } // on key nav\r\n\r\n\r\n  function onNavKeydown(e) {\r\n    e = getEvent(e);\r\n    var curElement = doc.activeElement;\r\n\r\n    if (!hasAttr(curElement, 'data-nav')) {\r\n      return;\r\n    } // var code = e.keyCode,\r\n\r\n\r\n    var keyIndex = [KEYS.LEFT, KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE].indexOf(e.keyCode),\r\n        navIndex = Number(getAttr(curElement, 'data-nav'));\r\n\r\n    if (keyIndex >= 0) {\r\n      if (keyIndex === 0) {\r\n        if (navIndex > 0) {\r\n          setFocus(navItems[navIndex - 1]);\r\n        }\r\n      } else if (keyIndex === 1) {\r\n        if (navIndex < pages - 1) {\r\n          setFocus(navItems[navIndex + 1]);\r\n        }\r\n      } else {\r\n        navClicked = navIndex;\r\n        goTo(navIndex, e);\r\n      }\r\n    }\r\n  }\r\n\r\n  function getEvent(e) {\r\n    e = e || win.event;\r\n    return isTouchEvent(e) ? e.changedTouches[0] : e;\r\n  }\r\n\r\n  function getTarget(e) {\r\n    return e.target || win.event.srcElement;\r\n  }\r\n\r\n  function isTouchEvent(e) {\r\n    return e.type.indexOf('touch') >= 0;\r\n  }\r\n\r\n  function preventDefaultBehavior(e) {\r\n    e.preventDefault ? e.preventDefault() : e.returnValue = false;\r\n  }\r\n\r\n  function getMoveDirectionExpected() {\r\n    return getTouchDirection(toDegree(lastPosition.y - initPosition.y, lastPosition.x - initPosition.x), swipeAngle) === options.axis;\r\n  }\r\n\r\n  function onPanStart(e) {\r\n    if (running) {\r\n      if (preventActionWhenRunning) {\r\n        return;\r\n      } else {\r\n        onTransitionEnd();\r\n      }\r\n    }\r\n\r\n    if (autoplay && animating) {\r\n      stopAutoplayTimer();\r\n    }\r\n\r\n    panStart = true;\r\n\r\n    if (rafIndex) {\r\n      caf(rafIndex);\r\n      rafIndex = null;\r\n    }\r\n\r\n    var $ = getEvent(e);\r\n    events.emit(isTouchEvent(e) ? 'touchStart' : 'dragStart', info(e));\r\n\r\n    if (!isTouchEvent(e) && ['img', 'a'].indexOf(getLowerCaseNodeName(getTarget(e))) >= 0) {\r\n      preventDefaultBehavior(e);\r\n    }\r\n\r\n    lastPosition.x = initPosition.x = $.clientX;\r\n    lastPosition.y = initPosition.y = $.clientY;\r\n\r\n    if (carousel) {\r\n      translateInit = parseFloat(container.style[transformAttr].replace(transformPrefix, ''));\r\n      resetDuration(container, '0s');\r\n    }\r\n  }\r\n\r\n  function onPanMove(e) {\r\n    if (panStart) {\r\n      var $ = getEvent(e);\r\n      lastPosition.x = $.clientX;\r\n      lastPosition.y = $.clientY;\r\n\r\n      if (carousel) {\r\n        if (!rafIndex) {\r\n          rafIndex = raf(function () {\r\n            panUpdate(e);\r\n          });\r\n        }\r\n      } else {\r\n        if (moveDirectionExpected === '?') {\r\n          moveDirectionExpected = getMoveDirectionExpected();\r\n        }\r\n\r\n        if (moveDirectionExpected) {\r\n          preventScroll = true;\r\n        }\r\n      }\r\n\r\n      if ((typeof e.cancelable !== 'boolean' || e.cancelable) && preventScroll) {\r\n        e.preventDefault();\r\n      }\r\n    }\r\n  }\r\n\r\n  function panUpdate(e) {\r\n    if (!moveDirectionExpected) {\r\n      panStart = false;\r\n      return;\r\n    }\r\n\r\n    caf(rafIndex);\r\n\r\n    if (panStart) {\r\n      rafIndex = raf(function () {\r\n        panUpdate(e);\r\n      });\r\n    }\r\n\r\n    if (moveDirectionExpected === '?') {\r\n      moveDirectionExpected = getMoveDirectionExpected();\r\n    }\r\n\r\n    if (moveDirectionExpected) {\r\n      if (!preventScroll && isTouchEvent(e)) {\r\n        preventScroll = true;\r\n      }\r\n\r\n      try {\r\n        if (e.type) {\r\n          events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e));\r\n        }\r\n      } catch (err) {}\r\n\r\n      var x = translateInit,\r\n          dist = getDist(lastPosition, initPosition);\r\n\r\n      if (!horizontal || fixedWidth || autoWidth) {\r\n        x += dist;\r\n        x += 'px';\r\n      } else {\r\n        var percentageX = TRANSFORM ? dist * items * 100 / ((viewport + gutter) * slideCountNew) : dist * 100 / (viewport + gutter);\r\n        x += percentageX;\r\n        x += '%';\r\n      }\r\n\r\n      container.style[transformAttr] = transformPrefix + x + transformPostfix;\r\n    }\r\n  }\r\n\r\n  function onPanEnd(e) {\r\n    if (panStart) {\r\n      if (rafIndex) {\r\n        caf(rafIndex);\r\n        rafIndex = null;\r\n      }\r\n\r\n      if (carousel) {\r\n        resetDuration(container, '');\r\n      }\r\n\r\n      panStart = false;\r\n      var $ = getEvent(e);\r\n      lastPosition.x = $.clientX;\r\n      lastPosition.y = $.clientY;\r\n      var dist = getDist(lastPosition, initPosition);\r\n      let directionalDist = dist;\r\n\r\n      if (isRTL()) { // Reverse drag distance for RTL\r\n        directionalDist *= -1;\r\n    }\r\n\r\n      if (Math.abs(directionalDist)) {\r\n        // drag vs click\r\n        if (!isTouchEvent(e)) {\r\n          // prevent \"click\"\r\n          var target = getTarget(e);\r\n          addEvents(target, {\r\n            'click': function preventClick(e) {\r\n              preventDefaultBehavior(e);\r\n              removeEvents(target, {\r\n                'click': preventClick\r\n              });\r\n            }\r\n          });\r\n        }\r\n\r\n        if (carousel) {\r\n          rafIndex = raf(function () {\r\n            if (horizontal && !autoWidth) {\r\n              var indexMoved = -directionalDist * items / (viewport + gutter);\r\n              indexMoved = directionalDist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\r\n              index += indexMoved;\r\n            } else {\r\n              var moved = -(translateInit + directionalDist);\r\n\r\n              if (moved <= 0) {\r\n                index = indexMin;\r\n              } else if (moved >= slidePositions[slideCountNew - 1]) {\r\n                index = indexMax;\r\n              } else {\r\n                var i = 0;\r\n\r\n                while (i < slideCountNew && moved >= slidePositions[i]) {\r\n                  index = i;\r\n\r\n                  if (moved > slidePositions[i] && directionalDist < 0) {\r\n                    index += 1;\r\n                  }\r\n\r\n                  i++;\r\n                }\r\n              }\r\n            }\r\n\r\n            render(e, directionalDist);\r\n            events.emit(isTouchEvent(e) ? 'touchEnd' : 'dragEnd', info(e));\r\n          });\r\n        } else {\r\n          if (moveDirectionExpected) {\r\n            onControlsClick(e, directionalDist > 0 ? -1 : 1);\r\n          }\r\n        }\r\n      }\r\n    } // reset\r\n\r\n\r\n    if (options.preventScrollOnTouch === 'auto') {\r\n      preventScroll = false;\r\n    }\r\n\r\n    if (swipeAngle) {\r\n      moveDirectionExpected = '?';\r\n    }\r\n\r\n    if (autoplay && !animating) {\r\n      setAutoplayTimer();\r\n    }\r\n  } // === RESIZE FUNCTIONS === //\r\n  // (slidePositions, index, items) => vertical_conentWrapper.height\r\n\r\n\r\n  function updateContentWrapperHeight() {\r\n    var wp = middleWrapper ? middleWrapper : innerWrapper;\r\n    wp.style.height = slidePositions[index + items] - slidePositions[index] + 'px';\r\n  }\r\n\r\n  function getPages() {\r\n    var rough = fixedWidth ? (fixedWidth + gutter) * slideCount / viewport : slideCount / items;\r\n    return Math.min(Math.ceil(rough), slideCount);\r\n  }\r\n  /*\r\n   * 1. update visible nav items list\r\n   * 2. add \"hidden\" attributes to previous visible nav items\r\n   * 3. remove \"hidden\" attrubutes to new visible nav items\r\n   */\r\n\r\n\r\n  function updateNavVisibility() {\r\n    if (!nav || navAsThumbnails) {\r\n      return;\r\n    }\r\n\r\n    if (pages !== pagesCached) {\r\n      var min = pagesCached,\r\n          max = pages,\r\n          fn = showElement;\r\n\r\n      if (pagesCached > pages) {\r\n        min = pages;\r\n        max = pagesCached;\r\n        fn = hideElement;\r\n      }\r\n\r\n      while (min < max) {\r\n        fn(navItems[min]);\r\n        min++;\r\n      } // cache pages\r\n\r\n\r\n      pagesCached = pages;\r\n    }\r\n  }\r\n\r\n  function info(e) {\r\n    return {\r\n      container: container,\r\n      slideItems: slideItems,\r\n      navContainer: navContainer,\r\n      navItems: navItems,\r\n      controlsContainer: controlsContainer,\r\n      hasControls: hasControls,\r\n      prevButton: prevButton,\r\n      nextButton: nextButton,\r\n      items: items,\r\n      slideBy: slideBy,\r\n      cloneCount: cloneCount,\r\n      slideCount: slideCount,\r\n      slideCountNew: slideCountNew,\r\n      index: index,\r\n      indexCached: indexCached,\r\n      displayIndex: getCurrentSlide(),\r\n      navCurrentIndex: navCurrentIndex,\r\n      navCurrentIndexCached: navCurrentIndexCached,\r\n      pages: pages,\r\n      pagesCached: pagesCached,\r\n      sheet: sheet,\r\n      isOn: isOn,\r\n      event: e || {}\r\n    };\r\n  }\r\n\r\n  return {\r\n    version: '2.9.4',\r\n    getInfo: info,\r\n    events: events,\r\n    goTo: goTo,\r\n    play: play,\r\n    pause: pause,\r\n    isOn: isOn,\r\n    updateSliderHeight: updateInnerWrapperHeight,\r\n    refresh: initSliderTransform,\r\n    destroy: destroy,\r\n    rebuild: function () {\r\n      return tns(extend(options, optionsElements));\r\n    }\r\n  };\r\n};\r\n\r\nexports.tns = tns;\r\n","/// <reference path=\"../typings/niveax.d.ts\"/>\r\nimport {\r\n    // getCurrencyCode, \r\n    addLayer,\r\n    trackSliderMovement, \r\n    // productTeaserTrackingObject,\r\n    getLinkElementHref, \r\n    getClickedElementIndex,\r\n    trackTeaserClick\r\n} from '../ClassWithTracking/helpers';\r\n// import { isInViewPort } from '../helpers/DOMHelpers';\r\nimport {\r\n    //  debounce, \r\n    parseJSONSafe } from '../helpers/helperFunctions';\r\n\r\nexport default class NivTSlider {\r\n    private teaserListHome: NodeListOf<HTMLElement>;\r\n    private teaserListSmall: NodeListOf<HTMLElement>;\r\n    private trackingDataG4: TrackingData[];\r\n    private trackingSelector: HTMLElement;\r\n    options: { photo_size: string; navigation: string; };\r\n\r\n    constructor(public element: HTMLElement, public slider: any) {\r\n        if(window.NiveaX.IsUAEnabled) {\r\n            this.init();\r\n        }\r\n\r\n        this.trackingSelector = (this.element.closest('[data-tdata]') || this.element) as  HTMLElement;\r\n        this.trackingDataG4 = parseJSONSafe(this.trackingSelector.dataset.tdata);\r\n        this.options = {\r\n            photo_size: '[[GalleryAndSliderIneraction|{{media_size}}]]',\r\n\t\t\tnavigation: '[[GalleryAndSliderIneraction|{{event_type}}]]',\r\n        }\r\n    }\r\n\r\n    init() {\r\n        this.teaserListHome = this.element.querySelectorAll('.nx-slider__item[id]');\r\n        this.teaserListSmall = this.element.querySelectorAll('.tns-item');\r\n        \r\n        if (!this.teaserListHome.length && !this.teaserListSmall.length) {\r\n            return;\r\n        }\r\n\r\n        let sliderWrapper: HTMLElement = <HTMLElement>this.element.closest('.nx-stage__slider');\r\n\r\n        if (!!sliderWrapper) {\r\n            this.trackHomeSlider(sliderWrapper);\r\n        } else {\r\n            this.trackTeaserSlider(this.element);\r\n        }\r\n        \r\n    }\r\n\r\n    trackHomeSlider(selector: HTMLElement) {\r\n        let homeSliderWrapper: HTMLElement = <HTMLElement>selector.closest('.nx-stage');\r\n\r\n        homeSliderWrapper.addEventListener('click', (event) => {\r\n            let clickedElement: HTMLElement = <HTMLElement>event.target;\r\n\r\n            if (clickedElement.closest('.nx-controls__btn--prev')) {\r\n                trackSliderMovement('General Teaser Previous');\r\n\r\n            } else if (clickedElement.closest('.nx-controls__btn--next')) {\r\n                trackSliderMovement('General Teaser Next');\r\n                \r\n            } else if (clickedElement.closest('.tns-nav')) {\r\n                trackSliderMovement('General Teaser Dots');\r\n            } else {\r\n                document.addEventListener('nxtracking:slider:click', () => {\r\n                    trackTeaserClick('Teaser', 'Stage Teaser - Pos ' + getClickedElementIndex(this.teaserListHome, <HTMLElement>clickedElement.closest('.nx-slider__item')), getLinkElementHref(event, '.tns-slide-active .nx-stage__link'));\r\n                });\r\n            }\r\n        });\r\n\r\n        this.addTouchHandlersOnSlider('General Teaser Previous', 'General Teaser Next');\r\n    }\r\n\r\n    trackTeaserSlider(selector: HTMLElement) {\r\n        const hasProductTeasers: NodeListOf<HTMLElement> = selector.querySelectorAll('.nx-product-teaser');\r\n        \r\n        this.sliderTeaserClick(selector);\r\n\r\n        if(!hasProductTeasers.length) return;\r\n\r\n        // document.addEventListener('niveax:initProductTeaserTracking', () => {\r\n        //     this.isTeaserSliderInViewport(selector)\r\n        // });\r\n\r\n        // if(!window.NiveaX.isShopEnabled) {\r\n        //     this.isTeaserSliderInViewport(selector)\r\n        // }\r\n\r\n        // window.addEventListener('scroll', debounce(() => this.isTeaserSliderInViewport(selector), 500))\r\n    }\r\n\r\n    // protected isTeaserSliderInViewport(selector): void {\r\n    //     if (isInViewPort(selector)) {\r\n    //          this.sliderTeaserImpression(selector);\r\n    //     }\r\n    // }\r\n\r\n    // private sliderTeaserImpression(selector: HTMLElement) {\r\n    //     const allSliderProductTeasers: NodeListOf<HTMLElement> = selector.querySelectorAll('.nx-product-teaser');\r\n    //     const visibleSliderProductTeasers: NodeListOf<HTMLElement> = selector.querySelectorAll('.nx-product-teaser.tns-slide-active:not(.nx-product-shown)');\r\n    //     if (!visibleSliderProductTeasers.length || !allSliderProductTeasers.length) return;\r\n\r\n    //     const teaserArray = productTeaserTrackingObject(visibleSliderProductTeasers, true, allSliderProductTeasers);\r\n    //     this.productImpressionsPush(teaserArray);\r\n    // }\r\n\r\n    // private productImpressionsPush(teasers: Object[]) {\r\n    //     addLayer({\r\n    //         event: 'impressions',\r\n    //         ecommerce: {\r\n    //             currencyCode: getCurrencyCode(),\r\n    //             impressions: teasers\r\n    //         }\r\n    //     });\r\n    // }\r\n\r\n    private sliderTeaserClick(selector: HTMLElement) {\r\n        let sliderWrapper: HTMLElement = selector.closest('.tns-outer') as HTMLElement;\r\n        const sliderHeadline = this.getContentSliderHeadline(sliderWrapper);\r\n\r\n        sliderWrapper.addEventListener('click', (event) => {\r\n            let clickedElement: HTMLElement = event.target as HTMLElement;\r\n\r\n            if (clickedElement.nodeName === 'svg') {\r\n                clickedElement = clickedElement.parentElement;\r\n            }\r\n\r\n            if (clickedElement.nodeName === 'polyline') {\r\n                clickedElement = clickedElement.parentElement.parentElement;\r\n            }\r\n\r\n            if (clickedElement.dataset.controls === 'prev') {\r\n                trackSliderMovement('Click Previous', sliderHeadline);\r\n                // this.sliderTeaserImpression(selector);\r\n            } else if (clickedElement.dataset.controls === 'next') {\r\n                trackSliderMovement('Click Next', sliderHeadline);\r\n                // this.sliderTeaserImpression(selector);\r\n            } else if (clickedElement.closest('.tns-nav')) {\r\n                if (!window.NiveaX.isTouch) {\r\n                    trackSliderMovement('Click Dot', sliderHeadline);\r\n                    // this.sliderTeaserImpression(selector);\r\n                }\r\n            }\r\n        });\r\n\r\n        this.addTouchHandlersOnSlider('Click Previous', 'Click Next', sliderHeadline);\r\n\r\n        if (!!window.NiveaX.isTouch) {\r\n            this.trackTapDotEvent(sliderWrapper, '.tns-nav', 'Tap Dot', sliderHeadline);\r\n        }\r\n    }\r\n\r\n    getContentSliderHeadline(element: HTMLElement) {\r\n        const contentZone: HTMLElement = element.closest('.nx-u-section.nx-standard-teaser-slider, .nx-u-container') as HTMLElement;\r\n        let contentZoneHeadline: string = '';\r\n        if (contentZone) {\r\n            let contentZoneHeadlineElement = contentZone.querySelector('.nx-standard-teaser-slider__headline, .nx-u-section__headline, .nx-standard-teaser-slider__headline, h2');\r\n            if (contentZoneHeadlineElement) contentZoneHeadline = contentZoneHeadlineElement.innerHTML.trim();\r\n        }\r\n        return contentZoneHeadline;\r\n    }\r\n\r\n    trackTapDotEvent(selector: HTMLElement, dotsClassName: string, eventAction: string, sliderHeadline: string) {\r\n        selector.addEventListener('touchend', (event) => {\r\n            let clickedElement: HTMLElement = <HTMLElement>event.target;\r\n\r\n            if (clickedElement.closest(dotsClassName)) {\r\n                trackSliderMovement(eventAction, sliderHeadline);\r\n            }\r\n\r\n            // timeout required to wait until css animations finish\r\n            // setTimeout(() => this.sliderTeaserImpression(selector), 300);\r\n        });\r\n    }\r\n\r\n    addTouchHandlersOnSlider(eventActionPrevious: string, eventActionNext: string, sliderHeadline?: string) {\r\n        this.slider.events.on('touchEnd', (e) => { this.swipeDirection(this.slider, sliderHeadline) });\r\n        this.slider.events.on('dragEnd', (e) => { this.swipeDirection(this.slider, sliderHeadline) });\r\n    }\r\n\r\n    swipeDirection(event: any, sliderHeadline: string) {\r\n        event = event.getInfo();\r\n    \r\n        const lastIdx = event.indexCached,\r\n            currentIdx = event.index;\r\n\r\n        if (currentIdx === lastIdx) {\r\n            return;\r\n        }\r\n        \r\n        if (currentIdx > lastIdx) {\r\n            // this.swipeDirectionPrevious('Swipe Next', sliderHeadline);\r\n            this.trackSliderOnSwipe('swipe', 'Next');\r\n    \r\n        } else {\r\n            // trackSliderMovement('Swipe Previous', sliderHeadline);\r\n            this.trackSliderOnSwipe('swipe', 'Prev');\r\n        }\r\n\r\n        // this.sliderTeaserImpression(event.container);\r\n    }\r\n\r\n    swipeDirectionPrevious(eventActionPrevious, sliderHeadline: string) {\r\n        trackSliderMovement(eventActionPrevious, sliderHeadline);\r\n    }\r\n\r\n    private trackSliderOnSwipe(eventType: string, direction: string): void {\r\n        const trackingData = this.trackingDataG4?.filter(item => item.Rule.includes(direction)).shift(),\r\n            eventParams = trackingData?.Tevent.parameters,\r\n            photo_size = this.trackingSelector.classList.contains('nx-product-zoom') ? 'enlarged': 'standard';\r\n\r\n        if(eventParams && Object.keys(eventParams)) {\r\n            if(eventParams?.navigation == this.options.navigation) {\r\n                eventParams.navigation = eventType\r\n            }\r\n\r\n            if(eventParams?.photo_size == this.options.photo_size) {\r\n                eventParams.photo_size = photo_size\r\n            }\r\n        }\r\n        \r\n        trackingData && addLayer(trackingData.Tevent)\r\n    }\r\n}","/// <reference path=\"../typings/tiny-slider.d.ts\"/>\r\n\r\nimport {\r\n    addClass,\r\n    removeClasses,\r\n    isVideoPlaying,\r\n    isVideoAutoplay,\r\n} from '../helpers/DOMHelpers';\r\n\r\nimport {\r\n    loadMovieVideoLazy$,\r\n} from '../helpers/reactiveHelpers';\r\n\r\nimport { tns } from '../libs/tiny-slider-2.9.4';\r\nimport { copyObject, getYouTubeVideoIdFromUrl } from '../helpers/helperFunctions';\r\nimport NivTSlider from './NivTSlider';\r\n\r\nconst moduleSelector = '[data-module=\"Slider\"]';\r\n\r\nconst defaultSliderOptions: TinySliderSettings = {\r\n    container: '[data-module=\"Slider\"]',\r\n    loop: false,\r\n    mouseDrag: true,\r\n    gutter: 14,\r\n    edgePadding: 10,\r\n    responsive: {\r\n        136: {\r\n            items: 1,\r\n            gutter: 10,\r\n        },\r\n        768: {\r\n            items: 2,\r\n            gutter: 14,\r\n        },\r\n        1024: {\r\n            items: 3,\r\n            gutter: 14,\r\n            edgePadding: 0,\r\n        },\r\n        1280: {\r\n            gutter: 18,\r\n        }\r\n    },\r\n    swipeAngle: 36,\r\n    speed: 400,\r\n    controlsText: ['prev', 'next'],\r\n    slideBy: 'page',\r\n    preventScrollOnTouch: 'auto',\r\n    lazyload: true,\r\n    controlsPosition: 'bottom'\r\n};\r\n\r\nclass Slider {\r\n    private observer: IntersectionObserver;\r\n    private youTubeUrls: string[] = [];\r\n    protected options: LazyTinySliderSettings;\r\n    public slider: any;\r\n    private readonly _allSliderItems: HTMLElement[];\r\n    protected get allSliderItems(): HTMLElement[] {\r\n        return this._allSliderItems;\r\n    }\r\n\r\n    static setup(selector: string = moduleSelector): void {\r\n        Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n            new Slider(element);\r\n            element.dataset.moduleInitialized = 'true';\r\n        });\r\n    }\r\n\r\n    constructor(public element: HTMLElement, options = copyObject(defaultSliderOptions)) {\r\n        this.element = element;\r\n        this.options = this.getSliderOptions(options);\r\n        this._allSliderItems = Array.from(this.element.children) as HTMLElement[];\r\n\r\n        if (this.hasChildren()) {\r\n            this.init();\r\n        }\r\n    }\r\n\r\n    protected hasChildren(): boolean {\r\n        return this.element.children.length > 0;\r\n    }\r\n\r\n    protected init(): void {\r\n        this.slider = tns(this.options);\r\n\r\n        new NivTSlider(this.element, this.slider);\r\n\r\n        const layoutVariant = this.element.getAttribute('data-layout-variant');\r\n        if (['small', 'middy', 'mini'].includes(layoutVariant)) this.initIntersectionObserver();\r\n\r\n        this.preventBrowserDragAndDrop()\r\n            .updateControls()\r\n            .addHandlersOnSlider()\r\n            .initTracking();      \r\n\r\n        const youTubeElements = this.sliderInfo?.container?.querySelectorAll('[data-module=\"YouTube\"]');\r\n        if(youTubeElements) this.youTubeUrls = Array.from(youTubeElements).map(vidContainer => vidContainer.getAttribute('data-video-url'));\r\n    }\r\n\r\n    private initIntersectionObserver() {\r\n        const observerOptions = {\r\n            root: null,\r\n            rootMargin: \"0px\",\r\n            threshold: 0.5,\r\n        };\r\n\r\n        this.observer = new IntersectionObserver((entries, observer) => {\r\n            entries.forEach((entry) => {\r\n                if (entry.isIntersecting) {\r\n                    entry.target.querySelector(\"a\")?.setAttribute(\"tabindex\", \"0\");\r\n                    entry.target.querySelector(\".nx-btn\")?.setAttribute(\"tabindex\", \"0\");\r\n                } else {\r\n                    entry.target.querySelector(\"a\")?.setAttribute(\"tabindex\", \"-1\");\r\n                    entry.target.querySelector(\".nx-btn\")?.setAttribute(\"tabindex\", \"-1\");\r\n                }\r\n            });\r\n        }, observerOptions);\r\n    }\r\n\r\n    private updateControls() {\r\n        const prevButton = <HTMLButtonElement>this.slider.getInfo().prevButton,\r\n            nextButton = <HTMLButtonElement>this.slider.getInfo().nextButton,\r\n            controlsDiv = <HTMLElement>this.slider.getInfo().controlsContainer;\r\n\r\n        this.updateKeyboardAccessibility();\r\n      \r\n        if(prevButton && nextButton) {\r\n            controlsDiv?.removeAttribute('tabindex');\r\n            prevButton.setAttribute(\"tabIndex\", \"0\");\r\n            nextButton.setAttribute(\"tabIndex\", \"0\")\r\n\r\n            addClass(prevButton, 'nx-controls__btn--prev')\r\n            addClass(nextButton, 'nx-controls__btn--next')\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    private preventClickOnDrag(): Slider {\r\n        let wasDraged: boolean = false;\r\n        const onDragEnd = () => {\r\n            wasDraged = true;\r\n        };\r\n        const onMouseUp = (e: Event) => {\r\n            if (wasDraged) {\r\n                e.preventDefault();\r\n            } else {\r\n                document.dispatchEvent(new CustomEvent(\"nxtracking:slider:click\"));\r\n            };\r\n            this.element.removeEventListener('mouseup', onMouseUp);\r\n            this.slider.events.off('dragMove', onDragEnd);\r\n            wasDraged = false;\r\n        };\r\n\r\n        this.slider.events.on('dragMove', onDragEnd);\r\n        this.element.addEventListener('mouseup', onMouseUp);\r\n\r\n        return this;\r\n    }\r\n\r\n    private preventBrowserDragAndDrop(): Slider {\r\n        this.element.addEventListener('mousedown', (e) => {\r\n            const isInItem = (<HTMLElement>e.target).closest('.tns-item:not(.tns-item--clickable)');\r\n            this.preventClickOnDrag();\r\n\r\n            if (isInItem) {\r\n                e.preventDefault();\r\n            }\r\n        });\r\n\r\n        return this;\r\n    }\r\n\r\n    private getSliderOptions(defOptions: any): any {\r\n        let optionsStringFromData = this.element.dataset.options,\r\n            twoColObject = {},\r\n            optionsFromData,\r\n            optionObj;\r\n\r\n        defOptions.container = this.element;\r\n\r\n        if (optionsStringFromData) {\r\n            try {\r\n                optionsFromData = JSON.parse(optionsStringFromData);\r\n            } catch (e) {\r\n                console.warn(`Bad data-options for Slider`);\r\n            }\r\n        }\r\n\r\n        typeof optionsFromData === 'object'\r\n            ? optionObj = Object.assign(defOptions, optionsFromData)\r\n            : optionObj = Object.assign(defOptions);\r\n\r\n        if (this.element.closest('.nx-two-columns__half-col') && !this.element.closest('.nx-pdp-two-columns')) {\r\n            twoColObject = {\r\n                responsive: {\r\n                    136: {\r\n                        \"items\": optionObj.responsive && optionObj.responsive[136] ? optionObj.responsive[136].items : 1,\r\n                        \"gutter\": 10,\r\n                    },\r\n                    768: {\r\n                        \"items\": optionObj.responsive && optionObj.responsive[136] ? optionObj.responsive[768].items : 2,\r\n                        \"gutter\": 14,\r\n                    },\r\n                    1024: {\r\n                        \"items\": optionObj.responsive && optionObj.responsive[136] ? optionObj.responsive[136].items : 1,\r\n                        \"gutter\": 14,\r\n                        \"edgePadding\": 0,\r\n                    },\r\n                    1280: {\r\n                        \"gutter\": 18,\r\n                    }\r\n                }\r\n            };\r\n        }\r\n\r\n        return typeof optionsFromData === 'object'\r\n            ? Object.assign(defOptions, optionsFromData, twoColObject)\r\n            : Object.assign(defOptions, twoColObject);\r\n    }\r\n\r\n    private addHandlersOnSlider(): Slider {\r\n        this.slider.events.on('indexChanged', this.onIndexChange());\r\n\r\n        if (!this.options.loop) {\r\n            this.slider.events.on('touchEnd', this.onSlideEnd.bind(this));\r\n            this.slider.events.on('dragEnd', this.onSlideEnd.bind(this));\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    private initTracking(): Slider {\r\n        document.dispatchEvent(new CustomEvent('NiveaBasicTracking:reInitHandlers'));\r\n        return this;\r\n    }\r\n\r\n    private onIndexChange(): () => void {\r\n        let { index: lastIndex } = this.sliderInfo;\r\n\r\n        return () => {\r\n            const { index, slideItems, slideCount } = this.sliderInfo;\r\n\r\n            Array.from(slideItems).forEach((s: HTMLElement) => removeClasses(s, 'tns-item--next', 'tns-item--prev'));\r\n\r\n            if (lastIndex === slideCount && index === 0 || index > lastIndex && lastIndex >= 0) {\r\n                this.activeSlides.forEach(s => addClass(s, 'tns-item--next'));\r\n            } else {\r\n                this.activeSlides.forEach(s => addClass(s, 'tns-item--prev'));\r\n            }\r\n\r\n            lastIndex = index;\r\n\r\n            this.pauseAllYoutubeVideosInSlider();\r\n            this.updateKeyboardAccessibility();\r\n        };\r\n    }\r\n\r\n    private updateKeyboardAccessibility() {\r\n        this.setNavsAccessibilityHidden(this.sliderInfo.navItems);\r\n        this.setFirstAndLastItemKeyboardAccessibility(this.activeSlides);\r\n    }\r\n\r\n    private setFirstAndLastItemKeyboardAccessibility(activeSlideItems: HTMLElement[]) {\r\n        if (!this.observer) return;\r\n\r\n        const firstItem = activeSlideItems[0];\r\n        const lastItem = activeSlideItems[activeSlideItems.length - 1];\r\n\r\n        if (!this.isObserved(firstItem)) this.observer.observe(firstItem);\r\n        if (!this.isObserved(lastItem)) this.observer.observe(lastItem);\r\n    }\r\n\r\n    private isObserved(element) {\r\n        const observedElements = this.observer.takeRecords().map((entry) => entry.target);\r\n        return observedElements.includes(element);\r\n    }\r\n\r\n    private setNavsAccessibilityHidden(navItems: HTMLCollection) {\r\n        if (!navItems) return;\r\n        const activeNav = Array.from(navItems).filter(s => s.classList.contains('tns-nav-active'));\r\n        activeNav ? activeNav[0].setAttribute('tabindex', \"-1\") : \"\";\r\n    }\r\n\r\n    private pauseAllYoutubeVideosInSlider(): Slider {\r\n        if (!this.youTubeUrls.length) return this;\r\n        \r\n        this.youTubeUrls.forEach(url => {            \r\n            const youTubeVideoId = getYouTubeVideoIdFromUrl(url);\r\n            window.NiveaX.pauseYouTubeVideoById(youTubeVideoId);\r\n        });\r\n\r\n        return this;\r\n    }\r\n\r\n    private onSlideEnd(event: any): void {\r\n        const lastIdx = event.indexCached,\r\n            currentIdx = event.index;\r\n\r\n        if (currentIdx === lastIdx) {\r\n            return;\r\n        }\r\n\r\n        if (currentIdx > lastIdx) {\r\n            this.slider.goTo(lastIdx + event.slideBy);\r\n        } else {\r\n            this.slider.goTo(lastIdx - event.slideBy);\r\n        }\r\n    }\r\n\r\n    protected get activeSlides(): HTMLElement[] {\r\n        return <HTMLElement[]>Array.from(this.sliderInfo.slideItems).filter(s => s.classList.contains('tns-slide-active'));\r\n    }\r\n\r\n    get sliderInfo(): TinySliderInfo {\r\n        const infoSlider = this.slider.getInfo();\r\n        \r\n        if (!this.options.mode && this.options.mode === \"gallery\") {\r\n            infoSlider.index = infoSlider.index - infoSlider.cloneCount;\r\n            infoSlider.indexCached = infoSlider.indexCached - infoSlider.cloneCount;\r\n        }\r\n\r\n        infoSlider.sliderOptions = this.options;\r\n\r\n        return infoSlider;\r\n    }\r\n\r\n    get sliderIndex(): number {\r\n        return this.slider.index;\r\n    }\r\n\r\n    destroy(): Slider {\r\n        this.slider.destroy();\r\n        return this;\r\n    }\r\n\r\n    rebuild(): Slider {\r\n        this.slider = this.slider.rebuild();\r\n        return this;\r\n    }\r\n\r\n    on(eventName: String, callback: (e) => any): Slider {\r\n        this.slider.events.on(eventName, callback);\r\n        return this;\r\n    }\r\n\r\n    goTo(dest: number | 'prev' | 'next' | 'first' | 'last'): Slider {\r\n        this.slider.goTo(dest);\r\n        return this;\r\n    }\r\n}\r\n\r\nexport default class LazySlider extends Slider {\r\n    private video: HTMLVideoElement[];\r\n    events: any;\r\n\r\n    constructor(element: HTMLElement, options = copyObject(defaultSliderOptions)) {\r\n        super(element, options);\r\n\r\n        if (this.hasChildren()) {\r\n            this.initLazy();\r\n        }\r\n    }\r\n\r\n    protected initLazy(): LazySlider {\r\n        this.video = Array.from(this.sliderInfo.container.querySelectorAll('video[data-src]'));\r\n        this.loadVideoForActiveSlides();\r\n        this.loadVideoOnIndexChange();\r\n\r\n        return this;\r\n    }\r\n\r\n    private loadVideoOnIndexChange(): LazySlider {\r\n        this.slider.events.on('indexChanged', () => {\r\n            this.loadMovieVideo();\r\n        });\r\n\r\n        return this;\r\n    }\r\n\r\n    private loadMovieVideo(): LazySlider {\r\n        this.pauseVideoFoNotActiveSlides();\r\n        this.loadVideoForActiveSlides();\r\n\r\n        return this;\r\n    }\r\n\r\n    private loadVideoForActiveSlides(): LazySlider {\r\n        let loadedVideo = Array.from(this.sliderInfo.container.querySelectorAll('video[src]'));\r\n        let notActiveVideo = loadedVideo.filter(vid => vid.closest('.tns-slide-active') === null && isVideoPlaying(vid));\r\n\r\n        notActiveVideo.filter(vid => {\r\n            const video: HTMLVideoElement = <HTMLVideoElement>vid;\r\n            video.pause();\r\n        });\r\n\r\n        loadedVideo = loadedVideo.filter(loadedVideo => {\r\n            if (loadedVideo.closest('.tns-slide-active')) {\r\n                const video: HTMLVideoElement = <HTMLVideoElement>loadedVideo;\r\n                if (video.closest('.nx-story-stage')) video.currentTime = 0;\r\n                if(isVideoAutoplay(video)) video.play();\r\n                \r\n                return false;\r\n            }\r\n\r\n            \r\n            \r\n            return loadedVideo;\r\n        });\r\n\r\n        this.video = this.video.filter(video => {\r\n            if (video.closest('.tns-slide-active')) {\r\n                loadMovieVideoLazy$(video).subscribe();\r\n                const currentVideo: HTMLVideoElement = <HTMLVideoElement>video,\r\n                    isAutoHeightActive = this.sliderInfo.sliderOptions?.autoHeight === true;\r\n                currentVideo.play();\r\n                isAutoHeightActive && currentVideo.addEventListener('loadedmetadata', () => this.slider.updateSliderHeight());\r\n                return false;\r\n            }\r\n\r\n            return video;\r\n        });\r\n\r\n        return this;\r\n    }\r\n\r\n    private pauseVideoFoNotActiveSlides() {\r\n        let notActiveVideo = Array.from(this.sliderInfo.container.querySelectorAll('video[src]')).filter(vid => vid.closest('.tns-slide-active') === null && isVideoPlaying(vid));\r\n\r\n        notActiveVideo.filter(vid => {\r\n            const video: HTMLVideoElement = <HTMLVideoElement>vid;\r\n            video.pause();\r\n        });\r\n    }\r\n}\r\n\r\n// Hot Module Replacement\r\nif (module.hot) {\r\n    let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element.parentNode, nodeOrigin: element.parentNode.cloneNode(true) }));\r\n\r\n    Slider.setup(moduleSelector);\r\n\r\n    module.hot.accept(() => {\r\n        Slider.setup(moduleSelector);\r\n    });\r\n    module.hot.dispose(() => {\r\n        nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n    });\r\n} else {\r\n    Slider.setup(moduleSelector);\r\n}"],"names":["_typeof","o","Symbol","iterator","constructor","prototype","win$1","window","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","win","caf","cancelAnimationFrame","mozCancelAnimationFrame","id","clearTimeout","extend","obj","name","copy","target","arguments","i","length","undefined","checkStorageValue","value","indexOf","JSON","parse","setLocalStorage","storage","key","access","setItem","e","getBody","doc","document","body","createElement","fake","docElement","documentElement","setFakeBody","docOverflow","style","overflow","background","appendChild","resetFakeBody","remove","offsetHeight","addCSSRule","sheet","selector","rules","index","insertRule","addRule","getCssRulesLength","cssRules","forEach","arr","callback","scope","l","call","classListSupport","hasClass","el","str","classList","contains","className","addClass","add","removeClass","replace","hasAttr","attr","hasAttribute","getAttr","getAttribute","isNodeList","item","setAttrs","els","attrs","Array","Object","toString","setAttribute","removeAttrs","attrLength","j","removeAttribute","arrayFromNodeList","nl","push","hideElement","forceHide","display","showElement","isVisible","getComputedStyle","whichProperty","props","Props","charAt","toUpperCase","substr","prefix","prop","getEndProperty","propIn","propOut","endProp","test","toLowerCase","supportsPassive","opts","defineProperty","get","addEventListener","passiveOption","passive","addEvents","preventScrolling","option","removeEvents","removeEventListener","Events","topics","on","eventName","fn","this","off","splice","emit","data","type","keys","object","hasOwnProperty","Element","parentNode","removeChild","exports","tns","options","container","mode","axis","items","gutter","edgePadding","fixedWidth","autoWidth","viewportMax","slideBy","center","controls","controlsPosition","controlsText","controlsContainer","prevButton","nextButton","nav","navPosition","navContainer","navAsThumbnails","arrowKeys","speed","autoplay","autoplayPosition","autoplayTimeout","autoplayDirection","autoplayText","autoplayHoverPause","autoplayButton","autoplayButtonOutput","autoplayResetOnVisibility","animateIn","animateOut","animateNormal","animateDelay","loop","rewind","autoHeight","responsive","lazyload","lazyloadSelector","touch","mouseDrag","swipeAngle","nested","preventActionWhenRunning","preventScrollOnTouch","freezable","onInit","useLocalStorage","nonce","KEYS","ENTER","SPACE","LEFT","RIGHT","tnsStorage","localStorageAccess","browserInfo","navigator","userAgent","uid","Date","localStorage","getItem","removeItem","CALC","div","result","val","vals","width","offsetWidth","calc","PERCENTAGELAYOUT","supported","wrapper","outer","innerHTML","Math","abs","getBoundingClientRect","left","children","count","percentageLayout","CSSMQ","matchMedia","msMatchMedia","position","rule","styleSheet","cssText","createTextNode","currentStyle","mediaquerySupport","TRANSFORM","HAS3DTRANSFORMS","tf","has3d","cssTF","slice","insertBefore","getPropertyValue","has3DTransforms","TRANSITIONDURATION","TRANSITIONDELAY","ANIMATIONDURATION","ANIMATIONDELAY","TRANSITIONEND","ANIMATIONEND","supportConsoleWarn","console","warn","tnsList","optionsElements","querySelector","nodeName","carousel","responsiveTem","updateOptions","middleWrapper","breakpointZone","horizontal","outerWrapper","innerWrapper","containerParent","containerHTML","outerHTML","slideItems","from","filter","node","tagName","slideCount","windowWidth","getWindowWidth","isOn","setBreakpointZone","slidePositions","itemsMax","media","getOption","viewport","getViewportWidth","floor","fixedWidthViewportWidth","slideItemsOut","cloneCount","bp","tem","ceil","min","apply","max","getItemsMax","hasOption","slideCountNew","hasRightDeadZone","rightBoundary","getRightBoundary","updateIndexBeforeTransform","transformAttr","transformPrefix","transformPostfix","getIndexMax","getStartIndex","indexCached","getCurrentSlide","imgsComplete","liveregionCurrent","indexMin","indexMax","moveDirectionExpected","running","events","newContainerClasses","slideId","tnsId","disable","disabled","freeze","getFreeze","frozen","controlsEvents","onControlsClick","getEvent","keyIndex","keyCode","navEvents","onTransitionEnd","getTarget","navIndex","navClicked","Number","targetIndexBase","pages","goTo","navCurrentIndex","animating","stopAutoplay","curElement","activeElement","setFocus","navItems","hoverEvents","stopAutoplayTimer","autoplayHoverPaused","setAutoplayTimer","visibilityEvent","hidden","autoplayVisibilityPaused","docmentKeydownEvent","touchEvents","onPanStart","onPanMove","onPanEnd","dragEvents","hasControls","hasNav","hasAutoplay","hasTouch","hasMouseDrag","slideActiveClass","slideClonedClass","imgCompleteClass","imgEvents","imgLoaded","img","imgCompleted","preventScroll","prevIsButton","nextIsButton","controlsContainerHTML","prevButtonHTML","nextButtonHTML","navContainerHTML","getPages","pagesCached","getCurrentNavIndex","navCurrentIndexCached","navActiveClass","navStr","navStrCurrent","autoplayTimer","autoplayUserPaused","autoplayButtonHTML","autoplayHtmlStrings","translateInit","rafIndex","initPosition","lastPosition","panStart","getDist","a","b","x","y","resetVariblesWhenDisable","fragmentBefore","createDocumentFragment","fragmentAfter","num","cloneFirst","cloneNode","firstChild","cloneLast","initStructure","fontSize","slide","marginLeft","getSlideMarginLeft","getTransitionDurationStyle","getInnerWrapperStyles","getContainerWidth","getSlideWidthStyle","getSlideGutterStyle","getAnimationDurationStyle","parseInt","middleWrapperStr","innerWrapperStr","containerStr","slideStr","itemsBP","fixedWidthBP","speedBP","edgePaddingBP","autoHeightBP","gutterBP","initSheet","initSliderTransform","updateIndex","leftEdge","rightEdge","transformCore","element","postfix","to","duration","tick","unit","positionTick","resetDuration","doContainerTransform","getContainerTransformValue","moveElement","updateContentWrapperHeight","eve","animateSlide","version","getInfo","info","play","startAutoplay","pause","updateSliderHeight","updateInnerWrapperHeight","refresh","destroy","ownerNode","onResize","toggleAutoplay","clearInterval","htmlList","prevEl","previousElementSibling","parentEl","nextElementSibling","firstElementChild","rebuild","condition","ind","getAbsIndex","absIndex","innerWidth","clientWidth","getInsertPosition","pos","getClientWidth","rect","right","gap","ww","edgePaddingTem","gutterTem","fixedWidthTem","speedTem","gutterTemUnit","itemsTem","dividend","getCSSPrefix","substring","imgs","querySelectorAll","src","imgsLoadedCheck","getImageArray","initSliderTransformStyleCheck","doContainerTransformSilent","initTools","initEvents","stylesApplicationCheck","initSliderTransformCore","setSlidePositions","updateSlideStatus","insertAdjacentHTML","getLiveRegionStr","txt","navHtml","hiddenStr","updateNavVisibility","isButton","updateControlsStatus","disableUI","resizeTasks","doAutoHeight","doLazyLoad","disableSlider","freezeSlider","additionalUpdates","bpChanged","breakpointZoneTem","needContainerTransform","indChanged","itemsChanged","disableTem","freezeTem","arrowKeysTem","controlsTem","navTem","touchTem","mouseDragTem","autoplayTem","autoplayHoverPauseTem","autoplayResetOnVisibilityTem","indexTem","autoHeightTem","controlsTextTem","centerTem","autoplayTextTem","classN","enableUI","enableSlider","margin","unfreezeSlider","height","html","len","updateLiveRegion","updateGallerySlidePositions","deleteRule","removeRule","removeCSSRule","vp","getVisibleSlideRange","start","end","rangestart","rangeend","parseFloat","point","cell","arg","stopPropagation","srcset","imgSelector","complete","navPrev","navCurrent","updateNavStatus","getMaxSlideHeight","slideStart","slideRange","heights","maxHeight","wp","attr2","base","range","getLowerCaseNodeName","isAriaDisabled","disEnableElement","disablePrev","disableNext","prevDisabled","nextDisabled","getCenterGap","isRTL","denominator","number","classOut","classIn","isOut","render","sliderMoved","strTrans","event","propertyName","targetIndex","indexGap","isNaN","factor","dir","passEventObject","rtlDir","targetIn","setInterval","updateAutoplayButton","action","focus","isTouchEvent","changedTouches","srcElement","preventDefaultBehavior","preventDefault","returnValue","getMoveDirectionExpected","angle","atan2","PI","direction","$","clientX","clientY","panUpdate","cancelable","err","dist","directionalDist","preventClick","indexMoved","moved","rough","displayIndex","NivTSlider","slider","NiveaX","IsUAEnabled","init","trackingSelector","closest","trackingDataG4","dataset","tdata","photo_size","navigation","teaserListHome","teaserListSmall","sliderWrapper","trackHomeSlider","trackTeaserSlider","clickedElement","addTouchHandlersOnSlider","hasProductTeasers","sliderTeaserClick","sliderHeadline","getContentSliderHeadline","parentElement","isTouch","trackTapDotEvent","contentZone","contentZoneHeadline","contentZoneHeadlineElement","trim","dotsClassName","eventAction","eventActionPrevious","eventActionNext","swipeDirection","lastIdx","currentIdx","trackSliderOnSwipe","swipeDirectionPrevious","eventType","trackingData","Rule","includes","shift","eventParams","Tevent","parameters","moduleSelector","defaultSliderOptions","Slider","allSliderItems","_allSliderItems","setup","moduleInitialized","youTubeUrls","getSliderOptions","hasChildren","layoutVariant","initIntersectionObserver","preventBrowserDragAndDrop","updateControls","addHandlersOnSlider","initTracking","youTubeElements","sliderInfo","map","vidContainer","observer","IntersectionObserver","entries","entry","isIntersecting","root","rootMargin","threshold","controlsDiv","updateKeyboardAccessibility","preventClickOnDrag","wasDraged","onDragEnd","onMouseUp","dispatchEvent","CustomEvent","isInItem","defOptions","optionsFromData","optionObj","optionsStringFromData","twoColObject","assign","onIndexChange","onSlideEnd","bind","lastIndex","s","activeSlides","pauseAllYoutubeVideosInSlider","setNavsAccessibilityHidden","setFirstAndLastItemKeyboardAccessibility","activeSlideItems","firstItem","lastItem","isObserved","observe","takeRecords","activeNav","url","youTubeVideoId","pauseYouTubeVideoById","infoSlider","sliderOptions","sliderIndex","dest","LazySlider","super","initLazy","video","loadVideoForActiveSlides","loadVideoOnIndexChange","loadMovieVideo","pauseVideoFoNotActiveSlides","loadedVideo","vid","currentTime","subscribe","currentVideo","isAutoHeightActive"],"sourceRoot":""}